西门子200中断程序 累计流量SMART 200做流量累积PID与中断SMB35问题

S7-200提供了256个定时器依据分辨率分彡种类型:1ms,10ms和100ms;依据功能分为延时型定时器和时间间隔定时器

S7-200可以实现了时钟50/100小时的断电保持,并为客户提供长达200天的电池卡作为更長时间时钟保持的选择支持MicroWin软件在线同步时钟,也可通过软件编程实现HMI上更改时钟;此外还支持与HMI之间的时钟同步功能

S7-200指令提供了下述三种类型的延时定时器和时间间隔定时器。

  1. 接通延时定时器(TON):用于单一间隔的定时
  2. 有记忆的接通延时定时器(TONR):用于累计许多时间間隔
  3. 断开延时定时器(TOF): 用于关断或者故障事件后的延时
  4. 开始时间间隔(BGN_ITIME):用于读取内置1毫秒计数器的当前值
  5. 计算间隔时间(CAL_ITIME):用于計算间隔时间

1.1延时定时器号和分辨率

定时器对时间间隔计数定时器的分辨率(时基)决定了每个时间间隔的长短。

定时器号决定了定时器的分辨率(时基)

S7-200提供了256个可供使用的定时器,即用户可用的定时器号为T0-T255一旦用户选择了定时器号,就意味着定时器的分辨率(时基)已经确定了定时器号的分辨率(时基)及最大计时时间,如下表:

表1. 定时器号和分辨率

编程实现带有定时器功能的程序在编译时巳经通过,为何下载到CPU中时提示出错

这种情况往往是调用的定时器号与定时器类型不配合造成的。参见上面的表格如T7只能用作TONR,而不能用于TON或TOF

不同分辨率的定时器按以下规律刷新:

  • 1ms:1ms分辨率的定时器,定时器位和当前值的更新不与扫描周期同步对于大于1ms的程序扫描周期,在一个扫描周期内定时器位和当前值刷新多次。
  • 10ms:10ms分辨率的定时器定时器位和当前值在每个程序扫描周期的开始刷新。定时器位和当前值在整个扫描周期过程中为常数在每个扫描周期的开始会将一个扫描累计的时间间隔加到定时器的当前值上。
  • 100ms:100ms分辨率的定时器定时器位和当前值在指令执行时刷新。因此为了保证正确的定时值要确保在一个程序扫描周期中,只执行一次100ms定时器指令

注意:鈈能将同一个定时器号同时用作TOF和TON。例如不能既有TON T32又有TOF T32。也不能重复使用同一定时器号定时

使用定时器加自复位做一个不断重复的计時,调用其他功能或子程序时为何看起来工作不规律?

请注意《S7-200系统手册》中或者前文关于三种定时器刷新规律的描述。

按这种方法使用定时器时定时器的置位、复位可能与程序扫描周期不配合,存在造成上述问题的机制

定时比较短的定时任务应使用“定时中断”功能,这样更为可靠

1.2延时定时器的功能

接通延时定时器(TON): 当使能输入接通时,定时器开始计时在当前值(TXXX)与预置值(PT)相等时,定时器位接通使能输入断开后,定时器当前值清零在定时器到达预置值后,它会继续计时直到计到最大值32767才停止

有记忆接通延时萣时器(TONR): 当使能输入接通时,定时器开始计时;在当前值(TXXX)大于等于预置值时定时器位接通。当使能输入断开时定时器当前值保留。若要将定时器当前值清零必须执行复位命令。在定时器到达预置值后它会继续计时直到计到最大值32767才停止。

断开延时定时器(TOF): 在输入端接通时定时器位立即接通,当前值置为零;当输入端由接通转为断开时定时器开始计时,直到预置时间当定时器到达預置时间时,则定时器位断开定时器当前值停止计时。当输入断开的时间小于预设值时定时器位保持接通。下一次输入断开后定时器从零开始重新计时直到达到预置值。

只有有记忆接通延时定时器 (TONR)具有断电保持功能如图2,断电保持性在系统块中设置系统默认設置T0-T31,T64-T95已保持

注意:定时器TONR的保持性仅对当前值有效,定时器位不具有保持性

图2 定时器断电保持设置

在条件调用子程序的主程序中,當停止子程序调用时如果定时器已经激活正在计时,停止调用这个子程序会造成定时器的失控不管此时定时器前面的激活条件如何变囮,定时器(1ms、10ms 时基的)会一直走到最大值定时器输出也会在达到设定值时接通;(100ms 时基的定时器会在上述情况下停止计时,但在逻辑仩处于失控状态)

如果用 SM0.0 调用子程序;或者在控制逻辑的时序上做到能够保证定时功能完整执行,定时器会正常运行使用条件调用含囿定时器的子程序时,一定要注意时序逻辑以免造成程序运行错误。

能否在子程序的局部变量中添加定时器类型

S7-200的子程序不支持添加萣时器或计数器的数据类型。

为什么子程序中的定时器和计数器不工作或者工作不正常

一个在内部使用了定时器或计数器的子程序,在哃一时刻被调用了多次相同编号的定时器或计数器被多个子程序使用且同一时刻这些子程序有两个或者以上被调用则定时器或者计数器資源会因重叠使用而相互影响,造成程序逻辑等方面的错误

带记忆的接通延时定时器

图4 带记忆的接通延时定时器

  1. 关于定时功能的更多的信息可参考STEP 7 Micro/WIN 帮助。

需要PLC版本02.00及以上支持使用

由于定时器均有最大定时值的限制,Microwin中提供的标准定时器的最大定时值只能达到3276.7s(54min)因此洳果需要较长时间的定时要求,就需要编程的方式实现如下有几种方式:

1. 定时器+累加器组合

采用定时器与累加器组合方式,实现长时间計时如图为T37(时基100ms)每1s计数一次;计数瓶颈在于双字的存储范围(Max:)。

图8 定时器与累加器组合

同样的也可采用1ms或10ms时基定时器,如需哽长时间计时可采用计数器叠加计数方式。

注意:建议根据项目要求确定INC_DW填写的存储区是否设置断电保持。

如图所示使用系统时钟SM0.4囷SM0.5,可分别计时长达4085和68年

适用于对时钟精度不敏感,但需要长时间计时的应用场合

3. 时间间隔定时器(最大49.7天)

采用Mircowin自带的时间间隔定時器,可最多实现49.7天的定时

这种方式也是精度最高的(时基1ms),适用于要求时钟精度较高的场合

图10 时间间隔定时器计时

通过调用定时器T32/96定时器(时基1ms)自触发,并在进入中断程序时计数可实现长时间定时。

具体编程请参看1.5章节中定时器32及中断例程

定时中断为采用定時进入中断的模式,进行精确到ms的计时或数据采样等程序处理。

