Как пример - кусок кода. Не знаю как правильно его вставлять:
FUNCTION State: udint; //имя функции и тип данных выхода
VAR_INPUT //объявление входных переменных
SaveState : udint; // сохраненное значения состояния в предыдущем цикле
MdRevKM : bool; // режим работы реверсивных контакторов 0=ручной / 1=автомат
MdFuelVlv : bool; // режим работы топливного крана 0=ручной / 1=автомат
MdGen : bool; // режим работы генератора 0=ручной / 1=автомат
InSplOk : bool; // сетевое питание в норме
GenSplOk : bool; // питание от генератора в норме
FuelVlvOpn : bool; // топливный кран 1=открыт
FuelVlvCls : bool; // топливный кран 1=закрыт
Start : bool; // импульс первого выполнения программы после загрузки
S0_Tmr : bool; // таймер состояния (загрузка)
S6_Tmr : bool; // таймер состояния (закрытие топливного клапана)
S7_Tmr : bool; // таймер состояния (команда остановки генератора)
S24_Tmr : bool; // таймер состояния (заполнение бензином поплавковой камеры)
END_VAR
VAR //объявление локальных переменных
boolVAR : bool := FALSE;
END_VAR
IF Start THEN
State := 0;
ELSE
CASE SaveState OF
0: // запуск графа, пауза для срабатывания реле контроля напряжения (должно быть более TON19/20)
IF S0_Tmr THEN
State := 1;
ELSE
State := 0; // остаемся в текущем состоянии
END_IF
1: // запуск графа, проверка режима работы реверсивных контакторов
IF MdRevKM THEN
State := 2;
ELSE
State := 1; // остаемся в текущем состоянии
end_if
2: // проверка наличия сетевого питания
IF InSplOk THEN
State := 3;
ELSE
State := 4;
END_IF
3: // включение контактора питания от сети КМ1
IF InSplOk = FALSE THEN // если сетевое напряжение пропало
State := 2;
ELSE
State := 3; // остаемся в текущем состоянии
END_IF
4: // проверка наличия питания от генератора
IF GenSplOk THEN
State := 5;
ELSE
// уходим на запуск генератора
State := 20;
END_IF