5.5 延迟环节

延迟环节又称滞后环节,其特点是输出经过一段时间才可以复现输入信号。其s域传递函数为Y(s)=e-ts·X(s),差分方程为y(k)=x(k-1)

实验步骤

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

实现本应用案例,低代码控制器需要完成两部分文件配置:测点配置和AOE配置。测点配置用于配置控制器输入和输出信号点的参数,而AOE配置是建立AOE模型网络来实现所需的控制逻辑和功能。

1.1、测点配置

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

序号点号名称别名是否离散是否计算点默认值备注
1100001测点1timeFALSEFALSE0时间值
2100002测点2TFALSEFALSE1延迟时间
3100003测点3valueFALSEFALSE0输入值
4100004测点4value_oldFALSEFALSE0输出值

1.2、AOE配置

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

AOE网络声明

名称为延迟环节,触发条件设置为事件驱动(Event_Drive)。

AOE ID是否启用名称触发条件触发条件参数变量初始值
70001TRUE延迟环节Event_Drivevalue:0;
time_old:0;
AOE节点声明
AOE ID节点ID名称节点类型超时时间(ms)表达式
700011开始节点Condition10000time>time_old
700012结束节点Condition100001

本案例中共有2个节点,节点类型均为Condition,表达式为真时,动作触发执行。

AOE边声明
AOE ID首尾节点动作名称失败模式动作类型动作参数
700011;2计算DefaultSet_Pointsvalue_old:value;
value:value;
time_old:time;

本案例中的边声明动作类型为为SetPoints。 式中,time表示当前时刻;time_old表示上一时刻;T表示时间间隔;value表示当前时刻函数值的采样值;value_old为上一时刻函数值的采样值。time、value、T、value_old为设置的测点。

2、Simulink验证

为验证低代码控制器延迟环节结果的正确性,本案例借助Simulink的延迟环节运行结果来对照。为实现控制器与simulink仿真模型间通信,需要进行低代码控制器通道文件的配置以及Simulink的S函数程序编写,具体过程如下:

2.1、通信通道配置

低代码控制器通过Modbus协议与Simulink进行通信。由于Matlab仅有Modbus客户端功能,因此需要将低代码控制器配置为Modbus服务端,如下:

通道名称server测试通道连接名称测试通道
连接个数1测点个数4
服务端口502客户端IP127.0.0.1
客户端端口9999
slave id1
通信协议XA
一次读寄存器数上限125
一次读开关数上限2000
一次写寄存器数上限120
一次写开关数上限1968
轮询周期(ms)5000
超时(ms)1000

服务端口设定为502,测点个数为4,客户端ip是本机的ip地址,可以在网络属性界面查询得到,客户端端口设置为9999.

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

本实验中需要用4个寄存器存储数据,数据类型均为八位浮点数。

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

modbusComproportion.m是本案例模型控制器的源文件,建立与低代码控制器起通信的作用。

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;

上述程序表示输入与输出个数的设置,本案例中的输入个数为3,分别为输入值、仿真时间与延迟时间。输出个数为1,为延迟后的输出值。

ts  = [0.02,0];

上述程序表示模块的采样时间为0.02s。

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

上述程序表示初始化过程中建立与控制器的通信。

function sys=mdlOutputs(t,x,u)
global m;
write(m,'holdingregs',2,u(1)','double');
write(m,'holdingregs',6,u(2)','double');
write(m,'holdingregs',10,u(3)','double');
%disp(['address 2 = ' num2str(u(1:3)')]);
pause(0.01);    % 等待10ms(实际时间),使得通过modbus通信之后读到最新控制值
sys = read(m,'holdingregs',14,1,'double');

如上面的输出函数所示,需要将输入写入控制器,再从控制器中读取控制信号。程序中的pause(0.001)用于设置等待时间,当控制器和计算机的性能较好时,可以适当修改这个参数,可以加快仿真通信的速度,使动画跟随的动作加快。

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

这一步低代码控制器的连接和案例1中完全一致,将MATLAB的文件夹打开到低代码控制器替代后的simulink模型文件的文件夹。

当与实体的控制器连接时,就是将所实现的功能放入实体的控制器中,只需要将控制器与电脑通过网线连接后,修改主站和从站的ip地址。 控制器(从站ip)可以从发现工具获得。

主站ip为本机ip地址,通过网络属性配置中可以查询。

3、运行仿真

先运行低代码控制器,再运行Simulink模型,进行仿真。当延迟时间为1s时,仿真结果如下图所示:

基本控制组态延迟环节运行结果

附件:基本控制组态_延迟环节.rar