4、CANopen over EtherCAT (CoE) 核心:对象字典、PDO、SDO、紧急报文与心跳机制
CoE(CANopen over EtherCAT)是 EtherCAT 应用层协议中最常用、也是工业自动化领域部署最广泛的协议之一。它完整继承了 CANopen 的设备模型,包括对象字典(OD)、过程数据对象(PDO)、服务数据对象(SDO)、紧急报文(EMCY)和心跳(Heartbeat)机制,同时利用 EtherCAT 的高实时性和大带宽,解决了传统 CAN 总线在速率和节点数量上的瓶颈。理解 CoE 的核心机制,是进行 EtherCAT 从站固件开发、主站配置以及系统诊断的基础。本章将围绕这五大核心模块,从原理、操作流程、实战案例到常见误区进行系统拆解。
上图展示了 CoE 设备模型中各核心模块之间的关系。对象字典是“数据仓库”,PDO 和 SDO 是两种不同的“数据通道”,EMCY 是“报警器”,心跳是“看门狗”,而 NMT 状态机则是整个设备运行的“总调度”。下面我们逐一深入剖析。
4.1 对象字典(Object Dictionary):CoE 设备的数据中枢
核心原理
对象字典是 CoE 协议的核心数据结构,它以一个 16 位索引(Index)和 8 位子索引(Subindex)来唯一标识设备内的所有参数、变量、映射关系和功能对象。在 EtherCAT 从站中,对象字典通常由从站控制器的固件实现,并映射到特定的存储区域(RAM 或 Flash)。主站通过 SDO 或 PDO 访问这些对象,从而实现对从站的控制与状态读取。
对象字典的索引空间被划分为多个功能区:0x1000-0x1FFF 为通信参数区(如 0x1000 设备类型、0x1001 错误寄存器、0x1017 心跳生产周期、0x1018 身份标识);0x2000-0x5FFF 为制造商特定区(用于存放厂商自定义参数);0x6000-0x9FFF 为标准化设备 profile 区(如 CiA 402 驱动 profile 的对象)。每个对象条目都包含属性:名称、数据类型(如 UNSIGNED8、INTEGER32、VISIBLE_STRING)、访问权限(只读/只写/读写)、以及是否可映射到 PDO。
| 索引范围 | 功能区域 | 典型对象示例 | 访问方式 |
|---|---|---|---|
| 0x1000-0x1FFF | 通信参数 | 0x1000 设备类型、0x1017 心跳周期 | SDO / 部分 PDO |
| 0x2000-0x5FFF | 制造商特定 | 0x2000 增益参数、0x2100 序列号 | SDO |
| 0x6000-0x9FFF | 设备 Profile | 0x6040 控制字、0x6060 运行模式 | SDO + PDO |
操作流程:对象字典的建立与访问
- 定义对象条目:在从站固件中,通过结构体数组定义每个对象的索引、子索引、数据类型、默认值和访问回调函数。
- 注册到 OD 管理模块:将定义好的对象条目注册到 CoE 协议栈的对象字典管理器中,使其可通过 SDO 请求被访问。
- 主站读取/写入:主站通过 SDO 请求(索引+子索引)发起读写,从站协议栈解析请求并调用对应的回调函数,完成数据交换。
- PDO 映射配置:在 Pre-Op 状态下,主站通过 SDO 写入 PDO 映射对象(0x1600-0x17FF 为 RxPDO 映射,0x1A00-0x1BFF 为 TxPDO 映射),指定哪些 OD 条目进入过程数据。
案例拆解:伺服驱动器的对象字典设计
以一款 EtherCAT 伺服驱动器为例,其对象字典设计如下:
- 0x6040 控制字(U16,可映射 TxPDO):用于控制伺服使能、复位、急停等。
- 0x6060 运行模式(I8,可映射):选择位置/速度/转矩模式。
- 0x607A 目标位置(I32,可映射):位置模式下的目标值。
- 0x6064 实际位置(I32,可映射):编码器反馈值。
- 0x2000 速度环 KP(FLOAT,仅 SDO):速度环比例增益,调试时通过主站在线修改。
在调试过程中,工程师通过 TwinCAT 的 CoE 在线浏览工具,直接修改 0x2000 的值并观察电机响应,无需重新编译固件,极大提升了调试效率。
4.2 PDO(过程数据对象):实时数据交换的高速公路
核心原理
PDO 用于在 EtherCAT 周期通信中实时传输过程数据,如控制字、状态字、目标位置、实际速度等。PDO 分为 RxPDO(主站→从站)和 TxPDO(从站→主站)。每个 PDO 最多可映射 8 个对象条目(对于标准 CANopen 限制,但 EtherCAT 中可扩展),数据长度不超过 8 字节(标准 CAN 帧限制,但 EtherCAT 支持更长,通常为 4 字节对齐)。PDO 的映射关系在 Pre-Op 状态下通过 SDO 配置,配置完成后,在 Safe-Op 和 Op 状态下,PDO 数据随 EtherCAT 帧周期性地在过程数据区交换。
判断方法:PDO 映射的合法性检查
- 检查映射对象是否存在:被映射的 OD 条目必须存在且具有“可映射”属性。
- 检查数据类型长度:所有映射条目的总长度不能超过 PDO 的最大长度(通常为 8 字节或 16 字节,取决于从站配置)。
- 检查对齐规则:对于多字节数据(如 I32),起始位必须按字节对齐,否则主站会报错。
- 检查 PDO 方向:RxPDO 只能映射可写对象,TxPDO 只能映射可读对象。
实战场景:配置一个 8 字节的 TxPDO
假设我们需要从伺服驱动器上传 4 个 16 位数据:实际位置(低 16 位)、实际速度、电流反馈、报警代码。配置步骤如下:
- 在从站固件中定义这 4 个 OD 条目,并标记为可映射。
- 主站通过 SDO 写入 TxPDO 映射对象 0x1A00:子索引 0 写入映射数量 4,子索引 1 写入 0x60640010(索引 0x6064,子索引 0,长度 16 位),以此类推。
- 将 0x1A00 分配给 TxPDO 参数对象 0x1800,并设置同步类型(如 0x01 表示同步于周期事件)。
- 切换到 Op 状态,主站即可在每个周期从过程数据区读取这 8 字节。
4.3 SDO(服务数据对象):非实时的参数读写通道
核心原理
SDO 基于邮箱(Mailbox)通信,采用客户端/服务器模型,用于传输非实时数据,如参数配置、固件下载、诊断信息等。SDO 请求由主站(客户端)发起,从站(服务器)响应。SDO 支持分段传输(用于大数据)和快速传输(用于 4 字节以内数据)。在 EtherCAT 中,SDO 数据封装在邮箱报文中,通过 CoE 协议类型标识。
操作流程:SDO 读写时序
- 主站发送 SDO 下载请求(写):包含索引、子索引、数据长度和数据内容。
- 从站处理并返回 SDO 下载响应:包含索引、子索引和 abort code(成功为 0)。
- 主站发送 SDO 上传请求(读):包含索引和子索引。
- 从站返回 SDO 上传响应:包含索引、子索引、数据长度和数据内容。
如果发生错误(如对象不存在、访问权限不足),从站返回 abort code,例如 0x06020000 表示对象不存在,0x06090030 表示数据范围超出。
案例拆解:通过 SDO 修改从站节点地址
某项目中有 5 个相同的 EtherCAT 从站模块,出厂默认节点地址均为 1。为了区分,需要通过 SDO 修改每个模块的地址。操作如下:
- 将第一个模块单独连接,主站扫描到地址 1。
- 通过 SDO 写入对象 0x2000(制造商特定地址对象),值为 1。
- 写入后,从站将新地址保存到 EEPROM,并重启。
- 重复上述步骤,依次修改其余模块地址为 2-5。
此过程中,SDO 的 abort code 机制发挥了关键作用:如果写入的地址超出范围(如 0 或 256),从站会返回 0x06090030,提示主站数据错误,避免误配置。
4.4 紧急报文(EMCY)与心跳机制(Heartbeat)
核心原理
EMCY 用于从站主动上报错误状态。当从站检测到内部故障(如过压、过流、跟踪误差超限)时,立即通过邮箱发送一个紧急报文。报文包含错误寄存器(0x1001 的值)、错误码(16 位,如 0x5110 表示过压)、以及制造商特定的错误字段。主站收到 EMCY 后,可以快速定位故障源。
心跳机制用于监控从站是否存活。从站作为心跳生产者,以固定周期(由对象 0x1017 定义,单位 ms)发送心跳报文;主站作为消费者,监控心跳超时。如果主站在设定时间内未收到心跳,则判定从站离线。心跳消费者节点 ID 列表由对象 0x1016 配置。
判断方法:EMCY 与心跳的协同诊断
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 收到 EMCY 0x5110 | 直流母线过压 | 检查输入电压、制动电阻是否工作 |
| 心跳超时 | 从站掉电、网线断开、从站死机 | 检查 EtherCAT 链路状态、从站供电、看门狗配置 |
| EMCY 频繁触发 | 参数设置不当、干扰 | 查看错误寄存器、调整滤波器参数 |
实战场景:利用 EMCY 和心跳定位产线停机原因
在某包装机械产线上,EtherCAT 系统包含 1 个主站和 12 个从站(伺服、IO、编码器)。某次运行中,设备突然停机,主站报警“从站 5 丢失”。工程师的排查过程如下:
- 查看主站日志,发现从站 5 在停机前 10ms 发送了一条 EMCY,错误码 0x8110(过流)。
- 检查从站 5 的驱动器和电机,发现电机电缆有磨损,导致相间短路。
- 更换电缆后,重新上电,从站 5 恢复正常,心跳恢复,产线继续运行。
此案例中,EMCY 提供了故障的直接原因(过流),而心跳机制则确认了从站 5 的离线状态。两者结合,帮助工程师在 10 分钟内定位了问题,避免了逐一排查的耗时。
1. 所有应用参数必须纳入对象字典管理,避免使用全局变量散落各处。
2. PDO 映射应保持精简,只映射必要的控制与状态数据。
3. 合理配置心跳周期(通常为 100-200ms),过短会增加总线负载,过长则无法及时检测故障。
4. 在从站固件中,为每个 EMCY 错误码提供详细的错误描述,便于主站显示和日志记录。