深入理解西门子 S7 系列 PLC 中的组织块(OB)
在西门子 S7 系列 PLC 的编程世界里,组织块(OB)是一个核心概念,它作为操作系统和用户程序之间的接口,承担着连接系统与应用的重要角色。今天,我们就来全面剖析组织块的奥秘,看看它是如何在 PLC 运行中发挥关键作用的。
一、组织块的本质:系统与程序的桥梁
简单来说,组织块是操作系统和用户程序之间的接口,用于执行具体的程序。它的运行场景十分丰富,涵盖了 PLC 工作的各个关键环节:
- CPU 启动时
- 循环程序处理过程中
- 循环或延时时间到达时
- 外部条件触发时
- 发生故障、错误时
在程序结构上,OB 内部可以调用功能块(FB)、功能(FC),而这些 FB、FC 还能继续向下嵌套调用其他 FB、FC,形成层次化的程序结构。值得注意的是,除了主程序和启动 OB 以外,其他 OB 的执行都是由各种中断条件(如错误、时间、硬件等)触发的,并且 OB 无法被 FB、FC 调用,这体现了它在程序中的特殊地位。
二、优先级:OB 执行的 "指挥棒"
每个组织块都有各自的优先级,这是 OB 运行机制中的核心特性。在低优先级 OB 运行过程中,若有高优先级 OB 被触发,系统会立即打断低优先级 OB 的执行,转而执行高优先级 OB 的程序;当高优先级 OB 执行完毕后,再回到被中断的低优先级 OB 处继续执行。
以主循环程序为例,在没有其他 OB 执行时,主程序会周而复始地循环运行;当有高优先级中断(例如循环中断)出现时,系统会立即停止主程序执行,转而执行高优先级中断 OB 的程序;高优先级中断 OB 执行完成后,再继续从主程序的中断处恢复执行。
三、组织块的类型与特性
组织块的类型多样,不同类型的 OB 有着不同的功能、允许数量和默认优先级,以下是主要类型的详细说明:
组织块类型 |
允许的数量 |
默认的优先级 |
特殊说明 |
程序循环 |
>=0 |
1 |
- |
启动 OB |
>=0 |
1 |
- |
时间中断 |
<=2 |
2 |
V4.0 版本 CPU 开始支持 |
延时中断 |
<=4 |
OB 20:3;OB 21:4;OB 22:5;OB 23:6;OB 123 - OB 32767:3 |
V4.0 版本 CPU 以前,延时中断 OB + 循环中断 OB 数量 <=4 |
循环中断 |
<=4 |
OB 30:8;OB 31:9;...;OB 38:17;OB 123 - OB 32767:7 |
V4.0 版本 CPU 以前,延时中断 OB + 循环中断 OB 数量 <=4 |
硬件中断 |
<=50 |
18 |
- |
时间错误中断 |
<=1 |
22 或 26 |
- |
诊断中断 |
<=1 |
5 |
- |
插拔中断 |
<=1 |
6 |
V4.0 版本 CPU 开始支持 |
机架或站故障 |
<=1 |
6 |
V4.0 版本 CPU 开始支持 |
状态中断 |
<=1 |
4 |
V4.0 版本 CPU 开始支持 |
更新中断 |
<=1 |
4 |
V4.0 版本 CPU 开始支持 |
配置文件中断 |
<=1 |
4 |
V4.0 版本 CPU 开始支持 |
MC-Servo |
<=1 |
25 |
V4.1 版本 CPU 开始支持,闭环运动控制使用 |
MC-Interpolator |
<=1 |
24 |
V4.1 版本 CPU 开始支持,闭环运动控制使用 |
MC-PreServo |
<=1 |
- |
V4.2 版本 CPU 开始支持,闭环运动控制使用,需手动创建 |
MC-PostServo |
<=1 |
- |
V4.2 版本 CPU 开始支持,闭环运动控制使用,需手动创建 |
其中,最后的 4 个 MC OB 是闭环运动控制专用的。前两个(MC-Servo、MC-Interpolator)是组态闭环 TO 轴时自动生成的,无法编写任何程序,仅供系统内部使用;后两个(MC-PreServo、MC-PostServo)则需要手动创建。
四、通信优先级与存储资源
- 通信优先级:通信任务的优先级为 1,这是最低优先级,所以其他事件可以中断通信处理。其他事件导致的中断可能会对扫描周期的通信处理产生负面影响,不过可以通过调整 "通信造成的周期负载" 百分比,来增加专用于通信处理的扫描周期部分。
- 存储资源:CPU 为每个 OB 优先级提供了临时(本地)存储器:
- 16 KB 用于启动和程序循环(包括相关的 FB 和 FC)
- 6 KB 用于其他中断事件(包括 FB 和 FC)
- 嵌套深度:指可从 OB 调用功能 (FC) 或功能块 (FB) 等程序代码块的深度:
注意:安全程序嵌套深度为 4 层。
-
- 从程序循环 OB 或启动 OB 开始调用 FC 和 FB 等程序代码块,嵌套深度为 16 层;
- 从其他中断 OB 开始调用 FC 和 FB 等程序代码块,嵌套深度为 6 层。
五、典型组织块详解
1. 程序循环 OB
- 功能:程序循环 OB 在 CPU 处于 RUN 模式时,周期性地循环执行。可在其中放置控制程序的指令或调用其它功能块(FC 或 FB)。主程序(Main)就是程序循环 OB,要启动程序执行,项目中至少要有一个程序循环 OB。操作系统每个周期调用该程序循环 OB 一次,从而启动用户程序的执行。
- 特性:S7-1200 允许使用多个程序循环 OB,按 OB 的编号顺序执行。OB1 是默认设置,其它程序循环 OB 的编号必须大于或等于 123。程序循环 OB 的优先级为 1,可被高优先级的组织块中断;程序循环执行一次需要的时间即为程序的循环扫描周期时间,最长循环时间缺省设置为 150ms。
- 操作系统执行过程:
操作系统启动扫描循环监视时间;
操作系统将输出过程映像区的值写到输出模块;
操作系统读取输入模块的输入状态,并更新输入过程映像区;
操作系统处理用户程序并执行程序中包含的运算;
当循环结束时,操作系统执行所有未决的任务,例如加载和删除块,或调用其他循环 OB;
最后,CPU 返回循环起点,并重新启动扫描循环监视时间。
- 使用示例:在循环组织块 OB123 中调用 FC1,步骤如下:
创建循环组织块 OB123;
创建功能 FC1;
在循环组织块 OB123 中调用 FC1。
2. 时间中断 OB10
- 功能:时间中断 OB 用于在时间可控的应用中定期运行一部分用户程序,可实现在某个预设时间到达时只运行一次;或者在设定的触发日期到达后,按每分 / 小时 / 天 / 周 / 月等周期运行。只有在设置并激活了时间中断,且程序中存在相应组织块的情况下,才能运行时间中断。
- 相关指令:
- SET_TINTL(设置时间中断):设置日期和时间中断,程序中断 OB 可以设置为执行一次,或者在分配的时间段内多次执行。
- CAN_TINT(取消时间中断):为指定的中断 OB 取消起始日期和时钟中断事件。
- ACT_TINT(激活时间中断):为指定的中断 OB 激活起始日期和时间中断事件。
- QRY_TINT(查询时间中断状态):为指定的中断 OB 查询日期和时间中断状态。
- 设置和激活方法:
方法 1:通过组态设置激活时间中断;
方法 2:通过调用 SET_TINTL 设置时间中断,调用 ACT_TINT 激活时间中断。
- 使用示例:从设定时间开始每分钟执行时钟中断 OB10,每次进入时钟中断将 MD200 加 1,步骤如下:
创建延时中断 OB10;
在 OB10 中编程,当触发时间中断时执行 MD200 加 1;
在 OB1 中编程,设置时间中断、激活时间中断、取消时间中断、查询时间中断。
- 常见问题注意事项:
- 每次 CPU 启动之后,必须重新激活先前设置的时间中断;
- 当参数 PERIOD 重复周期设置为每月,则必须将 SDT 参数的起始日期设置为 1 号到 28 号中的一天;
- 如果组态时间中断时设置相应 OB 只执行一次,则启动时间一定不能为过去的时间(与 CPU 的实时时钟相关);
- 如果组态时间中断时设置周期性执行相应 OB,但启动时间已过,则将在下次的这个时间执行该时间中断;
- 调用 ACT_TINT 激活的时间中断不会在激活结束前执行。
组织块作为 PLC 程序运行的核心机制,理解其类型、优先级和运行特性,对于编写高效、可靠的 PLC 程序至关重要。希望通过本文的介绍,能让大家对 OB 有更深入的认识,在实际编程中更好地运用组织块,实现复杂的控制逻辑。