6.1 房屋温度控制

1、实验环境

该程序可在以下环境运行:

1.Matlab R2019a + Simulink v9.3及以上版本;

2.Matlab APP:Instrument Control Toolbox;

3.低代码控制器。

2、原始模型介绍

本实验原始模型来自于matlab R2021a中官方自带的simulink仿真案例中的 sldemo_househeat 模型

sldemo_househeat 模型

可以通过在matlab命令行窗口中输入下面的命令打开此案例的模型:

openExample('simulink_general/sldemo_househeatExample');

该仿真案例包含模型初始化脚本sldemo_househeat_data.m文件,提供需要的房屋信息:

  • 包括定义房屋几何信息(大小、窗户数量)
  • 指定房屋材料的热属性
  • 计算房屋的热阻
  • 提供加热器特性(热空气温度、流速)
  • 定义电力成本(0.09 美元/千瓦时)
  • 指定初始室内温度 (20 ºC = 68 ºF)

房屋的热模型主要功能是模拟房屋内的加热和热损耗(House)来表现温度的变化,再由控制模块(Thermostat)控制温度在设定温度下内基本保持小范围的波动,并计算加热成本(cost)。

  • 室温变化模型(House),是计算室温变化的子系统,会考虑来自加热器的热流和在环境中的热损失,室温变化模型方程为:

\[ \left(\frac{\text{d} Q}{\text{d} x}\right)_ {losses} = \frac{ T_{room} - T_{out} }{ R_{eq} } \]

\[ \frac{\text{d}T_{room}}{\text{d}t} = \frac{1}{M_{air}\cdot c}\left( \frac{\text{d}Q_{heater}}{\text{d}t}-\frac{\text{d}Q_{losses}}{\text{d}t} \right) \]

其中\(M_{air}\)表示屋内空气质量,\(R_{eq}\)表示房屋的等效热阻。

  • 加热器模型(Heater),对恒定空气流速 Mdot 进行建模。

    其值在sldemo_househeat_data.m 文件中指定。调温器信号用于打开或关闭加热器。当加热器打开时,它以恒定的 \(Mdot\) 流速(默认 1 千克/秒 = 3600 千克/小时)吹出温度 \( T_{heater} \)(默认为 50 ºC = 122 ºF)的热空气。

\[ \frac{\text{d}Q}{\text{d}t}=\left( T_{heater} - T_{room} \right)\cdot Mdot\cdot c \]

其中 \( \frac{\text{d}Q}{\text{d}t} \)表示从加热器流入房间的热流,\(c\)表示常压下的热容,\(Mdot\)表示空气流速,\( T_{heater} \) 和 \( T_{room} \)分别表示从加热器中输出的热空气温度和房间内空气的温度。

  • 调温器(Thermostat),允许温度在理想室温上下 5 ºF 范围内波动。如果气温降到 65 ºF 以下,调温器会打开加热器。

  • 环境建模模块,使用具有无限热容量和时变温度 Tout 的散热器。常量模块 Avg Outdoor Temp 指定室外平均气温。Daily Temp Variation Sine Wave 模块产生室外温度的日温波动。修改参数可以比较这些参数对于供暖成本的影响。

3、整体流程分析

模型主要检测内容是室内的温度,需要将室内温度与控制温度进行比较,将温度是否超出限定值范围的信息反馈给调温器。

调温器对加热器施加开启或者关闭的信号,若信号为开启信号,加热器启动,稳定输出固定流速的热空气,并对此动作产生的能量消耗进行价格的计算,在PlotResults中显示成本的曲线图,并将室外温度以及室内温度一起显示在结果之中,方便比较室内外温度变化对成本的影响。

此模型只用于计算供暖成本,如果室外温度高于室内温度,室内温度将超过所需的Set Point值。

如果需要计算制冷成本,可以修改此模型,使其包含空调(即修改加热器的参数指标)。

