как реализовать конечный автомат на ST?
как это сделать корректно?
Код:
(* Избегаем чисел, господа. Избегаем чисел *)
TYPE PROCESS_STAGE :
(InitStage, ProcessingStage, ExposureStage, ProductCoolingStage);
END_TYPE
CASE state OF
InitStage:
(* Do stuff *)
IF Initialized THEN
state := ProcessingStage;
END_IF
ProcessingStage:
(* Do stuff *)
IF Processed THEN
state := ExposureStage;
END_IF
ExposureStage:
(* Do stuff *)
IF ExposureComplete THEN
state := ProductCoolingStage;
END_IF
ProductCoolingStage:
(* Do stuff *)
IF T < 30 THEN
state := InitStage;
END_IF
END_CASE
Это общепринятый подход. Бонусы использования перечислений вместо числовых констант — легко вставлять и удалять состояния, хорошая чиаемость кода.