特别说明:
1、这是一个大佬的tao店:1.0 ha:/₴sklPcDGhJOy₤(我是买他的开发板的)
2、源代码设涉及版权问题,所以博客将不提供源码,请大家谅解
3、欢迎大家加我wx:wxk101633 备注:博客 。发布此博客时,正在春节,写得不够好,请大家交流反馈。感谢!!
///
一、基础讲解:
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-->DataType5、类型定义好了,接下来修改对应的PDO报文申明:Descriptions-->Devices-->Device-->Profile-->Dictionary-->Objects-->Object6、申明好PDO数据报文后,接下来我们需要修改SM同步数据通道,将数据映射到父级,协议芯片将从这里开始逐级索引数据报文:Descriptions-->Devices-->Device-->sm、Rxpdo、Txpdo(协议芯片从这里开始加载数据到内核,并从报文中读取数据到内核)7、修改SM内容后,你会发现,父级PDO x1601(Rxpdo)和x1a00 PDO节点的映射内容也发生了改变;所以这些父级节点对应的数据类型与PDO申明也需要修改:(父节点PDO的每个成员是子PDO节点的寄存器地址,32位数据)//第四步:将修改好的XML文件通过twcat软件烧写到协议芯片的EEPROM中。 |
三、STM32应用层代码的修改
实际上,单纯修改XML文件只是可以让协议芯片在于主站交互数据报文时,有一个依据而已,实际需要交互的数据需要有从站的CPU和外设提供,通过SPI与协议芯片交互。所以,我们还需要再STM32程序内驱动对应的硬件设备,并实现spi数据读写交互。
这里只讲解需要修改的部分:第一步:在源代码的el9800app.h中,添加数据节点结构体系列描述:(有四个东西需要创建或修改)第二步:将新创建的PDO节点,加入应用PDO节点管理数据(在源代码的el9800app.h中)第三步:在源代码的el9800app.h中,对应修改1601映射数据管理对象的四个东西第四步:在源代码的el9800app.h中,修改1c12PDO对象,因为1600~1602是映射到1c12上,最终完成主从数据交换的第五步:在el9800appl.c文件中,按照需求为数据节点PDO分配内存空间,用于交互数据第六步:在el9800appl.c文件中,将PDO数据缓存区内容赋值给具体的硬件接口,实现硬件操作第七步:硬件驱动初始化,否则数据也无法在硬件上体现出来
|