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