6.6 过零检测
1、实验目的
基于Simulink官方的过零检测仿真案例,采用低代码控制器代替其中的开关模块,选择输出信号,实现硬件在环仿真。
2、实验模型
本实验原始模型来自于Simulink官方的房屋温度控制模型,官网给出了该模型原理的详细介绍( https://ww2.mathworks.cn/help/simulink/slref/accurate-zero-crossing-detection.html ),在MATLAB命令行窗口中输入命令:openExample('simulink_general/sldemo_zeroxingExample')可打开该模型,如下图所示:
采用低代码控制器代替开关模块进行过零检测时,将开关模块替换为S-函数,在S-函数中实现与低代码控制器通信功能,修改后的模型如下图所示:
3、实验步骤
低代码控制器的特点在于不需要对控制器进行代码的编写,只要在excel文件之中进行测点配置、通信通道和AOE配置就可以实现相应的控制。
3.1、编写低代码控制器配置文件
低代码控制器文件配置分为三个部分:测点配置、通信通道配置和AOE配置。测点配置用于配置控制器输入和输出信号点的参数,本案例中需要的信号是输入的正弦信号绝对值、按时间生成的过零信号,通信通道的配置是为了将控制器与simulink仿真模型建立modbus通信,实现仿真模型与控制器的信息交互,而AOE配置是建立AOE模型网络来实现所需的控制逻辑和功能。
3.1.1、测点配置
测点配置表格的内容包含了测点的点号、名称、别名、是否离散、是否是计算点以及默认值等。点号是程序里给这个测点的编号,可以自己定义,使用时,测点与通信通道的点号一一对应完成对接。别名是英文字母与下划线组合使用,可以当做变量名用于AOE表格里表达式的书写,使之可以不用点号来表达,使得表达式的意思表达得更加清楚。本案例测点配置如下所示:
序号 | 点号 | 名称 | 别名 | 是否离散 | 是否计算点 | 默认值 | 备注 |
---|---|---|---|---|---|---|---|
1 | 100001 | 测点1 | Abs1_POINT | FALSE | FALSE | 0 | 正弦波绝对值信号1 |
2 | 100002 | 测点2 | Abs2_POINT | FALSE | FALSE | 1 | 正弦波绝对值信号2 |
3 | 100003 | 测点3 | Abs3_POINT | FALSE | FALSE | 1 | 正弦波绝对值信号3 |
4 | 100004 | 测点4 | Sat1_POINT | FALSE | FALSE | 1 | 正弦波限幅信号1 |
5 | 100005 | 测点5 | Sat2_POINT | FALSE | FALSE | 1 | 正弦波限幅信号2 |
6 | 100006 | 测点6 | Sat3_POINT | FALSE | FALSE | 1 | 正弦波限幅信号3 |
7 | 100007 | 测点7 | Switch_POINT | FALSE | FALSE | 0 | 开关控制信号 |
8 | 100008 | 测点8 | Out1_POINT | FALSE | FALSE | 0 | 输出信号1 |
9 | 100009 | 测点9 | Out2_POINT | FALSE | FALSE | 0 | 输出信号2 |
10 | 100010 | 测点10 | Out3_POINT | FALSE | FALSE | 0 | 输出信号3 |
11 | 100011 | 测点11 | DoCal_POINT | FALSE | FALSE | 0 | 策略控制信号 |
3.1.2、通信通道配置
低代码控制器通过Modbus协议与Simulink进行通信。由于Matlab仅有Modbus客户端功能,因此需要将低代码控制器配置为Modbus服务端,如下图所示,其中通道数量为1,服务端口需设置为未占用端口。
通道名称 | server测试通道 |
---|---|
连接个数 | 1 |
服务端口 | 502 |
然后对客户端信息和测点信息等进行配置,如下图所示:
连接名称 | 测试通道 | 序号 | 寄存器类型 | 起始地址 | 数据类型 | 新请求标志 | 轮询周期 | 点号 |
---|---|---|---|---|---|---|---|---|
测点个数 | 3 | 1 | HOLDING | 1 | EightByteFloat | FALSE | 2000 | 100001 |
客户端IP | 127.0.0.1 | 2 | HOLDING | 5 | EightByteFloat | FALSE | 2000 | 100002 |
客户端端口 | 9999 | 3 | HOLDING | 9 | TwoByteIntUnsigned | FALSE | 2000 | 100003 |
3.1.3、AOE配置
本案例中AOE文件配置内容分为三个部分。
AOE网络声明
本案例中的AOE网络声明如下所示:
控制器的作用是实现过零检测,所以名称定为过零检测,触发条件设置为事件控制。变量初始值定义了过零比较值threshold为0.5。
AOE节点声明
本案例的控制逻辑可以用AOE网表示如下:
对应上图需要定义的节点有4个,节点声明如下所示:
第一个节点是simulink通信事件节点,为事件触发类型,当DoCal_POINT>0.5时,也就是测点11输出1,表示允许控制器计算时,该节点被触发,进入运算流程。
第2个节点是逻辑判断节点,对于设定值进行大小比较判断开关控制信号是否大于threshold,也就是测点7的值是否大于0,完成逻辑判断后根据结果进入两条不同动作的边:判断结果为真执行第1条边,否则执行第2条边,边的顺序是就是文件里面定义的顺序。
第3、4个节点是结束节点,是事件触发类型,当所有的计算步骤都完成,信号传输后,进入结束节点,计算结束,并将DoCal_POINT的数值改为0,等待下一次通信之后,开始计算。超时时间定为100ms,因为需要DoCal_POINT置0再让AOE执行过程结束,防止AOE被反复触发。
AOE边声明
本案例中的AOE边声明如下图所示:
本实验中的边声明的动作类型是SetPoints,SetPoints类型的动作边在连接节点的同时还需要进行动作。接下来简单介绍每条边的动作:
- 连接第1和第2节点的边:动作名称:aoe触发测点复位,需要在这个边的动作上将DoCal_POINT置0,防止循环结束时还未置0导致网络再触发。
- 连接第2和第3节点的边:动作名称:输出正弦波绝对值,动作类型为SetPoints,当第2个节点判断为真的时候,需要输出三组输出信号的绝对值,
- 连接第2和第4节点的边:动作名称:输出正弦波限幅值,动作类型为SetPoints,当第2个节点判断为假的时候,需要输出三组输出信号的限幅值。
3.2、编写Simulink与控制器通信程序
打开Simulink模型中S-函数的源文件,将S-函数的输入信号数量设置为2、输出信号数量设置为1,采样时间,采样时间设置为0.01(每仿真10ms与控制器通信一次)。添加建立Modbus通信的命令,其中需要服务端ip和端口参数:
添加温度设定值、温度测量值、读取控制指令程序:
3.3、低代码控制器配置与运行
该步骤具体操作同房屋温度控制,此处不再赘述。
3.4、运行仿真
先运行低代码控制器,再运行Simulink模型,进行仿真。得到的利用低代码控制器的输出信号与原模型十分接近。
由该仿真实验可以看出,使用低代码控制器并不需要繁复的程序代码编写,只需要编写测点配置、通信通道配置和AOE配置文件就可以实现通信和控制功能,与目前常用的其他控制器相比,更方便于非编程技术背景人员的应用。
附件:过零检测.rar