基于S7-200 SMART实现PID控制仿真实验

关键字:Matalb;S7-200 SMART;Modbus TCP;PID控制

系列文章目录

基于S7-200 SMART实现一键启停
顺序功能图——(二)设计机组延时关机程序
基于S7-200 SMART实现Modbus TCP通信
基于S7-200 SMART实现MATLAB写入与读取PLC数据



前言

  基于S7-200 SMART可以通过向导实现PID控制,但是如果没有实验器材,很难观察到实际的控制效果。MATLAB作为一个强大的开发软件,支持工业上常用的通信协议,而且MATLAB也经常用作仿真实验。如果在MATLAB中模拟被控对象,并将被控对象数据与控制器数据通过Modbus TCP进行传输,就可以实现基于PLC的PID控制仿真。


一、MATLAB代码

1.清除命令窗口、工作区、画图窗口

clc;
clear;
close all;

2.参数设置

  建立电加热锅炉模型:
G ( s ) = Δ T Δ U = K T 1 s + 1 e T 2 s = 0.134 s + 0.035 e − 0.03 s (1) G\left( s \right)=\frac{\Delta T}{\Delta U}=\frac{K}{T_1s+1}e^{T_2s}=\frac{0.134}{s+0.035}e^{-0.03s} \tag{1} G(s)=ΔUΔT=T1s+1KeT2s=s+0.0350.134e0.03s(1)

tol=0.03;                                                                   % 纯滞后时间
num_c=[0.134];                                                              % 连续系统分子系数
den_c=[1,0.035];                                                            % 连续系统分母系数
Ts=1;                                                                       % 采样时间
c=0;c_1=0;                                                                  % 系统输出c=c(k)、c_1=c(k-1)
u=0;u_1=0;u_2=0;                                                            %控制器输出u=u(k)、u_1=u(k-1)、u_2=u(k-2)

3.创建modbus连接对象

mb = modbus('tcpip','192.168.2.1',502);
mb.Timeout = 20;

4.求离散传递函数

  基于采样时间 T s = 1 s T_s=1s Ts=1s,基于Z变换对连续系统进行离散化:
G ( z ) = 0.1278 z − 1 + 0.003884 z − 2 1 − 0.9656 z − 1 = n u m _ d ( 1 ) z − 1 + n u m _ d ( 2 ) z − 2 1 + d e n _ d ( 2 ) z − 2 (2) G\left( z \right)=\frac{0.1278z^{-1}+0.003884z^{-2}}{1-0.9656z^{-1}}=\frac{num\_d\left( 1 \right)z^{-1}+num\_d\left( 2 \right)z^{-2}}{1+den\_d\left( 2 \right)z^{-2}} \tag{2} G(z)=10.9656z10.1278z1+0.003884z2=1+den_d(2)z2num_d(1)z1+num_d(2)z2(2)从上式可得离散化的对象输出公式:
c ( k ) = − d e n _ d ( 2 ) c ( k − 1 ) + n u m _ d ( 1 ) u ( k − 1 ) + n u m   d ( 2 ) u ( k − 2 ) ; (3) c\left( k \right)=-den\_d\left( 2 \right)c\left( k-1 \right)+num\_d\left( 1 \right)u\left( k-1 \right)+num\ _d\left( 2 \right)u\left( k-2 \right); \tag{3} c(k)=den_d(2)c(k1)+num_d(1)u(k1)+num d(2)u(k2);(3)

% continue system
sys_c=tf(num_c,den_c,'inputdelay',tol);
% discrete system
sys_d=c2d(sys_c,Ts,'zoh');
[num_d,den_d]=tfdata(sys_d,'v');

5. 循环更新参数

while true
    % 基于离散传递函数计算锅炉的温度
    c=-den_d(2)*c_1+num_d(1)*u_1+num_d(2)*u_2;
    % 将对象的输出写入到PLC中
    write(mb,'holdingregs',1,c,'double');
    % 将控制器输出读取到u中
    u = read(mb,'holdingregs',9,1,'int16');
    u = 100*u/27648;
    % 更新参数
    c_1=c;
    u_2=u_1;u_1=u;
    pause(Ts);
