馬春敏,康存鋒,黃旭東,鄭學(xué)科,楊建武,費(fèi)仁元
(北京工業(yè)大學(xué) 機(jī)械工程與應(yīng)用電子技術(shù)學(xué)院,北京 100124)
基于Linux的EtherCAT主站的研究
馬春敏,康存鋒,黃旭東,鄭學(xué)科,楊建武,費(fèi)仁元
(北京工業(yè)大學(xué) 機(jī)械工程與應(yīng)用電子技術(shù)學(xué)院,北京 100124)
隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,當(dāng)今的工業(yè)現(xiàn)場總線技術(shù)均逐漸過渡到實(shí)時(shí)工業(yè)以太網(wǎng)階段。如西門子公司的PROFIBUS到PROFINET;博世力士樂公司的SERCOS[1]到SERCOSIII等。同時(shí)一些新興的工業(yè)實(shí)時(shí)以太網(wǎng)技術(shù)也以其全新的起點(diǎn)和優(yōu)越的性能脫穎而出。其中EtherCAT[2](Ethernet for Control Automation Technology)技術(shù)(也稱為以太網(wǎng)現(xiàn)場總線),便是其中較為突出的一個(gè)?,F(xiàn)場總線技術(shù)的實(shí)現(xiàn)主要依賴于主站與從站兩大部分,其中尤以主站技術(shù)最為復(fù)雜,同時(shí)也是控制系統(tǒng)中通訊部分的核心。從歷史上看現(xiàn)場總線主站技術(shù)的演變經(jīng)歷了主動卡(如SERCOS一代卡)、被動卡(如SoftSERCANS卡[3])、軟主站(不需要專門的硬件卡,如可支持EtherCAT總線的TwinCAT和Codesys軟件)。這使得運(yùn)動控制器的開發(fā)對特殊硬件板卡的需求逐漸降低,直至徹底拋開,從而實(shí)現(xiàn)其開放性和靈活性。研究Linux下的EtherCAT主站系統(tǒng)在研究軟主站的基礎(chǔ)上又有兩個(gè)意義:一是Linux操作系統(tǒng)為開源系統(tǒng),在其基礎(chǔ)上的任何軟件方面的研究都可直至底層,為自主創(chuàng)新提供可能。二是Linux操作系統(tǒng)很容易移植到ARM處理器平臺上,而ARM架構(gòu)相對X86硬件系統(tǒng)具有諸多靈活性和開發(fā)性,方便國內(nèi)廠商開發(fā)出基于自身硬件平臺的高性能控制器。因而此項(xiàng)研究即有助于開發(fā)基于軟主站的開放式運(yùn)動控制器,同時(shí)可為研制我國自主的工業(yè)實(shí)時(shí)以太網(wǎng)標(biāo)準(zhǔn)提供借鑒,具有較強(qiáng)的實(shí)際意義。
Linux系統(tǒng)總體分為內(nèi)核層與應(yīng)用層。其中內(nèi)核層運(yùn)行系統(tǒng)的核心調(diào)度與驅(qū)動程序,內(nèi)核層中的程序稱為模塊,實(shí)時(shí)性較高。應(yīng)用層運(yùn)行各種桌面程序和應(yīng)用程序,實(shí)時(shí)性差。Linux系統(tǒng)下EtherCAT軟主站系統(tǒng)結(jié)構(gòu)如圖1所示。
1)網(wǎng)絡(luò)設(shè)備部分。EtherCAT軟主站不使用特殊硬件,而是普通的網(wǎng)絡(luò)設(shè)備(如PCI網(wǎng)卡)。內(nèi)核層中含有網(wǎng)絡(luò)設(shè)備模塊,但為了實(shí)現(xiàn)EtherCAT協(xié)議,需要對普通網(wǎng)絡(luò)設(shè)備驅(qū)動進(jìn)行修改。
2)主站模塊與應(yīng)用程序。為了保證實(shí)時(shí)性的要求,EtherCAT主站模塊與應(yīng)用程序模塊均在內(nèi)核層。其中EtherCAT主站模塊實(shí)現(xiàn)全部的協(xié)議解析、任務(wù)調(diào)度并為網(wǎng)絡(luò)設(shè)備與應(yīng)用程序提供函數(shù)接口。應(yīng)用程序模塊最終實(shí)現(xiàn)對各種自動化系統(tǒng)的控制,由用戶根據(jù)具體的控制對象和控制要求進(jìn)行編寫。
3)EtherCAT工具。該程序提供了各種可以在Linux用戶層運(yùn)行的命令。可以直接實(shí)現(xiàn)對從站的訪問和設(shè)置。如:設(shè)置從站地址、顯示總線配置、顯示PDO數(shù)據(jù)、讀寫SDO參數(shù)等[2]。由于用戶層無法直接訪問內(nèi)核層的數(shù)據(jù),因此需要構(gòu)造Linux字符設(shè)備。通過對字符設(shè)備的訪問間接實(shí)現(xiàn)與EtherCAT主站模塊的通訊。
圖3 空閑階段與操作階段程序流程
圖1 主站系統(tǒng)結(jié)構(gòu)
數(shù)據(jù)幀的傳輸是EtherCAT主站模塊的重要功能,是實(shí)現(xiàn)EtherCAT協(xié)議傳輸?shù)幕A(chǔ)。EtherCAT主站的工作主要分為三個(gè)階段如圖2所示。
圖2 主站線程工作狀態(tài)
當(dāng)EtherCAT主站模塊被加載到內(nèi)核后,狀態(tài)處于孤兒階段,等待網(wǎng)絡(luò)設(shè)備模塊的加載與正常啟動。
當(dāng)存在可用的網(wǎng)絡(luò)設(shè)備后,主站進(jìn)入空閑階段,并啟動線程發(fā)送廣播數(shù)據(jù)幀,對從站進(jìn)行循環(huán)掃描。當(dāng)掃描到可用從站,便對其進(jìn)行配置。同時(shí)隨時(shí)以掃描的方式監(jiān)控總線上的變化。實(shí)現(xiàn)方法如圖3(a)所示。主要過程分為接收數(shù)據(jù)幀、執(zhí)行當(dāng)前狀態(tài)機(jī)(詳見數(shù)據(jù)通訊管理的實(shí)現(xiàn)一節(jié))、將數(shù)據(jù)幀添加至鏈表、發(fā)送數(shù)據(jù)幀鏈表中的全部數(shù)據(jù)。
當(dāng)有應(yīng)用程序模塊運(yùn)行時(shí),主站進(jìn)入操作階段。如圖3(c)所示,應(yīng)用程序通過調(diào)用ecrt_master_activate()函數(shù),停止主站模塊中運(yùn)行的“空閑線程”,啟動“操作線程”。該線程只調(diào)用了執(zhí)行當(dāng)前狀態(tài)機(jī)的函數(shù),如圖3(b)所示,以便監(jiān)控總線中的變化,而將原本主站模塊執(zhí)行的收發(fā)數(shù)據(jù)幀的函數(shù)放到了應(yīng)用程序中,為實(shí)現(xiàn)實(shí)時(shí)控制提供條件。
主站實(shí)現(xiàn)通訊管理的核心是有限狀態(tài)機(jī)(FMS)理論[5]。有限狀態(tài)機(jī)又稱為有限狀態(tài)自動機(jī)或簡稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型。這一數(shù)學(xué)模型具有輸入與輸出,輸出不僅依賴于輸入而且依賴于輸入的歷史情況。作為承擔(dān)了主要數(shù)據(jù)管理工作的主站的工作內(nèi)容,取決于用戶的輸入以及與從站的通訊狀態(tài),亦即通過分析用戶的輸入與接收到的來自從站的數(shù)據(jù)報(bào)文后再調(diào)用相應(yīng)的函數(shù)。主站程序中包含的狀態(tài)機(jī)有:主站狀態(tài)機(jī)、從站掃描狀態(tài)機(jī)、從站配置狀態(tài)機(jī)、狀態(tài)切換狀態(tài)機(jī)(管理從站應(yīng)用層的狀態(tài)切換)、讀寫SII(從站信息)狀態(tài)機(jī)、讀寫SDO(如COE協(xié)議中的非周期數(shù)據(jù))等。主站狀態(tài)機(jī)(如圖4所示)又是實(shí)現(xiàn)其他狀態(tài)機(jī)功能的基礎(chǔ),它的主要用途是:
1)監(jiān)控總線上設(shè)備的變化。如:當(dāng)有新的從站設(shè)備接入時(shí),便對其進(jìn)行掃描和配置。
圖4 主站狀態(tài)機(jī)
2)監(jiān)控從站應(yīng)用層狀態(tài)。若從站狀態(tài)與要求不符便對其進(jìn)行重新配置。
3)接收用戶層的指令,進(jìn)行狀態(tài)的切換。
4)處理對SII和SDO等的請求操作。
應(yīng)用程序是用戶針對自身控制系統(tǒng)的控制要求編寫的控制程序模塊,運(yùn)行于內(nèi)核層。包括對主站和從站的配置以及周期性實(shí)時(shí)運(yùn)行的任務(wù)。在實(shí)時(shí)任務(wù)程序中實(shí)現(xiàn)主從站間通訊以及各種數(shù)控算法。
如圖5所示,應(yīng)用程序的module_init()函數(shù)中首先要對主、從站的通訊進(jìn)行配置。其中的幾個(gè)關(guān)鍵技術(shù)與重要概念如下:
4.1.1 數(shù)據(jù)域指針
數(shù)據(jù)域是EtherCAT過程數(shù)據(jù)(PDO)向程序中的數(shù)據(jù)結(jié)構(gòu)的映射,它提供了用戶程序?qū)偩€上各個(gè)從站進(jìn)行數(shù)據(jù)訪問的入口。當(dāng)從站PDO入口注冊成功后,不同從站都將獲得一個(gè)屬于自己的地址偏移量,用戶可通過“數(shù)據(jù)域指針+地址偏移量”的方法對所需PDO進(jìn)行讀寫操作。
4.1.2 從站配置信息
主站對從站的掃描識別由四個(gè)參數(shù)決定:化名(保存在EEPROM中,可由主站修改)、位置(決定于從站在總線中連接的順序)、廠商ID號和產(chǎn)品號。這些信息構(gòu)成從站配置信息。
4.1.3 從站同步管理信息這一信息可從EEPROM中的SII或者廠商提供的設(shè)備描述文件(即xml文件)獲得。以Copley公司的Accelnet伺服驅(qū)動器為例,其設(shè)備描述文件的一部分為:前4行信息表明該設(shè)備擁有4個(gè)同步管理通道。前兩個(gè)為郵箱傳輸方式,用于COE協(xié)議的通訊,負(fù)責(zé)對SDO的傳輸。后兩個(gè)為過程數(shù)據(jù)傳輸方式,負(fù)責(zé)對PDO的傳輸。其中StartAddress參數(shù)為物理起始地址,即該同步管理通道在雙口RAM上的起始地址;ControlByte參數(shù)為控制字,包含了該通道的傳輸箱傳輸方式)。通過SDO可實(shí)現(xiàn)參數(shù)的設(shè)置與讀取。為了能夠在周期任務(wù)程序中直接對某個(gè)參數(shù)進(jìn)行操作,應(yīng)用程序需要在配置階段創(chuàng)建一個(gè)針對該參數(shù)的SDO請求,并設(shè)置請求超時(shí)的時(shí)間。
圖5 應(yīng)用程序?qū)χ鲝恼镜呐渲昧鞒?/p>
4.2.1 實(shí)時(shí)性的實(shí)現(xiàn)
應(yīng)用程序需要一個(gè)高實(shí)時(shí)性的定時(shí)器,定時(shí)調(diào)用周期任務(wù)。在不采用RTLinux和RTAI等實(shí)時(shí)內(nèi)核的情況下,為了保證高的實(shí)時(shí)性可以采用內(nèi)核定時(shí)器[6]。其使用方法如下:
1)在應(yīng)用程序模塊初始化階段初始化內(nèi)核定時(shí)器
圖6 從站同步管理信息
static struct timer_list timer;//定義一個(gè)定時(shí)器列表方式、傳輸方向等信息。之后的三個(gè)參數(shù)規(guī)定了該通道的大小。第5行起開始定義RxPdo,與CANopen協(xié)議類似,EtherCAT的PDO也通過索引號和子索引號進(jìn)行識別。將x1600——x1607定義為RxPdo(接收PDO),在這8個(gè)接收PDO中安排被主站接收的參數(shù)。將x1A00——x1A07定義為TxPdo(發(fā)送PDO),在這8個(gè)發(fā)送PDO中安排向主站發(fā)送的參數(shù)。由于該款A(yù)ccelnet伺服驅(qū)動器支持COE,因此其原有的CAN總線中使用的參數(shù)可保持不變。圖6表明將控制字x6040的0號子索引,長度為2個(gè)字節(jié),映射到RxPdo0中。應(yīng)用程序?qū)⒁陨贤焦芾硇畔懭霐?shù)據(jù)結(jié)構(gòu)ec_sync_info_t中,作為ecrt_slave_config_pdos()的參數(shù),通過調(diào)用該函數(shù)最終完成完整的PDO配置。
4.1.4 SDO配置
SDO是COE協(xié)議的非周期數(shù)據(jù)傳輸方式(郵
init_timer(&timer);//初始化一個(gè)內(nèi)核定時(shí)器節(jié)點(diǎn)
timer.function = cyclic_task;//掛載周期性函數(shù)
timer.expires = jiffies + 10;//設(shè)置定時(shí)中斷的時(shí)間
add_timer(&timer);//激活內(nèi)核定時(shí)器節(jié)點(diǎn)
2)在周期任務(wù)函數(shù)cyclic_task中重啟定時(shí)器
timer.expires += HZ / 1000;//設(shè)置定時(shí)中斷的時(shí)間
add_timer(&timer);//激活內(nèi)核定時(shí)器節(jié)點(diǎn)
其中jiffies為系統(tǒng)自啟動到當(dāng)前時(shí)刻為止系統(tǒng)時(shí)鐘產(chǎn)生的滴答數(shù)。timer.expires為定時(shí)中斷啟動的預(yù)期時(shí)刻,以滴答數(shù)為單位。宏定義HZ記錄了系統(tǒng)時(shí)鐘所要求的可編程定時(shí)器產(chǎn)生滴答數(shù)的頻率。其值可在內(nèi)核配置選項(xiàng)CONFIG_HZ選配。最大值則決定于硬件特性。假設(shè)HZ為1000則(2)中定時(shí)中斷的時(shí)間為1毫秒。由于cyclic_task函數(shù)被掛載在timer.function上,因此每到該內(nèi)核定時(shí)器節(jié)點(diǎn)達(dá)到預(yù)設(shè)定的中斷時(shí)間便進(jìn)行中斷調(diào)用,而調(diào)用cyclic_task函數(shù)中又再次預(yù)設(shè)定了timer的中斷時(shí)間,故而形成周期為1毫秒的周期性任務(wù)。
4.2.2 周期任務(wù)中的工作
如圖3(c)所示,周期任務(wù)用于通過主站實(shí)時(shí)發(fā)送和獲取從站的信息,并對信息進(jìn)行實(shí)時(shí)的處理,如邏輯控制中邏輯運(yùn)算和運(yùn)動控制中的各種算法。處理的信息包括過程數(shù)據(jù)對象PDO和郵箱傳輸方式的數(shù)據(jù)對象(如COE中的SDO)。其中PDO通過“數(shù)據(jù)域指針+地址偏移量”方式直接讀寫;SDO訪問方法(以讀SDO為例)如下:
圖7 實(shí)驗(yàn)平臺
sdo為通過調(diào)用ecrt_slave_config_create_sdo_request()函數(shù)(如圖5所示)所返回的sdo請求對象。
圖7為研究基于Linux的EtherCAT主站的實(shí)驗(yàn)平臺。IPC(工業(yè)級計(jì)算機(jī))主頻為1.2G,運(yùn)行l(wèi)inux系統(tǒng)為Fedora 8。ARM開發(fā)板采用PAX270,運(yùn)行l(wèi)inux-2.6.9內(nèi)核,交叉編譯器為arm-linuxgcc-3.4.3。EtherCAT從站設(shè)備包括Beckhoff公司出品的EK1100和Copley公司的Accelnet伺服驅(qū)動器。在此平臺的基礎(chǔ)上開發(fā)出了基于ARM的嵌入式運(yùn)動控制器。由于ARM中Linux內(nèi)核版本較低,周期任務(wù)的最快速度目前為10ms。若直接采用IPC進(jìn)行控制,則速度可達(dá)1ms。
[1]陳衛(wèi)福, 楊建武. 開放式數(shù)控系統(tǒng)及SERCOS接口應(yīng)用技術(shù), 1版[M], 北京: 機(jī)械工業(yè)出版社, 2003.
[2]郇極, 劉艷強(qiáng). 工業(yè)以太網(wǎng)現(xiàn)場總線EtherCAT驅(qū)動程序設(shè)計(jì)及應(yīng)用, 1版[M]. 北京: 北京航空航天大學(xué)出版社, 2010.
[3]馬春敏, 李平, 康存鋒, 等. 基于實(shí)時(shí)Linux的SERCOS接口—LIN-SERCANS及應(yīng)用[J]. 現(xiàn)代制造工程, 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內(nèi)核標(biāo)準(zhǔn)教程, 1版[M]. 北京:北京人民郵電出版社, 2008.
[7]周敬瓊, 周鳳星. 基于 ARM 的 Linux 網(wǎng)絡(luò)設(shè)備驅(qū)動程序開發(fā)[J]. 計(jì)算機(jī)工程與設(shè)計(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
實(shí)時(shí)工業(yè)以太網(wǎng)已經(jīng)成為當(dāng)今工業(yè)用現(xiàn)場總線的主流,本文研究了Linux下EtherCAT主站的結(jié)構(gòu),為開發(fā)基于軟主站的開放式運(yùn)動控制器提供了技術(shù)儲備。進(jìn)而為研制我國自己的工業(yè)實(shí)時(shí)以太網(wǎng)標(biāo)準(zhǔn)提供借鑒。
實(shí)時(shí)工業(yè)以太網(wǎng);現(xiàn)場總線;EtherCAT;軟主站
馬春敏(1974-),男,上海人,講師,在讀博士研究生,研究方向?yàn)楣I(yè)自動化、開放式數(shù)控系統(tǒng)。
TP391
A
1009-0134(2011)4(下)-0078-05
10.3969/j.issn.1009-0134.2011.4(下).23
2010-08-10