4、ESI文件结构:根元素、字典、设备描述、配置文件等核心组成部分
EtherCAT从站信息描述文件(ESI,EtherCAT Slave Information)是EtherCAT从站设备的“数字身份证”,它采用XML格式,完整描述了从站的设备类型、对象字典、过程数据映射、同步管理、分布式时钟、厂商信息及启动参数等关键属性。主站(如TwinCAT、CODESYS、KPA等)在扫描总线时,正是通过解析ESI文件来识别从站能力并自动配置通信参数。理解ESI文件的结构层次,是进行从站开发、调试与集成的基础。本章将深入拆解ESI文件的四大核心组成部分:根元素、字典(Dictionary)、设备描述(Device Description)与配置文件(Configuration),并结合实际工程案例,帮助读者建立从“文件结构”到“工程应用”的完整认知。
4.1 根元素与命名空间:ESI文件的骨架
ESI文件的根元素是<EtherCATInfo>,它定义了XML的版本、编码方式以及EtherCAT协议版本。所有其他元素都嵌套在这个根元素之下。根元素内部通常包含Vendor、Descriptions、Mailbox和Groups四个主要子节点。其中,Vendor节点用于声明厂商的唯一ID(由EtherCAT Technology Group分配)和厂商名称,这是主站识别设备来源的关键依据。Mailbox节点定义了邮箱通信的协议类型(如CoE、SoE、FoE、EoE)以及相关参数,例如邮箱通道大小、最大长度等。Groups节点则用于描述模块化设备或设备组,在复杂从站(如模块化I/O)中较为常见。
xmlns:xsi和xsi:noNamespaceSchemaLocation属性指向官方XSD Schema文件,该文件用于校验ESI文件的格式合法性。主站在解析ESI时,首先会验证XML结构是否符合Schema规范,任何标签缺失或属性错误都会导致文件被拒绝加载。因此,根元素不仅是逻辑上的起点,更是格式合规性的第一道门槛。
4.1.1 判断方法与操作流程
在实际工程中,判断一个ESI文件是否结构完整,可以通过以下步骤进行:
- 检查根元素:确认
<EtherCATInfo>是否存在,且包含Version属性(通常为1.0或更高)。 - 验证Vendor节点:确认
Vendor节点下的Id是否为有效的ETG分配的厂商ID,Name是否与设备铭牌一致。 - 确认Descriptions存在:至少包含一个
Device子节点,否则主站无法识别设备类型。 - 使用官方校验工具:ETG提供Schema校验工具(如ETC_ValidationTool),将ESI文件拖入工具中,若提示“Validation OK”,则说明根元素及整体结构合规。
4.1.2 案例拆解:一个典型的根元素片段
<?xml version="1.0" encoding="UTF-8"?>
<EtherCATInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="EtherCATInfo.xsd" Version="1.0">
<Vendor>
<Id>0x000000AB</Id>
<Name>Acme Automation GmbH</Name>
</Vendor>
<Descriptions>
<Device>...</Device>
</Descriptions>
<Mailbox>
<CoE>...</CoE>
</Mailbox>
</EtherCATInfo>
上述代码展示了根元素的基本骨架。其中Id为十六进制表示的厂商ID,Name为厂商全称。在实际项目中,若主站扫描不到设备,首先应检查此处的ID是否与从站EEPROM中的厂商ID一致。
4.1.3 常见误区与复盘
Vendor节点。这会导致主站将设备识别为其他厂商的产品,进而加载错误的驱动或对象字典。正确的做法是:从ETG官网申请自己的厂商ID,或使用开发板厂商提供的模板进行修改。
4.2 字典(Dictionary):对象字典与PDO映射
字典是ESI文件中最核心的部分,它对应从站设备中的对象字典(OD,Object Dictionary)。对象字典是CANopen协议中的概念,在EtherCAT中通过CoE(CANopen over EtherCAT)协议继承并扩展。字典部分位于<Descriptions><Device><Dictionary>节点下,包含<Objects>和<Objects>定义了所有可访问的对象条目,每个条目由索引(Index)、子索引(SubIndex)、名称、数据类型、访问权限(只读/读写)和默认值组成。<PDO>则定义了过程数据对象,即实时通信中周期性交换的数据映射关系,分为RxPDO(主站到从站)和TxPDO(从站到主站)。
4.2.1 对象条目的工程意义
每个对象条目都对应从站固件中的一个变量或寄存器。例如,一个数字量输入模块的0x6000索引可能对应8位输入状态。主站通过SDO(服务数据对象)访问这些条目进行参数配置,而通过PDO进行实时数据交换。在ESI文件中,对象条目的定义必须与从站固件中的实际实现完全一致,否则会导致读写错误或数据错位。
| 索引范围 | 用途 | 示例 |
|---|---|---|
| 0x1000-0x1FFF | 通信参数、设备信息 | 0x1000(设备类型)、0x1018(标识对象) |
| 0x2000-0x5FFF | 制造商特定对象 | 0x2000(用户自定义参数) |
| 0x6000-0x6FFF | 输入数据(RxPDO映射源) | 0x6000(数字量输入) |
| 0x7000-0x7FFF | 输出数据(TxPDO映射源) | 0x7000(数字量输出) |
4.2.2 PDO映射的配置流程
PDO映射决定了哪些对象条目被映射到过程数据中。在ESI文件中,PDO映射通过<RxPDO>和<TxPDO>标签下的<Entry>子标签实现。每个Entry包含索引、子索引和位长度。主站根据这些信息自动生成过程数据映像。配置流程如下:
- 确定从站需要周期性交换的数据对象(如输入状态、输出控制字)。
- 在ESI文件的
<PDO>节点下创建对应的<RxPDO>或<TxPDO>。 - 为每个PDO添加
<Entry>,指定对象索引、子索引和位长度。 - 确保所有映射的条目在
<Objects>中已定义。
4.2.3 案例拆解:一个16位输入模块的字典定义
<Dictionary>
<Objects>
<Object Index="0x6000" Name="Input_16Bit" ObjectType="VAR">
<SubIndex Index="0" Name="Number_of_Entries" DataType="UINT8" Access="ro">1</SubIndex>
<SubIndex Index="1" Name="Input_Value" DataType="UINT16" Access="ro"/>
</Object>
</Objects>
<PDO>
<TxPDO Index="0x1A00" Name="Input_16Bit_PDO">
<Entry Index="0x6000" SubIndex="1" BitLength="16"/>
</TxPDO>
</PDO>
</Dictionary>
上述定义中,对象0x6000包含一个16位输入值,TxPDO0x1A00将其映射为过程数据。主站扫描后,会自动在过程数据映像中分配16位空间用于接收该输入值。
4.3 设备描述(Device Description):从站硬件与通信参数的绑定
设备描述部分位于<Descriptions><Device>节点下,除了包含字典外,还包含<Type>、<Name>、<Rev>(版本号)、<ProductCode>(产品代码)以及<Fmmu>(现场总线内存管理单元)和<Sm>(同步管理)等关键配置。这些信息将ESI文件中的逻辑对象与物理硬件绑定。例如,<Sm>节点定义了同步管理通道的物理地址、方向(输入/输出)和分配到的PDO索引,而<Fmmu>则定义了地址映射规则。
4.3.1 同步管理(SM)与FMMU的配置
同步管理通道(SM)是ESC(EtherCAT从站控制器)内部用于管理过程数据和邮箱数据交换的硬件通道。在ESI文件中,每个SM通道需要指定其物理起始地址、控制寄存器地址以及对应的PDO。FMMU(Fieldbus Memory Management Unit)则负责将主站逻辑地址映射到从站物理内存地址。配置错误会导致数据无法正确路由。
| SM通道 | 方向 | 分配PDO | 物理地址范围 |
|---|---|---|---|
| SM2 | 输出(主站→从站) | RxPDO 0x1600 | 0x1000-0x10FF |
| SM3 | 输入(从站→主站) | TxPDO 0x1A00 | 0x1100-0x11FF |
4.3.2 设备描述与固件的一致性检查
在从站上电时,主站会读取从站EEPROM中的信息(包括厂商ID、产品代码、版本号),并与ESI文件中的设备描述进行比对。若不一致,主站会报错或加载错误的配置。因此,设备描述中的ProductCode和Rev必须与烧录到EEPROM中的值完全一致。
Rev版本号。否则,旧版本的主站配置可能导致新固件功能无法使用,甚至通信异常。
4.4 配置文件(Configuration):主站集成与启动参数
配置文件部分通常指ESI文件中用于指导主站进行初始化和参数配置的附加信息,包括<Profile>(如CoE配置文件)、<ProcessData>(过程数据默认参数)以及<InitCmd>(初始化命令)。这些配置确保主站能够正确设置从站的通信参数,例如分布式时钟(DC)的同步周期、看门狗时间等。在复杂系统中,配置文件还包含模块化设备的模块组合规则。
4.4.1 初始化命令(InitCmd)的作用
<InitCmd>允许在从站启动时自动执行一系列SDO写入操作,用于配置从站的默认参数。例如,可以设置一个模拟量模块的量程为0-10V,或设置一个伺服驱动器的最大电流。这避免了主站应用程序中编写额外的初始化逻辑。
<InitCmd>
<Command>
<Index>0x8000</Index>
<SubIndex>1</SubIndex>
<Data>0x00000064</Data> <!-- 设置量程为100 -->
</Command>
</InitCmd>
4.4.2 配置文件的实战场景
在一个包含多个伺服驱动器的运动控制系统中,每个驱动器可能需要不同的增益参数。通过ESI文件中的<InitCmd>,可以在主站扫描阶段自动写入这些参数,确保驱动器在运行前处于正确的控制状态。这大大简化了主站程序的复杂度,并提高了系统的可维护性。