基于Linux的EtherCAT主站的研究
圖5應用程序對主從站的配置流程
圖6從站同步管理信息
4.1.4 SDO配置
SDO是COE協(xié)議的非周期數據傳輸方式(郵箱傳輸方式)。通過(guò)SDO可實(shí)現參數的設置與讀取。為了能夠在周期任務(wù)程序中直接對某個(gè)參數進(jìn)行操作,應用程序需要在配置階段創(chuàng )建一個(gè)針對該參數的SDO請求,并設置請求超時(shí)的時(shí)間。
4.2周期任務(wù)的實(shí)現
4.2.1實(shí)時(shí)性的實(shí)現
應用程序需要一個(gè)高實(shí)時(shí)性的定時(shí)器,定時(shí)調用周期任務(wù)。在不采用RTLinux和RTAI等實(shí)時(shí)內核的情況下,為了保證高的實(shí)時(shí)性可以采用內核定時(shí)器。其使用方法如下:
1)在應用程序模塊初始化階段初始化內核定時(shí)器
static struct timer_list timer)//定義一個(gè)定時(shí)器列表
init_fimer(&timer);//初始化一個(gè)內核定時(shí)器節點(diǎn)
timer.function=cyclic_task;/掛載周期性函數
timer.expires=jiffies+10;//設置定時(shí)中斷的時(shí)間
add timer(&timer);//激活內核定時(shí)器節點(diǎn)
2)在周期任務(wù)函數cyclic_task中重啟定時(shí)器
timer.expires+=HZ,1000;//設置定時(shí)中斷的時(shí)間
add_timer(&timer);//激活內核定時(shí)器節點(diǎn)
其中jiffies為系統自啟動(dòng)到當前時(shí)刻為止系統時(shí)鐘產(chǎn)生的滴答數。timer.expires為定時(shí)中斷啟動(dòng)的預期時(shí)刻,以滴答數為單位。宏定義HZ記錄了系統時(shí)鐘所要求的可編程定時(shí)器產(chǎn)生滴答數的頻率。其值可在內核配置選項CONFIG_HZ選配。最大值則決定于硬件特性。假設HZ為1000則(2)中定時(shí)中斷的時(shí)間為1毫秒。由于cyclic_task函數被掛載在timer.function上,因此每到該內核定時(shí)器節點(diǎn)達到預設定的中斷時(shí)間便進(jìn)行中斷調用,而調用cyclic_task函數中又再次預設定了timer的中斷時(shí)間,故而形成周期為1毫秒的周期性任務(wù)。
4.2.2周期任務(wù)中的工作
如圖3(C)所示,周期任務(wù)用于通過(guò)主站實(shí)時(shí)發(fā)送和獲取從站的信息,并對信息進(jìn)行實(shí)時(shí)的處理,如邏輯控制中邏輯運算和運動(dòng)控制中的各種算法。處理的信息包括過(guò)程數據對象PDO和郵箱傳輸方式的數據對象(如COE中的SDO)。其中PDO通過(guò)“數據域指針+地址偏移量”方式直接讀寫(xiě);SDO訪(fǎng)問(wèn)方法(以讀SDO為例)如下:
5實(shí)驗與結論
圖7為研究基于Linux的EtherCAT主站的實(shí)驗平臺。IPC(工業(yè)級計算機)主頻為1.2G,運行linux系統為Fedora 8。ARM開(kāi)發(fā)板采用PAX270,運行linux-2.6.9內核,交叉編譯器為arrn—linux—gcc-3.4.3。EtherCAT從站設備包括Beckhoff公司出品的EK1100和Copley公司的Accelnet伺服驅動(dòng)器。在此平臺的基礎上開(kāi)發(fā)出了基于A(yíng)RM的嵌入式運動(dòng)控制器。由于A(yíng)RM中Linux內核版本較低,周期任務(wù)的最快速度目前為10ms。若直接采用IPC進(jìn)行控制,則速度可達1ms。
評論