馬春敏,康存鋒,黃旭東,鄭學科,楊建武,費仁元
(北京工業大學 機械工程與應用電子技術學院,北京 100124)
基于Linux的EtherCAT主站的研究
馬春敏,康存鋒,黃旭東,鄭學科,楊建武,費仁元
(北京工業大學 機械工程與應用電子技術學院,北京 100124)
隨著網絡技術的迅速發展,當今的工業現場總線技術均逐漸過渡到實時工業以太網階段。如西門子公司的PROFIBUS到PROFINET;博世力士樂公司的SERCOS[1]到SERCOSIII等。同時一些新興的工業實時以太網技術也以其全新的起點和優越的性能脫穎而出。其中EtherCAT[2](Ethernet for Control Automation Technology)技術(也稱為以太網現場總線),便是其中較為突出的一個。現場總線技術的實現主要依賴于主站與從站兩大部分,其中尤以主站技術最為復雜,同時也是控制系統中通訊部分的核心。從歷史上看現場總線主站技術的演變經歷了主動卡(如SERCOS一代卡)、被動卡(如SoftSERCANS卡[3])、軟主站(不需要專門的硬件卡,如可支持EtherCAT總線的TwinCAT和Codesys軟件)。這使得運動控制器的開發對特殊硬件板卡的需求逐漸降低,直至徹底拋開,從而實現其開放性和靈活性。研究Linux下的EtherCAT主站系統在研究軟主站的基礎上又有兩個意義:一是Linux操作系統為開源系統,在其基礎上的任何軟件方面的研究都可直至底層,為自主創新提供可能。二是Linux操作系統很容易移植到ARM處理器平臺上,而ARM架構相對X86硬件系統具有諸多靈活性和開發性,方便國內廠商開發出基于自身硬件平臺的高性能控制器。因而此項研究即有助于開發基于軟主站的開放式運動控制器,同時可為研制我國自主的工業實時以太網標準提供借鑒,具有較強的實際意義。
Linux系統總體分為內核層與應用層。其中內核層運行系統的核心調度與驅動程序,內核層中的程序稱為模塊,實時性較高。應用層運行各種桌面程序和應用程序,實時性差。Linux系統下EtherCAT軟主站系統結構如圖1所示。
1)網絡設備部分。EtherCAT軟主站不使用特殊硬件,而是普通的網絡設備(如PCI網卡)。內核層中含有網絡設備模塊,但為了實現EtherCAT協議,需要對普通網絡設備驅動進行修改。
2)主站模塊與應用程序。為了保證實時性的要求,EtherCAT主站模塊與應用程序模塊均在內核層。其中EtherCAT主站模塊實現全部的協議解析、任務調度并為網絡設備與應用程序提供函數接口。應用程序模塊最終實現對各種自動化系統的控制,由用戶根據具體的控制對象和控制要求進行編寫。
3)EtherCAT工具。該程序提供了各種可以在Linux用戶層運行的命令。可以直接實現對從站的訪問和設置。如:設置從站地址、顯示總線配置、顯示PDO數據、讀寫SDO參數等[2]。由于用戶層無法直接訪問內核層的數據,因此需要構造Linux字符設備。通過對字符設備的訪問間接實現與EtherCAT主站模塊的通訊。

圖3 空閑階段與操作階段程序流程

圖1 主站系統結構
數據幀的傳輸是EtherCAT主站模塊的重要功能,是實現EtherCAT協議傳輸的基礎。EtherCAT主站的工作主要分為三個階段如圖2所示。

