Получить строковое значение Enum в Twincat 3

В Twincat 3 у меня есть Enum, подобный этому:

TYPE ENUM_FUNCTIONS :
(
EMPTY                       :=0,    
MOTOR_SPEED_INPUT_1         :=1,
MOTOR_SPEED_INPUT_2         :=2,
MAIN_SHAFT_SPEED_MONITOR_3  :=3,
MAIN_SHAFT_SPEED_MONITOR_1  :=4,
MAIN_SHAFT_SPEED_MONITOR_2  :=5
);
END_TYPE

Есть ли способ получить строковое значение Enum??

Например, используйте ENUM_FUNCTIONS[5] и получите значение MAIN_SHAFT_SPEED_MONITOR_2.


person Adrian Garcia    schedule 13.10.2020    source источник


Ответы (1)


Да. См. здесь, как сделать это (доступно только начиная с TwinCAT 3.1.4024.x или CODESYS 3.5.14.0)

Короче говоря, TL;DR, используйте атрибут to_string в функции Enum и TO_STRING, чтобы получить строку:

{attribute 'to_string'}
TYPE ENUM_FUNCTIONS :
...
END_TYPE

myEnum: ENUM_FUNCTIONS;
str: STRING := TO_STRING(myEnum);
person Jakob    schedule 13.10.2020
comment
Как мне получить строку в позиции 5 Enum?? - person Adrian Garcia; 15.10.2020
comment
e: ENUM_FUNCTIONS := 4; str: STRING := TO_STRING(e); Имейте в виду, что это верно только если вы не указываете значения членов перечисления вручную , потому что по умолчанию первое из них будет равно 0, затем 1, 2 и так далее! - person Guiorgy; 15.10.2020
comment
Забыл упомянуть, но если вы получите какую-либо ошибку при попытке e: ENUM_FUNCTIONS := 4;, убедитесь, что вы не используете {attribute 'strict'} в своем перечислении! - person Guiorgy; 15.10.2020