文章目录

西门子PLC的OB组织块优先级设置

发布于 2026-03-26 13:42:33 · 浏览 8 次 · 评论 0 条

在西门子PLC编程中,OB(Organization Block,组织块)是操作系统与用户程序之间的接口。理解并正确设置OB的优先级,决定了当多个事件同时发生时,CPU先处理哪一个。这直接关系到系统的实时性和响应速度。例如,一个急停信号必须比普通的温度读取拥有更高的执行权限。本指南将详细介绍如何查看、理解及配置西门子PLC(基于TIA Portal博图环境)的OB组织块优先级。


一、 理解优先级与中断机制

PLC采用循环扫描的方式工作,但中断机制打破了这种循环。当高优先级的事件发生时,CPU会暂停当前正在运行的低优先级程序,转而去执行高优先级的OB,执行完毕后再返回断点继续执行。优先级数值越大,级别越高。

为了直观展示这一抢占过程,请参考以下逻辑流程:

graph LR A[\"OB1: 主程序循环\n优先级: 1\"] -->|正常执行| B[\"扫描用户逻辑\"] B --> C[\"突然触发事件\n硬件中断 OB40\n优先级: 16\"] C -->|\"高优先级打断\"| D[\"保存 OB1 断点环境\"] D --> E[\"执行 OB40 急停处理\"] E --> F[\"恢复 OB1 环境\"] F --> B

通过上图可以看出,只要OB40被触发,无论OB1执行到哪里,都会立即让出CPU资源。


二、 常用OB块的默认优先级参考

在修改优先级前,必须熟知系统默认的分配。不同型号的CPU(如S7-1200与S7-1500)在部分OB的默认值上可能略有差异,但总体遵循以下规律。

OB 类型 默认优先级 功能描述
OB1 1 主程序循环,唯一无间隔循环执行的OB
OB10 ~ OB17 2 ~ 9 时间中断(日时钟),用于定时执行特定任务
OB20 ~ OB23 4 延时中断,经过指定延时后执行一次
OB30 ~ OB38 8 循环中断,按固定时间间隔周期性执行
OB40 ~ OB47 16 硬件中断,响应上升沿/下降沿或高速计数器事件
OB55 ~ OB56 12 状态中断,DPV1从站触发(主要用于S7-300/400)
OB60 25 技术功能同步(如S7-1500的运动控制)
OB80 ~ OB87 26 / 28 异步错误中断(如模块故障、时间错误)
OB100 ~ OB102 27 启动组织块(暖启动、热启动、冷启动)

注:S7-1500系列中,OB80的优先级为28,高于诊断中断OB82(26),而S7-1200中OB82通常为26。


三、 在 TIA Portal 中查看当前优先级

在动手修改之前,查看现有配置是第一步。

  1. 打开 TIA Portal(博途)软件并加载你的项目。
  2. 展开项目树中的“PLC_1”设备(或你的CPU名称)。
  3. 双击 “程序块” 文件夹,查看所有已添加的OB块。
  4. 选中 你想要检查的OB块(例如 Hardware interrupt [OB40])。
  5. 查看 下方的“属性” 窗口。如果没有显示,请右键点击该OB块并选择“属性”。
  6. 点击 左侧属性栏中的“常规” 选项。
  7. 找到 “类型” 或“中断优先级”一栏,即可看到当前的数值(例如 16)。

四、 修改 OB 优先级的实操步骤

并非所有OB的优先级都可以修改。例如,主循环 OB1 的优先级固定为1,启动OB(如OB100)的优先级也是固定的。通常,用户可以调整的是循环中断(OB30-OB38)和延时中断(OB20-OB23)的优先级。以下以修改 Cyclic Interrupt [OB30] 为例:

  1. 选中 项目树中的 Cyclic Interrupt [OB30]。
  2. 按下 快捷键 Alt + Enter 打开属性窗口,或双击下方属性区域。
  3. 导航 至属性列表的“常规” > “循环中断” 部分。
  4. 找到 “优先级” 输入框。
  5. 输入 新的优先级数值(例如将其从 8 改为 12)。
    • 注意:输入值必须符合CPU的有效范围(通常是2-26或更高,视CPU而定),且不能与其他OB冲突。
  6. 点击 工具栏上的“编译” 按钮(或按下 Ctrl + B)。
  7. 检查 编译反馈窗口中的“诊断” 信息。
    • 如果显示“0 错误,0 警告”,说明设置成功。
    • 如果提示“优先级冲突”,说明该优先级已被占用,返回 步骤5修改为其他数值。

五、 使用指令动态调整中断处理

除了静态设置优先级,在程序逻辑中,还可以通过指令控制中断的挂起与恢复。这在某些关键任务(如高精度定位期间需要暂时屏蔽非关键报警)时非常有用。

OB1 或其他高优先级OB中,使用 SCLLAD 语言调用以下指令:

1. 禁用中断

当执行某段绝对不能被打断的代码时使用。

  • 拖拽 “DIS_IRT” (Disable Interrupt) 指令到程序段中。
  • 填写 参数:
    • OB_NR: 输入想要屏蔽的OB编号(例如 40),或者输入 0 表示屏蔽所有可屏蔽中断。
  • 保存 编译。
// 临时屏蔽硬件中断 OB40
"Disable_Inst"(OB_NR := 40);
// 在此处执行关键代码...

2. 重新启用中断

关键代码执行完毕后,必须恢复中断,否则PLC将无法响应后续事件。

  • 拖拽 “EN_IRT” (Enable Interrupt) 指令到后续程序段中。
  • 填写 参数:
    • OB_NR: 输入之前屏蔽的OB编号(例如 40),或者输入 0 表示重新全局启用。
  • 连接 指令的ENO端到后续逻辑,确保执行流正确。
// 恢复硬件中断 OB40
"Enable_Inst"(OB_NR := 40);

六、 常见故障排查与建议

在设置优先级时,往往会遇到一些棘手的问题。以下是针对常见现象的解决对策。

1. 循环时间超出监控

如果你将某个低优先级任务的代码量写得非常大,或者高优先级中断发生得过于频繁,会导致主循环 OB1 的执行时间被无限拉长,最终触发“循环时间超出监控”报警(进入STOP模式)。

  • 检查 CPU属性中的“循环时间”设置。
  • 优化 程序逻辑,将复杂的数学运算或数据处理移至优先级较低的循环中断OB中,或者分时处理。
  • 避免 在高优先级OB(如OB40)中编写耗时长的逻辑,高优先级OB应保持“短小精悍”,只做信号捕捉和标志位置位。

2. 优先级冲突

在TIA Portal编译时,如果出现优先级冲突提示,通常是因为两个OB试图使用相同的优先级。

  • 双击 报警信息,软件会自动跳转到冲突的OB块。
  • 对比 两个OB的功能。
    • 如果一个是循环中断,一个是硬件中断,通常建议提高硬件中断的优先级,以保证信号响应。
    • 修改 其中一个OB的优先级属性,确保系统中所有运行中的OB优先级数值唯一(OB1除外,某些新版本CPU允许多个OB同优先级排队,但通常不建议)。

3. 延时中断不执行

设置了 OB20 延时中断,但时间到了并未运行。

  • 确认 是否在程序中正确调用了 START_IRT 指令。仅添加OB20块是不够的,必须由指令触发。
  • 检查 START_IRTSIGN 参数是否正确,它用于标识具体的延时事件。
  • 查看 诊断缓冲区,是否有“拒绝启动中断”的错误信息。

通过以上步骤,你可以精确控制西门子PLC中各个任务的执行顺序。合理规划优先级,既能保证急停和故障信号的毫秒级响应,又能确保主控逻辑的稳定运行。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文