技术背景
EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发。EtherCAT 具有高性能、低成本、容易使用等特点,目前在工业领域有着广泛的应用。
ZCU102 评估套件可帮助设计人员快速启动面向汽车、工业、视频以及通信应用的设计。该套件具有基于 Xilinx 16nm FinFET+ 可编程逻辑架构的 Zynq UltraScale+ MPSoC 器件,提供一款四核 ARM Cortex-A53、双核 Cortex-R5F 实时处理器以及一款 Mali-400 MP2 图像处理单元。ZCU102 支持所有可实现各种应用开发的主要外设及接口。
KPA EtherCAT 主站是一套质量稳定、知名度和性价比较高的 EtherCAT 协议栈,有较大参考价值。本文将介绍KPA EtherCAT 主站在ZCU102平台的移植与测试。
KPA EtherCAT介绍
EtherCAT(以太网控制自动化技术)是一种用于确定性以太网的高性能工业通信协议,它扩展了 IEEE 802.3 以太网标准,使得数据传输中具有可预测性定时及高精度同步等特点。这个开放性标 准作为 IEC 61158 的组成部分,常用于机械设计及运动控制等应用中。
01 KPA 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主站协议栈采用模块化的架构,可以实现每个特殊的项目应用。它使得主站可以自由扩展以适应不同大小的应用程序、可以移植不同的操作系统和各种各样的硬件平台。每个模块可以单独定制化或者二次开发,而且不会破坏其他模块的完整性。主站结构如下图:
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核心。
02 KPA EtherCAT Master主站冗余技术
与其他基于以太网的工业接口不同,EtherCAT使用hop-to-hop通信协议: 数据报文对连接到总线的所有从设备都是通用的,并且它从一个设备传递到另一个设备。主站是管理者,它循环地创建带有读或写请求,输入输出数据报文,并以严格的时间间隔将其发送到总线。每个从站设备可以插入(写入)或提取(读取)明确寻址到它的数据块。
该功能原本旨在有效地利用总线吞吐量,但对于容错也非常有用:连接到总线的任何设备都完全知道所有从站的活动,并且可以透明地获取或嗅探总线主站和从站之间传输的数据。用户无需修改任何从站设备、添加任何其他信号或更改传输协议,并且此功能不会增加任何成本(除了更智能的主设备)。
KPA EtherCAT Master 使用此边缘效应将另一个总线主控(或多个主控)引入总线。在正常操作期间, 此冗余主站是被动的,能够嗅探数据但不能输入自己的报文。被动主站被认为是次要的,而活动的主站被认为是主要的。由于所有辅助主站都与总线活动一致,因此当后者失败时,它们随时可以取代主要主站。
另外,为了检测总线上的异常情况,辅助主站可以不需要任何专用控制设备或附加信号线。EtherCAT报文定期、严格地按时间间隔进行。当一个辅助被动主站没有收到他期望的报文时,就知道总线上已经不再有主站了。冗余主站可以立即接管控制,发送自己的报文而没有必要等到当前周期结束。这个报文将是正确的和有意义的,因为辅助主站正在追踪所有的变化,成为有故障主站的替换。
启用主站冗余的EtherCAT配置包括一个活动的(主站)主设备和一个或多个被动的(辅助)主设备。主设备可能不会配置为Master Redundancy,但最好使用 KPA EtherCAT Master软件来使该技术发挥最大的效用。辅助主站作为影子代理连接到总线。它嗅探传输中的数据报文而没有任何变化。同时,该主站计算每个电报到达的时间并跟踪预期和实际到达时间之间的可能延迟。
03 KPA EtherCAT主站硬件介绍
主站硬件主要由三部分组成见下图:ZCU102主站开发板以及外扩的FMC网卡。KPA MAC IPcore在PL端构建了FPGA网卡,FreeRTOS master既可以运行在R5 CPU中也可以运行在A53 CPU中,另外需要一台PC通过串口终端来实现操作系统指令输入,PC端上的EtherCAT网络诊断配置工具KPA EtherCAT Studio通过RPC服务连接ZCU102主站板,可以实现对主站和从站的配置,扫描生成网络配置文件。
KPA EtherCAT主站移植
硬件开发板
Xilinx HW-Z1-ZCU102 revision1.1
EtherCAT主站软件开发包
MDK_xilinx-2018.3_freertos_a53_trial_v2.4.48714.0-release.zip
HW_SAMPLE_xilinx-2018.3_freertos_a53_trial_v2.4.48714.0-release.zip
软件编译
将MDK_xilinx-2018.3_freertos_a53_trial_v2.4.48714.0-release.zip解压到mdk_a53文件夹下
进入\mdk_a53\samples路径下修改对应样例程序,此处每个不同的样例程序包含不同的API,具有不同的功能,此处以24_DriveRotationCiA402为例,这是一个简单运行单轴伺服的样例程序,为了适配迈信伺服驱动器,需保持C文件中的描述和ENI文件描述一致,修改后保存
进入\mdk_a53下,打开build.bat,修改编译器路径,路径是xilinx SDK安装路径
运行cmd,进入该路径下,运行build.bat,编译所有样例代码,包括编译24样例,在\build\samples路径下生成24_DriveRotationCiA402.elf文件
创建运行程序
进入mdk_a53\externals\boot路径,根据readme文件以及24_DriveRotationCiA402.bif文件;
拷贝zcu102_freeRTOS内vivado工程生成的design_1_wrapper.bit()文件到该路径下,覆盖原来bit文件;
拷贝zcu102_freertos\project_1\project_1.sdk\fsbl\Release下的fsbl.elf到该路径下,覆盖原来fsbl.elf文件;
拷贝\build\samples路径下生成的24_DriveRotationCiA402.elf到该路径下;
拷贝生成的ENI文件(master.xml)文件到该路径下
打开Xilinx XSCT tool进入到\externals\boot路径下,生成boot.bin
将boot.bin文件拷贝到SD卡中,设置开发板SD卡启动,上电运行
主站性能数据
网络配置:Beckhoff EK1100+EL1004+EL2004+EL6692 (60 bytes frame)。
运行在R5 CP(x32)上测试数据:
运行在A53 CPU(x64)上测试数据:
第三方抓包工具性能分析方法
一般情况下EtherCAT主站性能测试会关注主站通讯周期,circle time是否稳定,抖动多少,因此可以设置在不同的circle time,比如2ms,1ms,500us,250us,125us等条件下测试抖动,可以采用第三方的抓包工具+wireshark进行报文分析,不同主站周期,需要修改代码以及ENI文件的circle time,此处以1ms主站周期,邮箱任务周期是5ms(主站周期的5倍)。
对Wireshark数据包进行针对性分析,设置时间显示格式如下
使用ecat.ado == 0x130命令,过滤出从站在第几条报文处进入op状态的,这里是33900,意味着33900前的报文不能用于分析circle time,因为pdo数据/周期性数据只在从站进入op后才被发送。
分析周期性报文,注意到每个周期性报文包含三个子报文(逻辑寻址)以及一个DC相关的ARMW命令
过滤出周期性报文,使用该指令ecat.sub1.cmd == LRD && ecat.sub1.cnt == 0,过滤出子报文1为LRD且计算器值为0(表示从主站发出,未经过从站)的周期性报文,选择三角进行报文排序,可以是从小到大,或者从大到小,最小周期是999.496us。
本文转载自:cechina