1 技術(shù)背景
EtherCAT 是開放的實(shí)時(shí)以太網(wǎng)通訊協(xié)議,由德國(guó)倍福自動(dòng)化有限公司研發(fā)。EtherCAT 具有高性能、低成本、容易使用等特點(diǎn),目前在技業(yè)領(lǐng)域有著廣泛的應(yīng)用。
ZCU102 評(píng)估套件可幫助設(shè)計(jì)人員快速啟動(dòng)面向汽車、工業(yè)、視頻以及通信應(yīng)用的設(shè)計(jì)。該套件具有基于 Xilinx 16nm FinFET+ 可編程邏輯架構(gòu)的 Zynq? UltraScale+? MPSoC 器件,提供一款四核 ARM? Cortex?-A53、雙核 Cortex-R5F 實(shí)時(shí)處理器以及一款 Mali?-400 MP2 圖像處理單元。ZCU102 支持所有可實(shí)現(xiàn)各種應(yīng)用開發(fā)的主要外設(shè)及接口。
KPA EtherCAT 主站是一套質(zhì)量穩(wěn)定、知名度和性價(jià)比較高的 EtherCAT 協(xié)議棧,有較大參考價(jià)值。本文將介紹KPA EtherCAT 主站在ZCU102平臺(tái)的移植與測(cè)試
2 EtherCAT簡(jiǎn)介
EtherCAT(以太網(wǎng)控制自動(dòng)化技技)是一種用于確定性以太網(wǎng)的高性能工業(yè)通信協(xié)議,它擴(kuò)展了 IEEE 802.3 以太網(wǎng)標(biāo)準(zhǔn),使得數(shù)據(jù)傳輸中具有可預(yù)測(cè)性定時(shí)及高精度同步等特點(diǎn)。這個(gè)開放性標(biāo) 準(zhǔn)作為 IEC 61158 的組成部分,常用于機(jī)械設(shè)計(jì)及運(yùn)動(dòng)控制等應(yīng)用中。EtherCAT 采用標(biāo)準(zhǔn)的 IEEE802-3 以太網(wǎng)幀,幀結(jié)構(gòu)如圖 1。EtherCAT 協(xié)議直接用標(biāo)準(zhǔn)以太網(wǎng)的幀格式傳輸數(shù)據(jù),并不修改其基本結(jié)構(gòu)
EtherCAT 實(shí)現(xiàn)了 CANopen 協(xié)議,在 CANopen 中周期性的數(shù)據(jù)通過 PDO(過程數(shù)據(jù)對(duì)象)來傳輸,PDO 優(yōu)先級(jí)較高,可用于實(shí)時(shí)傳輸。非周期性的數(shù)據(jù)比如配置參數(shù)和對(duì)象字典等則通過 SDO(服務(wù)數(shù)據(jù)對(duì)象)來傳輸。
每個(gè) PDO 都包含單個(gè)或多個(gè)從設(shè)備的地址,這種數(shù)據(jù)加地址的結(jié)構(gòu)(附帶用于校驗(yàn)的傳輸計(jì)數(shù)位)組成了 EtherCAT 的報(bào)文。每個(gè) Ethernet 幀可能包含數(shù)個(gè)報(bào)文,而一個(gè)周期中可能需要多幀來傳送所需的所有報(bào)文。
傳統(tǒng)的以太網(wǎng)通信解決方案從站先接受以太網(wǎng)數(shù)據(jù)包,然后解釋和復(fù)制過程數(shù)據(jù),最后轉(zhuǎn)發(fā)數(shù)據(jù)。而EtherCAT 以太網(wǎng)幀在特殊的硬件模塊的幫助下可以實(shí)現(xiàn)在傳輸?shù)耐瑫r(shí)被處理。每個(gè)從節(jié)點(diǎn)都有 FMMU(現(xiàn)場(chǎng)總線存儲(chǔ)管理單元),F(xiàn)MMU 會(huì)對(duì)經(jīng)過的數(shù)據(jù)包進(jìn)行地址分析,發(fā)現(xiàn)是本節(jié)點(diǎn)的 數(shù)據(jù)就會(huì)讀取,同時(shí)報(bào)文轉(zhuǎn)發(fā)給下一個(gè)設(shè)備。同樣在報(bào)文通過的時(shí)候也可以插入需要傳輸?shù)臄?shù)據(jù)。讀取/插入/轉(zhuǎn)發(fā)數(shù)據(jù)的整個(gè)過程,報(bào)文只有幾納秒的延遲。如圖 2 所示,設(shè)想以太網(wǎng)的幀就像行駛中的火車,EtherCAT 報(bào)文是每節(jié)火車車廂,PDO 數(shù)據(jù)的比特就是車廂內(nèi)的乘客,這些數(shù)據(jù)可以被提取并插入到合適的從設(shè)備中。整輛火車不停止地穿越所有從設(shè)備,在末端從設(shè)備處又掉頭,重新反向穿越所有從設(shè)備。(注:EtherCAT不僅支持主從通訊,也支持從從通訊即S2S)
2.1 KPA EtherCAT主站軟件介紹
KPA EtherCAT主站軟件根據(jù)功能不同,提供了Basic,Standard,Premium以及Extension四個(gè)版本主站協(xié)議棧,因此除了支持ETG1500定義了Class A和Class B兩種主站類型外,KPA還支持一些拓展功能比如:Data- and Frame-Logger(記錄數(shù)據(jù)和報(bào)文)、Access Rights(設(shè)置不同的訪問權(quán)限)Multi Master(多主站,冗余)、Cable Redundancy (線纜冗余)、Hot-Connect(熱插拔)、其他。
提供了基于多種不同硬件平臺(tái)和OS的現(xiàn)成開發(fā)包,支持SoC(ARM+FPGA)/ARM/X86 /PowerPC等主流硬件平臺(tái),支持Linux(Xenomai/RT-preempt)/ Windows(INtime/RTX)/ QNX/ Ucos/ Vxworks等。幾乎滿足目前所有用戶主站開發(fā)要求的一款主站方案。
KPA主站協(xié)議棧采用模塊化的架構(gòu),可以實(shí)現(xiàn)每個(gè)特殊的項(xiàng)目應(yīng)用。它使得主站可以自由擴(kuò)展以適應(yīng)不同大小的應(yīng)用程序、可以移植不同的操作系統(tǒng)和各種各樣的硬件平臺(tái)。每個(gè)模塊可以單獨(dú)定制化或者二次開發(fā),而且不會(huì)破壞其他模塊的完整性。主站結(jié)構(gòu)如圖
KPA主要功能模塊為:
(1)應(yīng)用層:應(yīng)用層負(fù)責(zé)與各種不同的編程/配置環(huán)境交互,負(fù)責(zé)與不同的應(yīng)用或設(shè)備交互。確保在應(yīng)用或過程任務(wù)端順利訪問主站功能函數(shù);與主站通過Remote Procedure Calls服務(wù)交互,提供了TCP/IP以及UDP連接,比如:通過UDP與從站設(shè)備進(jìn)行mailbox相關(guān)的通訊
(2)Mailbox Module:EtherCAT主站核心mailbox模塊利用不同的協(xié)議處理服務(wù)數(shù)據(jù)對(duì)象(SDP),數(shù)據(jù)傳輸以及數(shù)據(jù)交換。支持CoE,FoE,EoE,SoE,VoE,AoE等郵箱服務(wù)。
(3)Process Image Module過程映像模塊:Process Image簡(jiǎn)稱PI,它的地址是由EtherCAT network information (ENI) 文件提出的,ENI文件可由配置工具KPA Studio自動(dòng)生成。從控制/過程任務(wù)訪問過程映像是由主站接口執(zhí)行的。
(4)Distribution Clock分布時(shí)鐘模塊:使得所有的EtherCAT設(shè)備(包括主站和從站)總是能夠共享相同的EtherCAT系統(tǒng)時(shí)間。這是通過補(bǔ)償編譯和漂移時(shí)間來實(shí)現(xiàn)的。
(5)Frame Schedule Module幀調(diào)度模塊:不同PDO采用不同的掃描周期。在配置工具KPA Studio里,用戶可以單獨(dú)定義每個(gè)從站的掃描速率。幀調(diào)度表模塊管理EtherCAT幀速率,轉(zhuǎn)發(fā)它們到EtherCAT網(wǎng)絡(luò)驅(qū)動(dòng)。
(6)OSAL操作系統(tǒng)抽象層模塊:包含與操作系統(tǒng)相關(guān)的功能函數(shù)的包裝,比如處理線程、計(jì)時(shí)器、互斥量等;包括網(wǎng)絡(luò)適配驅(qū)動(dòng)器模塊:從底層的網(wǎng)絡(luò)實(shí)現(xiàn)提取主站堆棧的core核心
2.2 KPA EtherCAT主站硬件介紹
主站硬件主要由三部分組成見下圖:ZCU102主站開發(fā)板以及外擴(kuò)的FMC網(wǎng)卡。KPA MAC IPcore在PL端構(gòu)建了FPGA網(wǎng)卡,F(xiàn)reeRTOS master既可以運(yùn)行在R5 CPU中也可以運(yùn)行在A53 CPU中,另外需要一臺(tái)PC通過串口終端來實(shí)現(xiàn)操作系統(tǒng)指令輸入,PC端上的EtherCAT網(wǎng)絡(luò)診斷配置工具KPA EtherCAT Studio通過RPC服務(wù)連接ZCU102主站板,可以實(shí)現(xiàn)對(duì)主站和從站的配置,掃描生成網(wǎng)絡(luò)配置文件。
2.3 KPA EtherCAT主站移植
2.3.1 硬件開發(fā)板
Xilinx HW-Z1-ZCU102 revision1.1
2.3.2 EtherCAT主站軟件開發(fā)包
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
2.3.3 軟件編譯
將MDK_xilinx-2018.3_freertos_a53_trial_v2.4.48714.0-release.zip解壓到mdk_a53文件夾下
進(jìn)入mdk_a53samples路徑下修改對(duì)應(yīng)樣例程序,此處每個(gè)不同的樣例程序包含不同的API,具有不同的功能,此處以24_DriveRotationCiA402為例,這是一個(gè)簡(jiǎn)單運(yùn)行單軸伺服的樣例程序,為了適配邁信伺服驅(qū)動(dòng)器,需保持C文件中的描述和ENI文件描述一致,修改后保存
進(jìn)入mdk_a53下,打開build.bat,修改編譯器路徑,路徑是xilinx SDK安裝路徑
運(yùn)行cmd,進(jìn)入該路徑下,運(yùn)行build.bat,編譯所有樣例代碼,包括編譯24樣例,在buildsamples路徑下生成24_DriveRotationCiA402.elf文件
2.3.4 創(chuàng)建運(yùn)行程序
進(jìn)入mdk_a53externalsboot路徑,根據(jù)readme文件以及24_DriveRotationCiA402.bif文件;
拷貝zcu102_freeRTOS內(nèi)vivado工程生成的design_1_wrapper.bit()文件到該路徑下,覆蓋原來bit文件;
拷貝zcu102_freertosproject_1project_1.sdkfsblRelease下的fsbl.elf到該路徑下,覆蓋原來fsbl.elf文件;
拷貝buildsamples路徑下生成的24_DriveRotationCiA402.elf到該路徑下;
拷貝生成的ENI文件(master.xml)文件到該路徑下
打開Xilinx XSCT tool進(jìn)入到externalsboot路徑下,生成boot.bin
將boot.bin文件拷貝到SD卡中,設(shè)置開發(fā)板SD卡啟動(dòng),上電運(yùn)行
2.4 主站性能數(shù)據(jù)
網(wǎng)絡(luò)配置:Beckhoff EK1100+EL1004+EL2004+EL6692 (60 bytes frame)。
運(yùn)行在R5 CP(x32)上測(cè)試數(shù)據(jù):
運(yùn)行在A53 CPU(x64)上測(cè)試數(shù)據(jù):
3 第三方抓包工具性能分析方法
一般情況下EtherCAT主站性能測(cè)試會(huì)關(guān)注主站通訊周期,circle time是否穩(wěn)定,抖動(dòng)多少,因此可以設(shè)置在不同的circle time,比如2ms,1ms,500us,250us,125us等條件下測(cè)試抖動(dòng),可以采用第三方的抓包工具+wireshark進(jìn)行報(bào)文分析,不同主站周期,需要修改代碼以及ENI文件的circle time,此處以1ms主站周期,郵箱任務(wù)周期是5ms(主站周期的5倍)
對(duì)Wireshark數(shù)據(jù)包進(jìn)行針對(duì)性分析,設(shè)置時(shí)間顯示格式如下
使用ecat.ado == 0x130命令,過濾出從站在第幾條報(bào)文處進(jìn)入op狀態(tài)的,這里是33900,意味著33900前的報(bào)文不能用于分析circle time,因?yàn)閜do數(shù)據(jù)/周期性數(shù)據(jù)只在從站進(jìn)入op后才被發(fā)送
分析周期性報(bào)文,注意到每個(gè)周期性報(bào)文包含三個(gè)子報(bào)文(邏輯尋址)以及一個(gè)DC相關(guān)的ARMW命令
過濾出周期性報(bào)文,使用該指令ecat.sub1.cmd == LRD && ecat.sub1.cnt == 0,過濾出子報(bào)文1為L(zhǎng)RD且計(jì)算器值為0(表示從主站發(fā)出,未經(jīng)過從站)的周期性報(bào)文,選擇三角進(jìn)行報(bào)文排序,可以是從小到大,或者從大到小
最小周期是999.496us