Bootstrap

EtherCAT设备ESI文件中的ESC描述:深入解析


EtherCAT设备ESI文件中的ESC描述:深入解析

在EtherCAT技术中,ESI(EtherCAT Slave Information)文件扮演着至关重要的角色。它详细描述了EtherCAT从站设备的特性和功能。本文将深入探讨ESI文件中ESC(EtherCAT Slave Controller)的描述方式,涵盖单ESC和多ESC设备的情况。

1. 单ESC设备的描述

对于只有一个ESC的EtherCAT设备,其描述通常直接包含在ESI文件的元素中。以下是一个完整的例子:

<?xml version="1.0" encoding="UTF-8"?>
<EtherCATInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EtherCATInfo.xsd" Version="1.2">
  <Vendor>
    <Id>0x00000ABC</Id>
    <Name>ExampleCorp EtherCAT Devices</Name>
  </Vendor>
  <Descriptions>
    <Devices>
      <Device Physics="YY">
        <Type ProductCode="#x12345678" RevisionNo="#x0001">ExampleCorp Single ESC Device</Type>
        <Name>EC-SingleESC-1000</Name>
        <Info>
          <EtherCAT SlaveType="1" ProductCode="#x12345678" RevisionNo="#x0001" PortPhys="Y" MaxSlotCount="256" MaxSlotGroupCount="1" SlotPdoIncrement="1" SlotIndexIncrement="16" Type="EC-SingleESC-1000" Desc="ExampleCorp Single ESC Device"/>
        </Info>
        <GroupType>EC-SingleESC-1000</GroupType>
        <Fmmu>Outputs</Fmmu>
        <Fmmu>Inputs</Fmmu>
        <Fmmu>MBoxState</Fmmu>
        <Sm ControlByte="#x26" StartAddress="#x1000" DefaultSize="128" Enable="1">MBoxOut</Sm>
        <Sm ControlByte="#x22" StartAddress="#x1080" DefaultSize="128" Enable="1">MBoxIn</Sm>
        <Sm ControlByte="#x24" StartAddress="#x1100" DefaultSize="1024" Enable="1">Outputs</Sm>
        <Sm ControlByte="#x20" StartAddress="#x1500" DefaultSize="1024" Enable="1">Inputs</Sm>
        <RxPdo Fixed="1" Mandatory="1">
          <Index>#x1600</Index>
          <Name>Output</Name>
          <Entry>
            <Index>#x7000</Index>
            <SubIndex>1</SubIndex>
            <BitLen>32</BitLen>
            <Name>Output Data</Name>
            <DataType>UDINT</DataType>
          </Entry>
        </RxPdo>
        <TxPdo Fixed="1" Mandatory="1">
          <Index>#x1A00</Index>
          <Name>Input</Name>
          <Entry>
            <Index>#x6000</Index>
            <SubIndex>1</SubIndex>
            <BitLen>32</BitLen>
            <Name>Input Data</Name>
            <DataType>UDINT</DataType>
          </Entry>
        </TxPdo>
        <Eeprom>
          <ByteSize>2048</ByteSize>
          <ConfigData>8002000000000000</ConfigData>
        </Eeprom>
        <Dictionary>
          <Item>
            <Index>0x1000</Index>
            <Name>Device Type</Name>
            <DataType>UDINT</DataType>
            <DefaultValue>0x00001389</DefaultValue>
          </Item>
          <!-- 更多字典项 -->
        </Dictionary>
      </Device>
    </Devices>
  </Descriptions>
</EtherCATInfo>

关键元素解析:

  1. : 包含ESC的基本信息,如ProductCode、RevisionNo等。
  2. : 描述同步管理器的配置。
  3. : 定义过程数据对象。
  4. : 包含EEPROM的配置信息。
  5. : 列出对象字典的条目。

2. 多ESC设备的描述

对于包含多个ESC的复杂EtherCAT设备,主ESC通常在元素中描述,而额外的ESC则作为元素描述。以下是一个多ESC设备的完整例子:

