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 未定义",则需检查上述层级是否完整。