徐海, 吳健, 趙佐, 朱明潔
(1.西北工業大學 計算機學院, 陜西 西安 710072;2.中航工業第一飛機設計研究院, 陜西 西安 710089)
在仿真與建模領域,為了促進各類仿真系統之間以及仿真系統與C4I(command, control, communications, computer/intelligence)系統之間的互操作,加大建模與仿真部件的重用,美國國防部建立了建模與仿真高層系統結構HLA (high level architecture, HLA)[1]。
在靶場試驗與訓練領域,為了克服各測試和訓練靶場系統“煙囪式”設計所帶來的弊端,美國國防部結合網絡中心戰和靶場資源互操作、重用和可組合方面的需求,通過基礎計劃2010(FI2010)項目,開發了“試驗與訓練使能體系結構”TENA(the test and training enabling architecture, TENA)[2]。
由于二者在軍事仿真、建模、靶場訓練、測試領域被廣為運用。因此,2種體系結構之間,數據互聯的問題急需解決,為了提升TENA體系結構的兼容性,促進其互操作能力,TENA-HLA網關應運而生。
由于TENA還屬于新興的研究領域,在國內外尚處于研究階段。相對于目前較為成熟、并已廣泛應用的HLA體系結構,TENA應用無論在成熟度,還是數量上都遠遠落后于基于 HLA所開發的系統,文獻檢索也沒有發現對 TENA-HLA 網關的研究。本文對TENA-HLA網關進行了探索,并提出了一種基于用戶選擇的網關自動生成器。
TENA的TDL語言是面向對象的建模語言,提供了豐富的面向對象特性,使建模人員能夠方便用面向對象的思想進行建模。但是,HLA的“對象類”對象和“交互類”對象是純面向數據流的對象,屬性類型由OMT的各個表格規定,所以,它可以是用戶所定義的任意類型。這兩種思想迥異的語言之間的轉換,即為TENA-HLA網關設計的核心所在。本文介紹一種網關設計方案,能夠把面向對象數據轉換為純數據流,反之,也能把純數據流數據轉換為面向對象數據。
圖1為TENA-HLA網關數據交互圖,圖的左端為TENA分布式靶場系統,各TENA應用以TENA邏輯靶場對象的形式在TENA中間件上實現發布-訂閱。圖1的右端為HLA仿真系統,同理,各個仿真節點作為一個聯邦成員以RTI對象的形式在HLA-RTI上完成數據傳輸。當2個體系結構的數據需要交互時,TENA-HLA網關的轉換器完成TENA邏輯靶場對象到RTI對象,或RTI對象到TENA邏輯靶場對象的轉換。轉換器的存在,使得TENA網絡的應用與非TENA網絡的應用實現無屏障通信。

圖1 TENA-HLA網關數據交互圖
網關由3個部分組成,即“TENA側網關代理”,“對象轉換器”及“HLA側網關代理”。
1) TENA側網關代理能夠從TENA中間件上接收來自其它TENA應用程序的數據,或者將已被網關轉換器轉換好的HLA數據發送到其他的TENA應用程序。
2) 對象轉換器能夠把從TENA接受到的邏輯靶場對象按照對象轉換協議轉成RTI對象,同理,也能夠把從HLA接受到的RTI對象轉成TENA邏輯靶場對象。其次,處理好TENA的時間管理與HLA的時間管理的差異。
3) HLA側網關代理能夠從HLA-RTI接收來自其他聯邦成員應用程序的數據,或者將已被轉換器轉換好的TENA數據發送到HLA的聯邦成員。
如圖2空心箭頭所示,TENA以Attack.tdl作為對象模型構建應用程序,創建應用Servant4,它可以發布其內部定義的若干SDO,message。此時,網關被看成TENA網絡中的另一個“應用”。一方面,它創建“模擬應用Client4”,訂閱來自Servant4的數據,轉換器將接收到的數據轉換,提交給網關中的“聯邦成員2的Publisher”。另一方面,它再以HLA協議將數據發送給HLA的訂閱方聯邦成員2的Subscriber。

