0 前言
在數(shù)控自動控制領(lǐng)域中,所謂運動控制就是對機床機械裝置運動部件的位置、速度、加速度等參數(shù)進行宴時的控制管理,使其按照預(yù)期的運動軌跡和規(guī)定的運動參數(shù)進行運動。由于工業(yè)控制計算機IPC(Industrial Personal Computer)強大而完善的功能,基于Pc標(biāo)準(zhǔn)總線的運動控制器已經(jīng)在數(shù)控系統(tǒng)控制領(lǐng)域得到了廣泛的應(yīng)用。但是?;赑C標(biāo)準(zhǔn)總線的運動控制器由于在硬件設(shè)計上采用板卡設(shè)計,這種結(jié)構(gòu)的運動控制器不宜長期工作在環(huán)境惡劣的工業(yè)現(xiàn)場(有振動、粉塵、油污等)。因此近年來,開放式運動控制器成為數(shù)控機床工業(yè)控制領(lǐng)域研究的熱點。
Linux是一個遵循POSIX(Portable Operating SystemInterface)標(biāo)準(zhǔn)的多用戶多任務(wù)且具有先進的網(wǎng)絡(luò)特性開源操作系統(tǒng),可以方便的進行自主知識產(chǎn)權(quán)的軟件開發(fā)。但Linux不是一個“硬”實時操作系統(tǒng),其內(nèi)核為非搶占式的(no-preemptive),實時任務(wù)不能夠得到保證,而運動控制器本身是綜合性很強的技術(shù),具有明顯的實時控制、實時交互和實時監(jiān)測特性。本文研究了RTAI(Real-time Application Interface)的實現(xiàn)原理和基于Mpe5200實時嵌入式Linux運動控制器的架構(gòu)分析,并實現(xiàn)其在數(shù)控系統(tǒng)中的應(yīng)用。
1 實時Linux的實現(xiàn)
運動控制器作為一個嵌人式系統(tǒng),除了具備一個高性能的嵌入式微處理器,還應(yīng)該擁有一個與處理器配合的嵌入式操作系統(tǒng)。嵌入式操作系統(tǒng)除了具備一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機制、中斷處理和文件功能外,還應(yīng)該具有以下特點:可移植性、可裁減性、實時性、強穩(wěn)定性和良好的圖形支持。Linux是全面多任務(wù)的32位開放式操作系統(tǒng)可以使運動控制器具有可擴充、可移植、可靠性高和兼容性好等優(yōu)點,非常適合作為開放式運動控制器的開發(fā)平臺。
到目前為止,全球在Linux平臺下開發(fā)的具有硬實時功能的系統(tǒng)主要有兩個:R1unIlx和RTAI。RTbn一最早是美國新墨西哥理工學(xué)院的一個研究項目,它是由Victor Yodaiken提出設(shè)計思想,由MichaelBambanov實現(xiàn)的硬實時操作系統(tǒng)。RTAI(Real Timepplication Interface)是由意大利米蘭理工學(xué)院航天工程系發(fā)起開發(fā)的一個遵循GNU的開源項目,RTAI已經(jīng)支持1386,PowerPC,ARM,MIPS和M68k.nommu等處理器。是目前支持處理器最多的linux實時解決方案之一。
RTAI的實現(xiàn)機制與RTLinux非常相似,唯一不同的是RTAI在Linux上定義了一個實時硬件抽象層RTHAL(Real·time Haldwam Abstraction Layer)。并針對RTAI開發(fā)了LXRT(Linux.RT)。讓RTAI可以調(diào)用Linux本身的系統(tǒng)調(diào)用功能。
RTAI修改了linux/arch/i386中與體系結(jié)構(gòu)相關(guān)的代碼而形成了RTHAL層,RTHAL的作用是使RTAI能夠在實時任務(wù)需要運行的任何時刻中斷Linux。引入RTAI后,Linux的功能沒有改變,但是作為優(yōu)先級最低的任務(wù)運行,并且只有在沒有實時任務(wù)的時候它才能執(zhí)行。這樣做的好處在于將直接修改linux核心的代碼減到最小,這使得將RTAI移植到linux內(nèi)核的工作量減至最低。
RTAI實現(xiàn)的主要模塊有RTAI模塊、SCHED模塊、FIFO模塊、SHM模塊、LXRT模塊,它們能動態(tài)裝入和卸載。用戶自己的實時任務(wù)是在RTAI裝入后再載人??梢酝ㄟ^編輯/etc/rc.sysinit文件,在系統(tǒng)啟動時將RTAI模塊和用戶實時模塊加載到Linux內(nèi)核中,當(dāng)實時模塊加人到內(nèi)核后,實時模塊中創(chuàng)建的線程和函數(shù)就可以訪問系統(tǒng)的底層資源。
2 運動控制器系統(tǒng)設(shè)計
運動控制器由硬件系統(tǒng)和軟件系統(tǒng)兩大部分組成。按照模塊化設(shè)計思路,將運動控制器的體系結(jié)構(gòu)劃分為用戶層、內(nèi)核層和設(shè)備層。其中內(nèi)核層和設(shè)備層兩部分組成了運動控制器的開放式平臺。這種獨立的層次結(jié)構(gòu)使得運動控制器易于實現(xiàn)數(shù)控系統(tǒng)上的開放式應(yīng)用。
用戶層(虛框內(nèi))就是開放式運動控制器的用戶程序空間,運動控制器的用戶軟件是根據(jù)應(yīng)用對象進行特殊化設(shè)計的,可以靈活更換。開放式運動控制器的設(shè)計思路是:無需更改底層軟/硬件模塊,根據(jù)被控對象的特征設(shè)計不同的模塊化用戶軟件就能夠滿足不同的運動控制任務(wù),體現(xiàn)出運動控制器開放式的特性?!坝脩糗浖K化”是開放式運動控制器最大的特征,而“用戶軟件模塊化”恰好也是Linux提供的一種機制:Linux的內(nèi)核和用戶程序是完全分離的,用戶程序通過調(diào)用設(shè)備操作接口就能夠?qū)崿F(xiàn)對硬件設(shè)備的操作。
內(nèi)核層的設(shè)計按照兩條相互獨立的線路展開:移植Linux操作系統(tǒng)和開發(fā)設(shè)備驅(qū)動程序。運動控制器的內(nèi)核層設(shè)計最為復(fù)雜.這部分的設(shè)計是與Linux內(nèi)核機制緊密相關(guān)的。運動控制器大量的硬件設(shè)備是由Linux設(shè)備驅(qū)動程序提供用戶軟件設(shè)備操作接口的.內(nèi)核層的“運動控制接口”和“現(xiàn)場通信接口”是開放式運動控制器最主要的設(shè)備接口。設(shè)備驅(qū)動程序由于處于Linux內(nèi)核的最底層,因此相對于上層用戶軟件又稱之為底層軟件。
設(shè)備層是運動控制器的硬件層,在這部分設(shè)計過程中需要完成運動控制器的硬件設(shè)計,電路設(shè)計。嵌入式運動控制器的硬件設(shè)計與傳統(tǒng)的基于PC機的運動控制器設(shè)計有很大不同之處??紤]到面向特殊領(lǐng)域的應(yīng)用特性,嵌入式系統(tǒng)不能使用桌面系統(tǒng)那樣豐富的硬件資源,因此標(biāo)準(zhǔn)的Pc機硬件無法直接應(yīng)用到嵌入式運動控制器中去,這些決定了開放式運動控制器的硬件設(shè)計具有其特殊性。
2.1 硬件結(jié)構(gòu)設(shè)計
運動控制器微處理器采用的是摩托羅拉公司于2003年下半年推出的新型的具有廣泛發(fā)展前景的PowerPC MPC5200.其內(nèi)部采用了雙處理器結(jié)構(gòu),有一個專門負責(zé)通信的協(xié)處理器,體現(xiàn)了數(shù)據(jù)通信的專業(yè)構(gòu)架。并通過雙端口內(nèi)存(這是種極快的數(shù)據(jù)交換方式)與主處理器通信,從而使主處理器負擔(dān)大幅度下降。其芯片內(nèi)部含有豐富的實用型外設(shè)。
基于PowerPC內(nèi)核的MPC5200”“是一顆低功耗、處理速度達760MIPS的嵌入式處理器。它支持以太網(wǎng)、USB、PCI、ATA、12S、12C、SPI、串行接口、J1850和控制區(qū)域網(wǎng)(CAN)。同時,它還支持DDR存儲器,并集成了一個雙精度的浮點單元(FPU)。
MPC5200運動控制器是一款非常適合于工業(yè)控制領(lǐng)域應(yīng)用的運動控制器,開放化的特點使其能夠應(yīng)用于多種機械設(shè)備上,而通過CAN總線互連組建的現(xiàn)場總線運動控制系統(tǒng)是一種全新的分布式控制系統(tǒng)。因此Mpc5200運動控制器完全可以滿足現(xiàn)代數(shù)控系統(tǒng)高速化、智能化、網(wǎng)絡(luò)化、集成化、開放化的需求。
2.2 軟件結(jié)構(gòu)設(shè)計
在實時Linux下,為了保證數(shù)控系統(tǒng)的實時任務(wù)能夠即時響應(yīng)。所有和實時相關(guān)的任務(wù)都必須放在內(nèi)核層下,每個任務(wù)用一個獨立的內(nèi)核進程來執(zhí)行,實時進程是通過調(diào)用RTAI的rt—task—init()函數(shù)來實現(xiàn)的。而非實時任務(wù)則放在用戶層下,它們在任何時候都不會打斷實時任務(wù)的運行,只有在實時任務(wù)結(jié)束后才會執(zhí)行。
嵌入式數(shù)控的基本功能由各種功能模塊共同來實現(xiàn)的。在以linux為操作系統(tǒng)的開放式平臺上集成RTAI的實時內(nèi)核。通過模塊化的設(shè)計思想,可以將整個控制系統(tǒng)按照實時性的要求分為用戶層模塊,內(nèi)核層實時模塊兩個大的模塊,同時在兩個大的模塊下又根據(jù)不同的子功能分為代碼解釋模塊,人機交互及刀具仿真圖形模塊,文件管理模塊,位置控制模塊,插補運算模塊,狀態(tài)監(jiān)測模塊等。
內(nèi)核層和用戶層之間進程的通訊主要是依靠RTAI提供的實時nFo,通過調(diào)用函數(shù)rlf_create()來創(chuàng)建管道實現(xiàn)數(shù)據(jù)傳輸。FIFO的通信是單向的,因此用戶層和內(nèi)核層的信息交互必須至少創(chuàng)建兩條管道才能實現(xiàn)。
3 實時控制的軟件實現(xiàn)
根據(jù)對開放式運動控制器的運行機制分析,將各實時任務(wù)模塊分別設(shè)置相應(yīng)的定時器工作方式。優(yōu)先級及通信隊列等。
實時功能模塊實現(xiàn)方式如下:位置控制任務(wù)moor()決定電機控制精度。計算下一周期的實際坐標(biāo)增量,輸出到伺服單元驅(qū)動步進電機工作。因此將其設(shè)計成周期性RTAI線程.運行周期為4ms,1級優(yōu)先權(quán)。
功能控制任務(wù)control()是利用fifo從用戶層向內(nèi)核層傳遞控制命令,并實現(xiàn)對I/O口的控制。此任務(wù)采用實時中斷策略,在接受到控制命令,內(nèi)核掛起位置控制任務(wù)。
狀態(tài)檢測任務(wù)monitor()要對狀態(tài)進行實時監(jiān)控。因此設(shè)置此任務(wù)運行周期為lOms.優(yōu)先級為3級。運動控制器軟件的所有實時任務(wù)和函數(shù)包含在實時模塊main—program.o中。通過編{t}/etc/rc.sysinit文件,在系統(tǒng)啟動時加載到Linux內(nèi)核中。當(dāng)實時模塊加入到內(nèi)核中。實時模塊中創(chuàng)建的線程和函數(shù)就可以訪問系統(tǒng)的底層資源。
實時任務(wù)模塊的加載和卸載在Linux中由initmodule()和cleanup—module()兩個函數(shù)實現(xiàn)的,同時可以通過這兩個函數(shù)進行資源的分配和回收,以及線程和處理函數(shù)的創(chuàng)建。
4 結(jié)束語
本文在深入研究Linux實時操作系統(tǒng)的基礎(chǔ)上。將Linux操作系統(tǒng)移植到數(shù)控機床上具有實用價值的嵌人式微處理器MPC5200上,證明了數(shù)控嵌人式系統(tǒng)完全可以實現(xiàn)一定程度的開放性,且移植Linux也是開發(fā)嵌人式數(shù)控運動控制器操作平臺一種比較好的方案。具有明顯的先進性和實用性。
通過一系列的實驗分析和應(yīng)用研究,現(xiàn)已成功將MPC5200運動控制器應(yīng)用于自主開發(fā)的一種基于CAN總線的嵌入式線束機控制系統(tǒng),該系列機床已經(jīng)通過項目成果鑒定,目前正在進行產(chǎn)業(yè)化推廣工作。在此也希望本文能為開發(fā)和推廣我國具有自主知識產(chǎn)權(quán)的嵌人式Linux運動控制系統(tǒng)提供一定的借鑒和幫助。
(審核編輯: 智匯張瑜)