?

基于xPC和CVI的實時仿真系統設計實現

2012-01-18 12:03陳懷民趙會超
電子設計工程 2012年24期
關鍵詞:宿主機機上網卡

陳懷民,趙會超

(西北工業大學 無人機特種技術重點實驗室,陜西 西安 710065)

如何建立界面友好、易于操作且實時性高的實時控制系統是一個日益受到廣泛關注、值得深入探討的問題。利用MATLAB的xPC平臺,采用“雙機模式”(宿主機—目標機)開發實時控制系統是一種可選的方式。其中,宿主機執行用戶管理程序,提供用戶界面保證了易用性。目標機執行實時應用程序,保證應用程序執行的實時性。但該方法無法脫離MATLAB環境形成獨立的宿主機程序,且其用戶界面單一難以滿足用戶的多樣性需求,影響了在工程實踐中的推廣應用。

文中分析了xPC Target的應用程序接口(Application Programming Interface,API)和 LabWindows/CVI的外部程序接口。通過在LabWindows/CVI中加載xPC的動態鏈接庫實現了對xPC的API的調用?;诘讓覣PI,在LabWindows/CVI環境下建立了可以在Windows平臺上獨立運行的應用程序作為xPC平臺宿主機的人機接口。該方法不僅充分利用了xPC平臺實時性高的優點,而且形成了不依賴MATLAB的獨立的宿主機程序。同時,采用LabWindows/CVI提供的專業虛擬儀器控件編制宿主機程序,大大提供了程序設計效率,應用軟件界面美觀友好,操作簡單靈活。

1 開發環境簡介

xPCTarget是美國MathWorks公司提供和發行的一個基于RTW體系框架的附加產品,可將Intel80x86/Pentium計算機或PC兼容機轉變為一個實時系統,而且支持多種類型的I/O設備板(包括ISA和PCI兩種類型)[1]。xPCTarget采用宿主機-目標機的雙機模式,宿主機用于運行控制臺程序,目標機用于執行RTW生成的實時代碼。xPCTarget提供了一個高度減縮的實時內核,運行在目標機上,該實時內核采用32位保護模式。xPCTarget通過以太網或串口實現宿主機和目標機直接之間的通信。

LabWindows/CVI是National Instrument公司開發的完全ANSI C開發環境,將功能強大、使用靈活的C語言平臺與用于數據采集、分析和顯示的測控專業工具有機結合起來。它的交互式開發平臺、交互式編程方法,豐富的功能面板和函數庫大大增強了C語言的功能,使設計者能以最快的速度設計,調試和開發實際的系統[2]。此外,LabWindows/CVI還具有強大的網絡通信數據傳輸能力,它提供了基于UDP通信協議的網絡數據傳輸API函數,實現了高效、可靠的網絡數據通信。

2 系統搭建的基本原理

2.1 系統總體架構

該系統采用宿主機—目標機的雙機模式。宿主機執行LabWindows/CVI建立的非實時用戶界面,實現目標應用程序的下載與數據的處理和顯示,通過調用xPC的API實現對目標應用程序的監測和控制。目標機實時執行目標應用程序,實現模型的實時解算,通過UDP回傳目標應用程序的信號數據。在xPC平臺下,宿主機和目標機可利用串口或網卡實現通信。同串口連接方式相比,網卡模式具有傳輸速度快、傳輸距離遠的特點。另外,網卡模式還可連接到局域網上,使多臺PC機加入到xPC實時仿真系統,故而通常采用網卡連接方式。系統架構如圖1所示。

圖1 系統架構Fig.1 System structure

2.2 xPC Target用戶接口

xPCTarget提供了8種用于控制目標應用程序的用戶接口方式,分別為:

1)Matlab命令行;

2)含目標機示波器的Simulink模式;

3)web瀏覽界面;

4)xPC目標管理器;

5)Simulink外部模式;

6)目標機命令行;

7)利用xPCTarget的API建立監控程序;

8)利用xPCTarget的COM API建立監控程序;

其中,方式 1)2)3)4)5)只能在 MATLAB 環境中運行,無法建立獨立的宿主機應用程序。方式6)直接在目標機上進行控制和顯示,易用性差且操作界面不友好。方式7)、8)可在其他設計平臺上調用xPC的API設計獨立的宿主機應用程序。xPC的API和COM API在完成對目標機的控制上并無本質區別,兩者均是通過動態鏈接庫的形式提供API函數以完成控制功能。文中采用使用xPC的API的方法實現宿主機監控程序。

