摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发。EtherCAT 具有高性能、低成本、容易使用等特点,目前在工业自动化领域有着广泛的应用。Zynq-7000 是赛灵思公司(Xilinx)推出的行业第一个全可编程 SoC 产品, 它将双核 ARM Cortex-A9 处理器,低功耗可编程逻辑以及常用的外设紧密集成在一起。ZedBoard 是基于 XC7Z020 器件的低成本开发板,此板可以运行基于 Linux,Android,WinCE 或其他嵌入式 OS/ RTOS 的设计。
KPA EtherCAT 主站是一套质量稳定、知名度和性价比较高的 EtherCAT 协议栈,有较大参考价值。本文将介绍 KPA EtherCAT 主站在 Zynq 平台的移植与测试。
目录
1、EtherCAT 简介
EtherCAT(以太网控制自动化技技)是一种用于确定性以太网的高性能工业通信协议,它扩展了 IEEE 802.3 以太网标准,使得数据传输中具有可预测性定时及高精度同步等特点。这个开放性标 准作为 IEC 61158 的组成部分,常用于机械设计及运动控制等应用中。EtherCAT 采用标准的 IEEE802-3 以太网帧,帧结构如图 1。EtherCAT 协议直接用标准以太网的帧格式传输数据,并不修改其基本结构。
图 1: EtherCAT 数据帧
EtherCAT 实现了 CANopen 协议,在 CANopen 中周期性的数据通过 PDO(过程数据对象)来传输,PDO 优先级较高,可用于实时传输。非周期性的数据比如配置参数和对象字典等则通过 SDO(服务数据对象)来传输。
每个 PDO 都包含单个或多个从设备的地址,这种数据加地址的结构(附带用于校验的传输计数位)组成了 EtherCAT 的报文。每个 Ethernet 帧可能包含数个报文,而一个周期中可能需要多帧来传送所需的所有报文。
传统的以太网通信解决方案从站先接受以太网数据包,然后解释和复制过程数据,最后转发数据。而EtherCAT 以太网帧在特殊的硬件模块的帮助下可以实现在传输的同时被处理。每个从节点都有 FMMU(现场总线存储管理单元),FMMU 会对经过的数据包进行地址分析,发现是本节点的 数据就会读取,同时报文转发给下一个设备。同样在报文通过的时候也可以插入需要传输的数据。读取/插入/转发数据的整个过程,报文只有几纳秒的延迟。如图 2 所示,设想以太网的帧就像行驶中的火车,EtherCAT 报文是每节火车车厢,PDO 数据的比特就是车厢内的乘客,这些数据可以被提取并插入到合适的从设备中。整辆火车不停止地穿越所有从设备,在末端从设备处又掉头,重新反向穿越所有从设备。(注:EtherCAT不仅支持主从通讯,也支持从从通讯即S2S)
图 2: EtherCAT 数据传输
2、EtherCAT 主从站软硬件简介
2.1KPA EtherCAT 主站软件介绍
KPA EtherCAT主站软件根据功能不同,提供了Basic,Standard,Premium以及Extension四个版本主站协议栈,因此除了支持ETG1500定义了Class A和Class B两种主站类型外,KPA还支持一些拓展功能比如:Data- and Frame-Logger(记录数据和报文)、Access Rights(设置不同的访问权限)Multi Master(多主站,冗余)、Cable Redundancy (线缆冗余)、Hot-Connect(热插拔)、其他。
提供了基于多种不同硬件平台和OS的现成开发包,支持SoC(ARM+FPGA)/ARM/X86 /PowerPC等主流硬件平台,支持Linux(Xenomai/RT-preempt)/ Windows(INtime/RTX)/ QNX/ Ucos/ Vxworks等。几乎满足目前所有用户主站开发要求的一款主站方案。
KPA主站协议栈采用模块化的架构,可以实现每个特殊的项目应用。它使得主站可以自由扩展以适应不同大小的应用程序、可以移植不同的操作系统和各种各样的硬件平台。每个模块可以单独定制化或者二次开发,而且不会破坏其他模块的完整性。主站结构如图3
图 3: KPA EtherCAT主站构架
KPA主要功能模块为:
1) 应用层:应用层负责与各种不同的编程/配置环境交互,负责与不同的应用或设备交互。确保在应用或过程任务端顺利访问主站功能函数;与主站通过Remote Procedure Calls服务交互,提供了TCP/IP以及UDP连接,比如:通过UDP与从站设备进行mailbox相关的通讯。
2) Mailbox Module:EtherCAT主站核心mailbox模块利用不同的协议处理服务数据对象(SDP),数据传输以及数据交换。支持CoE,FoE,EoE,SoE,VoE,AoE等邮箱服务。
3) Process Image Module过程映像模块:Process Image简称PI,它的地址是由EtherCAT network information (ENI) 文件提出的,ENI文件可由配置工具KPA Studio自动生成。从控制/过程任务访问过程映像是由主站接口执行的。
4) Distribution Clock分布时钟模块:使得所有的EtherCAT设备(包括主站和从站)总是能够共享相同的EtherCAT系统时间。这是通过补偿编译和漂移时间来实现的。
5) Frame Schedule Module帧调度模块:不同PDO采用不同的扫描周期。在配置工具KPA Studio里,用户可以单独定义每个从站的扫描速率。帧调度表模块管理EtherCAT帧速率,转发它们到EtherCAT网络驱动。
6) OSAL操作系统抽象层模块:包含与操作系统相关的功能函数的包装,比如处理线程、计时器、互斥量等;包括网络适配驱动器模块:从底层的网络实现提取主站堆栈的core核心
2.2KPA EtherCAT 主站硬件介绍
主站硬件主要由三部分组成见图4:PC端、Zedboard主站开发板以及外扩的FMC网卡。PC通过串口终端来实现操作系统指令输入,PC端上的EtherCAT网络诊断配置工具KPA EtherCAT Studio通过RPC服务连接Zedboard主站板,可以实现对主站和从站的配置,扫描生成网络配置文件。Zedboard作为EtherCAT主站板具体可参考 http://zedboard.org/product/zedboard 。
图 4:硬件架构图
图 5:硬件内部架构
另外,KPA利用主站板的FPGA资源,独立外扩网卡,而不是使用主站板ARM上的网卡驱动,主站开发包中提供的Timer IP Core和NIC IPCore,利用逻辑单元PL,构建针对EtherCAT优化的MAC,提供了针对EtherCAT优化的NIC驱动,IP Core提供了Shift Sending Time设置,从端口降低有操作系统引起的数据帧抖动,从而优化了数据在收发时的抖动的问题。
3、KPA EtherCAT 主站移植
本方案基于Zynq平台的EtherCAT主站实现,系统采用改进后的实时linux系统,即在标准的linux操作系统内核中嵌套进一个微小、实时内核,改造成具有双内核的异构系统,所有实时任务都运行在微内核上,非实时的Linux 则作为实时内核的一项优先级最低的任务来托管所有的非实时任务,采用Linux3.8.13和Xenomai2.6.3,下面介绍怎么搭建Zedboard主站。
3.1Vivado 与 Xilinx SDK 工具安装
我们主要用到SDK里的交叉编译器,以及用它来生成FSBL与BOOT.BIN文件。
我分别在ubuntu和windows上都安装了xilinx的SDK。其中windows上的xilinx SDK不需要单独安装,等在安装Vivado的时候勾选下就可以了。 Ubuntu上的xilinx SDK安装文件网址是 http://www.xilinx.com/support/download/index.html/content/xilinx/en/down...
3.2Vivado 的下载安装
Vivado主要是用来配置xilinx的FPGA外设的,后面生成bitstream文件时需要用,以及我们更改SOC里的外设引脚配置以及配置管脚等等时是需要用到。Vivado的下载地址
http://www.xilinx.com/support/download/index.html/content/xilinx/en/down...
3.3给 Linux 内核代码打 Xenomai 实时补丁
zedboard上运行的linux内核可不是普通的linux内核源码,而是打了xenomai补丁的实时嵌入式操作系统。需要先给linux源码打上xenomai补丁后方可编译
Linux源码下载: https://github.com/Xilinx/linux-xlnx.git
Xenomai安装包下载: http://download.gna.org/xenomai/stable/xenomai-2.6.3.tar.bz2
给linux内核代码打xenomai实时补丁,可以参看xilinx的官方文档《Xenomai for Zynq》: http://www.wiki.xilinx.com/Xenomai+for+Zynq
3.4Linux 内核编译
当xenomai补丁打好后,即可开始编译linux内核
图 6:Uboot编译
具体的ubuntu编译方法和编译kernel大同小异,可以参考这篇文章: http://www.wiki.xilinx.com/Build+U-Boot
3.5下载源代码
Uboot的源码下载地址是: https://github.com/Xilinx/u-boot-xlnx.git
3.6编译 U-Boot
命令是$make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_zed
可以看看u-boot源码文件夹目录下的boards.cfg文件。里面有各种平台的配置表。将编译好的u-boot文件改名为u-boot.elf文件。我们生存boot.bin时要用它
3.7文件系统编译
现在直接用的xilinx和KPA官方提供给我的文件系统“uramdisk.image.gz”。
参考文档: http://www.wiki.xilinx.com/Build+and+Modify+a+Rootfs
从xilinx网上下载arm_ramdisk.image.gz文件。下载地址如下。
http://www.wiki.xilinx.com/file/view/arm_ramdisk.image.gz/419243558/arm_...
这个文件是xilinx提供给我们做模板用的。可以把它解压开,然后在它基础上改改,再打包,就能用的。
3.8设备树编译
设备树的编译方法参考文档, http://www.wiki.xilinx.com/Build+Device+Tree+Blob 。
3.9KPA NIC 模块
直接用的KPA的“kpa_mac.ko文件”。
KPA这部分不用去动,现在也不用改,这部分文件放在我们SD卡的第二分区了即可。然后设备树上加上mac的配置部分即可。
3.10Vivado 生成 bitstream 文件
基于kpa给的Vivado工程“zedboard_redundancy”和两个ipcore,来产生bitstream文件。
图 7:生成bitstream文件
3.11Xilinx SDK 生成 FSBL
图 8:生成的FSBL
3.12制作 BOOT.BIN 文件
利用xilinx SDK,看到,BOOT.BIN文件其实是将U-boot,Vivado生成的Bitstream文件,SDK生成的FSBL文件以及SDK自动生成的的boot.bif四合一打包生成的一个启动文件。BOOT.BIN下一节会放到SD卡中,作用主要是初始化zedboard硬件和加载linux内核。
图 9:生成BOOT.BIN文件
3.13烧录 SD 卡
在ubuntu环境下,将一张4G的SD卡格式化为两分区,第一分区1.1G为FAT格式;第二分区为2.9G为Ext4格式。
图 10:SD卡分区
然后将前面准备的BOOT.BIN文件,设备树文件devicetree.dtb,文件系统文件uramdisk.image.gz文件,linux内核镜像uImage这四个文件拷贝到第一分区。不难看出第一分区全部是和操作系统相关的文件。第二分区里则是三个文件,全由KPA提供Master: KPA的EtherCat主站相关的所有文件;
图 11:SD卡中Master内容
Xenomai:xenomai依赖的一些库文件,这个可以官网下载xenomai对应的版本如2.6.3。然后在根目录下make后会生成这个库文件。
Mod:该文件夹下则主要是kpa_mac.ko,也就是KPA提供的那个网卡驱动。
如下图:
图 12:SD卡中Xenomai文件
到此SD卡也做成了。SD卡插到板子上既可以运行了。
4、EtherCAT 主站程序测试
实验平台包括三个组成部分:待测试的EtherCAT系统、实时数据获取单元和离线的实验数据分析单元,如下图所示。主站为构建的嵌入式实时EtherCAT 主站,从站为两套松下交流伺服驱动器MADHT系列。测试的内容为在周期时间为250us下,带DC功能和不带DC功能的测试数据对比。
4.1实时数据获取单元
实时数据获取单元采用的是虹科的网络分析仪Profishark 100M或Profishark 1G,两个网口为标准的100M/1Gbps 以太网接口。支持单独捕获上行和下行数据,并且可以将捕获的数据包供Wireshark /Profishark Manager等软件进行数据分析。此外,它捕获数据包时间戳的分辨率可以达到5ns,保证了实验数据的精确性,如下图:
图 13:实时数据单元示意图
4.2离线数据分析单元
离线数据分析单元是由PC 机运行开源软件Wireshark 实现的,在实验的最后,所有捕获的的实验数据都会交给离线数据单元进行处理和分析。
图 14:EtherCAT网络实验图
利用wireshark分别抓取数据(带DC)
图 15:基于Wireshark的EtherCAT数据帧(含DC)
利用wireshark分别抓取数据(不带DC):
图 16:基于Wireshark的EtherCAT数据帧(含DC)
表 1:EtherCAT数据测试结果 单位:us(统计至个位)
总结:
可以看出,基于Zynq平台的主站设计方案circle time完全可以做到250us级别,带两轴从站的情况下加DC功能,基本没有抖动存在,但是不带DC的话,周期时间不稳定,抖动也相对较大。
5、EtherCAT 测试程序分析
KPA EtherCAT主站协议栈提供了多种功能的程序模板如下,包括ETG协议规定的几种模式,写应用时,可以在这些代码模板上进行编程测试,本文作者基于01异步模式进行测试程序的分析。
图 17:KPA开发包的功能模块(部分)
5.1利用 KPA Studio 扫描网络
先扫描从站信息,利用KPA Studio导出从从站信息的头文件,定义了从站地址,数据长度。
图 18:KPA Studio扫描从站头文件
5.2Main 函数重要部分介绍
(1)main函数里面,首先主站初始化。包括获取网卡,指定网络配置文件路径,设置周期时间,等操作
图 19:Main函数中的主站初始化部分
(2)加载PRC服务功能,方便利用KPA Studio进行调试
图 20:加载RPC远程调试功能
(3)切换主站状态
图 21:切换主站状态
(4)设置控制字,进行PI数据的读写,从而控制从站
图 22:读写PI
其中数据的读取都要遵循先调用EcatStartReadInputs/EcatDoneWriteOutputs 函数,获取输入输出PI,中间再调用EcatSetVariable进行数据的交互,最后再调用EcatDoneWriteOutputs获取数据读写的应答,结束读写。
6、主站开发包申请试用
从KPA官网https://koenig-pa.de/进入,点击“Customer Portal”进入注册页面。注册后可以登录并点击“Quote”,“Request for Quotation”,填写完公司信息后点击“Add Product”,这时会出来很多不同的硬件平台和操作系统列表,选择带MDK Trail字样且价格为0的产品。
注意:注册请用真实的公司名称、地址和联系方式,注册信息也也发一份给本土供应商,中国区内发给广州虹科电子科技有限公司:cqy@hkaco.com和support@hkaco.com。KPA一般在五个工作日内与本土供应商核对并完成审核,然后注册用户可以免费获取试用的开发包和KPA Studio调试软件(3个月有效期)。
转载:http://xilinx.eetrend.com/article/10713