Engee 文档
Notebook

管道压力控制建模

本例演示了管道压力控制建模。

模型的工作原理

管道由物理建模库的模块描述,特别是体积模块负责其体积。

通过阀门 1,液体从流向容积。这反过来又与压力传感器相连,信号由此被输送到由加法器、设定值调节器和 PID 控制器组成的控制系统。

模型示意图:

liquid_pressure_regulator_1725958617592.png

PID 控制器向 ** 阀 1** 发出控制信号,使其打开或关闭,从而实现压力调节。

容积块的右侧,流体通路上是泄漏块,它与阀门 1一样,是一个受控节流阀。

渗漏**块会从模拟管道中产生一些 "随机 "流体。

通过该区块的流体最终进入排放,该区块由一个具有给定压力的无限储液器描述。

边界条件

1.在气源处,压力始终保持在 151.3 千帕。 2.在储液器中,即液体通过泄漏排出的空间,压力始终为 50 千帕。

初始条件:

1.管道中的初始压力为 100 千帕。 2.设定点信号为 100000,即在调节时为 100 kPa。

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

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

    try
        engee.run(m) # запуск модели
        catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
            m = engee.load("$(@__DIR__)/liquid_pressure_regulator.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 [ ]:
sleep(5)
result = simout;
res = collect(result)
Out[0]:
28-element Vector{WorkspaceArray}:
 WorkspaceArray("liquid_pressure_regulator/Step.1")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.port_a.p")
 WorkspaceArray("liquid_pressure_regulator/Утечка.rho_b")
 WorkspaceArray("liquid_pressure_regulator/Утечка.Vdot_b")
 WorkspaceArray("liquid_pressure_regulator/Утечка.restriction_area_in.u")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.rho_a")
 WorkspaceArray("liquid_pressure_regulator/Add.1")
 WorkspaceArray("liquid_pressure_regulator/Утечка.mdot_b")
 WorkspaceArray("liquid_pressure_regulator/Утечка.port_b.p")
 WorkspaceArray("liquid_pressure_regulator/Утечка.Vdot_a")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.port_b.mdot")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.mdot_a")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.restriction_area_in.u")
 ⋮
 WorkspaceArray("liquid_pressure_regulator/PID Controller.1")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.Vdot_a")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.port_b.p")
 WorkspaceArray("liquid_pressure_regulator/Утечка.delta_p")
 WorkspaceArray("liquid_pressure_regulator/Утечка.mdot_a")
 WorkspaceArray("liquid_pressure_regulator/Утечка.rho_a")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.mdot_b")
 WorkspaceArray("liquid_pressure_regulator/Утечка.port_a.mdot")
 WorkspaceArray("liquid_pressure_regulator/Датчик давления.1")
 WorkspaceArray("liquid_pressure_regulator/Утечка.port_a.p")
 WorkspaceArray("liquid_pressure_regulator/Утечка.port_b.mdot")
 WorkspaceArray("liquid_pressure_regulator/Клапан 1.Vdot_b")

将设定值和压力传感器信号写入变量:

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

10,001 rows × 2 columns

timevalue
Float64Float64
10.0100000.0
20.011.00048e5
30.021.00097e5
40.031.00145e5
50.041.00132e5
60.05100176.0
70.061.00164e5
80.071.00166e5
90.081.00155e5
100.091.00144e5
110.1100134.0
120.111.00123e5
130.121.00113e5
140.131.00103e5
150.141.00092e5
160.151.00082e5
170.161.00072e5
180.171.00061e5
190.181.00051e5
200.191.00041e5
210.21.00031e5
220.211.00022e5
230.221.00012e5
240.231.00002e5
250.2499992.2
260.2599982.6
270.2699973.0
280.2799963.5
290.2899954.0
300.2999944.6

模拟结果的可视化

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

结论

在本示例中,演示了利用自动控制系统对实物进行建模。瞬态时间约为 15 秒,压力稳定在可接受的范围内,其微小波动与管道中的液体泄漏有关。