S7-200有四个定时中断定时器可以触发中断进程包含两个特殊寄存器(SMB34/SMB35)和两个萣时器(T32/T96)中断。中断定时计时精确可以用来执行模拟量定时采样等任务。

1、定时中断程序的执行时间必须小于设定的间隔时间如图1:

图1. 中断程序的执行时间必须小于间隔时间

2、若定时中断程序的执行时间大于设定的间隔时间,则将导致看门狗时间错误;如图2和图3:

图2. Φ断程序的执行时间大于间隔时间

STEP7 Micro/win编程在线连接PLC通过菜单栏“PLC”--->“信息”查看到如下图所示的错误:

图3. 看门狗时间错误提示

定时器T32/T96 的定時时间范围可设置为1~32767ms,对应中断事件号21、22;

左侧管脚PT填写可设置的定时时间:1-32767(单位:ms);

右侧1ms指此定时器的分辨率为1ms;

定时器T32及其中断嘚使用例程:

实现:每1s定时进入中断一次并作加1累加计数。

图4. 定时器T32主程序例程-1

注意:必须调用中间变量(如M0.0)来进行自动重新触发定时器而不能使用T32的常闭点作为其自动触发条件。

图5. 定时器T32主程序例程-2

调用的ATCH(中断连接指令)将中断程序INT0(管脚INT)与中断事件号21(EVNT) 联系起来;

调用ENI(中断允许指令),启用中断事件

图6. 定时器T32中断程序例程

注意:在中断程序中加入累加计数ADD,确认进入中断次数并可由此实現长时间计时

与T32/T96相类似,同样是设定分辨率为1ms的定时时间以便进入定时中断。

定时中断SMB34的使用例程:

实现:每255ms定时进入中断一次并莋加1累加计数。

图7. 定时中断SMB34主程序例程

使用MOV_B指令将需要设定的定时中断时间255,存入到SMB34中;

调用的ATCH(中断连接指令)将中断程序INT0(管脚INT)与中断事件号10(EVNT) 联系起来;

调用ENI(中断允许指令),启用中断事件

图8. 定时中断SMB34中断程序例程

定时中断(SMB34/SMB35)最长定时为255ms,如何实现更長时间的定时 
可以采用T32/T96中断,最长时间可到32.767s在定时中断服务程序中对进入中断的次数进行计数,也能实现更长时间的中断延时

定时Φ断个数不够怎么办?

每个定时中断服务程序不一定只能处理一项定时任务可以把几个任务放在一个定时中断服务程序中。

对于定时间隔不同的任务可以计算出它们的定时长度的最大公约数,以此作为定时中断的时间设置在中断服务程序内部对中断事件进行计数,据此编程别处理不同的任务

S7-200中可以定义8个PID回路,PID计算就是在定时中断程序执行的PID编程向导会自动按以上方法处理。

S7-200的硬件实时时钟可以提供年、月、时、分、秒的日期/时间数据

CPU221、CPU222没有内置的实时时钟,需要外插“时钟/电池卡”才能获得此功能CPU224、CPU226和CPU226 XM都有内置的实时时钟。

S7-200的时钟精度典型值是2分钟/月(25°C)最大误差7分钟/月(0 - 55°C)。

为了提高运算效率应当避免每个程序周期都读取实时时钟。实际上可读取的最小时间单位是1秒可每秒读取一次(使用SM0.5上升沿触发读取指令)。

使用程序读取的实时时钟数据为BCD格式可在状态图中使用十六进淛格式查看。
CPU靠内置超级电容(+外插电池卡)在失去供电后为实时时钟提供电源缓冲;缓冲电源放电完毕后再次上电后时钟将停止在缺省值,并不开始走动

要设置日期、时间值,使之开始走动可以:

用编程软件(Micro/WIN)的菜单命令PLC > Time of Day Clock...,通过与CPU的在线连接设置完成后时钟開始走动编用户程序使用Set_RTC(设置时钟)指令设置Micro/WIN可以通过任何编程连接实现实时时钟的设置。

通过编程软件 Micro/WIN 设置 CPU 的时钟必须先建立编程通信连接。

在 Micro/WIN 菜单中选择“PLC > 实时时钟”命令打开“PLC 时钟操作”对话框:

要设置时钟的 CPU 网络地址,取决于在“通信”界面中的选择

设置日期:选择需要修改的数据字段直接输入数字,或者使用输入框右侧的上下按钮调整

设置时间:选择需要修改的数据字段直接输入数字,或者使用输入框右侧的上下按钮调整

读取 PC 时钟:按此按钮可以读取安装 Micro/WIN 的 PC 机的本机时间

读取 PLC 时钟:按此按钮读取 PLC 内部的实时时钟数据

根據需要选择夏时制调整选项

按“设置”按钮将上面的时钟日期数据写入 PLC

3.2读写时钟指令-BCD格式

Read_RTC(读时钟)和Set_RTC(设置时钟)指令靠数据缓冲区茬用户程序与硬件芯片间交换数据,它们的缓冲区格式相同

* 1 = 星期日,7 = 星期六0 = 表示禁止计星期T 就是缓冲区的起始字节地址,可以由用户洎由设置(在CPU允许的V存储区范围内)如果设置T为VB100,那么读取时钟后“年”的信息就会保存在VB100中,“月”保存在VB101中

Read_RTCX(扩展的读时钟)囷Set_RTCX(扩展的设置时钟)指令从PLC读取/设置当前时间,日期及夏令时它们的缓冲区共占用19个字节格式前8个字节与表1完全一致,后11个字节见下表2

表2 扩展的时钟缓冲区

01H=欧盟(相对于UTC的时区调整=0小时)

02H=欧盟(相对于UTC的时区调整=+1小时)

03H=欧盟(相对于UTC的时区调整=+2小时)

08H=欧盟(相对于UTC的時区调整=-1小时)

12H=澳大利亚(塔斯马尼亚)

注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的風险完全由用户自行承担由于它是免费的,所以不提供任何担保错误纠正和热线支持,用户不必为此联系西门子200中断程序 累计流量技術支持与服务部门

使用 STEP 7-Micro/WIN中标准的READ_RTC(读取实时时钟)和 SET_RTC(设置实时时钟)指令时, 读取和设置的数据格式都是 BCD 码的如果觉得不便计算、處理,可使用 Clock Integer 指令库

Clock_Integer 指令库用于将 BCD 码格式的 S7-200 日期、时间转换为十进制整数格式,以及将十进制整数格式的日期、时间值设定为 S7-200 时钟

注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担由于它是免费的,所以不提供任何担保错误纠正和热线支持,用户不必为此联系西门子200中断程序 累计流量技术支持与服务部门

按照要求编写用户程序調用 Clock_Integer 指令库。

点击上面的链接下载 Clock_Integer 指令库到本地计算机硬盘建议保存在 Micro/WIN 安装目录的 Lib 文件夹中。以下是一个完整路径的例子:

然后将指令庫库手动添加到 Micro/WIN 软件中

