第一部分、PID控制
PID算法在S7-200中的实现
调试PID控制器
主要参数是:
积分时间(IntegralTime):偏差值恒定时,积分时间决定了控制器输出的变化速率。积分时间越短,偏差得到的修正越快。过短的积分时间有可能造成不稳定。积分时间的长度相当于在阶跃给定下,增益为"1"的时候,输出的变化量与偏差值相等所需要的时间,也就是输出变化到二倍于初始阶跃偏差的时间。如果将积分时间设为最大值,则相当于没有积分作用。
常问问题
1、对于某个具体的PID控制项目,是否可能事先得知比较合适的参数?有没有相关的经验数据?
虽然有理论上计算PID参数的方法,但由于闭环调节的影响因素很多而不能全部在数学上精确地描述,计算出的数值往往没有什么实际意义。因此,除了实际调试获得参数外,没有什么可用的经验参数值存在。甚至对于两套看似一样的系统,都可能通过实际调试得到完全不同的参数值。
2、PID控制不稳定怎么办?如何调试PID?
闭环系统的调试,首先应当做开环测试。所谓开环,就是在PID调节器不投入工作的时候,观察:
输出通道是否动作正常
S7-200的新一代产品提供了自整定的PID细调功能。
PID向导编程步骤
在Micro/WIN中的命令菜单中选择ToolsInstructionWizard,然后在指令向导窗
口中选择PID指令:

图1.选择PID向导
在使用向导时必须先对项目进行编译,在随后弹出的对话框中选择"Yes",确认编译。如果已有的程序中存在错误,或者有没有编完的指令,编译不能通过。如果你的项目中已经配置了一个PID回路,则向导会指出已经存在的PID回路,并让你选择是配置修改已有的回路,还是配置一个新的回路:

图2.选择需要配置的回路
第一步:定义需要配置的PID回路号

图3.选择PID回路号
第二步:设定PID回路参数

图4.设置PID参数
图4中:
以下定义PID回路参数,这些参数都应当是实数:
(增益):即比例常数。
(积分时间):如果不想要积分作用,可以把积分时间设为无穷大:9999.99
(微分时间):如果不想要微分回路,可以把微分时间设为0。
注意:关于具体的PID参数值,每一个项目都不一样,需要现场调试来定,没有所谓经验参数。
第三步:设定回路输入输出值

图5.设定PID输入输出参数
在图5中,首先设定过程变量的范围:
a.指定输入类型
Unipolar:单极性,即输入的信号为正,如0-10V或0-20mA等
Bipolar:双极性,输入信号在从负到正的范围内变化。如输入信号为正负10V、正负5V等时选用
20%Offset:选用20%偏移。如果输入为4-20mA则选单极性及此项,4mA是0-20mA信号的20%,所以选20%偏移,即4mA对应6400,20mA对应32000
在a.设置为Unipolar时,缺省值为0-32000,对应输入量程范围0-10V或0-20mA等,输入信号为正
在a.设置为Bipolar时,缺省的取值为-32000-+32000,对应的输入范围根据量程不同可以是正负10V、正负5V等
(输出类型)可以选择模拟量输出或数字量输出。模拟量输出用来控制一些需要模拟量给定的设备,如比例阀、变频器等;数字量输出实际上是控制输出点的通、断状态按照一定的占空比变化,可以控制固态继电器(加热棒等)
d.选择模拟量则需设定回路输出变量值的范围,可以选择:
Unipolar:单极性输出,可为0-10V或0-20mA等
Bipolar:双极性输出,可为正负10V或正负5V等
20%Offset:如果选中20%偏移,使输出为4-20mA
e.取值范围:
d为Unipolar时,缺省值为0到32000
d为Bipolar时,取值-32000到32000
d为20%Offset时,取值6400-32000,不可改变
如果选择了开关量输出,需要设定此占空比的周期。
第四步:设定回路报警选项

