Блог

Linux RT на ПЛК и Runtime под Windows: где ломается перенос проекта

На ноутбуке с Windows проект собрался, симуляция крутится, экран открывается. Вы выгружаете ту же сборку на ПЛК с Linux RT - и получаете ошибку библиотеки, пустой список устройств или Runtime, который стартует и через секунду падает. Разработчик говорит: «у меня всё работало». Эксплуатация ждёт пуск. Между инженерной станцией и полевым контроллером лежат не «другой ПЛК», а другая ОС, другой target, другие пути и права.

CODESYS 3.5 и MasterSCADA 4D на оборудовании СТАБУР используют Linux RT как среду исполнения на ARM. На ПК инженер работает в среде разработки под Windows, часто с симулятором или удалённым Runtime. Перенос проекта - не копирование папки: меняется device profile, набор библиотек, права на файлы, служба runtime, иногда часовой пояс и сетевые интерфейсы. Статья разбирает типовые точки отказа «на ноутбуке работало» без общего ликбеза по CODESYS. Не повторяем первый запуск IDE - он в отдельном материале; здесь фокус на расхождении Windows-станции и Linux RT на объекте.

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

Проект, который работает в симуляции или на Windows Runtime, ломается на ПЛК с Linux RT из-за несовпадения target device, отсутствующих или несовместимых библиотек под ARM, жёстко прописанных путей к файлам, прав доступа к каталогам runtime и отличий сетевой конфигурации. Перед выгрузкой выберите в проекте тот же device, что на контроллере; проверьте список библиотек и версию компилятора 3.5.16.40; соберите под Linux RT, а не только под Win32 simulation; на ПЛК убедитесь, что служба runtime запущена от нужного пользователя и каталог проекта доступен на запись. Ошибку «библиотека не найдена» на чужом ПК и на ПЛК лечат одинаково - сверкой installed packages и device repository, но на Linux пути и регистр имён чувствительны.

Два runtime: симуляция и поле

В CODESYS проект привязан к Device - профилю контроллера с типом CPU, памятью, поддерживаемыми библиотеками и ОС runtime. Симулятор на Windows (CODESYS Control Win V3 или SoftPLC) исполняет байт-код в другой среде: другие системные вызовы, другие драйверы I/O, иногда другой endianness для отдельных legacy-библиотек.

Linux RT на ПЛК - реальный preemptive RT или RT-профиль поверх ядра Linux на ARM Cortex-A55. Задачи циклические, файловая система ext4 на eMMC, сеть через eth0 с фиксированным именем интерфейса. То, что в симуляторе «проглатывается», на железе даёт отказ: обращение к несуществующему COM-порту, ожидание файла по пути C:\Project\..., вызов Windows-only library.

MasterSCADA 4D на том же ПЛК поднимает свой runtime-сервис; конфигурация экранов и каналов должна быть собрана под ту же платформу. Перенос «только логики» без пересборки HMI-части оставляет на панели старые пути к ресурсам.

Правило для команды: эталон сборки - device из паспорта ПЛК, не «SoftPLC по умолчанию».

Target device и компилятор

Откройте Project → Device и сравните с документацией контроллера. Неверный device даёт симптомы: проект компилируется, но download отклоняется; или загружается, но I/O mapping пустой; или задачи не стартуют из-за несовпадения timer resolution.

Версия CODESYS 3.5.16.40 и компилятор должны совпадать на всех рабочих местах. Обновили IDE на одном ноутбуке - получили другой байт-код; Linux runtime на ПЛК старее - ошибка несовместимости при старте application.

После смены device обязательны Rebuild all и проверка warning по библиотекам. Предупреждение «function not available on this device» в симуляции иногда игнорируют - на Linux RT это уже error при link.

Библиотеки: «не найдена» на ПЛК и на чужом ПК

Типовая цепочка: проект разрабатывали на ПК интегратора с установленным пакетом Modbus TCP Client от стороннего вендора. На вашем ноутбуке библиотека есть - compile OK. На ПЛК runtime ищет .so под ARM - её нет, application не стартует. На втором инженерном ПК без пакета - compile fail с «library not found».

