基于STM32的EtherCAT从站IO讲解
一、基础讲解:1、EtherCAT从站与EtherCAT主站最大的不同在于:主站完全准寻IP协议的7层网络结构,而从站的物理链路层与主站不同,物理链路层的数据报文格式由倍福公司规定。
2、通常情况下,我们不能使用普通的网卡芯片作为从站的物理链路层;可以使用ET1100、LAN9252、AX58100等协议芯片来实现。
3、这个博客里,我使用的是AX58100芯片,用STM32作为实现应用层的CPU;实现一个16进16出的数字量IO从站。
二、从站设备描述文件XML
1、XML文件基础介绍
XML文件是从站设备描述文件,被烧写在从站协议芯片可读写的EEPROM中;AX58100上电后,会从EEPROM中加载相关的配置选项,通过SPI通信与CPU交互,初始化CPU相关资料并初始化通信。
主站则需要根据从站的XML描述文件,发送PDO或SDO数据报文请求读写从站的寄存器。 2、XML文件结构介绍
整体框架如图:
这里重点讲解EtherCATInfo这一栏;Vendor包含设备供应商的描述,Descriptions包含所有设备资源描述,是最重要的地方。 打开Verdor,我们可以通过修改ImageData节点的数据,来修改设备挂载到主站下后的形象:
打开数据节点Descriptions,这里是我们修改自己的数据资源主要地区: 到这里,我将通过具体的例子来讲解如何改写XML文件:(如果不这样,很难描述清楚) 第一步:修改设备挂载后的名字
打开Descriptions-->Devices-->Devices-->Type-->Text,这里修改的是,主站设备挂载该从站IO后的默认实例名称;打开Descriptions-->Devices-->Devices-->Name,将内容修改为设备的名称。
/
第二步:配置各种通信超时时间(通常保持默认,后期主站挂载从站时可以通过主站来调整)
打开Descriptions -->Devices-->Device-->Info
/ 第三步:开始创建16路IO映射变量区(重要环节)
1、首先,需要想好实际要映射的数据PDO;例如我们要映射16路的数字量输入(Tx)和16路的数字量输出(Rx)。 2、先讲解一下,EtherCAT协议规范的PDO数据映射关系:
3、注意:AX58100等协议芯片中,数据寄存器的地址是按16位(字)单位偏置的,所以在定义PDO数据报文时,每个PDO报文必须至少传递一个字的数据长度,不足的需要补齐!! 4、现在,我们先修改或添加对应PDO的数据类型(如果是DINT INT等标准数据类型,则必须是EtherCAT协议允许的才可以):Descriptions-->Devices-->Device-->Profile-->Dictionary-->DataTypes-->DataType 5、类型定义好了,接下来修改对应的PDO报文申明:Descriptions-->Devices-->Device-->Profile-->Dictionary-->Objects-->Object