顏艷騰 , 葉 周 , 張 銳
(1.中國科學院 上海微系統(tǒng)與信息技術(shù)研究所,上海 200050;2.上海微小衛(wèi)星工程中心 上海 201203)
xPC目標是MathWorks公司提供和發(fā)行的一個基于RTW體系框架的附加產(chǎn)品,可將Intel80x86/Pentium計算機或PC兼容機轉(zhuǎn)變?yōu)橐粋€實時系統(tǒng),而且支持許多類型的I/O設(shè)備,用戶只需安裝相關(guān)的軟件、一個編譯器和I/O設(shè)備板,就可將一個PC兼容機作為實時系統(tǒng),來實現(xiàn)控制系統(tǒng)或DSP系統(tǒng)的快速原型化、硬件在回路中的測試和配備實時系統(tǒng)的功能[1-2]。xPC目標通過以太網(wǎng)連接或串口線連接來實現(xiàn)宿主機和目標機之間的通信[3]。然而xPC目標機顯示界面單一,基本不能人為操作,大大降低了目標程序的可操作性。而labview作為圖形化編程語言,具有編程效率高界面友好直觀的特點[4],LabVIEW能夠提供強大的外部接口能力,可以調(diào)用xPC目標的API實現(xiàn)對目標程序的操作,可以利用labview來編制宿主機的控制界面,具有一定的工程意義。
xPC目標是一種用于產(chǎn)品原型開發(fā),測試和配置實時系統(tǒng)的PC機解決途徑。xPC目標采用了宿主機-目標機的技術(shù)途徑,即“雙機”模式,宿主機和目標機可以是不同類型的計算機。其中,宿主機用于運行Simulink,而目標PC機則用于執(zhí)行所生成的代碼。xPC目標提供了一個高度減縮型的實時操作核,運行在目標PC機上,該實時核采用了32位保護模式。xPC目標通過以太網(wǎng)連接或串口線連接來實現(xiàn)宿主機和目標機之間的通信。顯示了快速原型化環(huán)境中xPC目標的使用情況。
圖1 雙機模式的xPC目標Fig.1 Dual mode of xPCtarget
xPC可實現(xiàn)在宿主機上設(shè)計、創(chuàng)建目標應用程序,然后在目標機上運行并測試目標應用程序。xPC目標的功能包括可對目標應用程序進行交互式的控制、獲取信號數(shù)據(jù)和實時地調(diào)整參數(shù)。
xPC目標實時仿真的基本步驟:
1)通過xPCTarget Explorer設(shè)置宿主機和目標機的通信機制,如通信協(xié)議設(shè)為TCP/IP,設(shè)置目標機的IP地址、子網(wǎng)掩碼、端口號等。
2)根據(jù)配置的xPC目標運行環(huán)境制作目標啟動盤,最為方便的是U盤啟動盤,引導成功后即可啟動xPC Target的實時內(nèi)核。
3)設(shè)置Simulink仿真模型的仿真參數(shù),其中必須設(shè)置的是Solver options為固定步長,在Real-Time Workshop中系統(tǒng)目標文件為xpctarget.tlc。編譯模型,得到后綴名為.dlm的已編譯文件。
4)啟動連接xPC目標,下載執(zhí)行應用程序。在宿主機使用xPCTarget Explorer或調(diào)用xPCTarget API函數(shù)連接目標機,下載已編譯的.dlm文件,啟動應用程序,即可實現(xiàn)宿主機對目標機的控制與遙測,如設(shè)置模塊參數(shù)和讀取輸出信號等。
2.1.1 API函數(shù)介紹
xPC目標為用戶創(chuàng)建自己的宿主機圖形界面程序提供了一組API函數(shù),這組API函數(shù)包括:處理宿主機/目標機通信的函數(shù);目標機程序管理函數(shù);數(shù)據(jù)記錄函數(shù);示波器管理函數(shù);信號監(jiān)視和參數(shù)調(diào)整函數(shù);錯誤處理和其他用途函數(shù)。xPC目標的API函數(shù)以兩種方式提供給用戶,動態(tài)鏈接庫(dynamic link library,DLL),對象組件模塊(component object model,COM)[5]。任何一種方式都可以用于創(chuàng)建控制目標機實時程序的用戶界面。
根據(jù)xPC外部接口程序調(diào)用流程可做如下歸類分析:
1)建立宿主機和目標機的通信連接。我們采用TCP/IP協(xié)議進行通信,通信函數(shù)為:int xPCOpenTcpIpPort(const char*ipAddress,const char*ipPort);注意函數(shù)返回一個正整數(shù)值,稱為port,若port值為非負整數(shù),則表明宿主機與目標機連接成功,并且作為連接句柄,后面的API函數(shù)都要用到該port值作為傳入?yún)?shù);若port值為-1,則表明連接失敗。
2)下載目標應用程序到目標機上。函數(shù)為:void xPCLoadApp(int port, const char*pathstr, const char*filename)。
3)啟動目標機上的目標應用程序。函數(shù)為:void xPCS tartApp(int port)。
4)監(jiān)控并記錄目標應用程序在目標機上的運行情況。這里包括設(shè)置目標應用程序運行參數(shù),監(jiān)測目標應用程序中信號,使用文件系統(tǒng)函數(shù)保存記錄數(shù)據(jù)等一系列函數(shù)。
2.1.2 設(shè)置目標機上應用程序參數(shù)
xPC目標為目標應用程序中每個可調(diào)的參數(shù)分配唯一的ID值,可以根據(jù)Simulink模型中參數(shù)所在的模塊名以及參數(shù)名獲取該參數(shù)在目標應用程序中分配的ID值。獲取指定參數(shù) ID 值的函數(shù)為:int xPCGetParamIdx (int port,const char*blockName,const char*paramName)。得到參數(shù)的ID值后就可以調(diào)用函數(shù) void xPCSetParam(int port, int paramIdx, const double*paramValue)完成目標應用程序參數(shù)的設(shè)置。
2.1.3 監(jiān)測目標機上應用程序中的信號
信號在Simulink模型中主要體現(xiàn)在輸出上,獲取目標機上目標應用程序信號的方法和調(diào)整參數(shù)類似,也需要獲得目標應用程序中指定信號的唯一ID值,調(diào)用的函數(shù)為int xPCGetSignalIdx(int port, const char*sigName)。 讀取單個信號值的函數(shù)為 double xPCGetSignal (int port, int sigNum),值得一提的是,信號可以批量獲取,對應函數(shù)為int xPCGetSignals(int port, int numSignals, const int*signals, double*values),此時應該傳入信號集ID的數(shù)組。
2.2.1 創(chuàng)建初始化DLL動態(tài)鏈接庫
xPC目標API是以DLL文件的形式提供的,所有的API函數(shù)都封裝在xpcapi.dll中,因此在調(diào)用API函數(shù)之前必須正確加載xpcapi.dll。xPC目標提供了在C程序中加載xpcapi.dll的C代碼源程序xpcinitfree.c,在該源程序中定義了初始化函數(shù)int xPCInitAPI(void)用于顯示加載 xPC目標 API DLL。程序在設(shè)計時需在初始化階段調(diào)用該函數(shù)加載DLL,結(jié)束時則需要釋放DLL,同樣在xpcinitfree.c中提供了釋放DLL的函數(shù) int xPCFreeAPI(void)。
Matlab只提供了用于初始化加載和釋放xPC目標API DLL的C語言接口頭文件xpcapi.h和C源代碼xpcinitfree.c,并沒有提供可供LabVIEW直接調(diào)用的DLL文件,因此我們首先需要利用現(xiàn)有資源編寫生成能夠?qū)崿F(xiàn)初始化加載和釋放xPC目標API DLL的DLL文件xPCInitFree.dll。本文在Visual C++6.0環(huán)境下建立支持xPC目標API調(diào)用初始化與資源釋放的動態(tài)鏈接庫。使用Visual C++6.0創(chuàng)建DLL的一般步驟為:新建一個MFC AppWizard(dll)工程,定義外部接口,編寫外部接口函數(shù)的實現(xiàn)。參考在源文件xpcinitfree.c中分別用于實現(xiàn)xpcapi.dll的加載和卸載函數(shù)int xPCInitAPI(void)和 void xPCFreeAPI(void),定義 2 個主要的動態(tài)鏈接庫接口xPCInitAPI和xPCFreeAPI。執(zhí)行加載操作的同時初始化xPC目標API定義的的常量,映射xPC目標API與C程序之間的數(shù)據(jù)類型,定義API中使用的數(shù)據(jù)結(jié)構(gòu);執(zhí)行卸載操作時恢復xPC目標API使用的常量的初始值,并注銷所使用的數(shù)據(jù)結(jié)構(gòu)類型。
2.2.2 啟動xPC目標
在使用xPC目標前,需要啟動xPC目標,一般通過USB啟動[6],在 Matlab命令行中鍵入 xpcexplr進入 xPC Target Explorer進行配置,如通信、多核支持等,生成DOS啟動鏡像,通過DOS啟動盤進行引導啟動。
圖示采用TCP/IP通信協(xié)議,IP地址和端口即為xPC目標啟動的IP地址和端口。
下面我們依照xPC調(diào)用API流程來設(shè)計labview程序。首先鏈接xPC目標,此時我們需要知道xPC目標機的IP及端口值(可以在制作xPC目標機啟動盤時設(shè)置)。
圖2 配置xPC目標Fig.2 Configuration of xPCtarget
圖3 xPC目標運行界面Fig.3 xPCtarget running interface
在labview面板找到調(diào)用庫函數(shù)節(jié)點,查找路徑互連接口→庫與可執(zhí)行程序→調(diào)用庫函數(shù)節(jié)點。設(shè)計連接xPC目標機的labview程序,如圖4所示。
圖4 連接xPC目標Fig.4 Connect the xPCtarget
依次設(shè)計下載目標應用程序、啟動目標應用程序、卸載目標應用程序、關(guān)閉xPC目標連接、釋放資源的基本流程實現(xiàn)LabVIEW調(diào)用xPC目標API函數(shù),并將各個流程模塊打包設(shè)計成子vi,完整labview程序設(shè)計如圖5所示。
此時便設(shè)計完成了一個基于labview的宿主機控制平臺。經(jīng)過實驗測試,完全可以實現(xiàn)來控制xPC目標程序的鏈接、下載、運行、信號監(jiān)測等一些列功能,并且可以在此基礎(chǔ)上通過調(diào)用不同API函數(shù)來實現(xiàn)對xPC目標程序更多的控制。
軟件的基本運行流程為:
1)配置目標機IP地址和端口,連接網(wǎng)絡(luò)
根據(jù)xPC目標機的IP地址及其端口,可以執(zhí)行連接網(wǎng)絡(luò)和斷開網(wǎng)絡(luò)的操作。首先確保上位機和下位機網(wǎng)絡(luò)接口的連接,并設(shè)置上位機IP地址和xPC目標IP地址在同一個局域網(wǎng)內(nèi),然后才能進行TCP/IP連接操作。后面涉及xPC目標的所有操作必須建立在宿主機和目標機的連接基礎(chǔ)上。
圖5 基于labview的宿主機控制程序Fig.5 Labview-based host control program
2)選擇待下載應用程序(.dlm),下載程序
Simulink實時框架模型通過C編譯會生成后綴名為dlm的編譯文件,目標機連接成功后,可選擇待下載的已編譯程序,執(zhí)行下載程序、運行程序、停止程序和卸載程序操作。
3)設(shè)置參數(shù)并運行程序
設(shè)置參數(shù)和獲取信號是xPC目標API提供的核心功能,調(diào)用相應的API函數(shù),我們只需要傳入?yún)?shù)模塊在Simulink程序模型中的路徑和參數(shù)值??梢栽谲浖性O(shè)置路徑常量,也可以通過UI輸入路徑。
4)數(shù)據(jù)遙測
數(shù)據(jù)遙測的方式包括讀取信號和示波器控制。獲取信號也是需要傳入?yún)?shù)模塊在Simulink程序模型中的路徑,遙測的數(shù)據(jù)可以通過文本和數(shù)據(jù)圖表實時顯示。示波器控制可為xPC目標添加目標示波器觀察信號,基本步驟為添加示波器、
添加新號和啟用示波器。
5)卸載程序并斷開網(wǎng)絡(luò)
在程序運行結(jié)束后,可以選擇卸載程序和斷開網(wǎng)絡(luò)。
該測試系統(tǒng)采用具有高速數(shù)據(jù)采集卡的便攜式測試計算機為硬件平臺,軟件設(shè)計采用模塊化設(shè)計思想本文介紹了xPC目標的雙機模式,以及模型仿真的具體步驟。詳細分析了xPC目標API函數(shù)的結(jié)構(gòu)與用途,研究了labview與xPC的接口問題,實現(xiàn)了通過labview調(diào)用xPC目標API函數(shù)的目的,并基于labview[7]設(shè)計某模型的xPC目標程序的控制軟件,實現(xiàn)了宿主機對目標機的遠程控制。這樣也彌補了xPC目標界面單一操作不友好的問題,可以充分有效的發(fā)揮xPC目標實時仿真系統(tǒng)的優(yōu)勢。
[1]吳劍,孫秀霞.采用MATLAB中的xPCTarget對硬件進行操作[J].現(xiàn)代電子技術(shù),2002(4):59-60.WU Jian,SUN Xiu-xia.Hardware practised with matlab of xPCtarget[J].Modern Electronics Technique,2002(4):59-60.
[2]張江濱,姚輝,楊曉萍.構(gòu)建基于XPC目標的實時仿真測試系統(tǒng)[J].水利水電技術(shù),2005,36(1)70-72.ZHANG Jiang-bing,YAO Hui,YANG Xiao-Ping.A real-time simulation testing systembased on XPC target[J].Water Resources And Hydropower Engineering,2005,36(1)70-72.
[3]王超,王仕成,劉志國.基于Matlab/xPC Target的實時仿真系統(tǒng)研究[J].控制工程,2007(7):165-167.WANG Chao,WANG Shi-cheng,LIU Zhi-guo.Research on beal time simulation system based on matlab/xPC target[J].Control Engineering of China,2007(7):165-167.
[4]侯國屏,王坤,葉齊鑫,等.labview7.1編程與虛擬儀器設(shè)計[M].北京:清華學出版社,2005.
[5]朱野,王旭永,陶劍峰,等.實時控制系統(tǒng)平臺xPC與labview接口分析及應用[J].上海交通大學學報,2008,42(2):266-269.ZHU Ye,WANGXu-yong,TAO Jian-feng,et al.Analysis and utilization of interface between xPC target and LabVIEW[J].Journalof ShangHaiJiaoTongUniversity,2008,42(2):266-269.
[6]江紹明,畢效輝.采用U盤制作xPC目標啟動盤[J].自動化與儀表,2008(6):53-56.JIANG Shao-ming,BI Xiao-Hui.Creation of an xPC target boot based on USB flash disk[J].Process Automation Instrumentation,2008(6):53-56.
[7]姚麗,劉東東.基于LabVIEW的數(shù)據(jù)采集與信號處理系統(tǒng)設(shè)計[J].電子科技,2012(5):79-81.YAO Li,LIU Dong-dong.Design of the data acquisition and signal processing system based on LabVIEW[J].Electronic Science and Technology,2012(5):79-81.