大家好,我是微控小智,今天又跟大家见面了。学习需要坚持,做技术亦是如此,厚积才能博发。小智写的程序都是进行反复测试过的,可以放心跟着操作,有疑问的地方可以留言。
在使用S7-200PLC的PID功能时,一般推荐使用编程软件自带PID向导功能,实际上S7-200PLC提供了PID指令功能,用PID指令编程时,主要是需要设置PID回路参数表中的参数。PID指令基于PID算法,属于过程控制,PID算法也称为比例积分微分控制算法,在闭环控制中得到广泛应用。那么今天我们就来熟悉一下PID指令。PID指令也是非常有难度的,需熟悉模拟量相关知识,还需对PID的相关概念有所了解。
S7-200PLC提供了8个回路的PID功能,用以实现需要按照PID控制规律进行自动调节的控制任务,比如温度、压力和流量控制等。PID功能一般需要模拟量输入,用以反映被控制的物理量的实际数值,称为反馈值也可以称为过程变量;而用户设定的调节目标值,即为给定值。PID运算的任务就是根据反馈值与给定值的相对差值,按照PID运算规律计算出输出结果,输出到执行机构进行调节,以达到自动维持被控制的量跟随给定值变化的目的。
PID指令
PID指令需要为其指定一个以V变量存储区地址开始的PID回路表(TBL),以及PID回路号(LOOP)。PID指令(又称为PID回路指令)使能输入有效时,该指令利用回路表中的输入信息和组态信息,进行PID运算。指令中有2个数据输入端:TBL和LOOP。其中TBL是回路表的起始地址,是由VB指定的字节型数据;LOOP是回路号,可以是0~7的常数。在程序中最多可以用8条PID指令。如果两个或两个以上的PID指令用了同一个回路号,那么即使这些指令的回路表不同,这些PID运算之间也会相互干涉,产生不可预料的结果。
PID指令如下图所示:
PID回路表
回路表包含9个参数,用来控制和监视PID运算。这些参数分别是过程变量当前值(PVn),过程变量前值(PVn-1),给定值(SPn),输出值(Mn),增益(Kc),采样时间(Ts),积分时间(TI),微分时间(TD)和积分项前值(MX)。
为了让PID运算以预想的采样频率工作,PID指令必须用在定时发生的中断程序中,或者用在主程序中被定时器所控制以一定频率执行。采样时间必须通过回路表输入到PID运算中。
PID回路表如下图所示:
回路控制类型的选择
在许多控制系统中,只需要一种或两种回路控制类型。例如只需要比例回路或者比例积分回路。通过设置常量参数,可以选择需要的回路控制类型。
如果不想要积分动作,可以把积分时间置为无穷大;即使没有积分作用,积分项还是不为零,此时积分项为初值。
如果不想要微分回路,可以把微分时间置为零。
如果不想要比例回路,但需要积分或积分微分回路,可以把增益设为0.0,系统会在计算积分项和微分项时,把增益当作1.0看待。
一般情况下,比例、积分回路控制应用较多,微分作用不宜过强,否则易引起系统的不稳定。
回路输入的转换和标准化
由于PID控制是一些实际的物理量如温度,压力,流量等,这些量都是由工程量也就是浮点数来表示。每个PID回路有两个输入量,即给定值(SP)和过程变量(PV)。给定值和过程变量一般都是实际工程量,其数值大小,范围和测量单位可能都不一样,而PID指令块只能接受0.0-1.0之间的实数(实际就是百分比)作为反馈、给定与控制输出值的有效数值,执行PID指令前必须把外围实际的物理量转换成标准的0.0-1.0之间的浮点型实数。下面的算式可以用于标准化给定值或过程变量值:
RNorm=(RRaw/SPan)+Offset
式中RNorm-标准化的实数值;
RRaw -没有标准化的实数值或原值;
Offset -单极性为0.0,双极性为0.5;
SPan -值域大小,可能的最大值减去可能的最小值,单极性为32000(典型值),双极性为64000(典型值)。
转换示例如下图所示:
回路输出值转换成工程量标定的整数值
回路输出值是用来控制外部设备的。回路输出值是0.0~1.0之间的一个标准化了的实数值,在回路输出值传送给D/A模拟量输出之前,回路输出必须转换成一个16位的标定整数值。这一过程,是给定值或过程变量的标准化转换的逆过程。
第一步是使用下面给出的公式,将回路输出转换成一个标定的实数值
RScal=(Mn -Offset)SPan
式中RScal-回路输出的刻度实数值;
Mn-回路输出的标准化实数值;
Offset -单极性为0.0,双极性为0.5;
SPan-值域大小,可能的最大值减去可能的最小值,单极性为32000(典型值),双极性为64000(典型值)。
转换示例如下图所示:
正作用或反作用回路
如果增益为正,那么该回路为正作用回路;如果增益为负,那么是反作用回路(对于增益值为0.0的I或ID控制,如果指定积分时间、微分时间为正,就是正作用回路;如果指定为负值,就是反作用回路)。
控制方式
S7-200的PID回路没有设置控制方式,只有当PID指令EN端通时,才执行PID运算。在这种意义上说,PID指令执行称之为“自动”运行方式。当PID运算不被执行时,称为“手动”方式。
同计数器指令相似,PID指令有一个使能位。当该使能位检测到一个信号的正跳变(从0到1),PID指令执行一系列的动作,使PID指令从手动方式无扰动地切换到自动方式。为了达到无扰动切换,在转变到自动控制前,必须把手动方式下的输出值填人回路表中的Mn栏。PID指令对回路表中的值进行下列动作,以保证当使能位正跳变出现时,从手动方式无扰动切换到自动方式:
(1)置给定值(SPn)=过程变量(PVn)。
(2)置过程变量前值(PVn-1)=过程变量现值(PVn)。
(3)置积分项前值(MX)=输出值(Mn)。
PID使能位的默认值是1,在CPU启动或从STOP方式转到RUN方式时建立。CPU进入RUN方式后首次使PID块有效,没有检测到使能位的正跳变,那么就没有无扰动切换的动作。
出错条件
如果指令指定的回路表起始地址或PID回路号操作数超出范围,那么在编译期间,CPU将产生编译错误(范围错误),从而编译失败。PID指令不检查回路表中的一些输入值,必须保证过程变量和设定值(以及作为输入的偏置和前一次过程变量)在0.0~1.0之间。如果PID计算的算术运算发生错误,那么特殊存储器标志位SM1.1(溢出或非法值)会被置1,并且中止PID指令的执行(要想消除这种错误,单靠改变回路表中的输出值是不够的,正确的方法是在下一次执行PID运算之前,改变引起算术运算错误的输入值,而不是更新输出值)。
用PID指令编写恒温加热控制程序如下图所示:
实践出真知,没有实践,理论就是纸上谈兵;学习中需要多加验证。如果大家觉得小智的文章写得不错,很适合大家的口味,可以分享更多的朋友。
复杂的事情简单做,你就是专家;
简单的事情重复做,你就是行家;
重复的事情用心做,你就是赢家。
关注智微自控
领取专属 10元无门槛券
私享最新 技术干货