新闻中心
>
硬件在环的过零检测仿真实验教程
硬件在环的过零检测仿真实验教程
发布:2021-12-31

1、实验目的

基于Simulink官方的过零检测仿真案例,采用低代码控制器代替其中的开关模块,选择输出信号,实现硬件在环仿真。


2、实验模型

本实验原始模型来自于Simulink官方的房屋温度控制模型,官网给出了该模型原理的详细介绍(https://ww2.mathworks.cn/help/simulink/slref/accurate-zero-crossing-detection.html),在MATLAB命令行窗口中输入命令:openExample('simulink_general/sldemo_zeroxingExample')可打开该模型,如下图所示:

原始模型.png

采用低代码控制器代替开关模块进行过零检测时,将开关模块替换为S-函数,在S-函数中实现与低代码控制器通信功能,修改后的模型如下图所示:

仿真模型.png

3、实验步骤

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

3.1、编写低代码控制器配置文件

低代码控制器文件配置分为三个部分:测点配置、通信通道配置和AOE配置。测点配置用于配置控制器输入和输出信号点的参数,本案例中需要的信号是输入的正弦信号绝对值、按时间生成的过零信号,通信通道的配置是为了将控制器与simulink仿真模型建立modbus通信,实现仿真模型与控制器的信息交互,而AOE配置是建立AOE模型网络来实现所需的控制逻辑和功能。

3.1.1、测点配置

 测点配置表格的内容包含了测点的点号、名称、别名、是否离散、是否是计算点以及默认值等。点号是程序里给这个测点的编号,可以自己定义,使用时,测点与通信通道的点号一一对应完成对接。别名是英文字母与下划线组合使用,可以当做变量名用于AOE表格里表达式的书写,使之可以不用点号来表达,使得表达式的意思表达得更加清楚。本案例测点配置如下图所示:

测点配置.png

3.1.2、通信通道配置

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

服务端配置.png

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

通道配置.png

3.1.3、AOE配置

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

AOE网络声明

 AOE网络声明部分,定义了表格之中的AOE网络个数和整体信息以及一些变量的初始值。其中触发条件分为三类:SimpleRepeat(定时触发,需要自行设定定时时间)、TimeDriven(时间驱动)、EventDriven(事件驱动);变量的定义方式为:<变量名1>:<初值1>;<变量名2>:<初值2>;…。本案例中的AOE网络声明如下所示:

网络声明.png

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

AOE节点声明

 节点类型分为Switch和Condition两类,其中Switch节点为二分支逻辑判断,触发逻辑为:表达式为真时,该节点序号为1的边进行动作;表达式为假时,序号为2的边进行动作。当Switch节点为AOE网入度为0的节点(首节点)时,Switch节点直接触发,若超时时间内表达式为真,则执行动作1,为假或者发生超时事件执行动作2;Condition节点的表达式为事件触发条件,超时时间内表达式为真,则节点事件发生,该节点出发的所有动作并行执行。本案例的控制逻辑可以用AOE网表示如下:

AOE图.png

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

节点声明.png

 第一个节点是simulink通信事件节点,为事件触发类型,当DoCal_POINT>0.5时,也就是测点11输出1,表示允许控制器计算时,该节点被触发,进入运算流程。
第2个节点是逻辑判断节点,对于设定值进行大小比较判断开关控制信号是否大于threshold,也就是测点7的值是否大于0,完成逻辑判断后根据结果进入两条不同动作的边:判断结果为真执行第1条边,否则执行第2条边,边的顺序是就是文件里面定义的顺序。
最后一个节点是结束节点,是事件触发类型,当所有的计算步骤都完成,信号传输后,进入结束节点,计算结束,并将DoCal_POINT的数值改为0,等待下一次通信之后,开始计算。超时时间定为100ms,因为需要DoCal_POINT置0再让AOE执行过程结束,防止AOE被反复触发。

AOE边声明

 边需要声明首尾节点,格式为:<尾节点ID>;<首节点ID>。边的方向为:尾节点→首节点。边的动作类型有:None、SetPoints、Solve、Milp、SimpleMilp、Nlp。其中,SetPoints除了对测点设值之外,还可以进行变量定义和计算,动作参数分为数字量和模拟量;Solve为求解方程Ax=b;Milp为混合整数线性规划问题求解;Nlp为非线性规划问题求解。本案例中的AOE边声明如下图所示:

边声明.png

 本实验中的边声明的动作类型是SetPoints,SetPoints类型的动作边在连接节点的同时还需要进行动作。接下来简单介绍每条边的动作:
1. 连接第1和第2节点的边:动作名称:aoe触发测点复位,需要在这个边的动作上将DoCal_POINT置0,防止循环结束时还未置0导致网络再触发。
2. 连接第2和第3节点的边:动作名称:输出正弦波绝对值,动作类型为SetPoints,当第2个节点判断为真的时候,需要输出三组输出信号的绝对值,
3. 连接第2和第3节点的边:动作名称:输出正弦波限幅值,动作类型为SetPoints,当第2个节点判断为假的时候,需要输出三组输出信号的限幅值。

3.1.4、配置文件存储

在excel表格中编写完成之后,将表格另存为.csv格式(纯文本形式存储表格数据)文件供低代码控制器使用。

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

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

主站建立通信.png

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

通信内容.png

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

将控制器电源线与电源相连,打开电源开关,再用网线将控制器与计算机连接,就可以使用。利用发现工具获得控制器ip,如下图所示:

发现工具.png

当控制器启动并接入计算机,被计算机发现后,可以得到如下界面(打开一个浏览器,并输入控制器地址也可以得到如下界面)。

登录界面.png

点击界面中控制器id,进入控制器配置界面,选择并导入测点、通道和AOE配置文件(excel文件另存为.csv格式文件后使用,可点击配置文件和仿真模型.rar下载配置文件和仿真模型,中points-aoe-zeroxing.csv为测点配置文件,tcp-mbd-transport-SH_sim.csv为通道配置文件,aoe-zeroxing.csv为AOE配置文件,zeroxing_test.slx为仿真模型,zeroxingCtrl.m为S-函数源文件,其中语句m = modbus('tcpip', '127.0.0.1', 502);中的ip需要修改为控制器实际ip),点击界面中的“reset”即可保存配置并运行控制器。


配置界面.png


4、运行仿真

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

仿真结果.png

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