图6.设定回路报警限幅值
向导提供了三个输出来反映过程值(PV)的低值报警、高值报警及过程值模拟量模块错误状态。当报警条件满足时,输出置位为1。这些功能在选中了相应的选择框之后起作用。
a.使能低值报警并设定过程值(PV)报警的低值,此值为过程值的百分数,缺省值为0.10,即报警的低值为过程值的10%。此值最低可设为0.01,即满量程的1%
b.使能高值报警并设定过程值(PV)报警的高值,此值为过程值的百分数,缺省值为0.90,即报警的高值为过程值的90%。此值最高可设为1.00,即满量程的100%
c.使能过程值(PV)模拟量模块错误报警并设定模块于CPU连接时所处的模块位置。"0"就是第一个扩展模块的位置
第五步:指定PID运算数据存储区

图7.分配运算数据存储区
自动分配的地址只是在执行PID向导时编译检测到空闲地址。向导将自动为该参数表分配符号名,用户不要再自己为这些参数分配符号名,否则将导致PID控制不执行。
第六步:定义向导所生成的PID初使化子程序和中断程序名及手/自动模式

图8.指定子程序、中断服务程序名和选择手动控制
向导已经为初使化子程序和中断子程序定义了缺省名,你也可以修改成自己起的名字。
a.指定PID初使化子程序的名字。
b.指定PID中断子程序的名字
注意:
1.如果你的项目中已经存在一个PID配置,则中断程序名为只读,不可更改。因为一个项目中所有PID共用一个中断程序,它的名字不会被任何新的PID所更改。
2.PID向导中断用的是SMB34定时中断,在用户使用了PID向导后,注意在其它编程时不要再用此中断,也不要向SMB34中写入新的数值,否则PID将停止工作。
c.此处可以选择添加PID手动控制模式。在PID手动控制模式下,回路输出由手动输出设定控制,此时需要写入手动控制输出参数一个0.0-1.0的实数,代表输出的0%-100%而不是直接去改变输出值。
此功能提供了PID控制的手动和自动之间的无扰切换能力。
第七步:生成PID子程序、中断程序及符号表等

图9.生成PID子程序、中断程序和符号表等
第八步:配置完PID向导,需要在程序中调用向导生成的PID子程序(如下图)

图10.PID子程序图11.调用PID子程序
在用户程序中调用PID子程序时,可在指令树的ProgramBlock(程序块)中用鼠标双击由向导生成的PID子程序,在局部变量表中,可以看到有关形式参数的解释和取值范围。
a.必须用来使能PID,以保证它的正常运行
c.此处输入设定值变量地址(VDxx),或者直接输入设定值常数,根据向导中的设定0.0-100.0,此处应输入一个0.0-100.0的实数,例:若输入20,即为过程值的20%,假设过程值AIW0是量程为0-200度的温度值,则此处的设定值20代表40度(即200度的20%);如果在向导中设定给定范围为0.0-200.0,则此处的20相当于20度
d.此处用控制PID的手/自动方式,当为1时,为自动,经过PID运算从AQW0输出;当为0时,PID将停止计算,AQW0输出为ManualOutput(VD4)中的设定值,此时不要另外编程或直接给AQW0赋值。若在向导中没有选择PID手动功能,则此项不会出现
e.定义PID手动状态下的输出,从AQW0输出一个满值范围内对应此值的输出量。此处可输入手动设定值的变量地址(VDxx),或直接输入数。数值范围为0.0-1.0之间的一个实数,代表输出范围的百分比。例:如输入0.5,则设定为输出的50%。若在向导中没有选择PID手动功能,则此项不会出现
f.此处键入控制量的输出地址
g.当高报警条件满足时,相应的输出置位为1,若在向导中没有使能高报警功能,则此项将不会出现
h.当低报警条件满足时,相应的输出置位为1,若在向导中没有使能低报警功能,则此项将不会出现
i.当模块出错时,相应的输出置位为1,若在向导中没有使能模块错误报警功能,则此项将不会出现
调用PID子程序时,不用考虑中断程序。子程序会自动初始化相关的定时中断处理事项,然后中断程序会自动执行。
第九步:实际运行并调试PID参数
没有一个PID项目的参数不需要修改而能直接运行,因此需要在实际运行时调试PID参数。
查看DataBlock(数据块),以及SymbolTable(符号表)相应的PID符号标签的内容,可以找到包括PID核心指令所用的控制回路表,包括比例系数、积分时间等等。将此表的地址复制到StatusChart(状态表)中,可以在监控模式下在线修改PID参数,而不必停机再次做组态。
参数调试合适后,用户可以在数据块中写入,也可以再做一次向导,或者编程向相应的数据区传送参数。
常问问题
1、做完PID向导后,如何知道向导中设定值,过程值及PID等参数所用的地址?
做完PID向导后可在SymbolTable(符号表)中,查看PID向导所生成的符号表(上例中为PID0_SYM),可看到各参数所用的详细地址,及数值范围。
在DataBlock(数据块)中,查看PID指令回路表的相关参数。如图所示:

