Блог

PLC Copilot в CODESYS: где ускоряет, а где опасен для объекта

2026-07-28 14:24

Copilot предложил блок interlock: «если авария насоса - закрыть все клапаны и сбросить разрешение на подогрев». Звучит разумно, пока не заметишь, что сброс разрешения обходит SIL-карту и дублирует уже существующий FB в другом POU. Второй запрос - «таймер на 5 секунд между пусками» - Copilot вставил TON с PT в миллисекундах как секундах. На симуляторе «работает», на объекте насос стартует каждые 5 ms. PLC Copilot в CODESYS ускоряет рутину, но не снимает ответственность инженера за безопасность и совместимость с runtime.

Статья разбирает, где Copilot реально экономит время, где типовые галлюцинации (таймеры, interlock, safety), и что проверить перед Download. Это не обзор всех AI-инструментов и не замена code review по IEC 61511. Фокус - практика пусконаладки с Copilot в 3.5.

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

PLC Copilot в CODESYS генерирует черновик ST, LD, комментарии и иногда структуру POU по текстовому запросу. Ускоряет: шаблоны масштабирования, парсинг таблицы сигналов в объявления, типовые FB обёртки, документирование, рефакторинг имён. Опасен без ревью: дублирование логики interlock, неверные единицы времени таймеров, несуществующие функции библиотеки, обход safety-блоков, race conditions в TASK, retain не там где нужно. Перед загрузкой на объект - обязательный чек-лист человека: компиляция, сравнение с CAE/схемой, online test на стенде, diff в Git, проверка task assignment. Copilot не знает ваш паспорт объекта и не отвечает на FAT.

Где Copilot действительно ускоряет

Объявления и таблицы I/O. Вставить список из Excel «Tag, Type, Comment» в VAR блок - минуты вместо ручного набора. Проверить типы и адреса всё равно нужно.

Шаблонный ST. CASE по фазам, конвертация engineering units, LIMIT с Bad quality - черновик за секунды, правка границ - вручную.

Комментарии и описание. Header POU, описание входов FB для HMI - Copilot пишет связнее, чем «// todo».

Поиск по проекту natural language. «Где сбрасывается CounterTotal» - подсказка мест, не замена cross-reference.

Миграция стиля. Переписать фрагмент IL-подобного кода в ST для дальнейшей правки - стартовая точка.

Unit test заготовки. Текстовые сценарии «given PV=0 expect Out=0» - как документ, не как автотест без framework.

На объекте выигрыш - когда инженер редактирует, а не вставляет вслепую.

Типовые галлюцинации: таймеры

