940 likes | 1.14k Views
可编程序控制器. 主讲:张波. 4.6 S7-200PID 指令 4.6.1 PID 算法. 理解 PID 算法 PID 控制器调节输出,保证偏差( e )为零,使系统达到稳定状态,偏差( e )是给定值( SP )和过程变量( PV )的差。 PID 控制的原理基于下面的算式;输出 M ( t )是比例项、积分项和微分项的函数。 输出 = 比例项 + 积分项 + 微分项 其中: M ( t )是 PID 回路的输出,是时间的函数 KC -- PID 回路的增益 e -- PID 回路的偏差(给定值与过程变量之差)
E N D
可编程序控制器 主讲:张波
4.6 S7-200PID指令4.6.1 PID算法 • 理解PID算法PID控制器调节输出,保证偏差(e)为零,使系统达到稳定状态,偏差(e)是给定值(SP)和过程变量(PV)的差。PID控制的原理基于下面的算式;输出M(t)是比例项、积分项和微分项的函数。 输出= 比例项+ 积分项+ 微分项 • 其中:M(t)是 PID回路的输出,是时间的函数 KC --PID回路的增益 e --PID回路的偏差(给定值与过程变量之差) Minitial --PID回路输出的初始值
为了能让数字计算机处理这个控制算式,连续算式必须离散化为周期采样偏差算式,才能用来计算输出值。数字计算机处理的算式如下:为了能让数字计算机处理这个控制算式,连续算式必须离散化为周期采样偏差算式,才能用来计算输出值。数字计算机处理的算式如下: 其中: • Mn--在第n个采样时刻,PID回路输出的计算值 • KC --PID回路比例增益 • en --第n个采样时刻的回路偏差值 • en - 1 --上一个采样时刻杜回路偏差 • ei --第i个采样时刻的回路偏差值 • KI --积分项的比例常数 • Minitial --回路输出的初始值 • KD --微分项的比例常数 • 从这个公式可以看出,积分项是从第1个采样周期到当前采样周期所有误差项的函数,微分项是当前采样和前一次采样的函数,比例项仅是当前采样的函数。在数字计算机中,不保存所有的误差项,实际上也不必要。只需将上一次的误差值和上一次积分项的数值保存即可。
由于计算机从第一次采样开始,每有一个偏差采样值必须计算一次输出值,只需要保存偏差前值和积分项前值。作为数字计算机解决的重复性的结果,可以得到在任何采样时刻必须计算的方程的一个简化算式。简化算式是:由于计算机从第一次采样开始,每有一个偏差采样值必须计算一次输出值,只需要保存偏差前值和积分项前值。作为数字计算机解决的重复性的结果,可以得到在任何采样时刻必须计算的方程的一个简化算式。简化算式是: Mn = Kc * en + KI * en + MX + KD * (en-en - 1) 其中: • Mn--在第n个采样时刻,PID回路输出的计算值 • KC --PID回路比例增益 • en --第n个采样时刻的回路偏差值 • en - 1 --上一个采样时刻杜回路偏差 • KI --积分项的比例常数 • MX--积分项前值 • KD --微分项的比例常数
CPU实际使用以上简化算式的改进形式计算PID输出。这个改进型算式是:CPU实际使用以上简化算式的改进形式计算PID输出。这个改进型算式是: Mn = MPn + MIn + MDn 输出= 比例项+ 积分项+ 微分项 其中: Mn --第n采样时刻的计算值 MPn --第n采样时刻的比例项值 MIn --第n采样时刻的积分项值 MDn --第n采样时刻的微分项值
(1)理解PID方程的比例项 • 比例项MPn是增益(KC)和偏差(e)的乘积。其中KC决定输出对偏差的灵敏度,偏差(e)是给定值(SP)与过程变量值(PV)之差。 • S7--200解决的求比例项的算式是: MPn = KC * (SPn – PVn) • MPn--第n个采样时刻比例项的值 • KC --回路增益 • SPn-- 第n采样时刻的给定值 • PVn --第n采样时刻的过程变量值
(2)理解PID方程的积分项 • 积分项(MI)是正比于每次采样的误差的积累值。 • S7--200解决的求积分项的算式是: MIn = KC * TS / TI * (SPn -- PVn)+ MX • 其中: • MIn --第n个采样时刻的积分项值 • KC --回路增益 • TS --采样周期 • TI --积分时间常数 • SPn --第n采样时刻的给定值 • PVn--第n采样时刻的过程变量值 • MX --第n - 1采样时刻的积分项(积分项前值) (也称积分和或偏置)
(3)理解PID方程的微分项 • 微分项(MD)正比于误差的变化。S7--200使用下列算式来求解微分项: MDn = KC * TD / TS * ((SPn – PVn)-(SPn-1 - PVn-1)) • 为了避免给定值变化的微分作用而引起的跳变,假定给定值不变(SPn = SPn-1)。这样,可以用过程变量的变化替代偏差的变化,计算算式可改进为: MDn = KC * TD / TS * (PVn-1 - PVn ) 其中: • MDn--第n个采样时刻的微分项值 • KC --回路增益 • TS-- 采样周期 • TD --微分时间常数 • SPn --第n采样时刻的给定值 • SPn-1 --第n-1采样时刻的给定值 • PVn-- 第n采样时刻的过程变量值 • PVn-1 --第n-1采样时刻的过程变量值 • 为了下一次计算微分项值,必须保存过程变量,而不是偏差。在第一采样时刻,初始化为PVn-1 =PVn
4.6.5 PID指令 • PID指令以回路表中的输入和组态信息进行PID运算。要执行该指令,必须使逻辑栈顶值置为1。 • 指令中的TBL是PID控制回路的起始地址。 • LOOP为控制回路号(为常数,在0-7之间) • 使ENO=0的错误条件: SM1.1(溢出)H 0006(间接寻址) • 受影响特殊存储器位H SM1.1(溢出)
在程序中最多可以用8条PID指令。如果两个或两个以上的PID指令用了同一个回路号,那么即使这些指令的回路表不同,这些PID运算之间也会相互干涉,产生不可预料的结果。在程序中最多可以用8条PID指令。如果两个或两个以上的PID指令用了同一个回路号,那么即使这些指令的回路表不同,这些PID运算之间也会相互干涉,产生不可预料的结果。 • 回路表包含9个参数,用来控制和监视PID运算。这些参数分别是过程变量当前值(PVn),过程变量前值(PVn--1),给定值(SPn),输出值(Mn),增益(Kc),采样时间(Ts),积分时间(TI),微分时间(TD)和积分项前值(MX)。 • 为了让PID运算以预想的采样频率工作,PID指令必须用在定时发生的中断程序中,或者用在主程序中被定时器所控制以一定频率执行。采样时间必须通过回路表输入到PID运算中。
回路控制类型的选择 • 通过设置常量参数,可以选择需要的回路控制类型。 • 如果不想要积分动作(PID计算中没有“I”),可以把积分时间(复位)置为无穷大“INF”。即使没有积分作用,积分项还是不为零,因为有初值MX。 • 如果不想要微分回路,可以把微分时间置为零。 • 如果不想要比例回路,但需要积分或积分微分回路,可把增益设为0.0,系统会在计算积分项和微分项时,把增益当作1.0看待。 正作用回路和反作用回路 • 如果增益为正,那么该回路为正作用回路。如果增益为负,那么是反作用回路。 • 对于增益值为0.0的I或ID控制,如果指定积分时间、微分时间为正,就是正作用回路;如果指定为负值,就是反作用回路
控制方式 • S7--200的PID回路没有设置控制方式,只要PID块有效,就可以执行PID运算。即PID运算存在一种“自动“运行方式。当PID运算不被执行时,我们称之为“手动”模式。 • PID指令使能位检测到信号的正跳变(从0到1),PID指令执行一系列动作,使PID指令从手动方式无扰动地切换到自动方式。 • 为了达到无扰动切换,在转变到自动控制前,必须用手动方式把当前输出值填入回路表中的Mn栏。PID指令对回路表中的值进行下列动作,以保证当使能位正跳变出现时,从手动方式无扰动切换到自动方式: 置给定值(SPn)=过程变量(PVn) 置过程变量前值(PVn-1)=过程变量现值(PVn) 置积分项前值(MX)=输出值(Mn) PID使能位的默认值是1,在CPU启动或从STOP方式转到RUN方式时建立。CPU进入RUN方式后首次使PID块有效,没有检测到使能位的正跳变,那么就没有无扰动切换的动作。
回路输入的转换及归一化处理 • 每个PID回路具有两个输入量,给定值(SP)和过程变量(PV)。给定值通常是一个固定的值。过程变量是与PID回路输出有关,可以衡量输出对控制系统作用的大小。 • 给定值和过程变量都可能是工程实际的值,它们的大小、范围和工程单位都可能不一样。在PID指令对这些工程实际的值进行运算之前,必须把它们转换成标准的浮点型表达形式。
转换的第一步是把16位整数值转成浮点型实数值。如:转换的第一步是把16位整数值转成浮点型实数值。如: ITD AIW0,AC0 //将输入值转换为双整数。 DTR AC0, AC0 //将32位双整数转换为实数。 • 下一步是将工程实际的值的实数值表达形式转换成0.0~1.0之间的标准化值。下面的算式可以用于标准化给定值或过程变量值: Rnorm = (Rraw / Span)+ Offset 其中: • Rnorm --工程实际值的归一化值 • Rraw --工程实际值的实数值或原值,未归一化处理 • Span --最大允许值减去最小允许值,通常取32000(对于单极性)和64000(对于双极性) • Offset --单极性为0.0,双极性为0.5
下面的指令把双极性实数标准化为0.0~1.0之间的实数。通常用在第一步转换之后:下面的指令把双极性实数标准化为0.0~1.0之间的实数。通常用在第一步转换之后: • /R 64000.0, AC0 //累加器中的标准化值 • +R 0.5, AC0 //加上偏置,使其在0.0~1.0之间 • MOVR AC0, VD100 //标准化的值存入回路表
回路输出值转换成整数值 • 回路输出值一般是控制变量,比如,在汽车速度控制中,可以是油阀开度的设置。回路输出是0.0和1.0之间的一个标准化了的实数值。 • 在回路输出可以用于驱动模拟输出之前,回路输出必须转换成一个16位的标定整数值。这一过程,是给定值或过程变量的标准化转换的逆过程。 • 第一步是使用下面给出的公式,将回路输出转换成一个标定的实数值:
Rscal = (Mn - Offset)* Span 其中: RScal --回路输出的刻度实数值 Mn-- 回路输出的标准化实数值 Offset-- 单极性为0.0,双极性为0.5 Span --值域大小,可能的最大值减去可能的最小值 单极性为32,000(典型值)双极性为64,000(典型值) • 这一过程可以用下面的指令序列完成: MOVR VD108, AC0 //把回路输出值移入累加器 -R 0.5, AC0 //仅双极性有此句 *R 64000.0, AC0 //在累加器中得到刻度值 • 下一步是把回路输出的刻度转换成16位整数: ROUND AC0,AC0 //把实数转换为32位整数 DTI AC0, LW0 //把32位整数转换为16位整数 MOVW LW0,AQW0 //把16位整数写入模拟输出寄存器
出错条件 • 如果指令指定的回路表起始地址或PID回路号操作数超出范围,那么在编译期间,CPU将产生编译错误(范围错误),从而编译失败。 • PID指令不检查回路表中的值是否在范围之内,所以必须小心操作以保证过程变量和设定值不超界。 • PID指令不检查回路表中的值是否超界,您必须保证过程变量和设定值(以及偏置和前一次过程变量)必须在0.0到1.0之间。 • 如果PID计算的算术运算发生错误,那么特殊存储器标志位SM1.1(溢出或非法值)会被置1,并且中止PID指令的执行。(要想消除这种错误,单靠改变回路表中的输出值是不够的,正确的方法是在下一次执行PID运算之前,改变引起算术运算错误的输入值,而不是更新输出值)
PID指令编程举例 在本例中,有一水箱需要维持一定的水位,该水箱里的水以变化的速度流出。这就需要有一个水泵以不同的速度给水箱供水,以维持水位不变,这样才能使水箱不断水。本系统的给定值是水箱满水位的75%时的水位,过程变量由漂浮在水面的水位测量仪给出。输出值是水泵的速度,可以从允许最大值的0%变到100%。给定值可以预先设定后直接输入到回路表中,过程变量值是来自水位表的单极性模拟量,回路输出值也是一个单极性模拟量,用来控制进水泵的速度。这两个模拟量的范围是0.0到1.0,分辨率为1/32000(标准化)。 在本系统中,只使用比例和积分控制,其回路增益和时间常数可以通过工程计算初步确定。但还需要进一步调整以达到最优控制效果。初步确定的增益和时间常数为:Kc是0.25,Ts是0.1秒,Tl是30分钟
系统启动时,关闭出水口,用手动控制进水泵的速度,使水位达到满水位的75%,然后打开出水口,同时水泵控制从手动方式切换到自动方式。这种切换由一个输入的数字量控制,描述如下:I0.0位控制手动到自动的切换,0代表手动,1代表自动。当工作在手动控制方式下,可以把水泵速度(0.0~1.0之间的实数)写道VD108(VD108是回路表中保存输出的寄存器)系统启动时,关闭出水口,用手动控制进水泵的速度,使水位达到满水位的75%,然后打开出水口,同时水泵控制从手动方式切换到自动方式。这种切换由一个输入的数字量控制,描述如下:I0.0位控制手动到自动的切换,0代表手动,1代表自动。当工作在手动控制方式下,可以把水泵速度(0.0~1.0之间的实数)写道VD108(VD108是回路表中保存输出的寄存器)
4.7 S7-200其他操作指令 4.7.1 高速计数器操作指令 4.7.2 表功能指令 4.7.3 通信指令 4.7.4 中断指令
4.7.1 高速计数器操作指令 • 高速计数器用于对PLC扫描速率来不及处理的高速事件进行计数。 • S7-200PLC根据CPU不同型号有4-6个高速计数器。 • 高速计数器的最高频率也随CPU型号不同而异。
1、高速计数指令 • 高速计数指令包括定义高速计数器HDEF指令和高速计数器HSC指令。 • HDEF,定义高速计数器指令。使能输入有效时,为指定的高速计数器分配一种工作模式,即用来建立高速计数器与工作模式之间的联系。梯形图指令盒中有两个数据输入端:HSC,高速计数器编号,为0~5的常数,字节型;MODE,工作模式,为0~11的常数,字节型。 • HSC指令是根据高速计数器特殊存储器位的状态,并按照HDEF指令指定的工作模式设置高速计数器并开展其工作。
定义高速计数器指令(HDEF)为指定的高速计数器(HSCx)选择操作模式。定义高速计数器指令(HDEF)为指定的高速计数器(HSCx)选择操作模式。 • 高速计数器指令(HSC)在HSC特殊存储器位状态的基础上,配置和控制高速计数器。参数N指定高速计数器的标号。 • 对于每一个高速计数器只能用一条定义高速计数器指令。 • 每一个计数器都有时钟、方向控制、复位、启动的特定输入。对于双相计数器,两个时钟都可以运行在最高频率。在正交模式下,您可以选择一倍速(1x)或者四倍速(4x)计数速率。
在使用高速计数器之前,应该用HDEF(高速计数器定义)指令为计数器选择一种计数模式。使用初次扫描存储器位SM0.1(该位仅在第一次扫描周期接通,之后断开)来调用一个包含HDEF指令的子程序在使用高速计数器之前,应该用HDEF(高速计数器定义)指令为计数器选择一种计数模式。使用初次扫描存储器位SM0.1(该位仅在第一次扫描周期接通,之后断开)来调用一个包含HDEF指令的子程序
2、工作模式 • 4种工作模式 • 内部方向控制的单脉冲增/减计数模式 • 外部方向控制的单脉冲增/减计数模式 • 增/减计数时钟输入的双脉冲计数模式 • A/B脉冲正交计数模式 • 不论高速计数器以何种模式工作,他们的控制信号功能是相同的 • 当复位输入I1.0有效时,高速计数器的当前值被清零并保持到复位无效。 • 当启动信号I1.1有效时,允许计数器开始计数;当启动信号无效时,计数值被保持,但不能对计数脉冲信号计数。 • 当启动信号无效而复位信号有效时,复位信号不起作用,计数当前值不变。当复位保持有效则启动信号变为有效,当旗帜被清除。
输入控制 • S7-200PLC高速计数器HSC0-HSC5工作时需要输入端点的信号控制,下表给出了高速计数器HSC0-HSC5计数输入脉冲、方向控制复位输入和启动输入所使用的物理输入端点。 • 由表可知,高速计数器用的物理输入端点存在一些重叠。同一个物理输入端点不能用于两个不同的功能,也不能同时被两个不同的高速计数器使用,但不使用的端点可用做其他用途。
每个高速计数器都有固定的特殊功能存储器与之相配合,完成高速计数功能。具体对应关系如表所示。每个高速计数器都有固定的特殊功能存储器与之相配合,完成高速计数功能。具体对应关系如表所示。
状态位及1X/4X模式选择 • 有三个控制位用于配置复位和启动有效状态以及选择一倍速或者4倍计数模式(仅用于正交计数器)。这些位在各个计数器的控制字节中,只有在HDEF指令执行时才有效。 • 在执行HDEF指令前,必须把这些控制位设定到希望的状态。否则,计数器对计数模式的选择取缺省设置。一旦HDEF指令被执行,您就不能再更改计数器的设置,除非先进入STOP模式。
状态字节 • 每个高速计数器都有一个状态字节,程序运行时根据运行状况自动使某些位置位,可以通过程序来读相关位的状态,用以作为判断条件实现相应的操作。状态字节中各状态位的功能如表所示。
控制字节 • 高速计数器中有一个控制字节,其功能是允许或禁止计数器工作、计数方向控制或初始化计数方向、控制当前值和预置值装入等。执行HSC指令时,CPU检查控制字节和有关当前值和预置值。
当前值双字和预置值双字 • 每个高速计数器有一个32位的初始值和一个32位的预置值。初始值和预置值都是符号整数。为了向高速计数器装入新的初始值和预置值,必须先设置控制字节,并且把初始值和预置值存入特殊存储器中,然后执行HSC指令,从而将新的值传送到高速计数器。
HSC中断 • 高速计数器有3种中断: 当前值等于预置值中断 外部复位有效中断 计数方向改变中断 • 除模式0、1、2外,所有的计数器模式支持计数方向改变的中断,每个中断条件可分别地被允许或禁止。 高速计数器的初始化步骤 • 以HSC1为例,对初始化和操作的步骤进行描述。在初始化描述中,假定S7-200已经置成RUN模式。因此,首次扫描标志位为真。如果不是这种情况,请记住在进入RUN模式之后,对每一个高速计数器的HDEF指令只能执行一次。对一个高速计数器第二次执行HDEF指令会引起运行错误,而且不能改变第一次执行HDEF指令时对计数器的设置。
初始化模式0、1或2HSC1为内部方向控制的单相增/减计数器(模式0、1或2),初始化步骤如下:初始化模式0、1或2HSC1为内部方向控制的单相增/减计数器(模式0、1或2),初始化步骤如下: 1.用初次扫描存储器位(SM0.1=1)调用执行初始化操作子程序。 2.初始化子程序中,根据所希望的控制操作对SMB47置数。例如: SMB47=16#F8 产生如下的结果: 允许计数 写入新的初始值 写入新的预置值 置计数方向为增 置启动和复位输入为高电平有效
3.执行HDEF指令时,HSC输入置1,MODE输入置0(无外部复位或启动)或置1(有外部复位和无启动)或置2(有外部复位和启动)。3.执行HDEF指令时,HSC输入置1,MODE输入置0(无外部复位或启动)或置1(有外部复位和无启动)或置2(有外部复位和启动)。 4.向SMD48(双字)写入所希望的初始值(若写入0,则清除)。 5.向SMD52(双字)写入所希望的预置值。 6.为了捕获当前值(CV)等于预置值(PV)中断事件,编写中断子程序,并指定CV=PV中断事件(事件号13)调用该中断子程序。 7. 为了捕获外部复位事件,编写中断子程序,并指定外部复位中断事件(事件号15)调用该中断子程序。 8. 执行全局中断允许指令(ENI)来允许HSC1中断。 9. 执行HSC指令,使S7--200对HSC1编程。 10. 退出子程序。
4.7.2 表功能指令 • 所谓表是定义一组存储变量单元用于存储一组数据。 • 表只对字型数据存储,有表存数、表取数、表查找指令。 • 一个空表要定义其长度TL和实际能够填写的单元数EC。 • 有FIFO、LIFO、ATT、FND、FILL指令。
1、 FIFO,先进先出指令 • 当使能输入有效时,从TBL指明的表中移出第一个字型数据并将其输出到DATA所指定的字单元。 • 取数时,移出的数据总是最先进入表中的数据。每次从表中移出一个数据,剩余数据依次上移一个字单元位置,同时实际填表数EC会自动减1。 • 指令格式:FIFO TBL, DATA 例:FIFO VW100, AC0 • 使ENO=0的错误条件是:SM1.5(表空)SM4.3(运行时间)0006(间接寻址)0091(操作数超界) • 该指令影响特殊标志位:如果试图从空表中移走数据,那么SM1.5被置1。
2、 LIFO,后进先出指令 • 当使能输入有效时,从TBL指明的表中移出最后一个字型数据并将其输出到DATA所指定的字单元。 • LIFO表取数特点:取数时,移出的数据总是最后进入表中的数据。每次从表中取出一个数据,剩余数据位置保持不变,实际填表数EC会自动减1。 • 指令格式:LIFO TBL, DATA • 例: LIFO VW100, AC0 • 使ENO=0的错误条件是:SM1.5(表空)SM4.3(运行时间)0006(间接寻址)0091(操作数超界) • 该指令影响特殊标志位:如果试图从空表中移走数据,那么SM1.5被置1。
3、填表指令:ATT • 功能:向表(TBL)中增加一个数值(DATA)。 • 表中第一个数是最大填表数(TL),第二个数是实际填表数(EC)。新的数据填加在表中上最后一个数据的后面。每向表中填加一个新的数据,EC会自动加1。 • ATT指令定义的表的最大长度为100(不含TL和EC这两个单元) • 指令格式:ATT DATA,TBL • 如果向一个满表中再添加数据,或实际要填入的数据个数大于表格本身所定义的长度,则表的溢出标志位SM1.4会置1