技術背景
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
XC7K160T-3FF676I
XC7K160T-L2FF676I
XC7K160T-3FFG676I
XC7K160T-1FBG484C
XC7K160T-L2FF676E
XC7K160T-2FBG484I
XQ4VLX100-10FF1148M
XQ4VLX100-10FF1148I