TON/TOF/TP: PT в TYPE TIME (T#5s) vs миллисекунды в REAL - Copilot путает. Симптом: «5 секунд» превращаются в 5 ms или 5000 s.

Множественные таймеры с одним экземпляем FB без multinstance - перетирают друг друга.

IN таймера держат TRUE постоянно - после первого срабатывания логика «не повторяется» без сброса IN.

Использование SYSTEM() или vendor-specific таймеров, которых нет в вашем device profile.

Проверка: compilar, online watch ET и Q, стенд с секундомером.

Interlock и дублирование логики

Copilot не видит весь проект целиком. Генерирует «закрыть клапан при E-Stop» в новом POU, хотя E-Stop уже в SafetyMatrix или в hardware safety relay.

Дубли interlock в ST и LD для «надёжности» - расхождение при правке одного места.

Приоритет: Copilot любит цепочки IF, а не матрицу разрешений - сложно верифицировать на FAT.

Проверка: сравнение с функциональной схемой и таблицей cause & effect; один источник правды для критичных разрешений.

Safety: что нельзя отдавать ИИ без ревью

Логика SIL/PL, emergency stop, fire&gas, bypass с ключом - не генерировать Copilot как финал. Допустимо: черновик комментария или структура не-safety вспомогательного мониторинга.

Copilot может предложить «удобный» bypass через HMI bit без двухручного подтверждения - нарушение политики объекта.

Пропуск fail-safe направления DO «при fault - close valve».

Ссылка на несуществующий safety PLC library block.

Ревью по функциональной безопасности SIL и внутренний checklist заказчика - обязательны. Copilot не вписан в safety case.

Версионирование и diff

Сгенерированный код коммитьте в Git с сообщением «Copilot draft: …» и ревьюером в PR. Не «магический» коммит в master перед ночным download.

Diff покажет неожиданные изменения в соседних POU, если Copilot применил patch шире запроса.

Тег релиза перед пуском - откат на версию без Copilot-эксперiment.

Минимальный регламент команды - versionирование проектов ПЛК.

Что проверить перед Download

  1. Compile без warnings по неявным приведениям и необъявленным FB.
  2. Library manager - все FB из vendor libs, не выдуманные имена.
  3. Task - новый POU не оказался в fast task с тяжёлым кодом.
  4. Retain - уставки не стали VAR по умолчанию.
  5. AT / mapping I/O - адреса %IX не придуманы.
  6. Cross-ref - нет второго места с тем же interlock.
  7. Online test на стенде: E-Stop, аварии, ручной режим, первый scan.
  8. HMI - новые переменные добавлены в символы, не только в PLC.

Copilot не заменяет отладку HMI и force на объекте.

LD и ST: разные ловушки

Copilot в LD рисует сети с несовместимым EN/ENO, «висячие» катушки без reset при latch логике.

В ST генерирует красивый CASE без ELSE для ENUM фаз.

Смешение языков в одном POU - после генерации проверьте, что среда разрешила язык target.

Первый старт с Copilot на новом железе - сверка с подключением CODESYS 3.5.

Примеры запросов, которые проходят и которые нет

Хороший запрос: «Сгенерируй ST FB ScaleAnalog: вход INT 0…27648, выход REAL 0…100.0, при Input < 0 установи Bad». Инженер правит пределы и добавляет RETAIN для калибровки вручную.

Плохой запрос: «Сделай полную логику пуска котла с interlock и PID». Copilot соберёт правдоподобный текст без вашей CAE, с дублями и неверными таймерами.

Опасный запрос: «Добавь bypass аварии дверцы для наладки». Обход safety без ключевого переключателя - ревью safety и отказ.

Приемлемый для черновика: «Перепиши этот фрагмент IL в ST, сохрани имена переменных из комментария» - с последующим diff построчно.

Учите junior формулировать узкий контекст: один POU, известные типы, ссылка на существующий FB из библиотеки проекта.

Copilot и code review в малой команде

Даже если Copilot один в офисе, правило второй пары глаз остаётся: другой инженер смотрит diff, не «Copilot же умный». В review checklist отметьте отдельной строкой «AI-generated: yes/no». На FAT предъявляйте не промпт, а протокол review.

При сдаче заказчику не передавайте «мы использовали AI» как оправдание дефектов - передавайте протоколы тестов. Copilot не подписывает акт.

Если в команде один инженер, второй «ревьюер» может быть check-list на бумаге с подписью - лучше, чем zero review. Минимум: compilar на target, diff в Git, один час online на стенде с записью тренда.

Legacy-проект: Copilot для миграции

При замене импортного ПЛК Copilot помогает набросать ST по экспортированным комментариям LD. Риск: перенос старых latch-приоритетов «как было» без понимания, почему две катушки на один выход. Каждый сгенерированный POU сопоставляйте с техдолгом legacy: что переписываем осознанно, что копируем один в один до следующего рефактора.

Конфиденциальность и данные объекта

Не вставляйте в промпт Copilot: IP, пароли, имена заказчиков, полные CAE с секретными режимами. Обезличивайте теги «Pump1» вместо реальных аббревиатур объекта.

Сгенерированный код может попадать в telemetry vendor AI - политика компании может запрещать.

Симуляция vs target после Copilot-патча

Copilot не знает ваш exact device: таймеры, размер строк, max task cycle. После генерации прогоните Build для реального target, не только Win32 simulation. Ошибки «Function not supported» всплывают здесь.

Online test на железе с Copilot-кодом начинайте с outputs в force-safe или с отключёнными final DO - новый interlock мог закрыть клапан на live процессе при первом scan.

Договоритесь в команде о «красных линиях»: список POU и GVL, куда Copilot не применяет патч без устного согласования (safety, interlock E-Stop, recipe PERSISTENT, Modbus maps). Остальное - черновик с обязательным diff. Так junior не боится инструмента, а senior не ловит сюрприз в GVL_Interlock в пятницу вечером.

Задача, Copilot, обязательная проверка

Задача Можно ли Copilot Обязательная проверка
VAR из таблицы Excel Да, черновик Типы, адреса, RETAIN
FB масштабирования AI Да LIMIT, Bad quality, единицы
Interlock насос-клапан Черновик только CAE, нет дубля, E-Stop
SIL bypass Нет как финал Safety engineer, документ SIL
TON пауза между пусками Черновик PT TIME, multinstance, стенд
Рефакторинг имён Да с diff Cross-ref, HMI symbols
Новый протокол Modbus map Частично Паспорт прибора, Unit ID
Комментарии к legacy коду Да Не trust facts о физике
Unit test production Нет без framework Свой test harness
Полный POU «сделай регулировку» Нет вслепую PID params, anti-windup, FAT

Вопросы с объекта

Copilot заменяет junior на пуске?
Нет. Ускоряет senior, junior без ревью опасен.

Можно ли загружать на ночь «чтобы утром проверить»?
Нет. Только стенд или stop PLC с механическим safety.

Ошибся Copilot - кто виноват?
Инженер, подписавший download. AI - инструмент.

MasterSCADA тоже Copilot?
Статья про CODESYS PLC Copilot; SCADA-генерация - отдельные риски связи тегов.

Как пометить код от Copilot?
Комментарий // Reviewed: Ivanov 2026-03-01 и Git history.

Copilot знает библиотеки СТАБУР / PSV?
Не гарантированно. Всегда сверяйте имена FB и device tree с установленными packages в Library Manager.

Можно ли Copilot для документации FAT?
Черновик текста процедур - да; фактические параметры и результаты тестов - только с объекта, не из генерации.

Генерация LD для safety-related индикации?
Только некритичная индикация; цепочки, влияющие на DO, - ручная разработка и review.

На практике

На ПЛК СТАБУР в CODESYS 3.5 Copilot удобен для ускорения разработки рецептов, масштабирования и документирования - на том же железе, где MasterSCADA взаимозаменяема как среда. Перед загрузкой в корзину с модулями PSV-DI/PSV-DO проверьте, что сгенерированные цепочки DO не конфликтуют с аппаратной катушкой и режимом safe state модулей.

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