进行此修改,要在 sldemo_househeat_data.m 中添加如下参数:冷空气输出、空调气流的温度以及空调效率。由于需要同时控制空调和加热器,因此还需要修改调温器。

4、低代码控制器

本控制器是基于AOE引擎的低代码控制器。控制器的特点在于不需要对控制器进行代码的编写,只要在excel文件之中进行测点配置、通信通道和AOE配置就可以实现相应的控制。

5、matlab仿真测试

5.1、原始案例

使用原始代码进行仿真可以得到如下图所示仿真图像。

原始案例运行曲线

图中可以看出制热成本,室内外温度变化曲线。

5.2、低代码控制器替代原始调温器

与控制器通信的模块替代原始调温器

图中的modbusCom1指代的是由控制器控制模拟得到的调温器。

5.3、文件配置

文件配置分为三个部分:测点配置通信通道AOE配置

测点配置用于配置控制器输入和输出信号点的参数,本案例中需要的信号要是输入所需要的房间设定温度、测量温度和输出的加热器启停控制信号。

通信通道的配置是为了将控制器与simulink仿真模型建立modbus通信,实现仿真模型与控制器的信息交互。

而AOE配置是建立AOE模型网络来实现所需的控制逻辑和功能。

接下来分别介绍相关的三个方面的配置。

5.3.1、测点配置

测点配置表格的内容包含了测点的点号、名称(测点1/2/3)、别名、是否离散、是否是计算点以及默认值等。

点号是程序里给这个测点的编号,可以自己定义,使用时,测点与通信通道的点号一一对应完成对接。

别名是英文字母与下划线组合使用,可以当做变量名用于AOE表格里表达式的书写,不用点号来表达,使得表达式的意思表达得更加清楚。

本例中的测点配置如下表所示:

序号点号名称别名是否离散是否计算点默认值备注
1100001测点1Tset_POINTFALSEFALSE20设定温度值
2100002测点2T_POINTFALSEFALSE20测量温度值
3100003测点3State_POINTTRUEFALSE0控制器下发的遥控

控制器通信模块的输入与输出

本程序需要三个测点,分别问设定温度值、测量温度值以及控制器输出控制加热器启停。其中的别名对应的就是AOE文件之中设置节点事件的表达式的参量。表示在matlab的simulink模型中是如图所示的几个参数。

5.3.2、通信通道配置

表格中包含有通信通道的各种配置信息。

通道名称server测试通道
连接个数2
服务端口502

服务端口可以自行设置。

建立通信时,modbus通信的时候两边有一个是主站,有一个是从站,主站可以轮询、发控制指令,从站响应主站。

客户端IP127.0.0.1
客户端端口9999

通道配置文件里的客户端就是指主站,主站在同一台机器就用本机地址127.0.0.1,客户端端口要设成9999。此文件之中,将控制器配置成从站,matlab配置成主站。

服务端IP127.0.0.1
服务端端口502
slave id1
通信协议XA

当需要把控制器配置成主站时,将客户端ip改成服务端ip。

本案例中需要的通道配置如下:

通道名称server服务端
连接个数1
服务端口502

连接个数设定为1,服务器端口自定义为502;

连接名称测试通道1
测点个数3
客户端IP127.0.0.1
客户端端口9999

客户端ip就是主站ip,端口需修改为9999,在实体控制器配置时需要改为与网络属性相关的ip,在网络属性中查询。

序号寄存器类型起始地址数据类型新请求标志轮询周期点号
1HOLDING1EightByteFloatFALSE2000100001
2HOLDING5EightByteFloatFALSE2000100002
3HOLDING9TwoByteIntUnsignedFALSE2000100003

利用3个测点设定的点号,将3个测点与寄存器的起始地址点号对应,两个温度值的数据类型为八位的浮点数,输出的数据类型规定为无符号整数。

其他参数本案例中不需要配置,在此不多赘述。

5.3.3、AOE配置

