打开一个已有 Safety 工程,项目树里能找到主安全块,却不能仅凭它的名字知道这段逻辑何时执行。需要找到分配给它的 F-OB,再沿实际调用确认功能和状态属于谁。把块放进文件夹、把逻辑写进块、让它进入运行组,是不同的事情。 [1] [2]

这是「SIMATIC Safety 工程笔记」的程序结构篇,写给会使用普通 FB、FC 和 DB、准备阅读 S7-1500F 安全程序的读者。以官方默认对象和一处急停调用为例,解释入口、实例、数据归属和时间监控;不在本篇重写急停逻辑,也不提供完整投运工程。

资料范围:规则采用 Siemens《SIMATIC Safety – Configuring and Programming》V21(11/2025)。两张截图来自同一套 V14 SP1 官方例程,CPU 为 1511F-1 PN、固件 V2.1;历史图只说明可见对象,不证明所有 V21 功能已经存在。本文为文档与例程解读,未进行 TIA Portal 操作复现、仿真或实机测试。 [12]

改动前:备份批准工程,确认维护权限、设备状态与危险能量控制。修改调用、运行组分配或调度后,应检查受影响功能,不能以新增一次调用、强制接口或解除系统块保护来试错。下面先讲离线阅读;下载和现场测试另按批准方案执行。 [11]

一、F 运行组不是项目树里的文件夹

F-runtime group(F 运行组)是 F 系统组织相关安全块的逻辑执行单元。它包含调度入口、主安全块及其下级调用,也包含系统生成的处理和数据对象。引用的结构说明将安全程序组织为一或两个 F 运行组;这不是建议每个设备都建立一组。 [1]

先看图 1。普通程序入口 Main [OB1] 与 FOB_RTG1 [OB123] 并列,下面另有 Main_Safety_RTG1 [FB1] 和主安全块实例。原图红框选中了 FB1,不代表 OB1 正在调用它。 [12]

官方项目树中,普通 Main OB1、FOB_RTG1 OB123、主安全块 FB1 与其实例分别列出
图 1:项目树帮助找到对象,实际归属还要到运行组配置中核对(图片来源:Siemens,S7-1500F 与 ET200SP 配置例程,V14 SP1,第 3 节原图 3-1,资料 [12];保留原图红框)。

V21 的默认创建说明也使用这组名称和编号。它们是默认建议,不是安全身份编码:已有工程改过名称或块号,就应按实际分配查找,不能只搜索 OB123 或 FB1。 [3]

例如,将急停和安全门分别放入两个项目树文件夹,只改变阅读组织;若仍由同一主安全块调用,它们没有因此获得两个独立调度周期。这个区别也解释了为什么“文件夹整理好了”不能代替运行关系核对。

二、从 F-OB 找到主安全块,再读其中的实际调用

对本篇的 S7-1200/1500,主安全块由所分配的 F-OB 自动调用,用户不能再从 OB1 或其他块手工调用该主安全块。F-OB 受 F 系统专有技术保护,其 OB 启动信息也不能按普通 OB 的方式读取。不要套用 S7-300/400 的入口组织规则。 [2]

离线阅读可从 Safety Administration(安全管理)进入 F-runtime group 区域,核对 F-OB、主安全块和实例分配。主安全块可以是 F-FB 或 F-FC;采用 F-FB 时,必须有对应实例 DB。随后回到项目树打开被分配的那个块,而不是名字相似的另一份副本。 [3]

图 2 是同一历史例程在主安全块内调用 ESTOP1 的画面。调用上方可见 ESTOP1_DB [DB2],左侧有输入连接,右侧有输出去向;这把“入口块”和“入口里的一次功能调用”分开了。 [12]

官方主安全块中的 ESTOP1 调用,顶部标出独立的 ESTOP1_DB DB2,输入和输出连接分列两侧
图 2:主安全块组织功能调用,ESTOP1 的状态由其对应实例保存(图片来源:Siemens,同一 V14 SP1 例程,第 3 节原图 3-2,资料 [12];复用已有媒体 349,不是 V21 实测画面)。

这里只追踪结构,不重新判断图中地址和确认参数适不适合另一台机器。阅读顺序可以记成下面四个对象;箭头省略了系统内部处理,不能当成可编译代码或完整扫描时序。