<?xml version="1.0" encoding="UTF-8"?>
<EtherCATInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EtherCATInfo.xsd" Version="1.2">
  <Vendor>
    <Id>0x00000ABC</Id>
    <Name>ExampleCorp EtherCAT Devices</Name>
  </Vendor>
  <Descriptions>
    <Devices>
      <Device Physics="YY">
        <Type ProductCode="#x12345678" RevisionNo="#x0001">ExampleCorp Multi-ESC Device</Type>
        <Name>EC-MultiESC-2000</Name>
        <Info>
          <EtherCAT SlaveType="1" ProductCode="#x12345678" RevisionNo="#x0001" PortPhys="YY"/>
        </Info>
        <GroupType>EC-MultiESC-2000</GroupType>
        <Fmmu>Outputs</Fmmu>
        <Fmmu>Inputs</Fmmu>
        <Sm ControlByte="#x26" StartAddress="#x1000" DefaultSize="128" Enable="1">MBoxOut</Sm>
        <Sm ControlByte="#x22" StartAddress="#x1080" DefaultSize="128" Enable="1">MBoxIn</Sm>
        <Sm ControlByte="#x24" StartAddress="#x1100" DefaultSize="1024" Enable="1">Outputs</Sm>
        <Sm ControlByte="#x20" StartAddress="#x1500" DefaultSize="1024" Enable="1">Inputs</Sm>
        <RxPdo Fixed="1" Mandatory="1">
          <Index>#x1600</Index>
          <Name>Output</Name>
          <Entry>
            <Index>#x7000</Index>
            <SubIndex>1</SubIndex>
            <BitLen>32</BitLen>
            <Name>Output Data</Name>
            <DataType>UDINT</DataType>
          </Entry>
        </RxPdo>
        <TxPdo Fixed="1" Mandatory="1">
          <Index>#x1A00</Index>
          <Name>Input</Name>
          <Entry>
            <Index>#x6000</Index>
            <SubIndex>1</SubIndex>
            <BitLen>32</BitLen>
            <Name>Input Data</Name>
            <DataType>UDINT</DataType>
          </Entry>
        </TxPdo>
        <Eeprom>
          <ByteSize>2048</ByteSize>
          <ConfigData>8002000000000000</ConfigData>
        </Eeprom>
        
        <!-- 主ESC (不需要PreviousDevice和PreviousPortNo属性) -->
        <SubDevice ProductCode="#x12345678" RevisionNo="#x0001" Hideable="0"/>
        
        <!-- 第一个子ESC -->
        <SubDevice ProductCode="#x87654321" RevisionNo="#x0002" PreviousDevice="0" PreviousPortNo="1" Hideable="1">
          <Info>
            <EtherCAT SlaveType="1" ProductCode="#x87654321" RevisionNo="#x0002" PortPhys="YY"/>
          </Info>
          <Sm ControlByte="#x24" StartAddress="#x2000" DefaultSize="512" Enable="1">Outputs</Sm>
          <Sm ControlByte="#x20" StartAddress="#x2200" DefaultSize="512" Enable="1">Inputs</Sm>
          <RxPdo Fixed="1" Mandatory="1">
            <Index>#x1601</Index>
            <Name>SubDevice1 Output</Name>
            <Entry>
              <Index>#x7100</Index>
              <SubIndex>1</SubIndex>
              <BitLen>16</BitLen>
              <Name>SubDevice1 Output Data</Name>
              <DataType>UINT</DataType>
            </Entry>
          </RxPdo>
          <TxPdo Fixed="1" Mandatory="1">
            <Index>#x1A01</Index>
            <Name>SubDevice1 Input</Name>
            <Entry>
              <Index>#x6100</Index>
              <SubIndex>1</SubIndex>
              <BitLen>16</BitLen>
              <Name>SubDevice1 Input Data</Name>
              <DataType>UINT</DataType>
            </Entry>
          </TxPdo>
        </SubDevice>
        
        <!-- 第二个子ESC -->
        <SubDevice ProductCode="#xABCD1234" RevisionNo="#x0003" PreviousDevice="1" PreviousPortNo="2" Hideable="0">
          <Info>
            <EtherCAT SlaveType="1" ProductCode="#xABCD1234" RevisionNo="#x0003" PortPhys="YY"/>
          </Info>
          <Sm ControlByte="#x24" StartAddress="#x3000" DefaultSize="256" Enable="1">Outputs</Sm>
          <Sm ControlByte="#x20" StartAddress="#x3100" DefaultSize="256" Enable="1">Inputs</Sm>
          <RxPdo Fixed="1" Mandatory="1">
            <Index>#x1602</Index>
            <Name>SubDevice2 Output</Name>
            <Entry>
              <Index>#x7200</Index>
              <SubIndex>1</SubIndex>
              <BitLen>8</BitLen>
              <Name>SubDevice2 Output Data</Name>
              <DataType>USINT</DataType>
            </Entry>
          </RxPdo>
          <TxPdo Fixed="1" Mandatory="1">
            <Index>#x1A02</Index>
            <Name>SubDevice2 Input</Name>
            <Entry>
              <Index>#x6200</Index>
              <SubIndex>1</SubIndex>
              <BitLen>8</BitLen>
              <Name>SubDevice2 Input Data</Name>
              <DataType>USINT</DataType>
            </Entry>
          </TxPdo>
        </SubDevice>
      </Device>
    </Devices>
  </Descriptions>
</EtherCATInfo>

多ESC设备的关键点:

  1. 主ESC: 在元素中描述,包含设备的主要信息。
  2. 子ESC: 使用元素描述,每个子ESC都有自己的ProductCode和RevisionNo。
  3. 连接关系: 通过PreviousDevice和PreviousPortNo属性定义子ESC之间的连接关系。
  4. 可隐藏性: Hideable属性指示配置工具是否可以隐藏该子ESC。

3. SubDevice元素的特殊用途

虽然SubDevice主要用于描述多ESC设备,但在某些情况下,即使是单ESC设备也可能使用SubDevice元素:

  1. 标准化描述: 有些制造商可能选择使用SubDevice来描述主设备本身,以保持ESI文件结构的一致性。
  2. 未来扩展: 为可能的硬件扩展预留SubDevice描述。
  3. 虚拟子设备: 描述设备内部的逻辑分区或功能模块。
  4. 配置工具兼容性: 某些EtherCAT配置工具可能期望看到SubDevice元素。

结论

ESI文件中ESC的描述方式取决于设备的复杂性。单ESC设备通常直接在元素中描述,而多ESC设备则使用元素来描述额外的ESC。理解这些描述方式对于正确配置和使用EtherCAT设备至关重要。在开发或配置EtherCAT设备时,应始终参考具体的设备规范和所使用的配置工具要求。


这篇博客全面介绍了EtherCAT设备ESI文件中ESC的描述方式,包括单ESC和多ESC设备的完整例子。它涵盖了关键元素的解析,多ESC设备的特殊考虑,以及SubDevice元素的特殊用途。这些信息应该能够为EtherCAT开发者和用户提供有价值的参考。

;