4、ESI文件结构:根元素、字典、设备描述、配置文件等核心组成部分

EtherCAT从站信息描述文件(ESI,EtherCAT Slave Information)是EtherCAT从站设备的“数字身份证”,它采用XML格式,完整描述了从站的设备类型、对象字典、过程数据映射、同步管理、分布式时钟、厂商信息及启动参数等关键属性。主站(如TwinCAT、CODESYS、KPA等)在扫描总线时,正是通过解析ESI文件来识别从站能力并自动配置通信参数。理解ESI文件的结构层次,是进行从站开发、调试与集成的基础。本章将深入拆解ESI文件的四大核心组成部分:根元素、字典(Dictionary)、设备描述(Device Description)与配置文件(Configuration),并结合实际工程案例,帮助读者建立从“文件结构”到“工程应用”的完整认知。

EtherCATInfo (根) Vendor 厂商ID与名称 Descriptions 设备描述(字典+PDO) Mailbox 邮箱通信参数 Groups 设备组/模块化 Dictionary (字典) 对象字典(OD) PDO (过程数据) RxPDO/TxPDO映射 对象条目 Index/SubIndex 数据类型/访问权限 PDO映射 SM通道分配 变量映射关系 设备信息 类型/版本/序列号 配置文件 CoE/SoE/VoE参数 核心关系 • 根元素定义命名空间 • 字典描述对象模型 • 设备描述绑定硬件 • 配置文件关联主站 • PDO映射决定实时性 • SM同步管理通道 • DC分布式时钟同步 • FMMU地址映射 • 厂商ID唯一标识

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文件是否结构完整,可以通过以下步骤进行:

  1. 检查根元素:确认<EtherCATInfo>是否存在,且包含Version属性(通常为1.0或更高)。
  2. 验证Vendor节点:确认Vendor节点下的Id是否为有效的ETG分配的厂商ID,Name是否与设备铭牌一致。
  3. 确认Descriptions存在:至少包含一个Device子节点,否则主站无法识别设备类型。
  4. 使用官方校验工具: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 常见误区与复盘

风险提示:初学者常犯的错误是直接复制其他厂商的ESI文件,仅修改设备名称而不更新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包含索引、子索引和位长度。主站根据这些信息自动生成过程数据映像。配置流程如下:

  1. 确定从站需要周期性交换的数据对象(如输入状态、输出控制字)。
  2. 在ESI文件的<PDO>节点下创建对应的<RxPDO>或<TxPDO>。
  3. 为每个PDO添加<Entry>,指定对象索引、子索引和位长度。
  4. 确保所有映射的条目在<Objects>中已定义。
经验提醒:PDO映射的顺序和位长度必须与从站固件中的结构体定义严格对应。例如,若固件中定义了一个32位的状态字,但ESI中映射为16位,则主站读取的数据将发生截断或错位。建议在开发阶段使用EtherCAT从站协议栈(如ESC芯片的SSC工具)自动生成ESI文件,避免手动编写错误。

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中的值完全一致。

风险提示:当从站固件升级后,如果对象字典或PDO映射发生变化,必须同步更新ESI文件中的设备描述和字典部分,并递增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>,可以在主站扫描阶段自动写入这些参数,确保驱动器在运行前处于正确的控制状态。这大大简化了主站程序的复杂度,并提高了系统的可维护性。

总结复盘:ESI文件的四个核心组成部分——根元素、字典、设备描述、配置文件——构成了一个从“身份识别”到“数据交互”再到“参数初始化”的完整闭环。根元素确保文件合规,字典定义数据模型,设备描述绑定硬件资源,配置文件则实现自动化配置。在实际项目中,建议使用ETG提供的SSC工具(Slave Stack Code)生成基础ESI文件,然后根据硬件设计进行针对性修改,并通过主站仿真工具(如TwinCAT)进行验证。任何修改都应遵循“先备份、后修改、再验证”的原则,避免因文件错误导致产线停机。