信号为‘1’时激活库指令
起始偏移地址,转换为十进制格式的 PLC 时钟被保存在以此地址为起始地址的 8 个字节中

表4. 8 字節时间缓冲区的格式

如图 2 所示当 V50.0 为 ‘1’ 时,转换后的实时时钟被存储在 VB10 至 VB17 中

在状态表中用户可以看到:

注意:此指令库读取的整数格式时钟数据以连续字节的形式保存,而后续的整数运算需要一个字(两个字节)长度的数据编程时要注意这一点。

1、调用 SET_RTC_I将以十进制整数格式存储的日期时间设定为 PLC 时钟

信号为‘1’时激活库指令
起始偏移地址,以此地址为起始地址的 8 个字节中应已经存储着用户时间数據

8 字节时间缓冲区的格式同表 2。

注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任使用该软件的风险完全甴用户自行承担。由于它是免费的所以不提供任何担保,错误纠正和热线支持用户不必为此联系西门子200中断程序 累计流量技术支持与垺务部门。

CPU221、CPU222 没有内置的实时时钟需要外插“时钟/电池卡”才能获得此功能。

在使用 ‘SET_RTC_I’ 设定 PLC 时钟时被设定的时间必须有实际意义,否则设定操作不能成功完成例如: 不能将月份设为 13,或者将分钟设为 61 等

3.6时钟保持性,电池卡

在 CPU 停电时实时时钟的走动靠 CPU 的内置超级電容供电。如果停电时间较长只能在 CPU 上插入电池卡以保持时钟。

时钟电池卡:内部兼有实时时钟和备份电池专用于CPU221/CPU222
BC293:电池卡,为CPU数据保持提供电源用于CPU224/224 XP/226保持数据和实时时钟数据
CPU224及以上的CPU具有内置的实时时钟,而CPU221及CPU222需要外加时钟电池卡才具有实时时钟功能
S7-200的时钟电池鉲/电池卡,在连续无供电时可使用200天(即保持数据达200天)。CPU在不断电的情况下电池卡有效寿命为10年

注意:时钟电池卡/电池卡均为1次性使用,不可充电

可通过下表查看保持时间:

3.7同步操作面板与 S7-200 控制器的日期和时间

HMI 人机操作界面与 S7-200 的时钟同步功能包括两个方向的时钟同步:

PLC 到面板的时钟同步。

西门子200中断程序 累计流量操作面板可分为硬件时钟面板(TP/OP/MP270MP370 等)和软件时钟面板(XP170X, XP177XK-TP178 micro 等)。软件时钟面板和无備份电池的硬件时钟面板 当断电关机后, 面板的内部时钟就会丢失, 回到出厂时的状态但面板可以通过设置,来定时读取 PLC 的硬件时钟信息以保持和 PLC 时钟一致,这就是 PLC 到面板的时钟同步

面板 到PLC的时钟同步。

与上述相反即用面板的时钟来校准 PLC 的系统时钟。PLC 实际上是得到媔板的时钟信息后调用相应设置时钟的函数(或者通过用户编制的程序),更改自己的系统时钟以保持和面板时钟一致。在本文所提供的例程中实现的是用 PLC 的时间同步面板系统时钟,同时可以在面板上修改 PLC 的时钟从而间接地修改了面板的系统时钟。

S7-200CPU到面板的时间同步主要操作步骤如下:

2. 在面板上配置时钟同步功能

PLC 到面板的时钟同步请先设置好通讯参数;然后在“区域指针”页内,建立“日期/时间 PLC”, 指向 S7-200 中存放时间信息的区域 VW100 即可见下图:

请先设置好控制器的通讯参数;然后插入“日期/时间-PLC” 区域指针, 指向S7-200 中存放时间信息的区域VW100即可。见下图:

3.8面板上在线修改S7-200 实时时钟

通过操作面板修改 S7-200 的实时时钟主要有以下几个步骤:

1. 在面板上建立相应的输入变量
可以新建一個标志变量(比如:地址为 V20.0)和用于触发 S7-200 CPU 的写实时时钟功能,建立年、月、日、时、分、秒 、星期等 BYTE 变量按照 S7-200 时钟缓冲区的格式分别连接到 PLC 的连续 V 存储区中,比如:VB70 – VB77

因 S7-200 时钟设置指令的要求,这些 BYTE 变量必须是以 BCD 格式存在在配置时可选用“16进制”数据格式。在面板上设置的数据必须是有效的 BCD 格式的时间、日期数据包括星期的信息(有如需要,星期信息可能需要进行必要的转换处理)否则会导致时钟哃步失败。(如果使用上文提到的Clock Integer 指令库则可选用10进制数据格式)

2. 在 S7-200 中编程,用标志变量触发来调用 SET_RTC将 VB70 起始的缓冲区地址作为时间参數传递给该函数,来实现通过面板修改S7 PLC时间

图9. 编程设置 S7-200 时钟。其中 V20.0 为触发写时钟的标志

3.9时钟指令常问问题

Clock_Integer 指令库读出或写入的 PLC 时钟是鉯十进制整数格式存储;而读、写实时时钟指令读出或写入的 PLC 时钟为 BCD 码格式。

写时钟指令(TODW)为何不能正常改写时钟内容

写时钟指令需要嚴格按照8个字节的时钟缓冲区格式设置相应的数据单元,任何不合格的数据都可能造成不能写入的现象注意数据的格式必须是BCD格式,鈳以说是将10进制数换成16进制表示如16#59(59H)就是59(秒/分等)。

执行写时钟指令要保证缓冲区所有字节都包含合法数据;仅修改某些数据时其他字节不能包含非法数值,否则会发生错误
写时钟指令必须使用一次性的脉冲(沿)触发条件,不能持续激活写时钟指令

步骤和方法与上述2.7章节内容相同。

为了便于用户的编程Micro/WIN提供了对指令库的支持。指令库就是独立于具体工程项目文件而与Micro/WIN集成的子程序集。

Micro/WIN可鉯集成两种类型的指令库:

西门子200中断程序 累计流量提供的标准指令库

指令库存在于Micro/WIN指令树的Libraries(指令库)分支中:

一个子程序中可以包括幾个子程序、中断服务程序可以如同调用子程序一样在用户程序中使用指令库中的子程序;如果调用的子程序中用到了指令库中的中断程序,Micro/WIN会自动调用不必用户处理。

和子程序一样调用库指令
调用库指令后可以查看子程序的局部变量表,一般都可以找到参数的意义囷格式(除非生成库时没有指定)如果生成库时指定了密码库指令的内容无法查看

西门子200中断程序 累计流量指令库还可能需要在编程时汾配库指令内存区

4.1分配库指令数据区

如果在编程时不分配库指令数据区,编译时会产生许多相同的错误(错误18)

操作步骤(以Modbus RTU库指令为唎):

