Один из вариантов — использовать вместо этого перечисления. Сначала вам нужно определить перечисление как тип. Это перечисление, в свою очередь, может быть любым примитивным типом данных, который вы хотите. Если вы добавите прагму «qualified_only», вы можете сделать код более элегантным. Скажем, например, вы определяете новый тип как:
{attribute 'qualified_only'}
TYPE E_State :
(
A := 0,
B := 1,
C := 2
) USINT;
END_TYPE
Вы в основном говорите здесь, что это перечисление, которое займет 1 байт пространства (поскольку базовый тип — USINT), и что, если вы хотите использовать перечисление, ему должно предшествовать имя перечисление (в данном случае "E_State"). Обратите внимание, что вам не нужно явно объявлять числа здесь. Если вы не запишете никаких чисел, компилятор автоматически примет первое за ноль и добавит единицу к каждому последующему. Так что это тоже будет работать:
{attribute 'qualified_only'}
TYPE E_State :
(
A,
B,
C
) USINT;
END_TYPE
Вам даже не нужно объявлять базовый тип. Если вы ничего не объявляете (поэтому не пишете USINT выше), компилятор автоматически предполагает, что это INT.
Использование этого в переключателе в программе или функциональном блоке будет выглядеть так:
PROGRAM MAIN
VAR
eState : E_State;
END_VAR
Тело:
CASE eState OF
E_State.A :
// Do something A
E_State.B :
// Do something B
E_State.C :
// Do something C
ELSE
// Do something
END_CASE
person
Jakob
schedule
01.05.2018