Автор Тема: Свободная среда программирования ПЛК  (Прочитано 2504 раз)

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 3 129
  • antohami@
Свободная среда программирования ПЛК 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 update3. Устанавливаем пакеты beremiz и yaplc-ide:
apt-get install beremiz yaplc-ide4. При первом запуске 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-kvo
2. https://github.com/nucleron/YAPLC
3. Система программирования Beremiz: http://www.sm1820.com.ru/produktsiya/programmnoe-obespechenie/sistemy-programmirovaniya/item/3-beremiz.html
4. Руководство пользователя beremiz: http://www.sm1820.com.ru/files/beremiz/beremiz_manual.pdf
5. Руководство пользователя NUC-243: https://github.com/nucleron/YAPLC/files/892874/NUC-243.468333.004.rev4.pdf
« Последнее редактирование: 02.10.2017 05:12:32 от Антон Мидюков »

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 3 129
  • antohami@
Дополнительно необходимо установить python-module-cycler, если не установлен.
обнаружил две проблемы:
1. На p8 не запускается с python-module-wx3.0
Необходимо вместо него установить python-module-wx
2. Не вытягивается по зависимостям python-module-matplotlib-wx
Нужно установить его самому.

Таким образом, временное решение проблем запуска:
apt-get install python-module-wx python-module-matplotlib-wx
Upd: Проблемы решил. Но я бы по-прежнему рекомендовал устанавливать python-module-wx вместо python-module-wx3.0, если конечно вы не используете тему adwaita для gtk3 и значков.
« Последнее редактирование: 13.07.2017 13:35:38 от Антон Мидюков »

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 3 129
  • antohami@
Программируемые логические реле  NUC24x от НПК "Нуклерон" наконец-то поступили в продажу: https://nucleron.ru/programmable-relays/
Радует адекватность цен. Особенно, если сравнить с ПЛК на базе Ардуино: http://controllino.tilda.ws/ Микроконтроллер в NUC-243 стоит STM32F105, который гораздо более проиводителен, чем 8 битная Atmega, а стоит то гораздо дешевле! Так что могу рекомендовать его техникумам и университетам для изучения ПЛК, а также кружкам по мехатронике. Количество входов/выходов и производительности контроллера вполне достаточно для реализации работы небольших настольных мехатронных систем.

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 4 950
Мда, суровый российский маркетинг...
А как понять чем эти 10 изделий отличаются?

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 3 129
  • antohami@
А как понять чем эти 10 изделий отличаются?

Прочитать инструкцию :-) Итак:
1. модель NUC-242 имеет другой микроконтроллер в своей основе: STM32F205 вместо STM32F105, который слабее.
2. 220 или 24 в конце названия означает напряжение питания, соответственно 220В переменного тока или 24 В постоянного.
3. NUC-247 имеет только дискретные входа-выхода, соответственно 12 и 8. NUC-243 имеет 4 аналоговых входа и 2 аналоговых выхода, 8 дискретных входов и 6 дискретных выходов. Т.е. отличаются между собой эти модели прошивками. Микроконтроллер STM32 позволяет изменять назначение ножек микроконтроллера.

Вот здесь есть описание, как расшифровывать сокращения:
5. Руководство пользователя NUC-243: https://github.com/nucleron/YAPLC/files/892874/NUC-243.468333.004.rev4.pdf

Смотреть пункт 1.6

При конфигурации нужно решить:
1. Нужен ли порт RS-485, через него можно по протоколу modbus связывать между собой ПЛК или подключать периферию, например электросчётчик. Я считаю, что вещь полезная, можно изучать протокол modbus.
2. Какие должны быть дискретные выхода: релейные (требуется внешнее питание), транзисторные или симисторные. Релейные дешевле.
3. Нужно ли собственное питание дискретных выходов. Дешевле и надёжнее иметь питание внешнее, имхо.
4. Нужно ли собственное питание аналоговых выходов.  Дешевле и надёжнее иметь питание внешнее, имхо.

