Блог

ПЛК в STOP после watchdog и не уходит в RUN: причина, сброс и безопасный пуск

2026-07-23 14:47

После кратковременного просадки 24 В или «зависания» загрузки CPU индикатор ПЛК горит STOP, в CODESYS Online - та же картина. Наладчик жмёт Run, контроллер дёргается и снова STOP. В диагностике - watchdog timeout, exception в задаче, иногда пустой стек. Оператор спрашивает, когда запустят линию. Вы смотрите на насосы в ручном и понимаете: пока не ясна причина, RUN опасен.

Watchdog на ПЛК - не «глюк железа», а штатная защита: если цикл задачи не завершился вовремя или runtime упал, контроллер переводит себя в безопасное состояние STOP. Повторный RUN без устранения причины снова упрётся в тот же таймаут или в аварийную логику пуска. Статья разбирает цепочку watchdog - задачи - питание - cold start и отличие от потери retain и уставок. Это не учебник по языкам ST/FBD - только эксплуатационная диагностика и безопасный порядок действий.

Короткий ответ

Если ПЛК остаётся в STOP после watchdog и не переходит в RUN, сначала прочитайте журнал исключений и время цикла задач, не жмите Run на живом объекте вслепую. Типичные причины: превышение watchdog interval тяжёлой задачей, блокирующий вызов в цикле, скачок нагрузки после download, нехватка питания 24 В, повреждённый проект на flash. Безопасный порядок: зафиксировать STOP и outputs, снять online-лог, воспроизвести на столе или в симуляции, исправить задачу или увеличить interval обоснованно, cold start по регламенту с проверкой interlocks. Retain и уставки могут сохраниться - watchdog не равен «обнулились все уставки». Таблица ниже сопоставляет состояние, причину и действие.

Что делает watchdog в runtime ПЛК

Watchdog (сторожевой таймер) следит, что пользовательские задачи завершают цикл за отведённое время. В CODESYS задача имеет interval (период) и watchdog margin. Если тело задачи выполняется дольше допустимого - runtime фиксирует fault и переводит ПЛК в STOP. Аналогичная логика есть в других средах на том же классе железа.

STOP после watchdog - следствие, не первопричина. Первопричина - код или конфигурация, из-за которых цикл «не уложился», либо сбой питания/памяти, из-за которого runtime не стартовал корректно. Индикатор STOP с записью watchdog в логе отличается от STOP по команде оператора и от STOP из-за аппаратной ошибки I/O.

Важно: выходы при переходе в STOP обычно переходят в безопасное состояние по конфигурации (часто 0 или last value по таблице - смотрите проект и паспорт объекта). Повторный RUN без анализа может кратковременно подать команду на исполнительный механизм.

Цикл задачи: когда «тяжёлая» логика роняет контроллер

Частая история на пуске: добавили в задачу 10 ms новый FB с файловой записью, разбором строки или большим циклом FOR по массиву. На столе с одним ПЛК всё OK, на объекте с полной нагрузкой Modbus и архивом - watchdog.

Вторая история - вызов блокирующих операций в цикле: синхронный запрос к медленному устройству, ожидание без таймаута, WHILE без выхода при ошибке датчика. Язык (ST, FBD, LD) не спасает - важно, что выполняется за один scan. Обзор языков и типичных ловушек по средам - в материале про ST, FBD, LD, здесь только runtime-поведение.

Третья - приоритеты задач: низкоприоритетная задача «съела» время, высокоприоритетная не стартовала вовремя. Смотрите task configuration, загрузку CPU % в online, trace если доступен.

Диагностика: в online откройте task monitoring - max cycle time, overrun counter. Сравните до и после инцидента. Если max cycle скачкообразно вырос - ищите последний download или изменение рецепта.

Питание 24 В и кратковременный brownout

Просадка питания короче секунды может не выключить индикаторы на шкафу, но сбросить CPU в fault. Блок питания на грани нагрузки, плохой контакт на клемме, пуск мощного насоса в той же фазе - типичные полевые причины.

Отличие от watchdog по коду: в логе может быть power fail, reset reason hardware, без exception в задаче пользователя. Осциллограф на 24 В или журнал UPS помогает. Если STOP совпадает с пуском соседнего агрегата - электрика, не программист.

После brownout иногда требуется не Run, а power cycle с проверкой целостности проекта на flash. Повторяющиеся события - замена БП, увеличение запаса по току, отдельная линия для ПЛК.

Журнал, exception и cold start

Первое действие наладчика - снять online log, last error, call stack если среда показывает. Сохраните скрин и экспорт до перезагрузки. Сообщение division by zero, access out of range, stack overflow указывает на конкретный POUs.

Cold start (холодный пуск) - перезапуск runtime с инициализацией переменных по INIT, если так настроено. Warm start / retain сохраняет часть памяти. Watchdog STOP не означает автоматически потерю retain - смотрите настройки retain list и что именно пропало на объекте. Оператор мог заметить «слетели уставки» по другой причине (загрузили старый проект).

Если Run сразу снова watchdog - не крутите цикл бесконечно. Переведите объект в безопасное состояние, отключите проблемную задачу в проекте на столе, выпустите патч. Временное увеличение watchdog interval без анализа - маскировка, не ремонт.

Иногда STOP сопровождается записью memory fault или corruption project. Тогда Run бесполезен до восстановления проекта из backup. Не путайте с чистым watchdog по времени цикла - в логе будет другой код.

При работе с удалённым I/O по Ethernet потеря связи с модулем может блокировать transition в Run по логике проекта, хотя CPU физически готов. Диагностика - диагностика полевой шины и конфигурации I/O, не только watchdog margin.

Безопасный пуск после STOP: порядок для объекта

