Разработка IDE + рантайм ПЛК. Совместная работа. Отладка ST 61131-3
Предысторию разработки собственного рантайма, IDE, поддержка 61131-3
смотрите в моем блоге - ссылка в конце статьи.
В целом была идея, разработать отечественный рантайм для ПЛК и IDE к нему, которые были бы шустры, легки и производительны.
Пока, как мне кажется, это удается. Скомпилированный бинарник IDE сейчас занимает около 1 мб.
Запущенный рантайм, в текущей реализации, занимает около 5 мб ОЗУ и несколько процентов цпу ( до 5%) на Распберри 4, на нескольких одновременно работающих конфигурациях.
В общем, понемногу движемся в правильном направлении, товарищи. Сегодня, хотел бы показать дальнейшую эволюцию этой идеи.
Немного про стек разработки.
Напомню, что IDE и рантайм для ПЛК у меня разработаны под Линукс. Пишу на C++, собираю под Cmake как под x86-64, так и под ARM. В качестве внутренней коммуникации реализовал свой бинарный протокол, на базе ZeroMQ и FlatBuffers.
Транслятор с промышленного языка — ANTLR.
Из промышленных протоколов коммуникации, пока поддержка - Modbus. Планирую добавить в дальнейшем OPCUA.
IDE — написан на чистом C++ и Qt
Рантайм — чистый C++
IDE с рантаймом общаются по собственному бинарному асинхронному протоколу, о котором писал выше.
IDE поддерживает два типа логики IL и ST.
Зачем IL спросите вы?
Исторически, случилось так, что рантайм начался с этого языка. И это не совсем IL — это полный аналог языка устройства Tesys T.
Сами разработчики писали о нем как об structural text языке.
Короче, я собирался реализовать рантайм, и чтобы он полностью поддерживал программы, которые были написаны для Tesys.
Также мне понравилась как он был реализован. Вот так с тех пор он и остался, и благополучно работает.
Дерево элементов конфигураций ПЛК.
Один элемент конфигурации — это 1 логика своего типа (IL или ST).
Он же, отдельный выделенный поток для исполнения данной логики. Каждый поток, работает независимо и в параллель. Сколько элементов — столько и параллельно работающих потоков, исполнителей логики.
Компиляция.
Для компиляции ST 61131-3 я написал свой транслятор на базе ANTLR. Перед загрузкой, логика компилируется в IDE и проверяется на ошибки. Успешно или нет логика скомпилирована, информация выводится в панель снизу.
Сохранение и открытие.
Теперь конфигурации можно открыть и сохранить из IDE. И да, это банальный элемент, но без этого никуда. Что кстати требует довольно приличного времени на проектирование, разработку итд.
Настройки подключения и проверка связи.
Подключаем к ПЛК очень просто. Нужно на вкладке настроек подключения вбить настройки IP адреса и кнопку «Подключиться».
Если подключение успешно, в статус панели значок подключения сменит цвет на зеленый.
Если связи нет, или был обрыв — иконка сменит цвет на красный.
Завел кнопку для запроса у работающего ПЛК перечень конфигураций в работе.
На ПЛК летит команда, с запросом. Список конфигураций высвечивается в нижней панели.
Набор кнопок, с разным функционалом.
Спокойно, загружаем и выгружаем через IDE с ПЛК конфигурации.
Автозапуск.
Загрузив через IDE в рантайм 1 раз конфигурации, которые он благополучно сохранит и при его перезагрузке стартует снова с ними же.
В одной из прошлых статей, писал про разработку программного осциллографа, чтобы писать аварийные события в формате COMTRADE. Это больше для устройств РЗА, конечно, но скажем в устройстве Tesys T осциллографа сильно не хватало. Короче он также может запускаться в составе рантайма, хотя его можно и отключать.
В той прошлой статье, я писал про него подробно. У него крутая возможность — с его помощью можно генерировать самые разные осциллограммы, причем можно создавать различные аварийные режимы.
Отладка.
Код на ST 61131-3 у меня в IDE можно отлаживать на «живом» рантайме ПЛК. Завел кнопку Отладка.
Когда у нас фокус на какой либо конфигурации и мы на связи с ПЛК, после нажатия на Отладку, на ПЛК летит команда — перезапустить поток в специальном отладочном режиме.
Это в принципе такой же рабочий режим, все сигналы всё то же самое, что у нормального, но у него имеют некоторые существенные отличия от нормального режима.
В общем, поток с логикой перезапускается в отладочный режим и мы можем ставить точки останова.
Ставим точку останова, там где программа заходит в участки кода на ST. Может и не зайти, если там есть условия итд.
Наблюдаем в окне имена и значения переменных в зоне видимости участка кода программы.
Оригинал моей статьи тут