Так что для образовательных целей, я бы выбрал NUC-243 24.24.6Р.П1.A0.0256
У меня дома именно такой, только тестовый образец.
« Последнее редактирование: 02.12.2017 19:43:47 от Антон Мидюков »

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 4 950
Вот здесь есть описание, как расшифровывать сокращения:
5. Руководство пользователя NUC-243: https://github.com/nucleron/YAPLC/files/892874/NUC-243.468333.004.rev4.pdf
круто, потому что на сайте ссылки на описание битые.

Такое ощущение что у них 1 клиент (РЖД) и других им не надо.

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 3 129
  • antohami@
круто, потому что на сайте ссылки на описание битые.

Такое ощущение что у них 1 клиент (РЖД) и других им не надо.

Они только на днях сайт обновили полностью. Видать не всё доделали.

Оффлайн tema

  • Мастер
  • ***
  • Сообщений: 1 933
    • Email
Надо попробовать. Ардуину восприняли хорошо. Посмотрим как будет с этим. Там сложно к линуксу подключить и начать программировать? Какой порог вхождения в программирование этой штуки?

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 3 129
  • antohami@
Надо попробовать. Ардуину восприняли хорошо. Посмотрим как будет с этим. Там сложно к линуксу подключить и начать программировать? Какой порог вхождения в программирование этой штуки?

Я майнтейнер пакета yaplc-ide. Всё работает из коробки. При первом запуске программы надо согласиться скачать исходники, нужные для сборки проектов для ПЛК, из интернета. Они скачаются как git-репозитории в $HOME/YAPLC/ Либо скопировать их туда самому. Т.е. себе дома скачал, а в школе уже каждому в профиль закинул.
Уровень вхождения выше, чем у Arduino, т.к. нужно знать полноценно основы электротехники и начала цифровой схемотехники. Языков программирования 5 на выбор:
1. LD - язык релейных схем, электрикам очень нравится
2. FBD - язык цифровой схемотехники, нравится электроникам
3. SFC - язык переходов, говорят должен нравиться технологам, но я думаю, что он никому не нравится :-)
4. IL - ассемблер, очень высокий уровень вхождения
5. ST - Паскаль с небольшими отличиями

LD самый простой язык и очень наглядный. Но конечно, нужно знать, что такое триггеры и счётчики.
На ST тоже программировать легко тем, кто на Паскале умеет программировать.

Если надумаете купить. Нужно будет отдельно блоки питания на 24 вольта купить (напряжение 14+, младше ни-ни). Нужно иметь в виду, что напряжение будет 24 В, а не как у Ардуино 5 В (или 3.3 В). Оно не опасно, но ребёнка до 14 лет допускать всё равно нельзя. Модель надо на 24 В покупать. Также, как я понимаю, придётся купить отдельно кабель для программирования, который 2000 рублей стоит. Ну и датчики дискретные ему нужны на 24 В.

Крепится реле на DIN-рейку. По-хорошему, надо его не просто так покупать, а в придачу к какому-нибудь мехатронному стенду на пневматике. К примеру у нас раз в год от завода кто-нибудь едет участвовать в соревнования WorldSkills, где нужно собрать такую мехатронную установку и запрограммировать её. Программировать их кране интересно, можно придумать очень много задач, которые нужно решить. Датчиков требуют эти установки не много, так что входов-выходов у сего реле вполне достаточно. Но стоят эти установки очень дорого :-(

Всё-таки для школьников АСУ-шная техника это слишком, имхо. Но в техникумах, институтах, или технических кружках в дворце творчества, вполне. Если подросток в 14 лет начнёт заниматься мехатроникой, то в техникуме или институте по специальностям, связанным с автоматизацией, он может сделать просто шикарный дипломный проект, который ему откроет путь к карьерному росту.

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 3 129
  • antohami@
Плюс по сравнению с Ардуино, очень легко отлаживать программу, так как состояние всех переменных отображается в исходниках при подключении ПЛК. Т.е. если программа написана на LD, ты видишь, какие контакты замкнулись, а какие нет. А если писать программу в виде  конечного автомата, то вообще никаких проблем с отладкой нет. Всю программу разбиваешь на шаги, и ты сразу видишь на каком шаге программа встала и дальше не идёт.