Добрый день! Меня зовут Татьяна Пчельникова, и я — владелец продукта в ИТ-команде «Северстали», занимающейся разработкой компонентов для открытой АСУТП. В марте этого года мы начали выпуск статей, посвящённых нашей разработке компонентов открытой АСУТП, с первой статьёй этого цикла можно ознакомиться здесь: Как построить открытую АСУТП. Рождение идеи открытых систем: почему мир движется в этом направлении / Хабр. Мы внимательно прочитали все комментарии к прошлой статье и хотим отметить, что тема вызвала большой интерес и горячие споры, а значит, направление — актуальное, и мы продолжим цикл публикаций.
Чтобы не было разночтений, давайте дадим определение открытой АСУТП. Открытая АСУТП — это система, построенная на принципах модульности, совместимости и взаимозаменяемости компонентов. Она позволяет гибко использовать элементы от разных производителей, являясь независимой от конкретного поставщика, и обеспечивает простую интеграцию с другими системами посредством реализации международных стандартных протоколов и интерфейсов. Эти характеристики позволяют открытой АСУТП масштабироваться как горизонтально, так и вертикально, что делает её перспективной для промышленного применения. «Северсталь» делает два компонента: открытый программный ПЛК (среду исполнения) и открытую среду разработки. Открытая SCADA, интересующая комментирующих, тоже разрабатывается, но другими участниками, входящими в рабочую группу открытой АСУТП.
В данной статье мы поделимся информацией о том, что содержит управляющая программа для открытого программного ПЛК, базирующаяся на стандарте IEC 61499, и как она обрабатывается в среде исполнения.
-
Функциональные блоки (ФБ)
Итак, начнём с фундамента, с функциональных блоков (ФБ), которые в стандарте IEC 61499 имеют следующий вид:
Функциональные блоки делятся на три основных типа:
Базовые функциональные блоки (BFB – Basic Function Block)
-
Используют диаграмму управления выполнением (ECC – Execution Control Chart), аналогичную конечному автомату (UML-диаграмме состояний). Каждое состояние может содержать действия, связанные с алгоритмами и событиями.
Особенности:
-
управляются событиями (например, входное событие REQ запускает обработку данных), что отличается от стандарта IEC 61131-3, где исполнение ФБ осуществляется постоянно в цикле опроса;
-
выходные события (например, CNF) сигнализируют о завершении вычислений;
-
алгоритмы могут быть реализованы на языках, совместимых с IEC 61131-3 (например, ST, FBD).
Составные функциональные блоки (CFB – Composite Function Block)
-
Создаются как сети из других ФБ (BFB, SIFB или даже CFB), соединённых через события и данные.
Особенности:
-
не имеют собственной логики — поведение определяется внутренней структурой подключенных блоков;
-
позволяют инкапсулировать сложную логику в модули для повторного использования;
-
не поддерживают распределение между устройствами (в отличие от подприложений).
Интерфейсные сервисные блоки (SIFB – Service Interface Function Block):
-
Скрывают реализацию, предоставляя только описание поведения через сервисные последовательности (например, для взаимодействия с аппаратурой или внешними системами).
Особенности:
-
используются для коммуникации (например, Modbus, OPC UA), управления устройствами или доступа к операционной системе;
-
не имеют ECC — их логика описывается на уровне сервисов (например, «отправить запрос → получить ответ»);
-
примеры: блоки для публикации/подписки (PUB/SUB), клиент-серверного взаимодействия.
Интерфейс ФБ описывается в файле с расширением *.fbt и содержит:
-
название типа ФБ;
-
перечень входов событий и данных;
-
перечень выходов событий и данных.
Дополнительно в *.fbt файле могут содержаться: спецификация конечного автомата ФБ (ECC), код методов ФБ на языке ST, декларации внутренних переменных и начальных значения входов данных и внутренних переменных. Если выполнять требования стандарта IEC 61499, то любой ФБ, разработанный пользователем в открытой среде разработки, может быть перенесён в другую открытую среду разработки и исполнен без потери функций.
Существуют различные модели выполнения ФБ:
-
непрерывный многопотоковый ресурс (NPMTR-модель);
-
прерываемый многопотоковый ресурс (PMTR-модель).
4daic forte реализует PMTR-модель. После завершения обработки события ФБ текущее входное событие удаляется и порождается выходное событие. Событие, порождаемое ФБ, помещается в конец очереди событий ресурса. Каждое событие содержит ссылку на ФБ, который должен его обрабатывать. Ресурс извлекает из головы очереди событий новое событие и начинает выполнение связанного с ним ФБ. В результате порядок обработки ФБ напоминает волну обработки.
Среда исполнения 4diac forte содержит скомпилированные реализации блоков стандартной библиотеки в виде кода С++ классов (каждому типу ФБ соответствует С++ класс). Среда исполнения при старте может загрузить программу для исполнения из загрузочного файла. Загрузочный файл содержит команды конфигурирования для:
-
создания ресурсов;
-
создания ФБ;
-
создания связей данных;
-
создания связей событий;
-
задания начальных значений входов данных.
2. Библиотека
ФБ, как стандартные, так и пользовательские, могут быть добавлены в библиотеку. В стандарте IEC61499 и среде 4diac, библиотека представляет собой коллекцию ФБ, которые можно использовать для разработки распределенных систем управления. Эти блоки инкапсулируют определенные функции и могут быть легко интегрированы в приложения для создания сложных систем управления. В библиотеке могут быть различные блоки, которые обеспечивают широкий спектр возможностей, от работы с файлами до решения задач технического зрения. Библиотека позволяет повторно использовать ФБ в различных приложениях, что упрощает разработку и поддержку систем управления. ФБ, входящие в библиотеку, могут храниться в репозиториях и могут импортироваться и экспортироваться в текстовом синтаксисе или в синтаксисе XML, определенном в IEC 61499-2. Такие объекты имеют атрибуты поставщика (vendor, programmer и т.д.) и версии (номер версии, дата и т.д.), которые помогают в управлении, в дополнение к имени в качестве ключевого атрибута. Стандарт IEC 61499 дает возможность создавать пользовательские ФБ, которые могут включать в себя уже существующие в библиотеке ФБ.
Как стандартные так и вновь созданные ФБ поддерживают:
-
экспорт в С++ код, включение его в проект FORTE и собственную/специализированную «сборку» версии FORTE.
-
динамическую загрузку ФБ в виде Lua кода. Динамическая загрузка в виде Lua кода не требует экспорта и выполняется на этапе развертывания приложения. При этом, инструкция по созданию ФБ, передаваемая от 4diac IDE в FORTE, содержит Lua скрипт, сгенерированный для этого ФБ. Увидеть содержимое скрипта можно выполнив экспорт блока в виде Lua кода.
В 4diac IDE библиотека содержит ФБ для выполнения базовых операций и обеспечивает реализацию следующих возможностей:
-
преобразования типов;
-
обработки событий;
-
предоставления функций аналогичных IEC 61131 (арифметические операции, триггеры, битовые операции, строковые операции, операции сравнения, преобразования типа, счетчики, математические операции, операции выбора, операции с таймерами);
-
поддержки работы с платами локального ввода-вывода;
-
поддержки работы с промышленными шинами;
-
поддержки реконфигурирования;
-
работы с событиями реального времени;
-
использования утилит ввода-вывода.
3. Приложение
Далее, из ФБ собирается приложение. Приложение — это программно-функциональная единица, состоящая из ФБ (Applicatioin — software functional unit that is specific to the solution of a problem in industrial-process measurement and control) и предназначенная для решения задач измерения и управления промышленными процессами. Приложение может быть распределено по ресурсам и взаимодействовать с другими приложениями, что является основным отличием стандарта IEC 61499 от IEC 61131 и позволяет реализовывать распределенное приложение в АСУТП. В стандарте IEC 61131 приложение выполняется только на одном ресурсе.
Например, приложение может состоять из одного или нескольких контуров управления, в которых выборка входных данных выполняется в одном ресурсе (устройстве), обработка управления выполняется — в другом, а преобразование выходных данных — в третьем.
4. Ресурс
Сразу внесем ясность, что такое ресурс. В контексте стандарта IEC61499 и среды 4diac, ресурс (Resource) определяется как функциональная единица, имеющая независимое управление своей работой. Она обеспечивает различные сервисы для приложений, включая планирование и выполнение алгоритмов. Ресурсы могут быть частью устройств и обеспечивают выполнение ФБ, которые являются основными элементами распределенных систем управления.
В реализации 4diac forte ресурс содержит один поток обработки и независимую очередь событий. Поток обработки событий реализуется в классе CEventChainExecutionThread. При старте системы устройство по команде START запускает все содержащиеся в нем ресурсы.
Последовательность вызова методов при команде START в 4diac forte показана на рисунке ниже:
5. Управляющая программа
Для создания управляющей программы в 4diac IDE создаётся проект, который включает в себя одно или несколько приложений (application в терминах IEC 61499), информацию об устройствах (вычислительных узлах, на которых может быть развернута программа и сетевых соединениях между ними), и о стандартных и новых (например, созданных пользователем) ФБ, которые используются в приложении.
В IEC 61131-3 так сделать не получится, т.к. управляющая программа работает на одном ПЛК (ресурсе). Поэтому и был разработан новый стандарт, который позволит строить распределенные приложения.
Управляющая программа (проект) в 4diac IDE сохраняется в виде файла с расширением *.sys. Файл проекта записывает в xml-формате следующую информацию:
-
спецификацию графа ФБ (перечень используемых ФБ, связи данных и событий между ними);
-
спецификацию устройств;
-
информацию о назначении ФБ на устройства.
К сожалению, формат не совместим с PLCOpenXML, и это нам нужно будет изменить.
Среда разработки 4diac IDE взаимодействует со средой исполнения forte через запрос-ответ по протоколу на основе tcp с сообщениями, оформленными в при помощи XML. Инициатором запросов является IDE.
Протокол позволяет выполнять следующие операции:
-
загрузка и запуск приложения (работа с ресурсами и ФБ);
-
отладка приложения (чтение значений входов и выходов ФБ, запись («форсирование») входов и выходов ФБ и событий).
Обобщенный формат команд:
0x50 [Длина имени ресурса 2 байта ][Имя ресурса] 0x50 [XML length 2 байта] < Тело команды />
Допустимые значения поля Action: CREATE, DELETE, START, STOP, READ, WRITE, KILL, QUERY, RESET.
Обобщенный формат ответа в случае успешного выполнения команды:
0x50 [Длина тела XML сообщения — 2 байта]
Обобщенный формат ответа в случае неуспешного выполнения команды
0x50 [XML length 2 байта]
Таблица перечня основных команд, используемых в 4diac
|
cmd |
object |
result |
|
START |
APPLICATION |
Запуск приложения. |
|
STOP |
APPLICATION |
Остановка приложения. |
|
KILL |
APPLICATION |
Принудительное завершение приложения. |
|
QUERY |
APPLICATION |
Проверка состояния приложения. |
|
CREATE |
RESOURCE |
Создание ресурса в устройстве. |
|
DELETE |
RESOURCE |
Удаление ресурса. |
|
START |
RESOURCE |
Запуск ресурса. |
|
STOP |
RESOURCE |
Остановка ресурса. |
|
READ |
VARIABLE |
Чтение значения переменной. |
|
WRITE |
VARIABLE |
Запись значения в переменную. |
|
CREATE_CONNECTION |
CONNECTION |
Создание соединения между блоками. |
|
DELETE_CONNECTION |
CONNECTION |
Удаление соединения. |
|
UPLOAD |
TYPE_LIBRARY |
Загрузка библиотеки типов. |
|
DOWNLOAD |
DEVICE |
Загрузка конфигурации на устройство. |
Работа с ресурсами и ФБ включает выполнение следующих операций:
-
получение списка ФБ;
-
создание ресурса;
-
Для ресурса. Создание ФБ;
-
Для ресурса. Задание значения входа ФБ;
-
Для ресурса. Создание связи;
-
Для ресурса. Запуск ресурса.
6. Загрузка приложения в среду исполнения
После того, как создана управляющая программа, она загружается в среду исполнения в определенной последовательности.
Как видно из таблицы доступных команд и из диаграммы последовательности, передача проекта, по сути — это передача команд. IEC 61499 и 4diac IDE, в частности, поддерживают добавление в уже исполняемую программу нового экземпляра ФБ, связей и запуска его исполнения, что даёт возможность дополнять программу новыми ФБ (доступными в среде исполнения) без остановки уже выполняемого алгоритма и его рестарта.
7. Отладка
И, конечно, далее идет всеми любимый процесс отладки. Среда разработки 4diac IDE позволяет для отладочных целей выполнять просмотр значений входов и выходов ФБ, просмотр числа сгенерированных событий, изменение значений входов и выходов данных, генерацию событий. Для реализации этой функциональности в процессе отладки могут выполняться следующие операции:
-
декларация наблюдаемых переменных (входов и выходов ФБ) для просмотра (CREATE);
-
запрос на чтение (READ) значений наблюдаемых переменных (входов и выходов ФБ) для просмотра;
-
запрос на изменение значения переменной.
Стандарт IEC 61499 определяет модель выполнения распределённой системы управления в терминах взаимодействующих ФБ, которые не сильно отличаются от привычных многим ФБ в IEC 61131. Основное отличие заключается в наличие входов и выходов для событий. Алгоритм, выполняемый ФБ, может быть разработан на FBD, ST, а также на C++.
8. Что мы уже доработали и включили в первый релиз
Для взаимодействия среды исполнения forte с полевыми протоколами была реализована шина данных и добавлены новые функциональные блоки в библиотеку 4diacIDE. Для взаимодействия плагинов протоколов через шину данных со средой исполнения нами был добавлен интерфейс CAPI (C Application Programming Interface), используя который в дальнейшем можно добавлять новые протоколы или получать данные полевых протоколов для обработки. В первом релизе мы разработали плагины для следующих полевых протоколов, которые работают независимо от ядра исполнения:
-
протокол Modbus RTU мастера (MBUSPlugin),
-
протокол Modbus TCP мастера (MBUSPlugin),
-
протокол Modbus RTU slave (MBUSPlugin),
-
протокол Modbus TCP slave (MBUSPlugin),
-
протокол MQTT (MQTTPlugin).
Рассмотрим наши доработки на примере ФБ, реализующего опрос устройств по протоколу Modbus:
Инициализация происходит по приходу события MAP. В момент прихода события MAP вход QI должен быть установлен в true. Для реконфигурирования количества подключаемых элементов достаточно переименовать элемент MBUS, и редактором типа элемента добавить нужное количество IO входов. Название блока должно иметь вид MBUS_n comment, например, MBUS8_rtu, где n — максимальное количество входов-выходов. Для работы в поле PARAM необходимо задать параметры Modbus RTU или Modbus TCP соединения в JSON формате. Пример строки PARAM для работы с Modbus RTU:
‘{«id»:1, «device»:»/dev/ttyS0″, «baud»:9600, «bps»:»8N1″,»update»:»500ms»}’
Ранее для того, чтобы в 4diacIDE реализовать такой же опрос, необходимо было предварительно скачать, скомпилировать библиотеку libmodbus на целевом устройстве, а затем, используя стандартный функциональный блок CLIENT, правильно задать параметры работ блока. Также нужно скомпилировать черeз cmake и сам Forte, указав путь к скомпилированной библиотеке libmodbus. Сам ФБ в этой библиотеке выглядит вот так:
А в поле ID требуется задать параметры работы ФБ в следующем виде:
modbus[protocol:port:baudrate:parity:databits:stopbits:flow:(slaveId):pollFrequency:readAddresses:sendAddresses(:responseTimeout:byteTimeout)]
modbus[rtu:/dev/ttyS0:19200:N:8:1::1:2000:i6142,i6132,i6137:h64025..64028,h63995..63998]
Как видно, ФБ создан из уже существующего стандартного блока, выделенного типа ФБ для Modbus нет. Задание адреса не очевидно для конкретного устройства, также еще стоит проблема маппинга переменных и задания нужного типа переменной.
Подобные упрощения для пользователя были сделаны и для передачи значения переменной в OPC UA сервер, об этом тоже расскажем, но чуть позже.
Итог
Гибкость, переносимость и расширяемость — ключевые преимущества открытого подхода на IEC 61499.
Открытый программный ПЛК и среда разработки на базе IEC 61499 поддерживают:
-
распределение кода между устройствами — буквально в два клика,
-
переносимость проектов между разными средами,
-
динамическое обновление — добавление функциональных блоков «на лету».
Наши доработки:
-
поддержка новых протоколов через CAPI (включая сторонние плагины),
-
упрощение разработки пользовательских прикладных программ для опроса полевых шин.
P.s. В следующих публикациях в серии статей по разработке открытого программного ПЛК будут рассмотрены такие темы: архитектура программного ПЛК; разработка и использование ФБ устройств ввода/вывода (на примере модулей ввода/вывода Овен); подключение плагинов проприетарных шин (на примере шины МЗТА); подключение коммуникационного протокола (на примере Modbus или OPC UA) и еще много интересного.
Наше решение будет иметь открытый исходный код и мы приглашаем разработчиков и вендоров к совместной работе над развитием программного ПЛК (open.soft.plc@severstal.com).
to be continued..
ссылка на оригинал статьи https://habr.com/ru/articles/905334/
Добавить комментарий