Engee 文档
Notebook

管道压力调节

该示例演示了管道压力调节的Engee模型,以及随后在Arduino微控制器上执行根据该模型生成的代码。

简介

本示例是"管道压力控制建模"示例开发的下一阶段。在前一阶段,我们考虑了对象的技术部分,并对用于稳定设定压力的调节器进行了调试;在现阶段,控制系统通过自动设定管道中不断变化的压力和控制算法与微控制器外围设备交互的模块C Function 进行了扩展。

控制系统模型

模型的技术部分与前一项目阶段的模型相同。

truboprovod_mai.png

管道控制系统集成到Controller 子系统中,用于后续代码生成。
该子系统的主要功能部分如下:

  • 与微控制器外围进行交互的区块C Function
  • 用于在管道中形成设定压力的模块Chart
  • PI 调节器子系统。

truboprovod_subsystem.png

外设交互块具有以下用途: ADC_A0 - 从 *Arduino 微控制器的A0 输出端读取和缩放模拟信号、 *PWM - 缩放控制信号并将其传输到微控制器的 PWM 通道,以调节闸阀位置、 *Serial - 向串行端口输出一系列数值:设定和测量压力、控制信号。

PI 控制器以离散元件表示,系数如下:$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.harduino_pressure_regulator_Controller.c 目录中的文件连接到草图pressure_controller.ino 中。让我们继续在微控制器上执行该草图。

在目标设备上执行

为了在调试Engee模型之前测试真实对象的算法,本例中我们将使用Arduino MEGA2560调试板。在 Arduino IDE 环境中,我们将编译草图并将模型生成的 C 文件加载到微控制器中。加载完成后,可以通过 PC 的串行端口观察到以下图形:

truboprovod_1080.gif

图中显示了当管道中的当前压力发生变化时,PI 控制器的控制信号(第三幅图)是如何变化的(第二幅图,模拟信号)。

结论

在本演示中,我们考虑通过使用Engee自动装置**库自动生成给定压力来开发管道控制模型,然后生成代码,并在目标设备上测试所开发控制模型的执行情况。