1 / 94

可编程序控制器

可编程序控制器. 主讲:张波. 4.6 S7-200PID 指令 4.6.1 PID 算法. 理解 PID 算法 PID 控制器调节输出,保证偏差( e )为零,使系统达到稳定状态,偏差( e )是给定值( SP )和过程变量( PV )的差。 PID 控制的原理基于下面的算式;输出 M ( t )是比例项、积分项和微分项的函数。 输出 = 比例项 + 积分项 + 微分项 其中: M ( t )是 PID 回路的输出,是时间的函数 KC -- PID 回路的增益 e -- PID 回路的偏差(给定值与过程变量之差)

cliff
Download Presentation

可编程序控制器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 可编程序控制器 主讲:张波

  2. 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回路输出的初始值

  3. 为了能让数字计算机处理这个控制算式,连续算式必须离散化为周期采样偏差算式,才能用来计算输出值。数字计算机处理的算式如下:为了能让数字计算机处理这个控制算式,连续算式必须离散化为周期采样偏差算式,才能用来计算输出值。数字计算机处理的算式如下: 其中: • Mn--在第n个采样时刻,PID回路输出的计算值 • KC --PID回路比例增益 • en --第n个采样时刻的回路偏差值 • en - 1 --上一个采样时刻杜回路偏差 • ei --第i个采样时刻的回路偏差值 • KI --积分项的比例常数 • Minitial --回路输出的初始值 • KD --微分项的比例常数 • 从这个公式可以看出,积分项是从第1个采样周期到当前采样周期所有误差项的函数,微分项是当前采样和前一次采样的函数,比例项仅是当前采样的函数。在数字计算机中,不保存所有的误差项,实际上也不必要。只需将上一次的误差值和上一次积分项的数值保存即可。

  4. 由于计算机从第一次采样开始,每有一个偏差采样值必须计算一次输出值,只需要保存偏差前值和积分项前值。作为数字计算机解决的重复性的结果,可以得到在任何采样时刻必须计算的方程的一个简化算式。简化算式是:由于计算机从第一次采样开始,每有一个偏差采样值必须计算一次输出值,只需要保存偏差前值和积分项前值。作为数字计算机解决的重复性的结果,可以得到在任何采样时刻必须计算的方程的一个简化算式。简化算式是: Mn = Kc * en + KI * en + MX + KD * (en-en - 1) 其中: • Mn--在第n个采样时刻,PID回路输出的计算值 • KC --PID回路比例增益 • en --第n个采样时刻的回路偏差值 • en - 1 --上一个采样时刻杜回路偏差 • KI --积分项的比例常数 • MX--积分项前值 • KD --微分项的比例常数

  5. CPU实际使用以上简化算式的改进形式计算PID输出。这个改进型算式是:CPU实际使用以上简化算式的改进形式计算PID输出。这个改进型算式是: Mn = MPn + MIn + MDn 输出= 比例项+ 积分项+ 微分项 其中: Mn --第n采样时刻的计算值 MPn --第n采样时刻的比例项值 MIn --第n采样时刻的积分项值 MDn --第n采样时刻的微分项值

  6. (1)理解PID方程的比例项 • 比例项MPn是增益(KC)和偏差(e)的乘积。其中KC决定输出对偏差的灵敏度,偏差(e)是给定值(SP)与过程变量值(PV)之差。 • S7--200解决的求比例项的算式是: MPn = KC * (SPn – PVn) • MPn--第n个采样时刻比例项的值 • KC --回路增益 • SPn-- 第n采样时刻的给定值 • PVn --第n采样时刻的过程变量值

  7. (2)理解PID方程的积分项 • 积分项(MI)是正比于每次采样的误差的积累值。 • S7--200解决的求积分项的算式是: MIn = KC * TS / TI * (SPn -- PVn)+ MX • 其中: • MIn --第n个采样时刻的积分项值 • KC --回路增益 • TS --采样周期 • TI --积分时间常数 • SPn --第n采样时刻的给定值 • PVn--第n采样时刻的过程变量值 • MX --第n - 1采样时刻的积分项(积分项前值) (也称积分和或偏置)

  8. (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

  9. 4.6.5 PID指令 • PID指令以回路表中的输入和组态信息进行PID运算。要执行该指令,必须使逻辑栈顶值置为1。 • 指令中的TBL是PID控制回路的起始地址。 • LOOP为控制回路号(为常数,在0-7之间) • 使ENO=0的错误条件: SM1.1(溢出)H 0006(间接寻址) • 受影响特殊存储器位H SM1.1(溢出)

  10. 在程序中最多可以用8条PID指令。如果两个或两个以上的PID指令用了同一个回路号,那么即使这些指令的回路表不同,这些PID运算之间也会相互干涉,产生不可预料的结果。在程序中最多可以用8条PID指令。如果两个或两个以上的PID指令用了同一个回路号,那么即使这些指令的回路表不同,这些PID运算之间也会相互干涉,产生不可预料的结果。 • 回路表包含9个参数,用来控制和监视PID运算。这些参数分别是过程变量当前值(PVn),过程变量前值(PVn--1),给定值(SPn),输出值(Mn),增益(Kc),采样时间(Ts),积分时间(TI),微分时间(TD)和积分项前值(MX)。 • 为了让PID运算以预想的采样频率工作,PID指令必须用在定时发生的中断程序中,或者用在主程序中被定时器所控制以一定频率执行。采样时间必须通过回路表输入到PID运算中。

  11. 回路表

  12. 回路控制类型的选择 • 通过设置常量参数,可以选择需要的回路控制类型。 • 如果不想要积分动作(PID计算中没有“I”),可以把积分时间(复位)置为无穷大“INF”。即使没有积分作用,积分项还是不为零,因为有初值MX。 • 如果不想要微分回路,可以把微分时间置为零。 • 如果不想要比例回路,但需要积分或积分微分回路,可把增益设为0.0,系统会在计算积分项和微分项时,把增益当作1.0看待。 正作用回路和反作用回路 • 如果增益为正,那么该回路为正作用回路。如果增益为负,那么是反作用回路。 • 对于增益值为0.0的I或ID控制,如果指定积分时间、微分时间为正,就是正作用回路;如果指定为负值,就是反作用回路

  13. 控制方式 • 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块有效,没有检测到使能位的正跳变,那么就没有无扰动切换的动作。

  14. 回路输入的转换及归一化处理 • 每个PID回路具有两个输入量,给定值(SP)和过程变量(PV)。给定值通常是一个固定的值。过程变量是与PID回路输出有关,可以衡量输出对控制系统作用的大小。 • 给定值和过程变量都可能是工程实际的值,它们的大小、范围和工程单位都可能不一样。在PID指令对这些工程实际的值进行运算之前,必须把它们转换成标准的浮点型表达形式。

  15. 转换的第一步是把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

  16. 下面的指令把双极性实数标准化为0.0~1.0之间的实数。通常用在第一步转换之后:下面的指令把双极性实数标准化为0.0~1.0之间的实数。通常用在第一步转换之后: • /R 64000.0, AC0 //累加器中的标准化值 • +R 0.5, AC0 //加上偏置,使其在0.0~1.0之间 • MOVR AC0, VD100 //标准化的值存入回路表

  17. 回路输出值转换成整数值 • 回路输出值一般是控制变量,比如,在汽车速度控制中,可以是油阀开度的设置。回路输出是0.0和1.0之间的一个标准化了的实数值。 • 在回路输出可以用于驱动模拟输出之前,回路输出必须转换成一个16位的标定整数值。这一过程,是给定值或过程变量的标准化转换的逆过程。 • 第一步是使用下面给出的公式,将回路输出转换成一个标定的实数值:

  18. 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位整数写入模拟输出寄存器

  19. 出错条件 • 如果指令指定的回路表起始地址或PID回路号操作数超出范围,那么在编译期间,CPU将产生编译错误(范围错误),从而编译失败。 • PID指令不检查回路表中的值是否在范围之内,所以必须小心操作以保证过程变量和设定值不超界。 • PID指令不检查回路表中的值是否超界,您必须保证过程变量和设定值(以及偏置和前一次过程变量)必须在0.0到1.0之间。 • 如果PID计算的算术运算发生错误,那么特殊存储器标志位SM1.1(溢出或非法值)会被置1,并且中止PID指令的执行。(要想消除这种错误,单靠改变回路表中的输出值是不够的,正确的方法是在下一次执行PID运算之前,改变引起算术运算错误的输入值,而不是更新输出值)

  20. PID指令编程举例 在本例中,有一水箱需要维持一定的水位,该水箱里的水以变化的速度流出。这就需要有一个水泵以不同的速度给水箱供水,以维持水位不变,这样才能使水箱不断水。本系统的给定值是水箱满水位的75%时的水位,过程变量由漂浮在水面的水位测量仪给出。输出值是水泵的速度,可以从允许最大值的0%变到100%。给定值可以预先设定后直接输入到回路表中,过程变量值是来自水位表的单极性模拟量,回路输出值也是一个单极性模拟量,用来控制进水泵的速度。这两个模拟量的范围是0.0到1.0,分辨率为1/32000(标准化)。 在本系统中,只使用比例和积分控制,其回路增益和时间常数可以通过工程计算初步确定。但还需要进一步调整以达到最优控制效果。初步确定的增益和时间常数为:Kc是0.25,Ts是0.1秒,Tl是30分钟

  21. 系统启动时,关闭出水口,用手动控制进水泵的速度,使水位达到满水位的75%,然后打开出水口,同时水泵控制从手动方式切换到自动方式。这种切换由一个输入的数字量控制,描述如下:I0.0位控制手动到自动的切换,0代表手动,1代表自动。当工作在手动控制方式下,可以把水泵速度(0.0~1.0之间的实数)写道VD108(VD108是回路表中保存输出的寄存器)系统启动时,关闭出水口,用手动控制进水泵的速度,使水位达到满水位的75%,然后打开出水口,同时水泵控制从手动方式切换到自动方式。这种切换由一个输入的数字量控制,描述如下:I0.0位控制手动到自动的切换,0代表手动,1代表自动。当工作在手动控制方式下,可以把水泵速度(0.0~1.0之间的实数)写道VD108(VD108是回路表中保存输出的寄存器)

  22. 4.7 S7-200其他操作指令 4.7.1 高速计数器操作指令 4.7.2 表功能指令 4.7.3 通信指令 4.7.4 中断指令

  23. 4.7.1 高速计数器操作指令 • 高速计数器用于对PLC扫描速率来不及处理的高速事件进行计数。 • S7-200PLC根据CPU不同型号有4-6个高速计数器。 • 高速计数器的最高频率也随CPU型号不同而异。

  24. 1、高速计数指令 • 高速计数指令包括定义高速计数器HDEF指令和高速计数器HSC指令。 • HDEF,定义高速计数器指令。使能输入有效时,为指定的高速计数器分配一种工作模式,即用来建立高速计数器与工作模式之间的联系。梯形图指令盒中有两个数据输入端:HSC,高速计数器编号,为0~5的常数,字节型;MODE,工作模式,为0~11的常数,字节型。 • HSC指令是根据高速计数器特殊存储器位的状态,并按照HDEF指令指定的工作模式设置高速计数器并开展其工作。

  25. 定义高速计数器指令(HDEF)为指定的高速计数器(HSCx)选择操作模式。定义高速计数器指令(HDEF)为指定的高速计数器(HSCx)选择操作模式。 • 高速计数器指令(HSC)在HSC特殊存储器位状态的基础上,配置和控制高速计数器。参数N指定高速计数器的标号。 • 对于每一个高速计数器只能用一条定义高速计数器指令。 • 每一个计数器都有时钟、方向控制、复位、启动的特定输入。对于双相计数器,两个时钟都可以运行在最高频率。在正交模式下,您可以选择一倍速(1x)或者四倍速(4x)计数速率。

  26. 在使用高速计数器之前,应该用HDEF(高速计数器定义)指令为计数器选择一种计数模式。使用初次扫描存储器位SM0.1(该位仅在第一次扫描周期接通,之后断开)来调用一个包含HDEF指令的子程序在使用高速计数器之前,应该用HDEF(高速计数器定义)指令为计数器选择一种计数模式。使用初次扫描存储器位SM0.1(该位仅在第一次扫描周期接通,之后断开)来调用一个包含HDEF指令的子程序

  27. 2、工作模式 • 4种工作模式 • 内部方向控制的单脉冲增/减计数模式 • 外部方向控制的单脉冲增/减计数模式 • 增/减计数时钟输入的双脉冲计数模式 • A/B脉冲正交计数模式 • 不论高速计数器以何种模式工作,他们的控制信号功能是相同的 • 当复位输入I1.0有效时,高速计数器的当前值被清零并保持到复位无效。 • 当启动信号I1.1有效时,允许计数器开始计数;当启动信号无效时,计数值被保持,但不能对计数脉冲信号计数。 • 当启动信号无效而复位信号有效时,复位信号不起作用,计数当前值不变。当复位保持有效则启动信号变为有效,当旗帜被清除。

  28. 输入控制 • S7-200PLC高速计数器HSC0-HSC5工作时需要输入端点的信号控制,下表给出了高速计数器HSC0-HSC5计数输入脉冲、方向控制复位输入和启动输入所使用的物理输入端点。 • 由表可知,高速计数器用的物理输入端点存在一些重叠。同一个物理输入端点不能用于两个不同的功能,也不能同时被两个不同的高速计数器使用,但不使用的端点可用做其他用途。

  29. 每个高速计数器都有固定的特殊功能存储器与之相配合,完成高速计数功能。具体对应关系如表所示。每个高速计数器都有固定的特殊功能存储器与之相配合,完成高速计数功能。具体对应关系如表所示。

  30. 状态位及1X/4X模式选择 • 有三个控制位用于配置复位和启动有效状态以及选择一倍速或者4倍计数模式(仅用于正交计数器)。这些位在各个计数器的控制字节中,只有在HDEF指令执行时才有效。 • 在执行HDEF指令前,必须把这些控制位设定到希望的状态。否则,计数器对计数模式的选择取缺省设置。一旦HDEF指令被执行,您就不能再更改计数器的设置,除非先进入STOP模式。

  31. 状态字节 • 每个高速计数器都有一个状态字节,程序运行时根据运行状况自动使某些位置位,可以通过程序来读相关位的状态,用以作为判断条件实现相应的操作。状态字节中各状态位的功能如表所示。

  32. 控制字节 • 高速计数器中有一个控制字节,其功能是允许或禁止计数器工作、计数方向控制或初始化计数方向、控制当前值和预置值装入等。执行HSC指令时,CPU检查控制字节和有关当前值和预置值。

  33. 当前值双字和预置值双字 • 每个高速计数器有一个32位的初始值和一个32位的预置值。初始值和预置值都是符号整数。为了向高速计数器装入新的初始值和预置值,必须先设置控制字节,并且把初始值和预置值存入特殊存储器中,然后执行HSC指令,从而将新的值传送到高速计数器。

  34. HSC中断 • 高速计数器有3种中断: 当前值等于预置值中断 外部复位有效中断 计数方向改变中断 • 除模式0、1、2外,所有的计数器模式支持计数方向改变的中断,每个中断条件可分别地被允许或禁止。 高速计数器的初始化步骤 • 以HSC1为例,对初始化和操作的步骤进行描述。在初始化描述中,假定S7-200已经置成RUN模式。因此,首次扫描标志位为真。如果不是这种情况,请记住在进入RUN模式之后,对每一个高速计数器的HDEF指令只能执行一次。对一个高速计数器第二次执行HDEF指令会引起运行错误,而且不能改变第一次执行HDEF指令时对计数器的设置。

  35. 初始化模式0、1或2HSC1为内部方向控制的单相增/减计数器(模式0、1或2),初始化步骤如下:初始化模式0、1或2HSC1为内部方向控制的单相增/减计数器(模式0、1或2),初始化步骤如下: 1.用初次扫描存储器位(SM0.1=1)调用执行初始化操作子程序。 2.初始化子程序中,根据所希望的控制操作对SMB47置数。例如: SMB47=16#F8 产生如下的结果: 允许计数 写入新的初始值 写入新的预置值 置计数方向为增 置启动和复位输入为高电平有效

  36. 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. 退出子程序。

  37. 4.7.2 表功能指令 • 所谓表是定义一组存储变量单元用于存储一组数据。 • 表只对字型数据存储,有表存数、表取数、表查找指令。 • 一个空表要定义其长度TL和实际能够填写的单元数EC。 • 有FIFO、LIFO、ATT、FND、FILL指令。

  38. 1、 FIFO,先进先出指令 • 当使能输入有效时,从TBL指明的表中移出第一个字型数据并将其输出到DATA所指定的字单元。 • 取数时,移出的数据总是最先进入表中的数据。每次从表中移出一个数据,剩余数据依次上移一个字单元位置,同时实际填表数EC会自动减1。 • 指令格式:FIFO TBL, DATA 例:FIFO VW100, AC0 • 使ENO=0的错误条件是:SM1.5(表空)SM4.3(运行时间)0006(间接寻址)0091(操作数超界) • 该指令影响特殊标志位:如果试图从空表中移走数据,那么SM1.5被置1。

  39. 2、 LIFO,后进先出指令 • 当使能输入有效时,从TBL指明的表中移出最后一个字型数据并将其输出到DATA所指定的字单元。 • LIFO表取数特点:取数时,移出的数据总是最后进入表中的数据。每次从表中取出一个数据,剩余数据位置保持不变,实际填表数EC会自动减1。 • 指令格式:LIFO TBL, DATA • 例: LIFO VW100, AC0 • 使ENO=0的错误条件是:SM1.5(表空)SM4.3(运行时间)0006(间接寻址)0091(操作数超界) • 该指令影响特殊标志位:如果试图从空表中移走数据,那么SM1.5被置1。

  40. 3、填表指令:ATT • 功能:向表(TBL)中增加一个数值(DATA)。 • 表中第一个数是最大填表数(TL),第二个数是实际填表数(EC)。新的数据填加在表中上最后一个数据的后面。每向表中填加一个新的数据,EC会自动加1。 • ATT指令定义的表的最大长度为100(不含TL和EC这两个单元) • 指令格式:ATT DATA,TBL • 如果向一个满表中再添加数据,或实际要填入的数据个数大于表格本身所定义的长度,则表的溢出标志位SM1.4会置1

More Related