2.3 LabWindows/CVI外部程序接口

LabWindows/CVI支持對兼容編譯工具開發的外部模塊的使用,也能夠開發模塊供外部編譯工具使用。LabWindows/CVI開發環境支持的常見外部模塊接口,包括以下幾種:目標代碼文件(*.obj)、靜態庫(*.lib)、動態鏈接庫(*.dll)。 其中最常用的方法是以LabWindows/CVI編寫主程序,使用其他開發工具編寫DLL(Dynamic Link Library),再將DLL加入到LabWindows/CVI系統中使用[3]。文中通過加載xPC的動態鏈接庫來實現對其API函數的調用。

2.4 LabWindows/CVI中調用xPC的API

為實現在LabWindows/CVI下對xPC Target的API的調用,首先在LabWindows/CVI環境下建立一個項目文件,然后在該項目文件根目錄下添加xpcapi.dll,xpcapi.h,xpcapiconst.h,xpcinitfree.c 4個文件。其中 xpcapi.dll是xPCTarget提供的供其他程序調用的動態鏈接庫,在調用API函數之前必須正確加載該動態鏈接庫。xpcapi.h中定義了xPC Target的API函數庫和所需的數據結構。xpcapiconst.h中定義了程序運行過程中的錯誤代號、可供使用的Scope數等常量。其中部分錯誤代碼與LabWindows/CVI的錯誤代碼沖突,需要更改xpcapiconst.h文件中相應的錯誤代碼。xpcinitfree.c中定義了int xPCInitAPI(void)用于程序設計的初始化階段顯式加載xpcapi.dll,定義了 void xPCFreeAPI(void)用于程序結束時釋放xpcapi.dll。

xPC Target的API包含了一系列可供C程序調用的函數。以下依據在程序設計中的順序介紹這些API。

1) int xPCOpenTcpIpPort (const char*ipAddress, const char*ipPort); int xPCOpenSerialPort (int comPort, int baudRate)。建立目標機和宿主機之間的通信聯系。xPC提供了兩種通信方式:網卡通信和串口通信。前者用于建立網卡通信,后者用于建立串口通信。

2) void xPCLoadApp (int port, const char*pathstr, const char*filename)。下載目標應用程序到目標機上。在每次目標應用程序運行之前都需要從宿主機下載到目標機上。

3)void xPCStartApp(int port)。啟動目標機上的目標應用程序。此函數使宿主機能夠控制目標機上目標應用程序的啟動時間。

4)void xPCStopApp(int port)。停止目標機上的目標應用程序。

5)void xPCUnloadApp(int port)。 卸載目標機上的目標應用程序。在運行void xPCStopApp(int port)后,目標應用程序依然駐留在目標機內存中,可通過void xPCStartApp(int port)重新啟動應用程序。如果需要更換應用程序或結束仿真,則調用此函數以卸載目標應用程序。

6)void xPCClosePort(int port)。 關閉目標機和宿主機的通信聯系。無論是網卡通信還是串口通信均使用此函數關閉通信連接。

3 系統實現

3.1 xPC目標應用程序

為了實現脫離MATLAB環境這一目的,需要預先生成可執行的xPC目標應用程序(一個后綴名為dlm的文件)。xPC目標應用程序是RTW從Simulink模型生成的,可實時地運行在無任何操作系統的普通PC機上。開發過程為:先創建Simulink模型,設置模塊參數和采樣速率等仿真參數,進行模型的非實時仿真,然后由RTW、xPC Target和C代碼編譯器生成可在目標機上運行的目標應用程序。xPC只支持定步長實時仿真,因此在設置仿真參數時,解算器類型應選擇Fixed-step。

3.2 LabWindows/CVI程序設計

作為C語言編程環境,LabWindows/CVI可在程序中直接調用xPC Target提供的API函數。在創建工程后,可首先建立用戶界面文件并放置各種控制和顯示控件,包括command button,numeric,Graph 等控件。 借助 LabWindows/CVI提供的豐富的虛擬儀器控件可建立美觀友好、易于操作的人機界面。完成用戶界面設計后,LabWindows/CVI可自動生成程序框架和缺省消息處理函數,只要在這些函數中添加實現功能所需代碼即可完成程序的設計。具體操作如下:在用戶界面窗口菜單中,選擇Code/Generate/All Code,點擊OK即可生成程序框架,進入代碼編輯窗口,添加代碼完成程序設計。在2.4節中已經介紹了如何在LabWindows/CVI中加載xPC的動態鏈接庫,加載動態鏈接庫之后便可在LabWindows/CVI中直接調用xPC的API完成特定功能。部分程序代碼示意如下。

