当前位置: 首页 > news >正文

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

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

http://www.lryc.cn/news/607314.html

相关文章:

  • 高速信号设计之 DDR5 篇
  • 吃透 B + 树:MySQL 索引的底层逻辑与避坑指南
  • 大模型应用
  • 译 | BBC Studios团队:贝叶斯合成控制方法SCM的应用案例
  • Ant Design Vue notification自定义
  • iOS企业签名掉签,iOS企业签名掉签了怎么办?
  • H5 列表页返回后保持数据的解决方案总结(以 Vue 3 为例)
  • 【网安播报】Lazarus Group 利用开源包展开长期供应链间谍战
  • AUTOSAR进阶图解==>AUTOSAR_SRS_E2E
  • c#中switch case语句的用法
  • Spring Cloud 和服务拆分:微服务落地的第一步
  • TwinCAT3示例项目1
  • 日志管理进入「对话式」时代:日志易MCP Server落地实录
  • C# _Json数据
  • 仿艾莫迅MODBUS调试工具写一个上位机
  • 基于springboot的快递分拣管理系统
  • 【智能协同云图库】第七期:基于AI调用阿里云百炼大模型,实现AI图片编辑功能
  • 【AI 加持下的 Python 编程实战 2_12】第九章:繁琐任务的自动化(上)——自动清理电子邮件文本
  • 【Linux学习|黑马笔记|Day1】Linux初识、安装VMware Workstation、安装CentOS7、远程连接、虚拟机快照
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现围栏羊驼的检测识别(C#代码,UI界面版)
  • 标准项目-----网页五子棋(4)-----游戏大厅+匹配+房间代码
  • AJAX快速入门 - 四个核心步骤
  • HTML无尽射击小游戏包含源码,纯HTML+CSS+JS
  • 【Flutter】内存泄漏总结
  • 【数据可视化-78】2025年上半年广东省各市GDP排名深度解析与可视化:Python + Pyecharts 深度洞察(含完整数据、代码)
  • OpenVLA: 论文阅读 -- 开源视觉-语言-行动模型
  • ZKmall开源商城微服务架构电商平台:服务注册与配置中心设计
  • Spring Boot 整合量子密钥分发(QKD)实验方案
  • Linux---make和makefile
  • 分布在背侧海马体CA1区域的位置细胞(place cells)对NLP中的深层语义分析的积极影响和启示