AlbertDerKleine
Level-1
- Beiträge
- 1
- Reaktionspunkte
- 0
Hallo zusammen,
ich arbeite mit TwinCAT 3 und habe einen Farbtyp als Enumeration definiert. Nun habe ich einen String (z.B. "rot") und möchte diesen direkt in den entsprechenden Enum-Wert (E_COLOR_TYPE.rot) umwandeln. Meine Lösung wäre eine Funktion mit einer einfachen IF-ELSIF-Anweisung, die jeden Enum-Wert (umgewandelt in einen String) mit dem gegebenen String vergleicht (siehe unten). Ich denke, das ist nicht die eleganteste Lösung. Gibt es in TwinCAT 3 eingebaute Funktionen, die dies ermöglichen, oder was wäre der beste Workaround eurer Meinung nach?
Also so etwas wie:
eColor := STRING_TO_ENUM(sColorExample);
Vielen Dank im Voraus für eure Unterstützung!
My Current Solution:
ich arbeite mit TwinCAT 3 und habe einen Farbtyp als Enumeration definiert. Nun habe ich einen String (z.B. "rot") und möchte diesen direkt in den entsprechenden Enum-Wert (E_COLOR_TYPE.rot) umwandeln. Meine Lösung wäre eine Funktion mit einer einfachen IF-ELSIF-Anweisung, die jeden Enum-Wert (umgewandelt in einen String) mit dem gegebenen String vergleicht (siehe unten). Ich denke, das ist nicht die eleganteste Lösung. Gibt es in TwinCAT 3 eingebaute Funktionen, die dies ermöglichen, oder was wäre der beste Workaround eurer Meinung nach?
Also so etwas wie:
eColor := STRING_TO_ENUM(sColorExample);
Vielen Dank im Voraus für eure Unterstützung!
My Current Solution:
Code:
// DUT_ENUM
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE E_COLOR :
(
none := 0,
blue := 1,
red := 2,
green := 3
);
END_TYPE
Code:
// POU_FUN
FUNCTION STRING_TO_eColor : E_COLOR
VAR_INPUT
sColor : STRING;
END_VAR
------------------------------------------------------------
IF sColor = TO_STRING(E_COLOR.green) THEN
STRING_TO_eColor := E_COLOR.green;
ELSIF sColor = TO_STRING(E_COLOR.red) THEN
STRING_TO_eColor := E_COLOR.red;
ELSIF sColor = TO_STRING(E_COLOR.blue) THEN
STRING_TO_eColor := E_COLOR.blue;
ELSE
STRING_TO_eColor := E_COLOR.none;
END_IF