3. EtherCAT设备状态机

EtherCAT 从站设备上电后并不是立刻进入数据交换阶段,而是必须沿着一条严格定义的状态机路径逐级推进。主站通过写状态控制寄存器(ESC 寄存器 0x0120)请求目标状态,从站则在状态寄存器(0x0130)中回读当前实际状态与错误标志。量产验证中,状态机能否按预期迁移,是判断设备固件、EEPROM、PHY、拓扑与过程数据配置是否正确的最直接证据。

核心记忆点:状态迁移是“请求—检查—确认”的闭环。主站写 0x0120 请求状态,从站完成内部初始化后把 0x0130 的当前状态位置为对应值;若失败,错误位与错误码会同时置位,主站必须读取并解析,而不是盲目重试。

一、四个基本状态与迁移路径

EtherCAT 从站状态机定义了四个基本状态,按顺序为 Init(初始化)、Pre-Operational(预运行)、Safe-Operational(安全运行)、Operational(运行)。正常上电迁移路径是 I → P → S → O,反向迁移也允许,例如主站主动请求从 O 退回 S 或 P,用于参数重配或故障隔离。

  • Init(I):上电默认状态。此阶段从站不参与过程数据交换,邮箱通信尚未建立,主站可访问 ESC 寄存器、DL 信息与 EEPROM。量产验证重点检查上电后能否稳定停留在 I 并正确响应寄存器读。
  • Pre-Operational(P):邮箱通信可用,支持 CoE、FoE、EoE 等协议,可读写对象字典、下载固件、配置 PDO 映射。此阶段不进行过程数据交换,是参数配置的黄金窗口。
  • Safe-Operational(S):过程数据输入(TxPDO)已可上传,但输出(RxPDO)保持安全值不驱动执行器。此状态用于验证输入通道与同步,是量产中排查“输入正常但输出不动”的关键分界点。
  • Operational(O):输入输出均有效,设备进入正常生产运行。只有在此状态,RxPDO 才会真正作用于执行器。

二、状态迁移条件与验证要点

每一次迁移都有明确的先决条件。主站在请求目标状态后,会轮询 0x0130,直到当前状态等于目标状态或错误位置位。量产验证应把每个迁移条件拆成可测项。

迁移关键条件量产验证要点
I → PESC 寄存器可访问,EEPROM 校验通过,邮箱配置有效读 0x0130 确认无 EEPROM 错误;检查 SM0/SM1 邮箱配置
P → SSM2/SM3 过程数据通道配置完成,PDO 映射合法,DC 同步可建立核对 PDO 映射长度与 SM 长度一致;检查 DC 模式与周期
S → O输入数据已有效刷新,输出看门狗正常,无同步错误确认 TxPDO 数据变化;检查看门狗超时与同步窗口
O → S / S → P主站主动请求或错误触发降级验证降级后输出是否回到安全值,错误码是否可读

三、状态寄存器与错误码解析

状态寄存器 0x0130 是 16 位寄存器,低 4 位表示当前状态,高 12 位为错误标志与错误码。常见编码:0x01=Init,0x02=Pre-Op,0x04=Safe-Op,0x08=Op。错误位包括 EEPROM 错误、SM 看门狗、无效 SM 配置、无效邮箱配置、无效 PDO 配置、同步错误等。主站应同时读取 0x0130 与 0x0134(错误码)进行定位。

# 典型状态读取(伪代码)
state = read_register(0x0130)
current = state & 0x0F
error   = state & 0xF0
if error != 0:
    code = read_register(0x0134)
    log("state=0x%02X error=0x%02X code=0x%04X" % (current, error, code))

# 常见错误码含义
0x0001  EEPROM 未加载或校验失败
0x0002  SM 看门狗超时
0x0004  SM 配置无效
0x0008  邮箱配置无效
0x0010  PDO 配置无效
0x0020  同步错误 / DC 失锁

四、量产场景与排障复盘

场景一:设备始终停在 Init。优先检查 EEPROM 是否烧录、PHY 链路是否建立、ESC 供电与晶振是否正常。若 0x0130 返回 0x11,说明 EEPROM 错误位置位,需重新烧录并校验。

场景二:能到 Pre-Op 但无法进入 Safe-Op。多数是 SM2/SM3 长度与 PDO 映射不匹配,或 DC 同步参数错误。此时应读取 0x0134,若为 0x0010,重点核对 PDO 映射对象与 SM 长度。

场景三:进入 Op 后偶发掉回 Safe-Op。通常是看门狗超时或同步失锁,需检查主站周期抖动、DC 偏移与线缆质量。量产中应把状态迁移成功率、错误码分布纳入测试报告。

常见误区:只判断“最终是否到 Op”,忽略中间状态与错误码。量产验证必须记录每次迁移的耗时、失败状态与错误码,否则无法区分是固件问题、配置问题还是硬件一致性问题。
建议在产测工装中固化一条状态机巡检脚本:上电 → 读 I → 请求 P → 校验邮箱 → 请求 S → 校验输入 → 请求 O → 校验输出 → 主动降级 → 校验安全值。该脚本可覆盖 90% 以上的状态机相关缺陷。
EtherCAT 从站状态机迁移与寄存器关系 Init (I) 0x01 · 寄存器可访问 Pre-Operational (P) 0x02 · 邮箱通信可用 Safe-Operational (S) 0x04 · 输入有效/输出安全 Operational (O) 0x08 · 输入输出有效 请求 P 请求 S 请求 O 看门狗/同步错误降级 PDO/SM 配置错误降级 状态控制寄存器 0x0120 主站写入目标状态请求 0x01=Init 0x02=Pre-Op 0x04=Safe-Op 0x08=Op 写后轮询 0x0130 确认 状态寄存器 0x0130 低 4 位:当前状态 高 12 位:错误标志 0x0134:错误码 EEPROM / SM / PDO / 同步 回读

把状态机验证做扎实,量产阶段就能快速区分“设备根本没起来”“配置没配对”“同步不稳定”三类问题。状态寄存器与错误码不是附属信息,而是定位根因的第一手证据。