1. 程式人生 > >SylixOS上EtherCAT實現

SylixOS上EtherCAT實現

sylixos 實時操作系統 實時以太網

1 EtherCAT開源協議棧介紹

目前常見開源的主站代碼為RT-LAB開發的SOEM(Simple OpenSource EtherCAT Master)和EtherLab的the IgH EtherCAT® Master,SylixOS對兩者都支持。其中IgH作為常用的EtherCAT開源協議棧,SylixOS已移植支持。

2 SylixOS-IgH使用框架

SylixOS-IgH的使用盡可能保留了Linux下IgH的使用方式,其中延續了命令行工具的功能,而在應用程序開發方面,借助SylixOS集成開發套件的優勢,用戶可以更方便編輯、調試基於SylixOS-IgH的應用程序。

SylixOS-IgH主要分為IgH主站協議棧、網絡設備驅動、IgH用戶層接口庫以及用戶應用程序。具體介紹如下所述:

2.1 IgH主站協議棧

IgH主站協議棧源代碼經編譯後是一具體的ec_master.ko內核模塊,EtherCAT功能集中實現在該模塊中,另外該模塊註冊之後會在/dev路徑下創建一個EtherCAT字符設備,如圖 21所示。

技術分享

圖21 /dev路徑下的EtherCAT0主站

用戶程序操作EtherCAT主站,會通過用戶層接口函數最終調用I/O系統的open,ioctl函數完成EtherCAT協議棧的執行。

2.2 網絡設備驅動

針對SylixOS-IgH的網絡設備驅動源代碼經編譯後是一具體的內核模塊,其中通用網卡驅動模塊命名為generic.ko,實時網卡驅動會根據使用網卡型號針對命名,如e1000e型號的網卡驅動模塊為ec_e1000e.ko。網絡設備驅動模塊應該在主站模塊註冊之後再進行註冊,因為主站模塊註冊後為孤立狀態,會等待網路設備連入,網絡設備驅動模塊註冊後,就有一個真正的物理網絡接口負責收發EtherCAT數據包。其中所有內核模塊均部署在/lib/modules路徑下,如圖 22所示。

技術分享

圖22 EtherCAT相關內核模塊

2.2.2 通用網卡驅動

通用網卡驅動的實現是基於SylixOS已有LwIP協議完成EtherCAT數據包的收發工作,其實現原理如圖 23所示。

技術分享

圖23 通用網卡驅動實現基本原理

2.2.2 實時網卡驅動

在真實應用場景中,EtherCAT軟件主站都會搭配實時操作系統和實時網卡驅動,原因在於影響實時性的關鍵因素是操作系統和網卡驅動,如圖 24所示。

技術分享

圖24 影響實時性關鍵因素

實時操作系統需要將過程數據準時送出,其實時性主要體現在周期性準時調用EtherCAT主站協議棧的發送函數,而網卡驅動也需要進行實時性優化,使其繞過LwIP協議棧中安全性檢查、路由、出入隊列、分片和重組等相對EtherCAT來說非必要的網絡傳輸功能,以此來保證EtherCAT數據包“準時出發,路上不能耽誤”。

2.3 IgH用戶層接口

IgH用戶層接口源代碼編譯後是一具體的動態庫,IgH源代碼把對EtherCAT主站字符設備的“ioctl”操作全部封裝成用戶層接口函數,這樣用戶不需要面對IgH協議棧底層實現,只需要了解IgH用戶層接口函數的意義和使用方式即可。

2.4 IgH用戶應用程序

這裏要提到,SylixOS-IgH主站三種狀態,如圖 25所示。

技術分享

圖25 IgH主站狀態和轉化

主站模塊註冊之後,主站處於孤立狀態;網絡設備驅動模塊註冊之後,主站處於空閑狀態;用戶應用程序執行時,會先進行主站請求操作,接著配置從站並建立用戶層過程數據和協議棧數據緩沖區的映射關系,最後進行激活主站的操作,主站處於運行狀態。主站進入運行態之後,就可以進行周期性過程數據收發的行為了。

參考IgH源代碼/examples/user/main.c中的程序執行流程,可以了解到使用IgH的主要接口,如圖 26所示。

技術分享

圖26 用戶應用程序流程

3 SylixOS使用步驟

SylixOS暫時不支持內核模塊註冊傳入參數機制,因此用戶如需使用SylixOS-IgH,可提前選擇作為EtherCAT數據收發接口的網絡設備,翼輝信息會根據用戶硬件平臺和網絡設備對應MAC地址提供適配的主站內核模塊。

1. 用戶收到SylixOS-IgH_USER工程壓縮包,如圖 31所示。

技術分享

圖31 SylixOS-IgH_USER工程壓縮包

2. 用戶將SylixOS-IgH_USER工程壓縮包解壓後導入RealEvo-IDE集成開發環境,在工程屬性中選擇依賴的BASE工程,如圖 32所示。

技術分享

圖32 工程屬性配置

3. 選擇工程文件上傳的目標設備,如圖 33所示。

技術分享

圖33 選擇目標設備IP地址

4. 工程屬性配置完成後,編譯工程並部署到目標設備,如圖 34所示。

技術分享

圖34 部署工程到目標設備

5. 主從站硬件設備自行連接上電。遠程登錄目標設備,註冊IgH主站內核模塊ec_master.ko,然後使用命令行工具查看主站狀態,如圖 35所示。

技術分享

圖35 註冊主站模塊並查看主站狀態

6. 接著再註冊網絡設備驅動內核模塊generic.ko,然後使用命令行工具查看主站狀態,如圖 36所示。

技術分享


圖36 註冊網絡設備驅動模塊並查看主站狀態

還可以通過“ethercatslaves”命令查看識別到的從站類型,如圖 37所示。

技術分享

圖37 查看識別從站狀態

7. 執行IgH測試例程,該例程會激活主站並發送過程數據將數字量I/O模塊的8位輸出LED指示燈1s閃爍一次,如圖 38所示。

技術分享

圖38 激活主站並發送過程數據

至此,SylixOS上使用EtherCAT開源協議棧IgH的基本流程已描述完畢,另外還有一些點需要註意:


  • IgH協議棧使用時需要提前預知從站設備的拓撲結構,應用程序需要根據從站的拓撲結構提前配置好各個從站的位置信息,SDO/PDO信息,在主站激活後,會將提前預知的配置信息和實際讀取從站寄存器獲取的信息進行對比,只有匹配後從站才能進入OP狀態;

  • SylixOS支持內核模塊註冊傳入參數機制之後,用戶可自行根據選定的EtherCAT報文網口修改網路配置文件;

  • EtherCAT開源協議棧IgH原生只支持Linux操作系統,SylixOS移植支持會盡可能保留用戶層相同使用習慣,而IgH開源社區提供的資料並沒有完全介紹用戶層接口的使用和命令行工具的使用,暫時SylixOS-IgH也僅僅提供基礎使用說明,其余功能的使用說明會在後續完善。


SylixOS上EtherCAT實現