管道压力控制建模
本例演示了管道压力控制建模。
模型的工作原理
管道由物理建模库的模块描述,特别是体积模块负责其体积。
通过阀门 1,液体从源流向容积。这反过来又与压力传感器相连,信号由此被输送到由加法器、设定值调节器和 PID 控制器组成的控制系统。
模型示意图:

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]:
运行模拟
In [ ]:
try
start_model_engee() # запуск симуляции с помощью специальной функции, реализованной выше
catch err
end;
从 simout 变量中选择绘图的温度数据并将其写入变量:
In [ ]:
sleep(5)
result = simout;
res = collect(result)
Out[0]:
将设定值和压力传感器信号写入变量:
In [ ]:
control_signal = collect(res[1])
pressure = collect(res[25])
Out[0]:
模拟结果的可视化
In [ ]:
using Plots
plot(control_signal[:,1], control_signal[:,2], label="Задатчик", linewidth=3)
plot!(pressure[:,1], pressure[:,2], label="Датчик давления", linewidth=3)
Out[0]:
结论
在本示例中,演示了利用自动控制系统对实物进行建模。瞬态时间约为 15 秒,压力稳定在可接受的范围内,其微小波动与管道中的液体泄漏有关。