Модель системы регулирования температуры воздуха¶
Целью данного примера является демонстрация возможностей блока Chart в формировании логики управления различными объектами. В частности, в этом примере рассмотрим вариант управления температурой воздуха в комнате.
Принцип работы¶
Модель (AirCond_Chart.engee) состоит из нескольких подсистем. Температура снаружи формируется случайным сигналом и реализована в блоке External Temperature. Термодинамика внутри комнаты в подсистеме - Room Termodynamics. В ней моделируется влияние внешнего теплового потока и рассчитывается текущая температура воздуха с учетом коэффициента влияния кондиционера - heatFlow, значение которого определяется в блоке Chart. Подробнее ознакомиться с реализацией моделей можно кликнув два раза по интересующей подсистеме.
В блоке Chart реализована логика управления температурой воздуха в комнате.
Алгоритм работы блок схемы состоит в следующем. На вход Chart поступают сигналы:
- temp - текущая температура воздуха в комнате, F;
- tempDesired - желаемая температура воздуха, F;
Далее внутри блока происходит сравнение двух параметров. Если текущая температура будет больше желаемой, то параметр heatFlow примет значение -1 и температура начнет снижаться. Если текущая температура меньше желаемой, то параметр heatFlow будет равняться 1 и температура станет расти. В случае если значения текущей температуры попало в диапазон допустимых значений, то heatFlow устанавливается равным 0.
Запустим модель и посмотрим на результат выполнения.
# Подключение вспомогательной функции запуска модели.
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
run_model("AirCond_Chart",@__DIR__) # Запуск модели.
# Считывание из 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);
using Plots
plot(T_ext.time, T_ext.value, label = "T_ext")
plot!(T.time, T.value, label = "T")
Как можно заметить, при скачках значений температуры снаружи, внутри комнаты температура также начала изменяться, однако благодаря управляющей логике, оставалась в допустимом диапазоне значений. Построим график изменения параметра heatFlow, чтобы убедиться в работе блока Chart.
plot(heatFlow.time, heatFlow.value, label = "heatFlow")
Вывод¶
В этом примере мы рассмотрели способ реализации управляющей логики с помощью блока Chart библиотеки конечных автоматов. Вариант реализации был упрощенным, но по результатам моделирования видно, что модель хорошо справляется с поддержанием температуры.