end

二、S7-200 SMART代码

1.将double类型变量转换为real类型变量

Alt

图2.1 将MATLAB传输的double类型数据转换为real类型数据

  在MATLAB中的小数是通过double类型写入PLC中,而PLC中的double类型变量是存放在V寄存器的一个字节中,将输入的double类型数据转换为可以供PID指令使用的real类型可以使用指令DF_R。

2.建立Modbus TCP服务器

Alt

图2.2 建立Modbus TCP服务器

  在PLC中建立Modbus TCP服务器,用于和MATLAB中的Modbus TCP客户端进行通信,各个端口的含义如下:

  • EN:功能块使能端,EN=1功能块有效,EN=0功能块无效;
  • Connect:功能块Server功能,Connect=1激活Server功能,Connect=0关闭Server功能,注意在更改相关参数时需要令Connect=0,否在将会报错;
  • IP_Port:网络端口,默认502;
  • MaxIQ:可操作输入/输出线圈最大个数,将可用于 Modbus 地址 0xxxx 到 1xxxx 的 I 和 Q 点数设置为 0 至 256。值 0 表示禁用对输入和输出的所有读取和写入。建议将 MaxIQ 值设置为 256;
  • MaxAI:可操作输入寄存器最大个数,将可用于 Modbus 地址 3xxxx 的字输入 (AI) 数设置为 0 至 56。值 0 表示禁用对模拟量输入的读取。要允许访问所有 CPU 模拟量输入。对于 CPU CR40 和 CR60为 0,对于所有其它 CPU 型号为 56;
  • MaxHold:可操作保持寄存器最大个数,设置可用于 Modbus 地址 4xxxx 或 4yyyyy 的 V 存储器中的字保持寄存器数,需要注意的是一个保持寄存器占用两个V寄存器的字节,即一个VM;
  • HoldStart:保持寄存器的开始地址,如果 HoldStart 指向超出允许范围的存储位置,则 Modbus TCP 库指令将返回错误。CPU 还会生成非致命错误:间接寻址错误 (0x06);
  • Done:Modbus TCP通信状态,Done=1连接至客户端设备、与客户端断开连接、响应 Modbus 请求、返回错误,Done=0没有请求用于此程序周期
  • Error:指令执行结果代码,且仅在发生错误后的一个周期内有效。

3.将real类型的过程变量转换为word类型的过程变量

Alt

图2.3 将real类型的过程变量转换为word类型的过程变量

  在PLC中将过程变量的REAL值转换为PID控制器可以识别的WORD,各个端口的含义如下:

  • EN:功能块使能端,EN=1功能块有效,EN=0功能块无效;
  • Inpuut:输入的REAL类型值;
  • ISH:输入REAL类型值的上限;
  • ISL:输入REAL类型值的下限;
  • OSH:输出WORD类型值的上限;
  • OSL:输出WORD类型值的下限;
  • Output:输出的WORD类型值。

4.PID控制器

4.1PID回路控制算法

  在介绍如何使用向导设置PID控制之前,需要了解S7-200 SMART的PID控制器算法。首先给出时域下的PID控制器输出:
