3. ESI文件结构总览

ESI(EtherCAT Slave Information)文件本质上是一份遵循特定 XML 架构的文本文件,主站(如 TwinCAT、CODESYS、IgH EtherCAT Master)在扫描到从站后,会依据 ESI 中的信息完成设备识别、过程数据映射和启动参数配置。理解 ESI 的结构,关键不是记住所有标签,而是先建立"骨架—命名空间—版本—厂商与设备—文件组织"这条主线,之后再看具体对象字典和 PDO 配置时,才能知道每个节点挂在哪一层。

一、XML 声明与根元素:文件的第一道门

任何合法 ESI 文件都以 XML 声明开头,随后是唯一的根元素 <EtherCATInfo>。XML 声明通常写成:

<?xml version="1.0" encoding="UTF-8"?>
<EtherCATInfo>
  ...
</EtherCATInfo>

这里有两个容易混淆的"版本":第一行 version="1.0" 是 XML 语言本身的版本,固定为 1.0;而 ESI 架构版本由根元素上的 Version 属性表达,例如 <EtherCATInfo Version="1.6">。前者决定解析器如何读文件,后者决定主站按哪一版 ESI 规范解释内容。工程中若把两者写反或漏写,主站可能直接拒绝加载。

二、命名空间:避免标签"撞名"

ESI 使用 XML 命名空间来区分不同来源的标签。根元素上通常声明默认命名空间:

<EtherCATInfo xmlns="http://www.ethercat.org/esi">

命名空间的作用是让 Vendor、Device、Descriptions 等标签有明确的归属。若文件中还引用了其他命名空间(如某些厂商扩展),需用前缀区分,例如 xmlns:vendor="..."。对初学者而言,只要保证根元素上的默认命名空间与所用 ESI 架构一致,子元素不加前缀也能被正确解析。命名空间写错时,主站常报"未知元素"或"schema 校验失败"。

三、Vendor 与 Device:设备身份的两级描述

根元素之下,ESI 用 <Vendor> 和 <Descriptions> 组织内容。<Vendor> 描述厂商身份,核心字段包括:

  • Id:厂商 ID,由 ETG 分配的十六进制数,例如 #x00000002;
  • Name:厂商名称,如 Beckhoff Automation;
  • ImageData16x14 等:厂商图标,可选。

<Descriptions> 下可包含一个或多个 <Devices>,每个 <Device> 描述一款从站。Device 的关键字段包括:

  • Type:设备类型,通常与从站 EEPROM 中的 Product Code 对应;
  • ProductCode:产品代码,十六进制,如 #x00000002;
  • RevisionNo:修订号,用于区分同一产品的不同固件版本;
  • Name:设备名称,如 EK1100;
  • Info 下的 Vendor、Product、Revision 等文本信息。

主站识别从站时,会把扫描到的 Vendor ID、Product Code、Revision No 与 ESI 中的值比对,三者匹配才认为"找到了正确的描述文件"。因此,修改固件后若 RevisionNo 变化,ESI 也必须同步更新,否则主站可能提示"设备描述不匹配"。

四、文件组织方式:单文件与多设备

ESI 文件有两种常见组织方式。第一种是"一文件一设备",即一个 <EtherCATInfo> 下只放一个 <Device>,结构清晰,适合单一产品。第二种是"一文件多设备",在 <Descriptions> 下放多个 <Devices>,每个 <Device> 对应一款产品,适合厂商系列化产品。无论哪种方式,<Vendor> 只出现一次,位于 <Descriptions> 之前或同级位置,具体取决于架构版本。

文件命名通常遵循 厂商名_设备名.xml 或 设备名.xml,主站会按目录扫描所有 .xml 文件。工程中建议把同一厂商的 ESI 放在同一目录,避免不同版本混放导致主站加载到旧描述。

五、最小合法 ESI 骨架

一个能被主站加载的最小 ESI,至少需要包含 XML 声明、根元素、Vendor 和至少一个 Device。下面给出一个可参考的骨架示例(参数为教学示例,非真实设备实测值):

<?xml version="1.0" encoding="UTF-8"?>
<EtherCATInfo Version="1.6">
  <Vendor>
    <Id>#x00000002</Id>
    <Name>Example Vendor</Name>
  </Vendor>
  <Descriptions>
    <Devices>
      <Device>
        <Type>Example Slave</Type>
        <ProductCode>#x00000002</ProductCode>
        <RevisionNo>#x00000001</RevisionNo>
        <Name>EX1000</Name>
        <Info>
          <Vendor>Example Vendor</Vendor>
          <Product>EX1000</Product>
          <Revision>1.0</Revision>
        </Info>
      </Device>
    </Devices>
  </Descriptions>
</EtherCATInfo>

这个骨架只完成了"身份声明",还没有过程数据、对象字典和启动参数。但它是后续所有配置的容器:PDO 映射、SyncManager、FMMU、DC 参数都会挂在 <Device> 之下。若主站能识别出设备名称和厂商,说明骨架已经合法;若报"缺少 Device"或"Vendor 未定义",则需检查上述层级是否完整。

ESI 文件结构层级与主站识别路径 XML 层级结构 <EtherCATInfo Version="1.6"> <Vendor> Id / Name <Descriptions> <Devices> <Device> Type / ProductCode RevisionNo / Name Info / PDO / SM / DC 主站识别与匹配路径 扫描从站 EEPROM 读取 Vendor ID / Product Code / Revision 遍历 ESI 目录 加载所有 .xml 文件 比对 Vendor / Device 字段 Id、ProductCode、RevisionNo 三者一致 匹配成功? 是 / 否 加载设备描述 配置 PDO / SM / DC 报错:描述不匹配 检查 ESI 版本与字段
工程提示:ESI 文件修改后,主站通常需要重新扫描或重启配置服务才能生效。若主站缓存了旧描述,可尝试清除 ESI 缓存目录(不同主站路径不同),再重新加载。修改 Vendor ID 或 Product Code 属于设备身份变更,必须与从站 EEPROM 中的值保持一致,否则主站永远无法匹配。