6ES7223-1BL22-0XA8代理直销
S7-300/400的过程映像分区与中断功能配合,可以显著地减少PLC的输入、输出响应时间。过程映像区分为OB1(主程序)过程映像(OB1-PI)和过程映像分区(PIP)。
1.OB1过程映像
OB1过程映像就是普通的PLC的输入、输出区。PLC采用循环执行用户程序的方式,每次循环CPU将OB1过程映像输出区的数据写到输出模块;读取输入模块的输入状态,保存到OB1过程映像输入区;然后执行用户程序。这种工作方式不能马上将逻辑运算得到的输出点的值送输出模块,使用的输入点的状态也不是新的,因此造成了输入、输出的响应延迟。
2.过程映像分区
可以为S7-400的输入/输出地址分配多15个过程映像分区 (PIP)。
在硬件组态时,将一块输入模块和一块输出模块组态为属于某个过程映像分区,例如PIP1(见下图)。
打开CPU的属性对话框,在“时刻中断”选项卡,将过程映像分区PIP1分配给OB10(见下图)。
在调用OB10时,CPU首先自动读入被组态为属于过程映像分区PIP1的输入模块的输入值,然后执行OB10中的程序。执行完后,输出值被立即写至被组态为属于PIP1的输出模块。上述过程能保证得到小的输入、输出响应时间。
除了上述的在调用OB时的过程映像分区更新方式之外,还可以在用户程序中调用SFC 26 (UPDAT_PI) 和SFC 27 (UPDAT_PO)来更新过程映像分区。
说明:
以下描述了在STEP 7 MicroWIN中可能的一种间接寻址使用.
例子中包含了OB1,一个数据块和一个状态表.
OB1包含4段程序。
图1:在SFC功能块中的4段程序
注意第2段程序:
*AC1 中的 (*)星号意味着正使用AC1所指向的地址内容,而并非AC1本身的值
另一部分是数据块.
图2:需要一个状态表用于测试和监控.
图3:下载程序到控制器中,然后打开状态表,点击 "Table Status" 观察变化.
首先保持监控当前的状态,可以看到VB200 到VB210 的值为1-10.而VB 220 之后全为空白.
当I0.0 为1时,这两点将被创建.
当I0.1为1时,从VB200 开始的连续前4个字节将被传送到VB220-VB223 中.
在第3段程序中将I0.0 置0可以分别增加1个地址字节,通过触发I0.2的上升沿可以增加多个地址字节.
在第4段程序中将I0.0 置0可以分别减少1个地址字节,通过触发I0.3的上升沿可以减少多个地址字节.
从入口条目为1109582.的"S7-200自动化系统" 手册中可以找到关于该主题的进一步信息,另外通过在线帮助输入"直接和间接寻址"也是非常有用的.
重要事项!
该项目/例子是免费的,任何用户均可以自由使用,拷贝和转发,因此该项目的所有者并没有责任承担关于该软件功能和兼容性问题,用户自己将承担相关风险,另外由于软件是免费的,因而并没有关于错误纠正和热线支持的相关授权和保证。
OB按优先级大小执行,如果所发生事件的优先级高于当前执行的OB ,则中断此 OB 的执行。优先级相同的事件,将按发生的时间顺序进行处理。
与S7-300/400比较,S7-1200/1500的错误处理有了较大的变化,本文主要介绍S7-1200/1500所支持的错误处理组织块以及CPU对这些错误的响应。
图1-1
S7-1200不再支持同步错误中断组织块OB121,OB122 。
图1-2
S7-1200与S7-1500支持的错误处理组织块的块号与S7-300/400保持一致,不同的是S7-1500除时间错误中断组织块OB80的优先级22不能改变外,其它的错误处理组织块的优先级都可以修改。如诊断中断OB82:
图1-3
除了可以修改错误中断OB的优先级,S7-1500的事件中断(如硬件中断)的优先级也可以修改,这样用户通过修改优先级可避免重要的中断请求被其它中断请求延迟或中断。
CPU对错误处理组织块的响应表:
错误处理OB | 故障类别 | ‘到达事件‘ 触发 | ‘离去事件‘ 触发 | OB没有装载CPU停机 | |||
S7-1200 | S7-1500 | S7-300/400 | |||||
OB80 | 超出大循环时间* | 异步 | 是 | 否 | 是 | 是 | 是 |
时间错误** | 否*** | 否*** | 是 | ||||
OB82 | 异步 | 是 | 是 | 否*** | 否*** | 是 | |
OB83 | 异步 | 是 | 是 | - | 否*** | 是 | |
OB86 | 异步 | 是 | 是 | - | 否*** | 是 | |
OB121 | 同步 | 是 | 否 | - | 是 | 是 | |
OB122 | 同步 | 是 | 否 | - | 否*** | 是 |
表2-1
注:
-: 不支持。
*: 超出大循环时间请求OB80时而下载OB80并不会使CPU停机,但如果一个周期内超时两倍的循环监控时间 S7-1200/1500/300/400都会停机。
**: 由时间事件(如循环中断,延时中断,时间中断)触发的时间错误。
***:CPU不会停机,但会在诊断缓冲区产生诊断记录。
GET_ERROR和GET_ERR_ID是“获取本地错误信息”指令,S7-1200/1500可通过编程用来查询程序块内出现的错误,这种程序执行中发生的错误就是所说的‘同步‘错误。
图3-1
“获取本地错误信息”指令支持块内进行本地错误处理。将“获取本地错误信息”插入块
的程序代码中时,如果发生错误,则将忽略所有预定义的系统响应。
GET_ERROR指令可以读到详细的错误信息,GET_ERR_ID只读到其中的错误编号。
具体用法可参考软件在线帮助或参考STEP7 Professional V12的手册
因为GET_ERROR和GET_ERR_ID对PLC的同步错误处理的影响相同,下面只对GET_ERROR指令进行说明。
因为S7-1200不支持OB121,OB122,在发生‘同步‘错误时,只在CPU的诊断缓冲区产生错误记录:同时ERR LED闪烁
举例:IO访问错误
程序中访问了外设地址ID1000:P,对S7-1200来说,ID1000是默认分配给高速计数通道HSC1,但是在实际的组态中没有使能HSC1,那么就不存在这个外设。
图3-2
S7-1200每执行一次这条指令,在诊断缓冲区产生一条错误记录,同时ERR LED闪烁,直到 ”Tag_1”复位。
图3-3
在发生错误指令的下面执行GET_ERROR:
图3-4
错误仍然存在,但CPU不报错,诊断缓冲区也不会产生任何相关错误记录。
与S7-1200比较,因为S7-1500支持两个同步错误处理组织块OB121,OB122,GET_ERROR对S7-1500的同步错误处理的影响还要考虑对OB121,OB122的影响。
本文的表2-1说明了S7-1500没有执行GET_ERROR的情况下CPU的响应,下面对同步错误发生时执行GET_ERROR后CPU的响应。
S7-1500在发生两种同步错误时在有无下载对应错误处理组织块(程序错误:OB121,IO访问错误:O122)的响应是不同的,但在发生这两种错误的程序块中执行GET_ERROR后,S7-1500将忽略所有预定义的对这个程序块中出现的错误的系统响应,因此会产生以下结果:
n CPU ERR LED不会闪烁
n 诊断缓冲区不会产生错误记录
n 不再触发OB121和OB122,发生程序错误时即使不下载OB121 CPU也不会停机