调用关系简记(基于官方例程,不是下载程序)
FOB_RTG1 [OB123]
  → Main_Safety_RTG1 [FB1](配置中分配的主安全块)
    → ESTOP1(主安全块内的一处功能调用)
      → ESTOP1_DB [DB2](该调用使用的实例)

沿这条路径应分别确认:运行组指向正确主安全块;相应功能确实在其调用树内;监视的是该调用的实例;输出连接对应目标回路。仅在项目中创建一个 F-FB,不足以证明它已进入这条路径。

功能逻辑可放在主安全块中,也可通过下级 F-FB/F-FC 分层组织。系统生成的 F-system blocks 不能从 System blocks 文件夹拿来插入用户主安全块。拆块的目标是让对象和验证范围清楚,不是人工补齐系统内部调用。 [4]

三、同样叫 DB,保存的对象并不相同

图 1 的主安全块实例与图 2 的 ESTOP1 实例不是同一份状态。算法可以复用,具体调用的数据归属却必须明确。下面按用途区分常见对象,不列一张可以复制到所有 CPU 的固定块号表。 [4]

对象 保存或提供什么 阅读时优先找什么
F-FB 的实例 DB 该 F-FB 调用所需的数据;与主安全块的实例分开辨认。 它属于哪个调用,不只看 DB 名称。
用户全局 F-DB 按安全程序规则组织的用户数据。 每个变量的读写归属,不把“全局”理解成无限制共享。
F-I/O DB 与具体 F-I/O 相关的系统控制和状态接口。 实际模块、通道、DB 与运行组的对应。
F 运行组信息 DB 本组和安全程序的状态、周期等信息。 字段用途以及允许在哪类程序中读取。
F-runtime DB 等系统生成数据 系统运行所需的内部对象。 保留系统管理边界,不当成用户设备数据区。

上表概括来源中的结构;具体访问仍受运行组规则约束。需要逐项查 PASS_ON、ACK_REQ、QBAD 时,使用已经重写的 F-I/O DB 状态与控制接口,不要把它的复位变量移植到其他 DB。 [1] [2] [4]

一种容易漏查的变化是复制了功能网络,却继续指向原实例。对两个需要独立保存状态的对象,应检查是否实际分配了各自实例;不能只因为输入符号已经改名,就认定内部状态也已经分开。这里是结构审查建议,不预设某个用户工程已经存在该错误。

四、拆成两组之前,先划清 I/O、实例和变量归属

同一 F-I/O 的通道值、值状态和关联 F-I/O DB,应由对应的同一个 F 运行组访问。规则作用于 F-I/O 对象,不是随意按通道切片。因此,不能把同一模块的前几个通道交给快组、后几个交给慢组,再让两组各自处理这个 DB。 [2]

同一个 F-FB 可在多组复用,但必须使用不同实例;实例只能在其所属组访问。普通用户全局 F-DB 可被多组使用,但同一个变量只能由一个组访问。不能把“组 1 写、组 2 只读”视作一般共享变量的例外许可。 [2]

假设两套机构确实需要不同的处理节拍,拆组时要先列出每套机构使用的 I/O、实例和共享条件。发现共用同一 F-I/O 或互读实例数据,就需要重新处理边界,而不是先建第二组再消编译错误。该情境用于说明设计顺序,没有指定现场周期值。

V21 对适用 S7-1200/1500 的组间传输采用 Flexible F-Link:数据通过编码的 F-array 和相应通信关系传递,不是直接共读普通 F-DB 变量。文档给出的 S7-1500 前提包括固件 V2.0 起、安全系统版本 V2.2 起;完整配置、监控与验证需按通信专题执行。 [8]

增加通信关系后,还要核对发送/接收数据结构、UUID、监控时间及数据更新条件。只将关键状态做成一个很短的脉冲,不能未经核查就假定另一组必然接收。拆组获得的是新的调度选择,也增加了需要说明的传输边界。 [8]

五、周期、执行时间与监控上限,要分开记录

