在s7-200中pid功能是通过pid指令功能块实现。通过定时(按照采样时间)执行pid功能块,按照pid运算规律,根据当时的给定、反馈、比例-积分-微分数据,计算出控制量。本文详细介绍了s7-200的pid类型和各参数作用、通过pid指令功能块和pid向导两种方式实现pid编程,同时给出了pid的调节步骤、手自动无扰切换的实现方式,此外还对通过自整定方式进行pid调节给出了控制面板启动和编程启动两种详细方案。如果想要了解更详细的pid算法,请参考《s7-200系统手册》中pid指令部分的相关内容。
1概览pid是闭环控制系统的比例-积分-微分控制算法。控制器根据设定值(给定)与被控对象的实际值(反馈)的差值,按照pid算法计算出控制器的输出量,控制执行机构去影响被控对象的变化。
s7-200pid控制是负反馈闭环控制,能够抑制系统闭环内的各种因素所引起的扰动,使反馈跟随给定变化。
1.1 pid的实现方式及数目1.s7-200中pid功能实现方式有以下三种:
pid指令块:通过一个pid回路表交换数据, 只接受0.0 - 1.0之间的实数(实际上就是百分比)作为反馈、给定与控制输出的有效数值。
pid向导:方便地完成输入/输出信号转换/标准化处理。pid指令同时会被自动调用。
根据pid算法自己编程(该文档不涉及)
2.s7-200 cpu多可以支持8个pid控制回路(8个pid指令功能块),根据pid算法自己编程没有具体数目的限制,但是需要考虑plc的存储空间以及扫描周期等影响。
常见问题
同一个程序里既使用pid指令块又使用向导,pid数目怎样计算?
使用pid向导时,对应回路的指令块也会调用,所以pid指令块与向导一共支持8个。
指令块与向导使用的pid回路号是否可以重复?
不可以重复,使用pid向导时,对应回路的指令块也会调用,所以指令块与向导使用的pid回路号不能重复,否则会产生预想不到的结果。
s7-200控制变频器,在变频器也有pid控制功能时,应当使用谁的pid功能?
可以根据具体情况使用。一般来说,如果需要控制的变量直接与变频器直接有关,比如变频水泵控制水压等,可以优先考虑使用变频器的pid功能。
1.2. pid输入/输出支持的信号类型信号类型输入电压、电流、热电阻、热电偶或经过变换的实际工程量输出模拟量输出用来控制一些需要模拟量给定的设备,如比例阀、变频器等;数字量输出实际上是控制输出点的通、断状态按照一定的占空比变化,可以控制固态继电器(加热棒等)
表1.2.1. pid输入/输出支持的信号类型
1.3. pid实现反作用在有些控制中需要pid反作用调节。例如:在夏天控制空调制冷时,若反馈温度(过程值)低于设定温度,需要关阀,减小输出控制(减少冷水流量等),这就是pid反作用调节(在pid正作用中若过程值小于设定值,则需要增大输出控制)。
若想实现pid反作用调节,需要把pid回路的增益设为负数。对于增益为0的积分或微分控制来说,如果指定积分时间、微分时间为负值,则是反作用回路。
1.4 pid各参数作用计算机化的pid控制算法有几个关键的参数ts(采样时间),kc(gain,增益),ti(积分时间常数),td(微分时间常数)。pid参数的取值,以及它们之间的配合,对pid控制是否稳定具有重要的意义:
采样时间
计算机必须按照一定的时间间隔对反馈进行采样,才能进行pid控制的计算。采样时间就是对反馈进行采样的间隔。短于采样时间间隔的信号变化是不能测量到的。过短的采样时间没有必要,过长的采样间隔显然不能满足扰动变化比较快、或者速度响应要求高的场合。
编程时指定的pid控制器采样时间必须与实际的采样时间一致。s7-200中pid的采样时间精度用定时中断(pid向导用smb34)来保证。
增益(gain,放大系数,比例常数)
增益与偏差(给定与反馈的差值)的乘积作为控制器输出中的比例部分。提高响应速度,减少误差,但不能消除稳态误差,当比例作用过大时,系统的稳定性下降。
积分时间(integral time)
偏差值恒定时,积分时间决定了控制器输出的变化速率。
积分时间的长度相当于在阶跃给定下,增益为“1”的时候,输出的变化量与偏差值相等所需要的时间,也就是输出变化到二倍于初始阶跃偏差的时间。
如果将积分时间设为大值,则相当于没有积分作用。
微分时间(derivative time)
偏差值发生改变时,微分作用将增加一个尖峰到输出中,随着时间流逝减小。微分时间越长,输出的变化越大。微分使控制对扰动的敏感度增加,也就是偏差的变化率越大,微分控制作用越强。微分相当于对反馈变化趋势的预测性调整。
如果将微分时间设置为0就不起作用,控制器将作为pi调节器工作。
比例调节
提高响应速度,减少误差,但不能消除稳态误差,当比例作用过大时,系统的稳定性下降。 (由小到大单独调节)
积分调节
消除稳态误差,使系统的动态响应变慢,积分时间越小,积分作用越大 ,偏差得到的修正越快,过短的积分时间有可能造成不稳定。(将调好的比例增益调整到50%~80%后,由大到小减小积分时间)
微分调节
超前调节,能预测误差变化的趋势,提前抑制误差的控制作用,从而避免了被控量的严重超调。可以改善系统的响应速度和稳定性,对噪声干扰有放大作用,对具有滞后性质的被控对象,应加入微分环节。
2.pid指令块实现pid2.1 介绍pid回路表/t96在s7-200中pid功能是通过pid指令功能块实现。通过定时(按照采样时间)执行pid指令块,按照pid运算规律,根据当时的给定、反馈、比例-积分-微分数据,计算出控制量。
pid指令块通过一个pid回路表交换数据,这个表是在v数据存储区中的开辟,长度为80字节(micro/win4.0之前老版本,未增加pid自整定时回路表长度为36字节)。只接受0.0 - 1.0之间的实数(实际上就是百分比)作为反馈、给定与控制输出的有效数值。
偏移量域格式类型描述0过程变量(pvn)real输入过程变量,必须在0.0~1.0之间4设定值(spn)real输入设定值,必须在0.0~1.0之间8输出(mn)real输入/输出输出值,必须在0.0~1.0之间12增益(kc)real输入增益是比例常数,可正可负16采样时间(ts)real输入采样时间,单位为秒,必须是正数20积分时间或复位(ti)real输入积分时间或复位,单位是分钟24微分时间或速率(td)real输入微分时间或速率,单位为分钟28偏差(mx)real输入/输出积分项前项,必须在0.0~1.0之间32过程变量前值(pvn-1)real输入/输出包含后一次执行pid指令时存储的过程变量值36~79 保留给自整定变量
表2.1.1. pid回路表
2.2 通过pid指令块实现pid/35通过指令块实现pid,需要自己编程实现采样,较复杂,容易出错,也不能用pid控制面板进行调节,不建议使用,如果没有特殊要求,尽量使用pid向导。
由于pid指令块只接受0.0 - 1.0之间的实数(实际上就是百分比)作为反馈、给定与控制输出的有效数值。因此,必须把外围实际的物理量与pid功能块需要的(或者输出的)数据之间进行转换。这就是所谓输入/输出的转换与标准化处理。
下面简单做一个采样时间为250ms的pid例程:
步,主程序内实现250ms的定时中断,如图2.2.1
图2.2.1. 定时中断
第二步,在定时中断int_0内调用pid指令块。
图2.2.2. 调用pid指令块
tbl:控制回路表的起始地址 (vb100表示 vb100~vb180地址用于该回路pid,具体地址含义以回路表为准)。loop: pid控制回路号(0~7)。第三步,根据pid回路表,设置参数,在数据块设置各参数的初始值
图2.2.3. 数据块设置参数
第四步,程序下载后根据反馈vd0与给定vd4观察输出vd8(直接通过状态表修改给定反馈即可,真正应用时需要将外围物理量做转换)。
常见问题pid指令块可以在主程序/子程序里调用吗?
可以,但是不推荐,主程序/子程序的循环时间每个周期都可能不同,不能保证精确的采样,建议用定时中断,例如smb34/smb35。
smb34定时大255ms,如果采样时间是1s怎样实现?
采样时间是1s,要求pid指令块每隔1s调用一次。可以先做一个250ms的定时中断,然后编程累加判断每4次中断执行一次pid指令即可。
pid指令块怎样实现手动调节?
可以简单地使用“调用/不调用”指令的方式控制自动/手动模式。不调用pid指令时,可以手动给输出地址0.0-1.0之间的实数。
pid指令块实现数字量输出?
1.通过pwm指令,将pid输出值转换为所需时间基准的整数,送到pwm的pulse,控制脉宽(该法简单易用,但是要求输出点只能是q0.0或q0.1)。
2.自己编程实现类似于pwm的输出。(虽然不限制q点,但编程较复杂,不建议使用,可以直接考虑用pid向导)。
3 向导实现pid在micro/win中的命令菜单中选择工具 >指令向导,然后在指令向导窗口中选择pid指令:
图3.1. 选择pid向导
在使用向导时必须先对项目进行编译,在随后弹出的对话框中选择“是” ,确认编译。如果已有的程序中存在错误,或者有没有编完的指令,编译不能通过。
如果你的项目中已经配置了一个pid回路,则向导会指出已经存在的pid回路,并让你选择是配置修改已有的回路,还是配置一个新的回路:
图3.2. 选择需要配置的回路
3.1. pid向导设置步骤步:定义需要配置的pid回路号
图3.1.1. 选择pid回路号
第二步:设定pid回路参数
图3.1.2. 设置pid参数
图3.1.2中:
定义回路设定值(sp,即给定)的范围:
在低限(low range)和高限(high range) 输入域中输入实数,缺省值为0.0和100.0,表示给定值的取值范围占过程反馈量程的百分比。这个范围是给定值的取值范围。它也可以用实际的工程单位数值表示。gain(增益): 即比例常数。integral time(积分时间):如果不想要积分作用,可以把积分时间设为无穷大:输入“inf”。derivative time(微分时间):如果不想要微分回路,可以把微分时间设为0 。sample time(采样时间):是pid控制回路对反馈采样和重新计算输出值的时间间隔。在向导完成后,若想要修改此数,则必须返回向导中修改,不可在程序中或状态表中修改。注意:关于具体的pid参数值,每一个项目都不一样,需要现场调试来定,没有所谓经验参数。
第三步:设定回路输入输出值
图3.1.3. 设定pid输入输出参数
在图3.1.3中,首先设定过程变量的范围:
指定输入类型unipolar: 单极性,即输入的信号为正,如0-10v或0-20ma等bipolar:双极性,输入信号在从负到正的范围内变化。如输入信号为±10v、±5v等时选用20% offset:使用20%偏移。如果输入为4-20ma则选单极性及此项,4ma是0-20ma信号的20%,所以选20% 偏移,即4ma对应6400,20ma对应32000反馈输入取值范围在a.设置为单极性时,缺省值为0 - 32000,对应输入量程范围0 - 10v或0 - 20ma等,输入信号为正在a.设置为双极性时,缺省的取值为-32000 - +32000,对应的输入范围根据量程不同可以是±10v、±5v等在a.使用20%偏移时,取值范围为6400 - 32000,不可改变。output type(输出类型)
可以选择模拟量输出或数字量输出。模拟量输出用来控制一些需要模拟量给定的设备,如比例阀、变频器等;数字量输出实际上是控制输出点的通、断状态按照一定的占空比变化,可以控制固态继电器(加热棒等) 选择模拟量则需设定回路输出变量值的范围,可以选择:unipolar:单极性输出,可为0-10v或0-20ma等bipolar:双极性输出,可为正负10v或正负5v等20% offset:如果选中20% 偏移,使输出为4 - 20ma 取值范围:d为unipolar时,缺省值为 0 到 32000d为bipolar时,取值-32000到32000d为20% offset时,取值6400 - 32000,不可改变如果选择了开关量输出,需要设定此占空比的周期。
第四步:设定回路报警选项
图3.1.4. 设定回路报警限幅值
向导提供了三个输出来反映过程值(pv)的低值报警、高值报警及过程值模拟量模块错误状态。当报警条件满足时,输出置位为1。这些功能在选中了相应的选择框之后起作用。
使能低值报警并设定过程值(pv)报警的低值,此值为过程值的百分数,缺省值为0.10,即报警的低值为过程值的10%。此值低可设为0.01,即满量程的1%使能高值报警并设定过程值(pv)报警的高值,此值为过程值的百分数,缺省值为0.90,即报警的高值为过程值的90%。此值高可设为1.00,即满量程的100%使能过程值(pv)模拟量模块错误报警并设定模块于cpu连接时所处的模块位置。“0”就是个扩展模块的位置第五步:指定pid运算数据存储区
图3.1.5. 分配运算数据存储区
pid指令(功能块)使用了一个120个字节的v区参数表来进行控制回路的运算工作;除此之外,pid向导生成的输入/输出量的标准化程序也需要运算数据存储区。需要为它们定义一个起始地址,要保证该地址起始的若干字节在程序的其它地方没有被重复使用。如果点击“建议地址”,则向导将自动为你设定当前程序中没有用过的v区地址。
自动分配的地址只是在执行pid向导时编译检测到空闲地址。向导将自动为该参数表分配符号名,用户不要再自己为这些参数分配符号名,否则将导致pid控制不执行。
第六步:定义向导所生成的pid初使化子程序和中断程序名及手/自动模式
图3.1.6. 指定子程序、中断服务程序名和选择手动控制
向导已经为初使化子程序和中断子程序定义了缺省名,你也可以修改成自己起的名字。
指定pid初使化子程序的名字。指定pid中断子程序的名字注意:
如果你的项目中已经存在一个pid配置,则中断程序名为只读,不可更改。因为一个项目中所有pid共用一个中断程序,它的名字不会被任何新的pid所更改。pid向导中断用的是smb34定时中断,在用户使用了pid向导后,注意在其它编程时不要再用此中断,也不要向smb34中写入新的数值,否则pid将停止工作。此处可以选择添加pid 手动控制模式。在pid手动控制模式下,回路输出由手动输出设定控制,此时需要写入手动控制输出参数一个0.0-1.0的实数,代表输出的0%-100%而不是直接去改变输出值。
第七步:生成pid子程序、中断程序及符号表等
一旦点击完成按钮,将在你的项目中生成上述pid子程序、中断程序及符号表等。
图3.1.7. 生成pid子程序、中断程序和符号表等
第八步:配置完pid向导,需要在程序中调用向导生成的pid子程序(如下图)
图3.1.8. pid子程序
图3.1.9. 调用pid子程序
在用户程序中调用pid子程序时,可在指令树的program block(程序块)中用鼠标双击由向导生成的pid子程序,在局部变量表中,可以看到有关形式参数的解释和取值范围。
必须用sm0.0来使能 pidx_init 子程序,sm0.0 后不能串联任何其他条件,而且也不能有越过它的跳转;如果在子程序中调用 pidx_init 子程序,则调用它的子程序也必须仅使用 sm0.0 调用,以保证它的正常运行此处输入过程值(反馈)的模拟量输入地址此处输入设定值变量地址(vdxx),或者直接输入设定值常数,根据向导中的设定0.0-100.0,此处应输入一个0.0-100.0的实数,例:若输入20,即为过程值的20%,假设过程值aiw0是量程为0-200度的温度值,则此处的设定值20代表40度(即200度的20%);如果在向导中设定给定范围为0.0 - 200.0,则此处的20相当于20度此处用i0.0控制pid的手/自动方式,当i0.0为1时,为自动,经过pid运算从aqw0输出;当i0.0为0时,pid将停止计算,aqw0输出为manualoutput(vd4)中的设定值,此时不要另外编程或直接给aqw0赋值。若在向导中没有选择pid手动功能,则此项不会出现定义pid手动状态下的输出,从aqw0输出一个满值范围内对应此值的输出量。此处可输入手动设定值的变量地址(vdxx),或直接输入数。数值范围为0.0-1.0之间的一个实数,代表输出范围的百分比。例:如输入0.5,则设定为输出的50%。若在向导中没有选择pid手动功能,则此项不会出现此处键入控制量的输出地址当高报警条件满足时,相应的输出置位为1,若在向导中没有使能高报警功能,则此项将不会出现当低报警条件满足时,相应的输出置位为1,若在向导中没有使能低报警功能,则此项将不会出现当模块出错时,相应的输出置位为1,若在向导中没有使能模块错误报警功能,则此项将不会出现调用pid子程序时,不用考虑中断程序。子程序会自动初始化相关的定时中断处理事项,然后中断程序会自动执行。
第九步:实际运行并调试pid参数
没有一个pid项目的参数不需要修改而能直接运行,因此需要在实际运行时调试pid参数。具体调节过程可以参考 pid调节
为了更好地理解 pid向导的编程,可参考下面的例程。
通过上述向导步骤实现pid,为求程序简单可读,未设置回路报警选项,仅简单常用配置,具体参见例程,关注程序注释以及符号表内容可帮助更快理解程序。
注意:此指令程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为 此联系西门子技术支持与服务部门。
3.2. pid向导生成的组件介绍pid向导完成后,自动生成的除pid子程序(上一节已经介绍)以外还有数据块、符号表以及中断程序等组件。
1.数据块
图3.2.1. pid向导生成数据块
完成pid wizard配置后,会为每个pid回路生成一个数据块pidx_data(x=0-7)。图中可以看出数据块的内容实际就是pid回路表以及报警的高/低限位。实际也说明pid向导是基于pid指令块编程经过调整后呈现给用户。
2.符号表
图3.2.2. pid向导生成符号表
完成pid wizard配置后,会为每个pid回路生成一个数据块pidx_sym(x=0-7)。图中可以看出符号表内容也是回路表相关参数。
3.中断程序 pid向导生成的中断程序pid_exe自动加密,相关功能已经附在向导生成的子程序内,这里不涉及。
查看data block(数据块),以及symbol table(符号表)相应的pid符号标签的内容,可以找到包括pid核心指令所用的控制回路表,包括比例系数、积分时间等等。将此表的地址复制到status chart(状态表)中,可以在监控模式下在线修改pid参数,而不必停机再次做配置。
参数调试合适后,用户可以在数据块中写入,也可以再做一次向导,或者编程向相应的数据区传送参数。
常见问题做完pid向导后,如何知道向导中设定值,过程值及pid等参数所用的地址?
做完pid向导后可在symbol table(符号表) 中,查看pid向导所生成的符号表(上例中为pid0_sym),可看到各参数所用的详细地址,及数值范围。
在data block(数据块) 中,查看pid指令回路表的相关参数。
怎样在上位机或触摸屏上修改pid参数?
图3.2.1/3.2.2中均能查到对应参数地址,在上位机获触摸屏中修改即可,注意数据类型。
数据块内设定值与过程变量以及输出的范围是多少?
数据块内的变量范围完全与回路表内变量范围一致,即都是0.0-1.0之间的浮点数,如果向导里这些变量是模拟量,或者实际工程量,向导会自动换算成0.0-1.0的标准化数值。通过这些变量也可以确认向导内设置的设定值与过程变量量程是否正确。
3.3. pid设定值与过程变量 量程设置下图是pid向导生成的子程序:
各参数在3.1章节中已经介绍,这里对以下几个参数着重解释:
pv_i: 过程反馈参数值的入口setpoint_r: 给定参数值的入口output: pid调节器的输出值在这里,给定、反馈的入口参数不是pid指令功能块所需要的0.0 - 1.0之间的实数,而可以是实际的反馈地址,或是其他变量。例如,pv_i可以是模拟量输入地址aiw0,也可以是存储器地址vw100等;setpoint则往往来自v变量存储区,这样可以从人机操作界面(hmi)设备输入给定值。
注意:
对于pid控制系统来说,必须保证给定与过程反馈的一致性:
给定与反馈(过程变量)的物理意义一致
这取决于被控制的对象,如果是压力,则给定也必须对应于压力值;如果是温度,则给定也必须对应于温度。
给定与反馈(过程变量)的的数值范围对应
如果给定直接是摄氏温度值,则反馈必须是对应的摄氏温度值;如果反馈直接使用模拟量输入的对应数值,则给定也必须向反馈的数值范围换算。 如果给定与反馈的换算有特定的比例关系也可以。如给定也可以表示为以反馈的数值范围的百分比数值。
给定与反馈的数值具体是什么数值,其取值范围究竟如何,完全取决于我们在使用“pid向导”编程时指定的给定与反馈的数值范围。其中,反馈量的数值范围不能随便自己定义,而要取决于具体应用的模拟量输入模块。
图3.3.2. 在图中a.处设置给定范围
图3.3.3. 在图中b.处设置反馈范围
实例
1. 假定一个pid控制系统的控制对象是压力,反馈元件的测量范围为0 - 16mpa。反馈器件的信号经过变换,以0 - 20ma(或4 - 20ma)电流信号的形式输入到em231模拟量输入模块中。据此,我们可以按下表设置给定、反馈(过程变量)的的范围。
反馈(单极性)给定实际物理量模拟量输入数值百分比形式(占0 - 16mpa的百分比)物理工程单位形式高限16 mpa32000100.0n×16.0低限0 mpa0 (0 - 20ma)0.00.06400 (4 - 20ma)
表3.3.1.反馈/给定设置
n 为比例系数,为了精度高些可以设置n=10等等
2. 一个温度控制的pid系统,温度值直接由热电偶测量,输入到em231 tc(热电偶)模块转换为温度值。热电偶为j型,其测量范围为 -150.0°c - 1200.0 °c。则可按如下设置给定的范围。
反馈(双极性)给定实际物理量模拟量输入数值百分比形式(占-150°c - 1200.0°c的百分比)物理工程单位形式高限1200.0 °c12000100.01200低限-150.0 °c-15000.0-150
表3.3.2.反馈/给定设置
在表3.3.2的例子中,给定和反馈可以按照如下方法设置
图3.3.4. 给定范围设置
图3.3.5. 反馈范围设置
3.4. pid调节控制面板使用step 7-micro/win v4.0中提供了一个pid调节控制面板,具有图形化的给定、反馈、调节器输出波形显示,可以用于手动调试pid参数。另外从面板中还可以启动、停止自整定功能,对于没有“自整定pid”功能的老版cpu,也能实现pid手动调节。
要使用pid调节控制面板,pid编程必须使用pid向导完成。
图3.4.1. pid调节控制面板
在图3.4.1中:
过程值指示
显示过程变量的值及其棒图当前的输出值指示
显示当前使用的设定值、采样时间、pid 参数值及显示当前的输出值和棒图可显示过程值、设定值及输出值的pid趋势图图3.4.2. 图形显示区
图中:
过程变量和设定值的取值范围及刻度pid输出的取值范围及刻度实际pc时间以不同颜色表示的设定值、过程变量及输出的趋势图调节参数。这里你可以:
选择pid参数的显示:当前参数(current)、推荐参数(suggested)、手动输入(manual)
在manual模式下,可改变pid参数,并按update plc按钮来更新plc中的参数
启动pid自整定功能
选择advanced(高级)按钮进入高级参数设定 。当前的pid回路号这里你可以选择需要监视或自整定的pid回路时间选项设定这里你可以设定趋势图的时基,时基以分为单位图例颜色这里你可以看到趋势图中不同的颜色代表不同的值的趋势帮助按钮pid信息显示窗口关闭pid调节面板常见问题使用pid调节面板手动调整增益、积分时间、微分时间参数,修改的数值能否进入到plc?
可以,但是需要在参数设置完以后手动点击调节面板的update plc(更新plc)按钮,来更新plc中的参数。
pid已经调整合适,如何正式确定参数?
可以在data block(数据块)中直接写入参数。
做完pid向导后,能否查看pid生成的子程序,中断程序?
pid向导生成的子程序,中断程序用户是无法看到的,也不能对其进行修改。没有密码能够打开这些子程序,一般的应用也没有必要打开查看。
pid向导生成的程序为何不执行或没有输出?
必须保证用sm0.0无条件调用pid0_init程序在程序的其它部分不要再使用smb34定时中断,也不要对smb34赋值确认当前工作状态:手动还是自动如何根据工艺要求有选择地投入pid功能?
可使用“手动/自动”切换的功能。pid向导生成的pid功能块只能使用sm0.0的条件调用。
4.pid调节pid控制的效果就是看反馈(也就是控制对象)是否跟随设定值(给定),是否响应快速、稳定,是否能够抑制闭环中的各种扰动而回复稳定。要衡量pid参数是否合适,必须能够连续观察反馈对于给定变化的响应曲线;而实际上pid的参数也是通过观察反馈波形而调试的。因此,没有能够观察反馈的连续变化波形曲线的有效手段,就谈不上调试pid参数。观察反馈量的连续波形,可以使用带慢扫描记忆功能的示波器(如数字示波器),波形记录仪,或者在pc机上做的趋势曲线监控画面等。
4.1. pid调节手/自动无扰动切换有些工程项目中可能需要根据工艺要求在不同的时刻投入、或者退出 pid 自动控制;退出 pid 自动控制时,控制器的输出部分可以由操作人员直接手动控制。这就是所谓的 pid 手动/自动切换。
pid 控制处于自动方式时,pid 控制器(s7-200 中的 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_init 子程序)。pid 向导可以生成带自动/手动切换功能的子程序,这个子程序使用一个数字量点为“1”、“0”的状态来控制是否投入 pid 自动控制。
到目前为止(step 7-micro/win v4.0 sp5),使用 pid 向导生成的子程序时,由于用户程序不能直接使用 pid 指令,它的无扰切换能力因为隔了外壳子程序,所以受到了局限。如果对无扰切换要求比较严格,需要另外编一些程序加以处理。
考察如下 pid 控制子程序。
图 4.1.1. pid 向导生成的指令
图中:
过程反馈量设定值,实数自动/手动控制,“1”=自动,“0”=手动手动控制输出值,0.0 - 1.0 之间的一个实数pid 控制输出值要实现无扰动切换,必须:
在从自动向手动切换时,使手动输出值(vd2004)等于当前的实际控制输出值;在从手动向自动切换使,使设定值相当于当前的过程反馈值。为此,可编写类似下图所示的程序,放在 pid 控制子程序之前:
4.1.2. 无扰切换处理程序
图中:
自动/手动切换控制点从自动向手动切换时,使手动输出值等于实际当前值从手动向自动切换时,把当前反馈量换算为相应的给定值上述程序中的 scale_i_to_r 就是量程变换指令库中的子程序。这是为了解决过程反馈与设定值之间的换算问题。用户也可以自己编程换算,或者根据反馈与给定的取值范围决定是否需要换算。
此段程序适用于 step 7-micro/win v4.0 sp5 及以前版本,仅供参考,如果在实际项目中使用,上述程序未必一定适用。用户需要根据实际工艺决定自己的编程思路。
4.2. pid调节步骤简介建议pid参数调节步骤:
(1)前提条件:反馈信号是否稳定,执行机构是否正常以及控制器的正反作用。(确保pid在自动模式下)
(2)积分时间设置为无穷大inf(或9999.9),此时积分作用近似为0;将微分时间设置为0.0,此时微分作用为0 。然后开始调节比例作用,逐步增大比例增益
(3)当过程变量达到给定值且在给定值上下波动,将调好的比例系数调整到50%~80%后,由大到小减小积分时间,直到过程值与设定值相等或无限接近
pid调节有很多种方法,以上仅是建议步骤,也并未考虑微分作用,客户依据实际情况灵活调节,同时可以参考反馈与给定的曲线图
用户经常会遇到这样的问题:尝试了很多组pid参数,都无法满足控制器的要求, 此时需要考虑pid的采样时间是否适合当前系统。采样时间就是对反馈进行采样的间隔。短于采样时间间隔的信号变化是不能测量到的。采样时间过短,两次实测值的变化量太小,也不合适,而且增加plc的运算负担;采样间隔过长,将会引起有用信号的丢失,使系统品质变差,不能满足扰动变化比较快、或者速度响应要求高的场合。除此以外,也有可能是系统自身的问题,无法调节到稳定,例如, 不规律的干扰,或者反馈信号不稳定。
4.3. 手动调节pid至稳定问题与解决方法:1. pid输出总是输出很大的值,并在这一区间内调节变化。
产生原因:增益(gain)值太高
pid扫描时间(sample time)太长(对于快速响应pid的回路)
解决方法:降低增益(gain)值并且/或选择短一些的扫描时间
2. 过程变量超过设定值很多(超调很大)
产生原因:积分时间(integral time)可能太高。
解决方法:降低积分时间 3. 得到一个非常不稳定的pid。
如果用了微分,可能是微分参数有问题没有微分,可能是增益(gain)值太高解决方法:
调整微分参数到0-1的范围内根据回路调节特性将增益值降低,低可从0.x 开始逐渐增大往上调,直到获得稳定的pid。如何获取一组合适的参数,实现快速并稳定的pid控制?
pid调节过程中,用户通常需要做多次的参数调节才能获得优的控制效果。从下面反馈(过程变量)与给定之间的曲线图中,可以看到黄色曲线较理想。用户可以将调节的pid反馈与给定曲线与下图中对比,并修改相关参数(但是因为现场情况不一样,用户还需具体问题具体对待,下图中的建议仅供参考:
图 4.3.4 反馈与给定曲线
1.超调过大,减小比例,增大积分时间
2.迅速变化,存在小超调
3.实际值缓慢接近设定值,并且无超调的达到设定值
4.增益系数太小和/或微分时间太长
5.益系数太小和/或积分时间太长
常见问题没有采用积分控制时,为何反馈达不到给定?
这是必然的。因为积分控制的作用在于消除纯比例调节系统固有的“静差”。没有积分控制的比例控制系统中,没有偏差就没有输出量,没有输出就不能维持反馈值与给定值相等。所以永远不能做到没有偏差。
对于某个具体的pid控制项目,是否可能事先得知比较合适的参数?有没有相关的经验数据?
虽然有理论上计算pid参数的方法,但由于闭环调节的影响因素很多而不能全部在数学上精确地描述,计算出的数值往往没有什么实际意义。因此,除了实际调试获得参数外,没有什么可用的经验参数值存在。甚至对于两套看似一样的系统,都可能通过实际调试得到完全不同的参数值。
pid控制不稳定怎么办?如何调试pid?
闭环系统的调试,首先应当做开环测试。所谓开环,就是在pid调节器不投入工作的时候,观察:
反馈通道的信号是否稳定输出通道是否动作正常可以试着给出一些比较保守的pid参数,比如放大倍数(增益)不要太大,可以小于1,积分时间不要太短,以免引起振荡。在这个基础上,可以直接投入运行观察反馈的波形变化。给出一个阶跃给定,观察系统的响应是好的方法。
如果反馈达到给定值之后,历经多次振荡才能稳定或者根本不稳定,应该考虑是否增益过大、积分时间过短;如果反馈迟迟不能跟随给定,上升速度很慢,应该考虑是否增益过小、积分时间过长……
总之,pid参数的调试是一个综合的、互相影响的过程,实际调试过程中的多次尝试是非常重要的步骤,也是必须的。
5.pid自整定s7-200 中使用的自整定算法是基于 k.j.?str?m 和 t. h?gglund 在 1984 年提出的延时反馈算法。经过这二十年,继电反馈算法已被应用于工业控制的各个领域。可以使用操作员面板中的用户程序或者 pid 整定控制面板来启动自整定功能。在同一时间,不仅仅只有一个 pid 回路可以进行自整定,如果需要的话,所有 8 个 pid 回路可以同时进行自整定。pid自整定算法向您推荐增益值、积分时间值和微分时间值。您也可以为您的调节回路选择快速响应、中速响应、慢速响应或者极慢速响应等调节类型。
5.1. pid自整定先决条件启动自整定先决条件:
要进行自整定的回路必须处于自动模式
在开始pid自整定调整前,整个pid控制回路必须工作在相对稳定的状态(稳定的pid是指过程变量接近设定值,输出不会不规则的变化,且回路的输出值在控制范围中心附近变化。)
理想状态下,自整定启动时,回路输出值应该在控制范围中心附近。 自整定过程在回路的输出中加入一些小的阶跃变化,使得控制过程产生振荡。 如果回路输出接近其控制范围的任一限值,自整定过程引入的阶跃变化可能导致输出值超出小或大范围限值。 如果发生这种情况,可能会生成自整定错误条件,当然也会使推荐值并非优化。
为什么启动自整定之前,需要pid控制回路工作在相对稳定状态?
启动自整定后,回路计算自滞后序列时,不能执行正常的 pid 计算,此时回路输出时一个定值,不会根据偏差变化。 因此,在启动自整定序列之前,控制过程应处于稳定状态。 这样可以得到更好的滞后值结果,同时也可以保证自滞后序列期间控制过程不会失控。
5.2. pid自整定参数介绍
s7-200 中的 pid自整定参数是回路表40-80字节,见下图:
pid扩展回路表
a. at控制(acntl): 启动/中止自整定
b.at状态(astat):自整定的输出状态字节,pid控制面板自整定时的相关状态也是根据由该字节判断。
图 5.2.3. pid自整定at状态字节
c.at结果(ares):pid自整定结果,需要注意,启动pid自整定之前需要确保该字节0位为0,尤其是自己编程启动自整定,可能需要手动设置为0。