xPCInitAPI();

port=xPCOpenTcpIpPort(ipAddress, ipPort);

xPCLoadApp(port, “.”, “x650_cld_nl_inc_OK”);

……

id_1=xPCGetParamIdx(port, “pilot/hcmd”,“Value”);

xPCSetParam(port, id_1, &value_1);

id_2=xPCGetSignalIdx(port,signal);

sig=xPCGetSignal(port, signalID);

……

xPCStopApp(port);

xPCUnloadApp(port);

xPCFreeAPI (void);

3.3 在線調參

進行實時仿真時,需要根據實驗結果不斷調整模型參數和初始仿真條件,這將造成源程序的重新編譯和下載,帶來不必要的工作量[4]。因此,實時調整和初始化目標應用程序的參數就具有重要意義。xPCTarget允許在目標應用程序運行時或兩次運行之間改變模型參數并下載至目標機。這樣就無需重新編譯鏈接生成可執行的目標應用程序,便可以改變目標應用程序的參數[5]。

在xPC目標應用程序中為每一個可調參數分配唯一ID,要想修改某參數必須首先獲得其ID。xPCTarget提供了獲得參數 ID的 API函數,int xPCGetParamIdx (int port,const char*blockName,const char*paramName)。獲得需調參數的ID后就可以調用void xPCSetParam (int port,int paramIdx,const double*paramValue)來完成目標應用程序參數調整。

文中通過解析XML文件的方式實現目標應用程序的初始化。具體方法為:預先將參數信息以特定格式寫入XML文件,在目標應用程序加載完成后,解析XML文件得到參數信息,通過調用xPCSetParam實現參數的初始化。這樣做的優點是提高程序的通用性,不必對源程序重新編譯和下載,通過修改XML文件內相應參數信息便能完成不同初始化條件的程序加載。另外,在解析XML文件的同時,可使相應的參數信息顯示在LabWindows/CVI建立的人機界面上,便于用戶了解初始化的完成情況,而且用戶可在程序運行時對參數進行實時調整。

另外還有一些設置、監控目標應用程序在目標機上運行參數的函數。主要有:設置目標應用程序采樣時間的函數:void xPCSetSampleTime (int port, double ts);獲取目標應用程序采樣時間的函數:double xPCGetSampleTime (int port);設置目標應用程序停止時間的函數:void xPCSetStopTime(int port, double tfinal)。

3.4 信號跟蹤

信號跟蹤是指在目標應用程序實時運行中獲取信號并使其可視化的過程。在xPC平臺下,用戶可通過以下3種方式實現對信號的跟蹤[6]。

1)使用xPC的目標管理器實現信號跟蹤;

2)使用MATLAB命令實現信號跟蹤;

3)使用xPCTarget的示波器模塊實現信號跟蹤;

其中,前兩種方法都無法脫離MATLAB環境實現對信號的跟蹤顯示。第三種方法可以脫離MATLAB環境,但只能在目標機上實現信號的跟蹤顯示。為此,文中提出了一種新的信號跟蹤顯示的方法。

首先,在建立目標應用程序的Simulink模型時將需要跟蹤顯示的信號連接至一個xpcudpbytesend模塊,并設置相應參數(宿主機IP地址、宿主機端口號和采樣頻率)。此模塊可通過UDP向指定的宿主機發送信號數據。

其次,在CVI主控程序[7]中調用UDP接收函數UDPRead,接受目標機通過UDP上傳的信號數據。為了能夠及時無誤、不受用戶操作干擾的接收信號數據,建議開辟一個獨立線程來接收UDP數據。

最后,在用戶界面上顯示信號的實時曲線。為了能夠準確連續地顯示信號的實時曲線,在CVI中采用Graph控件實現示波器功能,同時利用異步定時器定時刷新示波器的顯示。在LabWindows/CVI中,異步定時器是在獨立的線程中工作,因此能夠更好的保證曲線顯示的連續性和準確性。