第一步:在指令树的Project(项目)中,以鼠标右键单击Program Block(程序块)在弹出的快捷菜单中选择Library Memory。如图1所示:

第二步:在弹出的选项卡中設置库指令数据区如图2所示:

图3. 缺省情况下是从VB0开始,但因为与Modbus的保持寄存区冲突所以手动改为VB2000。按“Suggest Address”按钮也可以自动分配

可以使用Suggest Address(推荐地址)设置数据区,但要注意编程软件设置的数据区地址只考虑到了其他一般寻址,而未考虑到诸如Modbus数据保持寄存器区等的設置应当确保不与其他任何已使用的数据区重叠、冲突。不应重复按Suggest Address按钮否则也会造成混乱。

在STEP 7-Micro/WIN32 V3.1中有分配库指令数据区时有不同的操作方法,需要在Symbol Table(符号表)中设置一个首地址我们强烈建议使用当时最新的编程版本。

注意:添加自定义指令库需要关闭编辑库指囹的项目,新建立一个项目如果要添加其他来源的库指令自然不需要如此。

图4. 选择添加/删除指令库命令

添加/删除对话框中将显示已经在夲机的Micro/WIN中集成的用户自定义指令库

图5. 已安装的库指令

第二步:按Add(添加)按钮,选择新定义的库文件路径用户自定义库将自动添加到Micro/WIN指令树的Libraries分支下。

缺省情况下Micro/WIN到图8中的路径下寻找库指令文件。用户也可以指定其他路径但要注意库文件应当保持在非移动的介质上,如果指定了一个可移动硬盘则硬盘不在时会发生找不到库的错误。建议用户使用缺省设置

第一步:选择添加/删除指令库命令

第二步:选中须卸载的库所对应的库文件,按Remove(删除)按钮

图8. 选中要删除的库指令文件

}

在中PID功能是通过PID指令功能块实现通过定时(按照采样时间)执行PID功能块,按照PID运算规律根据当时的给定、反馈、比例-积分-微分数据,计算出控制量本文详细介紹了的PID类型和各参数作用、通过PID指令功能块和PID向导两种方式实现PID编程,同时给出了PID的调节步骤、手自动无扰切换的实现方式此外还对通過自整定方式进行PID调节给出了控制面板启动和编程启动两种详细方案。如果想要了解更详细的PID算法请参考《S7-200系统手册》中PID指令部分的相關内容。

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输入/输出支持的信号类型

在有些控制中需要PID反作用调节例如:在夏天控制空调制冷时,若反馈温度(过程值)低于设定温度需要关阀,减小输出控制(减少冷水流量等)这就是PID反作用调节(在PID正作用中若过程值小于设定值,则需要增大输出控制)

若想实现PID反作用调节,需要把PID回路的增益设为负数对于增益为0的积分或微分控制来说,如果指定积分时间、微分时间为负值则是反作用回路。

计算机化的PID控制算法有几个关键的参数Ts(采样时间)Kc(Gain,增益)Ti(积分时间常数),Td(微分时间常数)PID参数的取值,以及它们之间的配合对PID控制是否稳定具有重要的意义:

计算机必须按照一定的时间间隔对反馈进行采样,才能进行PID控制的计算采样时间就是对反馈进行采样的间隔。短于采样时间间隔的信號变化是不能测量到的过短的采样时间没有必要,过长的采样间隔显然不能满足扰动变化比较快、或者速度响应要求高的场合

编程时指定的PID控制器采样时间必须与实际的采样时间一致。S7-200中PID的采样时间精度用定时中断(PID向导用SMB34)来保证

增益(Gain,放大系数比例常数)

增益与偏差(给定与反馈的差值)的乘积作为控制器输出中的比例部分。提高响应速度减少误差,但不能消除稳态误差当比例作用过大時,系统的稳定性下降

偏差值恒定时,积分时间决定了控制器输出的变化速率

积分时间的长度相当于在阶跃给定下,增益为“1”的时候输出的变化量与偏差值相等所需要的时间,也就是输出变化到二倍于初始阶跃偏差的时间

如果将积分时间设为最大值,则相当于没囿积分作用

偏差值发生改变时,微分作用将增加一个尖峰到输出中随着时间流逝减小。微分时间越长输出的变化越大。微分使控制對扰动的敏感度增加也就是偏差的变化率越大,微分控制作用越强微分相当于对反馈变化趋势的预测性调整。

如果将微分时间设置为0僦不起作用控制器将作为PI调节器工作。

提高响应速度减少误差,但不能消除稳态误差当比例作用过大时,系统的稳定性下降 (由小箌大单独调节)

消除稳态误差,使系统的动态响应变慢积分时间越小,积分作用越大 偏差得到的修正越快,过短的积分时间有可能造荿不稳定(将调好的比例增益调整到50%~80%后,由大到小减小积分时间)

超前调节能预测误差变化的趋势,提前抑制误差的控制作用从而避免了被控量的严重超调。可以改善系统的响应速度和稳定性对噪声干扰有放大作用,对具有滞后性质的被控对象应加入微分环节。

茬S7-200中PID功能是通过PID指令功能块实现通过定时(按照采样时间)执行PID指令块,按照PID运算规律根据当时的给定、反馈、比例-积分-微分数據,计算出控制量

PID指令块通过一个PID回路表交换数据,这个表是在V数据存储区中的开辟长度为80字节(Micro/WIN4.0之前老版本,未增加PID自整定时回路表长度为36字节)只接受0.0 - 1.0之间的实数(实际上就是百分比)作为反馈、给定与控制输出的有效数值。

0 过程变量必须在0.0~1.0之间
设定值,必须茬0.0~1.0之间
输出值必须在0.0~1.0之间
增益是比例常数,可正可负
采样时间单位为秒,必须是正数
积分时间或复位(Ti) 积分时间或复位单位是分鍾
微分时间或速率(Td) 微分时间或速率,单位为分钟
积分项前项必须在0.0~1.0之间
过程变量前值(PVn-1) 包含最后一次执行PID指令时存储的过程变量徝
36~79 保留给自整定变量

通过指令块实现PID,需要自己编程实现采样较复杂,容易出错也不能用PID控制面板进行调节,不建议使用如果没有特殊要求,尽量使用PID向导

由于PID指令块只接受0.0 - 1.0之间的实数(实际上就是百分比)作为反馈、给定与控制输出的有效数值。因此必须把外圍实际的物理量与PID功能块需要的(或者输出的)数据之间进行转换。这就是所谓输入/输出的转换与标准化处理

下面简单做一个采样时间為250ms的PID例程:

第一步,主程序内实现250ms的定时中断如图2.2.1

第二步,在定时中断INT_0内调用PID指令块

  1. TBL:控制回路表的起始地址 (VB100表示 VB100~VB180地址用于该回路PID,具体地址含义以回路表为准)

第三步,根据PID回路表设置参数,在数据块设置各参数的初始值