M ( t ) = K C e + K I ∫ e   d t + M i n i t i a l + K D d e d t (4) M\left( t \right)=K_Ce+K_I{\int e\, dt}+M_{initial}+K_D\frac{de}{dt} \tag{4} M(t)=KCe+KIedt+Minitial+KDdtde(4)其中 M ( t ) 、 e 、 K C 、 K I 、 K D 、 M i n i t i a l M\left( t \right)、e、K_C、K_I、K_D、M_{initial} M(t)eKCKIKDMinitial分别表示当前时间下的控制器输出函数、当前时间下的系统误差函数、比例系数、积分系数、微分系数、回路输出的初始值。将上述公式离散化后可得:
M n = K C e n + K I T S ∑ k = 1 n e n + M i n i t i a l + K D e n − e n − 1 T S (5) M_n=K_Ce_n+K_IT_S{\sum_{k=1}^n e_n}+M_{initial}+K_D\frac{e_n-e_{n-1}}{T_S} \tag{5} Mn=KCen+KITSk=1nen+Minitial+KDTSenen1(5)其中 M n 、 e n 、 e n − 1 、 T S M_n、e_n、e_{n-1}、T_S Mnenen1TS分别表示当前采样时刻的控制器输出、当前采样时刻的误差、前一个采样时刻的误差、采样时间。引入参数前一个采样时刻的积分值 M X MX MX,上述离散化PID控制器输出可化为:
M n = K C e n + K I T S e n + M X + M i n i t i a l + K D e n − e n − 1 T S (6) M_n=K_Ce_n+K_IT_Se_n+MX+M_{initial}+K_D\frac{e_n-e_{n-1}}{T_S} \tag{6} Mn=KCen+KITSen+MX+Minitial+KDTSenen1(6)考虑
e n = P V n − S V n (7) e_n=PV_n-SV_n \tag{7} en=PVnSVn(7)其中 P V n 、 S V n PV_n、SV_n PVnSVn分别表示过程变量与设定变量。将公式(4)代入公式(3)可得:
M n = M P n + M I n + M D n = K C ( S P n − P V n ) + K I T S ( S P n − P V n ) + M X + K D [ ( S P n − P V n ) − ( S P n − 1 − P V n − 1 ) ] T S = K C ( S P n − P V n ) + K I T S ( S P n − P V n ) + M X + K D ( P V n − 1 − P V n ) T S = K C ( S P n − P V n ) + K C T I T S ( S P n − P V n ) + M X + K C T D ( P V n − 1 − P V n ) T S (8) \begin{align} M_n &=MP_n+MI_n+MD_n \\ &={K_C\left( SP_n-PV_n \right)} +{K_IT_S\left( SP_n-PV_n \right)+MX} +{K_D\frac{\left[ \left( SP_n-PV_n \right)-\left( SP_{n-1}-PV_{n-1} \right) \right]}{T_S}} \\ &={K_C\left( SP_n-PV_n \right)}+{K_IT_S\left( SP_n-PV_n \right)+MX} +{K_D\frac{\left( PV_{n-1}-PV_n \right)}{T_S}} \\ &={K_C\left( SP_n-PV_n \right)}+{\frac{K_C}{T_I}T_S\left( SP_n-PV_n \right)+MX} +{K_CT_D\frac{\left( PV_{n-1}-PV_n \right)}{T_S}} \end{align} \tag{8} Mn=MPn+MIn+MDn=KC(SPnPVn)+KITS(SPnPVn)+MX+KDTS[(SPnPVn)(SPn1PVn1)]=KC(SPnPVn)+KITS(SPnPVn)+MX+KDTS(PVn1PVn)=KC(SPnPVn)+TIKCTS(SPnPVn)+MX+KCTDTS(PVn1PVn)(8)其中 M P n 、 M I n 、 M D n MP_n、MI_n、MD_n MPnMInMDn分别表示当前采样时刻控制器比例项输出、积分项输出、微分项输出。

4.2PID向导

  在PLC中可以通过向导实现PID控制器的各种参数设置:
①点击工具栏的PID向导:
Alt

图2.4 打开PID向导

②回路选择
Alt

图2.5 选择需要组态的回路

③回路命名
Alt

图2.6 回路命名

④控制参数设置
Alt

图2.7 PID控制参数设置

控制器类型可以选择温度或常规:
Alt

图2.8 控制器类型

这里由于是对MATLAB中的被控对象进行仿真,控制器类型选择常规。
Alt

图2.9 启用双向输出

