
Сообщение от
Viktor D
По аналогии с предложенными вариантами получилось вот так - см аттач.
В else закоментированные строки выдают ошибку, но работает и без них. Что то я не понимаю, но что не понимаю - не понимаю. Подправьте как должно быть. И пару слов пояснений если не затруднит.

Код:
function_block DRIVER_drm //имя функционального блока.
var_input //объявление входных переменных
strt : bool;//старт
stop : bool;//стоп
pause : bool;//пауза
end_var
var_output //объявление выходных переменных
rt_fw : bool;//вращение вперёд
rt_bw : bool;//вращение назад
end_var
var //объявление локальных переменных
State : udint; // Текущее состояние
t : SYS.TON; // Метка времени события
end_var
//CODE
if strt then
case State of
0: t(I:=true, T := t#1s);
if t.Q then State := 1; t(I := false); end_if
1: t(I:=true, T := t#3s);
if t.Q then State := 2; t(I := false); end_if
2: t(I:=true, T := t#1s);
if t.Q then State := 3; t(I := false); end_if
3: t(I:=true, T := t#3s);
if t.Q then State := 0; t(I := false); end_if
end_case
rt_fw := State = 1;
rt_bw := State = 3;
else
State := 0;
t(I := false);
rt_fw := false;
rt_bw := false;
end_if
end_function_block