Во-первых, вы не можете использовать строки в CASE
. Только ANY_NUM
или ANY_BYTE
общих типов. Итак, если вы хотите использовать перечисление, вы будете использовать его следующим образом.
TYPE EN_STEPS: (
enStateInit,
enStateMoveFwd
);
END_TYPE
TYPE BaseState:
STRUCT
EnumVal : INT;
Step : EN_STEPS;
END_STRUCT
END_TYPE
GLOBAL_VAR
StateArray : ARRAY [1..c_TOTAL] OF BaseState :=
(EnumVal := 0, Step := enStateInit),
(EnumVal := 0, Step := enStateMoveFwd);
END_VAR
GLOBAL_VAR CONSTANT
c_TOTAL: INT := 2;
END_VAR
Затем в программе
VAR
currentStep : EN_STEPS;
END_VAR
CASE currentStep OF
StateArray[0].Step:
//do something
END_CASE
Но не совсем понятно, почему вы это делаете. Похоже, для этого нет практического применения. Вы можете просто сделать
TYPE EN_STEPS: (
enStateInit,
enStateMoveFwd
);
END_TYPE
VAR
currentStep : EN_STEPS;
END_VAR
CASE currentStep OF
enStateInit:
//do something
END_CASE
То же самое.
Во-вторых, если вы хотите создать универсальную функцию, которая принимает различное количество элементов, вы должны использовать указатели. Это общий ответ, если вы отредактируете свой вопрос и опишите, что вы хотите сделать в целом, я отредактирую свой ответ и дополню его решением.