Step7 OB 组织块介绍和使用技巧
每种类型的 OB 块的分析及其使用方法:
1、自由循环组织块 OB1
S7 CPU 启动完成后,操作系统循环执行 OB1,OB1 执行完成后,操作系统再次启动 OB1。在 OB1
中可以调用 FB、SFB、FC、SFC 等用户程序使其循环执行。除 OB90 以外,OB1 优先级最低,可以被
其他 OB 中断。OB1 默认扫描监控时间为 150ms(可设置),扫描超时,CPU 自动调用)B80 报错,如
果程序中没有建立 OB80,CPU 进入停止模式。
2、日期中断组织块 OB10~OB17
在 CPU 属性中,可以设置日期中断组织块 OB10~OB17 触发的日期、执行模式(到达设定的触发日
期后,OB 只执行一次或按每分、每小时、每周、每月周期执行)等参数,当 CPU 的日期值大于设定的
日期值时,触发相应的 OB 并按设定的模式执行。在用户程序中也可以通过调用 SFC28 系统函数设定
CPU 日期中断的参数,调用 SFC30 激活日期中断投入运行,与在 CPU 属性中的设置相比,通过用户程
序,可以在 CPU 运行时灵活地修改设定的参数,两种方式可以任意选择,也可以同时对一个 OB 进行设
置。
3、时间延迟中断组织块 OB20~OB23
时间延迟中断组织块 OB20~OB23 的优先级及更新过程映像区的参数需要在 CPU 属性中设置,通过
调用系统函数 SFC32 触发执行,OB 号及延迟时间在 SFC32 参数中设定,延迟时间为 1~60000ms,大
大优于定时器精度。
4、循环中断组织块 OB30~OB38
循环中断组织块 OB30~OB38 按设定的时间间隔循环执行,循环中断的间隔时间在 CPU 属性中设
定,每一个 OB 默认的时间间隔不同,例如)B35 默认的时间间隔为 100ms,在 OB35 中的用程序将每
隔 100ms 调用一次,时间间隔可以自由设定,最小时间间隔不能小于 55ms。OB 中的用户程序执行时间
必须小于设定的时间间隔,如果间隔时间较短,由于循环中断 OB 没有完成程序扫描而被再次调用,从而
造成 CPU 故障,触发 OB80 报错,如果程序中没有创建 OB80,CPU 进入停止模式。通过调用
SFC39~SFC42 系统函数可以禁止、延迟、使能循环中断的调用。循环中断组织块通常处理需要固定扫描
周期的用户程序,例如 PID 函数块通常需在循环中断中调用以处理积分时间的计算。
5、硬件中断组织块 OB40~OB47
硬件中断也叫过程中断,由外部设备产生,例如功能模块 FM、通信处理器 CP 及数字量输入、输出
模块等。通常使用具有硬件中断的数字量输入模块触发中断响应,然后为每一个模块配置相应的中断 OB
(一个模块只能良一个中断 OB,S7-300 系列 PLC CPU 只能触发硬件中断 OB40),在模块配置中可以
选择输入点的上升沿、下降沿或全部作为触发中断 OB 的事件。配置中的中断事件出现,中断主程序,执
行中断 OB 中的用户程序一个周期,然后跳回中断处继续执行主程序。使用中断与普通输入信号相比,没
有主程序扫描和过程映像区更新时间,适合需要快速响应的应用。
如果输入模块中的一个通道触发硬件中断,操作系统将识别模块的槽号及触发相应的 OB,中断 OB 执
行之后发送与通道相关的确认。在识别和确认过程中,该通道再次触发的中断事件将丢失;如果模块其他
通道触发中断事件,中断不会丢失,在当前正在运行的中断确认之后触发;如果是不同的模块触发的中断
事件,中断请求被记录,中断 OB 在空闲(没有模块其他通道的中断请求)时触发。通过调用
SFC39~SFC42 系统函数可以禁止、延迟、使能硬件中断的调用。
6、DPV1 中断组织块 OB55~OB57
CPU 响应 PROFIBUS-DP V1 从站触发的中断信息。
7、多处理器中断组织块 OB60
用于 S7-400 系列 PLC 多 CPU(一个机架中最多插入 4 个 CPU 完成同一个复杂任务)处理功能,通
过调用 SFC35,可以触发 OB60 在多个 CPU 中同时执行。
8、时钟同步中断组织块 OB61~OB64
用于处理 PROFIBUS-DP V1 等时钟同步,从采集各个从站的输入到逻辑结果输出,需要经过从站输
入信号采样循环(信号转换)、从站背板总线循环(转换的信号从模块传递到从站接口)、PROFIBUS-
DP 总线循环(信号自从站传递到主站)、程序执行循环(信号的程序处理)、PROFIBUS-DP 总线循环
(信号从主站传递到从站)、从站背板总线循环(信号从从站接口传递到输出柜块)及模块输出循环(信
号转换)7 个循环,时钟同步中断将 7 个循环同步,优化数据的传递并保证 PROFIBUS-DP 各个从站数据
处理的同步性。PROFIBUS 时钟同步中断只能用于 S7-400 系列 PLC CPU(具有 DP V2 功能)。
9、工艺同步处理中断组织块 OB65
用于 T-CPU(具有运动控制功能的 CPU)工艺块与开始程序的同步处理。
10、冗余故障中断组织块 OB70、OB72
用于 S7-400H 冗余系统,当 I/O 冗余故障,例如冗余的 PROFIBUS-DP 从站故障时,触发 OB70 的调
用,当 CPU 冗余故障,如 CPU 切换、同步故障时,触发 OB72 的调用。如果 I/O 冗余,或者 CPU 冗余
故障而在 CPU 中没有创建 OB70、OB72,CPU 不会进入停止模式。
11、异步故障中断组织块 OB80~OB87
异步故障中断用于处理各种故障事件。
OB80:处理时间故障、CIR(Configuration In Run)后的重新运行等功能,例如 OB1 或 OB35 运
行超时,CPU 自动调用 OB80 报错,如果程序中没有创建 OB80,CPU 进入停止模式。
OB81:处理与电源相关的各种信息(S7-400 系列 PLC CPU 只有电池故障时调用),出现故障,
CPU 自动调用 OB81 报错,如果程序中没有创建 OB81,CPU 不会进入停止模式。
OB82:诊断中断,如果使能一个具有诊断中断模块的诊断功能(例如断线、传感器电源丢失),出现
故障时调用 OB82,如果程序中没有创建 OB82,CPU 进入停止模式。诊断中断还对 CPU 所有内外部故
障,包括模块前连接器拔出、硬件中断丢失等作出响应。
OB83:用于模块插拔事件的中断处理,事件出现,CPU 自动调用 OB83 报警,如果程序中没有创建
OB83,CPU 进入停止模式。
OB84:用于处理存储器、冗余系统中两个 CPU 的冗余连接性能降低等事件。
OB85:用于处理操作系统访问模块故障、更新过程映像区时 I/O 访问故障、事件触发但相应的 OB 没
有下载到 CPU 等事件,事件出现,CPU 自动调用 OB85 报错,如果程序中没创建 OB85,CPU 进入停止
模式。
OB86:用于处理扩展机架(不适用于 S7-300 系列)、PROFIBUS-DP 主站、PROFIBUS-DP 或
PROFINET I/O 分布 I/O 系统中站点故障等事件,事件出现,CPU 自动调用 OB86 报错,如果程序中没
有创建,CPU 进入停止模式。
OB87:用于处理 MPI GD 通信及时钟同步故障,事件出现,CPU 自动调用 OB87 报错,如果程序中
没有创建,CPU 不会进入停止模式。
12、处理中断组织块 OB88
用于处理程序嵌套、区域数据分配故障,故障出现,CPU 自动调用 OB88 报错,如果程序中没有创
建,CPU 进入停止模式。
13、背景循环中断组织块 OB90
优先级最低,保证 CPU 最短的扫描时间,避免过程映像区更新过于频繁。程序的下载和 CPU 中程序
的删除触发 OB90 的调用。只能用于 S7-400 系列 PLC CPU。
14、启动中断组织块 OB100~OB102
用于处理 CPU 启动事件,暖启动 CPU 调用 OB100,热启动 CPU 调用 O0B101(不适合 S7-300 系列
PLC 和 S7-400H),冷启动 CPU 调用 OB102,温度越低,CPU 启动时清除存储器中数据区的类型越
多。
15、同步错误中断组织块 OB121、OB122
OB121 处理与编程故障有关的事件,例如调用的函数没有下载到 CPU 中、BCD 码出错等,OB122 处
理与 I/O 地址访问故障有关的事件,例如访问一个 I/O 模块时,出现读故障等。如果上述故障出现,在程
序中没有创建 OB121、OB122,CP 进入停止模式。
注意:不是所有的 OB 都可以在 S7 CPU 中使用,例如 S7-300 系列 PLC PU 中只有暖启动 OB100,
操作系统不能调用 OB101、OB102,CPU 中可以使用的 OB 请参考 CPU 选型手册。
S7-300 系列 PLC 中组织块的优先级是固定的,不能修改,在 S7-400 系列 PLC 中下列组织块的优先级
可以进行修改:
OB10~OB47:优先级修改范围 2~23。
OB70~OB72:优先级修改范围 2~38。
OB81~OB87:优先级修改范围 2~26,优先级 24~26 确保异步故障中断不被其他的事件中断。
几个组织块可以具有相同的优先级,当事件同时出现时,组织块按事件出现的先后顺序触发,如果超过
12 个相同优先级的 OB 同进触发,中断可能丢失。
我们在使用相应 OB 时要注意以下问题。
1.OB 只是及时反应出了故障,但并不解决故障,OB 允许 CPU 带故障运行。
2.诊断 OB 如 OB82/86/122 反映的是硬件上的故障,靠软件是解决不了的,软件的作用是尽快指向故
障点,硬件的问题还是硬件解决。
3.诊断 OB 的产生会影响 CPU 的整个程序的执行速度,会影响系统的控制品质,尤其是一些带过程中
断,大量运算及运动控制的高速生产线。
4.无条件的让 OB 去掩盖故障是一件很危险的事情,应该有应对的措施,让系统尽快的进入一种可控
的安全状态。
由于通信的原因,模块不存在或有故障,刷新过程映像表时 I/O 访问出错,将会调用优先级错误中断
(OB85)。
可以在 CPU 属性对话框中设置 3 种调用 OB85 的方式。S7-300 默认的方式是不调用 OB85,S7-400
默认的方式是每个扫描循环周期调用一次,还可以设置为故障发生和消失时分别调用一次。
用 PI/PQ 地址区访问有故障的 I/O 模块、DP 从站时,将会调用 I/O 访问错误中断(OB122),每个
扫描周期调用一次。
对于简单程序,只涉及到数字量逻辑控制,只使用 OB1 就可以了,对于复杂程序,使用了 DP 通讯
等等,就需要做一些相应功能的组织块来保证 PLC 的运行正常。
1 OB100 启动组织块,即 PLC 一通电的第一个扫描周期就先处理此块,以后就不扫描了,所以在这
个块内可以做初始化脉冲,复位一些数据。
2 OB122 I/O 访问错误组织块,
3 OB121 编程错误组织块,这个块比较重要,曾经遇到一个德国进口喂料机,使用一段时间后出现
CPU 不能运行,程序是使用 STL 编程,使用了很多间接寻址,很难找到问题所在,后来就选择了这个组
织块后,CPU 运行设备就正常工作了。
4 OB82 诊断中断组织块,这个对于使用模拟量模块多的项目需要使用这个块,否则一旦接入的模拟
量信号出现问题时,CPU 停机就是大事了。
5 OB80 时间错误组织块,包括:超出周期时间、执行 OB 时出现确认错误、提前了时间而使 OB 的
启动时间被跳过、在 CiR 后恢复 RUN 模式。
6 OB86 机架故障组织块,对于使用了 DP 通讯的分布式 I/O 需要使用这个块。 要想第一时间找到出
故障的子站,需要使用 OB86 来作为 DP 故障诊断.需要对 OB86 内变量做编程处理,使用触摸屏或其他
上位机来显示报警内容。
7 OB87 通讯错误组织块。
组织块是操作系统与用户程序的接口,可以从下面几个方面来理解:
1. 组织块不是用户程序调用的,而是由操作系统调用的。其变量声明表中只有临时变量。
2.组织块分为三类:
启动组织块用于系统初始化;
主程序 OB1 是循环执行的;
出现中断事件时,操作系统将会停止执行当前的任务,调用一个分配给该事件的组织块。
3.除了自动生成的 OB1,其他组织块需要用户生成,组织块中的程序是用户编写的。
4.每个组织块都有 20 个字节的局部变量,其中包含 OB 的启动信息。这些信息在 OB 启动时由操作系
统提供,包括启动事件、启动日期与时间,错误及诊断事件。
5. 中断的优先级也就是组织块的优先级,如果在执行中断程序(组织块)时,又检测到一个中断请
求,CPU 将比较两个中断源的中断优先级。如果优先级相同,按照产生中断请求的先后次序进行处理。
如果后者的优先级比正在执行的 OB 的优先级高,将中止当前正在处理的 OB,改为执行较高优先级的
OB。
下面是优先级的顺序(后面的比前面的优先):背景循环、主程序扫描循环、时间中断、时间延时中
断、循环中断、硬件中断、多处理器中断、I/O 冗余错误、异步故障(OB80~87)、启动和 CPU 冗余,背景
循环的优先级最低。可以用 STEP 7 修改 S7-400 CPU 某些组织块的优先级。
6. 时间中断和延时中断有专用的允许处理中断(或称激活、使能中断)和禁止中断的系统功能。
其他组织块可以用 SFC 39“DIS_INT”来禁止处理某些中断,用 SFC 40“EN_INT”来激活(使能)被禁
止的中断。
SFC 41“DIS_AIRT”用来延迟处理比当前优先级更高的中断,直到用 SFC 42“EN_ AIRT”来允许立即
处理被 SFC 41 暂时禁止的中断。
ob1:循环扫描 ob,它是没有时间间隔的,执行完 ob1 后就会再次从头开始执行 ob1,所以外部输入
的模拟量数据转换成工程量的程序在 ob1 中执行,使得数据能够及时更新。
ob10~ob23:一般很少用到。
ob30~ob38:ob33 和 ob35 是常用的,和时间有关的程序一般都是放在这些 ob 中得,比如利用 pid 控
制的程序块,要求不是很严格的时间处理功能,当定时器不够用的时候自己编写的类似定时器的程序块。
ob100~ob102:这些 ob 只是在 cpu 不同的启动模式下启动一次,所有一些初始化的程序可以写在这
些 ob 中。
其他 ob 就不常用了。