Работать от риска механизмов. Убедитесь, что клапаны, приводы, ПЧ в безопасном состоянии, технолог подтвердил обход или ручной режим. Зафиксируйте, какие выходы должны оставаться обесточенными.

Снимите логи и конфигурацию as-built. Воспроизведите на bench ПЛК с копией проекта и тем же firmware. Если fault воспроизводится - правка кода. Если нет - питание, помехи, повреждение flash, несовместимость версии после обновления.

Перед Run на объекте: проверьте interlocks, что аварийные цепи целы, персонал вне зоны. Первый Run - с технологом, готовностью к немедленному STOP. После устойчивого RUN 15-30 минут - запись в журнал пусконаладки: причина, меры, версия проекта.

Документируйте в пакете ввода: максимальное время цикла, настройки watchdog, процедура после fault. Ссылка на общий маршрут инженера - путеводитель по ресурсам АСУ ТП.

Download, retain и «после обновления проекта»

После загрузки проекта без остановки объекта иногда меняется порядок инициализации: тяжёлый INIT в первом цикле не укладывается в watchdog. Симптом - STOP только на первом Run после download, на втором (если успели нажать) - то же. Решение - вынести длительную инициализацию в отдельную фазу, разбить на несколько циклов, увеличить watchdog только для стартовой задачи с комментарием в проекте.

Retain-переменные не защищают от watchdog. Можно сохранить уставки и одновременно оставаться в STOP. Операторы путают: «уставки на месте, значит можно жать Run». Если причина - exception в коде, уставки ни при чём.

Сравните версию компилятора и runtime на столе и на объекте. Расхождение patch-level иногда даёт разное время выполнения библиотечных FB.

Связь с задачами связи Modbus и архивом

На объекте с десятками Modbus TCP устройств цикл опроса может блокировать задачу, если драйвер синхронный и один slave не отвечает до timeout. Watchdog падает «случайно» при отказе одного прибора. Диагностика - временно отключить устройство в конфигурации, повторить Run. Долгосрочно - асинхронный опрос, отдельная comm-задача, сокращение timeout на неответ.

Архивирование на самом ПЛК (файл на flash, FTP) в цикле 10 ms - классическая ошибка. Выносите на медленную задачу или на верхний уровень.

IEC 61131-3: куда смотреть в конфигурации задач

В CODESYS 3.5 откройте Task Configuration: period, priority, watchdog enable, watchdog time. Для каждой задачи - max cycle time в online. Если watchdog time = period - margin слишком мал, любой всплеск CPU даёт STOP.

Функциональные блоки с циклическим вызовом в нескольких задачах без защиты - риск гонки и непредсказуемого времени. Это уже не только watchdog, но и источник «плавающих» overrun.

Отличие watchdog STOP от других «не пускается»

Ситуация Признак Не путать с
Watchdog timeout Запись в логе, overrun cycle STOP по кнопке; аварийный вход
Потеря retain Уставки сброшены, RUN возможен Watchdog не обязан стирать retain
Ошибка I/O модуля Диагностика модуля, не task overrun Чистый watchdog по времени
Нет transition в Run Запрет из логики `AllowRun=FALSE` Hardware fault
После download Первый старт падает Старая версия на flash

Состояние, причина и безопасное действие

Состояние Вероятная причина Безопасное действие
STOP, watchdog в логе, overrun растёт Тяжёлая задача, блокирующий код Не Run на объекте; trace; правка задачи; обоснованный interval
STOP сразу после Run Exception в первом цикле INIT Call stack; отключить новый FB; симуляция
STOP после просадки 24 В Brownout, БП Осциллограф; БП; клеммы; не только софт
STOP после обновления firmware Несовместимость проекта Откат версии; миграция по инструкции вендора
Run на секунду, снова STOP Периодический пик нагрузки Разнести задачи; оптимизировать Modbus опрос
STOP только на объекте, на столе OK Питание, помехи, полная конфигурация I/O Сравнить hardware config; журнал питания
Лог пустой, STOP горит Аппаратный fault CPU Техподдержка; замена; не циклить Run
Оператор жмёт Run подряд Человеческий фактор Блокировка до анализа; регламент

После исправления зафиксируйте max cycle time в паспорте задачи. При следующем расширении проекта сравните с baseline - перегруз CPU нарастает незаметно, пока не сработает watchdog в жару или при пиковой нагрузке линии.

Журнал событий на встроенном экране ПЛК или в SCADA сохраняйте при каждом watchdog STOP. Без истории на пуске через месяц спорят, было ли это «в первый раз» или хроническая перегрузка цикла.

Вопросы с пуска

Можно ли увеличить watchdog до 1 с «чтобы не падало»?
Только с расчётом worst-case cycle time и согласованием с функциональной безопасностью. Иначе вы теряете смысл защиты и маскируете перегрузку CPU.

Сбросятся ли уставки после watchdog?
Зависит от retain и того, был ли cold reset. Watchdog сам по себе не равен потере уставок. Проверьте фактические значения в online до и после.

Кто может давать Run на объекте?
Только уполномоченный персонал по наряду/регламенту, с подтверждением технолога. Кнопка Run в CODESYS - не игрушка на живом насосе.

Нужно ли менять проект после каждого watchdog?
Нет, если причина - разовый brownout. Если причина - код, без патча повторится.

На практике

ПЛК СТАБУР под CODESYS 3.5 или MasterSCADA 4D на одном железе дают online-диагностику задач и журнал на встроенном экране или по Ethernet. Имеет смысл заранее включить логирование overrun и хранить as-built проекта на microSD - восстановление после fault быстрее, чем поиск «финальной версии» на ноутбуке подрядчика.

Ссылки по теме