图2.2.3. 数据块设置参数

第四步程序下载后根據反馈VD0与给定VD4观察输出VD8(直接通过状态表修改给定反馈即可,真正应用时需要将外围物理量做转换)

PID指令块可以在主程序/子程序里调用嗎?
可以但是不推荐,主程序/子程序的循环时间每个周期都可能不同不能保证精确的采样,建议用定时中断例如SMB34/SMB35。

采样时间是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向导)

在Micro/WIN中的命令菜单中选择工具 >指令向导,然后在指令向导窗口中選择PID指令:

在使用向导时必须先对项目进行编译在随后弹出的对话框中选择“是” ,确认编译如果已有的程序中存在错误,或者有没囿编完的指令编译不能通过。

如果你的项目中已经配置了一个PID回路则向导会指出已经存在的PID回路,并让你选择是配置修改已有的回路还是配置一个新的回路:

图3.2. 选择需要配置的回路

第一步:定义需要配置的PID回路号

第二步:设定PID回路参数

  1. 定义回路设定值(SP,即给定)的范围:
    在低限(Low Range)和高限(High Range) 输入域中输入实数缺省值为0.0和100.0,表示给定值的取值范围占过程反馈量程的百分比这个范围是给定值的取徝范围。它也可以用实际的工程单位数值表示
  2. Gain(增益): 即比例常数。
  3. Integral Time(积分时间):如果不想要积分作用可以把积分时间设为无穷夶:输入“INF”。
  4. Derivative Time(微分时间):如果不想要微分回路可以把微分时间设为0 。
  5. Sample Time(采样时间):是PID控制回路对反馈采样和重新计算输出值的時间间隔在向导完成后,若想要修改此数则必须返回向导中修改,不可在程序中或状态表中修改

注意:关于具体的PID参数值,每一个項目都不一样需要现场调试来定,没有所谓经验参数

第三步:设定回路输入输出值

在图3.1.3中,首先设定过程变量的范围:

    • Unipolar: 单极性即輸入的信号为正,如0-10V或0-20mA等
    • Bipolar:双极性输入信号在从负到正的范围内变化。如输入信号为±10V、±5V等时选用
    • 在a.设置为单极性时缺省值为0 - 32000,对应输入量程范围0 - 10V或0 - 20mA等输入信号为正
    • 在a.设置为双极性时,缺省的取值为-32000 - +32000对应的输入范围根据量程不同可以是±10V、±5V等
    • 在a.使用20%偏移时,取值范围为6400 - 32000不可改变。
  1. 可以选择模拟量输出或数字量输出模拟量输出用来控制一些需要模拟量给定的设备,如比例阀、变频器等;數字量输出实际上是控制输出点的通、断状态按照一定的占空比变化可以控制固态继电器(加热棒等)
  2.  选择模拟量则需设定回路输出变量值的范围,可以选择:
    • Bipolar:双极性输出可为正负10V或正负5V等

如果选择了开关量输出,需要设定此占空比的周期

第四步:设定回路报警选項

图3.1.4. 设定回路报警限幅值

向导提供了三个输出来反映过程值(PV)的低值报警、高值报警及过程值模拟量模块错误状态。当报警条件满足时输絀置位为1。这些功能在选中了相应的选择框之后起作用

  1. 使能低值报警并设定过程值(PV)报警的低值,此值为过程值的百分数缺省值为0.10,即報警的低值为过程值的10%此值最低可设为0.01,即满量程的1%
  2. 使能高值报警并设定过程值(PV)报警的高值此值为过程值的百分数,缺省值为0.90即報警的高值为过程值的90%。此值最高可设为1.00即满量程的100%
  3. 使能过程值(PV)模拟量模块错误报警并设定模块于CPU连接时所处的模块位置。“0”就是苐一个扩展模块的位置

第五步:指定PID运算数据存储区

图3.1.5. 分配运算数据存储区

PID指令(功能块)使用了一个120个字节的V区参数表来进行控制回路嘚运算工作;除此之外PID向导生成的输入/输出量的标准化程序也需要运算数据存储区。需要为它们定义一个起始地址要保证该地址起始嘚若干字节在程序的其它地方没有被重复使用。如果点击“建议地址”则向导将自动为你设定当前程序中没有用过的V区地址。

自动分配嘚地址只是在执行PID向导时编译检测到空闲地址向导将自动为该参数表分配符号名,用户不要再自己为这些参数分配符号名否则将导致PID控制不执行。

第六步:定义向导所生成的PID初使化子程序和中断程序名及手/自动模式

图3.1.6. 指定子程序、中断服务程序名和选择手动控制

向导已經为初使化子程序和中断子程序定义了缺省名你也可以修改成自己起的名字。

  1. 指定PID初使化子程序的名字
  2. 指定PID中断子程序的名字
  1. 如果你嘚项目中已经存在一个PID配置,则中断程序名为只读不可更改。因为一个项目中所有PID共用一个中断程序它的名字不会被任何新的PID所更改。
  2. PID向导中断用的是SMB34定时中断在用户使用了PID向导后,注意在其它编程时不要再用此中断也不要向SMB34中写入新的数值,否则PID将停止工作

此處可以选择添加PID 手动控制模式。在PID手动控制模式下回路输出由手动输出设定控制,此时需要写入手动控制输出参数一个0.0-1.0的实数代表輸出的0%-100%而不是直接去改变输出值。

第七步:生成PID子程序、中断程序及符号表等

一旦点击完成按钮将在你的项目中生成上述PID子程序、中断程序及符号表等。

图3.1.7. 生成PID子程序、中断程序和符号表等

第八步:配置完PID向导需要在程序中调用向导生成的PID子程序(如下图)

在用戶程序中调用PID子程序时,可在指令树的Program Block(程序块)中用鼠标双击由向导生成的PID子程序在局部变量表中,可以看到有关形式参数的解释和取值范围

  1. 必须用SM0.0来使能 PIDx_INIT 子程序,SM0.0 后不能串联任何其他条件而且也不能有越过它的跳转;如果在子程序中调用 PIDx_INIT 子程序,则调用它的子程序也必须仅使用 SM0.0 调用以保证它的正常运行
  2. 此处输入过程值(反馈)的模拟量输入地址
  3. 此处输入设定值变量地址(VDxx),或者直接输入设定徝常数根据向导中的设定0.0-100.0,此处应输入一个0.0-100.0的实数例:若输入20,即为过程值的20%假设过程值AIW0是量程为0-200度的温度值,则此处的設定值20代表40度(即200度的20%);如果在向导中设定给定范围为0.0 - 200.0则此处的20相当于20度
  4. 此处用I0.0控制PID的手/自动方式,当I0.0为1时为自动,经过PID运算从AQW0輸出;当I0.0为0时PID将停止计算,AQW0输出为ManualOutput(VD4)中的设定值此时不要另外编程或直接给AQW0赋值。若在向导中没有选择PID手动功能则此项不会出现
  5. 萣义PID手动状态下的输出,从AQW0输出一个满值范围内对应此值的输出量此处可输入手动设定值的变量地址(VDxx),或直接输入数数值范围为0.0-1.0の间的一个实数,代表输出范围的百分比例:如输入0.5,则设定为输出的50%若在向导中没有选择PID手动功能,则此项不会出现
  6. 此处键入控淛量的输出地址
  7. 当高报警条件满足时相应的输出置位为1,若在向导中没有使能高报警功能则此项将不会出现
  8. 当低报警条件满足时,相應的输出置位为1若在向导中没有使能低报警功能,则此项将不会出现
  9. 当模块出错时相应的输出置位为1,若在向导中没有使能模块错误報警功能则此项将不会出现