将AOE表格拆开之后可以分为四个部分。

  1. AOE网络声明

AOE网络声明部分,定义了表格之中的AOE网络个数和整体信息以及一些变量的初始值。

触发条件分为三类:SimpleRepeat(定时触发,需要自行设定定时时间)、TimeDriven(时间驱动)、EventDriven(事件驱动)。

变量的定义方式为:

<变量名1>:<表达式1>;<变量名2>:<表达式2>;…

本例中的AOE网络声明:

AOE ID是否启用名称触发条件触发条件参数变量初始值
70001TRUE房屋温度控制Event_DriveupDev:2.77778;downDev:2.77778

本程序的控制器的作用是实现房屋内温度的控制,所以名称定为房屋温度控制,触发条件是事件控制(即当温度超出阈值的事件发生时,控制器进行相应动作)。

变量upDev和downDev分别代表了向上和向下超出的设定温度的最大值(实测温度与设定温度最大差值的绝对值)为2.77778摄氏度(5华氏度)。

  1. 变量声明

变量声明需要规定变量生效的AOE网络,通过表达式定义,可以使用预先载入的测点表内的测点名,当测点名对应的测点数据在动作中被更新时,变量的信息也会被更新。

本案例中没有需要的变量声明,在此不多赘述。

  1. AOE节点声明

节点类型分为两类:SwitchCondition.

Switch节点为二分支逻辑判断,触发逻辑为:表达式为真时,该节点序号为1的边进行动作;表达式为假时,序号为2的边进行动作。当Switch节点为AOE网入度为0的节点(首节点)时,Switch节点直接触发,若超时时间内表达式为真,则执行动作1,为假或者发生超时事件执行动作2。

Condition节点的表达式为事件触发条件,超时时间内表达式为真,则节点事件发生,该节点出发的所有动作并行执行。

本例中的节点声明:

AOE ID节点ID名称节点类型超时时间(ms)表达式
700011温度超出阈值事件Condition10Tset_Point-T_Point>downDev||T_POINT-Tset_POINT>upDev
700012温度超过下阈值事件Condition10Tset_Point-T_Point>downDev
700013温度超过上阈值事件Condition10T_Point-Tset_Point>upDev
700014结束节点Condition01

本案例中需要定义的节点有四个,都是事件触发条件,分别是温度超出阈值事件温度超过下阈值事件温度超过上阈值事件以及结束节点

其中,前三个事件规定了超时时间,需要在超时时间内表达式为真才能触发,根据表达式进行运算和比较来控制是否触发事件,式子中用到的数据可以用测点配置里对应的别名来表示。

  1. AOE边声明

边需要声明首尾节点,格式为:

<尾节点ID>;<首节点ID>

边的方向为:尾节点→首节点。

边的动作类型有:None、SetPoints、Solve、MILP、SimpleMilp、NLP;

  • SetPoints除了对测点设值之外,还可以进行变量定义和计算,动作参数分为数字量和模拟量。

  • Solve求解方程\(Ax=b\)。

  • Milp为稀疏混合整数线性规划问题求解,

  • Nlp为非线性规划问题求解。

  • Milp的写法包括:

    • 目标函数:min(<表达式>); 或者 max(<表达式>);

    • 约束条件:<Bool表达式1>;<Bool表达式2>;…

    • 变量声明:<变量名1>:<变量类型1>, <变量名2>:<变量类型2>,… (其中变量类型为:二进制(0/1)、整型和浮点数)

本案例中的AOE边声明如下图所示:

AOE ID首尾节点动作名称失败模式动作类型动作参数
700011;2进入判断温度是否超过下阈值的节点DefaultNONE
700011;3进入判断温度是否超过上阈值的节点DefaultNONE
700012;4打开加热器DefaultSet_PointsState_POINT:1;
700013;4关闭加热器DefaultSet_PointsState_POINT:0;

