从 F-DI、F-DQ 到完整硬件组态之后,很多人第一次在线调试 Safety 程序时,真正卡住的地方并不是安全功能块,而是每个 F-I/O 自动生成的 F-I/O DB

最典型的症状是:现场线已经修好了,输入灯也正常了,但安全程序里该为 1 的位就是不动。原因往往不在现场,而在 PASS_ONACK_REQACK_REIQBADPASS_OUT 这几个变量的状态上。

先把调试顺序拿走。遇到这类情况,按这个顺序看四个地方:

顺序 看什么 判断
1 过程值 现场电平到底是什么
2 Value Status / QBAD 数据是否处于故障安全状态,也就是被 0 代替了
3 ACK_REQ 是否已经置 1,也就是“可以确认了”
4 ACK_REI 给一个正沿,完成重新集成

完整的恢复链路是:故障发生 → F-I/O 钝化 → 故障排除 → F-System 将 ACK_REQ 置 1 → 用户在 ACK_REI 上给正沿 → 重新使用过程值。中间断在哪一步,问题就在哪里。

一、F-I/O DB 是什么

Siemens V21 文档说明,每一个以安全模式组态的 F-I/O 都会自动生成一个 F-I/O DB。这个 DB 里包含 Safety 程序需要读取或写入的状态变量,用于重新集成、主动钝化、停用 F-I/O、参数处理以及判断当前到底使用过程值还是故障安全值。

它不是用户手工建立的普通 DB。F-I/O 被删除时,与它关联的 F-I/O DB 也会被删除;DB 中变量的初始值也不允许直接在 DB 内修改,需要通过 Safety 程序中的合法访问来处理。把它当普通状态 DB 随手改初始值,是很容易犯的错。

二、核心变量怎么理解

参数 作用 配置要点
PASS_ON 由 Safety 程序主动请求对整个 F-I/O 进行钝化 为 1 时,过程值被故障安全值 0 代替
ACK_NEC 决定 F-I/O 或通道故障排除后是否需要人工确认 初始值为 1;设为 0 只允许用于安全上允许自动重新集成的过程
ACK_REQ 表示当前已经允许并需要用户确认 故障消除后由 F-System 置 1,确认完成后恢复 0
ACK_REI 对当前 F-I/O 执行人工重新集成 需要正沿;通常在 ACK_REQ=1 后触发
QBAD 表示 F-I/O 当前数据处于无效/故障安全状态 启动、通信错误、整模块故障或主动钝化等情况下会参与状态指示
PASS_OUT 反映整块 F-I/O 的钝化状态 在启动、通信错误和整模块钝化等场景中常与 QBAD 一起为 1

三、PASS_ON、QBAD 与 PASS_OUT

Siemens 将 F-I/O 进入安全状态时的替代值定义为故障安全值 0。F-System 启动、PROFIsafe 通信错误、F-I/O 故障、通道故障以及程序主动设置 PASS_ON=1 时,都可能让真实过程值被 0 代替。

对于 S7-1200/1500,通道级信息还可能通过 Value Status 反映。也就是说,QBADPASS_OUT 适合判断整块模块的状态,而通道粒度的诊断还要结合 Value Status 和具体模块的钝化配置。只看 QBAD 会漏掉单通道故障。

一旦 F-I/O 被钝化,Safety 程序看到的可能已经不是现场真实电平,而是规定的故障安全值 0。

四、ACK_NEC、ACK_REQ、ACK_REI

ACK_NEC=1 时,需要用户确认。ACK_NEC=0 时,F-I/O 或通道故障排除后可以自动重新集成,但 Siemens 明确要求:只有相关过程从安全角度允许自动重新集成时,才允许这样设置。

这一条很容易被当成“省事”选项。它的实际含义是:急停拔起来之后设备能不能自己恢复到可运行状态,而不需要人确认一下现场是否安全。能不能这样,是风险评估的结论,不是编程习惯的选择。

五、访问规则

F-I/O DB 的变量必须使用完整 DB 访问。更重要的是,一个 F-I/O 的 F-I/O DB 只能从访问该 F-I/O 通道的同一个 F-runtime group 中访问。

所以如果一个项目拆成两个 F-runtime group,同一个 F-I/O 及其 F-I/O DB 不能被两个运行组同时当作自己的输入对象使用。这是 Safety 程序结构中的明确规则,分组时就要把 I/O 归属划清楚。

六、常见误解

常见说法 实际情况
故障消失后输入灯正常,就已经恢复 还要确认 F-I/O 是否已重新集成,尤其是手动确认模式
ACK_REI 一直保持 1 就可以 人工重新集成依赖正沿,不应把它当持续使能信号
ACK_NEC=0 更省事 只有过程安全上允许自动重新集成时才允许使用
QBAD 只是报警位 它反映 F-I/O 数据是否处于故障安全/无效状态,不能只当普通报警显示

七、总结

F-I/O DB 是 F-System 管理 F-I/O 的接口,不是普通状态 DB。把开头那条恢复链路记住,安全程序里大量“线已经修好但模块还没有恢复”的问题都能直接定位。

本系列上一篇:TIA Portal 完整组态:S7-1500F + ET 200SP F-I/O;下一篇:西门子安全程序结构

资料来源

  1. Siemens SIMATIC Safety V21:F-I/O DB
  2. Siemens SIMATIC Safety V21:ACK_NEC
  3. Siemens SIMATIC Safety V21:ACK_REQ
  4. Siemens SIMATIC Safety V21:After communication errors