5.1 比例环节
比例环节又称为放大环节,其输出量成比例的复现输入信号的变化。其s域传递函数为Y(s)=K·X(s)
,差分方程为y(k)=K·x(k)
(K为比例系数)。
实验步骤
1、编写低代码控制器配置文件
实现本应用案例,低代码控制器需要完成两部分文件配置:测点配置和AOE配置。测点配置用于配置控制器输入和输出信号点的参数,而AOE配置是建立AOE模型网络来实现所需的控制逻辑和功能。
1.1、测点配置
测点配置表格的内容包含了测点的点号、名称、别名、是否离散、是否是计算点以及默认值等。点号是程序里给这个测点的编号,可以自己定义,使用时,测点与通信通道的点号一一对应完成对接。别名是英文字母与下划线组合使用,可以当做变量名用于AOE表格里表达式的书写,使之可以不用点号来表达,使得表达式的意思表达得更加清楚。本案例测点配置如下:
序号 | 点号 | 名称 | 别名 | 是否离散 | 是否计算点 | 默认值 | 备注 |
---|---|---|---|---|---|---|---|
1 | 100001 | 测点1 | input | FALSE | FALSE | 0 | 输入值 |
2 | 100002 | 测点2 | output | FALSE | FALSE | 0 | 输出值 |
3 | 100003 | 测点3 | p_coefficient | FALSE | FALSE | 2 | 比例系数 |
1.2、AOE配置
本案例中AOE文件配置内容分为三个部分。
AOE网络声明
名称为比例环节,触发条件设置为简单重复(Simple_Repeat),重复周期为20ms。
AOE ID | 是否启用 | 名称 | 触发条件 | 触发条件参数 | 变量初始值 |
---|---|---|---|---|---|
70001 | TRUE | 比例环节 | Simple_Repeat | 20 |
AOE节点声明
AOE ID | 节点ID | 名称 | 节点类型 | 超时时间(ms) | 表达式 |
---|---|---|---|---|---|
70001 | 1 | 开始节点 | Condition | 10 | 1 |
70001 | 2 | 结束节点 | Condition | 10 | 1 |
本案例中共有2个节点,节点类型均为Condition,表达式设为1,表明始终满足条件触发执行。
AOE边声明
AOE ID | 首尾节点 | 动作名称 | 失败模式 | 动作类型 | 动作参数 |
---|---|---|---|---|---|
70001 | 1;2 | 计算 | Default | Set_Points | output:p_coefficient*input; |
本案例中的边声明动作类型为为SetPoints,执行动作“输出值=比例系数*输入值”。 式中p_coefficient表示比例环节的系数;input表示当前时刻输出量的采样值;output表示当前时刻输入量的采样值。p_coefficient、input、output为设置的测点。
1.3、配置文件存储
在excel表格中编写完成之后,并供低代码控制器使用。
2、Simulink验证
为验证低代码控制器比例环节结果的正确性,本案例借助Simulink的比例环节运行结果来对照。为实现控制器与simulink仿真模型间通信,需要进行低代码控制器通道文件的配置以及Simulink的S函数程序编写,具体过程如下:
2.1、通信通道配置
低代码控制器通过Modbus协议与Simulink进行通信。由于Matlab仅有Modbus客户端功能,因此需要将低代码控制器配置为Modbus服务端,如下:
通道名称 | server测试通道 | 连接名称 | 测试通道 |
---|---|---|---|
连接个数 | 1 | 测点个数 | 3 |
服务端口 | 502 | 客户端IP | 127.0.0.1 |
客户端端口 | 9999 | ||
slave id | 1 | ||
通信协议 | XA | ||
一次读寄存器数上限 | 125 | ||
一次读开关数上限 | 2000 | ||
一次写寄存器数上限 | 120 | ||
一次写开关数上限 | 1968 | ||
轮询周期(ms) | 5000 | ||
超时(ms) | 1000 |
服务端口设定为502,测点个数为3,客户端ip是本机的ip地址,可以在网络属性界面查询得到,客户端端口设置为9999.
序号 | 寄存器类型 | 起始地址 | 数据类型 | 新请求标志 | 轮询周期 | 点号 |
---|---|---|---|---|---|---|
1 | HOLDING | 1 | EightByteFloat | FALSE | 2000 | 100001 |
2 | HOLDING | 5 | EightByteFloat | FALSE | 2000 | 100002 |
3 | HOLDING | 9 | EightByteFloat | FALSE | 2000 | 100003 |
本实验中需要用3个寄存器存储数据,数据类型均为八位浮点数。
2.2、编写Simulink与控制器通信程序
modbusComproportion.m是本案例模型控制器的源文件,建立与低代码控制器起通信的作用。
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
上述程序表示输入与输出个数的设置,本案例中的输入个数为2,分别为输入值与比例系数。输出个数为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',10,u(2),'double');
%pause(0.001);
sys = read(m,'holdingregs',6,1,'double');
如上面的输出函数所示,需要将输入写入控制器,再从控制器中读取控制信号。程序中的pause(0.001)用于设置等待时间,当控制器和计算机的性能较好时,可以适当修改这个参数,可以加快仿真通信的速度,使动画跟随的动作加快。
2.3、低代码控制器配置与运行
这一步低代码控制器的连接和案例1中完全一致,将MATLAB的文件夹打开到低代码控制器替代后的simulink模型文件的文件夹。
当与实体的控制器连接时,就是将所实现的功能放入实体的控制器中,只需要将控制器与电脑通过网线连接后,修改主站和从站的ip地址。 控制器(从站ip)可以从发现工具获得。
主站ip为本机ip地址,通过网络属性配置中可以查询。
3、运行仿真
先运行低代码控制器,再运行Simulink模型,进行仿真。当设置比例系数p_coefficient=2时,仿真结果如下图所示: