Регулирование давления в трубопроводе
В примере демонстрируется модель 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 с последующей генерацией кода и тестированием выполнения разработанной модели управления на целевом устройстве.