另外,xPC還提供了直接讀取需監測信號在采樣點的實時值的函數。和調整參數的方式類似,讀取監測信號在采樣點的實時值需要獲得目標應用程序中需監測信號的ID,函數為:int xPCGetSignalIdx (int port, const char*sigName)。 獲得需監測信號的ID后就可以調用 double xPCGetSignal(int port,int sigNum)獲得該信號的當前值。

4 仿真結果

根據上述設計和實現方法,構建了基于xPC和LabWindows/CVI的實時仿真系統。為驗證系統性能,對四旋翼無人機模型進行了實時仿真實驗。宿主機采用Pentium4處理器的普通PC機,目標機采用研華Advantech610工控機。宿主機和目標機之間采用網卡通信,選用Intel82559網卡。仿真結果如圖2、圖3所示。

圖2 LabWindows/CVI建立的人機交互界面Fig.2 User interface based on LabWindows/CVI

圖3 目標機示波器顯示的仿真結果Fig.3 Simulation results on xPCtarget’s scope

實驗結果表明,該系統具備仿真步長1 ms,數據通訊周期20 ms,顯示更新周期20 ms的實時仿真能力,同時可實現參數的在線調整和信號跟蹤顯示。

5 結束語

文中系統分析了xPC Target的用戶接口和LabWindows/CVI的外部程序接口。通過在LabWindows/CVI中加載xPC的動態鏈接庫實現了對xPC的API的調用?;诘讓覣PI函數開發主控臺仿真控制軟件,使宿主機可脫離MATLAB環境實現獨立的控制臺程序。該方法既能有效發揮xPCTarget的實時性優勢,又能充分利用LabWindows/CVI豐富的專業虛擬儀器控件。同時該方法實現了目標應用程序的在線調參和信號的跟蹤顯示,為xPC平臺下的實時控制策略在工程實踐中推廣應用提供了有益的參考。

[1]王先澤,劉志勤,陳懷民,等.基于xPC目標的飛控系統半實物實時仿真[J].科學技術與工程,2007(21):5609-5613.WANG Xian-ze,LIU Zhi-qin,CHEN Huai-min,et al.Realtime simulation of semi-hardware are in the loop with flight control system based on xPC target[J].Science Technology and Engineering,2007(21):5609-5613.

[2]王曉東,尚耀星,吳帥.基于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.

[3]劉立月,謝昕,劉覺夫.基于LabWindows/CVI動態鏈接庫的VC接口實現[J].微計算機信息,2006(10-1):190-192 LIU Li-yue,XIN Xin,LIU Jue-fu.Interface implementation of VC Based on LabWindows/CVI’s DLL [J].Control&Automation,2006(10-1):190-192.

[4]趙斌,周軍,盧曉東.基于xPCTarget的飛行器半實物仿真系統研究[J].計算機測量與控制,2011(19):625-628 ZHAO Bin,ZHOU Jun,LU Xiao-dong.Hardware in loop simulation system for vehicle based on xPC target[J].Computer Measurement&Control,2011(19):625-628.

[5]王爽心,王玎婷,楊輝,等.基于xPC目標的液壓疲勞控制系統半實物實時仿真[J].儀器儀表學報,2006(6):567-569.WANG Shuang-xin,WANG Ding-ting,YANG Hui,et al.Hydraulic fatigue control systems in real-time simulation based on xPC target environment with semi-hardware in the loop[J].Chinese Journal of Scientific Instrument,2006(6):567-569.

[6]進兵,黃一敏.基于xPC的無人機飛行控制系統的快速原型設計[J].系統仿真學報,2008(9):479-482.JIN Bing,HUANG Yi-min.Rapid prototype design for flight control system of UAV based on xPC[J].Journal of System Simulation,2008(9):479-482.

[7]施先旺,王鵬武.發動機工況實時調節軟件設計[J].火箭推進,2012(5):70-76.SHIXian-wang,WANGPeng-wu.Design of real-time regulation software for engine power[J].Journal of Rocket Propulsion,2012(5):70-76.

猜你喜歡
宿主機機上網卡
嵌入式計算機軟件測試關鍵技術研究
Server 2016網卡組合模式
機上上網,開啟乘機新時代
虛擬網絡實驗室在農村職校計算機網絡技術教學中的應用研究
挑戰Killer網卡Realtek網游專用Dragon網卡
RHEL7 Network Teaming(網卡綁定)配置與測試
USB故障又一原因
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合