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
- Compile без warnings по неявным приведениям и необъявленным FB.
- Library manager - все FB из vendor libs, не выдуманные имена.
- Task - новый POU не оказался в fast task с тяжёлым кодом.
- Retain - уставки не стали VAR по умолчанию.
- AT / mapping I/O - адреса %IX не придуманы.
- Cross-ref - нет второго места с тем же interlock.
- Online test на стенде: E-Stop, аварии, ручной режим, первый scan.
- 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 модулей.
Обсуждение