數(shù)控軟件系統(tǒng)的升級(jí)及實(shí)時(shí)控制性能的測(cè)試
點(diǎn)擊:1298
A+ A-
所屬頻道:新聞中心
0 引言
華南數(shù)控使用的嵌入式操作系統(tǒng)是基于2.4版本內(nèi)核的Linux操作系統(tǒng),以RTLinux作為實(shí)時(shí)微內(nèi)核,在此基礎(chǔ)上運(yùn)行數(shù)控軟件。此系統(tǒng)在實(shí)時(shí)性、穩(wěn)定性測(cè)試中獲得了不錯(cuò)的性能。隨著Linux的不斷發(fā)展,2.6版本的內(nèi)核獲得了更加穩(wěn)定的性能,且對(duì)硬件支持更加廣泛,更重要的是,內(nèi)核主體中加入了提高中斷性能和調(diào)度響慮時(shí)間的改進(jìn),其中最硅麓的改進(jìn)為采用可搶占內(nèi)核和更加有效的調(diào)度算法。但是高版本的RTLinux不再開源,之前的RTLinux也沒有提供對(duì)2.6版本的內(nèi)核的完好的支持,所以升級(jí)Linux內(nèi)核、更換觚Al實(shí)時(shí)微內(nèi)核、同時(shí)對(duì)數(shù)控軟件的源代碼做一些必要的調(diào)整,足升級(jí)數(shù)控系統(tǒng)所必需的、關(guān)鍵的環(huán)節(jié)。此項(xiàng)目包括兩個(gè)主要環(huán)節(jié):嵌入式系統(tǒng)的升級(jí)以及數(shù)控軟件的調(diào)整。
1 數(shù)控系統(tǒng)的結(jié)構(gòu)
華南數(shù)控的軟件系統(tǒng)是一個(gè)以實(shí)時(shí)微內(nèi)核為底層,操作系統(tǒng)以及數(shù)控軟件層層鋪墊起來的多層次結(jié)構(gòu)。實(shí)時(shí)微內(nèi)核在整個(gè)嵌入式系統(tǒng)的最底層,與硬件及Linux內(nèi)核通訊,負(fù)責(zé)截取及分析中斷。LinIlx內(nèi)核位于實(shí)時(shí)微內(nèi)核的上層,其上運(yùn)行著Linux操作系統(tǒng)本身所需要的程序,提供系統(tǒng)運(yùn)行的基本功能。嚴(yán)格地說,數(shù)控軟件中除,一個(gè)負(fù)責(zé)運(yùn)動(dòng)控制的內(nèi)核模塊處于與內(nèi)核同一個(gè)層次,其他的部分均屬于上層。軟件系統(tǒng)的層次結(jié)構(gòu)圖如圖1所示。
圖1 數(shù)控軟件系統(tǒng)的層次結(jié)構(gòu)
2 嵌入式操作系統(tǒng)的升級(jí)
操作系統(tǒng)層面上的更改較少,主要包括為內(nèi)核打?qū)崟r(shí)補(bǔ)丁、根據(jù)嵌入式系統(tǒng)的特點(diǎn)編譯內(nèi)核、安裝RTAl實(shí)時(shí)微內(nèi)核、升級(jí)系統(tǒng)庫文件、調(diào)整嵌入式系統(tǒng)的啟動(dòng)腳本等。
2.1 編譯內(nèi)核
把剛下載的“潔凈”的內(nèi)核打上RTAI補(bǔ)丁,按照硬件的要求以及實(shí)施性的要求配置內(nèi)核選項(xiàng)。例如,USB、FrameBuffer、ext2/ext3,vfat文件系統(tǒng)、是否需要模塊版本支持、是否是多CPU,本地語言支持等。這里需要注意的是,為了獲得更好的實(shí)時(shí)性能,APM BIOS Support支持需要關(guān)掉。配置完成之后執(zhí)行編譯安裝生成內(nèi)核與內(nèi)核模塊,用新編譯的內(nèi)核替換原有內(nèi)核,再將啟動(dòng)時(shí)需要加載的內(nèi)核模塊放置到鏡像文件illi仃d.img中的合適的位置。
2.2 編譯安裝RTAI實(shí)時(shí)微內(nèi)核
RTAI的編譯安裝和Linux內(nèi)核的編譯類似,也需要經(jīng)過配置、編澤、安裝3步。由于RTAI的共享內(nèi)存和實(shí)時(shí)FIFO需要一些特殊的字符設(shè)備,因此在安裝了RTAI之后還需要自己動(dòng)手寫一個(gè)shell腳本程序,當(dāng)程序中要用到共享內(nèi)存和實(shí)時(shí)FIFO的時(shí)候就是用此腳本在/dev目錄下創(chuàng)建相應(yīng)的字符設(shè)備。
2.3 升級(jí)系統(tǒng)庫文件
由于數(shù)控軟件在編譯時(shí),大部分應(yīng)用程序?qū)煳募牟僮魇遣捎脛?dòng)態(tài)鏈接的,因此在運(yùn)行時(shí)仍然需要這些庫文件的支持,否則在運(yùn)行時(shí)會(huì)提示找不到某些共享目標(biāo)文件的錯(cuò)誤。要升級(jí)的庫文件主要有:標(biāo)準(zhǔn)C++的共享庫文件(1ibstdc抖.so.6),GCC的共享庫文件(1ibgcc s.so.1),數(shù)學(xué)庫庫文件(1ibm.so.6),c庫的庫文件(1ibc舯.6),ld.1inIlx.so.2,圖形界面正常運(yùn)行所需要的libdl.so.2,以及線程庫libpthread.so.0。以一卜提到的大部分是一些共享庫文件的符號(hào)鏈接,在升級(jí)的時(shí)候需要將原文件替換之后再創(chuàng)建同名的符號(hào)鏈接。
2.4 啟動(dòng)腳本的修改
2.6版本的Linux內(nèi)核相對(duì)于2.4的做了一些調(diào)整和修改,例如內(nèi)核模塊、文件系統(tǒng)等,系統(tǒng)啟動(dòng)時(shí)可能要加載某些內(nèi)核模塊或者某些文件系統(tǒng),例如2.6的內(nèi)核新增了對(duì)usb2.O的支持,增加了一些有關(guān)于USB的模塊,文件系統(tǒng)方面用tmpfs替換了shmfs等,這就要根據(jù)實(shí)際情況修改啟動(dòng)腳本。
3 數(shù)控軟件的升級(jí)
數(shù)控軟件大致可以分為4個(gè)部分,分別是運(yùn)動(dòng)控制部分(MOT)、輸入輸出部分(IO)、任務(wù)管理部分(1ASK)和圖形用戶接口部分(GUl),層次關(guān)系如圖2所示。
圖2 數(shù)控系統(tǒng)軟件結(jié)構(gòu)
GUI部分負(fù)責(zé)與用戶交互,在其上使用tcl/tk搭建了圖形用戶界面;TASK部分負(fù)責(zé)處理任務(wù):MOTION部分是整個(gè)軟件的核心部分,負(fù)責(zé)電機(jī)的運(yùn)動(dòng)控制;10部分負(fù)責(zé)讀寫IO口等操作刪。
源代碼的修改是整個(gè)工程的亮點(diǎn),這一部分的工作直接關(guān)系到數(shù)控軟件對(duì)電機(jī)控制的性能與用戶操作時(shí)界面的響應(yīng)性能。修改的主要工作是增加R1秈所提供的API、使軟件同時(shí)支持RTLinux和RTAI,增加宏定義,以及修改一些與內(nèi)核升級(jí)有關(guān)彳日與實(shí)時(shí)無關(guān)的代碼。其中主要是RTAI的API,這些API包括開啟實(shí)時(shí)時(shí)鐘、設(shè)定時(shí)鐘頻率、開啟實(shí)時(shí)線程、開辟共享內(nèi)存和信號(hào)量等。這里實(shí)時(shí)線程的周期是不能變的,要和伺服周期要盡量保持一致,而實(shí)時(shí)時(shí)鐘的周期可以改變。如果時(shí)鐘中斷周期設(shè)置太短,線程周期可能比較精確,但是以犧牲系統(tǒng)響心為代價(jià),這樣用戶使用起來會(huì)感覺很吃力;相反,如果時(shí)鐘周期設(shè)置得太長,線程周期的精度就會(huì)降低。因此設(shè)置這個(gè)參數(shù)的時(shí)候應(yīng)該綜合上述兩方面取一個(gè)折中值。除了這砦框架式的修改,還需要針對(duì)宿主系統(tǒng)和目標(biāo)系統(tǒng)的特點(diǎn)對(duì)源代碼進(jìn)行修改。新版本的GCC將C++的許多標(biāo)準(zhǔn)納入了其中,這會(huì)使得一些以前編寫的代碼編譯時(shí)出錯(cuò),這就要根據(jù)新的標(biāo)準(zhǔn)修改源代碼。有的Linux發(fā)行版由于安傘原因而不允許用戶隨便使用自己編寫的庫文件,這會(huì)導(dǎo)致程序連接或者運(yùn)行時(shí)出錯(cuò)。這一類問題需要從實(shí)際問題出發(fā),根據(jù)實(shí)際需要修改源代碼。
除了對(duì)源代碼的修改,還要對(duì)Makefile進(jìn)行修改。2.6版本的內(nèi)核在編譯內(nèi)核模塊時(shí)使用了Kbuild編譯環(huán)境,Makefile的編寫也做了相應(yīng)的修改,此時(shí)的Makefile已經(jīng)不再是傳統(tǒng)意義上的Malcefile,其目標(biāo)、規(guī)則以及編譯器、連接器、匯編器的旗標(biāo)都有所變化,而凡編譯時(shí)需要進(jìn)入到Linllx內(nèi)核源碼包下讀取Kbuild編譯環(huán)境。MOTl0N部分最后將生成一個(gè)內(nèi)核模塊,因此這部分的Makefile需要按照Kbuild編譯環(huán)境提供的Makefile規(guī)則進(jìn)行修改,其他幾部分都是町執(zhí)行程序,可以保持不變。
4 實(shí)時(shí)控制性能的測(cè)試
以上升級(jí)系統(tǒng)以及調(diào)整數(shù)控軟件,對(duì)所得到的整個(gè)系統(tǒng)最基本的要求是對(duì)電機(jī)的控制能保持原有的實(shí)時(shí)性能,甚至獲得更好的實(shí)時(shí)性。所謂實(shí)時(shí)性,是指能夠在事先指定或確定的時(shí)間內(nèi)完成系統(tǒng)功能和對(duì)外部或內(nèi)部、同步或異步事件做出相應(yīng)。實(shí)時(shí)性分為軟實(shí)時(shí)和硬實(shí)時(shí)兩種。軟實(shí)時(shí)是指統(tǒng)計(jì)意義上的實(shí)時(shí),一般指整體吞吐量大或整體響應(yīng)時(shí)間快,但不能保證特定的任務(wù)在特定的時(shí)間內(nèi)完成,若偶爾超過時(shí)限不會(huì)對(duì)實(shí)際應(yīng)用造成損害。硬實(shí)時(shí)則是指時(shí)問要求必須嚴(yán)格保證的實(shí)時(shí),否則會(huì)產(chǎn)生不可預(yù)料的后果,這才是真正意義上的實(shí)時(shí)例。
電機(jī)的控制信號(hào)由GUI部分的加工代碼發(fā)送,通過任務(wù)模塊下達(dá)給運(yùn)動(dòng)控制模塊,在此需要經(jīng)過粗插補(bǔ)和精插補(bǔ)以及其他一些運(yùn)算,發(fā)送到PID,再經(jīng)過限幅、比例放大得到信號(hào)rawoutput,再經(jīng)過輸出補(bǔ)償運(yùn)算發(fā)送到伺服器,從而控制電機(jī)運(yùn)行。在電機(jī)運(yùn)行的過程中,系統(tǒng)從碼盤讀取出電機(jī)轉(zhuǎn)角洲一Input,經(jīng)過輸入補(bǔ)償傳送給輸入比例環(huán)節(jié),再作為反饋加到PID調(diào)節(jié)器的輸入端。
rawInput=K+rawolltpllt。然而在實(shí)際的系統(tǒng)中,由于硬件和軟件兩方面的原因,這樣嚴(yán)格的比例關(guān)系并不存在,只能在某一個(gè)可允許的范圍內(nèi)保持一種近似的線性關(guān)系。如果不考慮硬件的因素,那么影響實(shí)時(shí)控制性能的主要閃素就是系統(tǒng)的實(shí)時(shí)性能,即在某個(gè)特定時(shí)刻,系統(tǒng)是否能夠準(zhǔn)時(shí)完成某項(xiàng)工作。
考察以上系統(tǒng),假如MoTl0N部分的調(diào)度周期為T,那么就會(huì)每隔T讀取一次碼盤讀數(shù),即刷新一次rawInput的值,隨后通過各種計(jì)算得出rawoutput,發(fā)送到伺服器。如果在某一個(gè)周期由于某種原因調(diào)度延遲了△t,則碼盤讀數(shù)會(huì)相應(yīng)增加△θ。經(jīng)過計(jì)算,rawOutput的值會(huì)相應(yīng)減少△θ,令下一個(gè)崗期轉(zhuǎn)角減少。這樣就出現(xiàn)了一種抖動(dòng)的現(xiàn)象,而這種抖動(dòng)在軟件層面上,與實(shí)時(shí)調(diào)度器有直接關(guān)系。這種抖動(dòng)可以通過對(duì)運(yùn)動(dòng)控制部分死循環(huán)相鄰兩個(gè)周期的時(shí)間差測(cè)得結(jié)果:如果時(shí)
間差的波動(dòng)比較大,說明調(diào)度器在調(diào)度實(shí)時(shí)任務(wù)時(shí)存在延遲或提前的狀況,實(shí)時(shí)控制性能比較差,相反則比較好。在硬件條件相同的情況下,對(duì)兩個(gè)不同的軟件系統(tǒng)進(jìn)行測(cè)試,通過比較得到的結(jié)果,就可以看出哪一個(gè)實(shí)時(shí)性能比較好。
,經(jīng)過升級(jí)、調(diào)整之后的新系統(tǒng)在實(shí)時(shí)控制方面有了以下兩方面的提高:小幅抖動(dòng)方面,相鄰兩次計(jì)時(shí)的抖動(dòng)很小,看起來近似一條直線;而大抖動(dòng)也得到了較好的抑制。綜合以上兩方面,新系統(tǒng)的實(shí)時(shí)性能完全可以滿足生產(chǎn)加工的需要。
5 結(jié)束語
經(jīng)過以上步驟升級(jí)、調(diào)整后的系統(tǒng),不僅保持了原系統(tǒng)的各種功能,而且通過兩個(gè)系統(tǒng)在同樣的硬件條件下的采樣數(shù)據(jù)的分析與比較,證實(shí)了新系統(tǒng)在實(shí)時(shí)控制性能方面取得了進(jìn)一步的提高,同時(shí)也驗(yàn)證了2.6內(nèi)核+RTA1的系統(tǒng)實(shí)時(shí)性能要優(yōu)于2.4內(nèi)核+I盯Linux的系統(tǒng)。由此,可以在高版本的Linux內(nèi)核下繼續(xù)使用開源的實(shí)時(shí)微內(nèi)核,并得到更好的實(shí)時(shí)性能。
(審核編輯: 智匯胡妮)
分享