圖2 TENA-HLA網關運作流程圖
如圖2實心箭頭所示,TENA以Missile.tdl作為對象模型構建應用程序,創建應用Client2,它可以訂閱tdl文件中定義的若干SDO,message。網關一方面被看成HLA中的“聯邦成員1的Subscriber”,接收來自“聯邦成員1 Publisher”發出的數據,轉換器將接收到的數據轉換,提交給網關中的“Servant2應用”創建“模擬應用Servant2”。另一方面,它再以HLA協議將數據發送給TENA的訂閱方Client2。
由于一個tdl文件中存在多個SDO,message。而一個fed文件中,又存在多個object class,interaction class,所以,應用程序中選擇發布-訂閱哪一個SDO和message,以及和HLA中的哪一個object class和interaction class進行映射是很難確定的,單靠名字匹配的映射機制是不充分的,在名字毫不相關的情況下,映射無法完成。此時,圖形化的方案能夠較好地解決映射的問題。發揮用戶自主選擇權來完成映射協議的生成。用戶最清楚當前tdl文件中哪些元模型需要和fed中的哪些對象類、交互類相匹配,tdl文件中被選中的元模型同時也是TENA端應用程序需要被發布-訂閱的對象,同理,fed文件中被選中的“對象類”對象和“交互類”對象也是HLA端應用程序需要被發布-訂閱的對象。

