Найти в Дзене

Автозапуск после пропажи питания.

На одном объекте служба эксплуатации попросила дополнить ПО контроллера функцией автозапуска после повторной подачи питания, если система находилась в работе. Систем около 30, часть реализована на овене ПЛК 200 (запрограммирована в codesys). Часть на пр200 (owenlogic). Как обычно, руководители договорились, что до нового года все будет сделано, написаны гарантийные письма и все такое. Начнем с проекта на кодесис. Проект достался мне от предыдущих разработчиков. Сделал его фрилансер, потом тот кто занимался ПНР пытался заставить программы работать на реальном объекте, после достался мне. Первоначальная программа неплохо структуирована, ошибок было много, иногда достаточно смешных. Например в таймерах уставки имели значение INT, при пересчете в миллисекунды происходило переполнение и задержки некорректно работали. Лечение свелось изменением типа в UDINT. Вернемся к автозапуску: При реализации этой функции нужно учесть следующие моменты: Переходим к реализации самой функции автозапус

На одном объекте служба эксплуатации попросила дополнить ПО контроллера функцией автозапуска после повторной подачи питания, если система находилась в работе. Систем около 30, часть реализована на овене ПЛК 200 (запрограммирована в codesys). Часть на пр200 (owenlogic). Как обычно, руководители договорились, что до нового года все будет сделано, написаны гарантийные письма и все такое.

Начнем с проекта на кодесис. Проект достался мне от предыдущих разработчиков. Сделал его фрилансер, потом тот кто занимался ПНР пытался заставить программы работать на реальном объекте, после достался мне. Первоначальная программа неплохо структуирована, ошибок было много, иногда достаточно смешных. Например в таймерах уставки имели значение INT, при пересчете в миллисекунды происходило переполнение и задержки некорректно работали. Лечение свелось изменением типа в UDINT.

Вернемся к автозапуску:

При реализации этой функции нужно учесть следующие моменты:

  • При пропаже питания модули на RS485 начинают отваливаться и контроллер начинает ловить различные аварии.
  • При подаче питания тоже возможны возникновения ложных аварий.

Переходим к реализации самой функции автозапуска.

Нам нужно запомнить состояние перед выключением питания, сбросить аварии перед пуском после подачи, вернуться в нормальный режим. Добавим несколько переменных:

GVL.lastState; //последнее состояние системы, энергонезависимая (находится в разделе RETAIN)

lastStateTOF: TOF; //удержание lastState для игнорирования аварий при пропаже питания

PowerON_TON: TON; //Таймер, работает при подаче питания один раз, на нем реализован алгоритм автозапуска

Первые 5 секунд, тишина, вторые 5 секунд посылаем сброс, третьи 5 запускаем, если нужно.

Собственно сама функция

-2

В программах на овенлоджик по сути сделано тоже самое, только немного по другому. В программе есть макрос, который отвечает за старт с нескольких мест: тачпанель, АРМ (работают по фронтам).

-3

Внутрь этого макроса засунул два таймера, энергонезависимую переменную для запоминания последнего состояния

-4

Часть макроса, где происходит старт/стоп

-5