基于AM3358处理器的嵌入式实时EtherCAT主站的构建*
2015-11-02李备备郑飂默
李备备,栾 勇,王 超,王 喆,郑飂默
(1.中国科学院大学,北京 100049;2.中国科学院沈阳计算技术研究所,沈阳 110168;3.沈阳高精数控技术有限公司,沈阳 110168)
基于AM3358处理器的嵌入式实时EtherCAT主站的构建*
李备备1,2,栾 勇2,3,王 超2,3,王 喆2,3,郑飂默2,3
(1.中国科学院大学,北京 100049;2.中国科学院沈阳计算技术研究所,沈阳 110168;3.沈阳高精数控技术有限公司,沈阳 110168)
工业以太网现场总线EtherCAT作为新兴的现场总线技术被越来越多的应用到数控领域,其中将EtherCAT总线应用到数控系统中的关键技术难点是构建EtherCAT主站。基于此,文章提出了一种基于AM3358处理器构建嵌入式EtherCAT主站的解决方案。首先采用RT Patch在AM3358处理器平台上实现嵌入式实时Linux系统,然后使用IgH EtherCAT Master开源组件在其上构建嵌入式实时EtherCAT主站。最后在数控系统中对嵌入式EtherCAT主站进行了测试,测试结果表明,构建的嵌入式实时EtherCAT主站可以满足数控系统实时性和多轴控制同步性的要求。
ARM;RT Patch;嵌入式实时系统;EtherCAT;数控系统
0 引言
近年来,实时工业以太网因其传输速度快,数据包容量大,传输距离远,实时性高和开放互联的特点,被越来越多的应用到了数控领域[1]。德国Beckhoff公司提出的EtherCAT(Ethernet for Control Automation Technology)便是其中的一种,它具有高性能、低成本、应用简单、拓扑灵活的特点,并且支持100Mbps全双工,有效数据率可达90%以上,可以极大的提高数控系统的性能。
与此同时,ARM嵌入式微处理器正朝着高性能、智能化的方向发展,其主频越来越高,接口功能越来越丰富,而价格则越来越低,因此相较于工业PC机它更灵活,功耗更小,成本更低[2]。从软件层面上看,一方面,嵌入式Linux操作系统的结构简单,软件资源丰富,可靠性和重构性都很强,唯一的不足是它本身不具备实时性,但是经过实时性的扩展或改造,可以使其满足数控系统苛刻的实时性要求。另一方面,成熟的开源EtherCAT主站软件,像Etherlab的IgH EtherCAT Master[3],使得一个完整的EtherCAT主站很容易的构建在嵌入式Linux系统之上。
因此本文的目标是采用嵌入式linux+RT Patch实时抢占补丁的方案,结合高性能的嵌入式处理器AM3358,实现基于AM3358的嵌入式实时系统,并在此基础上使用IgH EtherCAT Master开源组件构建嵌入式实时EtherCAT主站。
1 嵌入式实时Linux系统的实现
目前改进Linux系统实时性的方法主要有两种,一种是采用双内核结构,即在标准的Linux操作系统内核中嵌套进一个微小、实时的内核,将其改造成为具有双内核的异构系统[4]。所有实时任务都运行在微内核上,非实时的Linux则作为实时内核的一项优先级最低的任务来托管所有的非实时任务[5],其中典型的代表有RTLinux、RTAI、Xenomai[6-8]等。另一种是直接对Linux内核进行改造,如增加内核抢占,缩短中断延时等,其中的代表为RT Patch。
在这些改进Linux实时性的技术中,RTLinux已经被风河公司收购并商业化,仅支持Linux 2.4.10和2.6.2等几种特定的内核版本;RTAI虽然实时性能比较好,但对ARM的支持不够完善;Xenomai支持的架构很多,对ARM的支持也比较完善,但它并不支持本文使用的AM3358处理器;RT Patch是针对标准Linux内核设计的一种通用、可移植的实时补丁,这意味着它的实现和具体的处理器平台无关,因此可以无差别的应用到x86和ARM体系结构的处理器上,比较适合用来构建基于AM3358的嵌入式实时Linux系统。
1.1 RT Patch实时补丁
RT Patch是一个Linux内核的实时补丁,目前由Ingo Molnar和Thomas Gleixner共同维护[9]。这个实时补丁通过直接修改内核代码,将标准的Linux内核改造成一个完全抢占的实时内核。它将大部分的自旋锁(spinlock)替换为支持优先级继承并且可抢占的互斥量(mutex)。同时它将IRQ中断处理程序挪到了各自的内核线程中,这意味着它们可以像内核中的其它线程一样被调度。这些修改使得几乎整个内核都可以被抢占,从而极大的提升了内核的实时性能。
此外,RT Patch保持了全部的Linux应用编程模式,实时应用和普通的应用采用同样的编程方式,使用同样的API,不同的是只有实时任务需要明确指定自己的优先级与调度策略[8]。因此采用RT Patch方案构建的实时系统,可以很容易为其编写实时应用程序。
1.2 AM 3358微处理器
AM3358是德州仪器(TI)最新推出的一款基于ARM Cortex-A8的高性能嵌入式处理器,其主频高达720MHz,相较于传统的ARM9其性能有了大幅度的提升。它具有32KB/32KB的L1指令/数据高速缓存,具有错误纠正码(ECC)的256KB L2高速缓存;13级流水线,带有先进的预支分配功能;通过内部GPMC可外接NAND Flash、NOR Flash和SRAM等存储设备。它提供了2个以太网MAC(10/100/1000Mbps),可分别被用作主网口和备用网口。同时TI为其提供了完整的Linux板级支持包(BSP),使其非常容易构建嵌入式Linux系统。
1.3 构建嵌入式实时Linux系统
RT Patch嵌入式实时Linux系统是以AM3358高性能嵌入式处理器为硬件平台,采用TI板级支持包中的Linux-3.2.0-psp04.06.00.11内核与patch-3.2.0-rt51来构建的,步骤如下。
解压Linux内核源码,并进入Linux内核目录,给内核打RT Patch补丁并配置内核,依次执行以下命令;
图1 内核配置
打完RT Patch实时补丁之后,在内核配置界面”Processor type and feature”选项中的”Preemption Mode”项中会增加”Complete Preemption(Real-Time)”这一抢占模式,如图1所示,选中该项使实时补丁生效。同时需要将该选项中的”High Resolution Timer Support”项选上,以支持高精度定时器功能。
2 嵌入式EtherCAT主站的实现
2.1 IgH EtherCAT M aster
IgH EtherCAT Master是一个基于Linux操作系统的开源EtherCAT主站软件,使用它可以很容易的实现基于EtherCAT的控制应用程序。它具有自动扫描总线的功能,因此可以监控总线拓扑结构的变化,一旦拓扑发生改变,它将会重新对总线上的从站进行配置。此外它支持RTAI、Xenomai和RTPatch等linux的实时扩展,并且支持分布时钟功能,同时还支持CoE(CANopen over EtherCAT)、SoE(Servo Profile over EtherCAT)、EoE(Ethernet over EtherCAT)等一系列邮箱协议。
EtherCAT Master的结构,如图2所示,主要由三大部分组成;
图2 主站结构
(1)主站模块。它是一个Linux内核模块,包含了一个或多个主站对象、一个设备接口(Device Interface)和一个应用程序接口(Application Interface)。主站模块通过设备接口访问以太网设备,应用程序通过调用API接口提供的函数访问主站模块。
(2)控制应用程序。它不是主站模块的一部分,需要由用户来编写,它通过主站模块提供的API接口,与EtherCAT从站交换周期性的过程数据。控制应用程序可以是内核空间的一个模块(直接使用内核应用程序接口),也可以是用户空间的程序(通过EtherCAT库访问应用程序接口)。
(3)兼容EtherCAT的以太网设备驱动模块。它使得主站可以通过设备接口访问网络设备。EtherCAT Master提供了两种兼容EtherCAT的以太网驱动模块,它们分别是本地EtherCAT设备驱动模块和通用EtherCAT设备驱动模块。
2.2 构建嵌入式EtherCAT主站
IgH EtherCAT Master是针对通用的PC平台设计的,默认支持的是X86体系结构的处理器和PC平台的网卡,因此关键的技术难点是针对ARM架构的AM3358处理器和嵌入式网卡,移植EtherCAT主站模块及本地EtherCAT设备驱动。
2.2.1 本地EtherCAT设备驱动的移植
如何根据本地EtherCAT设备驱动的实现原理,修改AM3358处理器的网络设备驱动程序CPSW(Common Platform Ethernet Switch)以兼容EtherCAT,并没有统一的标准方法,只有一些通用的规则,这些规则总结如下;
(1)第一个简单的规则是,对于所有的EtherCAT设备必须避免调用netif-*()函数,因为EtherCAT设备不经过Linux内核的网络协议栈,所以不能调用网络协议栈提供的这些接口函数。
(2)另一个需要注意的地方是,由于EtherCAT设备驱动在轮询的方式下工作,对EtherCAT设备的所用操作都是在无中断的情况下进行的,因此应避免使能中断和调用中断注册服务程序。
(3)主站在初始化的时候会分配一个固定的套接字缓冲区(socket buffer),在每次发送的过程中,会先在这个socket buffer填充新的EtherCAT数据帧,然后将它传递给hard-start-xmit()回调函数。在整个过程中不会创建新的socket buffer,因此网络设备驱动也不能像往常一样释放这个socket buffer。
此外,为了区分网络设备是否被用作EtherCAT设备,需要在net-device网络设备结构体的私有数据结构体priv-data中扩展一个指针。这个指针指向ecdev -offer()函数的返回值,当被用作EtherCAT设备时该函数返回ec-device-t结构体对象,否则返回NULL。
2.2.2 EtherCAT主站模块的移植
解压EtherCAT Master源码,并进入EtherCAT Master目录进行配置、编译和安装,依次执行以下命令;
在配置中,通过prefix指定安装的路径,disable-8139too表示禁用掉默认的8139网卡驱动;enablecpsw表示使能AM3358处理器的本地EtherCAT网络设备驱动,该驱动是针对AM3358处理器的CPSW驱动程序修改而来本地EtherCAT设备驱动;最后通过with-linux-dir指定使用的Linux内核的路径。
3 EtherCAT主站实时性能测试
3.1 实验平台
实验平台包括三个组成部分;待测试的EtherCAT系统、实时数据获取单元和离线的实验数据分析单元,其结构和实物连接如图3和图4所示。
图3 实验平台结构图
图4 实验平台实物图
3.1.1 EtherCAT系统
EtherCAT系统由主站和从站组成(分别对应着图3中的左上和右上部分),主站为构建的嵌入式实时EtherCAT主站,从站为路斯特(LT-i)ServoOne系列中EtherCAT类型的伺服驱动器。
3.1.2 实时数据获取单元
实时数据获取单元采用的是福禄克(FLUKE)公司的OptiView XG网络分析仪(图3右下),它有4个网络端口,其中端口 A和端口 B为标准的100/1000Mbps自适应以太网接口。支持单独捕获上行和下行数据,并且可以将捕获的数据包转换为WinPCP格式,供Wireshark等软件进行数据分析。此外,它捕获数据包时间戳的分辨率可以达到1ns,保证了实验数据的精确性。
3.1.3 离线数据分析单元
离线数据分析单元(图3左下部)是由PC机运行开源软件Wireshark实现的,在实验的最后,所有捕获的WinPCAP格式的实验数据都会交给离线数据单元进行处理和分析。
3.2 不加系统负载
时间抖动被定义为高速串行信号边沿到来时刻与理想时刻的偏差[10]。它是衡量一个工业网络性能的重要指标,同时也决定着系统的定时精度。在基于软件的通信调度中,这种抖动已经成为了一个不容忽视的问题,因此本文着重研究一个周期性控制任务最坏的时间抖动。实验的测试方法是;通过OptiView XG捕获EtherCAT主站周期性输出的数据包,通过对比捕获到的实际时间与预期时间来计算时间抖动。在实验中设置任务周期为2ms,一共采样15000次。
第一组实验不对系统添加任何额外负载,只运行测试程序,测试结果如图5所示,显示了系统在运行独占的实时程序时的时间抖动信息。从实验数据可以清楚的观察到,即使平均的时间抖动接近于零,但也确实会存在一些小概率的异常。
对于本文使用3.2内核版本的RT Patch,由于所有软中断处理程序都由同一个内核线程ksoftirqd处理,因此无法通过单独设置高精度定时器软中断例程优先级的方法来避免这些干扰。但是3.2内核版本的RT Patch很好的缓解了这些干扰,从图6所示的扩展视图中的波形可以看到,最大的幅值为42μs,相对于实验中使用的2ms的控制周期来讲,时间抖动只占整个周期的2.1%。
图5 系统在无负载情况下的时间抖动
图6 时间抖动的扩展视图
3.3 加入系统负载
设计第二组实验的目的是测试加入系统负载后嵌入式EtherCAT主站的实时性能,测试方法为;在系统中同时运行EtherCAT实时控制任务和由标准内核调度器调度执行的普通任务,通过测试EtherCAT实时任务产生的时间抖动,来考查实时应用程序受普通任务的影响程度。在实际的应用中,系统一般会同时运行实时控制程序和其它的应用程序,比如,图形化显示应用程序、远程控制程序或者是数据日志记录程序等。因此对加入负载后的系统性能的测试与评估是很有必要的。
出于这种目的,本文设计了三种不同类型的系统负载,可以代表实际应用中常见的三类应用程序。在测试的整个过程中,使它们分别和EtherCAT应用程序一起并发的执行;
(1)一个CPU密集型(CPU-bound)的C程序,它反复的做开根号运算,由于只使用了少量的内存,因此它的执行不会引起任何的页面活动。
(2)一个C程序,它维护一个比可用的实际内存还大的数据结构,因而会产生频繁的页面置换。
(3)一个I/O密集型(I/O-bound)的程序,使用linux下的dd命令,通过文件系统往存储设备中写入大量的数据,从而将产生大量的I/O请求。
在所有的这些负载中,I/O密集型的负载对实时应用程序的影响最大,而CPU密集型的负载的影响几乎可以忽略不计。也就是说,Linux系统提供了实时任务与计算密集型负载任务之间的有效隔离,但是却不能完全消除在内核中由硬中断产生的干扰,如I/O设备的中断请求。
图7 系统在添加I/O负载情况下的时间抖动
图8 时间抖动的扩展视图
为了简短起见,本文只给出了对系统时间抖动影响最大的I/O负载的实例。在I/O负载下系统的时间抖动信息如图7所示,从图中可以明显的看出它的抖动幅度要比不添加负载时大一些。在整个实验过程中,测得的最坏的时间抖动为92μs,如图8扩展视图所示,仍然只占任务周期的4.6%,对于绝大多数的实时控制程序这个值是可以接受的。
两组实验表明影响时间抖动的主要来源是软中断处理程序之间的相互干扰和I/O类型的系统负载,但它们对时间抖动的影响都比较小。从总体来看,无论是在无负载和有负载的情况构建的嵌入式EtherCAT主站都表现出了良好的实时性能,满足数控系统实时性的要求。
4 系统多轴同步控制性能测试
在数控系统的位置控制中,多轴同步控制的性能直接决定着系统多轴联动的精度,成为影响机械加工质量的一个重要因素[11]。EtherCAT可以实现从站之间精确的时钟同步控制,将EtherCAT技术引入到数控系统中可以提高数控系统的同步控制性能。因此本文着重测试将嵌入式实时EtherCAT主站应用到数控系统中后的系统多轴同步控制性能,测试平台如图9所示。其中EtherCAT从站使用路斯特的ServoOne伺服驱动器,它支持CoE协议,并且支持分布时钟。主站的通信模式设置为DC模式,从站设置为同步于分布时钟同步(SYNC)事件模式,运行模式采用的周期性同步位置模式,周期设为2ms。
EtherCAT主站控制多个从站同步运行的关键在于分布时钟的同步和SYNC事件产生时间的一致。在ServoOne伺服驱动器的从站控制芯片(ESC)中,系统时间差寄存器(地址为;0x92C~0x92F)记录着本地系统时钟时间副本与参考时钟系统时间的差值,可以用它来判断时钟同步是否达到要求。SYNC时间寄存器(0x990~0x997)记录着下一个SYNC脉冲信号发生时间,可以用它来判断多个轴的SYNC事件产生时间是否一致。因此测试方法为;通过IgH EtherCAT提供的调试命令,读取每个从站的系统时间差寄存器和SYNC时间寄存器的值,根据读取的值来判断多个轴之间是否达到同步。
表1 测量数据
在测试中,对3个从站的系统时间差和SYNC时间做了多次测量,为了简单起见,本文只给出了测量得到的两组数据,如表1所示。从测量数据可以看出系统时间差的值介于100~-100ns之间,满足时钟同步要求,同时三个从站产生SYNC信号的时间也一致,表明将本文构建的嵌入式EtherCAT主站可以实现精确的多轴同步控制。
5 结论
本文首先分析了RT Patch实时抢占补丁的实现机制,在基于Cortex-A8的AM3358嵌入式处理器上采用打RT Patch实时补丁的方法构建实时嵌入式实时系统。同时详细的阐述了IgH EtherCAT Master开源软件组成模块的功能,然后将其移植到构建好的嵌入式实时系统上,实现了嵌入式实时EtherCAT主站,然后对构建的嵌入式EtherCAT主站的实时性能和数控系统多轴同步控制性能进行了测试。实验结果表明基于RT Patch+Linux+IgH EtherCAT Master构建的嵌入式EtherCAT主站具有良好的实时性和精确的多轴同步控制性能,可以满足数控系统的要求。
图9 多轴同步控制测试平台
[1]郇极,刘艳强.工业以太网总线EtherCAT驱动程序设计及应用[M].北京;北京航空航天大学出版社,2010.
[2]林立明.高性能嵌入式数控系统通讯模块的设计与实现[D].沈阳;中国科学院沈阳计算技术研究所,2012.
[3]IgH,EtherLab—EtherCAT master.[EB/OL].http;//www.etherlab.org/,2013.
[4]M.Cereia,I.Cibrario Bertolotti,and S.Scanzio.Performance of a Real-Time EtherCAT Master Under Linux[J]. IEEE Transactions on Industrial Informatics,2011,7(4);679-687.
[5]刘海涛.两种嵌入式实时Linux实现技术研究及实时多核应用[D].成都;西南交通大学,2006.
[6]Wind River Inc.Wind River Linux.[EB/OL].Available;2011,http;//www.windriver.com.
[7]P Mantegazza,E Bianchi,L Dozio,et al.RTAI;Real-time application interface[J].Linux Journal,2000,72;142-148.
[8]P Gerum.Xenomai—Implementing a RTOS emulation framework on GNU/Linux.[EB/OL].2004,Available;http;//www.xenomai.org.
[9]RTwiki,CONFIG PREEMPT RT Patch[EB/OL].2010,https;//rt.wiki.kernel.org/index.php/CONFIG-PREEMPT -RT-Patch.
[10]陆小虎,刘玉香,于东,等.基于CORTEX-A8处理器的嵌入式数控系统实时平台的设计与实现[J].小型微型计算机系统,2013,34(7);1689-1692.
[11]毕承恩,丁乃建.现代数控机床[M].北京;机械工业出版社,1993.
(编辑 李秀敏)
Construction of the Embedded Real-Time EtherCAT M aster Based on the AM 3358 Processer
LIBei-bei1,2,LUAN Yong2,3,WANG Chao2,3,WANG Zhe2,3,ZHENG Liao-mo2,3
(1.Chinese Academy of Sciences,Beijing 100049,China;2.Shenyang Institute of Computing Technology,Chinese Academy of Sciences,Shenyang 110168,China)
;EtherCAT,as an emerging fieldbus technology,is increasingly applied in the field of numerical control,the key technical difficulties of application EtherCAT into CNC system is to build EtherCAT master.For this reason,a solution of building embedded EtherCAT master based on AM 3358 processor is presented.Firstly,using RT Patch implements the embedded real-time Linux system on AM 3358 processor platform.Then using IgH EtherCAT Master open source components builds embedded EtherCAT master on that system.Finally,the embedded EtherCAT master is been tested in CNC system.The result shows that the embedded EtherCAT master can achieve precise multi axis synchronous control,can meet the requirement of real-time and synchronization of CNC system.
;ARM;RT Patch;embedded real-time system;EtherCAT;CNC
TH166;TG659
A
1001-2265(2015)05-0001-05 DOI:10.13462/j.cnki.mmtamt.2015.05.001
2014-07-11;
2014-08-22
″高档数控机床与基础制造装备″国家科技重大专项、基于二次开发平台的专用数控系统开发与应用(2013ZX04007-011)
李备备(1989—),男,河南焦作人,中国科学院大学硕士研究生,研究方向为数控技术,(E-mail)libeibei@escience.cn。