4. EtherCAT状态机与错误状态

EtherCAT从站的状态机(ESM,EtherCAT State Machine)是诊断工作中最基础也最关键的观察对象。主站与从站之间的几乎所有配置、参数下发、过程数据交换,都必须在正确的状态下进行。一旦状态转换失败,从站会停留在某个中间状态并置位错误标志,主站通过读取状态寄存器与错误码即可定位问题。理解四个状态的含义、转换条件以及错误码,是排查“从站不进入OP”“过程数据不刷新”“启动偶发失败”等问题的核心能力。

一、四个状态的核心含义

EtherCAT从站的状态机定义了四个稳定状态,每个状态对应不同的通信能力与资源开放程度:

  • INIT(初始化):从站上电后的默认状态。此时从站不参与过程数据交换,邮箱通信(Mailbox)可用,主站可读写EEPROM、配置站点地址与寄存器。INIT是进入其他状态的起点。
  • PRE-OP(预运行):邮箱通信完全可用,主站通过CoE(CANopen over EtherCAT)下发PDO映射、同步管理器配置、分布式时钟参数等。此时过程数据通道尚未建立,不能进行周期性数据交换。
  • SAFE-OP(安全运行):过程数据通道已建立,从站可以接收过程数据输出(RxPDO),但输入(TxPDO)保持安全值,不向主站反馈实际过程数据。该状态常用于验证通信链路与PDO配置是否正确。
  • OP(运行):过程数据输入输出均正常工作,从站进入正常生产状态,周期性数据交换与分布式时钟同步全部生效。

状态转换并非随意跳转,而是遵循严格的顺序:INIT → PRE-OP → SAFE-OP → OP,反向则逐级回退。主站通过写状态控制寄存器(AL Control)请求目标状态,从站通过状态寄存器(AL Status)反馈当前状态与错误码。

EtherCAT 从站状态机(ESM)转换与错误路径 INIT 初始化 / 邮箱可用 PRE-OP PDO映射 / CoE配置 SAFE-OP 输入安全值 / 输出有效 OP 过程数据全双工 请求PRE-OP 请求SAFE-OP 请求OP 回退 回退 回退 状态转换失败 → 停留原状态 AL Status 置 Error 位 + 错误码

二、状态转换条件与检查要点

每个状态转换都有明确的硬件与配置前提,主站在请求转换前应逐项确认:

转换 必要条件 常见失败原因
INIT → PRE-OP 邮箱通信正常、EEPROM可读、站点地址有效 EEPROM校验失败、邮箱SM配置错误
PRE-OP → SAFE-OP SM配置正确、PDO映射合法、DC参数可写 PDO映射长度不匹配、SM看门狗超时
SAFE-OP → OP 输入数据有效、DC同步建立、无SM事件 DC未锁定、输入数据无效、看门狗触发
OP → SAFE-OP 主站主动请求或检测到同步丢失 DC失锁、过程数据超时
诊断建议:主站应周期性读取每个从站的 AL Status 寄存器(0x0130),一旦发现 Error 位置位,立即记录错误码并停止后续状态请求,避免错误被覆盖。

三、状态错误码与常见异常

当状态转换失败时,从站会在 AL Status 寄存器中置位 Error 标志,并在 AL Status Code 字段给出具体错误码。常见错误码及其含义如下:

AL Status Code 常见值(十六进制):
0x0000  无错误
0x0011  Invalid requested state change(请求了非法状态跳转)
0x0012  Unknown requested state(请求了未知状态)
0x0013  Bootstrap not supported(不支持Bootstrap)
0x0014  No valid firmware(固件无效)
0x0016  Invalid mailbox configuration(邮箱配置无效)
0x0017  Invalid sync manager configuration(SM配置无效)
0x0018  No valid inputs available(无有效输入数据)
0x0019  No valid outputs(无有效输出数据)
0x001A  Synchronization error(同步错误,常见于DC)
0x001B  Sync manager watchdog(SM看门狗超时)
0x001D  Invalid output configuration(输出配置无效)
0x001E  Invalid input configuration(输入配置无效)
0x0020  Invalid watchdog configuration(看门狗配置无效)
0x0024  No valid PDO data(PDO数据无效)
0x0025  PDO length error(PDO长度错误)
0x0026  PDO mapping error(PDO映射错误)
0x0030  Invalid DC SYNCH configuration(DC同步配置无效)
0x0031  Invalid DC latch configuration(DC锁存配置无效)
0x0032  PLL error(锁相环错误)
0x0033  DC sync IO error(DC同步IO错误)
0x0034  DC sync timeout error(DC同步超时)
0x0035  DC invalid sync cycle time(DC同步周期无效)
0x0036  DC invalid sync0 cycle time(SYNC0周期无效)
0x0037  DC invalid sync1 cycle time(SYNC1周期无效)

实际排障中,错误码往往成组出现。例如从站无法进入OP且报 0x001A 与 0x0034,通常指向分布式时钟未锁定;若报 0x0025 与 0x0026,则优先检查PDO映射与过程数据长度是否与ESI文件一致。

四、典型案例:从站卡在SAFE-OP

某设备启动时,主站日志显示从站依次进入INIT、PRE-OP、SAFE-OP,但请求OP时反复失败,AL Status Code 为 0x001A。排查过程如下:

  1. 确认PDO映射与ESI一致,排除映射错误。
  2. 读取DC状态寄存器,发现SYNC0未锁定,参考时钟与从站时钟偏差持续增大。
  3. 检查网络拓扑,发现该从站与参考时钟从站之间经过一台不支持DC透传的交换机,导致时间戳抖动。
  4. 调整拓扑,使DC参考时钟从站与目标从站处于同一线型分支,重新启动后成功进入OP。
误区提醒:很多工程师看到“进不了OP”就反复重启或更换从站,却忽略了错误码已经明确指出是同步问题。正确做法是先读 AL Status Code,再按错误码定位到具体配置或拓扑环节,避免盲目替换硬件。

五、复盘与诊断流程固化

将状态机诊断固化为标准流程,可以显著缩短故障定位时间:

  • 第一步:读取所有从站的 AL Status,记录当前状态与错误码。
  • 第二步:按状态转换顺序逐级验证,确认失败发生在哪一级。
  • 第三步:根据错误码分类处理——邮箱类、SM类、PDO类、DC类。
  • 第四步:修复后先请求到SAFE-OP验证过程数据通道,再请求OP。
  • 第五步:记录错误码与处理措施,形成设备专属的故障知识库。

状态机不仅是启动流程的检查表,更是运行期健康监测的窗口。主站在运行中持续监控 AL Status,一旦发现从站从OP回退,可立即触发报警并保存现场数据,为后续恢复提供依据。