Свободная среда программирования ПЛК Beremiz и её варинт для микроконтроллеров YAPLC
В области АСУ ТП (автоматизированные системы управления технологическим процессом), не смотря на наличие стандарта IEC-61131-3 на языки программирования для ПЛК (программируемые логические контроллеры), каждый производитель норовит использовать свои диалекты этих языков. В результате перенос программы с ПЛК одного производителя на ПЛК другого становится сродни разработки программы заново. Но проблема вендорлока всё-таки не главная.
Множество стран разрабатывают технологии кибернетических атак, которые отличаются скрытностью и эффективностью, позволяя без улик нарушать работу ответственных систем – от АСУ производственными и технологическими процессами предприятий до систем жизнеобеспечения городов. Кибернетические атаки используют уязвимости информационно-коммуникационных и управляющих систем, позволяющие атакующей стороне проникнуть в эти системы и взять их под контроль.
Очевидный факт: если атакующий владеет более полной информацией об атакуемой системе, чем её владелец, то у последнего остаётся немного шансов на успешную защиту. Сложно говорить о защищённом хранении и обработке информации на компьютере, в котором установлена операционная система с закрытым и не прошедшим аудит исходным кодом. Точно так же никакое системное и прикладное программное обеспечение не может обеспечить безопасность системы, если используется аппаратная платформа с закрытой конструкторской документацией, имеющая закрытый исходный код системы начальной загрузки и другие модули, недоступные для инспекции.
Таким образом, использование в АСУ ТП ПЛК ведущих вендоров рынка имеет два основных недостатка: вендорлок и наличие закладок от производителя. Обоих этих недостатков лишены ПЛК, использующие систему программирования Beremiz.
Beremiz - это интегрированная среда разработки для ПЛК с открытым исходным кодом, которая полностью соответсвует стандарту МЭК-61131-3. Beremiz опирается на открытые стандарты, которые не зависят от целевых устройств. Так что вы можете превратить любой процессор в ПЛК. Beremiz включает инструменты для создания HMI и подключения ваших программ PLC к наблюдению, базам данным или полевым шинам.
Среда разработки Beremiz позволяет работать в конфигурационном режиме и в режиме исполнения прикладной программы. В конфигурационном режиме происходит создание прикладной программы, написание алгоритмов и логики её основных программных модулей и их связывание с внешними модулями УСО (устройство связи с объектом). В режиме исполнения прикладная программа передаётся на целевое устройство и может быть запущена с режимом отладки и без отладки.
Основными компонентами Beremiz являются:
- редактор PLCOpen для текстовых (IL и ST) и графических языков (FBD, LD, SFC) стандарта IEC 61131-3;
- компилятор MatIEC, преобразующий логику и алгоритмы программных модулей (из которых состоит прикладная программа), описанных на языках стандарта IEC 61131-3, в эквивалентный С-код;
- механизм плагинов, позволяющий связывать внешние источники данных, такие как модули УСО (их параметры, состояния), SCADA-системы с логикой и алгоритмами программных модулей;
- средства отладки прикладной программы в режиме исполнения;
- элементы для создания человеко-машинного интерфейса управления прикладной программой.
Гибкость в изменении существующих и добавлении новых компонентов достигается с помощью языка Python (и соответствующих библиотек для пользовательского интерфейса, работы с сетью и т.д.) и xsd (XML Schema) файлов, применяемых для описания компонентов среды разработки: модулей работы с компиляторами целевой архитектуры, плагинов внешних источников данных и т.д.
Beremiz используется в качестве среды разработки и исполнения на ПЛК серии СМ1820М ПАО "ИНЭУМ им.И.С. Брука" на базе отечественных микропроцессоров «Эльбрус» и SPARC, а также линеек, основанных на микропроцессорах ARM и x86. Полный список компаний, использующих beremiz в своих ПЛК, можно посмотреть на странице:
http://www.beremiz.org/appsТакже в апреле 2017 года ООО НПК "Нуклерон" (г. Пермь) тестирует линейки программируемых реле NUC-24x/251. В основе программируемых реле используется микроконтроллер STM32F105 для модели NUC-242 и STM32F205 для остальных. Также поддерживается плата STM32F4DISCOVERY. В качестве среды разработки используется YAPLC-IDE, представляющая собой набор расширений для среды Beremiz. Для ПЛК параллельно разрабатывается среда исполнения YAPLC-RTE. Исходные коды YAPLC доступны на github.
Проект YAPLC является попыткой создать полностью свободные в программном отношении ПЛК на базе микроконтроллера. Хоть в комплекте с ПЛК СМ1820 и идут исходные коды, но их разработка проходит в закрытом режиме. Да и исходный код получить можно лишь, приобретя ПЛК. Открытость разработки YAPLC-RTE для NUC-24x/251 выгодно отличает их от других ПЛК. Приветствуется разработка для поддержки других микроконтроллеров.
Желающим принять участие в тестировании системы предлагаются (или уже скорее предлагались?) бесплатные наборы инженерных образцов изделий линейки, включающие в себя программируемое реле NUC-243 и адаптер для программирования NUC-246. Я не преминул этим воспользоваться и написал заявку на получение образца, с обещанием собрать пакеты для ALT Linux. На текущий момент были собраны в Сизиф и p8 пакеты:
- matiec - транслятор языков программирования IEC-61131-3, генерирует программный ПЛК на Си;
- stm32flash - загрузчик для микроконтроллеров STM32;
- YaPySerial - динамическая библиотека для замены PySerial (замечено, что PySerial не всегда корректно определяет платформу);
- arm-none-eabi-gcc — компилятор gcc для микроконтроллеров на базе Cortex M0-M4
- собран пакет python-module-pyro, необходимый для работы Beremiz в качестве программного ПЛК;
- собственно сами пакеты beremiz и yaplc-ide.
Были решены следующие проблемы:
- - пакет python-module-matplotlib был недособран, из-за чего beremiz не запускался;
- - yaplc не запускался, если был установлен python-module-pillow. Исправлено: https://github.com/nucleron/IDE/issues/1
- - beremiz был адаптирован для использования установленного в системе matiec
- - для YAPLC сделал патч, который позволяет использовать системные stm32flash, YaPySerial, YAPLC-RTE, находящуюся в $HOME/yaplc/RTE, принят в апстрим.
Краткая инструкция по установке и запуску:
1. Получаем права root:
su -
2. Обновляем индексы репозитория:
apt-get update
3. Устанавливаем пакеты beremiz и yaplc-ide:
apt-get install beremiz yaplc-ide
4. При первом запуске Beremiz появится диалоговое окно с предложением скачать CanFestival-3. Необходимо подключение к интернету. CanFestival-3 нужен для поддержки CAN-интерфейса. В домашнем каталоге будет создана директория YAPLC, и уже в неё будет склонирован git-репозиторий CanFestival-3. Можно отказаться от установки, но тогда при каждом запуске будете видеть это диалоговое окно.
5. При первом запуске YAPLC-IDE вас последовательно спросят, нужно ли скачать YAPLC-RTE, libopencm3, freemodbus-v1.5.0, CanFestival-3. Нужно подключение к интернету. Обязательно необходим только YAPLC-RTE, без него не получится собрать программу для программируемого логического реле NUC24x/NUC251.
6. Запуск Beremiz-service — программной среды исполнения ПЛК. После запуска появится значок в системном трее. Через Beremiz IDE можно загружать, и отлаживать программу прямо на вашем компьютере. Для этого в свойствах проекта нужно прописать URI системы исполнения: PYRO://127.0.0.1:3000 и выбрать целевой платформой Linux. Но так как для ПК входов-выходов нет, то этим всё и ограничится.
Но, как подсказал мне разработчик beremiz Андрей Скворцов, для отладки на своём компьютере, достаточно просто указать в качестве URI системы исполнения: LOCAL:// А если оставить это поле пустым, то при попытке подключения появится диалоговое окно, в котором вы сможете найти ПЛК автоматом, нажав на кнопку "Обновить", либо запустить локальный ПЛК, нажав на кнопку локальный, и наконец соединиться с ПЛК по IP-адресу, нажав кнопку добавить "IP-адрес".
На данный момент YAPLC можно использовать также для программирования платы stm32f4-discovery (которая на aliexpress стоит не так уж и дорого). В свойствах проекта в качестве целевой платформы нужно выбрать yaplc. Для подключения к плате stm32f4-discovery, также как и для подключения к NUC24x/NUC251, необходимо в свойствах проекта выбрать URI системы исполнения: YAPLC:///dev/ttyUSB0
Использованы материалы:
1. Доверенная программно-аппаратная платформа "Эльбрус". Отечественное решение для АСУ ТП КВО:
http://www.elbrus.ru/doverennaya-programmnoapparatnaya-platforma-elbrus-otechestvennoe-reshenie-dlya-asu-tp-kvo2.
https://github.com/nucleron/YAPLC3. Система программирования Beremiz:
http://www.sm1820.com.ru/produktsiya/programmnoe-obespechenie/sistemy-programmirovaniya/item/3-beremiz.html4. Руководство пользователя beremiz:
http://www.sm1820.com.ru/files/beremiz/beremiz_manual.pdf5. Руководство пользователя NUC-243:
https://github.com/nucleron/YAPLC/files/892874/NUC-243.468333.004.rev4.pdf