这是 "深入 FSoE" 系列文章的第二篇。在上一篇文章中,我们介绍了 FSoE 的基本概念、核心角色和工作方式,并提到 FSoE 基于"黑色通道"原理——底层通信被视为不可信,安全完整性完全由端到端的安全协议来保证。那么,底层通信到底会发生哪些错误?FSoE 又是如何一一应对的?这正是本文要回答的问题。
在工业现场,通信网络面临着远比办公室环境严苛得多的挑战。电磁干扰、振动、连接器老化、接地不良——这些因素都可能导致数据在传输过程中出错。对于普通控制数据,偶尔的一次通信失败或许只会导致短暂的停机;但对于安全数据,一次未被检测到的错误就可能造成人身伤害。
FSoE 作为 SIL3 等级的功能安全协议,其设计前提就是:底层通信通道完全不值得信任。那么规范中定义了哪些需要防范的通信错误?FSoE 又部署了哪些防线来应对?
IEC 61784-3 和 ETG.5100 规范将数据传输中可能发生的错误归纳为八种基本类型。理解这些错误,是理解 FSoE 安全机制的前提。下面我们逐一深入分析每一种错误的成因和危害。

图1 数据损坏
错误描述:数据在传输过程中,部分比特发生了翻转——0 变成 1,1 变成 0。接收方收到的数据与发送方发出的数据不一致。
典型成因:电磁干扰是最常见的原因。变频器、电机启动瞬间、焊接设备产生的高频噪声都可能耦合到通信线缆上,导致信号波形畸变。此外,连接器接触不良、线缆老化也可能引入随机误码。
安全危害:如果不被检测到,损坏的数据可能被当作有效的安全指令执行。例如,一个"停止"指令可能因比特翻转变成"运行",后果不堪设想。

图2 非预期重复
错误描述:一条过期的旧报文在网络中被重发,接收方将其误认为是新的有效数据。
典型成因:网络设备的缓冲机制异常可能导致旧报文被重复发送。在环形拓扑中,如果某个节点故障导致报文在环中循环,也可能出现重复报文。
安全危害:假设上一个周期安全门已打开(需要停机),而当前周期安全门重新关闭。如果接收方收到了上一个周期的"开门"报文并当作当前数据处理,系统将错误地保持停机状态——或者更糟,错误的"安全"状态信息导致危险被掩盖。

图3 错误顺序
错误描述:报文以错误的顺序到达接收方。例如,先发送的报文后到达,后发送的报文反而先到。
典型成因:网络交换机或路由器中的队列管理策略可能导致报文乱序。在工业以太网中,虽然 EtherCAT 的集束帧机制大幅降低了乱序的可能,但在涉及网关或跨网段通信时仍可能发生。
安全危害:安全指令具有严格的时序依赖。如果"复位"指令在"停机"指令之前被处理,逻辑上会产生非预期的行为,可能绕过安全状态。

图4 丢失
错误描述:报文在网络传输过程中被丢弃,接收方永远收不到该报文。
典型成因:网络拥塞导致交换机缓冲区溢出、线缆物理断开、连接器松动、从站设备处理能力不足导致接收缓冲区溢出等。
安全危害:如果 Master 发出的 STO 指令在传输中丢失,Slave 将继续保持运行状态,导致安全功能完全失效。这是最危险的通信错误之一。

图5 不可接受的延迟
错误描述:报文虽然到达了接收方,但到达时间超出了安全应用能够容忍的最大时限。
典型成因:网络负载突增、交换机存储转发延迟、EMC 导致的重传、从站处理负载过重等都可能导致报文延迟。值得注意的是,报文最终收到了,但"太晚了"。
安全危害:对于安全功能而言,时效性与正确性同等重要。安全响应时间有严格的约束——从安全事件发生到执行器进入安全状态的总时间必须在规范允许范围内。延时的安全报文等同于失效。

图6 插入
错误描述:一个来源不明的报文被插入到通信流中。这个报文不是由合法的通信参与方生成的,但被接收方当作合法数据处理。
典型成因:网络安全漏洞是最典型的成因——攻击者通过物理接入或网络渗透注入恶意报文。此外,配置错误导致两个逻辑网络意外互通也可能产生"插入"效果。
安全危害:插入的报文可以携带任意内容,攻击者可能因此远程触发安全功能失效。这属于蓄意安全威胁范畴(Security),但与功能安全(Safety)紧密相关。