图12.PID数据块
2、做完PID向导后,如何在调试中修改PID参数?
可以在StatusChart(状态表)中,输入相应的参数地址,然后在线写入用户需要的PID参数数值,这样用户就可根据工艺需要随时对PID参数、设定值等进行调整。
3、PID已经调整合适,如何正式确定参数?
可以在DataBlock(数据块)中直接写入参数。
4、做完PID向导后,能否查看PID生成的子程序,中断程序?
PID向导生成的子程序,中断程序用户是无法看到的,也不能对其进行修改。没有密码能够打开这些子程序,一般的应用也没有必要打开查看。
5、PID参数有经验值吗?
每一个项目的PID参数都不一样,没有经验参数,只能现场调试获得。
6、我的PID向导生成的程序为何不执行?
必须保证用无条件调用PID0_INIT程序bull;在程序的其它部分不要再使用SMB34定时中断,也不要对SMB34赋值
7、如何实现PID反作用调节?
8、如何根据工艺要求有选择地投入PID功能?
可使用"手动/自动"切换的功能。PID向导生成的PID功能块只能使用的条件调用。
完成PIDWizard组态后,会为每个PID回路生成一个子程序PIDx_INIT
(x=0-7)。在用户程序中,必须使用始终调用这个子程序才能实现PID功能。
下图是一个最简单的PID子程序调用程序段:

图1.调用PID子程序
其中:
Setpoint:给定参数值的入口
Output:PID调节器的输出值
注意:
这取决于被控制的对象,如果是压力,则给定也必须对应于压力值;如果是温度,则给定也必须对应于温度。

图2.在图中a.处设置给定范围

实例
表1.

n为比例系数,为了精度高些可以设置n=10等等
又如一个温度控制的PID系统,温度值直接由热电偶测量,输入到EM231TC(热电偶)模块转换为温度值。热电偶为J型,其测量范围为-150.0deg;;C。则可按如下设置给定的范围。
表2.



图5.给定范围设置
第二部分、PID自整定
PID自整定
新的S7-200CPU支持PID自整定功能,在STEP7-Micro/中也添加了PID调节控制面板。用户可以使用用户程序或PID调节控制面板来启动自整定功能。在同一时间最多可以有8个PID回路同时进行自整定。PID调节控制面板也可以用来手动调试老版本的(不支持PID自整定)CPU的PID控制回路。
用户可以根据工艺要求为调节回路选择快速响应、中速响应、慢速响应或极慢速响应。PID自整定会根据响应类型而计算出最优化的比例、积分、微分值,并可应用到控制中。
PID调节控制面板
STEP7-Micro/中提供了一个PID调节控制面板,可以用图形方式监视PID回路的运行,另外从面板中还可以启动、停止自整定功能。

图1.PID调节控制面板
在图1中:
a.过程值指示显示过程变量的值及其棒图
b.当前的输出值指示显示当前使用的设定值、采样时间、PID参数值及显示当前的输出值和棒图
c.可显示过程值、设定值及输出值的PID趋势图