本例一共用到了四条边声明,从节点1到节点2和节点3的两条边不需要判断,只需要执行进入下一个节点的动作,动作类型为None,不需要进行计算。

从节点2和节点3到节点4需要作出开加热器和关加热器的动作,动作类型为SetPoints,输出为1时,打开加热器,输出为0时,关闭加热器。

包含有节点以及边的流程如图所示:

本例AOE网络的拓扑

5.4、建立控制器与matlab通讯以及仿真过程

  1. 连接低代码控制器

将matlab的路径切换到低代码控制器替代后的simulink模型文件的文件夹。

当与实体的控制器时,就是将所实现的功能通过实体的控制器实现,只需要将控制器与电脑接入同一局域网后后,修改主站和从站的ip地址,控制器(从站ip)可以从查找窗口获得。主站ip为本机ip地址,通过网络属性配置中可以查询。

  1. 配置低代码控制器的文件

打开一个浏览器,并输入控制器地址,然后输入账号和密码以进入控制器主界面。

控制器网页配置终端启动界面

进入主界面后,在左侧导航栏的设置项板块中分别点击测点通道AOE按钮,进入相应界面后上传配置文件。

以测点配置文件上传为例,若界面已存在数据可以先清空数据,然后单击右上角的文件上传图标(具体见下图所示),选中需要上传的文件,确定即可完成上传。上传成功后界面将出现相应内容,可对其进行查看与编辑。

测点配置栏及可操作选项

所有文件上传完成后,单击主页概览返回概览界面,点击重置按钮保存配置即可运行。操作界面如下图所示:

配置界面充值栏

  1. matlab界面操作

配置完成后,进入matlab的界面。然后打开控制器的源文件modbusCom1.m文件,该文件是以S-Function模块模板为基础实现的利用Modbus通信协议与控制器进行通信的模块。

下面这个程序段是将控制信息的数据通过函数对控制器进行读写,S-Function模块中输出函数为mdlOutputs。

function sys=mdlOutputs(t,x,u)
global m;
write(m,'holdingregs',2,u','double');   % 将温度设定值和测量值写入控制器
pause(0.01);    % 等待10ms(实际时间),使得通过modbus通信之后读到最新控制值
sys = read(m,'holdingregs',10,1,'uint16');  % 读取控制信号

同时需要设置输入和输出信号的个数,其中输入信号有两个(即设定温度和测量温度),输出信号有一个(控制器发出的指令信号)。

以下这个初始化程序段用于联系控制器与matlab,将modbusCom1中的建立modbus通信的代码中的,输入从站ip(“127.0.0.1”,当连接实体的控制器时,需要填写查找得到的控制器的ip地址)和端口(502,这个端口是由通信通道配置里选择的)。

global m;
m = modbus('tcpip', '127.0.0.1', 502);  % 建立modbus通信

通过这个函数建立了simulink与控制器的通信,实现了仿真过程中和外界数据交互。

在matlab命令行窗口中输入以下命令可以测试modbus通信,判断通信是否成功连接。

m = modbus('tcpip', '127.0.0.1', 502);
  1. Simulink模型参数设置

mosbuscom1.m文件是s函数的源文件,放在.slx文件的目录下,应用到模型中的控制器中,替换控制算法部分,按如下图所示连接输入和输出端:

配置控制器之后的仿真模型

  1. 仿真结果

运行完成之后,得到完整的波形图如下图所示:

采用控制器实现的房屋温度和热成本曲线

可以看出与原本程序自带的调温器所得的仿真结果是一样的。

5.5、总结

由仿真结果可以看出,低代码控制器的功能与原始的调温器的功能是一致的,但是低代码控制器并不需要繁复的程序代码的编写,根据需要编写相关的AOE配置、测点配置以及通信通道的配置就可以实现对应的功能,与目前常用的其他的控制方法相比,更方便于非编程技术背景人员对模型功能的设计和实现。

附件:HouseHeat房屋温度控制示例.rar