4. ESI文件概述
在EtherCAT实时以太网系统中,从站设备(Slave)必须能够被主站(Master)正确识别、配置和运行。ESI(EtherCAT Slave Information)文件正是承担这一核心使命的“设备身份证”与“配置说明书”。它是一份基于XML格式的文本文件,由从站设备制造商提供,随设备一同发布。主站软件在启动时读取该文件,获取从站的类型、对象字典、同步管理器(SM)、FMMU、过程数据映射(PDO)、分布式时钟(DC)能力等关键信息,从而完成从站的自动配置与实时通信建立。本章将系统讲解ESI文件的作用、结构、XML格式基础,以及它与设备描述(如CoE对象字典、SII EEPROM)之间的紧密关系。
4.1 ESI文件的核心作用:从“识别”到“配置”的桥梁
ESI文件在EtherCAT系统中扮演着多重角色,其核心价值在于将物理从站设备的能力抽象为标准化、可解析的文本描述,使主站无需“认识”具体硬件即可完成配置。具体而言,ESI文件的作用体现在以下四个层面:
- 设备识别与身份验证:ESI文件包含厂商ID(Vendor ID)、产品代码(Product Code)、修订号(Revision Number)和序列号(Serial Number)等唯一标识信息。主站通过读取从站SII EEPROM中的这些信息,与ESI文件进行比对,确认设备类型和版本,防止错误配置。
- 对象字典(OD)预定义:EtherCAT从站通常遵循CANopen over EtherCAT(CoE)协议,其所有可访问的参数都组织在对象字典中。ESI文件完整描述了OD的索引(Index)、子索引(SubIndex)、数据类型、访问权限、默认值和取值范围,主站据此生成配置界面和诊断视图。
- 过程数据映射(PDO)与同步管理器(SM)配置:实时通信的核心是过程数据的周期性交换。ESI文件定义了RxPDO和TxPDO的映射关系,即哪些对象被映射到输入/输出过程数据中,以及SM的通道分配、方向、同步模式和看门狗参数。这直接决定了主站与从站之间数据交换的格式和时序。
- 分布式时钟(DC)与通信参数设定:对于需要精确同步的应用(如运动控制),ESI文件提供了DC功能的相关参数,包括同步模式(如SYNC0/SYNC1)、同步周期、时钟漂移补偿使能等。此外,还包含邮箱(Mailbox)通信参数(如CoE、FoE、EoE支持情况)、最大PDU长度、站地址配置方式等。
实战场景:某伺服驱动器从站,其ESI文件定义了对象0x6060(模式切换)和0x607A(目标位置)映射到TxPDO/RxPDO。主站TwinCAT加载ESI后,在过程数据视图自动显示这些变量,工程师无需手动创建映射,直接编写PLC程序即可控制伺服。若没有ESI文件,工程师必须手动查阅手册并逐个建立映射,不仅效率低且极易出错。
4.2 ESI文件的结构解析:从根元素到叶子节点
ESI文件遵循EtherCAT Technology Group(ETG)制定的XML Schema规范(通常为ETG.2000系列)。其结构层次清晰,从根元素<EtherCATInfo>开始,逐级展开。理解这一结构是进行ESI文件编写、修改和排障的基础。
| 结构层级 | 元素/属性 | 说明 | 典型示例 |
|---|---|---|---|
| 根元素 | <EtherCATInfo> |
整个XML文档的根节点,包含版本信息 | Version="1.0" |
| 厂商信息 | <Vendor> |
厂商ID、名称、URL等 | <Id>0x00000002</Id> |
| 设备描述 | <Descriptions> → <Devices> → <Device> |
每个Device对应一个具体型号,包含类型、名称、产品代码、修订号 | <ProductCode>0x12345678</ProductCode> |
| 配置文件 | <Profile> |
引用设备行规(如CiA402),定义对象字典入口 | <ProfileNo>0x00000092</ProfileNo> |
| 对象字典 | <Dictionary> → <Objects> → <Object> |
每个Object定义索引、名称、类型、子索引、默认值、访问权限等 | <Index>0x6040</Index> |
| 过程数据 | <RxPdo> / <TxPdo> |
定义PDO的映射条目,引用OD中的对象 | <Index>0x1600</Index> |
| 同步管理器 | <Sm> |
定义SM通道号、方向、分配地址、看门狗等 | <Enable>1</Enable> |
| DC配置 | <Dc> |
定义分布式时钟同步参数 | <Sync0CycleTime>1000</Sync0CycleTime> |
| 邮箱配置 | <Mailbox> |
定义CoE、FoE、EoE等协议支持情况 | <CoE>1</CoE> |
在实际操作中,工程师通常不会手动编写整个ESI文件,而是使用ETG提供的ESI Generator工具或从站协议栈供应商(如Beckhoff、Infineon、Renesas)提供的模板进行修改。但理解结构对于排查“主站无法识别从站”、“PDO映射错误”等问题至关重要。
操作流程:当需要修改ESI文件时,建议遵循以下步骤:①备份原始文件;②使用XML编辑器(如Notepad++、VS Code)打开;③定位到需要修改的<Device>节点;④修改产品代码或修订号时,务必与SII EEPROM中的值保持一致;⑤修改PDO映射后,需检查SM的分配地址是否匹配;⑥使用ETG提供的Schema验证工具(如XMLSpy)进行合法性校验。
4.3 XML格式基础:标签、属性与数据类型的约定
ESI文件本质上是XML文档,因此遵循XML语法规则。但EtherCAT规范对其进行了严格的约束,包括命名空间、元素顺序、数据类型定义等。掌握这些基础约定,是正确解读和生成ESI文件的前提。
- 命名空间(Namespace):ESI文件通常声明默认命名空间
xmlns="http://www.ethercat.org/ns/1.0",以及用于Schema校验的xsi:schemaLocation。主站解析器依赖命名空间来区分元素含义。 - 数据类型(Data Types):ESI中大量使用ETG定义的基本数据类型,如
UINT8、UINT16、UINT32、INT8、INT16、INT32、BIT、STRING等。对象字典中的每个对象都必须明确指定数据类型,且与从站固件中的实际定义严格一致。 - 索引与子索引(Index/SubIndex):对象字典的索引使用16位十六进制表示(如
0x6040),子索引使用8位十六进制表示(如0x00)。在XML中,这些值通常以十进制或十六进制字符串形式存储,但需注意0x前缀的使用规范。 - 默认值与访问权限:每个对象可以包含
<DefaultValue>和<Access>(如ro只读、rw读写、wo只写)属性。主站在初始化从站时,会尝试将默认值写入从站,因此默认值必须与从站固件的初始状态一致。
<!-- 一个典型的ESI对象字典条目示例 -->
<Object>
<Index>0x6040</Index>
<Name>Controlword</Name>
<Type>UINT16</Type>
<BitSize>16</BitSize>
<SubObjects>
<SubObject>
<SubIndex>0x00</SubIndex>
<Name>Number of Entries</Name>
<Type>UINT8</Type>
<BitSize>8</BitSize>
<DefaultValue>1</DefaultValue>
<Access>ro</Access>
</SubObject>
<SubObject>
<SubIndex>0x01</SubIndex>
<Name>Controlword</Name>
<Type>UINT16</Type>
<BitSize>16</BitSize>
<DefaultValue>0x0000</DefaultValue>
<Access>rw</Access>
</SubObject>
</SubObjects>
</Object>
常见误区:初学者常将XML中的<Type>与C语言中的变量类型混淆。例如,UINT16在XML中仅表示数据宽度为16位,但实际存储时可能采用小端序(Little-Endian)。主站与从站之间的字节序转换由EtherCAT协议栈自动处理,但ESI文件中的BitSize必须与从站固件定义严格匹配,否则会导致数据错位。
4.4 ESI与设备描述的关系:SII EEPROM、ESI与主站配置的三角联动
在EtherCAT系统中,设备描述信息并非只存在于ESI文件中。从站硬件上还固化了一份精简的“设备描述”——SII EEPROM(Slave Information Interface EEPROM)。两者既有分工又有重叠,理解其关系对于设备调试和故障排查至关重要。
SII EEPROM是物理存储在从站设备上的非易失性存储器(通常为I²C接口的EEPROM),容量从1Kbit到64Kbit不等。它存储了从站运行所必需的最基本信息,包括:厂商ID、产品代码、修订号、站地址配置方式、邮箱通信参数、SM配置、PDO映射的“默认值”以及一些制造商特定数据。主站在上电后,首先通过EtherCAT状态机中的“初始化”阶段读取EEPROM内容,以获取从站的基本能力。
ESI文件则是主站侧使用的“完整版”描述。它包含了EEPROM中所有信息的详细解释,并额外提供了对象字典的完整定义、默认值、注释、图形化配置界面所需的显示名称等。主站软件(如TwinCAT、CODESYS、KPA)在工程配置阶段加载ESI文件,将其中的信息导入工程数据库。当实际连接从站时,主站会读取EEPROM中的关键字段,与ESI文件进行交叉校验。
| 对比维度 | SII EEPROM(硬件) | ESI文件(软件) | 主站配置(运行) |
|---|---|---|---|
| 存储位置 | 从站设备上的EEPROM芯片 | 主站工程目录或系统数据库 | 主站运行时内存 |
| 内容完整性 | 精简,仅包含启动必需信息 | 完整,包含OD、PDO、DC、注释等 | 根据ESI生成,可动态修改 |
| 更新频率 | 极少更新(需专用工具烧写) | 随固件版本更新而更新 | 每次扫描/配置时加载 |
| 作用阶段 | 上电初始化、状态机切换 | 工程规划、配置生成 | 实时通信、诊断 |
| 一致性要求 | 三者必须保持一致,否则主站报错或功能异常 | ||
案例拆解:某现场总线IO从站,用户反馈主站无法进入OP(Operational)状态。排查过程如下:①主站扫描发现设备,但显示“Device not found in ESI database”。②检查从站EEPROM中的厂商ID为0x00000002(Beckhoff),产品代码为0x12345678。③在TwinCAT的EtherCAT设备列表中手动添加ESI文件,发现该ESI文件中的产品代码为0x12345679。④进一步检查发现,从站固件升级后,EEPROM中的产品代码已更新,但用户使用的ESI文件仍是旧版本。⑤解决方案:从设备制造商官网下载与固件版本匹配的最新ESI文件,替换后重新扫描,设备正常进入OP状态。此案例说明,EEPROM与ESI的版本匹配是系统稳定运行的基础。
总结复盘:ESI文件不是孤立的文档,它与从站硬件(EEPROM)和主站软件(配置工具)构成一个完整的“描述-校验-运行”闭环。工程师在开发从站时,必须确保EEPROM中的关键字段与ESI文件完全一致;在维护系统时,应建立ESI文件的版本管理机制,避免因文件过期导致配置失败。对于主站开发者,则需实现严格的校验逻辑,在发现不匹配时给出明确的错误提示,而非静默使用错误配置。