摘 要
EtherCAT 是開放的實時以太網通訊協議,由德國倍福自動化有限公司研發。EtherCAT 具有高性能、低成本、容易使用等特點,目前在工業自動化領域有著廣泛的應用。Zynq-7000 是賽靈思公司(Xilinx)推出的行業第一個全可編程 SoC 產品, 它將雙核 ARM Cortex-A9 處理器,低功耗可編程邏輯以及常用的外設緊密集成在一起。ZedBoard 是基于 XC7Z020 器件的低成本開發板,此板可以運行基于 Linux,Android,WinCE 或其他嵌入式 OS/ RTOS 的設計。
KPA EtherCAT 主站是一套質量穩定、知名度和性價比較高的 EtherCAT 協議棧,有較大參考價值。本文將介紹 KPA EtherCAT 主站在 Zynq 平臺的移植與測試。
目錄
第一節EtherCAT 簡介
第二節KPA EtherCAT 軟件包簡介和使用
第三節KPA EtherCAT 主站簡介和移植
第四節EtherCAT 主站程序測試
第五節EtherCAT 測試程序分析
第六節主站開發包申請試用
1EtherCAT 簡介
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 數據傳輸
2EtherCAT 主從站軟硬件簡介
2.1KPAEtherCAT主站軟件介紹
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設置,從端口降低有操作系統引起的數據幀抖動,從而優化了數據在收發時的抖動的問題。
3KPA 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/downloadNav/embedded-design-tools.html
3.2Vivado 的下載安裝
Vivado主要是用來配置xilinx的FPGA外設的,后面生成bitstream文件時需要用,以及我們更改SOC里的外設引腳配置以及配置管腳等等時是需要用到。Vivado的下載地址
http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html
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編譯
3.5下載源代碼
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”。
從xilinx網上下載arm_ramdisk.image.gz文件。
這個文件是xilinx提供給我們做模板用的。可以把它解壓開,然后在它基礎上改改,再打包,就能用的。
3.8設備樹編譯
設備樹的編譯方法參考文檔。
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獲取數據讀寫的應答,結束讀寫。
-
以太網通信
+關注
關注
2文章
52瀏覽量
11035 -
設備
+關注
關注
2文章
4509瀏覽量
70637 -
Vivado
+關注
關注
19文章
812瀏覽量
66523
發布評論請先 登錄
相關推薦
評論