PID算法
比例项
积分项
微分项
回路控制的选择
转换和标准化回路输入
将回路输出转换为标定整数值
正作用或反作用回路
变量和范围
模式
报警检查和特殊操作
错误条件
另请参见
PID回路指令(比例、积分、微分回路)由S7‑200SMARTCPU提供,用于执行PID计算。PID回路的操作由在回路表中存储的9个参数确定。
PID算法
在稳态运行中,PID控制器调节输出值,使偏差(e)为零。偏差是设定值(所需工作点)与过程变量(实际工作点)之差。PID控制的原理基于以下方程,输出M(t)是比例项、积分项和微分项的函数:
输出=比例项+积分项+微分项
M(t)=KC*e+KC0∫tedt+Minitial+KC*de/dt
其中:
M(t)
回路输出(时间的函数)
Kc
回路增益
e
回路偏差(设定值与过程变量之差)
Minitial
回路输出的初始值
要在数字计算机中执行该控制函数,必须将连续函数量化为偏差值的周期采样,并随后计算输出。数字计算机解决方案所基于的相应方程如下:
输出=比例项+积分项+微分项
Mn=Kc*en+KI*1∑n+Minitial+KD*(en-en-1)
其中:
Mn
采样时间n时回路输出的计算值
Kc
回路增益
en
采样时间n时的回路偏差值
en-1
前一回路偏差值(采样时间n-1时)
KI
积分项的比例常量
Minitial
回路输出的初始值
KD
微分项的比例常量
从该公式中可以看出,积分项是从第一次采样到当前采样所有偏差项的函数。微分项是当前采样和前一次采样的函数,而比例项仅是当前采样的函数。在数字计算机中,存储偏差项的所有采样既不实际,也没有必要。
因为从第一次采样开始,每次对偏差进行采样时数字计算机都必须计算输出值,因此仅需存储前一偏差值和前一积分项值。由于数字计算机解决方案具有重复特性,因此可以简化在任何采样时间都必须求解的方程。简化方程如下:
输出=比例项+积分项+微分项
Mn=KC*en+KI*en+MX+KD*(en-en-1)
其中:
Mn
采样时间n时回路输出的计算值
Kc
回路增益
en
采样时间n时的回路偏差值
en-1
前一回路偏差值(采样时间n-1时)
KI
积分项的比例常量
MX
前一积分项值(采样时间n-1时)
KD
微分项的比例常量
CPU使用以上简化方程的改进方程计算回路输出值。改进的方程如下:
Mn=MPn+MIn+MDn
输出=比例项+积分项+微分项
其中:
Mn
采样时间n时回路输出的计算值
MPn
采样时间n时回路输出的比例项值
MIn
采样时间回路输出的积分项值
MDn
采样时间n时回路输出的微分项值
比例项
比例项MP是增益KC与偏差(e)的乘积,其中,增益控制输出计算的灵敏度,偏差是给定采样时间时的设置值(SP)与过程变量(PV)之差。CPU求解比例项所采用的方程如下:
MPn=KC*(SPn-PVn)
其中:
MPn
采样时间n时回路输出的比例项值
KC
回路增益
SPn
采样时间n时设定值的值
PVn
采样时间n时过程变量的值
积分项
积分项MI与一段时间内的偏差(e)之和成比例。CPU求解积分项所采用的方程如下:
MIn=KC*TS/TI*(SPn-PVn)+MX
其中:
MIn
采样时间n时回路输出的积分项值
KC
回路增益
TS
回路采样时间
TI
积分时间(也称为积分时间或复位)
SPn
采样时间n时设定值的值
PVn
采样时间n时过程变量的值
MX
采样时间n-1时的积分项值(也称为积分和或偏置)
积分和或偏置(MX)是积分项的所有先前值之和。每次计算完MIn后,使用可调整或限定的MIn值更新偏置。(有关详细信息,请参见下文“变量和范围”部分。)偏置的初始值通常设为第一次计算回路输出之前的输出值Minitial。积分项还包括几个常数:增益KC、采样时间TS(PID回路重新计算输出值的周期时间)、积分时间或复位TI(用于控制积分项在输出计算中的影响的时间)。
微分项
微分项MD与偏差变化成比例。微分项所采用的方程如下:
MDn=KC*TD/TS*((SPn-PVn)-(SPn-1-PVn-1))
为避免由于设定值变化而导致微分作用激活引起输出发生阶跃变化或跳变,对此方程进行了改进,假定设定值为常数SPn=SPn-1。这样,将计算过程变量的变化而不是偏差的变化,如下所示:
MDn=KC*TD/TS*((SPn-PVn)-(SPn-1-PVn-1))
或:
MDn=KC*TD/TS*(PVn-1-PVn)
其中:
MDn
采样时间n时回路输出的微分项值
KC
回路增益
TS
回路采样时间
TD
回路的微分周期(也称为微分时间或速率)
SPn
采样时间n时设定值的值
SPn-1
采样时间n-1时设定值的值
PVn
采样时间n-1时过程变量的值
PVn-1
采样时间n-1时过程变量的值
必须保存过程变量而不是偏差,供下次计算微分项使用。在第一次采样时,PVn-1的值初始化为等于PVn。
回路控制的选择
在许多控制系统中,可能仅需使用一种或两种回路控制方法。例如,可能只需要使用比例控制或比例积分控制。可以通过设置常量参数值来选择所需的回路控制类型。
如果不需要积分作用(PID计算中没有“I”),则应为积分时间(复位)指定无穷大值INF。即使没有使用积分作用,积分项的值也可能不为零,这是因为积分和MX有初始值。
如果不需要微分作用(PID计算中没有“D”),则应为微分时间(速率)指定值0.0。
如果不需要比例作用(PID计算中没有“P”),但需要I或ID控制,则应为增益指定值0.0。由于回路增益是计算积分项和微分项的方程中的一个系数,如果将回路增益设置为值0.0,计算积分项和微分项时将对回路增益使用值1.0。
转换和标准化回路输入
一个回路有两个输入变量,分别是设定值和过程变量。设定值通常是固定值,例如汽车巡航控制装置上的速度设置。过程变量是与回路输出相关的值,因此可衡量回路输出对受控系统的影响。在巡航控制示例中,过程变量是测量轮胎转速的测速计输入。
设定值和过程变量都是实际值,其大小、范围和工程单位可能有所不同。在PID指令对这些实际值进行运算之前,必须将这些值转换为标准化的浮点型表示。
第一步是将实际值从16位整数值转换为浮点值或实数值。下面的指令序列显示了如何将整数值转换为实数值。
ITDAIW0,AC0//将输入值转换为双字
DTRAC0,AC0////将32位整数转换为实数。
下一步是将实际值的实数值表示转换为0.0到1.0之间的标准化值。下面的公式用于标准化设定值或过程变量值:
RNorm=((RRaw/Span)+Offset)
其中:
RNorm
实际值的标准化实数值表示
RRaw
实际值的非标准化或原始实数值表示
偏移
0.0表示单极性值,0.5表示双极性值
跨度
最大可能值减去最小可能值:
=32,000(表示单极性值(典型))
=64,000(表示双极性值(典型))
下面的指令序列显示了如何标准化AC0中的双极性值(其跨度为64,000),该指令序列是前一指令序列延续:
/,AC0//标准化累加器中的值
+,AC0//将值偏移到0.0到1.0的范围
MOVRAC0,VD100//在回路表中存储标准化值
将回路输出转换为标定整数值
回路输出是控制变量,例如汽车巡航控制装置上的节气门设置。回路输出是介于0.0到1.0之间的标准化实数值。回路输出转换为16位标定整数值后,才能用于驱动模拟量输出。此过程与将PV和SP转换为标准化值的过程相反。第一步是使用下面给出的公式将回路输出转换为标定实数值:
RScal=(Mn-Offset)*Span
其中:
RScal
回路输出的标定实数值
Mn
回路输出的标准化实数值
偏移
0.0表示单极性值,0.5表示双极性值
跨度
最大可能值减去最小可能值
=32,000(表示单极性值(典型))
=64,000(表示双极性值(典型))
以下指令序列显示了如何标定回路输出:
MOVRVD108,AC0//将回路输出移至累加器。
-,AC0//仅当值为双极性值时
//才使用本语句。
*,AC0//标定累加器中的值。
接下来,必须将代表回路输出的标定实数值转换为16位整数。下列指令序列显示了如何进行此转换:
ROUNDAC0,AC0//将实数转换为32位整数。
DTIAC0,LW0//转换为16位整数
MOVWLW0,AQW0//写入模拟量输出值。
正作用或反作用回路
如果增益为正,则回路为正作用回路;如果增益为负,则回路为反作用回路。(对于增益值为0.0的I或ID控制,如果将积分时间和微分时间指定为正值,则回路将是正作用回路;如果指定负值,则回路将是反作用回路。)
变量和范围
过程变量和设定值是PID计算的输入值。因此,PID指令只能读出这些变量的回路表字段,而不能改写。
输出值通过PID计算得出,因此,每次PID计算完成之后,会更新回路表中的输出值字段。输出值限定在0.0到1.0之间。当输出从手动控制转换为PID指令(自动)控制时,用户可使用输出值字段作为输入来指定初始输出值。(请参见下面的“模式”部分中的讨论。)
如果使用积分控制,则偏置值通过PID计算更新,并且更新值将用作下一次PID计算的输入。如果计算出的输出值超出范围(输出小于0.0或大于1.0),则将按照下列公式调整偏置:
MX=1.0-(MPn+MDn)
如果计算出的输出
或
MX=-(MPn+MDn)
如果计算出的输出
其中:
MX
调整的偏置的值
MPn
采样时间n时回路输出的比例项值
MDn
采样时间n时回路输出的微分项值
Mn
采样时间n时的回路输出值
如上所述调整偏置后,如果计算出的输出回到正常范围内,可提高系统响应性。计算出的偏置也会限制在0.0到1.0之间,然后在每次PID计算完成时写入回路表的偏置字段。存储在回路表中的值用于下一次PID计算。
用户可以在执行PID指令之前修改回路表中的偏置值,在某些应用情况下,这样可以解决偏置值问题。手动调整偏置时必须格外小心,向回路表中写入的任何偏置值都必须是0.0到1.0之间的实数。
过程变量的比较值保留在回路表中,用于PID计算的微分作用部分。不应修改该值。
模式
S7-200SMARTPID回路没有内置模式控制。仅当能流流到PID功能框时才会执行PID计算。因此,循环执行PID计算时存在“自动化”或“自动”模式。不执行PID计算时存在“手动”模式。
与计数器指令相似,PID指令也具有能流历史位。该指令使用此历史位检测0到1的能流转换,如果检测到此能流转换,该指令将执行一系列动作,从而实现从手动控制无扰动地切换到自动控制。要无扰动地切换到自动模式,在切换到自动控制之前,必须提供手动控制设置的输出值作为PID指令的输入(写入Mn的回路表条目)。检测到0到1的能流转换时,PID指令将对回路表中的值执行以下操作,以确保无扰动地从手动控制切换到自动控制:
设置设定值SPn=过程变量PVn
设置旧过程变量PVn-1=过程变量PVn
设置偏置(MX)=输出值Mn
PID历史位的默认状态为“置位”,CPU启动以及控制器每次从STOP切换到RUN模式时设置此状态。如果在进入RUN模式后首次执行PID功能框时有能流流到该功能框,则检测不到能流转换且不会执行无扰动模式切换操作。
报警检查和特殊操作
PID指令是一种简单但功能强大的指令,可执行PID计算。如果需要进行其它处理,例如报警检查或回路变量的特殊计算,则必须使用CPU支持的基本指令来实现。
错误条件
如果在指令中指定的回路表起始地址或PID回路编号操作数超出范围,则在编译时,CPU将生成编译错误(范围错误),编译将失败。
PID指令不检查某些回路表输入值是否超出范围。必须确保过程变量和设定值(以及用作输入的偏置和前一过程变量)是0.0到1.0之间的实数。
如果在执行PID计算的数学运算时发生任何错误,则将置位(溢出或非法值),PID指令将终止执行。(回路表中输出值的更新可能不完全,因此,在下一次执行回路的PID指令之前应忽略这些值并纠正引起数学运算错误的输入值。)