Диагностика: Tools → Package Manager - какие пакеты установлены локально; в проекте - Dependencies, красные кресты на библиотеках; на ПЛК - log runtime после boot (часто error loading library libXXX.so).

Решение: установить те же версии пакетов на все IDE; для полевого runtime - только библиотеки, сертифицированные под ваш device ARM Linux. Не копируют .compiled-library с Windows на Linux - нужна сборка под target или официальный package от производителя ПЛК.

Подробный разбор сценария «на моём ПК собралось, у заказчика нет» - в статье про библиотеку на чужом ПК. Принцип тот же, что при переносе с Windows на Linux RT.

Пути, файлы и права на Linux RT

Код и конфигурация, где прописан абсолютный путь Windows, на ПЛК не находят файл. Пример: CSV уставок, рецепты, сертификаты OPC - в ST строка 'C:\Data\recipe.csv'. Симулятор на том же ПК файл видит; Linux - нет, логика уходит в ветку по умолчанию или fault.

На Linux RT рабочие каталоги обычно под /opt/codesys/ или каталог, заданный производителем. Проект и retain-файлы должны лежать на writable partition (eMMC или microSD). Если runtime запущен без прав на запись, retain и журналы не сохраняются после reboot - «на ноутбуке retain работал» (там другая модель persistence).

Проверьте: under which user работает служба; chmod на каталог application; не монтируется ли раздел read-only после сбоя питания. Для MasterSCADA - аналогично для архивов и экранов: путь в конфиге должен существовать на целевой ОС.

Служба runtime и старт application

На Windows Runtime часто стартуют вручную из трея или как служба с автologon. На ПЛК Linux RT - systemd unit или init-скрипт от вендора. Симптом: download прошёл, в IDE Online application Stop; на панели чёрный экран или заставка bootloader.

Смотрите: systemctl status службы runtime (имя зависит от образа); log при старте - crash из-за missing .so, segfault в visualization, нехватка RAM (1 ГБ DDR4 на полном HMI + архив + OPC - впритык). После обновления firmware runtime иногда сбрасывает autostart application - нужно снова назначить default project в web-интерface контроллера или через CODESYS.

Различие cold start и download while running: на ноуте привыкли к online change; на объекте первый пуск после power cycle дольше - не путать с зависанием.

Сеть: localhost на симуляторе и eth0 на ПЛК

Modbus TCP client в проекте с адресом 127.0.0.1 опрашивает симулятор на том же ПК. На ПЛК localhost - сам контроллер, не ваш шлюз в шкафу. Ethernet master на симуляторе «видит» виртуальный slave; на поле - нужен реальный IP, VLAN, иногда другой физический порт (встроенный ETH vs модуль PSV).

DNS и hostname: Windows резолвит PLC-SERVER; Linux RT без записи в /etc/hosts - timeout канала. Фиксируйте IP в проекте для production или используйте mDNS только если это поддержано и прописано в регламенте.

Firewall на Linux RT реже включён по умолчанию, но после hardening интегратор мог закрыть порты - Modbus 502, OPC 4840, VNC для HMI. С ноутбука ping есть, а runtime-сокет не открывается.

MasterSCADA и CODESYS на одном железе

На ПЛК СТАБУР среды взаимозаменяемы по заказу, но не смешиваются в одном runtime одновременно. Проект MasterSCADA, отлаженный на Windows-клиенте с remote runtime на симуляторе, при переносе на Linux-панель требует: сборку server/runtime под ARM, проверку драйверов протокола на целевой ОС, перенос лицензии по точкам (отдельная тема).

Ошибка «на ноутбуке экраны открывались» часто означает, что клиент смотрел на Windows runtime, а панель в цеху - на Linux с другой версией проекта или без выгруженных ресурсов экранов.

Часовой пояс, NTP и журналы

Симулятор на ноуте живёт в локальном времени Windows. Linux RT без NTP после замены батарейки или первого включения уходит в 1970 или UTC. Архив MasterSCADA, метки трендов, SOE в CODESYS выглядят «сломанными» - это не перенос проекта, но типичный сюрприз при приёмке после переноса с dev-машины.

Синхронизируйте время до FAT. Проверьте timezone в образе и в проекте historian.

