管道压力控制建模
这个例子演示了管道压力控制的模拟.
模型如何工作
管道由物理建模库的块描述,特别是,卷块负责其体积。
通过阀1,液体从源单元流向体积单元。 反过来,一个压力传感器**被连接到它,从该信号被发送到控制系统,由一个加法器,一个设定点传感器和一个PID控制器表示。
模型图:
PID控制器发送控制信号给阀1打开或关闭,提供压力控制。
在体积块的右边,沿着流体运动的路径,有一个块泄漏,它就像阀门1一样,是一个受控的节气门。
块泄漏创建一些"意外"泄漏的液体从模拟管道。
通过该单元的液体最终进入排放,这由具有设定压力的无限储液器描述。
边界条件
- 源中的压力始终保持在151.3kpa。
- 在罐中,其特征在于液体通过泄漏排出的空间,压力始终为50kPa。
初始条件:
- 管道中的初始压力为100kPa。
- 设定点信号为100000,在调节范围内意味着100kPa。
定义加载和运行模型的函数:
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 [ ]:
result = simout;
res = collect(result)
Out[0]:
在变量中记录设定点和压力传感器信号:
In [ ]:
control_signal = collect(res[4])
pressure = collect(res[12])
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秒,压力稳定在可接受的限度内,轻微的波动与来自管道的流体泄漏相关联。