摘要:提出一種基于MATLAB/Simulink模型、面向硬實時操作系統RTAI-Linux的主從模式測控設計方法。在主機上設計針對RTAI-Linux的目標語言編譯器文件和模板聯編文件,用C MEX S函數實現從機的數據采集卡驅動函數調用;在從機上配置圖形顯示工具包及數據采集卡底層驅動,建立基于模型的測控系統設計平臺。最后分析了測控系統中關鍵任務的性能保證措施,并通過步進電機控制實例驗證了該方法的有效性。
關鍵詞:MATLAB/Simulink; 模型; 測控系統; RTAI-Linux; PCI-6014
中圖分類號:TP273.5文獻標志碼:A
文章編號:1001-3695(2008)04-1016-04
0引言
傳統的測控系統開發過程是順序的,這種開發過程不能進行跨階段的重復設計;當檢測到錯誤或測試結果不滿足設計要求時,必須重新開始設計和實現。因此,傳統的測控系統設計方法至少存在以下幾方面問題:首先,在對控制效果還沒有把握的情況下,硬件電路已經設計并加工了,這時還不知道所設計的方案能在多大程度上滿足要求,或者根本就不能滿足要求,但已經產生了較大的硬件投入資本;其次,由于采用手工編程會產生代碼不可靠的問題,這樣在測試過程中如果出現問題,就很難確定是控制方案不理想還是軟件代碼有錯誤,并且手工編程將會耗費大量的時間;最后,即使軟件編程不存在問題,如果在測試過程中發現控制方案不理想,需要進行修改,則新一輪工作又將開始,大量的時間又將耗費在軟件的修改和調試上。
由此可見,在測控系統開發的初期,快速地建立控制對象及控制器模型,并對整個測控系統進行多次離線及在線的實驗來驗證控制系統軟硬件方案的可行性,為系統開發方案提供可靠的理論依據,將大大提高系統開發的效率和可靠性。目前,MATLAB/Simulink結合real-time workshop(RTW)、Stateflow、real time Windows target(RTWT)等工具箱,能方便地進行建模與代碼的自動生成,為尋求新的測控系統設計方法提供條件[1]。近些年,一些與MathWorks公司建立合作伙伴關系的公司推出了有代表性的快速復雜測控系統設計工具,如德國的dSPACE公司開發dSPACE實時仿真系統、加拿大Opal-RT Technologies公司推出的RT-LAB、Quanser公司開發的QStudioRP等。這些工具在航空航天、汽車、機器人、工業控制等領域應用都非常廣泛[2]。
本文以MATLAB/Simulnik/RTW等工具箱為基礎,結合開源的硬實時操作系統RTAI-Linux[3],采用通用的數據采集卡(如NI的數據采集卡)提出了一種新的復雜測控系統設計方法。該方法采用主從機模式。在主機上進行建模和對控制效果的檢測;由從機控制被控對象,通過編寫相應編譯器文件自動生成面向RTAI-Linux的源代碼,在從機上編譯程序代碼生成可執行程序,直接控制被控對象。主機通過RTWT工具箱能實時檢測控制效果。整個系統從建模到控制效果反饋到主機形成一個回路,通過修改模型及算法,能很快找到最優測控方案及控制策略,以減少甚至避免傳統測控系統設計方法的不足。
1基于模型的測控系統平臺設計
1.1設計思路
根據測控系統需求,利用Simulink/RTW/Stateflow建模進行離線仿真,然后由模型轉換為應用程序直接去控制測控對象,通過MATLAB/RTWT工具箱結合數據采集卡將控制效果反饋到主機上直接觀察結果。整個測控系統設計過程形成一個反饋回路。如果控制效果不理想,則可修改Simulink模型或調整模型參數,甚至改變RTAI-Linux的調度策略,直到獲得滿意的控制效果。整個測控系統的基本設計思想如圖1所示。
1.2MATLAB相關工具箱
本測控系統平臺主要用到的MATLAB工具箱如表1所示。Simulink是用來建模、分析和仿真各種動態系統的交互環境,包括連續系統、離散系統和混雜系統,通過Simulink 提供的豐富的功能塊可以迅速地創建系統模型。Stateflow提供了圖形工具幫助用戶設計和分析事件驅動系統,其基于有限狀態機理論,能夠快速建立和仿真復雜事件驅動系統的邏輯行為。應用Simulink 和Stateflow可以在統一的環境下設計、建立和仿真整個測控系統的行為。RTWT是一種基于PC的實時測量方法。RTWT支持大量的數據采集卡,可以方便地對被測信號進行實時采集。
RTW結合面向目標環境的目標語言編譯器文件和模板聯編文件,可從Simulink模型中自動生成C 代碼,編寫新的目標語言編譯器文件和模板聯編文件,生成適用于不同操作系統平臺的程序代碼。本文正是利用這一特點,擴展Simulink模型在RTAI-Linux上進行測控系統快速設計。
1.3RTAI-Linux
RTAI-Linux是源代碼開放的硬實時多任務操作系統,支持x86、PowerPC、ARM等處理器。其通過在Linux內核與硬件中斷之間增加一個可搶先的微實時內核,將Linux內核作為實時內核的一個進程來調度。Linux內核的優先級最低,可以被實時進程搶占,Linux本身的進程仍在Linux內核上運行。RTAI-Linux在默認的情況下采用固定優先級調度策略,系統調度器根據各個實時任務的優先級來確定任務執行的先后次序。同時RTAI-Linux也支持其他調度策略,如最短時限優先(ear-liest deadline first,EDF)調度算法、單調速率(rate-monotonic,RM)調度算法等,甚至用戶可以添加自定義的調度算法。目前,RTAI-Linux已廣泛用在計算機數控系統、機器人及工業控制等方面[3]。
1.4系統架構
基于模型的測控系統設計平臺總體架構如圖2所示。在主機上,應用MATLAB/Simulink/RTW/Stateflow建模進行離線仿真,然后結合目標語言編譯器文件rtai.tlc和模板聯編文件rtai.tmf以及從機數據采集卡驅動接口的S函數,生成面向RTAI-Linux的源代碼,通過網絡下載到目標機中。在從機RTAI-Linux上編譯源代碼,生成可直接訪問采集卡的應用程序(mode.exe),并且測控信號的監測進程(xrtailab.exe)通過郵箱與mode.exe實時通信。這樣mode.exe的控制信號便在目標機上實時顯示。PCI-6014輸出的測控信號及測控對象的運行結果通過主機上的數據采集卡進行檢測,結合RTWT工具箱進行在線仿真,控制效果便直觀地顯示在主機上。這樣整個測控系統平臺形成一個完整的回路,無須手工編程。這對快速尋找最優的測控策略、驗證測控算法等具有很大的幫助。
要實現整個基于MATLAB/Simulink模型的測控系統平臺,必須解決幾個關鍵點:a)編寫從模型到代碼的轉換文件;b)配置從機軟件包;c)實現數據采集卡驅動。
1.4.1從模型到面向RTAI-Linux的代碼
從模型到源代碼的實現必須經歷以下幾個階段:首先,RTW讀取模型文件并對其進行編譯,形成模型中間描述文件;然后,由目標語言編譯器TLC對模型描述文件解釋生成代碼;最后,根據系統模板聯編文件system.tmf生成自定義的聯編文件。根據現有的TLC和TMF修改生成面向RTAI-Linux的rtai.tlc和rtai.tmf文件。從模型到代碼的轉換過程如圖3所示。
1.4.2從機軟件包配置
從機軟件包如表2所示。
必須按如下順序配置軟件包:
a)安裝Linux系統(Fedora 5),下載Linux內核版本2.6.15的源代碼,并打實時補丁,編譯生成新Linux內核;
b)啟用新內核,編譯圖形庫MesaLib-6.4.2[4]和eFLTK-2.0.6[5];
c)編譯采集卡驅動Comedi和用戶接口庫Comedilab[6];
d)配置RTAI,編譯生成RTAI模塊,進入RTAI測試目錄/usr/realtime/testsuite,所有測試通過,從機軟件包配置完成。
在筆者配置過程中,曾遇到測試RTAI時系統死機等異常現象。這是由于在配置Linux內核時,對處理器類型及一些模塊的選擇不恰當引起的。
1.4.3數據采集卡驅動
在本測控系統平臺上,使用的數據采集卡是美國NI公司的PCI-6014。其技術特性為:16位精度、16路單端或8路差分模擬輸入,最高采樣率是200 kS/s;2路16位模擬輸出;提供8路數字I/O和兩個24位計數器/定時器[7]。
由圖2可見,主機和從機上都有數據采集卡。主機上的數據采集卡可由Simulink/RTWT工具箱直接訪問,只要RTWT支持的數據采集卡即可,不用編寫其驅動。但從機上運行RTAI-Linux需要有支持數據采集卡的驅動程序,并且在主機上應用Simulink建模時必須有支持數據采集卡的驅動接口函數。這樣通過RTW生成的程序代碼編譯后在目標平臺上運行時,才能與數據采集卡直接進行數據交互。
在從機上,數據采集卡的驅動利用Comedi工程項目[6]實現。該工程項目為大多數常用數據采集卡提供了開放源碼的Linux設備驅動。Comedi以可加載的內核模塊為數據采集卡提供底層驅動;Comedilib是用戶接口庫,提供操作數據采集卡的接口函數;Kcomedilib是與Comedi一起發布的Linux內核模塊,適合實時多任務的實現。驅動程序有標準的數據采集卡操作函數,如打開Comedi設備comedi_open、關閉Comedi設備comedi_close,從通道讀數據comedi_data_read、從數字通道讀一位comedi_dio_read等。通過Comedi工程項目為RTAI-Linux提供的設備驅動,只需將驅動庫文件配置并編譯,在需要時裝載相應的驅動模塊,即可方便地使用各種數據采集卡,而不用自己編寫設備驅動。
在主機上,設備驅動程序是通過Simulink設備驅動模塊來實現的,而Simulink設備驅動模塊則是一個與用戶手寫代碼相關聯的S函數模塊,并且設備驅動模塊必須使用C MEX S函數來實現。關于S函數的實現細節參見文獻[8]。在驅動文件中通常會用到如下函數:函數mdlCheckParameters檢驗S函數參數的有效性;函數mdlInitializeSizes初始化SimStruct中不同參數的大小;函數mdlInitializeSampleTimes 指定采集時間;函數mdlStart完成對硬件的初始化;函數mdlOutputs完成信號運算;函數mdlTerminate運行結束。在函數mdlStart和mdlOutputs函數中,會直接調用Comedi驅動接口函數,完成對數據采集卡硬件的訪問。例如在mdlStart函數中調用comedi_open、comedi_get_n_channels等函數來完成設備初始化;mdlOutputs函數中調用comedi_data_write、comedi_dio_read等函數來完成數據交互。這樣,通過C MEX S函數模塊,能實現從模型轉換成的應用程序可直接訪問數據采集卡。
2關鍵任務的性能保證措施
在復雜的多任務測控系統中,系統的性能要求和功能要求同等重要,關鍵任務必須在規定的時限內完成,否則會達不到預期的測控效果,甚至系統崩潰。所以測控系統中的多任務必須具有可調度性。
對于EDF,CPU的利用率可以達到1,其面向周期性任務和不確定性任務。在每個時刻都要計算處于等待調度狀態的任務調度優先級,運算工作量較大,系統下個時刻調度的任務是不確定的,與系統中其他任務有關。這種方法使得系統適應性較好。
由于RTAI-Linux支持多種實時調度算法,在基于模型的測控系統設計中,測控效果能直觀地顯示,可通過調整系統調度算法、任務模型、任務周期等,迅速找到合適的測控方案,保證關鍵任務的性能需求。
3應用實例
針對上面建立的快速測控平臺,通過一個步進電機控制的實例來驗證其可行性。其中步進電機的步距角為1.8°。步進電機是將電脈沖信號轉變為角位移或線位移的開環控制元件,在非超載的情況下,電機的轉速、停止位置只取決于脈沖信號的頻率和脈沖數。主機上的PCI-6014用來測量從機上的PCI-6014輸出的控制信號及控制效果;從機通過PCI-6014輸出信號到步進電機驅動器,通過驅動器控制步進電機。
3.1控制建模
在主機上進行控制電機建模時,主要考慮步進電機驅動器需要給定哪些控制信號。步進電機控制器有四個可控參數,即SP步進脈沖信號、DIR電機轉向信號、ENA 工作使能信號(低電平時停止脈沖輸出、高電平時正常輸出脈沖)、OPT工作狀態(高電平有效)。建立的步進電機控制模型如圖4所示,模型名為mode.mdl。圖4中的sfun_comedi_data_write模塊和sfun_comedi_dio_write模塊由C MEX S函數實現。其實質是PCI-6014的驅動程序接口函數使PCI-6014輸出相應的控制信號。建立控制模型后配置RTW,選擇rtai.tlc和rtai.tmf編譯生成面向RTAI-Linux的源代碼。
3.2控制電機信號
將生成的源代碼下載到從機,編譯生成可執行應用程序(mode.exe),加載程序運行時所必需的內核模塊;然后mode.exe和xrtailab.exe兩個進程通過郵箱實時通信。控制信號如圖5所示。由圖5可見,信號DIR、ENA及OPT均為高電平,信號SP的周期為20 ms。由于步進電機的步距角為1.8°,可以計算出步進電機的主軸轉動應為15轉/min。
3.3反饋檢測
在主機上應用Simulink和RTWT建立測量模型,實時測量模型如圖6所示。當從機的數據采集卡PCI-6014輸出控制信號到步進電機驅動器時,步進電機開始運行。采用計數器來測量步進電機轉速,當主軸轉動一周時,對射式傳感器輸出一個脈沖信號,對脈沖進行計數來計算步進電機的轉速。用模擬輸入測量DIR、ENA和OPT的邏輯電平,RTWT的實時檢測結果如圖7所示。示波器Scope顯示了步進電機的轉速;示波器Scope1是對目標機PCI-6014輸出的控制信號DIR、ENA和OPT的檢測結果。從圖7中可以反映從機的控制效果,從而判斷控制策略、控制模型等的正確性。
4結束語
本文面向復雜的測控系統設計,首先建立基于模型的測控系統設計平臺,然后通過步進電機控制實例來驗證該方法的可行性。實例證明采用基于模型的測控系統設計方法,完全無須手工編程,能很快找到最優測控方案及控制策略,從而大大縮短復雜測控系統的研發周期,節省系統成本,增強系統的可靠性。因此,研究基于MATLAB/Simulink模型,針對硬實時操作系統RTAI-Linux的測控系統設計方法具有重大的現實意義。
參考文獻:
[1]The MathWoks Inc.Documentation for MathWorks products[EB/OL].(2006-09-02)[2006-10-05].http://www.mathworks.com/.
[2]QUIJANO N, GIL A E, PASSINO K M. Experiments for dynamic resource allocation scheduling, and control[J]. IEEE Control Systems Magazine, 2005,25(1):63-79.
[3]DOEIO L. Real-time application interface(RTAI)[EB/OL].(2006-09-18)[2006-12-05].http://www.rtai.org/.
[4]BARSUHN B, TSCHIRREN B, SIKORSKI B, et al. Mesa-6.4.2[EB/OL].(2006-10-25)[2006-10-25].http://www.mesa3d.org/.
[5]MASARATI P, BUCHER R, MAYER H, et al. Efltk-2.0.6[EB/OL].(2006-09-02)[2006-12-10].http://sourceforge.net/.
[6]SCHLEEF D, HESS F M. The control and measurement device interface handbook[EB/OL].(2006-12-05)[2007-02-10].http://www.comedi.org/.
[7]National Instruments Corporation. NI 6013/6014 user manual[EB/OL].(2006-09-02)[2007-02-10].http://www.ni.com/.
[8]薛定宇,陳陽泉.基于MATLAB/Simulink的系統仿真技術與應用[M]. 北京:清華大學出版社,2004:320-345.
[9]KRISHNA C M, SHIN K G.實時系統[M].戴瓊海,譯.北京:清華大學出版社,2004:51-53.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”