Добрый день! Меня зовут Татьяна Пчельникова, я — владелец продукта в ИТ-команде «Северстали». Мы с коллегами занимаемся разработкой компонентов для открытой АСУТП. В этой статье разберём, как создавать и применять пользовательские типы данных в нашей среде разработки Flogic. 

Что такое пользовательский тип данных?  

В языках программирования PLC (МЭК 61131-3), в том числе в Structured Text (ST), пользовательский тип данных — это механизм, позволяющий программисту создавать собственные типы переменных на основе существующих (базовых) типов. Простыми словами: если стандартных типов (например, INT, BOOL, REAL) недостаточно для удобного описания вашей задачи, вы можете создать свой тип.

Зачем это нужно?

  • Структурирование данных: объединение логически связанных переменных в одну группу (например, все параметры двигателя: скорость, температура, статус).

  • Повышение читаемости: код становится более понятным, так как вы оперируете терминами предметной области (например, «двигатель», «клапан», «команда»), а не просто числами.

  • Переиспользование: создав тип один раз, вы можете объявлять множество переменных этого типа по всему проекту.

Как создать пользовательский тип данных в нашей среде разработки?

Давайте рассмотрим поэтапно.

  • В созданном проекте правой кнопкой мыши жмём на Type Library, выбираем Новый → Тип...

2. В открывшемся окне выбираем имя Struct и задаём название типа, например, пусть будет Valve, и нажимаем кнопку «Готово».

В сложных проектах, кода возникают одноимённые типы пользовательских данных, которые требуется различать между собой, к наименованию типа пользовательских данных можем добавить пространство имён. Его указываем в поле «Пакет». При заполнении поля «Пакет» надо нажать Ctrl+«Пробел», и появится выбор примеров заполнения. 

Видим, что новая структура появилась в Type Library:

3 Дважды щёлкаем по ней, и открывается окно создания элементов структуры, заполним её данными для нашего примера:

Структура готова.

Простую структуру можно вложить в составную. Когда вы будете создавать составную структуру, в списке типов данных нужно выбрать имя вашей первой (простой) структуры. В итоге внутри сложной структуры появится группа полей, соответствующая простой структуре.

Так же можно добавлять «Тип» через имя «Группы», для этого нужно в поле «Импорт» нажать «+» и в поле нажать Ctrl + «Пробел». Затем в появившемся списке выбрать имя «Группы» нужной структуры, которую хотите включить. Нажать «Сохранить» и после этого в поле «Тип» можно написать имя нужной структуры, которую хотите добавить в составную. В итоге настройки будут выглядеть вот так:

На текущий момент развития нашего ОП ПЛК такие пользовательские структуры относятся к пользовательским функциональным блокам, и необходимо собрать их в среде исполнения. Как это сделать, можно посмотреть в одной из прошлых наших статей.

В среде разработки есть четыре функциональных блока для работы со структурами, которые можно объединить в две группы:

  • развёртывание элементов из структуры (STRUCT_DEMUX) и свертывание элементов в структуру (STRUCT_MUX);

  • чтение нужного элемента структуры (GET_STRUCT_VALUE) и запись значения в элемент структуры (SET_STRUCT_VALUE).

Рассмотрим каждый из функциональных блоков:

  • STRUCT_MUX. Выделяем этот функциональный блок, и в окне «Свойства» в поле «Структурированный тип» либо вводим нужное название пользовательского типа данных (в примере valve), либо нажимаем на троеточие и выбираем нужное, в нашем примере выберем valve. 

В результате функциональный блок принимает следующий вид:

Слева появляются входы для записи элементов структуры, а на выходе — структура, которую мы создали ранее.

  • STRUCT_DEMUX. Принцип работы аналогичен с предыдущим ФБ. Задаём на вход нужную структуру, и среда разработки сама разберёт её на элементы и отобразит их на функциональном блоке.

  • GET_STRUCT_VALUE. Задаём на входе ФБ in_struct нужную структуру, на входе member указываем имя элемента структуры. Тогда на выходе output ФБ будет значение элемента структуры.

  • SET_STRUCT_VALUE. В этом ФБ действуем по аналогии. На вход element_value привязываем значение, которое нужно записать в элемент структуры member. Тогда на выходе out_struct мы получим структуру с заданным значением элемента.

Создадим простой проект, в котором покажем работу рассмотренных функциональных блоков. Реализуем замкнутый контур управления, где PID‑блок вычисляет управляющее воздействие на основе разницы между заданной уставкой и текущим значением процесса. Это воздействие проходит через функциональные блоки преобразования типа REAL2REAL и мультиплексирования структур STRUCT_MUX, которые подготавливают данные для передачи. Затем сигнал поступает на блок FOPDT_SIM — симулятор объекта управления первого порядка с запаздыванием. Этот ФБ моделирует реакцию реального технологического процесса на управляющее воздействие.

Выход симулятора проходит через STRUCT_DEMUX, который извлекает измеренное значение из структуры данных и возвращает его на вход PID‑регулятора, замыкая контур обратной связи. Таким образом, система непрерывно сравнивает заданное значение с фактическим, корректирует управляющий сигнал и стремится минимизировать ошибку регулирования. Такая модульная архитектура на основе стандарта IEC 61499 позволяет тестировать и настраивать PID‑регулятор в безопасной среде без использования физического оборудования.

 

Приглашаем всех попробовать создать собственный тип пользовательских данных.

Ссылки для скачивания

Среда разработки (IDE). Исходники с вносимыми изменениями в IDE будем выкладывать по мере готовности.

Готовая сборка среды исполнения под архитектуры x86-64, arm или aarch64.

Исходные коды среды исполнения для самостоятельной сборки.

Также мы опубликовали в репозитории исходный код и конструкторскую документацию на плату Profibus master на базе микроконтроллера MIK32 Амур. Скачать исходный код можно здесь.

Посмотреть мастер‑класс работы по созданию собственных функциональных блоков можно в видео.

P. S. 

Напоминаем, что открытый программный программируемый логический контроллер (ОП ПЛК) будет иметь открытый исходный код, и мы приглашаем к совместной работе в этом проекте:

  • разработчиков,

  • вендоров,

  • интеграторов,

  • преподавателей и студентов вузов,

для написания своих библиотек и компонентов, используемых при решении практических задач. Пишите на почту open.soft.plc@severstal.com.