Регулирование давления в трубопроводе
В примере демонстрируется модель Engee регулирования давления в трубопроводе с последующим выполнением сгенерированного из модели кода на микроконтроллере Arduino.
Введение
Этот пример является следующим этапом развития примера "Моделирование управления давлением в трубопроводе". На предыдущем этапе была рассмотрена технологическая часть объекта и произведена отладка регулятора для стабилизации заданного давления, на текущем этапе система управления расширена автоматическим заданием изменяющегося давления в трубопроводе и блоками C Function для взаимодействия управляющего алгоритма с периферией микроконтроллера.
Модель системы управления
Технологическая часть модели имеет то же представление, что и в модели предыдущего этапа проекта.

Система управления трубопроводом объединена в подсистему Controller для последующей генерации кода.
В этой подсистеме можно выделить следующие основные функциональные части:
- блоки
C Functionвзаимодействия с периферией микроконтроллера, - блок
Chartформирования заданного давления в трубопроводе, - подсистема ПИ-регулятора.

Блоки взаимодействия с периферией имеют следующее назначение:
ADC_A0- считывание и масштабирование аналогового сигнала с выходаA0микроконтроллера Arduino,PWM- масштабирование сигнала управления и передача его на ШИМ-канал микроконтроллера для регулирования положения задвижки,Serial- для вывода в последовательный порт массива значений: заданного и измеренного давления, сигнала управления.
ПИ-регулятор представлен в дискретных элементах и имеет следующие коэффициенты: . Блок задания давления Chart представляет собой диаграмму с одним родительским и тремя дочерними состояниями, каждое из которых формирует своё значение задания давления. Переключение между ними происходит по внутреннему счётчику Cnt.

Моделирование регулирования давления
Для моделирования работы системы управления загрузим и запустим модель arduino_pressure_regulator.engee:
if "arduino_pressure_regulator" in [m.name for m in engee.get_all_models()]
m = engee.open( "arduino_pressure_regulator" );
else
m = engee.load( "$(@__DIR__)/arduino_pressure_regulator.engee" );
end
data = engee.run(m);
Из полученных данных моделирования построим графики сигналов:
Chart.RefPress- заданное давление в трубопроводе,
Датчик давления.1- измеренное давление в трубопроводе.
using Plots
plotlyjs()
plot(data["Chart.RefPress"].time,
data["Chart.RefPress"].value,
label="Заданное давление",
lw=2, size=(900,300), legend=:topright)
plot!(data["Датчик давления.1"].time,
data["Датчик давления.1"].value,
label="Измеренное давление",
lw=2)
Как можно наблюдать на графиках, система управления автоматически формирует изменяющееся задание давления и регулирует текущее давление в трубопроводе.
Генерация кода
Сгенерируем код из подсистемы Controller для последующей загрузки управляющего алгоритма в микроконтроллер:
engee.generate_code( "$(@__DIR__)/arduino_pressure_regulator.engee",
"$(@__DIR__)/Controller_code";
subsystem_name="Controller" )
Полученные в директории Controller_code файлы - arduino_pressure_regulator_Controller.h и arduino_pressure_regulator_Controller.c далее мы будем использовать при подключении в скетче pressure_controller.ino. Перейдём к выполнению этого скетча на микроконтроллере.
Выполнение на целевом устройстве
Для тестирования работы алгоритма перед отладкой модели Engee для реального объекта в этом примере мы воспользуемся отладочной платой Arduino MEGA2560. В среде Arduino IDE скомпилируем и загрузим в микроконтроллер скетч с подключенными сгенерированными из модели файлами Си. После загрузки в последовательном порте компьютера можно наблюдать следующие графики:

Из графиков видно, как изменяется управляющий сигнал ПИ-регулятора (третий график) при изменении текущего давления в трубопроводе (второй график, сымитированный сигнал).
Заключение
В этом демонстрационном примере мы рассмотрели развитие модели управления трубопроводом автоматическим формированием заданного давления при помощи библиотеки Конечных автоматов Engee с последующей генерацией кода и тестированием выполнения разработанной модели управления на целевом устройстве.