Engee 文档
Notebook

为空调控制系统开发算法嵌入代码

本例旨在展示Engee在算法软件开发和根据模型生成代码方面的能力。在本例中,我们使用了一个简化的空调控制系统模型。

image_2.png

运行原理

该模型模拟通过空调的运行来控制房间内的空气温度。示例经过简化,但足以说明问题。AddTemperature 模块模拟室内温度波动;在本例中,波动为正弦波。该程序块还为温度值添加了空调影响因子。

反过来,空调(AirCooler)是一种算法,根据所需的室温是高还是低,给出正或负的温度增益系数。在无电源的情况下,它对室温没有影响。下图显示了这些装置内部的算法逻辑。

*添加温度

addtemperature.jpg

  • 空气冷却器

airconditioner.jpg

实现模型运行并利用记录的数据开展工作

加载并运行模型:

In [ ]:
Pkg.add(["CSV"])
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 度以内。

根据模型生成 C 代码

生成代码有两种方法:使用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

上图显示了如何使用 Engee 图形用户界面生成代码。生成结果显示在 demo_C_gen_AirCooler_code文件夹中。

输出

我们开发了一个基于简单逻辑块的空调控制系统。从仿真结果可以看出,它能很好地完成保持室温的任务。根据代码生成结果,我们获得了可读、可移植的代码,可用于移植到嵌入式处理器或微控制器等实际硬件上。