付 瑋,王婧宇,吳中華
(西北工業大學 陜西 西安 710129)
控制系統的穩定性、可靠性是系統能否安全運行的基本前提。隨著當今先進控制技術的不斷更新與發展,控制系統變得越來越復雜,控制系統的仿真也提出了更高的要求,不僅要求計算機操作系統具有強大的通用功能,還要求其具有優秀的實時性。
因此,本文提出一種基于RTX+Matlab+LabWindows/CVI的仿真平臺架構。對某汽車行駛控制系統進行了實時仿真。建立仿真模型后,通過自主研發Real-Time Work Shop內相關編聯文件與目標語言文件,可將simulink仿真模型轉換成可移植的RTX代碼,該程序具有高實時性,可達到預期實時要求。數據顯示等非實時任務由Win32進程完成,該程序由LabWindows/CVI編寫,在RTSS進程和Win32進程間建立IPC通信和同步機制,以實現兩者之間的數據交換、互斥與同步。
RTX采用HAL擴展技術為Windows操作系統安裝實時子系統RTSS。為了保證RTSS線程的實時性,RTX增加了在Windows和RTX線程間的中斷隔離,當RTSS線程運行時,屏蔽所有Windows控制中斷。RTSS有其獨立的進程線程管理、進程間通訊、中斷、時鐘、I/O管理機制。具有128個優先級,對應Win32的32個線程優先級[1]。
RTSS的線程優先于所有Windows線程,提供了對IRQ、I/O、內存的精準控制,能確保實時任務的可靠執行。通過高速的IPC通信和同步機制,RTX進程可方便地實現與Windows應用程序之間的數據交換[1]。RTX只需安裝在Windows系統下,減少了仿真成本,而且RTX和Windows系統采用進程間通信,大大提高了實時通信的穩定性。
同時RTX擁有3個精度達1 ms的時鐘,最小定時周期可分別達到100、200、500 ms。事件的精確執行在實時系統中是相當嚴格的。RTX內核利用搶占式調度方式,在保證臨界線程的上下文切換的同時還確保線程切換時間保持在500 ns到2μs范圍內。
RTX的內存分配都在非分頁內存池內,以保證其進程在運行過程中不會被置換出內存,從而確保了對外部事件響應的確定性,避免了使用虛擬內存因缺頁產生的延遲。RTSS運行時只占用250 kB的內存,內存占用率極低[1]。同時,RTX對Windows系統在Ring 0級進行了穩定的、高性能的實時擴展,同時支持30 kHz持續穩定的中斷觸發。實時進程運行時,屏蔽一切Windows中斷和錯誤報告,由此去掉了由線程切換、中斷調度而產生的延遲[1]。

表1 RTX與WIN32的優先級對照Tab.1 Comparison of the priority between RTX and WIN32

圖1 RTX體系結構Fig.1 Configuration of RTX system
RTW(Real-Time Workshop)是MathWorks公司提供的基于MATLAB和Simulink的一種工具,它能直接從Simulink的模型中產生針對應用優化的、可移植的代碼,并根據目標配置自動生成多種環境下的程序[2,6,11]。該生成過程包含如下4個步驟:
1)創建、分析Simulink模型并對模型描述文件進行編譯。
2)通過目標語言編譯器TLC轉換模型并生成代碼。
3)程序聯編文件(makeflie)的生成。
4)在自定義程序創建文件的控制下,由聯編實用程序生成可執行程序。
由于RTW暫時還沒有支持RTX的目標語言文件與相關編聯文件,所以該功能需根據此流程自行編寫。