F-OB 的事件类别决定调度方式。V21 默认组使用 Cyclic interrupt(循环中断);还列有 Program cycle 和 Synchronous cycle 等条件性选择。本篇按循环中断理解周期,不把所有 F-OB 都描述为同一种固定调度。 [3]

下面四种量回答不同问题。“这段程序执行得很快”只能回答其中一项,不能证明它已经按要求及时再执行。

观察或设置 实际含义
F-OB 的配置周期 循环中断的调度间隔设置,不是现场测出的执行耗时。
F 运行组实际周期 相邻调用的实际时间间隔,可与配置和监控要求比较。
F 运行组运行时间 本次组处理花费的时间,与相邻调用间隔不同。
周期警告限值/最大周期 监控界限:前者用于维护提示,超过最大周期则使 F-CPU 进入 STOP。

定义运行组时,所选 F-OB 周期必须小于相应最大周期和警告限值,且相位偏移小于周期。这里核对的是参数关系,不给出适用于全部机器的固定数值。S007 还明确:系统监控的是调用间隔上限,不保证“没有执行得过频”;安全定时应使用相应 TP、TON、TOF,不能用累计 OB 调用次数代替。 [3]

运行组信息 DB 能看什么,不能在哪里用

信息 DB 通常有 RTG1SysInfo 这样的符号名。F_SYSINFO.TCYC_CURR、TCYC_LONG 对应当前/最长周期,TRTG_CURR、TRTG_LONG 对应当前/最长运行时间;该版表内这四项为 DINT,单位 ms,不是 TIME 型。 [5]

F_SYSINFO 区域禁止在安全程序中访问。这些时间信息可在标准程序侧用于观察,不要据此自行拼一套安全看门狗。顶层 MODE、MODE_REMAINING_TIME 另有允许范围,不能因 F_SYSINFO 的限制又反过来宣布整个信息 DB 的所有字段都不可读。 [5]

TCYC_LONG 可用于观察自上次 STOP→RUN 以来出现的最长周期。但一次短时观察未包含的负荷,不会自动出现在记录中;它是核算依据之一,不是所有工况最坏值的证明。手册还要求结合相应响应时间计算资料进行选取。 [6]

PROFIsafe 的 F-monitoring time 监视安全通信,又与运行组周期监控不同。监控值既要容纳无故障运行,也不能使过程安全时间超限;只把告警阈值调大,不会让执行变快。本篇不替未提供 CPU、网络和负载条件的工程完成响应时间计算。 [10]

六、预/后处理仍是标准程序,也会影响执行时间

需要在安全处理前后搬运标准数据时,可在安全管理中分配预/后处理 FC。这里只允许标准 FC,接口只允许临时局部数据和常量;它们与 F 运行组同步执行,不会因为位置靠近主安全块就变成安全逻辑。 [7]

例如,标准数据可能被较高优先级程序或 HMI 在组执行期间改变,官方对 S7-1200/1500 推荐按规定使用预处理组织取值。这样解决的是访问时序问题,数据仍须在安全程序中完成针对过程的合理性检查。来源不安全,不会因复制一次就成为故障安全数据。 [9]

时间变化不一定伴随总体签名变化。预/后处理 FC 的耗时会计入运行组运行时间,而这部分处理不会因此改变 Collective F-Signature。不能看到签名相同,就断言增加标准处理前后的实时表现也相同。 [7]

还要区分修改 FC 内容与改变调用分配:手册分别规定了加载条件,不能统称为“都可在线改”。删除已分配的 FC 或通过复制覆盖它,会使预/后处理选择复位;单独从 CPU 上传这个 FC,也不会自动恢复该分配关系。维护后应同时核对代码和配置。 [7]

调度检查同样要看标准系统。高优先级中断、通信负荷和调试活动可能延长 F-OB 周期或组运行时间;技术对象也可能自动创建高优先级 OB。即使安全网络未改,也应比较相关优先级和负荷。总体签名不能单独替代这层检查。 [2] [3]

七、用一条调用路径完成离线复核,再安排验证

下面是阅读已有工程的检查顺序,不是在线改写步骤。先记录软件及 Update、CPU 固件、安全系统版本和指令版本,再固定一组目标对象;这样发现差异时,能够指出具体哪一层与预期不同。

