XML设备描述文件是由SSC工具自动生成的,通常不需要手动修改,了解即可。
XML文件解析
每一个EtherCAT从站设备都需要有一个硬件描述的XML文件,用来给主站组态,XML文件中描述定义了通信时需要用到的各种数据。包括设备所属公司名,设备名,设备版本,LOGO等基础信息,亦包括通信时的点位,点位名称,大小,数量等信息,还包括一个非常特别的14Byte ConfigData,这14个字节用来给PHY识别,像ET1100,LAN9252等芯片通过其来识别自身的工作方式。
XML文件比较大,用普通的文本编辑器打开会显得有些凌乱,上下文结构也不能很好的体现。因此需要一些专门处理XML的工具来辅助编辑,推荐的有免费版XML Notepad。
在EtherCAT中,EDS被特指为从站的设备描述文件ESI(EtherCAT Slave Information),用来描述从站配置信息,并采用XML(Extensible Markup Language, XML)文件格式。EtherCAT从站设备基本信息、基本数据类型和对象字典描述三部分组成整个从站设备描述文件,从结构上包括制造商信息和描述信息,具体结构如下图所示。
1)XML的设备基础信息
Vendor->ImageData 16x14节点,存储的是.bmp格式的16色深度的logo文件,可以使用微软画图或者Photoshop等软件制作,制作完成后使用任何16进制查看器(Notepad++和Sublime都有相关插件直接查看任何文件的16进制数据)将数据填入该节点。
Descriptions->Groups->Group节点下方的Type和Name两个节点描述设备的种类和名称,这里根据自己的想法自定义即可。ImageData 16x14是设备类型图标,可以直接用上面的数据。
注:制造商信息和描述的分组信息内容没有影响,采用默认值即可。
Descriptions->Devices->Device->Physics是以太网口类型,YY表示两个RJ45,一进一出,跟Y相对应的是K,表示EBUS网口,德国倍福的专用端口,不需要修改。
Descriptions->Devices->Device->Type节点下的ProductCode和RevisonNo表示的是硬件编号和版本号,这里取一些有意义的名称,产品迭代升级时不要忘记这里的版本号也应该做相应的升级。主站通过这两个字段确定XML的唯一性,也就是说你如果两份XML这两个字段一样,主站只能识别其中一个。
Descriptions->Devices->Device->Name设备名,建议填写从站芯片型号,烧写xml文件时以此名识别。
Descriptions->Devices->Device->Info节点存储了一些超时限制的数据,没有特殊情况不需要修改,这里设置好了以后在主站可以看到设备在各种状态切换时的超时限制。
Descriptions->Devices->Device->GroupType与上面Descriptions->Groups->Group->Type相对应。
2)XML中的字典和IO数据
XML中的字典和IO数据超级复杂,包括字典定义和IO点位描述,但这部分数据已经由SSC创建完成了,SSC通过我们填写的Excel自动生成的,如果没有SSC,这里的数据全都由我们自己填写,将是一件非常恐怖的事情,不仅编写起来工作量非常巨大,而且极易出错。我们这里仅做简单地浏览认识一下。
字典
所谓字典就是对数据结构的描述,XML里面每种数据集合都需要有它的类型定义,有些类型是简单的String,UINT等基本类型,有些类型是由多种基本类型组合而成的复合结构,在字典定义部分都需要对其进行定义。
打开Descriptions->Devices->Device->Profile节点,里面有两个子节点DataTypes和Objects,有点类似C语言中的typedef定义类型和int x定义变量,事实上在SSC生成的协议栈中的SSC-DeviceObjects.h文件也确实与这里的定义一一对应的。
举个例子,如上图所示,在Objects节点下有一个Object名叫Device name, 其index为#x1008,type为STRING(10),这个STRING(10)就要从上面的DataTypes节点里面找对应的子项了,果然我们会发现一个DataType子节点名叫STRING(10),它的BitSize定义的是80个bit,应该是个uchar[10]的数组,那么这个字符串内容是什么呢,还记得我们之前在硬件基础信息部分定义的Device Name吗,我们去看看,上面定义的是SSC-Device,数一数正好10个字节。
所以在XML中每一个元素都会有自己的数据结构,每一种数据结构都会在数据字典中定义,如果这之间的关系理得不顺,EtherCAT将无法建立连接,想要手工把这里面的关系搞定真的非常困难,SSC在之前帮我们全都搞定了。
IO点位数据
a)FMMU通道设置:
在Descriptions->Devices->Device节点下定义了3个FMMU通道Outputs、Inputs和Mailbox,分别用于过程数据输出、过程数据输入和邮箱数据通讯。
b)SM通道和过程数据设置:
在Descriptions->Devices->Device节点下有四个Sm节点,这个表示通道,我们通信时一共有四个通道,除了过程传输数据输出和输入以外,还有两个通道用来控制EtherCAT自身状态的,也是EtherCAT协议中非常重要的MailBox概念,分别叫做MBoxOut和MBoxIn,这里不需要管它,只需要了解过程传输数据Inputs和Outputs两个通道,这两个通道内部的数据又分别指向RxPdo和TxPdo两个节点,这两个节点每个Entry节点都是我们之前在Excel中定义的一个IO点。SSC通过Excel帮我们完成了一项庞大的工作,在XML中生成了64+64个Entry,如果手工录入,这工作量将会非常恐怖。
c)邮箱通讯设置:
EtherCAT支持CoE、SoE、FoE和EoE等邮箱协议。
d)分布时钟设置:
根据SSC Synchronisation选项配置生成。
3)XML中的EEPROM内容
XML的EEPROM节点,这个节点数据量非常少,只有两个子节点,ByteSize一般为2048,代表板载的EEPROM芯片容量是2KByte,其实我们一般使用512K的物理容量芯片,防止IO数据定义时数据量增加不够存储。
XML中大部分内容都由SSC帮我们生成,现在到了比较重要的最后14byte数据,也就是ConfigData节点,SSC帮我们构建的XML是按照ET1100芯片生成的,默认为050E03440A0000000000,需要根据实际使用的ESC芯片手册进行更改。