PID 自动/手动调节的无扰动切换
有些工程项目中可能需要根据工艺要求在不同的时刻投入、或者退出 PID 自动控制;退出 PID 自动控制时,控制器的输出部分可以由操作人员直接手动控制。这就是所谓的 PID 手动/自动切换。
PID 控制处于自动方式时,PID 控制器(S7-200 SMART 中的 PID 调节功能)会按照 PID 算法,自动通过输出的作用使过程反馈值跟随给定值变化,并保持稳定。这是一个自动的闭环控制系统。操作人员可以根据现场工艺的要求,改变给定(即设定值)的值。
PID 控制处于手动方式时,PID 控制器不再起自动计算的作用。这时,控制回路的输出是由操作人员手动控制、调整,由操作人员观察现场的控制效果,从而构成人工闭环控制。
所谓 PID 自动/手动控制,就是看控制系统的输出是由 PID 控制器自动控制,还是由操作人员手动控制。
有些控制系统的执行机构不能承受较大的冲击,这就要求在进行 PID 自动/手动切换时,保持控制输出的稳定。这就是要求无扰动切换。
为了达到 PID 自动/手动控制的无扰动切换,需要在编程时注意一些相关事项。下面分别就直接使用 PID 指令编程,和使用 PID 向导编程两种情况作一介绍。
1.直接使用 PID 指令编程时的 PID 自动/手动无扰切换
直接使用 PID 指令块编写 PID 控制程序时,可以简单地使用“调用/不调用”指令的方式控制自动/手动模式。因为 PID 指令本身已经具有实现无扰动切换的能力,此时在 PID 指令控制环节之外编程没有多大必要。
PID 指令的 EN 输入端使能(为“1”)时,我们认为是自动控制模式;EN 输入端未使能(为“0”)时,我们认为是手动控制模式。
PID 指令本身有一个“能流历史状态位”,以记录指令的状态切换。在 EN 端从“0”变为”“1”时,PID 指令认为这是从“手动”模式向“自动”模式切换。PID 指令此时会自动执行一系列动作,以配合无扰动切换:
- 使设定值( SPn) = 当前过程反馈变量(PVn)
- 设置上次采样过程变量(PVn-1) = 当前过程反馈变量(PVn)
- 设置积分偏差和(或所谓积分前项)(Mx) = 当前输出值(Mn)
使设定值等于当前反馈值可以避免出现偏差,使之不存在调整的要求;当然如果有工艺要求,也可以后续调整设定值。其他的动作都是为了使 PID 在后续的操作中不改变输出的值。
在编程时要注意:
- 从自动模式向手动模式切换时,PID 指令的 EN 端不再有能流,计算停止,输出值 Mn 不再变化。此时如果需要操作人员人工观察控制的结果,手动控制输出量,就可以通过用户程序直接改变回路表中的输出值存储单元内容(见数据块或系统手册的相关部分内容)。如果有必要,操作人员的操作可能要进行一些标准化换算。
- 为保证从手动模式向自动模式的切换无扰动,需要在手动控制时,或在切换过程中,禁止对 PID 回路表中设定值的更新,以便切换时 PID 指令用当前过程反馈值替代设定值。切换完成后,操作人员可以调整设定值。
2.使用 PID 向导编程时的 PID 自动/手动无扰切换
使用 PID 指令向导编程时,指令向导会自动调用 PID 指令,并且编写外围的控制变量标准化换算、定时采样等功能。用户在使用 PID 指令向导时,需要在用户程序中用 SM0.0 调用指令向导生成的子程序(如 PIDx_CTRL 子程序)。PID 向导可以生成带自动/手动切换功能的子程序,这个子程序使用一个数字量点为“1”、“0”的状态来控制是否投入 PID 自动控制。
到目前为止(STEP 7-Micro/WIN SMART),使用 PID 向导生成的子程序时,由于用户程序不能直接使用 PID 指令,它的无扰切换能力因为隔了外壳子程序,所以受到了局限。如果对无扰切换要求比较严格,需要另外编一些程序加以处理。
考察如下 PID 控制子程序。
图 1. PID 向导生成的指令
图中:
- 过程反馈量
- 设定值,实数
- 自动/手动控制,“1”=自动,“0”=手动
- 手动控制输出值,0.0 - 1.0 之间的一个实数
- PID 控制输出值
要实现无扰动切换,必须:
- 在从自动向手动切换时,使手动输出值(VD2004)等于当前的实际控制输出值;
- 在从手动向自动切换时,使设定值相当于当前的过程反馈值。
为此,可编写类似下图所示的程序,放在 PID 控制子程序之前:
图 2. 无扰切换处理程序
图中:
- 自动/手动切换控制点
- 从自动向手动切换时,使手动输出值等于实际当前值
- 从手动向自动切换时,把当前反馈量换算为相应的给定值
上述程序中的 Scale_I_to_R 就是量程变换指令库中的子程序,如何将该指令库导入到Micro/WIN SMART 中可参见如何将Micro/WIN 的库文件导入到Micro/WIN SMART中。这是为了解决过程反馈与设定值之间的换算问题。用户也可以自己编程换算,或者根据反馈与给定的取值范围决定是否需要换算。
为了更好地理解 PID向导的自动/手动无扰切换的使用,可参考下面的例程。
使用环境: STEP 7 Micro/WIN SMART V2.3.2
实现功能: PID向导的自动/手动无扰切换
PID向导自动/手动无扰切换
PID常见问题
1. PID向导生成的程序为何不执行?
- 必须保证用SM0.0无条件调用PID0_CTRL程序
- 在程序的其它部分不要再使用SMB34定时中断,也不要对SMB34赋值
- 确认当前工作状态:手动还是自动
2. 如何实现PID反作用调节?
在有些控制中需要PID反作用调节。例如:在夏天控制空调制冷时,若反馈温度(过程值)低于设定温度,需要关阀,减小输出控制(减少冷水流量等),这就是PID反作用调节(在PID正作用中若过程值小于设定值,则需要增大输出控制)。 若想实现PID反作用调节,需要把PID回路的增益设为负数。对于增益为0的积分或微分控制来说,如果指定积分时间、微分时间为负值,则是反作用回路。
3. 如何根据工艺要求有选择地投入PID功能?
可使用"手动/自动"切换的功能。PID向导生成的PID功能块需要保证每个扫描周期都调用,所以建议在主程序内使用SM0.0调用。
4. 做完PID向导后,如何知道向导中设定值,过程值及PID等参数所用的地址?
- 做完PID向导后可在符号表
中,查看PID向导所生成的符号表(上例中为PID0_SYM),可看到各参数所用的详细地址,及数值范围。
- 在数据块
中,查看PID指令回路表的相关参数。如图所示:
图15. PID数据块 用户可以在状态表
中, 输入相应的参数地址,然后在线写入需要的PID参数数值,这样用户就可根据工艺需要随时对PID参数、设定值等进行调整。
5. PID已经调整合适,如何正式确定参数? 可以在数据块中直接写入参数,作为初始值使用。
6. 对于某个具体的PID控制项目,是否可能事先得知比较合适的参数?有没有相关的经验数据?
虽然有理论上计算PID参数的方法,但由于闭环调节的影响因素很多而不能全部在数学上精确地描述,计算出的数值往往没有什么实际意义。因此,除了实际调试获得参数外,没有什么可用的经验参数值存在。甚至对于两套看似一样的系统,都可能通过实际调试得到完全不同的参数值。
7. PID控制不稳定怎么办?如何调试PID?
闭环系统的调试,首先应当做开环测试。所谓开环,就是在PID调节器不投入工作的时候,观察:
- 反馈通道的信号是否稳定
- 输出通道是否动作正常
可以试着给出一些比较保守的PID参数,比如放大倍数(增益)不要太大,可以小于1,积分时间不要太短,以免引起振荡。在这个基础上,可以直接投入运行观察反馈的波形变化。给出一个阶跃给定,观察系统的响应是最好的方法。
如果反馈达到给定值之后,历经多次振荡才能稳定或者根本不稳定,应该考虑是否增益过大、积分时间过短;如果反馈迟迟不能跟随给定,上升速度很慢,应该考虑是否增益过小、积分时间过长……
总之,PID参数的调试是一个综合的、互相影响的过程,实际调试过程中的多次尝试是非常重要的步骤,也是必须的。
S7-200 SMART的新一代产品提供了自整定的PID细调功能。
8. 没有采用积分控制时,为何反馈达不到给定?
这是必然的。因为积分控制的作用在于消除纯比例调节系统固有的“静差”。没有积分控制的比例控制系统中,没有偏差就没有输出量,没有输出就不能维持反馈值与给定值相等。所以永远不能做到没有偏差。
9. S7-200 SMART控制变频器,在变频器也有PID控制功能时,应当使用谁的PID功能?
可以根据具体情况使用。一般来说,如果需要控制的变量直接与变频器直接有关,比如变频水泵控制水压等,可以优先考虑使用变频器的PID功能。
10. 做完PID向导后,能否查看PID生成的子程序,中断程序? PID向导生成的子程序,中断程序用户是无法看到的,也不能对其进行修改。没有密码能够打开这些子程序,一般的应用也没有必要打开查看。
11. 指令块与向导使用的PID回路号是否可以重复?
不可以重复,使用PID向导时,对应回路的指令块也会调用,所以指令块与向导使用的PID回路号不能重复,否则会产生预想不到的结果。
12. 同一个程序里既使用PID指令块又使用向导,PID数目怎样计算?
使用PID向导时,对应回路的指令块也会调用,所以PID指令块与向导一共支持8个。
13. PID指令块可以在主程序/子程序里调用吗?(PID指令块常见问题) 可以,但是不推荐,主程序/子程序的循环时间每个周期都可能不同,不能保证精确的采样,建议用定时中断,例如SMB34/SMB35。
14.SMB34定时最大255ms,如果采样时间是1S怎样实现?(PID指令块常见问题) 采样时间是1S,要求PID指令块每隔1S调用一次。可以先做一个250ms的定时中断,然后编程累加判断每4次中断执行一次PID指令即可。
15. PID指令块怎样实现手动调节?(PID指令块常见问题) 可以简单地使用"调用/不调用"指令的方式控制自动/手动模式。不调用PID指令时,可以手动给输出地址0.0-1.0之间的实数。
16. PID指令块实现数字量输出?(PID指令块常见问题) 1.通过PWM指令,将PID输出值转换为所需时间基准的整数,送到PWM的Pulse,控制脉宽(该法简单易用,但是要求输出点只能是Q0.0或Q0.1)。 2.自己编程实现类似于PWM的输出。(虽然不限制Q点,但编程较复杂,不建议使用,可以直接考虑用PID向导)。