调用PID子程序时,不用考虑中断程序子程序会自动初始化相关的定时中断处理事项,然后中断程序会自动执荇

第九步:实际运行并调试PID参数

没有一个PID项目的参数不需要修改而能直接运行,因此需要在实际运行时调试PID参数具体调节过程可以参栲 PID调节

为了更好地理解 PID向导的编程,可参考下面的例程

通过上述向导步骤实现PID,为求程序简单可读未设置回路报警选项,仅简单常用配置具体参见例程,关注程序注释以及符号表内容可帮助更快理解程序

注意:此指令程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担由于它是免费的,所以不提供任何担保错误纠正和热线支持,用户不必为 此聯系西门子200中断程序 累计流量技术支持与服务部门

3.2. PID向导生成的组件介绍

PID向导完成后,自动生成的除PID子程序(上一节已经介绍)以外还有數据块、符号表以及中断程序等组件

完成PID Wizard配置后,会为每个PID回路生成一个数据块PIDx_DATA(x=0-7)图中可以看出数据块的内容实际就是PID回路表以及报警嘚高/低限位。实际也说明PID向导是基于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: 过程反馈参数值的入口

在這里,给定、反馈的入口参数不是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的百分比)

n 为比例系数,为了精度高些可以设置n=10等等

2. 一个温度控制的PID系统温度值直接由热电偶测量,输入到EM231 TC(热电偶)模块转换为温喥值热电偶为J型,其测量范围为 -150.0°C - 1200.0 °C则可按如下设置给定的范围。

在表3.3.2的例子中给定和反馈可以按照如下方法设置

STEP 7-Micro/WIN V4.0中提供了一个PID调節控制面板,具有图形化的给定、反馈、调节器输出波形显示可以用于手动调试PID参数。另外从面板中还可以启动、停止自整定功能对於没有“自整定PID”功能的老版CPU,也能实现PID手动调节

要使用PID调节控制面板,PID编程必须使用PID向导完成

    显示过程变量的值及其棒图 显示当前使用的设定值、采样时间、PID 参数值及显示当前的输出值和棒图
  1. 可显示过程值、设定值及输出值的PID趋势图
  1. 过程变量和设定值的取值范围及刻喥
  2. PID输出的取值范围及刻度
  3. 以不同颜色表示的设定值、过程变量及输出的趋势图
  4. 调节参数。这里你可以:
    选择PID参数的显示:当前参数(Current)、嶊荐参数(Suggested)、手动输入(Manual)
    选择Advanced(高级)按钮进入高级参数设定
  5. 这里你可以选择需要监视或自整定的PID回路时间选项设定
  6. 这里你可以设定趨势图的时基,时基以分为单位图例颜色
  7. 这里你可以看到趋势图中不同的颜色代表不同的值的趋势帮助按钮PID信息显示窗口关闭PID调节面板

使鼡PID调节面板手动调整增益、积分时间、微分时间参数修改的数值能否进入到PLC?

可以,但是需要在参数设置完以后手动点击调节面板的Update PLC(更噺PLC)按钮来更新PLC中的参数。

PID已经调整合适如何正式确定参数?

可以在Data Block(数据块)中直接写入参数

做完PID向导后,能否查看PID生成的子程序中断程序? 

PID向导生成的子程序中断程序用户是无法看到的,也不能对其进行修改没有密码能够打开这些子程序,一般的应用也没囿必要打开查看

PID向导生成的程序为何不执行或没有输出?

  • 在程序的其它部分不要再使用SMB34定时中断也不要对SMB34赋值
  • 确认当前工作状态:手動还是自动

如何根据工艺要求有选择地投入PID功能?

可使用“手动/自动”切换的功能PID向导生成的PID功能块只能使用SM0.0的条件调用。

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 控制子程序

  1. 自动/手动控制,“1”=自动“0”=手动
  2. 手动控制输出值,0.0 - 1.0 之间的一个实数

要实现无扰动切换必须:

  • 在从自动向手动切换时,使手动输出值(VD2004)等于当前的实际控制输出值;
  • 在从手动向自动切换使使设定值相当于当前的过程反馈值。

为此可编写类似下图所礻的程序,放在 PID 控制子程序之前:

4.1.2. 无扰切换处理程序

  1. 从自动向手动切换时使手动输出值等于实际当前值
  2. 从手动向自动切换时,把当前反饋量换算为相应的给定值

上述程序中的 Scale_I_to_R 就是量程变换指令库中的子程序这是为了解决过程反馈与设定值之间的换算问题。用户也可以自巳编程换算或者根据反馈与给定的取值范围决定是否需要换算。

此段程序适用于 STEP 7-Micro/WIN V4.0 SP5 及以前版本仅供参考,如果在实际项目中使用上述程序未必一定适用。用户需要根据实际工艺决定自己的编程思路

建议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参数的调试是一个综合的、互相影響的过程,实际调试过程中的多次尝试是非常重要的步骤也是必须的。

S7-200 中使用的自整定算法是基于 K.J.?str?m 和 T. H?gglund 在 1984 年提出的延时反馈算法经过这②十年,继电反馈算法已被应用于工业控制的各个领域可以使用操作员面板中的用户程序或者 PID 整定控制面板来启动自整定功能。在同一時间不仅仅只有一个 PID 回路可以进行自整定,如果需要的话所有 8 个 PID 回路可以同时进行自整定。PID自整定算法向您推荐增益值、积分时间值囷微分时间值您也可以为您的调节回路选择快速响应、中速响应、慢速响应或者极慢速响应等调节类型。

要进行自整定的回路必须处于洎动模式

在开始PID自整定调整前整个PID控制回路必须工作在相对稳定的状态(稳定的PID是指过程变量接近设定值,输出不会不规则的变化且囙路的输出值在控制范围中心附近变化。)

理想状态下自整定启动时,回路输出值应该在控制范围中心附近 自整定过程在回路的输出Φ加入一些小的阶跃变化,使得控制过程产生振荡 如果回路输出接近其控制范围的任一限值,自整定过程引入的阶跃变化可能导致输出徝超出最小或最大范围限值 如果发生这种情况,可能会生成自整定错误条件当然也会使推荐值并非最优化。

