李占麗 史曉萌 高琳



摘 ?要:文章介紹了基于HLA的仿真系統的開發過程,重點說明了基于VR-Link的聯邦成員的開發過程和開發過程中需要注意的問題。針對Matlab仿真模型,設計了適配器,實現了Matlab仿真模型與HLA/RTI的數據交互,可以對類似的HLA應用開發起到借鑒作用。
關鍵詞:HLA;VR-Link;Matlab適配器
中圖分類號:TP391.9 ? ? ?文獻標志碼:A ? ? ? ? 文章編號:2095-2945(2020)02-0085-03
Abstract: This paper introduces the development process of HLA-based simulation system, the development process of federate base on VR-Link and the problems are emphasized. For Matlab simulation model, the adapter is designed, to realized the data interaction between Matlab simulation model and HLA/RTI, It can be used for reference in similar HLA applications.
Keywords: HLA; VR-Link; Matlab adapter
1 概述
高層體系結構HLA(High Level Architecture)是美國國防部提出的一個分布式仿真技術框架,它的主要目的是解決仿真應用的互操作性和仿真資源的可重用性問題。它通過運行支撐環境RTI將具體的仿真功能實現、仿真運行管理和底層傳輸三者分離,隱蔽它們各自的實現細節,使各個部分可以相對獨立地開發,實現應用系統的即插即用。
VR-Link對RTI函數進行了封裝,提供了可以使聯邦成員創建工作更容易的高層功能,使開發人員重點專注于仿真模型的設計,大大減少他們的工作量。
Matlab是用以開發數值模型的強大建模和分析工具,但是Matlab本身并不支持HLA/RTI,設計Matlab適配器,使Matlab仿真模型能夠參與到基于HLA的協同仿真中來,可以提高系統開發的效率。
2 開發過程
2.1 聯邦概念模型(FCM)開發
聯邦的概念模型是對問題域的抽象,是在需求和實現之間架起的一座橋梁。主要任務是對系統的組成和行為進行宏觀的描述,包括仿真系統的構成和工作過程。
2.2 聯邦對象模型(FOM)設計
FOM的設計是整個仿真系統的開發過程中一個重要的部分,開發FOM的過程,是對仿真系統中的交互數據進行抽象和建模的過程,其一般步驟為:
(1)分解仿真任務,確定聯邦成員及其實體類型和事件;
(2)確定FOM中的對象類和交互類;
(3)確定對象類屬性和交互類參數的特性;
(4)生成仿真對象模型(SOM)表;
(5)綜合SOM表,生成FOM表。
2.3 生成FED(Federation Execution Data)文件
FED文件是FOM開發的結果,用于向RTI和VR-Link提供FOM表的信息。在開發時,可以根據FOM表對FED文件進行修改,以滿足系統的需求。
2.4 聯邦成員開發
聯邦成員需要與聯邦中的其他成員共同實現FCM中定義的聯邦需求。根據FCM映射到本聯邦成員需要實現的功能,開發聯邦成員。VR-Link的開發聯邦成員的過程為:
(1)創建并加入聯邦
仿真開始時,需要通過DtExerciseConn產生聯邦,如果聯邦已經產生,則加入聯邦。需要注意的是,構造DtExerciseConn時,必須提供聯邦執行名和聯邦成員名,并且同一聯邦的聯邦執行名和FED文件名必須相同。
DtExerciseConn exConn;
exConn = new DtExerciseConn(execName, fedName, DtRprFomMapper::create(0),"VR-Link.FED", 0 );
如果用戶不向DtExerciseConn構造函數提供FED文件的名稱,則假設FED文件名與聯邦執行的名稱相同,VR-Link會在運行的程序所在的目錄中尋找FED文件,要確保用戶正在DtExerciseConn中使用的FED文件在運行程序所在的目錄中。
(2)對象類的發布與訂閱
聯邦產生以后,需要發布和訂閱FOM中的對象類屬性。如果發布、訂閱的是對象類的全部屬性,需要構造對象發布器(DtEntityPublisher)和映射實體列表(DtReflected-EntityList);如果發布、訂閱的是對象類的部分屬性,可以使用DtObjClassDesc的成員函數publish( )/subscribe( )。
(3)屬性更新
在每一個仿真步長中,DtEntityPublisher通過調用tick()函數把更新的實體狀態發送出去。對DtExerciseConn::drainlnPut()接收到的遠程實體, DtReflectedEntityList會將其更新信息存放到與該映射實體對應的實體狀態庫中。
(4)交互類的發布和訂閱
HLA中使用交互來表示所發生的事件,VR-Link通過派生DtInteraction類來管理這些交互。交互類的發送是交互類實例在交互事件發生時進行發送的,發送交互的示例:
DtExamInteraction inter; ? //創建交互實例
inter. setPar1(par1); ? ? ? //設置參數1
inter. setPar2(par2); ? ? ? //設置參數2
inter. setPar3(par3); ? ? ? //設置參數3
exConn. sendStamped(inter); //發送交互
交互類的訂購需要交互接受方在仿真開始之前為交互類注冊一個回調函數,對接收到的交互進行響應。
DtExamInteraction:: addCallback(&exConn,theInteractionCb, this);
參數中,theInteractionCb為回調函數,當接受到交互后,調用此函數。因為回調函數是作為普通的VR-Link回調注冊函數指針傳入的,所以回調函數本身不能是非靜態成員函數,它可以是全局函數或靜態類成員。該函數原型為:
void
theInteractionCb(DtExamInteraction* inter, void*usr)
{ … …}
(5)交互處理
在回調函數中獲取交互數據后,要對數據進行處理,可在回調函數中設置事件,利用事件機制觸發處理過程。對于復雜的處理,事件發生后可利用消息機制發送消息,通知消息處理函數進行處理。
Handle hEvent;
SetEvent(hEvent);
if(WaitForSingleObject(hEvent) == WAIT_OBJECT_0)
{
::PostMessage(stsComponent->m_hWnd, MessageName, 0, 0);
}
需要注意的是,這里要利用PostMessage函數,而不能利用SendMessage函數。
3 Matlab適配器
由于仿真模型采用Matlab建立,而Matlab沒有提供HLA/RTI的接口,為了把這些模型集成到仿真系統,實現基于HLA的協同仿真,就需要采用一定的機制將RTI與這些模型連接起來,使這些模型能夠和RTI進行數據交換和時間同步。
3.1 設計思路
本文采用Matlab引擎的方式開發適配器,使Matlab作為一個聯邦成員加入聯邦,通過適配器發布和訂購所需要的對象類與交互類。
為實現Matlab仿真模型與RTI的數據交互,適配器將Matlab所需要的對象類和交互類映射為Matlab仿真模型中的輸入輸出變量,并根據仿真控制子系統的控制指令(如啟動、暫停、繼續和終止等),通過Matlab的API接口對Matlab引擎進行相應的控制,其實現機制如圖1所示。
3.2 適配器的實現
Matlab引擎采用客戶/服務器模式,利用ActiveX自動化和DDE技術,實現VC++與Matlab之間的動態數據交換。在VC++中使用Matlab引擎來編寫程序時,VC++作為客戶端,負責用戶接口并提出數據請求;Matlab作為服務器端,向客戶端提供數據服務。VC++通過調用Matlab引擎與Matlab服務器建立連接,實現動態通信。具體過程如圖 2所示。
上面的過程中包含了兩個重要問題,一個是引擎接口的設計與使用,VC++為Matlab引擎調用Matlab服務提供了應用程序接口,用于完成連接的建立與撤銷、數據的傳遞與接收,主要的引擎庫函數如表1所示。
另一個問題是數據組織,即VC++數據類型與mxArray矩陣的轉換問題,數據組織方式正確與否直接決定著VC++與Matlab服務器之間動態數據交換的有效性。
Matlab對VC++數據的組織利用mxArray矩陣結構和它的相關函數來實現。對于每種VC++數據類型,都有一個函數用于創建mxArray矩陣結構,如表2所示。
在VC++中對Matlab引擎的調用過程可用如下偽代碼實現:
IF engOpen ?//啟動引擎成功
BEGIN
//進行數據初始化;
mxCreatexxx(); //進行數據類型轉換;
engPutArray(); //向Matlab引擎發送數據;
engEvalString();//調用仿真模型,可以是M 函數;
engGetArray();//獲取仿真結果;
mxDestoryArray();//刪除矩陣;
engClose();// 關閉引擎;
END
利用Matlab適配器可以方便地將Matlab仿真模型轉化為一個HLA/RTI邦元,如圖3所示。
4 結束語
本文論述了利用VR-Link開發HLA應用的過程,設計了Matlab適配器,詳細說明了適配器的實現方法,利用適配器使Matlab仿真模型可以參與到HLA/RTI協同仿真中來,可以對類似的HLA應用起到借鑒作用。
參考文獻:
[1]王勃,艾祖亮.VR-Link開發[M].北京:國防工業出版社,2009.
[2]王凈,戰凱,吳朝暉.基于HLA的潛艦對抗模擬訓練系統的設計與實現[J].火力與指揮控制,2012,37(8):127-132.
[3]郝雁中,楊承志.基于HLA的電子戰飛機作戰仿真系統研究[J].指揮控制與仿真,2008,30(3):102-105.
[4]曾艷麗,李華.基于HLA的仿真應用成員的設計與實現[J].電子對抗技術,2004,19(4):16-18,23.