Engee 文档
Notebook

使用图表块控制管道压力

在此示例中,我们将创建用于调节管道压力的控制逻辑。 要创建算法,我们将使用有限状态机库的Chart块。

操作原理

沿以下路径的示例中提供了管道模型的详细描述:/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秒时达到设定值,并且处于设定阈值的区域 100帕。

结论

在此示例中,我们使用图表块中实现的控制逻辑演示了管道中的压力控制。