基于Linux的EtherCAT主站的研究
来源:e-works发布时间:2018-08-28143浏览
询问 AI引言
随着网络技术的迅速发展,当今的工业现场总线技术均逐渐过渡到实时工业以太网阶段。如西门子公司的PROHBUS到PROFINET;博世力士乐公司的SERCOS?到SERCOSIII等。同时一些新兴的工业实时以太网技术也以其全新的起点和优越的性能脱颖而出。其中EtherCAT(Ethernetfor Control Automation Technology)技术(也称为以太网现场总线),便是其中较为突出的一个。现场总线技术的实现主要依赖于主站与从站两大部分,其中尤以主站技术最为复杂,同时也是控制系统中通讯部分的核心。从历史上看现场总线主站技术的演变经历了主动卡(如SERCOS一代卡)、被动卡(如SoftSERCANS卡)、软主站(不需要专门的硬件卡,如可支持Eme疋AT总线的TwinCAT和Codesys软件)。这使得运动控制器的开发对特殊硬件板卡的需求逐渐降低,直至彻底抛开,从而实现其开放性和灵活性。研究Linux下的EtherCAT主站系统在研究软主站的基础上又有两个意义:一是Linux操作系统为开源系统,在其基础上的任何软件方面的研究都可直至底层,为自主创新提供可能。二是Linux操作系统很容易移植到ARM处理器平台上,而ARM架构相对X86硬件系统具有诸多灵活性和开发性,方便国内厂商开发出基于自身硬件平台的高性能控制器。因而此项研究即有助于开发基于软主站的开放式运动控制器,同时可为研制我国自主的工业实时以太网标准提供借鉴,具有较强的实际意义。
1 Linux-FEtherCAT主站系统结构
Linux系统总体分为内核层与应用层。其中内核层运行系统的核心调度与驱动程序,内核层中的程序称为模块,实时性较高。应用层运行各种桌面程序和应用程序,实时性差。Linux系统下EtherCAT软主站系统结构如图1所示。
1)网络设备部分。EtherCAT软主站不使用特殊硬件,而是普通的网络设备(如PCI网卡)。内核层中含有网络设备模块,但为了实现EtherCAT协议,需要对普通嘲络设备驱动进行修改。
2)主站模块与应用程序。为了保证实时性的要求,EtherCAT主站模块与应用程序模块均在内核层。其中EtherCAT主站模块实现全部的协议解析、任务调度并为网络设备与应用程序提供函数接口。应用程序模块最终实现对各种自动化系统的控制,由用户根据具体的控制对象和控制要求进行编写。
3)EtherCAT工具。该程序提供了各种可以在Linux用户层运行的命令。可以直接实现对从站的访问和设置。如:设置从站地址、显示总线配置、显示PDO数据、读写SDO参数等。由于用户层无法直接访问内核层的数据,因此需要构造Linux字符设备。通过对字符设备的访问间接实现与EtherCAT主站模块的通汛。
图1主站系统结构
2数据帧的传输过程
数据帧的传输是EtherCAT主站模块的重要功能,是实现EtherCAT协议传输的基础。EtherCAT主站的工作主要分为三个阶段如图2所示。
图2主站线程工作状态
2.1孤儿阶段
当EtherCAT主站模块被加载到内核后,状态处于孤儿阶段,等待网络设备模块的加载与正常启动。
2.2空闲阶段
当存在可用的网络设备后,主站进入空闲阶段,并启动线程发送广播数据帧,对从站进行循环扫描。当扫描到可用从站,便对其进行配置。同时随时以扫描的方式监控总线上的变化。实现方法如图3(a)所示。主要过程分为接收数据帧、执行当前状态机(详见数据通讯管理的实现一节)、将数据帧添加至链表、发送数据帧链表中的全部数据。
2.3操作阶段
当有应用程序模块运行时,主站进入操作阶段。如图3(C)所示,应用程序通过调用ecrt_master_activate()函数,停止主站模块中运行的“空闲线程”,启动“操作线程”。该线程只调用了执行当前状态机的函数,如图3(b)所示,以便监控总线中的变化,而将原本主站模块执行的收发数据帧的函数放到了应用程序中,为实现实时控制提供条件。[page]
图3空闲阶段与操作阶段程序流程
3 数据帧通讯管理的实现
主站实现通讯管理的核心是有限状态机(FMS)理论睁J。有限状态机又称为有限状态自动机或简称状态机,是表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。这一数学模型具有输入与输出,输出不仅依赖于输入而且依赖于输入的历史情况。作为承担了主要数据管理工作的主站的工作内容,取决于用户的输入以及与从站的通讯状态,亦即通过分析用户的输入与接收到的来自从站的数据报文后再调用相应的函数。主站程序中包含的状态机有:主站状态机、从站扫描状态机、从站配置状态机、状态切换状态机(管理从站应用层的状态切换)、读写SII(从站信息)状态机、读写SDO(如COE协议中的非周期数据)等。主站状态机(如图4所示)又是实现其他状态机功能的基础,它的主要用途是:
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配置。[page]
图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通过“数据域指针+地址偏移量”方式直接读写;SDO访问方法(以读SDO为例)如下:
5实验与结论
图7为研究基于Linux的EtherCAT主站的实验平台。IPC(工业级计算机)主频为1.2G,运行linux系统为Fedora 8。ARM开发板采用PAX270,运行linux-2.6.9内核,交叉编译器为arrn—linux—gcc-3.4.3。EtherCAT从站设备包括Beckhoff公司出品的EK1100和Copley公司的Accelnet伺服驱动器。在此平台的基础上开发出了基于ARM的嵌入式运动控制器。由于ARM中Linux内核版本较低,周期任务的最快速度目前为10ms。若直接采用IPC进行控制,则速度可达1ms。
新闻来源:e-works,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