图7 伪装
错误描述:一个报文声称自己来自合法的发送方 A,但实际上是由非法的发送方 B 发出的。与"插入"不同的是,伪装报文伪造了身份标识。
典型成因:地址欺骗、配置错误导致两个设备使用了相同的地址标识。
安全危害:如果一个非安全设备伪装成 FSoE Master 向 Slave 发送指令,可以绕过所有安全逻辑。因此身份认证是安全协议的基本要求。

图8 寻址错误
错误描述:报文被路由到了错误的目的地。发送方和内容都是合法的,但接收方不是预期的目标。
典型成因:组态配置错误是最常见的原因——工程师在配置工具中填错了 FSoE 地址。此外,拨码开关设置错误、网络拓扑变化未及时更新配置也可能导致寻址错误。
安全危害:如果本应发给驱动器 A 的 STO 指令被发给了驱动器 B,结果可能是危险的 A 继续运行,而安全的 B 被意外停机。两边的安全状态都被破坏了。
针对以上八种错误类型,FSoE 在安全 PDU 中部署了四道防线。
FSoE 在每个安全 PDU 中附加 16 位 CRC(循环冗余校验)值。CRC 的计算覆盖了全部安全数据和通信控制信息,使用生成多项式 0x139B7。
当接收方收到报文后,重新计算 CRC 并与报文中的 CRC 值比对。如果不一致,说明数据在传输过程中被篡改或损坏。CRC 的作用范围涵盖三类错误:
FSoE 在每个安全 PDU 中包含一个 16 位的 Connection ID(序列号)。这个序列号由 Master 和 Slave 各自独立维护,初始值为 0,每个 FSoE 周期自增 1(范围 1-65535)。
接收方不仅检查序列号的连续性,还验证其是否在预期范围内。这一机制有效应对:
值得注意的是,由于序列号在每个周期都会变化,即使安全应用数据连续多个周期都不变,CRC 也会因为序列号字段的变化而产生不同的值。这保证了相邻周期的报文在物理层上存在差异,避免了"冻结"检测的盲区。
FSoE 为每个 Connection 配置了看门狗定时器(Watchdog Timer),可设置范围为 1-65535 ms。接收方在每个通信周期收到有效安全报文后重置看门狗。如果在规定时间内未收到下一个有效报文,看门狗超时,系统立即进入 Fail-Safe 状态。
看门狗应对的错误包括:
看门狗时间的选择是一个工程权衡——太短则容易误触发(网络抖动导致不必要的停机),太长则安全响应时间增加。ETG.5100 规范提供了看门狗时间的计算方法,需结合最差情况下的网络延迟和安全功能响应时间进行综合评估。
每个 FSoE Slave 都有一个 16 位的 FSoE Address(取值范围 1-65535),在整个网络中唯一。在 Connection 建立阶段,Master 将 Slave 的地址下发给 Slave 进行存储。后续所有通信中,Slave 验证收到的报文中的 FSoE Address 是否与自己匹配。
地址校验直接应对:
下表总结了八种通信错误与 FSoE 四道防线的对应关系:
| 错误类型 | CRC 校验 | 序列号 | 看门狗 | 地址校验 |
|---|---|---|---|---|
| 数据损坏(Corruption) | ✓ | |||
| 非预期重复(Unintended Repetition) | ✓ | |||
| 错误顺序(Incorrect Sequence) | ✓ | |||
| 丢失(Loss) | ✓ | ✓ | ||
| 不可接受延迟(Unacceptable Delay) | ✓ | |||
| 插入(Insertion) | ✓ | |||
| 伪装(Masquerade) | ✓ | ✓ | ||
| 寻址错误(Addressing) | ✓ |
可以看到,每一种错误类型都至少被一道防线覆盖,而最危险的错误(如 Loss)同时受到多道防线的保护。这种纵深防御的设计确保任何单点失效都不会导致安全功能丧失。
更重要的是,所有四道防线实施的都是 Fail-Safe 策略——检测到异常后,系统立即进入安全状态,切断危险执行器的动力。FSoE 从来不试图"猜测"数据的正确含义,也不会尝试"修复"错误的数据。这种保守而严谨的设计,正是功能安全区别于一般可靠性工程的本质所在。
在本系列的下一篇文章中,我们将介绍典型的 FSoE 设备架构,深入分析如何通过多 CPU 冗余架构来达到 SIL3 安全完整性等级。
参考:ETG.5100 Safety over EtherCAT Specification V1.2.0 / IEC 61784-3 / FSoE 协议基础介绍 V1.0