圖2 RTW生成C代碼流程圖Fig.2 Ccode generation process in RTW
通過編寫相關的model.tlc與model.tmf文件,配置相關參數,生成針對RTX相應的實時性代碼。其中,model.tlc文件存儲simulink的相關配置信息與目標語言信息等參數,model.tmf則為生成文件model.mk的模板,RTW根據要求對model.tmf中的參數進行設置,最終生成model.mk與model.mak文件[9]。其中model.mak文件為makefile制作文件,可在VC6.0中直接打開并轉換成.dsp工程文件。
創建rtx.tmf文件,編寫代碼,包括 MAKECMD=nmake,HOST=PC,BUILD=yes,SYS_TARGET_FILE=rtx.tlc 等。 同時,創建編寫相應rtx.tlc文件,部分注釋及代碼如下:
%%SYSTLC:Generic Real-Time Target
%% TMF:rtx_default_tmf MAKE:make_rtw EXTMODE:ext_comm
%%SYSTLC:Create Visual C/C++Solution File for the"rtx"target
%% TMF:rtx.tmf MAKE:make_rtw EXTMODE:ext_comm
%%$RCSfile:rtx.tlc,v$
...
rtwoptions (9).makevariable ='TMW_EXTMODE_TESTING';
rtwoptions(9).tooltip= ['Internal testing flag for Simulink external mode'];
使用LabWindows/CVI構架平臺,它是National Instruments公司推出的交互式C語言開發平臺。他的集成化開發環境、交互式編程方法、函數面板和豐富的庫函數大大增加了語言的功能,為熟悉C語言的開發人員提供了一個理想的軟件開發平臺[7-8]。
該平臺系統在LabWindows/CVI環境下運行,應用控件包括NUMERIC控件,COMMAND BUTTON控件,LED控件,AsyncTimer異步時鐘控件,STRIPCHART控件等。
該平臺使用多媒體定時器實現實時數據采集與顯示,它使用自己單獨的線程來調用一個回調函數,并且該線程優先級高,每隔一定時間就發送一個消息而不管其它消息是否已執行完,采用多媒體定時器可以達到1ms的最小時間精度[2,10,3]。所以,利用多媒體定時器產生定時中斷來顯示數據完全滿足仿真系統的實時性要求。定時器中段代碼如下:
int CVICALLBACK TIME(int panel,int control,int event,void
*callbackData,int eventData1, int eventData2)
{
if(pdata->endflag==0)
{SetCtrlVal(panelHandle,PANEL_NUMERIC1,pdata->Out);PlotStripChart(panelHandle,PANEL_STRIPCHART,&(pdata->Out),1,0,0,VAL_DOUBLE)
;
number++;
SetCtrlVal(panelHandle,PANEL_NUMERIC1_2,number);}
else SetAsyncTimerAttribute (timerhandle,ASYNC_ATTR_ENABLED,0);
return 0;}
仿真數據采集和顯示平臺如圖3所示。

圖3 仿真數據采集和顯示平臺Fig.3 Data collection and manifestation platform
通過編寫相關文件后,可通過RTW直接生成高實時性的RTSS代碼,該代碼中使用RtCreateTimer()函數創建定時器,使用RtSetTimerRelative()函數設置定時器的時間相關參數,精度可以達到0.1微秒(1×10-7s)。將任務放在定時器中斷函數中即可實現仿真的每一幀的高精度時間控制。大致程序如下:
RtCreateTimer(…,TimerHander,…);//創建時鐘
RtSetTimerRelative(…,FrameTime,…);//設置時鐘參數
Void RTFCNDCL TimerHandler(PVOID context)//定時中斷函數
{
rt_OneStep(S);
pdata->Out=rtY.Out1;
}
RTSS支持IPC對象,這使得實時程序與非實時程序之間的通訊和同步成為可能[1]。RTSS與WIN32進程通信可使用共享內存(Shared Memory Object)、信號量(Semaphore Object)、事件(Event Objects)和互斥(Mutex Objects)。與Win32下IPC不同的是RTSS的IPC對象都分配在不分頁內存池,而且支持等待的優先級。當有多個不同優先級的RTSS線程在等待,系統可以保證按照線程優先級的高低來獲取資源[1]。仿真流程圖如圖4所示。

