作者:陈秋苑 谢晓锋 陈海焕 广州虹科电子科技有限公司 摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发。EtherCAT 具有高性能、低成本、容易使用等特点,目前在工业自动化领域有着广泛的应用。Zynq-7000 是赛灵思公司(Xilinx)推出的行业第一个全可编程 SoC 产品, 它将双核 ARM Cortex-A9 处理器,低功耗可编程逻辑以及常用的外设紧密集成在一起。ZedBoard 是基于 XC7Z020 器件的低成本开发板,此板可以运行基于 Linux,Android,WinCE 或其他嵌入式 OS/ RTOS 的设计。 KPA EtherCAT 主站是一套质量稳定、知名度和性价比较高的 EtherCAT 协议栈,有较大参考价值。本文将介绍 KPA EtherCAT 主站在 Zynq 平台的移植与测试。 目录 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 主从站软硬件简介 提供了基于多种不同硬件平台和OS的现成开发包,支持SoC(ARM+FPGA)/ARM/X86 /PowerPC等主流硬件平台,支持Linux(Xenomai/RT-preempt)/ Windows(INtime/RTX)/ QNX/ Ucos/ Vxworks等。几乎满足目前所有用户主站开发要求的一款主站方案。 KPA主站协议栈采用模块化的架构,可以实现每个特殊的项目应用。它使得主站可以自由扩展以适应不同大小的应用程序、可以移植不同的操作系统和各种各样的硬件平台。每个模块可以单独定制化或者二次开发,而且不会破坏其他模块的完整性。主站结构如图3 图 3: KPA EtherCAT主站构架 KPA主要功能模块为: 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:硬件架构图 图 5:硬件内部架构 另外,KPA利用主站板的FPGA资源,独立外扩网卡,而不是使用主站板ARM上的网卡驱动,主站开发包中提供的Timer IP Core和NIC IPCore,利用逻辑单元PL,构建针对EtherCAT优化的MAC,提供了针对EtherCAT优化的NIC驱动,IP Core提供了Shift Sending Time设置,从端口降低有操作系统引起的数据帧抖动,从而优化了数据在收发时的抖动的问题。 3、KPA EtherCAT 主站移植 3.1Vivado 与 Xilinx SDK 工具安装 3.2Vivado 的下载安装 3.3给 Linux 内核代码打 Xenomai 实时补丁 3.4Linux 内核编译 图 6:Uboot编译 具体的ubuntu编译方法和编译kernel大同小异,可以参考这篇文章: http://www.wiki./Build+U-Boot 3.5下载源代码 3.6编译 U-Boot 3.7文件系统编译 3.8设备树编译 3.9KPA NIC 模块 3.10Vivado 生成 bitstream 文件 图 7:生成bitstream文件 3.11Xilinx SDK 生成 FSBL 图 8:生成的FSBL 3.12制作 BOOT.BIN 文件 图 9:生成BOOT.BIN文件 3.13烧录 SD 卡 图 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后会生成这个库文件。 图 12:SD卡中Xenomai文件 到此SD卡也做成了。SD卡插到板子上既可以运行了。 4、EtherCAT 主站程序测试 4.1实时数据获取单元 图 13:实时数据单元示意图 4.2离线数据分析单元 图 14:EtherCAT网络实验图 利用wireshark分别抓取数据(带DC) 图 15:基于Wireshark的EtherCAT数据帧(含DC) 利用wireshark分别抓取数据(不带DC): 图 16:基于Wireshark的EtherCAT数据帧(含DC) 表 1:EtherCAT数据测试结果 单位:us(统计至个位) 总结: 5、EtherCAT 测试程序分析 图 17:KPA开发包的功能模块(部分) 5.1利用 KPA Studio 扫描网络 图 18:KPA Studio扫描从站头文件 5.2Main 函数重要部分介绍 图 19:Main函数中的主站初始化部分 (2)加载PRC服务功能,方便利用KPA Studio进行调试 图 20:加载RPC远程调试功能 (3)切换主站状态 图 21:切换主站状态 (4)设置控制字,进行PI数据的读写,从而控制从站 图 22:读写PI 其中数据的读取都要遵循先调用EcatStartReadInputs/EcatDoneWriteOutputs 函数,获取输入输出PI,中间再调用EcatSetVariable进行数据的交互,最后再调用EcatDoneWriteOutputs获取数据读写的应答,结束读写。 6、主站开发包申请试用 注意:注册请用真实的公司名称、地址和联系方式,注册信息也也发一份给本土供应商,中国区内发给广州虹科电子科技有限公司:cqy@hkaco.com和support@hkaco.com。KPA一般在五个工作日内与本土供应商核对并完成审核,然后注册用户可以免费获取试用的开发包和KPA Studio调试软件(3个月有效期)。 |
|