气温控制系统型号¶
本例的目的是演示图表模块在形成控制各种对象的逻辑方面的功能。在本例中,我们将特别考虑控制室内空气温度的变体。
运行原理¶
该模型 (AirCond_Chart.engee) 由多个子系统组成。外部温度由随机信号产生,并在外部温度模块中实现。 房间内的热力学在子系统 - 房间热力学中实现。其中模拟了外部热流的影响,并计算了当前的空气温度,同时考虑了空调的影响系数 - heatFlow,其值在图表块中定义。 您可以双击感兴趣的子系统,了解更多有关模型实施的信息。
图表单元实现了控制室温的逻辑。
模块电路的算法如下。图表输入接收信号:
- temp - 室内当前空气温度,华氏度;
- tempDesired - 理想的空气温度,华氏度;
然后在程序块内对这两个参数进行比较。如果当前温度高于期望温度,则热流参数取值为-1,温度开始下降。如果当前温度低于预期温度,则 heatFlow 参数将设为 1,温度开始上升。如果当前温度在可接受值范围内,则热流参数设置为 0。
让我们运行模型并查看执行结果。
In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model, path_to_folder )
Path = path_to_folder * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
model_output = engee.run( model, verbose=true ); # Запустить модель
else
model = engee.load( Path, force=true ) # Загрузить модель
model_output = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return model_output
end
Out[0]:
In [ ]:
run_model("AirCond_Chart",@__DIR__) # Запуск модели.
Out[0]:
In [ ]:
# Считывание из simout залогированных сигналов
T_ext = simout["AirCond_Chart/T_ext"];
T_ext = collect(T_ext);
heatFlow = simout["AirCond_Chart/Chart.heatFlow"];
heatFlow = collect(heatFlow);
T = simout["AirCond_Chart/T"];
T = collect(T);
In [ ]:
using Plots
plot(T_ext.time, T_ext.value, label = "T_ext")
plot!(T.time, T.value, label = "T")
Out[0]:
正如您所看到的,当室外温度骤升时,室内温度也开始变化,但由于控制逻辑的作用,温度始终保持在可接受的范围内。让我们绘制一张 heatFlow 参数变化图,以确保图表模块正常工作。
In [ ]:
plot(heatFlow.time, heatFlow.value, label = "heatFlow")
Out[0]:
输出¶
在本示例中,我们考虑了使用有限自动机库的图表模块来实现控制逻辑的方法。虽然实施过程有所简化,但模拟结果表明,该模型能够很好地应对温度维持问题。