刘星宇 张春雷 刘冠宸
(四川大学 机械工程学院 四川成都610065)
制造业升级极大地带动了工控领域的发展,近几年网络技术发展迅猛,传统的现场总线技术已无法满足新的工控需求,如今的工业现场总线技术正朝着实时以太网的方向不断发展。全球许多公司推出了自己的工业以太网现场总线协议:Modbus/TCP、EtherNet/IP、Ethernet Power link、EPA、PROFINET RT、EtherCAT、SERCOS-Ⅲ[1]。其中,由德国BeckHoff公司提出的EtherCAT实时工业以太网技术以其众多的优势脱颖而出:兼容TCP/IP数据包、实时性强、数据传输高速稳定、网络拓扑灵活多样。
目前,网上有两套开源的EtherCAT主站框架。SOEM 对 EtherCAT功能的实现相对简单;IgH EtherCAT Master对EtherCAT功能的实现则相对完善,不仅支持RTAI、Xenomai等多种实时扩展,还支持分布时钟功能,显著提高了主从站通讯的实时性和从站运行的同步性,更适合应用于 EtherCAT主站控制器的开发。对于IgH EtherCAT主站的研究,张克华[2]等人将其应用于 LinuxCNC开放式数控系统中,系统的实时响应时间在微秒级别;蒋杰[3]等人基于X86平台设计EtherCAT主站,通信最大抖动为88μs;马春敏[4]等人研究IgH EtherCAT主站架构、通信等基础知识,周期任务采用内核定时器的方式,周期任务最快速度为10ms;还有很多学者基于开源IgH EtherCAT做了丰富的研究,但实时性的实现都不是太高。
为了提高实时性,本设计不仅使用了 Xenomai实时扩展,还对协议栈收发数据帧的接口进行了修改,在高性能的ZYNQ硬件平台上基于IgH开发嵌入式EtherCAT主站,并对实时性进行实验测试。
本设计搭建基于IgH 的EtherCAT主站包括四部分的内容:移植Linux系统到ZYNQ硬件平台、修改数据帧收发接口、移植IgH EtherCAT Master for Linux开源框架和添加Xenomai实时扩展。
IgH EtherCAT开源框架是基于Linux操作系统开发的,因此在使用它之前首先要将Linux操作系统移植到基于ARM的硬件平台ZYNQ上。移植的主要流程如下:
1)修改设备树文件
(1)下载并解压linux-xlnx-xilinx-v14.5.tar.gz文件;
(2)修改设备树文件zynq-zc702.dts中memory的大小,使之匹配硬件平台的内存;
(3)在参数chosen选项中,增加maxcpus=1,使Linux系统运行在单核上;
(4)增加emmc设备树;
(5)编译设备树文件为devicetree.dtb文件。
2)修改内核
(1)修改menuconfig中块设备的大小为65536,以匹配文件系统大小,否则内核启动时会报错;
(2)在 arch/arm/Kconfig 中 修 改CONFIG_HZ=1000,细化时钟粒度,增大时钟分辨率为优化实时性做准备;
(3)编译内核文件为uImage文件。
(4)创建文件系统并将其编译为uramdisk.image.gz。
(5)将 U-Boot引导程序下载到 ZYNQ上的FLASH中并启动,使用tftp网络引导工具将编译后的 uImage、uramdisk.image.gz、devicetree.dtb文件加载到ZYNQ的内存上,利用”bootm”指令引导文件启动。
为降低数据帧传输时的抖动,本设计对协议栈收发数据帧的通道进行了改造。最初的数据帧收发通道通过数据帧收发接口连接缓冲区、ARM裸核、网口的方式实现数据帧的读写,在1ms的周期下测得的EtherCAT通讯抖动为6~7 μs。因为FPGA是依靠硬件来实现所有功能,因此相比于ARM裸核有更高的稳定性。用FPGA代替ARM裸核能进一步降低 EtherCAT通讯时的抖动,改造后的数据帧收发通道如图1所示。
图1 修改后的IgH数据帧收发接口设计
移植 IgH EtherCAT是主站开发过程中最重要的一步,其主要流程如下:
(1)下载并解压ethercat-1.5.2tar.bz2文件;
(2)运行“configure”指令对 IgH EtherCAT进行安装前的配置;
(3)多次运行“make”指令完成对 IgH EtherCAT各模块的编译和安装,并把相关文件复制到指定的文件夹;
(4)重新编译文件系统;
(5)上电启动硬件平台,在文件系统根目录执行ecat脚本便能启动IgH EtherCAT协议栈。
EtherCAT通讯的优势之一是高实时性,但Linux系统本身不具备实时性,所以必须对 Linux系统进行实时改造,本设计采用Xenomai实时扩展。完成实时性改造后,主站的系统软件结构如图2所示。
图2 IgH EtherCAT主站系统软件结构
EtherCAT的实时任务通过协议栈的 API由Xenomai实时辅助内核执行,其他非实时任务直接由Linux内核执行。因为Linux内核的的优先级要低于实时辅助内核,即便在Linux内核处理非实时任务时,一旦需要执行实时任务,实时辅助内核便可抢占Linux运行,使系统的实时性得以保证[5]。
主站启动与从站建立通讯大致可分为两个阶段,分别为主从站之间的各种初始化配置和周期实时任务,如图3所示,涉及对多个IgH应用接口函数的按序调用。”
图3 主站程序流程
初始化完成后首先要请求一个主站实例,这是配置的开始;然后进行总线配置,使主站能根据从站信息与从站建立连接并获取从站的拓扑信息;接着配置主从站通讯方式,EtherCAT通讯分为 PDO(过程数据对象)周期性实时通讯和SDO(服务数据对象)非周期性邮箱通讯;通过配置分布时钟使各从站的本地时钟同步到参考时钟,令各个从站的控制任务能够同步执行;完成配置后便可激活主站,创建和运行周期实时任务,实现 EtherCAT周期性实时通讯的核心功能。
周期实时任务的作用是实现主站和从站之间过程数据的实时通信,即主站周期性生成控制指令(逻辑运算指令和运动控制算法)发送给从站,从站执行指令后周期性返回运行状态[6]。
各项配置完成后激活主站,通过调用Xenomai实时扩展的应用接口函数 rt_intr_create(…)创建中断;调用 rt_intr_enable(…)使能中断;调用中断服务函数 irq_server (…)执行周期实时任务;调用rt_intr_delete(…)可结束周期实时任务。
主站应用程序设计完成之后,运行应用程序便能实现主站与从站间的通讯。EtherCAT技术最重要的就是通讯的实时性,任何一款开发的主站都需对其实时性进行测试,实时性最重要的指标是通信时的抖动量。本测试方案使用ET2000和Wireshark网络分析工具对主从站通信时总线上的数据帧进行抓取分析,同步周期设置为1ms,从站运行CSP(周期同步位置)模式。每条数据帧末尾都带有被ET2000添加的分辨率为纳秒的时间戳,通过分析数据帧的内容与时间戳便能方便地计算出主站通信时的抖动量,从而反映出主站实时性的强弱。IgH主站实时性的测试方案如图4所示。
首先将 ET2000串联到主从站之间,其次将ET2000的千兆网口连接到 PC;PC端再运行Wireshark网络分析工具;最后通过使用Wireshark对总线上的数据帧进行抓取并存储在PC上以便进一步分析。测试实验平台如图5所示。
图4 IgH主站实时性测试方案
图5 IgH主站测试实验平台
使用ET2000和Wireshark网络分析工具抓取到通信数据帧后,首先筛选出主站发出的 PDO数据帧;再利用Wireshark的tshark命令将所有筛选出的PDO数据帧的时间戳导出;最后利用Excel统计出相邻两数据帧发送的时间间隔。
此时间间隔与设定的同步周期的偏移量便是IgH主站通信的抖动量,偏移量越小说明本文开发的主站实时性越强。为较全面地分析主站的实时性,使用开发好的IgH主站分别与单台E28H1型I/O从站、单台松下从站、单台A1E从站和4台A1E从站通讯并测试其抖动,测试结果如图6~图9所示。
图6 单台E28H1型I/O从站周期实时任务抖动
图7 单台松下伺服从站周期实时任务抖动
图8 单台A1E从站周期实时任务抖动
图9 4台A1E伺服从站周期实时任务抖动
对测试结果做进一步分析,本文开发的IgH主站的实时性测试统计结果如表1所示。
表1 IgH主站实时性测试统计
由统计数据可知,此主站周期实时任务的抖动较低,与单台I/O从站通讯时的抖动处于纳秒级别,与伺服从站通讯时的抖动要稍高一些,但也维持在了很低的微秒级别;与不同类型的伺服从站通讯时的抖动略有差别;与四台A1E伺服电机通讯的最大抖动为2μs,仅占整个通讯周期的0.2%,说明主站运行良好且具备较高的实时性。
本文介绍了基于IgH EtherCAT Master开源框架开发 EtherCAT主站的简要流程;研究了主站应用程序的设计流程和主站周期任务的实现方式;对开发完成的主站进行了系列性能测试实验;测试结果表明本文设计开发的 EtherCAT主站运行正常,且实时性较高,与从站通讯时的抖动控制在了几微秒的范围内,再加以优化和进一步开发能够应用于多种对实时性要求较高的工控领域。