S7-1200 /1500 PLC 进阶技巧:组织块(OB1、OB10)理论到实战

发布于:2025-08-02 ⋅ 阅读:(15) ⋅ 点赞:(0)

深入理解西门子 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 有更深入的认识,在实际编程中更好地运用组织块,实现复杂的控制逻辑。


网站公告

今日签到

点亮在社区的每一天
去签到