摘 要:EtherCAT 是開放的實(shí)時(shí)以太網(wǎng)通訊協(xié)議,由德國倍福自動化有限公司研發(fā)。EtherCAT 具有高性能、低成本、容易使用等特點(diǎn),目前在工業(yè)自動化領(lǐng)域有著廣泛的應(yīng)用。Zynq-7000 是賽靈思公司(Xilinx)推出的行業(yè)第一個(gè)全可編程 SoC 產(chǎn)品, 它將雙核 ARM Cortex-A9 處理器,低功耗可編程邏輯以及常用的外設(shè)緊密集成在一起。ZedBoard 是基于 XC7Z020 器件的低成本開發(fā)板,此板可以運(yùn)行基于 Linux,Android,WinCE 或其他嵌入式 OS/ RTOS 的設(shè)計(jì)。
KPA EtherCAT 主站是一套質(zhì)量穩(wěn)定、知名度和性價(jià)比較高的 EtherCAT 協(xié)議棧,有較大參考價(jià)值。本文將介紹 KPA EtherCAT 主站在 Zynq 平臺的移植與測試。
目錄
第一節(jié) EtherCAT 簡介
第二節(jié) KPA EtherCAT 軟件包簡介和使用
第三節(jié) KPA EtherCAT 主站簡介和移植
第四節(jié) EtherCAT 主站程序測試
第五節(jié) EtherCAT 測試程序分析
第六節(jié) 主站開發(fā)包申請?jiān)囉?/strong>
1、EtherCAT 簡介
EtherCAT(以太網(wǎng)控制自動化技技)是一種用于確定性以太網(wǎng)的高性能工業(yè)通信協(xié)議,它擴(kuò)展了 IEEE 802.3 以太網(wǎng)標(biāo)準(zhǔn),使得數(shù)據(jù)傳輸中具有可預(yù)測性定時(shí)及高精度同步等特點(diǎn)。這個(gè)開放性標(biāo) 準(zhǔn)作為 IEC 61158 的組成部分,常用于機(jī)械設(shè)計(jì)及運(yùn)動控制等應(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)。
?
圖 1: EtherCAT 數(shù)據(jù)幀
EtherCAT 實(shí)現(xiàn)了 CANopen 協(xié)議,在 CANopen 中周期性的數(shù)據(jù)通過 PDO(過程數(shù)據(jù)對象)來傳輸,PDO 優(yōu)先級較高,可用于實(shí)時(shí)傳輸。非周期性的數(shù)據(jù)比如配置參數(shù)和對象字典等則通過 SDO(服務(wù)數(shù)據(jù)對象)來傳輸。
每個(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)場總線存儲管理單元),F(xiàn)MMU 會對經(jīng)過的數(shù)據(jù)包進(jìn)行地址分析,發(fā)現(xiàn)是本節(jié)點(diǎn)的 數(shù)據(jù)就會讀取,同時(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: EtherCAT 數(shù)據(jù)傳輸
2、EtherCAT 主從站軟硬件簡介
2.1KPA 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(熱插拔)、其他。
提供了基于多種不同硬件平臺和OS的現(xiàn)成開發(fā)包,支持SoC(ARM+FPGA)/ARM/X86 /PowerPC等主流硬件平臺,支持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)和各種各樣的硬件平臺。每個(gè)模塊可以單獨(dú)定制化或者二次開發(fā),而且不會破壞其他模塊的完整性。主站結(jié)構(gòu)如圖3
?
圖 3: KPA EtherCAT主站構(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ù)對象(SDP),數(shù)據(jù)傳輸以及數(shù)據(jù)交換。支持CoE,FoE,EoE,SoE,VoE,AoE等郵箱服務(wù)。
3) Process Image Module過程映像模塊:Process Image簡稱PI,它的地址是由EtherCAT network information (ENI) 文件提出的,ENI文件可由配置工具KPA Studio自動生成。從控制/過程任務(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ū)動。
6) OSAL操作系統(tǒng)抽象層模塊:包含與操作系統(tǒng)相關(guān)的功能函數(shù)的包裝,比如處理線程、計(jì)時(shí)器、互斥量等;包括網(wǎng)絡(luò)適配驅(qū)動器模塊:從底層的網(wǎng)絡(luò)實(shí)現(xiàn)提取主站堆棧的core核心
2.2KPA EtherCAT 主站硬件介紹
主站硬件主要由三部分組成見圖4:PC端、Zedboard主站開發(fā)板以及外擴(kuò)的FMC網(wǎng)卡。PC通過串口終端來實(shí)現(xiàn)操作系統(tǒng)指令輸入,PC端上的EtherCAT網(wǎng)絡(luò)診斷配置工具KPA EtherCAT Studio通過RPC服務(wù)連接Zedboard主站板,可以實(shí)現(xiàn)對主站和從站的配置,掃描生成網(wǎng)絡(luò)配置文件。Zedboard作為EtherCAT主站板具體可參考 。
圖 4:硬件架構(gòu)圖
?
?
圖 5:硬件內(nèi)部架構(gòu)
另外,KPA利用主站板的FPGA資源,獨(dú)立外擴(kuò)網(wǎng)卡,而不是使用主站板ARM上的網(wǎng)卡驅(qū)動,主站開發(fā)包中提供的Timer IP Core和NIC IPCore,利用邏輯單元PL,構(gòu)建針對EtherCAT優(yōu)化的MAC,提供了針對EtherCAT優(yōu)化的NIC驅(qū)動,IP Core提供了Shift Sending Time設(shè)置,從端口降低有操作系統(tǒng)引起的數(shù)據(jù)幀抖動,從而優(yōu)化了數(shù)據(jù)在收發(fā)時(shí)的抖動的問題。
?
3、KPA EtherCAT 主站移植
本方案基于Zynq平臺的EtherCAT主站實(shí)現(xiàn),系統(tǒng)采用改進(jìn)后的實(shí)時(shí)linux系統(tǒng),即在標(biāo)準(zhǔn)的linux操作系統(tǒng)內(nèi)核中嵌套進(jìn)一個(gè)微小、實(shí)時(shí)內(nèi)核,改造成具有雙內(nèi)核的異構(gòu)系統(tǒng),所有實(shí)時(shí)任務(wù)都運(yùn)行在微內(nèi)核上,非實(shí)時(shí)的Linux 則作為實(shí)時(shí)內(nèi)核的一項(xiàng)優(yōu)先級最低的任務(wù)來托管所有的非實(shí)時(shí)任務(wù),采用Linux3.8.13和Xenomai2.6.3,下面介紹怎么搭建Zedboard主站。
3.1Vivado 與 Xilinx SDK 工具安裝
我們主要用到SDK里的交叉編譯器,以及用它來生成FSBL與BOOT.BIN文件。
我分別在ubuntu和windows上都安裝了xilinx的SDK。其中windows上的xilinx SDK不需要單獨(dú)安裝,等在安裝Vivado的時(shí)候勾選下就可以了。 Ubuntu上的xilinx SDK安裝文件網(wǎng)址是
?
3.2Vivado 的下載安裝
Vivado主要是用來配置xilinx的FPGA外設(shè)的,后面生成bitstream文件時(shí)需要用,以及我們更改SOC里的外設(shè)引腳配置以及配置管腳等等時(shí)是需要用到。Vivado的下載地址
?
?
3.3給 Linux 內(nèi)核代碼打 Xenomai 實(shí)時(shí)補(bǔ)丁
zedboard上運(yùn)行的linux內(nèi)核可不是普通的linux內(nèi)核源碼,而是打了xenomai補(bǔ)丁的實(shí)時(shí)嵌入式操作系統(tǒng)。需要先給linux源碼打上xenomai補(bǔ)丁后方可編譯
Linux源碼下載: https://github.com/Xilinx/linux-xlnx.git
Xenomai安裝包下載:
給linux內(nèi)核代碼打xenomai實(shí)時(shí)補(bǔ)丁,可以參看xilinx的官方文檔《Xenomai for Zynq》: +for+Zynq
3.4Linux 內(nèi)核編譯
當(dāng)xenomai補(bǔ)丁打好后,即可開始編譯linux內(nèi)核
?
圖 6:Uboot編譯
具體的ubuntu編譯方法和編譯kernel大同小異,可以參考這篇文章: +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時(shí)要用它
3.7文件系統(tǒng)編譯
現(xiàn)在直接用的xilinx和KPA官方提供給我的文件系統(tǒng)“uramdisk.image.gz”。
參考文檔: +and+Modify+a+Rootfs
從xilinx網(wǎng)上下載arm_ramdisk.image.gz文件。下載地址如下。
這個(gè)文件是xilinx提供給我們做模板用的。可以把它解壓開,然后在它基礎(chǔ)上改改,再打包,就能用的。
3.8設(shè)備樹編譯
設(shè)備樹的編譯方法參考文檔, +Device+Tree+Blob 。
3.9KPA NIC 模塊
直接用的KPA的“kpa_mac.ko文件”。
KPA這部分不用去動,現(xiàn)在也不用改,這部分文件放在我們SD卡的第二分區(qū)了即可。然后設(shè)備樹上加上mac的配置部分即可。
3.10Vivado 生成 bitstream 文件
基于kpa給的Vivado工程“zedboard_redundancy”和兩個(gè)ipcore,來產(chǎn)生bitstream文件。
?
圖 7:生成bitstream文件
3.11Xilinx SDK 生成 FSBL
?
圖 8:生成的FSBL
3.12制作 BOOT.BIN 文件
利用xilinx SDK,看到,BOOT.BIN文件其實(shí)是將U-boot,Vivado生成的Bitstream文件,SDK生成的FSBL文件以及SDK自動生成的的boot.bif四合一打包生成的一個(gè)啟動文件。BOOT.BIN下一節(jié)會放到SD卡中,作用主要是初始化zedboard硬件和加載linux內(nèi)核。
?
圖 9:生成BOOT.BIN文件
3.13燒錄 SD 卡
在ubuntu環(huán)境下,將一張4G的SD卡格式化為兩分區(qū),第一分區(qū)1.1G為FAT格式;第二分區(qū)為2.9G為Ext4格式。
?
圖 10:SD卡分區(qū)
然后將前面準(zhǔn)備的BOOT.BIN文件,設(shè)備樹文件devicetree.dtb,文件系統(tǒng)文件uramdisk.image.gz文件,linux內(nèi)核鏡像uImage這四個(gè)文件拷貝到第一分區(qū)。不難看出第一分區(qū)全部是和操作系統(tǒng)相關(guān)的文件。第二分區(qū)里則是三個(gè)文件,全由KPA提供Master: KPA的EtherCat主站相關(guān)的所有文件;
?
圖 11:SD卡中Master內(nèi)容
Xenomai:xenomai依賴的一些庫文件,這個(gè)可以官網(wǎng)下載xenomai對應(yīng)的版本如2.6.3。然后在根目錄下make后會生成這個(gè)庫文件。
Mod:該文件夾下則主要是kpa_mac.ko,也就是KPA提供的那個(gè)網(wǎng)卡驅(qū)動。
如下圖:
?
圖 12:SD卡中Xenomai文件
到此SD卡也做成了。SD卡插到板子上既可以運(yùn)行了。
4、EtherCAT 主站程序測試
實(shí)驗(yàn)平臺包括三個(gè)組成部分:待測試的EtherCAT系統(tǒng)、實(shí)時(shí)數(shù)據(jù)獲取單元和離線的實(shí)驗(yàn)數(shù)據(jù)分析單元,如下圖所示。主站為構(gòu)建的嵌入式實(shí)時(shí)EtherCAT 主站,從站為兩套松下交流伺服驅(qū)動器MADHT系列。測試的內(nèi)容為在周期時(shí)間為250us下,帶DC功能和不帶DC功能的測試數(shù)據(jù)對比。
4.1實(shí)時(shí)數(shù)據(jù)獲取單元
實(shí)時(shí)數(shù)據(jù)獲取單元采用的是虹科的網(wǎng)絡(luò)分析儀Profishark 100M或Profishark 1G,兩個(gè)網(wǎng)口為標(biāo)準(zhǔn)的100M/1Gbps 以太網(wǎng)接口。支持單獨(dú)捕獲上行和下行數(shù)據(jù),并且可以將捕獲的數(shù)據(jù)包供Wireshark /Profishark Manager等軟件進(jìn)行數(shù)據(jù)分析。此外,它捕獲數(shù)據(jù)包時(shí)間戳的分辨率可以達(dá)到5ns,保證了實(shí)驗(yàn)數(shù)據(jù)的精確性,如下圖:
?
圖 13:實(shí)時(shí)數(shù)據(jù)單元示意圖
4.2離線數(shù)據(jù)分析單元
離線數(shù)據(jù)分析單元是由PC 機(jī)運(yùn)行開源軟件Wireshark 實(shí)現(xiàn)的,在實(shí)驗(yàn)的最后,所有捕獲的的實(shí)驗(yàn)數(shù)據(jù)都會交給離線數(shù)據(jù)單元進(jìn)行處理和分析。
?
圖 14:EtherCAT網(wǎng)絡(luò)實(shí)驗(yàn)圖
利用wireshark分別抓取數(shù)據(jù)(帶DC)
?
圖 15:基于Wireshark的EtherCAT數(shù)據(jù)幀(含DC)
利用wireshark分別抓取數(shù)據(jù)(不帶DC):
?
圖 16:基于Wireshark的EtherCAT數(shù)據(jù)幀(含DC)
?
?
表 1:EtherCAT數(shù)據(jù)測試結(jié)果 單位:us(統(tǒng)計(jì)至個(gè)位)
總結(jié):
可以看出,基于Zynq平臺的主站設(shè)計(jì)方案circle time完全可以做到250us級別,帶兩軸從站的情況下加DC功能,基本沒有抖動存在,但是不帶DC的話,周期時(shí)間不穩(wěn)定,抖動也相對較大。
5、EtherCAT 測試程序分析
KPA EtherCAT主站協(xié)議棧提供了多種功能的程序模板如下,包括ETG協(xié)議規(guī)定的幾種模式,寫應(yīng)用時(shí),可以在這些代碼模板上進(jìn)行編程測試,本文作者基于01異步模式進(jìn)行測試程序的分析。
?
圖 17:KPA開發(fā)包的功能模塊(部分)
5.1利用 KPA Studio 掃描網(wǎng)絡(luò)
先掃描從站信息,利用KPA Studio導(dǎo)出從從站信息的頭文件,定義了從站地址,數(shù)據(jù)長度。
?
圖 18:KPA Studio掃描從站頭文件
5.2Main 函數(shù)重要部分介紹
(1)main函數(shù)里面,首先主站初始化。包括獲取網(wǎng)卡,指定網(wǎng)絡(luò)配置文件路徑,設(shè)置周期時(shí)間,等操作
圖 19:Main函數(shù)中的主站初始化部分
(2)加載PRC服務(wù)功能,方便利用KPA Studio進(jìn)行調(diào)試
?
圖 20:加載RPC遠(yuǎn)程調(diào)試功能
(3)切換主站狀態(tài)
?
圖 21:切換主站狀態(tài)
(4)設(shè)置控制字,進(jìn)行PI數(shù)據(jù)的讀寫,從而控制從站
?
?
圖 22:讀寫PI
其中數(shù)據(jù)的讀取都要遵循先調(diào)用EcatStartReadInputs/EcatDoneWriteOutputs 函數(shù),獲取輸入輸出PI,中間再調(diào)用EcatSetVariable進(jìn)行數(shù)據(jù)的交互,最后再調(diào)用EcatDoneWriteOutputs獲取數(shù)據(jù)讀寫的應(yīng)答,結(jié)束讀寫。
6、主站開發(fā)包申請?jiān)囉?/strong>
從KPA官網(wǎng)https://koenig-pa.de/進(jìn)入,點(diǎn)擊“Customer Portal”進(jìn)入注冊頁面。注冊后可以登錄并點(diǎn)擊“Quote”,“Request for Quotation”,填寫完公司信息后點(diǎn)擊“Add Product”,這時(shí)會出來很多不同的硬件平臺和操作系統(tǒng)列表,選擇帶MDK Trail字樣且價(jià)格為0的產(chǎn)品。
注意:注冊請用真實(shí)的公司名稱、地址和聯(lián)系方式,注冊信息也也發(fā)一份給本土供應(yīng)商,中國區(qū)內(nèi)發(fā)給廣州虹科電子科技有限公司:cqy@hkaco.com和support@hkaco.com。KPA一般在五個(gè)工作日內(nèi)與本土供應(yīng)商核對并完成審核,然后注冊用戶可以免費(fèi)獲取試用的開發(fā)包和KPA Studio調(diào)試軟件(3個(gè)月有效期)。
評論