Визуализация и ресурсы экранов на ARM

Visu в CODESYS и экраны MasterSCADA тянут PNG, шрифты, анимации. На Windows-станции пути к ресурсам часто относительные внутри проекта - работает. На Linux RT при download часть файлов должна попасть в каталог runtime; если забыли включить «deploy visualization» или экран ссылается на file:// вне пакета, панель показывает пустой фон при живой логике.

Проверьте разрешение и touch calibration под диагональ панели (5-24″ на линейке СТАБУР). Симулятор на ноутбуке 1920×1080 не ловит тормоза ARM при тяжёлых трендах. Первый пуск в цеху - с одним экраном и без архива historian на максимум, потом наращивать нагрузку.

Retain, журналы и microSD

Retain-переменные и файлы журналов на Linux RT пишутся на eMMC или microSD. На симуляторе Windows retain часто в user profile на SSD - другая скорость и другие права. После переноса «пропали уставки» - смотрите не только VAR RETAIN, но и mount точки: карта не вставлена, filesystem read-only после power loss, служба стартовала раньше монтирования.

В регламенте обслуживания: graceful shutdown 24 В, проверка свободного места на eMMC перед включением historian.

Чек-лист перед первой выгрузкой на Linux RT

Сверьте device в проекте с паспортом ПЛК. Установите на IDE все пакеты из bill of materials проекта. Соберите Release, не Debug-only. Уберите или параметризуйте пути Windows в коде. Проверьте IP и порты на реальной топологии, не localhost. На ПЛК: версия runtime ≥ версии, под которую собран проект; место на eMMC; служба runtime в autostart. Download, Run, проверка I/O и одного экрана HMI под production-учёткой. Зафиксируйте номер сборки в журнале пуска.

Первичное подключение IDE к контроллеру, документация и интерфейс - в материале про первый старт CODESYS 3.5.

Ошибка, слой и проверка

Ошибка / симптом Слой (ОС / Runtime / проект) Проверка
Compile OK, download fail Device / версия runtime Device profile; версия CODESYS на ПЛК
Library not found при compile Проект / IDE Package Manager; Dependencies
Application start then stop Runtime / библиотеки ARM Log runtime; `.so` под Linux
I/O всё нули, логика OK Проект / mapping Device I/O map; модули корзины
Файл рецепта не читается ОС / пути Абсолютные пути Windows; права каталога
Modbus timeout только на ПЛК Сеть / проект IP не 127.0.0.1; кабель, VLAN
Retain не сохраняется ОС / права Writable partition; user службы
HMI чёрный экран Runtime / visualization Default app; ресурсы экранов выгружены
«Работало вчера на ноуте» Разные target Симулятор Win vs Linux RT ARM
Online OK, после reboot старый код Download / autostart Persistent boot project; полный download

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

Можно ли разрабатывать только на симуляторе Windows и один раз залить на Linux RT?
Можно, если device в проекте - целевой Linux ARM, все библиотеки совместимы, пути и сеть параметризованы. Чистый Win-only симулятор без смены device - плохая идея.

Нужно ли ставить CODESYS на сам ПЛК?
Нет. На ПЛК - runtime. IDE остаётся на Windows-станции. Подключение по Ethernet.

MasterSCADA-проект с Windows runtime переносится на панель СТАБУР?
Да, через сборку под Linux runtime панели и выгрузку server configuration. Лицензия по точкам переносится по правилам поставщика.

Почему после download application в Stop?
Autostart не включён, ошибка init библиотеки, exception в первом цикле, или не хватает памяти. Смотрите log на ПЛК до online из IDE.

Git помогает при переносе между ОС?
Хранит исходники и версии, но не заменяет проверку device и installed packages на каждой машине. См. versionirovanie проектов ПЛК.

На практике

ПЛК и панели СТАБУР поставляются с Linux RT и преднастроенным runtime под CODESYS 3.5 или MasterSCADA 4D - device profile уже соответствует железу. Типовой сбой переноса на объекте - не «несовместимость Linux», а проект, собранный под симулятор или под чужой набор библиотек на инженерном ноутбуке. Сверка device, packages и одного эталонного ПК в команде снимает половину ночных выездов.

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

Обсуждение