高寧 李曉明
摘? 要:由于商業(yè)半實(shí)物仿真平臺(tái)往往需要配合專用硬件使用,通用性較差、價(jià)格高昂,且國(guó)內(nèi)半實(shí)物仿真平臺(tái)較少,難以滿足半實(shí)物仿真技術(shù)的學(xué)習(xí)教學(xué)需求。因此,本文設(shè)計(jì)實(shí)現(xiàn)了一種基于組合式儀器平臺(tái)和Simulink的半實(shí)物仿真系統(tǒng),通過(guò)分析RTW代碼生成過(guò)程,實(shí)現(xiàn)Simulink模型的實(shí)時(shí)性擴(kuò)展。并通過(guò)編寫腳本文件,自動(dòng)生成可在組合式儀器平臺(tái)上運(yùn)行的半實(shí)物仿真應(yīng)用。實(shí)例運(yùn)行表明,該半實(shí)物仿真平臺(tái)具有較高的自動(dòng)化程度和通用性。
關(guān)鍵詞:半實(shí)物仿真;Simulink;實(shí)時(shí)性;自動(dòng)化
中圖分類號(hào):TP273+.5? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:As commercial HIL (Hardware In the Loop Simulation) platforms often need to be used with special hardware,the versatility is poor and the price is high.Meanwhile,there are few HIL platforms available in our country.Therefore it cannot meet the needs of learning and using HIL technology.For this case,a HIL platform based on a combined instrument platform and Simulink was built.By analyzing the RTW code generation process,the real-time extension of the Simulink model is realized.By writing the script file,semi-physical simulation applications can be generated automatically on the platform of the combined instrument.The running example shows that the semi-physical simulation platform has a high degree of automation and versatility.
Keywords:HIL;simulink;real-time;automation
1? ?引言(Introduction)
半實(shí)物仿真根據(jù)英文翻譯有時(shí)也被稱為硬件在環(huán)(HIL)仿真,是指在仿真系統(tǒng)應(yīng)用中包含有數(shù)學(xué)模型同時(shí)也有真實(shí)硬件設(shè)備的接入,相互配合共同完成仿真。相比于傳統(tǒng)仿真測(cè)試方法,可以使系統(tǒng)表現(xiàn)出更為接近完全真實(shí)硬件情況下的性能和狀態(tài),幫助研發(fā)人員進(jìn)行更全面、更徹底的系統(tǒng)測(cè)試,及早發(fā)現(xiàn)和解決測(cè)試過(guò)程中存在的問(wèn)題,有效減少研發(fā)周期,降低研發(fā)成本或進(jìn)行極限、危險(xiǎn)工況下的測(cè)試,提高成功率。因此,半實(shí)物仿真被廣泛應(yīng)用于武器裝備研發(fā)[1,2]、航空航天[3,4]、汽車研發(fā)[5]等諸多領(lǐng)域,已經(jīng)成為一個(gè)國(guó)家仿真技術(shù)發(fā)展水平的重要體現(xiàn)[6]。
目前,半實(shí)物仿真應(yīng)用較為廣泛的有Simulink Real Time[7]、dSpace[8,9]、RT-LAB[10]、NI,以及基于Windows實(shí)時(shí)擴(kuò)展系統(tǒng)[11]和基于Linux系統(tǒng)的半實(shí)物仿真平臺(tái)[12]。但上述平臺(tái)在使用過(guò)程中往往需要專用的軟件和硬件配合使用,使用范圍難免受到硬件的限制,通用性較差,而國(guó)內(nèi)現(xiàn)有的半實(shí)物仿真平臺(tái)較少。同時(shí)商業(yè)半實(shí)物仿真平臺(tái)價(jià)格高昂,更適合實(shí)際生產(chǎn)研發(fā),對(duì)于高校同學(xué)和教師而言,學(xué)習(xí)和研究半實(shí)物仿真技術(shù)的成本過(guò)高。針對(duì)以上情況,本文搭建了基于組合式儀器平臺(tái)和Simulink的一種通用半實(shí)物仿真平臺(tái),并提出了對(duì)Simulink模型實(shí)時(shí)性改造的方法,最后對(duì)該半實(shí)物仿真平臺(tái)開(kāi)發(fā)仿真應(yīng)用進(jìn)行了實(shí)例展示。
2? ?半實(shí)物仿真平臺(tái)總體架構(gòu)(Overall architecture of hardware in the HIL simulation platform)
組合式儀器平臺(tái)包含硬件模塊和軟件系統(tǒng),該平臺(tái)可以完成網(wǎng)絡(luò)傳輸、多任務(wù)處理,以及各種外圍接口的調(diào)用,并且通過(guò)系統(tǒng)BootLoader、系統(tǒng)kernel、系統(tǒng)驅(qū)動(dòng)程序等方面的定制,實(shí)現(xiàn)了一個(gè)穩(wěn)定性好、實(shí)時(shí)性高的適用于組合式儀器系統(tǒng)的嵌入式Linux系統(tǒng),運(yùn)行在組合式儀器系統(tǒng)硬件模塊上[13],硬件模塊如圖1所示。
本文以組合式儀器平臺(tái)為硬件基礎(chǔ)、Simulink為軟件基礎(chǔ),通過(guò)Simulink設(shè)計(jì)開(kāi)發(fā)數(shù)學(xué)模型,然后使用RTW工具箱將模型轉(zhuǎn)化成C語(yǔ)言代碼,并根據(jù)半實(shí)物仿真系統(tǒng)的特點(diǎn)對(duì)自動(dòng)生成的代碼進(jìn)行定制,最后下載至組合式儀器平臺(tái)中進(jìn)行編譯鏈接生成可運(yùn)行的目標(biāo)程序,完成半實(shí)物仿真應(yīng)用的開(kāi)發(fā)。二者之間通過(guò)網(wǎng)絡(luò)通信完成仿真程序的下載,以及仿真程序運(yùn)行狀態(tài)的監(jiān)控,系統(tǒng)總體架構(gòu)如圖2所示。
3? Simulink模型的實(shí)時(shí)性擴(kuò)展(Real-time extension of Simulink model)
3.1? ?RTW代碼自動(dòng)生成分析
RTW作為Simulink中集成的一個(gè)工具箱,可以方便地將Simulink模型轉(zhuǎn)換成能夠直接在目標(biāo)硬件平臺(tái)使用的C語(yǔ)言代碼,使之可以脫離Simulink環(huán)境運(yùn)行在目標(biāo)硬件平臺(tái)上。使用RTW工具箱自動(dòng)將Simulink模型轉(zhuǎn)換成C語(yǔ)言代碼過(guò)程中的關(guān)鍵步驟如圖3所示,通過(guò)修改創(chuàng)建過(guò)程中所需要的各種配置文件和模板文件,可以實(shí)現(xiàn)對(duì)生成代碼過(guò)程、格式的控制[14]。
(1)Simulink提供一種圖形化的開(kāi)發(fā)環(huán)境,該環(huán)境可以看作是由模塊和子系統(tǒng)兩種要素組成的一種圖形化開(kāi)發(fā)語(yǔ)言。RTW可以將圖形化的仿真程序編譯成傳統(tǒng)編譯器可以進(jìn)行編譯的代碼。
(2)在代碼自動(dòng)生成的初始階段,首先Matlab內(nèi)建函數(shù)對(duì)搭建的Simulink模型文件Model.mdl進(jìn)行解析,分析其中的模塊、子系統(tǒng)結(jié)構(gòu),以及它們之間的相互連接關(guān)系,然后進(jìn)行組合編碼,生成Model.rtw中間描述文件。
(3)目標(biāo)語(yǔ)言編譯器(TLC)對(duì)Model.rtw文件進(jìn)行解析,然后根據(jù)系統(tǒng)目標(biāo)文件ert.tlc、模塊目標(biāo)文件grt.tlc、目標(biāo)語(yǔ)言編譯函數(shù)中的指令生成C語(yǔ)言代碼,其中g(shù)rt.tlc文件和ert.tlc文件分別控制著代碼的生成特性,以及單個(gè)模塊代碼的生成。因此可以通過(guò)修改grt.tlc文件、ert.tlc文件來(lái)生成與不同硬件平臺(tái)相匹配的專屬代碼。
(4)模板Make文件針對(duì)具體的仿真模型進(jìn)行標(biāo)記和擴(kuò)展控制控制專屬M(fèi)ake文件的生成。Model.mk文件的作用在于可以實(shí)現(xiàn)對(duì)代碼編譯鏈接的控制。因此修改Makefile文件或者直接修改Model.mk文件便可以使代碼能夠針對(duì)真實(shí)的硬件運(yùn)行環(huán)境進(jìn)行交叉編譯或在真實(shí)硬件平臺(tái)上直接進(jìn)行編譯。
(5)最終生成的程序由運(yùn)行接口、應(yīng)用程序組件兩個(gè)部分構(gòu)成,進(jìn)一步運(yùn)行接口根據(jù)是否與目標(biāo)運(yùn)行環(huán)境有關(guān)可以分為與環(huán)境有關(guān)的組件和與環(huán)境無(wú)關(guān)的組件兩個(gè)部分。其中與環(huán)境相關(guān)的組件在RTW工具箱提供的rt_main.c文件中實(shí)現(xiàn),文件中的主函數(shù)控制著整個(gè)仿真程序的定時(shí),創(chuàng)建任務(wù),安裝中斷句柄,啟動(dòng)數(shù)據(jù)記錄及錯(cuò)誤檢查。因此可以通過(guò)修改rt_main.c文件設(shè)置仿真模型的定時(shí)引擎,進(jìn)而控制整個(gè)仿真的執(zhí)行進(jìn)程。
3.2? ?Simulink模型的實(shí)時(shí)性擴(kuò)展方法
因?yàn)榘雽?shí)物仿真系統(tǒng)中仿真程序和真實(shí)的硬件之間有數(shù)據(jù)交互,所以需要保證二者在運(yùn)行中保持時(shí)間的同步,即要求半實(shí)物仿真系統(tǒng)具備實(shí)時(shí)性能力,而直接通過(guò)Simulink開(kāi)發(fā)的數(shù)學(xué)模型并不具備這樣的性能,因此需要對(duì)轉(zhuǎn)換后的Simulink程序進(jìn)行實(shí)時(shí)性擴(kuò)展。
基于Simulink的半實(shí)物仿真系統(tǒng)的實(shí)時(shí)性能可以使用時(shí)間同步精度和最小仿真步長(zhǎng)兩個(gè)參數(shù)來(lái)進(jìn)行表征。時(shí)間同步精度為理想仿真時(shí)間與實(shí)際仿真時(shí)間之間的最大差值,如式(1)所示。該值受每一個(gè)仿真幀的同步精度和整個(gè)仿真過(guò)程中的累計(jì)同步精度誤差影響,其值越小,表明系統(tǒng)的同步特性越好,反之則越差。最小仿真步長(zhǎng)表示整個(gè)仿真過(guò)程中最大仿真幀的實(shí)際計(jì)算時(shí)間,該值代表了仿真計(jì)算的速度,如式(2)所示。要求最小仿真步長(zhǎng)應(yīng)小于等于設(shè)置的仿真步長(zhǎng),保證每一個(gè)仿真幀的計(jì)算都可以在設(shè)置的步長(zhǎng)內(nèi)計(jì)算完畢。
半實(shí)物仿真應(yīng)用按照設(shè)定的步長(zhǎng)循環(huán)迭代運(yùn)算,組合式儀器平臺(tái)的硬件已經(jīng)為計(jì)算速度提供了保證,因此為進(jìn)一步提高系統(tǒng)的實(shí)時(shí)性能,就需要在每個(gè)仿真幀計(jì)算結(jié)束后進(jìn)行等待,控制每一個(gè)仿真幀的同步精度。但多次延遲等待后,不可避免會(huì)產(chǎn)生累計(jì)誤差,所以還應(yīng)該從整個(gè)仿真過(guò)程進(jìn)行考慮。首先計(jì)算實(shí)際已仿真時(shí)間除以仿真步長(zhǎng)的余數(shù),獲取該仿真幀計(jì)算的實(shí)際消耗時(shí)間;然后將仿真步長(zhǎng)與計(jì)算得到的余數(shù)作差,即可得到模型運(yùn)行到此時(shí)的時(shí)間同步精度;最后通過(guò)調(diào)用延遲函數(shù),用二者之間的時(shí)間差值作為同步等待補(bǔ)償,將每個(gè)仿真幀運(yùn)行結(jié)束后的實(shí)際仿真時(shí)間和理想仿真時(shí)間向前對(duì)齊,進(jìn)行時(shí)間同步?;谝陨纤悸?,設(shè)計(jì)了實(shí)時(shí)性擴(kuò)展框架,其流程如圖4所示。
3.3? ?Simulink模型的實(shí)時(shí)性擴(kuò)展實(shí)現(xiàn)
若要實(shí)現(xiàn)圖4中的實(shí)時(shí)性擴(kuò)展功能就需要對(duì)自動(dòng)生成的代碼進(jìn)行改造后再進(jìn)行編譯執(zhí)行。通過(guò)對(duì)RTW代碼自動(dòng)生成過(guò)程的分析,已經(jīng)知道系統(tǒng)是通過(guò)rt_main.c文件來(lái)實(shí)現(xiàn)定時(shí)引擎調(diào)用、仿真模型執(zhí)行,以及中斷調(diào)用返回等控制功能的。因此可以對(duì)該文件進(jìn)行適當(dāng)修改,通過(guò)C語(yǔ)言實(shí)現(xiàn)上述實(shí)時(shí)性運(yùn)行框架后再將其加入rt_main.c文件中實(shí)現(xiàn)對(duì)仿真程序的實(shí)時(shí)性擴(kuò)展。同時(shí)引入POSIX(可移植操作系統(tǒng)接口)高精度定時(shí)器,保證仿真系統(tǒng)的高實(shí)時(shí)性。實(shí)時(shí)性擴(kuò)展實(shí)現(xiàn)流程如圖5所示。其中POSIX定時(shí)器封裝在getCurrentTime()函數(shù)中,實(shí)時(shí)性擴(kuò)展實(shí)現(xiàn)的關(guān)鍵代碼如下:
double stepTime=RT_MDL->Timing.stepSize0;
rt_OneStep();
getCurrentTime(&sec,&u_sec);
double fst=sec+u_sec/1000000.0;
double Tsynca=fst%stepTime;
double dely=stepTime-Tsynca;
4? 目標(biāo)程序生成及文件傳輸(Object program generation and file transfer)
4.1? ?目標(biāo)程序生成
對(duì)主函數(shù)進(jìn)行實(shí)時(shí)性擴(kuò)展以后,還需要?jiǎng)?chuàng)建主函數(shù)頭文件并引入主函數(shù)中,頭文件中包括實(shí)時(shí)主函數(shù)文件中需要的宏定義,對(duì)調(diào)用的外部函數(shù)進(jìn)行聲明,以及仿真程序的頭文件Model.h,使實(shí)時(shí)主函數(shù)可以調(diào)用Model.c中實(shí)現(xiàn)的方法,將實(shí)時(shí)主函數(shù)和仿真程序連接為一個(gè)整體。全部改造工作完成后,將程序文件下載至組合式儀器平臺(tái)中。但是組合式儀器平臺(tái)中并不包含模型運(yùn)行時(shí)的諸多依賴文件,因此還需將模型依賴文件一同打包下載至組合式儀器平臺(tái),并放置在組合式儀器平臺(tái)的固定文件目錄中,這些依賴文件包括Matlab提供的文件,POSIX高精度時(shí)鐘實(shí)現(xiàn)文件,以及組合式儀器平臺(tái)各種擴(kuò)展接口的通信組件。當(dāng)建立的半實(shí)物仿真應(yīng)用需要其中的某些文件時(shí),可以直接調(diào)用。下載完畢后還需要繼續(xù)對(duì)程序文件進(jìn)行編譯鏈接才可以生成在組合式儀器平臺(tái)上運(yùn)行的程序,這個(gè)過(guò)程中最重要的是梳理目標(biāo)程序中需要用的頭文件和C文件,建立Makefile文件,然后通過(guò)make指令生成最終的目標(biāo)程序文件,并啟動(dòng)仿真程序。程序生成流程如圖6所示。