使用图表块控制管道压力
在此示例中,我们将创建用于调节管道压力的控制逻辑。 要创建算法,我们将使用有限状态机库的Chart块。
操作原理
沿以下路径的示例中提供了管道模型的详细描述:/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帕。
结论
在此示例中,我们使用图表块中实现的控制逻辑演示了管道中的压力控制。