4. 从站协议栈配置与对象字典
EtherCAT从站能否被主站正确识别、进入OP状态并稳定交换过程数据,取决于从站固件中三样东西是否一致:协议栈代码、对象字典(Object Dictionary,OD)以及ESI/XML描述文件。三者本质上描述的是同一套从站能力,只是面向的对象不同——协议栈代码面向从站CPU运行,OD面向协议栈内部寻址,ESI/XML面向主站配置工具。本节以TI Sitara平台(如AM335x/AM437x配合PRU-ICSS)上的EtherCAT从站为例,说明如何用SSC工具生成代码、编写ESI、定义OD条目,并完成PDO映射与SM通道配置。
一、SSC工具与从站代码生成
SSC(Slave Stack Code)工具是ETG提供的从站协议栈代码生成器,本质是一个带图形界面的配置脚本,最终输出一份与厂商无关的协议栈源码加一份与从站能力相关的定制文件。使用流程是:在SSC工具中新建工程,选择目标硬件抽象层(如TI Sitara + PRU-ICSS对应的HAL)、选择协议栈版本与是否启用DC(分布式时钟)、CoE、FoE等可选功能,然后逐项填写厂商ID、产品代码、修订号、序列号、设备名称、支持的SM通道数量、默认PDO条目等。工具据此生成 ecatappl.c、ecatcoe.c、objdef.c、ecatappl.h 等文件,其中 objdef.c 就是对象字典的C语言实现骨架。
需要特别注意的是,SSC工具生成的代码只是“骨架”,它把OD条目、PDO映射、SM配置以宏和数组的形式固化下来,真正的应用逻辑(如读取ADC、驱动电机)需要开发者填入 APPL_InputMapping 与 APPL_OutputMapping 回调中。因此SSC配置一旦确定,后续若修改PDO条目,必须重新生成或手工同步修改 objdef.c 与ESI,否则主站读到的描述与实际行为会不一致。
二、对象字典(OD)条目定义
对象字典是EtherCAT从站的数据模型,采用16位索引 + 8位子索引寻址。索引范围有明确约定:0x1000–0x1FFF为通信对象(如0x1000设备类型、0x1018身份对象、0x1C00 SM通信类型、0x1C12/0x1C13 SM同步管理器PDO分配),0x2000–0x5FFF为厂商特定对象(如0x6000输入、0x7000输出),0x6000–0x9FFF为过程数据对象。每个条目包含索引、子索引、数据类型、访问权限(RO/RW/WO)、默认值与是否可映射(PDO Mapping)等属性。
以一路模拟量输入为例,可在0x6000下定义:
Index 0x6000, Sub 0x01: AI_Channel1, DataType = INTEGER16, Access = RO, PDO Mapping = Yes
Index 0x6000, Sub 0x02: AI_Channel2, DataType = INTEGER16, Access = RO, PDO Mapping = Yes
Index 0x6000, Sub 0x00: 条目数量 = 2
在SSC生成的 objdef.c 中,这些条目会以 TOBJECT 结构体数组形式出现,并挂到 ObjDic[] 上。开发者需要保证索引、子索引、数据类型与ESI中的描述完全一致,否则主站SDO读取会返回 0x06010000(不支持的对象)或 0x06020000(对象不存在)。
三、PDO映射与SM通道配置
PDO映射决定过程数据在报文中的排列顺序。EtherCAT从站使用SM2(输出,主站→从站)和SM3(输入,从站→主站)承载过程数据。SM通道配置包括起始地址、长度、控制字节与是否使能看门狗。典型配置如下:
| SM | 方向 | 起始地址 | 长度 | 用途 |
|---|---|---|---|---|
| SM0 | 主→从 | 0x1000 | 128 B | 邮箱输出 |
| SM1 | 从→主 | 0x1080 | 128 B | 邮箱输入 |
| SM2 | 主→从 | 0x1100 | 8 B | 过程数据输出 |
| SM3 | 从→主 | 0x1180 | 8 B | 过程数据输入 |
PDO映射通过0x1C12(RxPDO,主站写入从站)和0x1C13(TxPDO,从站上传主站)配置。例如把0x6000:01与0x6000:02映射到TxPDO 0x1A00:
0x1A00:00 = 2
0x1A00:01 = 0x60000110 // 0x6000:01, 16位
0x1A00:02 = 0x60000210 // 0x6000:02, 16位
0x1C13:00 = 1
0x1C13:01 = 0x1A00
映射值的高16位是索引,低8位是子索引,中间8位是位长度。若位长度与实际数据类型不符,主站会报 0x06040041(映射对象长度错误)。
四、ESI/XML文件编写
ESI(EtherCAT Slave Information)是XML格式的从站描述文件,主站配置工具(如TwinCAT、SOEM)通过它识别从站。ESI必须与OD、PDO映射、SM配置严格对应。关键节点包括:<Vendor>、<Device>、<Sm>、<RxPdo>、<TxPdo>、<Dictionary>。其中 <Dictionary> 用于描述OD条目,<Sm> 描述SM通道,<RxPdo>/<TxPdo> 描述PDO映射。编写时最容易出错的是索引、子索引、位长度三处不一致,导致主站扫描到从站却无法进入OP状态。
五、一致性检查与常见问题
配置完成后,建议按以下顺序核对:第一,ESI中的 <Sm> 起始地址与长度是否与 objdef.c 中SM配置一致;第二,<RxPdo>/<TxPdo> 的索引、子索引、位长度是否与0x1C12/0x1C13及0x1A00/0x1600一致;第三,OD中标记为可映射的条目是否确实出现在PDO映射中。常见故障包括:主站扫描到从站但停留在PREOP,通常是SM看门狗或邮箱配置错误;进入OP后过程数据全为0,通常是 APPL_InputMapping 未把实际数据写入映射缓冲区;SDO读取返回 0x06010000,通常是ESI的Dictionary与固件OD不一致。
objdef.c 与ESI是“同源”的,建议把SSC工程文件、ESI、固件源码放在同一版本库中管理,任何PDO或OD变更都同步更新三处,避免主站描述与从站行为脱节。