如果勾选了双向输出,正向参数中的增益只能为正,负向参数中的增益只能为负。在双向输出的情况下允许 S V n < P V n SV_n<PV_n SVn<PVn的情况出现,此时负向输出有效,在 S V n ≥ P V n SV_n \ge PV_n SVnPVn时正向输出有效。如果不勾选双向输出则没有负向参数设置、只有正向参数设置,如果增益大于零则属于正向控制——控制器正作用于回路,此时只有 S V n ≥ P V n SV_n \ge PV_n SVnPVn输出有效;如果增益小于零则属于负向控制——控制器反作用于回路,此时只有 S V n ≤ P V n SV_n \le PV_n SVnPVn输出有效。不勾选双向输出的情况下,对于增益值为 0.0 的 I 或 ID 控制,如果将积分时间和微分时间指定为正值,则控制器将是正作用回路;如果指定负值,则控制器将是反作用回路。
Alt

图2.10 设置增益与积分时间

在MATLAB中通过比例度整定法确认增益 K C = 7.21 K_C=7.21 KC=7.21、积分时间 T I = 11 s T_I=11s TI=11s故在向导中分别将增益、积分时间设置为 7.21 、 1.7 60 ≈ 0.028 7.21、\frac{1.7}{60}\approx0.028 7.21601.70.028分钟。需要注意的是如果不需要积分作用,则可设置积分时间= 10000.0 m i n 10000.0min 10000.0min;如果不需要微分作用,则可设置微分时间= 0.0 m i n 0.0min 0.0min;如果不需要比例作用,则设置增益= 0.0 0.0 0.0,此时积分环节与微分环节的计算是基于 K C = 1.0 K_C=1.0 KC=1.0进行的:
M I n = K C T I T S ( S P n − P V n ) + M X = 1 T I T S ( S P n − P V n ) + M X M D n = K C T D ( P V n − 1 − P V n ) T S = T D ( P V n − 1 − P V n ) T S (9) \begin{align} MI_n &=\frac{K_C}{T_I}T_S\left( SP_n-PV_n \right)+MX \\ &=\frac{1}{T_I}T_S\left( SP_n-PV_n \right)+MX \\ MD_n &=K_CT_D\frac{\left( PV_{n-1}-PV_n \right)}{T_S} \\ &=T_D\frac{\left( PV_{n-1}-PV_n \right)}{T_S} \end{align} \tag{9} MInMDn=TIKCTS(SPnPVn)+MX=TI1TS(SPnPVn)+MX=KCTDTS(PVn1PVn)=TDTS(PVn1PVn)(9)
Alt

图2.11 不激活PID

为了获得更好的PID控制效果,往往会选择不激活PID,在程序运行后通过PID整定控制面板进行控制激活。
⑤输入参数设置
Alt

图2.12 不激活PID

过程变量的标定有单极、单极20%偏移量、双极、温度×10℃和温度×10℉:

  • 单极: 0 ∼ 10 0\sim10 010V、 0 ∼ 20 0\sim20 020mA、 0 ∼ 5 0\sim5 05V;
  • 单极20%偏移量: 1 ∼ 5 1\sim5 15V、 4 ∼ 20 4\sim20 420mA;
  • 双极: − 10 ∼ 10 -10\sim10 1010V、 − 5 ∼ 5 -5\sim5 55V
  • 温度×10℃/℉:特定的温度模块

这里使用的选择双极。
⑥输出参数设置
Alt

图2.13 输出参数设置

在输出类型中可选择模拟量或数字量。模拟量可从模拟量模块输出、数字量是通过PWM控制其他传感器。
⑦控制区域参数设置
Alt

图2.14 控制区域参数设置

在控制区域中无任何设置。
⑧报警
Alt

图2.15 报警

报警包括过程变量上限报警、过程变量下限报警、模拟量模块报警。
⑨代码
Alt

图2.16 设置代码名称与手动控制

需要注意的是子例程与中断例程内容是被封存的,添加手动PID控制可以控制PID控制器屏蔽过程变量与设置变量,输出任意合法值。
⑩为PID控制相关参数分配地址
Alt

图2.17 为控制器相关参数分配存储地址

分配地址后相关参数将会存储到对应的位置,在数据块中可见:
Alt

图2.18 数据块

从数据块中的分布可见,参数保存到了VB8000~VB8239的地址中。
⑪组件
Alt

图2.19 组件