圖3 OMsampleAnother.tdl與test.fed對象映射圖
圖3左邊為OMsampaleAnother.tdl文件的圖形化表示,右邊為Test.fed文件的圖形化表示,它們顯示在同一界面中,OMsampaleAnother.tdl定義了可發布-訂閱的SDO Platform,message LocationMessage,SDO Condition,Test.fed定義了object class maybe,object class selfcustom,interaction class LocationMessage,interaction class FireMessage。由于模型種類和數量過多,很難確定哪2個模型之間需要被映射。
本文采用圖形化方式支持用戶選擇映射關系如圖3所示,連線的一端是TDL模型,另一端是FED模型。它記錄了一個SDO或者Message的屬性被映射成的對象類屬性或交互類參數。
因為網關所需要實現的TENA與HLA間的數據訂閱和映射關系是由用戶根據不同的應用需要指定的,不可能有一個固定的網關實現各種映射,因此網關的三部分都必須根據tdl和fed文件自動生成,根據圖形連線和協議算法生成轉換協議,同時代碼以面向對象的組織形式寫入若干個C++文件中,寫完后,各個頭文件、源文件被加載到已創建的工程中,編譯該工程,便能生成網關的可執行程序,至此,網關生成完畢,用戶可以開啟該網關。
當異網傳輸時,分為TENA向HLA傳輸和HLA向TENA傳輸。2種不同傳輸方向,導致不同的協議算法,分別論述如下。
4.3.1 TENA-HLA轉換算法描述
該算法的輸入是TDL和FED文件經各自編譯器編譯后,在內存中組織的IR(intermediate representation)。
該算法的輸出是轉換協議。算法描述如下:
2) if(Model被標識)
3) then if(Model的類型是class&&Model不是數據成員)then映射為"對象類"對象,其數據成員映射goto 1
4) if(Model的類型是message&&Model不是數據成員)then 映射為"交互類"對象,其數據成員映射goto 1
5) if(Model的類型是message,localclass && Model是數據成員)then映射為struct類型,其數據成員映射goto 1
6) if(Model是基本類型‖枚舉類型)then映射為基本類型
7) if(Model是向量類型)then映射為向量
8) else goto 1
現階段,經濟環境發生了比較顯著的變化,工資水平也越來越高,交個稅的群體也越來越多,不過由于物價水平的持續提升,拋除通貨膨脹的影響,整體的購買能力還是比較低,不過還是需要繳納個人所得稅,個人稅收負擔會增加,隨著二胎政策的推廣,一些家庭的生活壓力越來越大,要想顯示出稅收的公平性,就需要進行個人所得稅扣除項目改革。
上述偽代碼描述了TENA-HLA轉換協議的主要邏輯流程。首先,掃描FED-IR和TDL-IR(TDL文件編譯后的中間表示),當掃描到SDO和Message,且當前它們不作為屬性成員,則分別映射成“對象類”對象和“交互類”對象。
當掃描到SDO和Message的屬性成員為基本類型或枚舉類型時,則映射成HLA的基本數據類型,并在Publisher中生成發布該成員的代碼,它的值可通過Client的get函數獲取。
當掃描到SDO和Message的屬性成員為vector類型時,則映射成HLA的vector類型,并在Publisher中生成發布該成員的代碼,它的值通過Client的get函數獲取。
當掃描到SDO和Message的屬性成員為Message,Localclass時,則都被映射成C++struct類型。但由于它們是復合類型,所以需要繼續掃描IR,深入到復合類型內部的成員變量,且對每個成員變量都依次遵循上述的轉換方式進行迭代。
4.3.2 HLA-TENA轉換算法描述
該算法的輸入是FED和TDL文件經各自編譯器編譯后,在內存中組織的IR(intermediate representation)。
該算法的輸出是轉換協議。算法描述如下:
1) 掃描FED-IR&&TDL-IR
2) if(Model被標識)
3) then if(Model的類型是class && Model不是數據成員)then 獲取"對象類"數據,創建class的ServantPtr,其數據成員映射goto 1
4) if(Model的類型是message && Model不是數據成員)then 獲取"交互類"數據,創建message的ServantPt其數據成員映射goto 1
5) if(Model的類型是message,localclass && Model是數據成員)then獲取數據,創建message或localclass的Pointer其數據成員映射goto 1
6) if(Model是基本類型或者是枚舉類型)then數據流按基本類型轉換
7) if(Model是向量類型)then 數據流按基本類型向量轉換
8) else goto 1
上述偽代碼描述了HLA-TENA轉換協議的主要邏輯流程。首先,掃描FED-IR和TDL-IR,當掃描到SDO和Message時,則創建它們的ServantPtr,且初始化配置信息;當網關接收到“對象類”對象或“交互類”對象數據時,該數據為二進制數據流,必須用實際的類型轉換才能得到有效的數據,所以,需要在最初編譯tdl文件時,另生成一份tdl文件的拷貝,并把它變成C++頭文件,即把其內部所有的class,message,local class關鍵字均換成struct,并且去掉復合類型內部的成員函數,修改不符合C++風格的表示。這樣,該文件便成為只由struct構成的頭文件。再把該文件加入工程中,其他源文件都可使用這些定義的類型。
將“對象類”數據按照tdl文件中相匹配的class-struct類型轉換,這樣,struct中的每一項成員都有了值。 Servant發布的值可直接通過struct調用。
“交互類”數據也按照tdl文件中相匹配的message-struct類型轉換,Servant發布的值可直接通過struct調用。
當掃描到SDO,message中包含的local class對象時,這里需要創建它的pointer,它的值由SDO,message獲取的數據賦予。
基本數據類型和向量類型不需要在創建任何關于發布的對象,直接發布即可。
4.3.3 網關代碼結構
圖4簡要描述了網關的代碼框架,當應用場景需要TENA到HLA的網關時,將以類TENA-to-HLA-GateWay為核心,生成與其相關的main函數及所有類。TENA-to-HLA-GateWay類由Publisher類和Client類聚合而成,同時,Publisher類又具有聚合對象Client。Client類主要完成訂閱來自TENA的數據,Publisher類主要完成HLA代理功能,它接收聚合對象Client的數據,經轉化后,調用自己的私有方法將數據發送給HLA端。同理,當應用場景需要HAL到TENA的網關時,將以類HLA-to-TENA-GateWay為核心,生成與其相關的main函數及所有類,功能與TENA-to-HLA-GateWay的輔助類相同且對稱,在此,不再贅述。

