Документация Engee
Notebook

Регулирование давления в трубопроводе

В примере демонстрируется модель Engee регулирования давления в трубопроводе с последующим выполнением сгенерированного из модели кода на микроконтроллере Arduino.

Введение

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

Модель системы управления

Технологическая часть модели имеет то же представление, что и в модели предыдущего этапа проекта.

truboprovod_mai.png

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

  • блоки C Function взаимодействия с периферией микроконтроллера,
  • блок Chart формирования заданного давления в трубопроводе,
  • подсистема ПИ-регулятора.

truboprovod_subsystem.png

Блоки взаимодействия с периферией имеют следующее назначение:

  • ADC_A0 - считывание и масштабирование аналогового сигнала с выхода A0 микроконтроллера Arduino,
  • PWM - масштабирование сигнала управления и передача его на ШИМ-канал микроконтроллера для регулирования положения задвижки,
  • Serial - для вывода в последовательный порт массива значений: заданного и измеренного давления, сигнала управления.

ПИ-регулятор представлен в дискретных элементах и имеет следующие коэффициенты: $k_П = 0.375 \cdot10^{-6}, 1/T_И = 0.875 \cdot10^{-6}$. Блок задания давления Chart представляет собой диаграмму с одним родительским и тремя дочерними состояниями, каждое из которых формирует своё значение задания давления. Переключение между ними происходит по внутреннему счётчику Cnt.

truboprovod_chart.png

Моделирование регулирования давления

Для моделирования работы системы управления загрузим и запустим модель arduino_pressure_regulator.engee:

In [ ]:
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 - измеренное давление в трубопроводе.
In [ ]:
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)
Out[0]:

Как можно наблюдать на графиках, система управления автоматически формирует изменяющееся задание давления и регулирует текущее давление в трубопроводе.

Генерация кода

Сгенерируем код из подсистемы Controller для последующей загрузки управляющего алгоритма в микроконтроллер:

In [ ]:
engee.generate_code( "$(@__DIR__)/arduino_pressure_regulator.engee",
                     "$(@__DIR__)/Controller_code";
                     subsystem_name="Controller" )
[ Info: Generated code and artifacts: /user/start/examples/codegen/arduino_pressure_regulator/Controller_code

Полученные в директории Controller_code файлы - arduino_pressure_regulator_Controller.h и arduino_pressure_regulator_Controller.c далее мы будем использовать при подключении в скетче pressure_controller.ino. Перейдём к выполнению этого скетча на микроконтроллере.

Выполнение на целевом устройстве

Для тестирования работы алгоритма перед отладкой модели Engee для реального объекта в этом примере мы воспользуемся отладочной платой Arduino MEGA2560. В среде Arduino IDE скомпилируем и загрузим в микроконтроллер скетч с подключенными сгенерированными из модели файлами Си. После загрузки в последовательном порте компьютера можно наблюдать следующие графики:

truboprovod_1080.gif

Из графиков видно, как изменяется управляющий сигнал ПИ-регулятора (третий график) при изменении текущего давления в трубопроводе (второй график, сымитированный сигнал).

Заключение

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

Блоки, использованные в примере