Документация Engee

Модель системы регулирования температуры воздуха

Целью данного примера является демонстрация возможностей блока Chart в формировании логики управления различными объектами. В частности, в этом примере рассмотрим вариант управления температурой воздуха в комнате.


Принцип работы

Модель (AirCond_Chart.engee) состоит из нескольких подсистем. Температура снаружи формируется случайным сигналом и реализована в блоке External Temperature. Термодинамика внутри комнаты в подсистеме - Room Termodynamics. В ней моделируется влияние внешнего теплового потока и рассчитывается текущая температура воздуха с учетом коэффициента влияния кондиционера - heatFlow, значение которого определяется в блоке Chart. Подробнее ознакомиться с реализацией моделей можно кликнув два раза по интересующей подсистеме.

acFlowChart—​1711368039318.png

В блоке Chart реализована логика управления температурой воздуха в комнате.

acFlowChart—​1711188821557.png

Алгоритм работы блок схемы состоит в следующем. На вход 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 (generic function with 1 method)
run_model("AirCond_Chart",@__DIR__) # Запуск модели.
Building...
Progress 100%
Dict{String, DataFrames.DataFrame} with 3 entries:
  "Chart.heatFlow" => 202×2 DataFrame…
  "T"              => 202×2 DataFrame…
  "T_ext"          => 202×2 DataFrame…
# Считывание из 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")

interactive-scripts/images/state_machines_AirCond_Chart/52397ec36b8ca68365303f2b50fc778135cc86fd

Как можно заметить, при скачках значений температуры снаружи, внутри комнаты температура также начала изменяться, однако благодаря управляющей логике, оставалась в допустимом диапазоне значений. Построим график изменения параметра heatFlow, чтобы убедиться в работе блока Chart.

plot(heatFlow.time, heatFlow.value, label = "heatFlow")

interactive-scripts/images/state_machines_AirCond_Chart/98d7857fa2f154059e27ed485865464b15279d20

Вывод

В этом примере мы расмотрели способ реализации управляющей логики с помощью блока Chart библиотеки конечных автоматов. Вариант реализации был упрощенным, но по результатам моделирования видно, что модедь хорошо справляется с поддержанием температуры.