圖4 仿真流程圖Fig.4 Process diagram of simulation
通過創建相應結構體,放入共享內存中可進行RTSS與WIN32進程通信[4]。該結構體包含了所有需要在WIN32進程中顯示的數據與信號量,結構體部分信息如下:
typedef struct
{
double Out;
int endflag;
...
double Gain;
double time;
}*PDATA;
RTX提供了特有的API函數RtCreateSharedMemory()和RtOpenSharedMemory()來創建和打開共享內存與Win32進程進行數據交互[5]。本仿真程序通過在Win32進程中創建共享內存并且在RTSS進程中打開共享內存進行數據交互。并且通過 RtCreateEvent()與 RtWaitForSingleObject()進行 Win32進程與RTSS進程之間相互通信。
首先搭建某汽車行駛控制系統仿真模型,如圖5所示。
由于已經編寫過相關的制作文件和目標語言文件,所以可通過RTW直接生成針對RTX的實時代碼。配置相關參數后,生成代碼。產生vehicle_control.rtss文件用于實時仿真系統。
首先打開仿真數據采集和顯示平臺,進行與RTSS進程的鏈接,通過共享內存與RTSS通信。若連接成功,則可設置仿真時間與增益等相關參數。仿真步長設置為0.02 s,仿真時間設置為20 s。

圖5 汽車行駛控制仿真模型Fig.5 Simulation model of vehicle control

圖6 仿真結果顯示Fig.6 Manifestation of simulation result
仿真結果表明,該真系統具有相對較高的實時性,充分滿足了該汽車行駛控制系統仿真的實時性要求。與在WIN32環境下進行的Simulink仿真結果對比后可得出,該實時仿真平臺能精確地實時顯示仿真數據,有效的避免了因Simulink運行在Windows中的低實時性。對于一般實時仿真系統來說,該系統可以非常好的滿足實時性要求。
[1]張福凱.基于RTX的無人機飛行控制系統實時仿真[D].西安:西北工業大學,2013.
[2]郭朕凱,盧京潮.RTW在某型直升機飛控系統半物理仿真中的應用[J].火力與指揮控制,2009,34(12):160-165.GUO Zhen-kai,LU Jing-chao.Application of RTW in a helicopter flight control system hardware-in-the-loop simulation[J].Fire Control&Command Control,2009,34(12):160-165.
[3]于強,何寧,李亮,等.Windows下基于LabWindows/CVI 8.0的實時數據采集[J].工業控制計算機,2009,22(10):66-67.YU Qiang,HE Ning,LI Liang,et al.Real-time data acquisition based on Labwindows/CVI 8.0 under Windows[J].Industrial Control Computer,2009,22(10):66-67.
[4]陳向群,馬洪兵.現代操作系統[M].第3版.北京:機械工業出版社,2009.
[5]楊建和.基于LabWindows/CVI數據采集系統的設計[D].北京:北京郵電大學,2012.
[6]陳永春.從Matlab/Simulink模型到代碼實現[M].1版.北京:清華大學出版社,2002.
[7]史君成,張淑偉,律淑珍.LabWindows虛擬儀器設計[M].北京:國防工業出版社,2007.
[8]孫曉云.基于LabWindows/CVI的虛擬儀器設計與應用[M].第2版.北京:電子工業出版社,2010.
[9]鄭智琴.Simulink電子通信仿真與應用[M].1版.北京:國防工業出版社,2002.
[10]王曉東,尚耀星,吳帥.基于LabWindows/CVI和RTX的實時測控軟件設計[J].科技信息,2008(19):397-398.WANG Xiao-dong,SHANG Yao-xing,WU Shuai.Design of real-time control software with LabWindows/CVI and RTX[J].Science Technology Information,2008(19):397-398.
[11]賈秋玲,袁冬莉,欒云鳳.基于MATLAB7.x/Simulink/stateflow系統仿真、分析及設計[M].1版.西安:西北工業大學出版社,2006.