Быстрый рестарт ПЛК по "передергу" питания
Включил недавно модуль статистики, а толком его использовать не получается. Прошу помощи.
Задача такая. При выключении питания ПЛК пробует повисеть на аккумуляторе, "цепляется за жизнь". Как результат, выключение питания и включение его через 5-10 секунд не приводит к перезапуску программы ПЛК с нуля. А мне нужно, чтобы приводил именно к перезапуску. То есть, он цепляется, а мы его топориком...
Решение 1: выпаять аккум. Работает. Но изделия идут в серию, выпаивание не есть гут.
Решение 2: Ловлю, когда модуль статистики показывает, что питание пропало, запускаю таймерок (на всякий случай) и через 50 мс говорю: "питалово йок!"
Код:
TON_Power( IN:= (NOT bPLC_Power_ON) AND (NOT TON_Power.Q), PT:=T#50ms);
IF TON_Power.Q THEN bPWR_Was_Bad := TRUE; END_IF
А по появлению bPWR_Was_Bad я вызываю программу инициализации, кагбэ перезапуская все с нуля.
И что странно: плохо работает! Вчера, когда аккум был разряжен, вроде как работало. А сегодня - не хочет даже после выключения на 10 секунд перестартовывать. Как понаблюдать в онлайне - не ясно, срывается же связь без питания...
Подскажите, плз, каковы канонические подходы к использованию информации о пропадании питания? Причем, уточняю, не для приведения выходов во всякие там безопасные состояния, а именно для сброса самого себя и начала с нуля.
Спасибо!
А как работает собака в ПЛК100?
Продолжение.
Может ли кто-то подсказать, как именно перезапускает ПЛК сторожевой таймер?
Я ловлю пропадание питания и по нему ухожу в бесконечный цикл, из которого вотчог сбрасывает ПЛК. При этом почему-то переменные инициализируются как-то... кривовато. Например, в упор устанавливается в единицу (1 Гц) частота Генератора по дискретному выходу номер 6.0 (в Конфигураторе подмодуль Генератор).
Тут и мои косяки могут быть, не спорю. Но все же - как именно сбрасывает вотчдог? Идет ли после этого неявная инициализация переменных?
Спасибо!
Вложений: 2
Каково отличие Сброса ОНЛАЙН от включения питания?
Итак, работоспособность ПЛК восстаноовлена.
Снова вернемся к вопросу рестарта программы. Сброс неодинаков от меню СБРОС отладчика и от включения питания
В приложении проект. Желающие могут его развернуть и проверить, мож у меня руки кривые...
Опишу кратко для тех, кому влом запускать проект.
Вложение 7598
В проекте запускается аппаратный генератор на дискретном выходе 6.0. Частота генератора должна быть 10 Гц, меандр.
В Конфигураторе создал Генератор с частотой Out11Freq, дьюти-сайклом Out11Duty и непрерывной генерацией.
В программе есть начальный участок, который устанавливает частоту генератора 10 Гц. Этого должно быть достаточно, если никто больше к переменной Out11Freq не обращается?
Компилируем, грузим проект. Запускаем, видим частоту 10 Гц. Можно и без осциллографа - в отладчике при работе ОНЛАЙН видно, что переменная Out11Freq таки равна 10.
Сброс от Кодесиса ничего не меняет, все работает прекрасно.
А теперь сброс кнопкой на ПЛК. И, о-па! Частота стала 1 Гц. Это видно и осциллом, и по значению переменной Out11Freq, если сейчас подключиться отладчиком. Она равна 1, то есть 1 Гц.
Такое же поведение при выключении питания и повторном включении.
Я так понимаю, что инициализации переменных не произошло, переменная Initialized не стала ЛОЖЬю, начальный участок программы не прокрутился... Или где? Где рыться. чтобы понять разницу в сбросах от системы отладки и от выключения питания?
Причем, что прискорбно, именно сброс от выключения питания дает плохой (для моей задачи) результат. Бог с ней, с системой отладки, но как же работать с непонятной мне инициализацией переменных?