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表格里表达式的书写,使之可以不用点号来表达,使得表达式的意思表达得更加清楚。本案例测点配置如下所示:

序号点号名称别名是否离散是否计算点默认值备注
1100001测点1Abs1_POINTFALSEFALSE0正弦波绝对值信号1
2100002测点2Abs2_POINTFALSEFALSE1正弦波绝对值信号2
3100003测点3Abs3_POINTFALSEFALSE1正弦波绝对值信号3
4100004测点4Sat1_POINTFALSEFALSE1正弦波限幅信号1
5100005测点5Sat2_POINTFALSEFALSE1正弦波限幅信号2
6100006测点6Sat3_POINTFALSEFALSE1正弦波限幅信号3
7100007测点7Switch_POINTFALSEFALSE0开关控制信号
8100008测点8Out1_POINTFALSEFALSE0输出信号1
9100009测点9Out2_POINTFALSEFALSE0输出信号2
10100010测点10Out3_POINTFALSEFALSE0输出信号3
11100011测点11DoCal_POINTFALSEFALSE0策略控制信号

3.1.2、通信通道配置

低代码控制器通过Modbus协议与Simulink进行通信。由于Matlab仅有Modbus客户端功能,因此需要将低代码控制器配置为Modbus服务端,如下图所示,其中通道数量为1,服务端口需设置为未占用端口。

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

然后对客户端信息和测点信息等进行配置,如下图所示:

连接名称测试通道序号寄存器类型起始地址数据类型新请求标志轮询周期点号
测点个数31HOLDING1EightByteFloatFALSE2000100001
客户端IP127.0.0.12HOLDING5EightByteFloatFALSE2000100002
客户端端口99993HOLDING9TwoByteIntUnsignedFALSE2000100003

3.1.3、AOE配置

本案例中AOE文件配置内容分为三个部分。

AOE网络声明

本案例中的AOE网络声明如下所示:

过零检测AOE网络声明

控制器的作用是实现过零检测,所以名称定为过零检测,触发条件设置为事件控制。变量初始值定义了过零比较值threshold为0.5。

AOE节点声明

本案例的控制逻辑可以用AOE网表示如下:

过零检测AOE网

对应上图需要定义的节点有4个,节点声明如下所示:

过零检测AOE节点声明

第一个节点是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边声明如下图所示:

过零检测AOE边声明

本实验中的边声明的动作类型是SetPoints,SetPoints类型的动作边在连接节点的同时还需要进行动作。接下来简单介绍每条边的动作:

  1. 连接第1和第2节点的边:动作名称:aoe触发测点复位,需要在这个边的动作上将DoCal_POINT置0,防止循环结束时还未置0导致网络再触发。
  2. 连接第2和第3节点的边:动作名称:输出正弦波绝对值,动作类型为SetPoints,当第2个节点判断为真的时候,需要输出三组输出信号的绝对值,
  3. 连接第2和第4节点的边:动作名称:输出正弦波限幅值,动作类型为SetPoints,当第2个节点判断为假的时候,需要输出三组输出信号的限幅值。

3.2、编写Simulink与控制器通信程序

打开Simulink模型中S-函数的源文件,将S-函数的输入信号数量设置为2、输出信号数量设置为1,采样时间,采样时间设置为0.01(每仿真10ms与控制器通信一次)。添加建立Modbus通信的命令,其中需要服务端ip和端口参数:

主站建立通信

添加温度设定值、温度测量值、读取控制指令程序:

通信内容

3.3、低代码控制器配置与运行

该步骤具体操作同房屋温度控制,此处不再赘述。

3.4、运行仿真

先运行低代码控制器,再运行Simulink模型,进行仿真。得到的利用低代码控制器的输出信号与原模型十分接近。

仿真结果

由该仿真实验可以看出,使用低代码控制器并不需要繁复的程序代码编写,只需要编写测点配置、通信通道配置和AOE配置文件就可以实现通信和控制功能,与目前常用的其他控制器相比,更方便于非编程技术背景人员的应用。

附件:过零检测.rar