在组件页面中主要是确认准备初始化的各种内容信息。
⑫最后在完成页面点击生成
Alt

图2.20 在完成页面点击生成

4.3PID0_CTRL

Alt

图2.21 PID控制器

  在PLC中实现PID控制,各个端口的含义如下:

  • EN:功能块使能端,EN=1功能块有效,EN=0功能块无效;
  • PV_I:输入过程变量
  • Setpont_R:输入设定变量
  • Auto_Manual:自动模式/手动模式切换,Auto_Manual=1自动模式,Auto_Manual=0手动模式;
  • Manual_Output:手动模式下的输出 0.0 ∼ 1.0 0.0\sim1.0 0.01.0
  • Output_Forward:正向回路输出,输出的范围与向导中的选择有关,单极 0 ∼ 27648 0\sim27648 027648,双极 − 27648 ∼ 27648 -27648\sim27648 2764827648
  • Output_Reverse:反向回路输出,输出的范围与向导中的选择有关,单极 0 ∼ 27648 0\sim27648 027648,双极 − 27648 ∼ 27648 -27648\sim27648 2764827648
  • HighAlarm:PV值高限位报警,PV值高限位值可在向导中确定;
  • LowAlarm:PV值低限位报警,PV值低限位值可在向导中确定;
  • ModuleErr:PID控制器错误信号,ModuleErr=1PID控制器错误,ModuleErr=0PID控制器无错误;
  • ErrorCode:错误代码。

5.控制器输出处理

Alt

图2.22 PID控制器输出处理

  基于输入的过程变量实数值 r P V rPV rPV与设定变量实数值 r S V rSV rSV,即实际的温度与设定温度之间的关系,确定控制器输出:

  • r S V ≥ r P V rSV \ge rPV rSVrPV:PID控制输出为正向输出,此时令 w M = w M 1 wM=wM1 wM=wM1,即实际控制器输出=正向控制器输出;
  • r S V < r P V rSV < rPV rSV<rPV:PID控制输出为正向输出,此时令 w M = − w M 2 wM=-wM2 wM=wM2,即实际控制器输出=-反向控制器输出。

三、仿真实验

1.手动模式下的输出

  将Auto_Manual的输入端置0,开启手动模式:
Alt

图3.1 手动模式

在单极输出的情况下:
Alt

图3.2 单极输出

激活PID控制:
Alt

图3.3 激活PID输出

对于单极输出的情况下Manual_Output=0.5:
Alt

图3.4 单极输出Manual_Output=0.5

对于单极输出的情况下Manual_Output=1.0:
Alt

图3.5 单极输出Manual_Output=1.0

对于单极输出的情况下Manual_Output=-0.5:
Alt

图3.6 单极输出Manual_Output=-0.5

对于单极输出的情况下Manual_Output=-1.0:
Alt

图3.7 单极输出Manual_Output=-1.0

在双极输出的情况下:
Alt

图3.8 双极输出

对于双极输出的情况下Manual_Output=0.5:
Alt

图3.9 双极输出Manual_Output=0.5

对于双极输出的情况下Manual_Output=1.0:
Alt

图3.10 双极输出Manual_Output=1.0

对于双极输出的情况下Manual_Output=-0.5:
Alt

图3.11 双极输出Manual_Output=-0.5

对于双极输出的情况下Manual_Output=-1.0:
Alt

图3.12 双极输出Manual_Output=-1.0

2.自动模式下的输出

Alt

图3.13 自动模式

启动MATLAB程序:
Alt

图3.14 运行MATLAB程序

通过PID整定控制面板激活PID控制:
Alt

图3.15 激活PID控制

写入设定值SV=40.0:
Alt

图3.16 写入设定值40.0

PID控制结果:
Alt

图3.17 设定值等于40.0时的PID控制结果

写入设定值SV=-30.0:
Alt

图3.18 写入设定值-30.0

PID控制结果:
Alt

图3.19 设定值等于-30.0时的PID控制结果

总结

  本文基于MATLAB与S7-200 SMART实现了PID控制的仿真。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hvp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值