-
-
wilton_gao | 当前状态:离线
总积分:123 2024年可用积分:0
注册时间: 2008-01-16
最后登录时间: 2009-09-29
-
s7-200PID学习
wilton_gao 发表于 2008/9/21 20:07:27 1993 查看 7 回复 [上一主题] [下一主题]
手机阅读
PID 回路
PID 回路指令运用以回路表中的输入和组态信息进 行 PID 运算
使 ENO = 0 的错误条件是SM1.1 (溢出) SM4.3 (运行时间) 0006 (间接寻址)
该指令影响下列特殊存储器标志位SM1.1 (溢出)
输入/输出 操 作 数 数据类型
TBL VB BYTE
LOOP 常数 (0 到 7) BYTE
PID 回路指令 (包含比例积分微分回路) 是用来进行 PID 运算但是可以进行这种 PID 运算
的前提条件是逻辑堆栈栈顶 (TOS) 值必须为该指令有两个操作数TABLE 和 LOOP 其中
TABLE 是回路表的起始地址LOOP 是回路号可以是 0 到 7 的整数在程序中最多可以用 8 条
PID 指令如果两个或两个以上的 PID 指令用了同一个回路号那么即使这些指令的回路表不同
这些 PID 运算之间也会相互干涉产生不可预料的结果.
回路表包含 9 个参数用来控制和监视 PID 运算这些参数分别是过程变量当前值 (PVn) 过程变
量前值 (PVn-1) 给定值 (SPn) 输出值 (Mn) 增益 (Kc) 采样时间 (Ts) 积分时间 (TI) 微分时
间 (TD) 和积分项前值 (MX)
为了让 PID 运算以预想的采样频率工作PID 指令必须用在定时发生的中断程序中或者用在主程
序中被定时器所控制以一定频率执行采样时间必须通过回路表输入到 PID 运算中
使用 STEP 7-Micro/WIN 32 中的 PID 向导
STEP 7–Micro/WIN 32 提供了 PID 向导指导你定义一个闭环控制过程的 PID 算法选择菜单命令
Tools>Instruction Wizard 然后从指令向导窗口中选择 PID 指令
-
-
-
wilton_gao | 当前状态:离线
总积分:123 2024年可用积分:0
注册时间: 2008-01-16
最后登录时间: 2009-09-29
-
wilton_gao 发表于 2008/8/28 15:08:28
PID 算法2楼 回复本楼
PID 控制器调节输出保证偏差 (e) 为零使系统达到稳定状态偏差 (e) 是给定值 (SP) 和过程变
量 (PV) 的差PID 控制的原理基于下面的算式输出 M (t) 是比例项积分项和微分项的函数
其中
M(t) PID 回路的输出是时间的函数
Kc PID 回路的增益
e PID 回路的偏差 (给定值与过程变量之差)
Minitial PID 回路输出的初始值
为了能让数字计算机处理这个控制算式连续算式必须离散化为周期采样偏差算式 才能用来计
算输出值数字计算机处理的算式如下
其中
Mn 在第 n 采样时刻PID 回路输出的计算值
Kc PID 回路增益
en 在第 n 采样时刻的偏差值
en – 1 在第 n-1 采样时刻的偏差值 (偏差前项)
KI 积分项的比例常数
Minitial PID 回路输出的初值
KD 微分项的比例常数
从这个公式可以看出积分项是从第 1 个采样周期到当前采样周期所有误差项的函数微分项是当
前采样和前一次采样的函数比例项仅是当前采样的函数在数字计算机中不保存所有的误差
项其实也不必要
* * ( ) -1
= + + -
n C n I D n n M K e K K e e
n
* +Minitial
1
输出= 比例项 + 积分项 + 微分项
t
M(t) = Kc*e +Kc edt+Minitial + Kc*de/dt
0
输出= 比例项 + 积分项 + 微分项
由于计算机从第一次采样开始每有一个偏差采样值必须计算一次输出值只需要保存偏差前值和
积分项前值利用计算机处理的重复性可以化简以上算式为
其中
Mn 在第 n 采样时刻PID 回路输出的计算值
Kc PID 回路增益
en 在第 n 采样时刻的偏差值
en – 1 在第 n-1 采样时刻的偏差值 (偏差前项)
KI 积分项的比例常数
MX 积分项前值
KD 微分项的比例常数
CPU 实际使用以上简化算式的改进形式计算 PID 输出这个改进型算式是
其中
Mn 第 n 采样时刻的计算值
MPn 第 n 采样时刻的比例项值
Min 第 n 采样时刻的积分项值
MDn 第 n 采样时刻的微分项值
引用 wilton_gao 2008/8/28 15:08:28 发表于2楼的内容
-
-
-
-
wilton_gao | 当前状态:离线
总积分:123 2024年可用积分:0
注册时间: 2008-01-16
最后登录时间: 2009-09-29
-
wilton_gao 发表于 2008/8/28 15:11:38
比例项 MP 是增益 (Kc) 和偏差 (e) 的乘积其中 Kc 决定输出对偏差的灵敏度 偏差 (e) 是给定值3楼 回复本楼
(SP) 与过程变量值 (PV) 之差CPU 执行的求比例项算式是
MPn = Kc * (SPn - PVn)
其中
MPn 第 n 采样时刻比例项的值
Kc 增益
SPn 第 n 采样时刻的给定值
PVn 第 n 采样时刻的过程变量值
= * + * + + * ( - -1 ) Mn KC en KI en MX KD en en
输出= 比例项 + 积分项 + 微分项
Mn = MPn +MIn+ MDn
输出 = 比例项 + 积分项 + 微分项
引用 wilton_gao 2008/8/28 15:11:38 发表于3楼的内容
-
-
-
-
wilton_gao | 当前状态:离线
总积分:123 2024年可用积分:0
注册时间: 2008-01-16
最后登录时间: 2009-09-29
-
wilton_gao 发表于 2008/8/28 15:12:07
积分项值 MI 与偏差和成正比CPU 执行的求积分项算式是4楼 回复本楼
MIn = Kc * TS / TI * (SPn - PVn) + MX
其中
Min 第 n 采样时刻的积分项值
Kc 增益
TS 采样时间间隔
TI 积分时间
SPn 第 n 采样时刻的给定值
PVn 第 n 采样时刻的过程变量值
MX 第 n-1 采样时刻的积分项 (积分项前值) (也称积分和或偏置)
积分和 (MX) 是所有积分项前值之和在每次计算出 MIn 之后都要用 MIn 去更新 mx 其中 MIn
可以被调整或限定 (详见“变量和范围”一节) MX 的 初值通常在第一次计算输出以前被设置为
Minitial (初值) 积分项还包括其他几个常数增益 (Kc) 采样时间间隔 (TS) 和积分时间 (TI) 其
中采样时间是重新计算输出的时间间隔而积分时间控制积分项在整个输出结果中影响的大小
引用 wilton_gao 2008/8/28 15:12:07 发表于4楼的内容
-
-
-
-
wilton_gao | 当前状态:离线
总积分:123 2024年可用积分:0
注册时间: 2008-01-16
最后登录时间: 2009-09-29
-
wilton_gao 发表于 2008/8/28 15:12:55
微分项值 MD 与偏差的变化成正比其计算等式为5楼 回复本楼
MDn = KC * TD / TS * ((SPn - PVn) - (SPn - 1 - PVn - 1))
为了避免给定值变化的微分作用而引起的跳变假定给定值不变(SPn=SPn-1) 这样可以用过程变
量的变化替代偏差的变化计算算式可改进为:
MDn = KC * TD / TS * (SPn - PVn - SPn + PVn - 1)
或
MDn = KC * TD / TS * (PVn - 1 - PVn)
其中
MDn 第 n 采样时刻的微分项值
Kc 回路增益
Ts 回路采样时间
TD 微分时间
SPn 第 n 采样时刻的给定值
SPn – 1 第 n-1 采样时刻的给定值
PVn 第 n 采样时刻的过程变量值
PVn – 1 第 n-1 采样时刻的过程变量值
为了下一次计算微分项值必须保存过程变量而不是偏差在第一采样时刻初始化为 PVn -1
PVn
引用 wilton_gao 2008/8/28 15:12:55 发表于5楼的内容
-
-
-
-
wilton_gao | 当前状态:离线
总积分:123 2024年可用积分:0
注册时间: 2008-01-16
最后登录时间: 2009-09-29
-
wilton_gao 发表于 2008/8/28 15:13:54
回路控制类型的选择6楼 回复本楼
在许多控制系统中只需要一种或二种回路控制类型例如只需要比例回路或者比例积分回路通
过设置常量参数可先选中想要的回路控制类型
如果不想要积分回路可以把积分时间设为无穷大即使没有积分作用积分项还是不为零因为
有初值MX
如果不想要微分回路可以把微分时间置为零
如果不想要比例回路但需要积分或积分微分回路可以把增益设为 0.0 系统会在计算积分项和
微分项时把增益当作 1.0 看待
回路输入的转换和标准化
每个 PID 回路有两个输入量给定值 (SP) 和过程变量 (PV) 给定值通常是一个固定的值比如是
设定的汽车速度过程变量是与 PID 回路输出有关可以衡量输出对控制系统作用的大小在汽车
速度控制系统中过程变量可以是测速仪的输入 (衡量车轮转速高低)
给定值和过程变量都可能是现实世界的值它们的大小范围和工程单位都可能不一样PID 指令
在对这些量进行运算以前必须把他们转换成标准的浮点型实数
转换的第一步是把 16 位整数值转成浮点型实数值下面的指令序列提供了实现这种转换的方法
XORD AC0 AC0 //清空累加器
MOVW AIW0 AC0 //把待变换的模拟量存入累加器
LDW>= AC0 0 //如果模拟量为正
JMP 0 //则直接转成实数
NOT //否则
ORD 16#FFFF0000 AC0 //先对 AC0 中值进行 符号扩展
LBL 0
DTR AC0 AC0 //把 32 位整数转成实数
转换的下一步是把实数值进一步标准化为 0.0 1.0 之间的实数下面的算式可以用来标准化给定值
或过程变量
RNorm = (RRaw / Span) + Offset)
其中
RNorm 标准化的实数值
Rraw 没有标准化的实数值或原值
Offset 单极性为 0.0 双极性为 0.5
Span 值域大小可能最大值减去可能最小值
单极性为 32,000 (典型值)
双极性为 64,000 (典型值)
下面的指令把双极性实数标准化为 0.0 1.0 之间的实数通常用在第一步转换之后:
/R 64000.0 AC0 //累加器中的标准化值
+R 0.5 AC0 //加上偏置使其落在 0.0 1.0 之间
MOVR AC0 VD100 //标准化的值存入回路表
回路输出值转换成刻度整数值
回路输出值一般是控制变量 比如在汽车速度控制中可以是油阀开度的设置同时输出是
0.0 1.0 之间的标准化了的实数值在回路输出驱动模拟输出之前必须把回路输出转换成相应的
16 位整数这一过程是给定值或过程变量的标准化转换的反过程该过程的第一步把回路输出
转换成相应的实数值公式如下
RScal = (M n - Offset) * Span
其中
Rscal 回路输出的刻度实数值
Mn 回路输出的标准化实数值
Offset 单极性为 0.0 双极性为 0.5
Span 值域大小可能最大值减去可能最小值
单极性为 32,000 (典型值)
双极性为 64,000 (典型值)
这一过程可以用下面的指令序列完成
MOVR VD108,AC0 //把回路输 出值移入累加器
–R 0.5,AC0 //仅双极性有此句
*R 64000.0,AC0 //在累加器中得到刻度值
下一步是把回路输出的刻度转换成 16 位整数可通过下面的指令序列来完成
ROUND AC0 AC0 //把实数转换为 32 位整数
MOVW AC0, AQW0 //把 16 位整数写入模拟输出寄存器
正作用或反作用回路
如果增益为正那么该回路为正作用回路如果增益为负那么是反作用回路对于增益为零的积
分或微分控制来说如果指定积分时间微分时间为正就是正作用回路指定为负值则是反作
用回路
引用 wilton_gao 2008/8/28 15:13:54 发表于6楼的内容
-
-
-
-
wilton_gao | 当前状态:离线
总积分:123 2024年可用积分:0
注册时间: 2008-01-16
最后登录时间: 2009-09-29
-
wilton_gao 发表于 2008/8/28 15:17:17
过程变量和给定值是 PID 运算的输入值因此在回路表中这些值只能被回路指令读而不能改写
输出变量是由 PID 运算产生的所以在每一次 PID 运算完成之后需更新回路表中的输出值输
出值被限定在 0.0 1.0 之间当 PID 指令从手动方式转变到自动方式时 回路表中的输出值可以
用来初始化输出值 (有关 PID 指令的方式详见下面的“控制方式” 一节)
如果使用积分控制积分项前值要根据 PID 运算结果更新这个更新了的值用作下一次 PID 运算
的输入当输出值超过范围 (大于 1.0 或小于 0.0) 那么积分项前值必须根据下列公式进行调整
MX = 1.0 - (MPn + MDn) 当计算输出 Mn > 1.0或
MX = - (MPn + MDn) 当计算输出 Mn < 0.0
其中
MX 经过调整了的积分和 (积分项前值)
MPn 第 n 采样时刻的比例项值
MDn 第 n 采样时刻的微分项值
Mn 第 n 采样时刻的输出值
这样调整积分前值一旦输出回到范围后可以提高系统的响应性能而且积分项前值也要限制在
0.0 1.0 之间然后在每次 PID 运算结束之后把积分项前值写入回路表 以备在下次 PID 运算中使用
用户可以在执行 PID 指令以前修改回路表中积分项前值在实际运用中这样做的目的是找到由于
积分项前值引起的问题手工调整积分项前值时必须小心谨慎还应保证写入的值在 0.0 1.0 之间
回路表中的给定值与过程变量的差值 ( ) 是用于 PID 运算中的差分运算用户最好不要去修改此值
引用 wilton_gao 2008/8/28 15:17:17 发表于7楼的内容
-
-
引用 bubli 2008/9/21 20:07:27 发表于8楼的内容