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