EtherCAT学习之路——例程解析

《Application Note ET9300 SSC》的6.4.1.2小节有一个例程解析,这篇文章主要是对该小节的翻译,英文好的同学推荐看一下原文。

本例程介绍了如何在基础例程(SAMPLE_APPLICATION)的基础上添加新的过程数据。。

默认的基础例程提供了一下的过程数据:

  • 32Bit的Input Counter(0x6000)

  • 32Bit的Output Counter(0x7010)

当Output Counter为0时,Input Counter每个cycle自加1;否则Input Counter等于Output Counter+1。

本例程中新增的过程数据:

  • 32Bit的Input Counter(0x6000)

  • 32Bit的Result(0x6010)

  • Output Value(0x7010)

  • ----SI1:Value1(32Bit)

  • ----Sl2:Value2(32Bit)

Result(0x6010)是Sl1(0x7010.1)和Sl2(0x7010.2)之和。Input Counter(0x6000)每个cycle自加1。

 

1.创建基础例程

这一节简单介绍一下如何在倍福EL9800评估板上创建基础例程。当然,也可以在已有的其他类似的例程上进行新增过程数据的修改。

  1. 按照章节3.1 "SSC Tool”中的步骤1~7进行操作(这里的章节3.1是指《Application Note ET9300 SSC》的3.1)。

  2. 选择"EL9800 | 8Bit Digital I/O,16Bit Analog Input"的配置。

  3. 在"Application"组下将"EL9800APPLICATION"设置为0,将"SAMPLE_APPLICATION"设置为1。

  4. 保存工程并创建新的文件(Project->"Create new Slave Files")。

  5. 基于已创建的ESI文件,编辑从站EEPROM。

  6. 基于生成的源文件创建MPLAB工程。

SSC可以创建基础例程,具体的创建步骤,在《Application Note ET9300》其他章节也介绍,后面单独列一章来介绍SSC。这里重点关注如何新增过程数据。

 

2.新增过程数据

2.1 在sampleappl.h中新增Result对象

创建为过程数据"32Bit Result"创建入口描述(Entry Description),对象名和对象实例。

EtherCAT学习之路——例程解析_第1张图片

要在EtherCAT中新增过程数据,首先就需要在代码中新增对象。关于”对象字典“可以参考我的另一篇博客。

2.2 在sampleappl.h中修改Output Value对象

在对象0x7010(32Bit Output Counter)的基础上进行修改,将对象0x7010修改成Record型对象,Record型对象可以操作超过1个的过程数据(译者注:原有的Output Counter是Var型对象,只能有1个子项;Record型对象类似于结构体,一个对象中可以有多个子项)。

Ouput Counter原本只有一个子项(类似与0x6010的结构),现在需要2个子项,同时还需要增加SubIndex0的参数。

对象名称需要与Entry相对应(每个子名称以"\000"结尾,整个对象名称以"\377"结尾)。

还需要根据对象的参数定义一个结构体,使其包含SubIndex0以及2个过程数据。

更多的细节信息请参见章节11。

EtherCAT学习之路——例程解析_第2张图片

2.3 在sampleappl.h中修改PDO-map对象

在PDO-Mapping对象中,为新增的过程数据添加信息。

修改的代码被标注为红色。

EtherCAT学习之路——例程解析_第3张图片

EtherCAT学习之路——例程解析_第4张图片

2.4 在sampleappl.h中更新对象字典的参考

EtherCAT学习之路——例程解析_第5张图片

2.5 在sampleappl.c中更新过程数据大小

更新过程数据大小(过程数据大小应该与对应的SM大小一致)。

注:如果某一个变量与ESI文件中记录的信息不一致,从站状态无法从PreOP转入SafeOP,并会发送0x1E~0x1D的错误码。

EtherCAT学习之路——例程解析_第6张图片

译者注:APPL_GenerateMapping用于计算输入过程数据和输出过程数据的长度,后面进行内存拷贝的时候,会根据这里计算出的长度来进行拷贝。

2.6 在sampleappl.c中修改InputMapping()函数

更新输入过程数据映射函数,将新增的过程数据本地拷贝到ESC内存中。

EtherCAT学习之路——例程解析_第7张图片

Result(0x6010)对象是输入过程数据,这里使用MEMCPY,将本地内存中的ResultObj6010拷贝到ESC中(pData是ESC的地址)。

2.7 在sampleappl.c中修改OutputMapping()函数

更新输出过程数据映射函数,将新增的过程数据从ESC内存中拷贝到本地。

EtherCAT学习之路——例程解析_第8张图片

2.8 在sampleappl.c中更新应用程式

EtherCAT学习之路——例程解析_第9张图片

修改应用程序,使Result = Output.value1 + Output.value2,InputCounter++。

2.9 更新ESI文件

根据步骤3,更新ESI中RxPdo和TxPdo的Entry。

EtherCAT学习之路——例程解析_第10张图片

EtherCAT学习之路——例程解析_第11张图片

主站会使用ESI文件中的信息来计算SM的长度(SM长度应该与步骤5中的长度一致),并会将过程数据展示给用户(图11:EtherCAT从站RxPdo的数据)。

EtherCAT学习之路——例程解析_第12张图片

2.10 更新ESI文件

根据RxPdo/TxPdo Entry的位宽更新SM的默认位宽。

EtherCAT学习之路——例程解析_第13张图片

2.11 更新ESI文件

更新离线对象字典(元素:”Profile/Dictionary“)。

a.新增对象0x6010(此对象无需结构体定义,因为此对象仅包含了一个基础数据类型的变量)。

EtherCAT学习之路——例程解析_第14张图片

b.为对象0x7010新增结构体定义

EtherCAT学习之路——例程解析_第15张图片

c.更新对象0x7010

EtherCAT学习之路——例程解析_第16张图片

d.更新PDO映射对象结构体

注:对象0x1601和对象0x1A00都可以使用"DT1601"的定义,因为这两个对象的结构体是一致的。

EtherCAT学习之路——例程解析_第17张图片

e.更新PDO映射对象

EtherCAT学习之路——例程解析_第18张图片

EtherCAT学习之路——例程解析_第19张图片

对象字典在SSC和ESI上是一式两份,SSC和ESI上都需要对对象的结构体定义,对象名称,对象映射关系等进行修改。

你可能感兴趣的:(EtherCAT学习之路,ethercat,物联网,以太网)