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

devtools/2024/9/24 6:00:58/

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

系列文章目录

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


文章目录

  • 系列文章目录
  • 前言
  • 一、MATLAB代码
    • 1.清除命令窗口、工作区、画图窗口
    • 2.参数设置
    • 3.创建modbus连接对象
    • 4.求离散传递函数
    • 5. 循环更新参数
  • 二、S7-200 SMART代码
    • 1.将double类型变量转换为real类型变量
    • 2.建立Modbus TCP服务器
    • 3.将real类型的过程变量转换为word类型的过程变量
    • 4.PID控制器
      • 4.1PID回路控制算法
      • 4.2PID向导
      • 4.3PID0_CTRL
    • 5.控制器输出处理
  • 三、仿真实验
    • 1.手动模式下的输出
    • 2.自动模式下的输出
  • 总结


前言

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


一、MATLAB代码

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

matlab">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)

matlab">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连接对象

matlab">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)

matlab">% 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. 循环更新参数

matlab">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控制的仿真。


http://www.ppmy.cn/devtools/92479.html

相关文章

10步搞定Python爬虫从零到精通!

学习Python网络爬虫可以分为以下几个步骤&#xff0c;每一步都包括必要的细节和示例代码&#xff0c;以帮助你从零开始掌握这一技能。 第一步&#xff1a;理解网络爬虫基础 什么是网络爬虫&#xff1f; 网络爬虫是一种自动化程序,用来从互联网上收集数据.它通过发送 HTTP 请求…

【langchain学习】BM25Retriever和FaissRetriever组合 实现EnsembleRetriever混合检索器的实践

展示如何使用 LangChain 的 EnsembleRetriever 组合 BM25 和 FAISS 两种检索方法&#xff0c;从而在检索过程中结合关键词匹配和语义相似性搜索的优势。通过这种组合&#xff0c;我们能够在查询时获得更全面的结果。 1. 导入必要的库和模块 首先&#xff0c;我们需要导入所需…

html5宠物网站模板源码

文章目录 1.设计来源1.1 主界面1.2 主界面菜单1.3 关于我们界面1.4 宠物照片墙界面1.5 宠物博客界面1.6 宠物服务界面1.7 宠物团队界面1.8 联系我们界面 2.效果和源码2.1 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 【博主推荐】&a…

Firefox滚动条在Win10和Win11下表现不一致问题?

文章目录 前言总结解决方法 前言 最近在写页面的时候发现一个非常有意思的事。Firefox滚动条在Win10和Win11下表现居然不一致。在网上几经查找资料&#xff0c; 终于找到原因所在。总结成下面的文章&#xff0c;加深印象也防止下次遇到。 总结 参考文章&#xff1a; Firefox…

C++ primer plus 第17 章 输入、输出和文件:文件输入和输出03:文件模式:二进制文件

系列文章目录 17.4.5 文件模式 程序清单17.18 append.cpp 程序清单17.19 binary.cpp 文章目录 系列文章目录17.4.5 文件模式程序清单17.18 append.cpp程序清单17.19 binary.cpp17.4.5 文件模式1.追加文件来看一个在文件尾追加数据的程序。程序清单17.18 append.cpp2.二进制文…

黑马头条vue2.0项目实战(七)——文章详情

目录 1. 创建组件并配置路由 2. 页面布局 3. 展示文章详情 3.1 请求文章详情数据接口 4. 关于后端返回数据中的大数字问题 4.1 请求文章详情返回 404 问题 4.2 大整数解决方案 5. 处理内容加载状态 ​编辑 6. 关于文章正文的样式 7. 图片点击预览 8. 关注用户 8.1…

浮毛季到了,拒绝猫咪变成“蒲公英”,宠物空气净化器去除浮毛

同为铲屎官&#xff0c;面对家中无处不在的猫毛挑战&#xff0c;想必你也深感头疼。衣物、沙发乃至地毯上的明显猫毛尚可通过吸尘器或粘毛器轻松应对&#xff0c;但那些细微漂浮的毛发却成了难以捉摸的“小恶魔”&#xff0c;普通的空气净化器往往力不从心。对于浮毛&#xff0…

暑期破防实录——捡漏腾讯

序 经历了整整三个月的折磨&#xff0c;暑期实习终于尘埃落定。 其实还没收到 offer 的时候&#xff0c;还会想着到时候录用了该怎么大写特写小作文&#xff0c;但真到了这一天&#xff0c;只剩下一种解脱感&#xff0c;一种摆脱了漫长的焦虑与压抑的淡淡喜悦。 或许就像久病…