为什么启动自整定之前需要PID控制回路工作在相对稳定状态?

启动自整定后,回路计算自滞后序列时不能执行正常的 PID 计算,此时回路输出时一个定值不会根据偏差变化。 因此在启动自整定序列之前,控制过程应处于稳定状态 这样可以得到更好的滞后值结果,同时也可以保证自滞后序列期间控淛过程不会失控

S7-200 中的 PID自整定参数是回路表40-80字节,见下图:

b.AT状态(ASTAT):自整定的输出状态字节PID控制面板自整定时的相关状态也是根据由該字节判断。

c.AT结果(ARES):PID自整定结果需要注意,启动PID自整定之前需要确保该字节0位为0尤其是自己编程启动自整定,可能需要手动设置為0

d.AT配置(ACNFG): 自整定之前先对响应模式、偏差、滞后等做相关设置。

e.偏移(DEV)~ h.看门狗时间(WDOG): 参考PID自整定高级参数设置

i.推荐增益(AT_Kc)~ k.推荐微分时间(AT_Td:PID自整定完成后,整定所得推荐参数放置在该地址

l.实际输出阶跃幅度(ASTEP):调节开始后,PID计算出的新的输出阶跃值

m.實际滞后(AHYS): 重新计算得到的实际滞后值。

S7-200的PID自整定实现方式有两种一种是通过控制面板,另一种是自己编程

通过控制面板实现PID自整定,PID必须是向导生成

自己编程实现PID自整定向导或者PID指令块实现PID均可,具体步骤可以查看:如何编程启动自整定

下面介绍通过PID控制面板實现自整定:

第一步:在PID Wizard (向导)中完成PID功能配置正确调用PID子程序 。

第二步:打开PID调节控制面板设置PID回路调节参数。

在Micro/WIN V4.0在线的情况下從主菜单Tools(工具) > PID Tune Control Panel(PID调节控制面板)进入PID调节控制面板中,如果面板没有被激活(所有地方都是灰色)可点击Configure(配置)按钮运行CPU。

在PID调節面板图3.4.1的e.区选择要调节的PID回路号在d.区选择Manual(手动),调节PID参数并点击Update(更新)使新参数值起作用,监视其趋势图根据调节状况改變PID参数直至调节稳定。

为了使PID自整定顺利进行应当做到:

  • 使PID调节器基本稳定,输出、反馈变化平缓并且使反馈比较接近给定
  • 设置合适嘚给定值,使PID调节器的输出远离趋势图的上、下坐标轴以免PID自整定开始后输出值的变化范围受限制

第三步:在图3.4.1的d.区点击Advanced(高级)按钮,设定PID自整定选项如果不是很特殊的系统,也可以不加理会

在此允许你设定下列参数:

1.你可以选中复选框,让自整定来自动计算死区徝和偏移值   对于一般的PID系统建议使用自动选择。

死区值规定了允许过程值偏离设定值的最大(正负)范围过程反馈在这个范围内的变囮不会引起PID自整定调节器改变输出,或者使PID自整定调节器“认为”这个范围内的变化是由于自己改变输出进行自整定调节而引起的PID自整萣开始后,只有过程反馈值超出了该区域PID自整定调节器才会认为它对输出的改变发生了效果。这个值用来减少过程变量的噪声对自整定嘚干扰从而更精确地计算出过程系统的自然振动频率。如果选用自动计算则缺省值为2%。

如果过程变量反馈干扰信号较强(噪声大)洎然变化范围就大可能需要人为设置一个较大的值。但这个值的改变要与下面的偏差值保持1:4的关系

3.Deviation(偏差): 偏差值决定了允许过程變量偏离设定值的峰峰值。如果选择自动计算该值它将是死区的4倍,即8% 有些非常敏感的系统不允许过程量偏离给定值很多,也可以囚工设置为比较小的值但是要和上述“死区”设置保持比例关系。这就是说一个精度要求高的系统,其反馈信号必须足够稳定

4.Initial Output Step(初始步长值):PID调节的初始输出值。 PID自整定开始后PID自整定调节器将主动改变PID的输出值,以观察整个系统的反应初始步长值就是输出的变動第一步变化值,以占实际输出量程的百分比表示

5.Watchdog Time(看门狗时间):过程变量必须在此时间(时基为秒)内达到或穿越给定值,否则会產生看门狗超时错误 PID自整定调节器在改变输出后,如果超过此时间还未观察到过程反馈(从下至上或从上至下)穿越给定曲线则超时。如果能够事先确定实际系统响应非常慢可以加长这个时间。

6.动态响应选项:根据回路过程(工艺)的要求可选择不同的响应类型:快速、中速、慢速、极慢速

快速:可能产生超调,属于欠阻尼响应

中速:在产生超调的边缘属于临界阻尼响应

慢速:不会产生任何超调,属于过阻尼响应

极慢速:不会产生任何超调属于严重过阻尼响应

用户在这里指定需要达到的系统控制效果,而不是对系统本身响应快慢的判断

7.设定完参数点击OK键回到PID调节控制面板的主画面。

第四步:在手动将PID调节到稳定状态后即过程值与设定值接近,且输出没有不規律的变化并最好处于控制范围中心附近。此时可点击图3.4.1的d.区内的Start Auto Tune按钮启动PID自整定功能这时按钮变为Stop Auto Tune。这时只需耐心等待系统完成洎整定后会自动将计算出的PID参数显示在图3.4.1的d.区。当按钮再次变为Start Auto Tune时表示系统已经完成了PID自整定。

要使用自整定功能必须保证PID回路处于洎动模式。开始自整定后给定值不能再改变。

第五步:如果用户想将PID自整定的参数应用到当前PLC中则只需点击Update PLC,将整定后推荐参数更新箌PID的增益、积分时间、微分时间内

完成PID调整后,最好下载一次整个项目(包括数据块)使新参数保存到CPU的EEPROM中。

控制面板上会显示当前洎整定的状态吗

可以,在控制面板右下方空白处会显示当前的自整定所处阶段见下图:

图中错误是因为在手动状态下启动自整定。

PID自整定具体是怎样实现的

1. 回路满足条件,启动PID自整定

2. 计算自滞后和自偏移:如果选择自动确定滞后值/偏移值,PID 自整定器将进入滞后确定序列该序列包含一段时间内的过程变量采样值(为了得到具有统计意义的采样数据,至少要有100个采样值如果回路的采样时间为200毫秒,則采集100个样本需要20秒采样时间较长的回路需要更多时间。即使回路的采样时间小于 200毫秒从而采样100次的时间不需要20秒,滞后确定序列仍嘫需要至少20秒的采样时间计算自滞后序列时,不能执行正常的PID计算输出保持上一周期PID计算值。)然后根据采样结果计算出标准偏移。滞后参数指定了相对于设定值的偏移(正或负)PV(过程变量)在此偏移范围内时,不会导致控制器改变输出值 偏移用于减小 PV 信号中噪声的影响,从而更精确地计算出过程的固有振动频率

3. 自整定序列:在得到滞后值和偏移值之后开始执行自整定序列(输出值的上述变囮会导致过程变量值产生相应的变化。 当输出的变化使 PV 远离设定值以至于超出滞后区范围时自整定器就会检测到过零事件。 每次发生过零事件时自整定器将反方向改变输出。整定器会继续对 PV 进行采样并等待下一个过零事件。要完成序列整定器总共需要12次过零事件。過程变量的PV振动幅度和频率代表着控制过程增益和自然频率),根据自整定过程期间采集到的过程的频率和增益的相关信息能够计算絀最终增益和频率值。通过这些值可以计算出增益(回路增益)、复位(积分时间)和速率(微分时间)的建议值

4. 自整定序列完成后,囙路输出会恢复到初始值 下一次执行回路时,将执行正常的 PID 计算

想要了解PID自整定的详细过程,请查看S7-200系统手册第15章 PID自整定和PID控制面板

5.4. 通过编程启动自整定

第一步:在数据块定设置自整定相关参数:偏差、滞后、初始输出阶跃响应、看门狗时间、动态响应。

第二步:确認PID自整定的2个先决条件是否满足:PID指令块正常调用同时被控系统处于相对稳定状态。

第三步:确认自整定AT结果字节0位为0设置AT控制字节為1,(M3.1)启动自整定

第四步:整定过程中如果想要暂停自整定,可以设AT控制为0并手动(M3.2) 将AT结果清零,复位启动按钮

第四步:自整定成功(VB142=128)后,选择(M3.3)是否将整定后的推荐参数送至PID参数并复位相关自整定参数

以上步骤仅供参考,需要根据实际情况做不同的变换。

1. PID输出在最夶值与最小值之间振荡(曲线接触到坐标轴)

解决方法: 确定在启动PID自整定前过程变量和输出值已经稳定。并检查Watchdog Time的值将其适当增大。

结果代码(在AT结果 ARES中查看)

EN位在调谐进行中被清除

02 由于过零看门狗超时而中止

半循环持续时间超过过零看门狗间隔

03 由于进程超出范围而Φ止

-在自动滞后序列过程中

04 由于滞后值超出最大值而中止

用户指定的滞后值或自动确定的滞后值 > 最大值

05 由于非法配置值而中止

-用户指定的偏差值=滞后值或 > 最大值
-过零看门狗间隔时间 < 最小值
-回路表中的抽样时间值为负数

06 由于数字错误而中止

遇到非法的浮点数或除数为零

07 执行PID指囹时无使能位(手动模式

当自动调谐在进行中或被请求时PID指令以无使能位的方式执行

08 自动调谐只可用于P、PI、PD或PID等回

回路类型不是P、PI、PD或PID

}

??????假设现场气体流量计仪表位号为 FIT-2101 铭牌标注量程 35 - 1000 m3/h,信号输出类型为4-20mA不管选用何种类型PLC和PLC编程软件,把该现场仪表流量累积通过PLC编程软件实现出来(有DA输入及周期循环累積就可以了) ? ??????? 应擂者需说明采用何种类型PLC,需要粘贴实现流量累计的PLC程序同时最好有相应的程序说明。??????? 本周末结贴三个最优回帖分別获得25MP、15MP、10MP! ??????? MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位类似于大家熟悉的QB,1个MP=1元人民币 ??????? MP有什么鼡?兑换服务:以1个MP=1元来置换中国工控网的相关服务 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑換)。 总记录数 29 总页数 1 当前页 1 ??1 ?????? 引用 | 回复 | 08:55:09 1楼 永不止步 打酱油的路过。。。。 引用 | 回复 | 09:08:53 2楼 小楼 气体流量计采用模拟量进行累加,进荇气体累计的方式不是很可取 当然这个可以作为一个算法。 引用 | 回复 | 09:15:43 3楼 饶歌 ??????? 天然气的计算比较复杂由于气温、湿度、压力、天然气的純度都影响积算,今天的擂台题设定在理想标准状态下 引用 | 回复 | 11:25:50 4楼 工控十年 采用丰炜VH-20AR PLC,主机自带4AD/2DA通过读写特殊寄存器操作。程序中写嘚是每秒读一次60秒求一次平均流量(最简单的总和平均,没做细处理)最后做累加。M0为流量清空按钮写的比较简单,只为抛砖引玉也没调试,有错误是肯定的欢迎指点。 引用 | 回复 | 11:56:18 5楼 云锋 这样的程序只要功能能够实现,路径并不重要不过对于气体流量计,比较繁琐要看工艺要求是标准流量还是工况流量。 至于PLC类型大多数都能实现只要有AI输入模块,再者需要编程计数模块程序和清零程序及FIT-2101 嘚预处理程序包括AD转换及判断程序。还要有工况与标准的转换程序具体的编程保密呵呵。这应该属于知识产权,不对外泄露 引用 | 回複 | 19:04:23 8楼 老菜鸟 ??????? 我本来只是打下酱油,准备路过的但看到楼上几位比较积极,也看到有人喜欢保密这个程序所以我对这个程序来具体说明並公开一下。 引用 | 回复 | 19:06:52 9楼 老菜鸟 我下面的程序属于笔者原创所有文字及程序均由笔者自己书写,并非摘抄! 该程序是以西门子200中断程序 累计流量S7-200系列PLC为例来编写的 该程序经过在S7-224上面测试成功,基本上无误差!(误差在小数点后几位) 引用 | 回复 | 19:08:17 10楼 老菜鸟 下面先对程序的方案、思维方式、编程方法、注意事项等方面进行说明,然后再贴上PLC程序 引用 | 回复 | 19:09:10 11楼 老菜鸟 ??????? 对于流量累计而言,看起来好像是个很简单嘚程序但实质上还是有很多需要注意的地方。写累加程序不难但要做到误差最小,就不是那么容易的事情了简述如下。 引用 | 回复 | 19:15:19 12楼 咾菜鸟 1. 首先是采样时间采用的计时方式的问题可能有些人会采用定时器(包括1ms/10ms/100ms/1s定时器及秒脉冲等)来作为采样周期--------这樣会增大误差。 ??????? 可以用计时器指令来来作为采样间隔时间每次计时器到了设定值就采样一次。计时器的精度不可能高于它的时基因此烸次计时器超时和再次开始计时的时候,都要产生一个时基的正或负的误差例如,10ms为一个时基的计时器预定计10次其时间计算将是100ms正或負10ms。假设你采用100ms定时器来作为采样周期那么在程序运行过程中,实际上的有效采样周

}

我要回帖

更多关于 西门子200中断程序 累计流量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信