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

Разработка алгоритмического встраиваемого кода для системы управления кондиционером

Данный пример нацелен на демонстрацию возможностей Engee в области разработки алгоритмического ПО и кодогенерации из моделей. Для примера взята упрощённая модель системы управления кондиционером.

image_2.png

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

Данная модель имитирует контроль температуры воздуха в комнате за счет работы кондиционера. Пример является упрощенным, но достаточно наглядным. Блок AddTemperature имитирует колебания температуры комнаты; в данном примере колебания заданы синусоидой. Этот блок также добавляет к значению температуры коэффициент влияния кондиционера.

Кондиционер (AirCooler) в свою очередь, - это алгоритм, который в зависимости от того, больше или меньше желаемая температура в комнате, дает положительный или отрицательный коэффициент прироста температуры. В случае отсутствия питания, он не влияет на температуру в комнате. На рисунках ниже показана логика алгоритма, реализованная внутри этих блоков.

AddTemperature

addtemperature.jpg

AirCooler

airconditioner.jpg

Реализация запуска модели и работа с записанными данными

Загрузка и запуск модели:

In [ ]:
modelName = "conditioner_demo";
model = modelName in [m.name for m in engee.get_all_models()] ? model = engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");
engee.run();

Загрузка и визуализация данных, полученных в ходе симуляции, осуществляется путем чтения csv-файлов с показателями температуры в комнате.

In [ ]:
using CSV, DataFrames
t = Matrix(CSV.read("$(@__DIR__)/temperature.csv", DataFrame)); #загрузка данных

using Plots # Подключение библиотеки для построение графиков
plotly() # Подключение бэкэнда - метода отображения графики
plot(t[:,1], t[:,2], xlabel="Время в минутах", ylabel="температура", title="Изменение температуры в комнате") # Построение графика
[ Info: Precompiling PlotlyKaleido [f2990250-8cf9-495f-b13a-cce12b45703c]
Out[0]:

По результатам работы модели мы видим, что система кондиционирования успешно поддерживает температуру в комнате в пределах 25 градусов.

Генерация С кода из модели

Существует два способа генерации кода: при помощи команды engee.model.generate_code, либо при помощи графического интерфейса Engee. Далее рассмотрим оба варианта.

Рассмотрим синтаксис команды: первый аргумент указывает на путь расположения модели, второй аргумент указывает путь для сохранения сгенерированного кода, третий аргумент указывает на подсистему в модели, из которой генерируется код.

In [ ]:
if isdir("$(@__DIR__)/AirCooler") # Проверка наличия папки
    rm("$(@__DIR__)/AirCooler";force = true, recursive = true) # Удаление папки
end

engee.generate_code("$(@__DIR__)/conditioner_demo.engee", "$(@__DIR__)/AirCooler", subsystem_name="AirCooler")
[ Info: Generated code and artifacts: /user/start/examples/controls/Conditioner/AirCooler

По итогам выполнения генерации мы можем просмотреть сгенерированный код в папке AirCooler.

image_2.png

На рисунке выше, отображён способ генерации кода при помощи GUI Engee. Результат генерации представлен в папке demo_C_gen_AirCooler_code

Вывод

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

Блоки, использованные в примере