圖2 主站線程工作狀態
當EtherCAT主站模塊被加載到內核后,狀態處于孤兒階段,等待網絡設備模塊的加載與正常啟動。
當存在可用的網絡設備后,主站進入空閑階段,并啟動線程發送廣播數據幀,對從站進行循環掃描。當掃描到可用從站,便對其進行配置。同時隨時以掃描的方式監控總線上的變化。實現方法如圖3(a)所示。主要過程分為接收數據幀、執行當前狀態機(詳見數據通訊管理的實現一節)、將數據幀添加至鏈表、發送數據幀鏈表中的全部數據。
當有應用程序模塊運行時,主站進入操作階段。如圖3(c)所示,應用程序通過調用ecrt_master_activate()函數,停止主站模塊中運行的“空閑線程”,啟動“操作線程”。該線程只調用了執行當前狀態機的函數,如圖3(b)所示,以便監控總線中的變化,而將原本主站模塊執行的收發數據幀的函數放到了應用程序中,為實現實時控制提供條件。
主站實現通訊管理的核心是有限狀態機(FMS)理論[5]。有限狀態機又稱為有限狀態自動機或簡稱狀態機,是表示有限個狀態以及這些狀態之間的轉移和動作等行為的數學模型。這一數學模型具有輸入與輸出,輸出不僅依賴于輸入而且依賴于輸入的歷史情況。作為承擔了主要數據管理工作的主站的工作內容,取決于用戶的輸入以及與從站的通訊狀態,亦即通過分析用戶的輸入與接收到的來自從站的數據報文后再調用相應的函數。主站程序中包含的狀態機有:主站狀態機、從站掃描狀態機、從站配置狀態機、狀態切換狀態機(管理從站應用層的狀態切換)、讀寫SII(從站信息)狀態機、讀寫SDO(如COE協議中的非周期數據)等。主站狀態機(如圖4所示)又是實現其他狀態機功能的基礎,它的主要用途是:
1)監控總線上設備的變化。如:當有新的從站設備接入時,便對其進行掃描和配置。

圖4 主站狀態機
2)監控從站應用層狀態。若從站狀態與要求不符便對其進行重新配置。
3)接收用戶層的指令,進行狀態的切換。
4)處理對SII和SDO等的請求操作。
應用程序是用戶針對自身控制系統的控制要求編寫的控制程序模塊,運行于內核層。包括對主站和從站的配置以及周期性實時運行的任務。在實時任務程序中實現主從站間通訊以及各種數控算法。
如圖5所示,應用程序的module_init()函數中首先要對主、從站的通訊進行配置。其中的幾個關鍵技術與重要概念如下:
4.1.1 數據域指針
數據域是EtherCAT過程數據(PDO)向程序中的數據結構的映射,它提供了用戶程序對總線上各個從站進行數據訪問的入口。當從站PDO入口注冊成功后,不同從站都將獲得一個屬于自己的地址偏移量,用戶可通過“數據域指針+地址偏移量”的方法對所需PDO進行讀寫操作。
4.1.2 從站配置信息
主站對從站的掃描識別由四個參數決定:化名(保存在EEPROM中,可由主站修改)、位置(決定于從站在總線中連接的順序)、廠商ID號和產品號。這些信息構成從站配置信息。
4.1.3 從站同步管理信息這一信息可從EEPROM中的SII或者廠商提供的設備描述文件(即xml文件)獲得。以Copley公司的Accelnet伺服驅動器為例,其設備描述文件的一部分為:前4行信息表明該設備擁有4個同步管理通道。前兩個為郵箱傳輸方式,用于COE協議的通訊,負責對SDO的傳輸。后兩個為過程數據傳輸方式,負責對PDO的傳輸。其中StartAddress參數為物理起始地址,即該同步管理通道在雙口RAM上的起始地址;ControlByte參數為控制字,包含了該通道的傳輸箱傳輸方式)。通過SDO可實現參數的設置與讀取。為了能夠在周期任務程序中直接對某個參數進行操作,應用程序需要在配置階段創建一個針對該參數的SDO請求,并設置請求超時的時間。

圖5 應用程序對主從站的配置流程
4.2.1 實時性的實現
應用程序需要一個高實時性的定時器,定時調用周期任務。在不采用RTLinux和RTAI等實時內核的情況下,為了保證高的實時性可以采用內核定時器[6]。其使用方法如下:
1)在應用程序模塊初始化階段初始化內核定時器