图2.图形显示区
图中:
A.过程变量和设定值的取值范围及刻度
输出的取值范围及刻度
C.实际PC时间
D.以不同颜色表示的设定值、过程变量及输出的趋势图
d.调节参数这里你可以:
选择PID参数的显示:当前参数(Current)、推荐参数(Suggested)、手动输入(Manual)
在Manual模式下,可改变PID参数,并按UpdatePLC按钮来更新PLC中的参数
启动PID自整定功能
选择Advanced(高级)按钮进入高级参数设定
e.当前的PID回路号
这里你可以选择需要监视或自整定的PID回路
f.时间选项设定
这里你可以设定趋势图的时基,时基以分为单位
g.图例颜色
这里你可以看到趋势图中不同的颜色代表不同的值的趋势
h.帮助按钮
信息显示窗口
j.关闭PID调节面板
要使用PID调节控制面板,PID编程必须使用PID向导完成。
PID自整定步骤
第一步:在PIDWizard(向导)中完成PID功能组态
要想使用PID自整定功能,PID编程必须用PID向导来完成
第二步:打开PID调节控制面板,设置PID回路调节参数
为了使PID自整定顺利进行,应当做到:
设置合适的给定值,使PID调节器的输出远离趋势图的上、下坐标轴,以免PID自整定开始后输出值的变化范围受限制
参见:手动调整PID回路参数

图3.设置PID自整定高级选项
在此允许你设定下列参数:
a.你可以选中复选框,让自整定来自动计算死区值和偏移值
对于一般的PID系统,建议使用自动选择。
(滞回死区):
这个值用来减少过程变量的噪声对自整定的干扰,从而更精确地计算出过程系统的自然振动频率。如果选用自动计算,则缺省值为2%。
(偏差):
(初始步长值):PID调节的初始输出值
PID自整定开始后,PID自整定调节器将主动改变PID的输出值,以观察整个系统的反应。初始步长值就是输出的变动第一步变化值,以占实际输出量程的百分比表示。
(看门狗时间):过程变量必须在此时间(时基为秒)内达到或穿越给定值,否则会产生看门狗超时错误。
f.动态响应选项:根据回路过程(工艺)的要求可选择不同的响应类型:快速、中速、慢速、极慢速
快速:可能产生超调,属于欠阻尼响应
中速:在产生超调的边缘,属于临界阻尼响应
慢速:不会产生任何超调,属于过阻尼响应
极慢速:不会产生任何超调,属于严重过阻尼响应
用户在这里指定需要达到的系统控制效果,而不是对系统本身响应快慢的判断。
要使用自整定功能,必须保证PID回路处于自动模式。开始自整定后,给定值不能再改变。
完成PID调整后,最好下载一次整个项目(包括数据块),使新参数保存到CPU的EEPROM中。
PID自整定失败的原因
PID输出在最大值与最小值之间振荡(曲线接触到坐标轴)

解决方法:降低PID初始输出步长值(initialoutputstep)
解决方法:确定在启动PID自整定前,过程变量和输出值已经稳定。并检查WatchdogTime的值,将其适当增大。对于其它错误,可参考手册中表15-3中的错误代码的描述。
如何获得一个稳定的PID回路
在开始PID自整定调整前,整个PID控制回路必须工作在相对稳定的状态。稳定的PID是指过程变量接近设定值,输出不会不规则的变化,且回路的输出值在控制范围中心附近变化。
问题与解决方法:
1.PID输出总是输出很大的值,并在这一区间内调节变化
产生原因:
增益(Gain)值太高
PID扫描时间(sampletime)太长(对于快速响应PID的回路)
解决方法:降低增益(Gain)值并且/或选择短一些的扫描时间
2.过程变量超过设定值很多(超调很大)
产生原因:积分时间(Integraltime)可能太高
解决方法:降低积分时间
3.得到一个非常不稳定的PID
产生原因:
如果用了微分,可能是微分参数有问题
没有微分,可能是增益(Gain)值太高
解决方法:
调整微分参数到0-1的范围内
根据回路调节特性将增益值降低,最低可从0.x开始逐渐增大往上调,直到获得稳定的PID。





