AnyMath 文档
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{Float64}("hydro_control_chart/Датчик давления.1")
 WorkspaceArray{Float64}("hydro_control_chart/Уставка.1")

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

In [ ]:
control_signal = collect(res[1])
pressure = collect(res[2])
Out[0]:
2001×2 DataFrame
1976 rows omitted
Rowtimevalue
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
⋮⋮⋮
199019.89120000.0
199119.9120000.0
199219.91120000.0
199319.92120000.0
199419.93120000.0
199519.94120000.0
199619.95120000.0
199719.96120000.0
199819.97120000.0
199919.98120000.0
200019.99120000.0
200120.0120000.0

接收数据的可视化

In [ ]:
using Plots
plot(control_signal[:,1], control_signal[:,2], label="设定点")
plot!(pressure[:,1], pressure[:,2], label="压力传感器")
Out[0]:
No description has been provided for this image

在模拟的第5秒,设定压力增加到120千帕。 管道压力在大约10秒时达到设定值,并且处于设定阈值的区域 100帕。

结论

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