微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Linux的EtherCAT主站的研究

基于Linux的EtherCAT主站的研究

时间:12-21 来源:互联网 点击:

状态机功能的基础,它的主要用途是:

1)监控总线上设备的变化。如:当有新的从站设备接入时,便对其进行扫描和配置。

2)监控从站应用层状态。若从站状态与要求不符便对其进行重新配置。

3)接收用户层的指令,进行状态的切换。

4)处理对SII和SDO等的请求操作。

4应用程序开发的流程

应用程序是用户针对自身控制系统的控制要求编写的控制程序模块,运行于内核层。包括对主站和从站的配置以及周期性实时运行的任务。在实时任务程序中实现主从站间通讯以及各种数控算法。

4.1主站和从站的配置

如图5所示,应用程序的module init()函数中首先要对主、从站的通讯进行配置。其中的几个关键技术与重要概念如下:

4.1.1数据域指针

数据域是EtherCAT过程数据(PDO)向程序中的数据结构的映射,它提供了用户程序对总线上各个从站进行数据访问的入口。当从站PDO入口注册成功后,不同从站都将获得一个属于自己的地址偏移量,用户可通过“数据域指针+地址偏移量”的方法对所需PDO进行读写操作。

4.1.2从站配置信息

主站对从站的扫描识别由四个参数决定:化名(保存在EEPROM中,可由主站修改)、位置(决定于从站在总线中连接的顺序)、厂商ID号和产品号。这些信息构成从站配置信息。

4.1.3从站同步管理信息

这一信息可从EEPROM中的SⅡ或者厂商提供的设备描述文件(即xml文件)获得。以Copley公司的Accelnet伺服驱动器为例,其设备描述文件的一部分为:

前4行信息表明该设备拥有4个同步管理通道。前两个为邮箱传输方式,用于COE协议的通讯,负责对SDO的传输。后两个为过程数据传输方式,负责对PDO的传输。其中StartAddress参数为物理起始地址,即该同步管理通道在双口RAM上的起始地址;ControlByte参数为控制字,包含了该通道的传输

图4主站状态机

方式、传输方向等信息。之后的三个参数规定了该通道的大小。第5行起开始定义RxPdo,与CANopen协议类似,EtherCAT的PDO也通过索引号和子索引号进行识别。将x1600_——x1607定义为RxPdo(接收PDO),在这8个接收PDO中安排被主站接收的参数。将x1A00_——x1A07定义为TxPdo(发送PDO),在这8个发送PDO中安排向主站发送的参数。由于该款Accelnet伺服驱动器支持COE,因此其原有的CAN总线中使用的参数可保持不变。图6表明将控制字x6040的0号子索引,长度为2个字节,映射到RxPd00中。应用程序将以上同步管理信息写入数据结构ec_sync_info_t中,作为ecrt slave config_pdos()的参数,通过调用该函数最终完成完整的PDO配置。

图5应用程序对主从站的配置流程

图6从站同步管理信息

4.1.4 SDO配置

SDO是COE协议的非周期数据传输方式(邮箱传输方式)。通过SDO可实现参数的设置与读取。为了能够在周期任务程序中直接对某个参数进行操作,应用程序需要在配置阶段创建一个针对该参数的SDO请求,并设置请求超时的时间。

4.2周期任务的实现

4.2.1实时性的实现

应用程序需要一个高实时性的定时器,定时调用周期任务。在不采用RTLinux和RTAI等实时内核的情况下,为了保证高的实时性可以采用内核定时器。其使用方法如下:

1)在应用程序模块初始化阶段初始化内核定时器

static struct timer_list timer)//定义一个定时器列表

init_fimer(&timer);//初始化一个内核定时器节点

timer.function=cyclic_task;/挂载周期性函数

timer.expires=jiffies+10;//设置定时中断的时间

add timer(&timer);//激活内核定时器节点

2)在周期任务函数cyclic_task中重启定时器

timer.expires+=HZ,1000;//设置定时中断的时间

add_timer(&timer);//激活内核定时器节点

其中jiffies为系统自启动到当前时刻为止系统时钟产生的滴答数。timer.expires为定时中断启动的预期时刻,以滴答数为单位。宏定义HZ记录了系统时钟所要求的可编程定时器产生滴答数的频率。其值可在内核配置选项CONFIG_HZ选配。最大值则决定于硬件特性。假设HZ为1000则(2)中定时中断的时间为1毫秒。由于cyclic_task函数被挂载在timer.function上,因此每到该内核定时器节点达到预设定的中断时间便进行中断调用,而调用cyclic_task函数中又再次预设定了timer的中断时间,故而形成周期为1毫秒的周期性任务。

4.2.2周期任务中的工作

如图3(C)所示,周期任务用于通过主站实时发送和获取从站的信息,并对信息进行实时的处理,如逻辑控制中逻辑运算和运动控制中的各种算法。处理的信息包括过程数据对象PDO和邮箱传输方式的数据对象(如COE中的SDO)。其中PDO通过“数据域

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top