圖4 網關程序代碼框架
當掃描到TDL-IR的interface時,可不予考慮,因為interface中只有遠程方法,而HLA中并不支持遠方法的調用,故不必考慮。
當掃描到TDL-IR的class、message的“繼承”時,在編譯的過程中將其內部的屬性全部轉移到其子類中,然后再進行映射。
HLA提供了“管理時間”的服務,即可以將操作過程加速推進到“超實時”或放慢到實時乃至“欠實時”,TENA沒有提供時間管理服務,所有靶場事件總是實時運行的。由于網關需要生成至少兩個應用來接收和發送數據,并且需要經過對象轉換,很難保證TENA的實時性。
OMsampaleAnother.tdl在圖3左端,Test.fed在圖3右端,它們的映射關系如圖中的連線所示,SDO Platform與對象類selfcustom交換數據,message LocationMessage與交互類LocationMessage交換數據。
如圖5所示,TENA應用以OMsampaleAnother.tdl作為建模文件發布數據,如圖6所示,HLA應用以Test.fed為建模文件接收數據。經試驗,發布和接收的數據一致無誤。

圖5 TENA發送數據圖

圖6 HLA接收數據圖
本系統架構能夠較好地完成TENA系統與HLA系統的互聯。采用該系統架構,開發人員能夠容易地改變模型轉換規則,在應用生成部分可以利用模板機制產生通用代碼,可大幅縮短開發人員的工作量,有效提升了系統開發的效率,提高了可擴展性、可維護性和可移植性。
整個網關程序經編譯后就變成可執行程序,它封裝了一個tdl文件定義的對象模型與另一個分布式網絡建模語言定義的對象映射協議,當開啟TENA IDE時,需要“打開”一個網關應用。
模型映射時,尚未考慮SDO聚合的映射方式。這種面向對象機制具有復雜的實現方式,而RTI所支持的OMT對象過少,找到一種合適的匹配機制較難。
參考文獻:
[1] 周彥,戴劍偉,蔣曉原. HLA仿真程序設計[M]. 北京:電子工業出版社,2002
Zhou Yan, Dai Jianwei, Jiang Xiaoyuan. HLA Simulation Programming[M]. Beijing: Publishing House of Electronics Industry, 2002 (in Chinese)
[2] 畢博,朱元昌,邸彥強,等. TENA網關及其應用研究[J]. 計算機測量與控制,2012,20(8):2254-2256,2260
Bi Bo, Zhu Yuanchang, Di Yanqiang, et al. TENA Gateway and Application Research[J]. Computer Measurement & Control, 2012, 20(8): 2255-2256,2260 (in Chinese)
[3] 馮潤明,王國玉,黃柯棣,等. TENA及其與HLA的比較[J]. 系統工程與電子技術,2005,27(2):288-291
Feng Runming, Wang Guoyu, Huang Kedi, et al. TENA and Its Comparison with HLA[J]. Systems Engineering and Electronics, 2005, 27(2): 288-291 (in Chinese)
[4] 王勝濤,楊志飛,杜紅兵,等. 邏輯靶場網關設計方法研究[J]. 艦船電子工程,2012,32(2):84-86
Wang Shengtao, Yang Zhifei, Du Hongbing, et al. Research on the Design of Gateway in the Logical Range[J]. Ship Electronic Engineering, 2012, 32(2): 84-86 (in Chinese)
[5] 關萍萍,翟正軍. 虛擬靶場運行支撐體系結構研究[J]. 計算機測量與控制,2009,17(12):2475-2478
Guan Pingping, Zhai Zhengjun. Research on the Architecture of Runtime Infrastructure Middleware for Virtual Range[J]. Computer Measurement & Control, 2009, 17(12): 2475-2478 (in Chinese)
[6] 馬越,劉丹,金一丞,等. 分布航海仿真中HLA網關的設計與實現[J]. 哈爾濱工程大學報,2004,25(3): 283-27
Ma Yue, Liu Dan, Jin Yicheng, et al. The Design and Implementation of HLA Gateway in Distribution Shipping Simulation[J]. Journal of Harbin Engineering University, 2004, 25(3): 283-27 (in Chinese)
[7] 林新,宋焱,王行仁,等. 戰斗機飛行仿真系統HLA互聯系統[J]. 系統仿真學報,2004,16(12):2751-2753
Lin Xin, Song Yan, Wang Xingren, et al. A Distributed Flight Simulation System Based on HLA[J]. Journal of System Simulation, 2004, 16(12): 2751-2753 (in Chinese)