4. EtherCAT从站信息文件(ESI)解析与伺服设备描述
在EtherCAT网络中,主站启动后并不需要人工逐台输入从站参数,而是通过读取每个从站随设备提供的ESI(EtherCAT Slave Information)文件来获知“这台设备是谁、能做什么、怎么和它交换数据”。ESI是一份符合ETG.2000规范的XML文档,通常以.xml为扩展名,由设备厂商随伺服驱动器发布。主站配置工具(如TwinCAT、SOEM、IgH EtherCAT Master配合配置器)解析ESI后,才能正确建立过程数据映射、配置同步管理器并进入OP状态。理解ESI的结构,是排查“从站识别异常、PDO映射失败、进入OP超时”等问题的前提。
ESI的XML骨架与命名空间
ESI文件的根元素是<EtherCATInfo>,其下主要分为<Vendor>、<Descriptions>和可选的<Modules>三大部分。<Vendor>描述厂商信息,其中<Id>是厂商ID(十六进制,如0x00000002),必须与从站EEPROM中写入的Vendor ID一致,否则主站会拒绝匹配。<Descriptions>下包含一个或多个<Devices>,每个<Device>对应一款具体设备,内部再细分<Type>、<Name>、<Info>、<GroupType>、<Profile>、<Fmmu>、<Sm>、<RxPdo>、<TxPdo>、<Dc>等节点。命名空间通常声明为http://www.ethercat.org/schemas/EtherCATInfo,解析时需按命名空间处理,否则XPath查询会失败。
设备标识由<Type>(产品型号编码,十六进制Product Code)和<RevisionNo>(修订号)共同构成。主站扫描时读取从站EEPROM中的Product Code与Revision No,与ESI中的<Type>和<RevisionNo>比对,匹配成功才加载对应描述。若厂商升级了固件但未更新RevisionNo,主站可能加载旧描述,导致PDO条目错位——这是现场常见的隐性故障。
对象字典与PDO映射
伺服驱动器的对象字典(Object Dictionary, OD)是CoE(CANopen over EtherCAT)通信的核心,ESI通过<Dictionary>节点描述其中的对象。每个对象由索引(Index,16位)、子索引(SubIndex,8位)、数据类型、访问权限和默认值定义。例如0x6040是控制字(Controlword,UINT16),0x6041是状态字(Statusword,UINT16),0x6060是运行模式(Modes of Operation,SINT8),0x607A是目标位置(Target Position,INT32)。这些是CiA402协议规定的标准对象,伺服厂商还会在厂商特定区(0x2000~0x5FFF)定义增益、滤波器、编码器分辨率等参数。
PDO映射决定了每个通信周期实际传输哪些对象。ESI中<RxPdo>定义主站发给从站的数据(输出),<TxPdo>定义从站发给主站的数据(输入)。每个PDO由<Index>标识(如0x1600、0x1A00),内部<Entry>列出映射的对象索引、子索引和位长度。例如一个典型的RxPdo 0x1600可能包含:0x6040:00(16位控制字)、0x607A:00(32位目标位置)、0x6060:00(8位运行模式),总长度56位,需补齐到字节边界。TxPdo 0x1A00则包含0x6041:00(状态字)、0x6064:00(实际位置)、0x6061:00(当前模式)等。映射条目必须与从站固件中实际支持的PDO配置一致,否则SDO配置阶段会返回0x06010000(不支持的对象)或0x06040041(映射长度错误)。
同步管理器配置
同步管理器(SyncManager, SM)是EtherCAT从站控制器(ESC)内部的缓冲区管理单元,ESI中<Sm>节点定义每个SM的编号、方向、起始地址、长度和控制字节。典型伺服从站有4个SM:SM0(邮箱输出,主站→从站,用于SDO/CoE)、SM1(邮箱输入,从站→主站)、SM2(过程数据输出,主站→从站,对应RxPdo)、SM3(过程数据输入,从站→主站,对应TxPdo)。SM2和SM3的长度必须与PDO映射的总字节数匹配,且起始地址不能重叠。若SM配置与PDO长度不一致,主站会在PreOP→SafeOP转换时报0x001E(SM长度不匹配)或0x0024(SM看门狗超时)。
设备标识与版本管理
设备标识的匹配逻辑是:主站读取从站EEPROM中的Vendor ID和Product Code,在本地ESI库中查找<Vendor><Id>和<Device><Type>均匹配的条目。RevisionNo用于区分同一产品的不同固件版本,主站通常要求ESI中的RevisionNo大于等于从站实际RevisionNo,或完全相等,具体取决于主站实现。若现场更换了同型号但不同批次的伺服,RevisionNo可能不同,此时需要确认ESI库中是否有对应版本,否则主站可能报“设备描述不匹配”。
版本管理还涉及ESI文件本身的版本。厂商发布新固件时,应同步更新ESI中的<RevisionNo>和<Info>中的版本说明。工程现场应建立ESI库版本台账,记录每台伺服使用的ESI文件名、RevisionNo和对应固件版本。当出现“同一网络内同型号伺服行为不一致”时,首先检查各从站的RevisionNo是否一致,再核对主站加载的ESI是否与之一一对应。
实操:解析一份伺服ESI并核对关键字段
以下以某伺服驱动器ESI片段为例,展示需要重点核对的字段。假设文件名为ServoDrive_A_V1.2.xml:
<EtherCATInfo>
<Vendor>
<Id>#x00000002</Id>
<Name>Example Vendor</Name>
</Vendor>
<Descriptions>
<Devices>
<Device>
<Type>#x00000002</Type>
<RevisionNo>#x00010000</RevisionNo>
<Name>ServoDrive_A</Name>
<Sm>
<Sm><Index>#x2</Index><StartAddress>#x1100</StartAddress>
<ControlByte>#x64</ControlByte><Enable>1</Enable></Sm>
<Sm><Index>#x3</Index><StartAddress>#x1180</StartAddress>
<ControlByte>#x20</ControlByte><Enable>1</Enable></Sm>
</Sm>
<RxPdo><Index>#x1600</Index>
<Entry><Index>#x6040</Index><SubIndex>0</SubIndex><BitLen>16</BitLen></Entry>
<Entry><Index>#x607A</Index><SubIndex>0</SubIndex><BitLen>32</BitLen></Entry>
<Entry><Index>#x6060</Index><SubIndex>0</SubIndex><BitLen>8</BitLen></Entry>
</RxPdo>
<TxPdo><Index>#x1A00</Index>
<Entry><Index>#x6041</Index><SubIndex>0</SubIndex><BitLen>16</BitLen></Entry>
<Entry><Index>#x6064</Index><SubIndex>0</SubIndex><BitLen>32</BitLen></Entry>
<Entry><Index>#x6061</Index><SubIndex>0</SubIndex><BitLen>8</BitLen></Entry>
</TxPdo>
</Device>
</Devices>
</Descriptions>
</EtherCATInfo>
核对要点:SM2起始地址0x1100,长度由PDO总位数决定——RxPdo共16+32+8=56位,即7字节,SM2长度应至少为7字节(通常配置为8或16字节对齐)。SM3起始地址0x1180,TxPdo同样56位。若SM2与SM3地址区间重叠,或长度小于PDO实际字节数,主站会在SafeOP阶段报错。此外,ControlByte中0x64表示SM2为输出方向、使用缓冲模式,0x20表示SM3为输入方向,这些需与ESC硬件配置一致。
<Sm>长度字段(部分ESI通过<DefaultSize>或由PDO推导)对比。若PDO映射被主站工具动态修改,需确保修改后的总长度不超过SM缓冲区容量。
完成ESI解析与核对后,主站即可按<Sm>配置ESC的同步管理器,按<RxPdo>/<TxPdo>写入PDO映射,并通过SDO读取0x1C12/0x1C13确认从站实际支持的PDO分配。只有标识匹配、OD可访问、PDO映射一致、SM配置正确,从站才能从PreOP顺利进入SafeOP并最终到达OP,开始周期性的过程数据交换。