使用图表装置控制管道压力
在本例中,我们将创建管道压力控制的控制逻辑。为了创建算法,我们将使用有限自动机库中的图表块。
工作原理
有关管道模型的详细说明,请参阅以下路径上的示例:/user/start/examples/physmod/liquid_pressure_regulator
。在本例中,我们将简要介绍该模型,并重点介绍控制所需的要点。
模型结构图如下,也可在模型hydro_control_chart.engee
中查看。

我们需要保持 ** 容积块中的压力。意外泄漏会导致压力变化。回路中有一个压力传感器用于测量压力。需要根据设置**来维持压力。
控制逻辑
控制器输入两个信号:设定值和传感器值。控制器输出的信号输入到阀。该信号决定横截面积。
控制器**的图表块包含三个状态。在初始状态下,确定设定压力和测量压力之间的差值。然后可以进行三种转换。
- 如果差值为负值且超过设定的临界值,则转入状态
low
。在这种情况下,我们尽量减小孔口的横截面积; - 如果差值为正值且超过设定阈值,则转入状态
up
。设置最大横截面积; - 如果误差在要求值范围内,则保持初始状态。

让我们运行模型并绘制图表来评估结果。
定义加载和运行模型的函数
启动代码单元,生成运行模型的函数。
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]:
获取建模结果
让我们使用上面生成的函数运行模型模拟。
In [ ]:
try
start_model_engee()
catch err
end;
将记录的信号写入变量simout
。并将其转换为数据数组。
In [ ]:
result = simout;
res = collect(result)
Out[0]:
将压力传感器的值和设定值写入变量。
In [ ]:
control_signal = collect(res[1])
pressure = collect(res[2])
Out[0]:
获取数据的可视化
In [ ]:
using Plots
plot(control_signal[:,1], control_signal[:,2], label="Уставка")
plot!(pressure[:,1], pressure[:,2], label="Датчик давления")
Out[0]:
模拟开始 5 秒后,设定点压力升至 120 千帕。管道压力在大约 10 秒钟后达到设定点压力,并在设定阈值 100 Pa 附近。
结论
在本例中,我们利用图表模块中的控制逻辑演示了管道中的压力控制。