圖6 從站同步管理信息
static struct timer_list timer;//定義一個定時器列表方式、傳輸方向等信息。之后的三個參數規定了該通道的大小。第5行起開始定義RxPdo,與CANopen協議類似,EtherCAT的PDO也通過索引號和子索引號進行識別。將x1600——x1607定義為RxPdo(接收PDO),在這8個接收PDO中安排被主站接收的參數。將x1A00——x1A07定義為TxPdo(發送PDO),在這8個發送PDO中安排向主站發送的參數。由于該款Accelnet伺服驅動器支持COE,因此其原有的CAN總線中使用的參數可保持不變。圖6表明將控制字x6040的0號子索引,長度為2個字節,映射到RxPdo0中。應用程序將以上同步管理信息寫入數據結構ec_sync_info_t中,作為ecrt_slave_config_pdos()的參數,通過調用該函數最終完成完整的PDO配置。
4.1.4 SDO配置
SDO是COE協議的非周期數據傳輸方式(郵
init_timer(&timer);//初始化一個內核定時器節點
timer.function = cyclic_task;//掛載周期性函數
timer.expires = jiffies + 10;//設置定時中斷的時間
add_timer(&timer);//激活內核定時器節點
2)在周期任務函數cyclic_task中重啟定時器
timer.expires += HZ / 1000;//設置定時中斷的時間
add_timer(&timer);//激活內核定時器節點
其中jiffies為系統自啟動到當前時刻為止系統時鐘產生的滴答數。timer.expires為定時中斷啟動的預期時刻,以滴答數為單位。宏定義HZ記錄了系統時鐘所要求的可編程定時器產生滴答數的頻率。其值可在內核配置選項CONFIG_HZ選配。最大值則決定于硬件特性。假設HZ為1000則(2)中定時中斷的時間為1毫秒。由于cyclic_task函數被掛載在timer.function上,因此每到該內核定時器節點達到預設定的中斷時間便進行中斷調用,而調用cyclic_task函數中又再次預設定了timer的中斷時間,故而形成周期為1毫秒的周期性任務。
4.2.2 周期任務中的工作
如圖3(c)所示,周期任務用于通過主站實時發送和獲取從站的信息,并對信息進行實時的處理,如邏輯控制中邏輯運算和運動控制中的各種算法。處理的信息包括過程數據對象PDO和郵箱傳輸方式的數據對象(如COE中的SDO)。其中PDO通過“數據域指針+地址偏移量”方式直接讀寫;SDO訪問方法(以讀SDO為例)如下:



圖7 實驗平臺
sdo為通過調用ecrt_slave_config_create_sdo_request()函數(如圖5所示)所返回的sdo請求對象。
圖7為研究基于Linux的EtherCAT主站的實驗平臺。IPC(工業級計算機)主頻為1.2G,運行linux系統為Fedora 8。ARM開發板采用PAX270,運行linux-2.6.9內核,交叉編譯器為arm-linuxgcc-3.4.3。EtherCAT從站設備包括Beckhoff公司出品的EK1100和Copley公司的Accelnet伺服驅動器。在此平臺的基礎上開發出了基于ARM的嵌入式運動控制器。由于ARM中Linux內核版本較低,周期任務的最快速度目前為10ms。若直接采用IPC進行控制,則速度可達1ms。
[1]陳衛福, 楊建武. 開放式數控系統及SERCOS接口應用技術, 1版[M], 北京: 機械工業出版社, 2003.
[2]郇極, 劉艷強. 工業以太網現場總線EtherCAT驅動程序設計及應用, 1版[M]. 北京: 北京航空航天大學出版社, 2010.
[3]馬春敏, 李平, 康存鋒, 等. 基于實時Linux的SERCOS接口—LIN-SERCANS及應用[J]. 現代制造工程, 2005,7: 13-15.
[4]IgH EtherCAT Master 1.4.0 Preliminary Documentation,Essen, 2009.
[5]Hopcroft, J. E. / Ullman, J.D.: Introduction to Automata Theory, Languages and Computation. Adison-Wesley,Reading, Mass. 1979.
[6]河秦, 王洪濤. Linux 2.6內核標準教程, 1版[M]. 北京:北京人民郵電出版社, 2008.
[7]周敬瓊, 周鳳星. 基于 ARM 的 Linux 網絡設備驅動程序開發[J]. 計算機工程與設計, 2009, 30(22): 5124-5127.
Research on the EtherCAT master under Linux
MA Chun-min, KANG Cun-feng, HUANG Xu-dong, ZHENG Xue-ke, YANG Jian-wu, FEI Ren-yuan
實時工業以太網已經成為當今工業用現場總線的主流,本文研究了Linux下EtherCAT主站的結構,為開發基于軟主站的開放式運動控制器提供了技術儲備。進而為研制我國自己的工業實時以太網標準提供借鑒。
實時工業以太網;現場總線;EtherCAT;軟主站
馬春敏(1974-),男,上海人,講師,在讀博士研究生,研究方向為工業自動化、開放式數控系統。
TP391
A
1009-0134(2011)4(下)-0078-05
10.3969/j.issn.1009-0134.2011.4(下).23
2010-08-10