
Сообщение от
EFrol
Вы хотите сказать, что get_time() - T#0s будет < T#1s в течении 1.5 месяцев?
Я думал, Вас беспокоит, что при быстром сбросе OnOff при State := 3; произойдет смена вращения без паузы.
Не. С 1.5мес я погорячился. Не в этом случае.
Потенциальный крантец (в старом варианте) остается из-за практически всегда отсутствия задержки шага 0 после подъема OnOff.
При шаблонном использовании такой конструкции в шаге 0 могут быть какие-то подготовительные действия которые пойдут лесом. Смысл в таймере шага 0?
TON тут не причем, простое t := get_time(); (а не := 0) в else эту проблему решает.
Ну и лично я (дело вкуса) предпочитаю выходы привязывать не в шаге, а к шагу
Код:
..
end_case
FW := State = 1;
RW := State = 3;
Там где есть ENUM это максимально наглядно, да и здесь чуть очевидней.
А когда шагов много, еще и
Код:
..
end_case
if State <> State_ then //State_ - прошлое значение
State_ := State;
t := get_time();
end_if
Т.е. самовзвод таймера шагов после любого перехода. Но это норм когда само состояние OnOff = false тоже шаг, а не IF (внешний if для case не использую)