从哪里看 应当留下什么结果 不符合时转向哪里
安全管理的运行组分配 F-OB、主安全块、实例、预/后处理及事件类别。 确认当前工程与实际分配,不另加一次主安全块调用。
主安全块及下级调用 功能确实进入调用树,实例和输出属于目标回路。 查交叉引用、实例归属及未调用对象。
I/O 与变量访问 同一 F-I/O 归属一致,跨组数据有合规传输关系。 核对组边界,不用共享位绕过通信。
时间与诊断记录 配置值、当前/最长观测值、负荷条件和告警来源。 分别查调度、运行时间或通信,不把所有超时混为一类。

结构核对通过后,才按批准的环境验证启动、正常动作、故障反应及恢复。模块重新集成、功能块确认和机器启动仍是不同结果;调用关系正确也不能替代接线与执行器测试。这里没有执行这些验证,不预填“已通过”。

变更应同时检查有意修改和其他位置的无意变化,再通过影响分析确定复验范围。将图纸、调用关系、实例与时间依据放在同一版本记录中;后续交付可查 程序验收、签名与归档。 [11]

继续处理标准数据的读取、复制和一致性时,转到 标准程序与安全程序的数据交换。本篇先把“哪个入口执行了哪个功能、使用谁的状态、受到什么时间约束”说明白,不把数据交换专题再展开一遍。

资料来源

第 1~11 项为 Siemens《SIMATIC Safety – Configuring and Programming》V21(11/2025)的实际读取章节,第 12 项为 V14 SP1 历史例程。表格和阅读顺序为资料整理;两个机构的例子与检查建议不是本站现场记录。

1. Siemens:Program structure of the safety program (S7-1200, S7-1500)。运行组组成、主安全块及用户/系统对象的分工。

2. Siemens:Rules for F-Runtime Groups of the Safety Program。S7-1200/1500 自动调用、F-OB 保护、单组访问和实例限制;与 S7-300/400 规则分开。

3. Siemens:Procedure for defining an F-runtime group (S7-1200, S7-1500)。默认对象、分配入口、事件类别、周期监控和 S007;不按该页执行设备下载。

4. Siemens:Fail-Safe Blocks。各类块的职责与 CPU 适用范围;禁止插入系统块及指令版本变更。

5. Siemens:F-runtime group information DB (S7-1200, S7-1500)。RTG1SysInfo、F_SYSINFO 的访问限制和 TCYC/TRTG 字段类型、单位。

6. Siemens:Minimum monitoring time for the F-runtime group cycle time。监控时间选取、TCYC_CURR/TCYC_LONG 的观察范围;未运行链接中的计算表。

7. Siemens:Pre-/postprocessing (S7-1200, S7-1500)。标准 FC、接口限制、分配失效、运行时间、签名和下载条件。

8. Siemens:F-runtime group communication (S7-1200, S7-1500)。Flexible F-Link 机制、S7-1500 固件/安全系统版本前提和通信验证边界;未复现通信工程。

9. Siemens:Data Transfer from Standard User Program to Safety Program。标准数据可能在组执行期间变化、预处理建议及过程相关合理性检查 S015。

10. Siemens:Configuring the monitoring times。运行组与 PROFIsafe 监控对象的区别;可用性和过程安全时间两项约束。

11. Siemens:Acceptance of Changes。完整变更定位、影响分析、S072 和接线相关变更的 S071;未执行项目验收。

12. Siemens:TIA Portal 中 S7-1500F CPU 与 ET200SP 安全模块的配置例程。V14 SP1 历史例程,第 1 节环境及第 3 节图 3-1、3-2;CPU 1511F-1 PN,固件 V2.1。只使用图中实际可见的项目对象与调用。

图片说明:两张图来自同一套官方历史例程,保留原图标注,未生成或改绘。图中的工程、地址和实例不是本站实机结果。第三方图片权利归 Siemens,不随本站原创正文的 CC BY-NC-SA 许可重新授权。

修订说明:以项目树和实际调用串起主安全块、实例与运行组归属,补充周期监控、F_SYSINFO 访问及预/后处理的时间边界。正文不设目录。资料复核:2026-09-10;未进行软件操作复现、仿真或实机验证。