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度以内。

使用代码从模型生成

生成代码有两种方法:使用engee。模特。generate_code命令,或使用EngeeGUI。 接下来,我们将考虑这两种选择。

考虑命令的语法:第一个自变量指示模型的位置路径,第二个自变量指示保存生成的代码的路径,第三个自变量指示从中生成代码的模型中的子系统。

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 GUI生成代码的方法。 生成的结果显示在demo_C_gen_AirCooler_code文件夹中

结论

我们开发了一个基于逻辑块的简单空调控制系统. 从仿真结果可以看出,它很好地应对了保持室温的任务。 基于代码生成的结果,我们收到了可读和可移植的代码,可用于传输到真正的硬件,例如嵌入式处理器或微控制器。