Сообщение от
petera
Где-то так...
Именно так. использую SFCReset для того, чтобы не ставить в каждом шаге проверки. Но у меня SFC - не главная, поэтому я приспособил этот флаг для "вылавливания" нажатия кнопки СТОП. Работает замечательно - где бы SFC прога ни находилась, по СТОПу срывается в ИНИТ и уж там смотрю: ага, так мы сюда попали не просто так, а по кнопке СТОП - ну и делаю чего надо.
Так что флаг SFCReset - рулез!
А вот слежение за питанием сделал (тоже на этом же форуме подсказали) через watchdog. Как только вижу пропадание питания (ну, еще полсекунды ковыряюсь в носу), тупо становлюсь в мертвую петлю, откуда watchdog таймер сорвет в сброс всю программу:
Код:
TON_Power( IN:= NOT bPower_OK, PT:=T#0.5s);
WHILE TON_Power.Q DO ; END_WHILE
Здесь bPower_OK - именно тот бит в модуле статистики, о котором многоуважаемый коллега petera и говорит.
Внешне это выглядит именно так, как пользователь имеет право ожидать: как только питание сорвалось, ПЛК летит в сброс. Если включить сразу же питание - мы видим нормальный старт, с инициализациями и прочим, положенным при старте.
Кому надо - можно сначала (до ухода в метрвую пелтю) выполнить те или иные действия по "безопасной" смерти программы. Ну, ради чего аккум в ПЛК и задумывался.