Engee 文档
Notebook

使用图表装置控制管道压力

在本例中,我们将创建管道压力控制的控制逻辑。为了创建算法,我们将使用有限自动机库中的图表块。

工作原理

有关管道模型的详细说明,请参阅以下路径上的示例:/user/start/examples/physmod/liquid_pressure_regulator 。在本例中,我们将简要介绍该模型,并重点介绍控制所需的要点。

模型结构图如下,也可在模型hydro_control_chart.engee 中查看。

hydro_control_chart_1724956899773.png

我们需要保持 ** 容积块中的压力。意外泄漏会导致压力变化。回路中有一个压力传感器用于测量压力。需要根据设置**来维持压力。

控制逻辑

控制器输入两个信号:设定值和传感器值。控制器输出的信号输入到。该信号决定横截面积。

控制器**的图表块包含三个状态。在初始状态下,确定设定压力和测量压力之间的差值。然后可以进行三种转换。

  • 如果差值为负值且超过设定的临界值,则转入状态low 。在这种情况下,我们尽量减小孔口的横截面积;
  • 如果差值为正值且超过设定阈值,则转入状态up 。设置最大横截面积;
  • 如果误差在要求值范围内,则保持初始状态。

hydro_control_chart_1724953338268.png

让我们运行模型并绘制图表来评估结果。

定义加载和运行模型的函数

启动代码单元,生成运行模型的函数。

In [ ]:
function start_model_engee()
    try
        engee.close("hydro_control_chart", force=true) # закрытие модели 
        catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
            m = engee.load("$(@__DIR__)/hydro_control_chart.engee") # загрузка модели
        end;

    try
        engee.run(m) # запуск модели
        catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
            m = engee.load("$(@__DIR__)/hydro_control_chart.engee") # загрузка модели
            engee.run(m) # запуск модели
        end
end
Out[0]:
start_model_engee (generic function with 1 method)

获取建模结果

让我们使用上面生成的函数运行模型模拟。

In [ ]:
try
    start_model_engee()
    catch err
    end;

将记录的信号写入变量simout 。并将其转换为数据数组。

In [ ]:
result = simout;
res = collect(result)
Out[0]:
2-element Vector{WorkspaceArray}:
 WorkspaceArray("hydro_control_chart/Датчик давления.1")
 WorkspaceArray("hydro_control_chart/Уставка.1")

将压力传感器的值和设定值写入变量。

In [ ]:
control_signal = collect(res[1])
pressure = collect(res[2])
Out[0]:

2,001 rows × 2 columns

timevalue
Float64Float64
10.0100000.0
20.01100000.0
30.02100000.0
40.03100000.0
50.04100000.0
60.05100000.0
70.06100000.0
80.07100000.0
90.08100000.0
100.09100000.0
110.1100000.0
120.11100000.0
130.12100000.0
140.13100000.0
150.14100000.0
160.15100000.0
170.16100000.0
180.17100000.0
190.18100000.0
200.19100000.0
210.2100000.0
220.21100000.0
230.22100000.0
240.23100000.0
250.24100000.0
260.25100000.0
270.26100000.0
280.27100000.0
290.28100000.0
300.29100000.0

获取数据的可视化

In [ ]:
using Plots
plot(control_signal[:,1], control_signal[:,2], label="Уставка")
plot!(pressure[:,1], pressure[:,2], label="Датчик давления")
Out[0]:

模拟开始 5 秒后,设定点压力升至 120 千帕。管道压力在大约 10 秒钟后达到设定点压力,并在设定阈值$\pm$ 100 Pa 附近。

结论

在本例中,我们利用图表模块中的控制逻辑演示了管道中的压力控制。

示例中使用的块