徐海, 吳健, 趙佐, 朱明潔
(1.西北工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院, 陜西 西安 710072;2.中航工業(yè)第一飛機(jī)設(shè)計(jì)研究院, 陜西 西安 710089)
在仿真與建模領(lǐng)域,為了促進(jìn)各類仿真系統(tǒng)之間以及仿真系統(tǒng)與C4I(command, control, communications, computer/intelligence)系統(tǒng)之間的互操作,加大建模與仿真部件的重用,美國(guó)國(guó)防部建立了建模與仿真高層系統(tǒng)結(jié)構(gòu)HLA (high level architecture, HLA)[1]。
在靶場(chǎng)試驗(yàn)與訓(xùn)練領(lǐng)域,為了克服各測(cè)試和訓(xùn)練靶場(chǎng)系統(tǒng)“煙囪式”設(shè)計(jì)所帶來(lái)的弊端,美國(guó)國(guó)防部結(jié)合網(wǎng)絡(luò)中心戰(zhàn)和靶場(chǎng)資源互操作、重用和可組合方面的需求,通過(guò)基礎(chǔ)計(jì)劃2010(FI2010)項(xiàng)目,開(kāi)發(fā)了“試驗(yàn)與訓(xùn)練使能體系結(jié)構(gòu)”TENA(the test and training enabling architecture, TENA)[2]。
由于二者在軍事仿真、建模、靶場(chǎng)訓(xùn)練、測(cè)試領(lǐng)域被廣為運(yùn)用。因此,2種體系結(jié)構(gòu)之間,數(shù)據(jù)互聯(lián)的問(wèn)題急需解決,為了提升TENA體系結(jié)構(gòu)的兼容性,促進(jìn)其互操作能力,TENA-HLA網(wǎng)關(guān)應(yīng)運(yùn)而生。
由于TENA還屬于新興的研究領(lǐng)域,在國(guó)內(nèi)外尚處于研究階段。相對(duì)于目前較為成熟、并已廣泛應(yīng)用的HLA體系結(jié)構(gòu),TENA應(yīng)用無(wú)論在成熟度,還是數(shù)量上都遠(yuǎn)遠(yuǎn)落后于基于 HLA所開(kāi)發(fā)的系統(tǒng),文獻(xiàn)檢索也沒(méi)有發(fā)現(xiàn)對(duì) TENA-HLA 網(wǎng)關(guān)的研究。本文對(duì)TENA-HLA網(wǎng)關(guān)進(jìn)行了探索,并提出了一種基于用戶選擇的網(wǎng)關(guān)自動(dòng)生成器。
TENA的TDL語(yǔ)言是面向?qū)ο蟮慕UZ(yǔ)言,提供了豐富的面向?qū)ο筇匦?使建模人員能夠方便用面向?qū)ο蟮乃枷脒M(jìn)行建模。但是,HLA的“對(duì)象類”對(duì)象和“交互類”對(duì)象是純面向數(shù)據(jù)流的對(duì)象,屬性類型由OMT的各個(gè)表格規(guī)定,所以,它可以是用戶所定義的任意類型。這兩種思想迥異的語(yǔ)言之間的轉(zhuǎn)換,即為TENA-HLA網(wǎng)關(guān)設(shè)計(jì)的核心所在。本文介紹一種網(wǎng)關(guān)設(shè)計(jì)方案,能夠把面向?qū)ο髷?shù)據(jù)轉(zhuǎn)換為純數(shù)據(jù)流,反之,也能把純數(shù)據(jù)流數(shù)據(jù)轉(zhuǎn)換為面向?qū)ο髷?shù)據(jù)。
圖1為TENA-HLA網(wǎng)關(guān)數(shù)據(jù)交互圖,圖的左端為TENA分布式靶場(chǎng)系統(tǒng),各TENA應(yīng)用以TENA邏輯靶場(chǎng)對(duì)象的形式在TENA中間件上實(shí)現(xiàn)發(fā)布-訂閱。圖1的右端為HLA仿真系統(tǒng),同理,各個(gè)仿真節(jié)點(diǎn)作為一個(gè)聯(lián)邦成員以RTI對(duì)象的形式在HLA-RTI上完成數(shù)據(jù)傳輸。當(dāng)2個(gè)體系結(jié)構(gòu)的數(shù)據(jù)需要交互時(shí),TENA-HLA網(wǎng)關(guān)的轉(zhuǎn)換器完成TENA邏輯靶場(chǎng)對(duì)象到RTI對(duì)象,或RTI對(duì)象到TENA邏輯靶場(chǎng)對(duì)象的轉(zhuǎn)換。轉(zhuǎn)換器的存在,使得TENA網(wǎng)絡(luò)的應(yīng)用與非TENA網(wǎng)絡(luò)的應(yīng)用實(shí)現(xiàn)無(wú)屏障通信。
圖1 TENA-HLA網(wǎng)關(guān)數(shù)據(jù)交互圖
網(wǎng)關(guān)由3個(gè)部分組成,即“TENA側(cè)網(wǎng)關(guān)代理”,“對(duì)象轉(zhuǎn)換器”及“HLA側(cè)網(wǎng)關(guān)代理”。
1) TENA側(cè)網(wǎng)關(guān)代理能夠從TENA中間件上接收來(lái)自其它TENA應(yīng)用程序的數(shù)據(jù),或者將已被網(wǎng)關(guān)轉(zhuǎn)換器轉(zhuǎn)換好的HLA數(shù)據(jù)發(fā)送到其他的TENA應(yīng)用程序。
2) 對(duì)象轉(zhuǎn)換器能夠把從TENA接受到的邏輯靶場(chǎng)對(duì)象按照對(duì)象轉(zhuǎn)換協(xié)議轉(zhuǎn)成RTI對(duì)象,同理,也能夠把從HLA接受到的RTI對(duì)象轉(zhuǎn)成TENA邏輯靶場(chǎng)對(duì)象。其次,處理好TENA的時(shí)間管理與HLA的時(shí)間管理的差異。
3) HLA側(cè)網(wǎng)關(guān)代理能夠從HLA-RTI接收來(lái)自其他聯(lián)邦成員應(yīng)用程序的數(shù)據(jù),或者將已被轉(zhuǎn)換器轉(zhuǎn)換好的TENA數(shù)據(jù)發(fā)送到HLA的聯(lián)邦成員。
如圖2空心箭頭所示,TENA以Attack.tdl作為對(duì)象模型構(gòu)建應(yīng)用程序,創(chuàng)建應(yīng)用Servant4,它可以發(fā)布其內(nèi)部定義的若干SDO,message。此時(shí),網(wǎng)關(guān)被看成TENA網(wǎng)絡(luò)中的另一個(gè)“應(yīng)用”。一方面,它創(chuàng)建“模擬應(yīng)用Client4”,訂閱來(lái)自Servant4的數(shù)據(jù),轉(zhuǎn)換器將接收到的數(shù)據(jù)轉(zhuǎn)換,提交給網(wǎng)關(guān)中的“聯(lián)邦成員2的Publisher”。另一方面,它再以HLA協(xié)議將數(shù)據(jù)發(fā)送給HLA的訂閱方聯(lián)邦成員2的Subscriber。
圖2 TENA-HLA網(wǎng)關(guān)運(yùn)作流程圖
如圖2實(shí)心箭頭所示,TENA以Missile.tdl作為對(duì)象模型構(gòu)建應(yīng)用程序,創(chuàng)建應(yīng)用Client2,它可以訂閱tdl文件中定義的若干SDO,message。網(wǎng)關(guān)一方面被看成HLA中的“聯(lián)邦成員1的Subscriber”,接收來(lái)自“聯(lián)邦成員1 Publisher”發(fā)出的數(shù)據(jù),轉(zhuǎn)換器將接收到的數(shù)據(jù)轉(zhuǎn)換,提交給網(wǎng)關(guān)中的“Servant2應(yīng)用”創(chuàng)建“模擬應(yīng)用Servant2”。另一方面,它再以HLA協(xié)議將數(shù)據(jù)發(fā)送給TENA的訂閱方Client2。
由于一個(gè)tdl文件中存在多個(gè)SDO,message。而一個(gè)fed文件中,又存在多個(gè)object class,interaction class,所以,應(yīng)用程序中選擇發(fā)布-訂閱哪一個(gè)SDO和message,以及和HLA中的哪一個(gè)object class和interaction class進(jìn)行映射是很難確定的,單靠名字匹配的映射機(jī)制是不充分的,在名字毫不相關(guān)的情況下,映射無(wú)法完成。此時(shí),圖形化的方案能夠較好地解決映射的問(wèn)題。發(fā)揮用戶自主選擇權(quán)來(lái)完成映射協(xié)議的生成。用戶最清楚當(dāng)前tdl文件中哪些元模型需要和fed中的哪些對(duì)象類、交互類相匹配,tdl文件中被選中的元模型同時(shí)也是TENA端應(yīng)用程序需要被發(fā)布-訂閱的對(duì)象,同理,fed文件中被選中的“對(duì)象類”對(duì)象和“交互類”對(duì)象也是HLA端應(yīng)用程序需要被發(fā)布-訂閱的對(duì)象。
圖3 OMsampleAnother.tdl與test.fed對(duì)象映射圖
圖3左邊為OMsampaleAnother.tdl文件的圖形化表示,右邊為Test.fed文件的圖形化表示,它們顯示在同一界面中,OMsampaleAnother.tdl定義了可發(fā)布-訂閱的SDO Platform,message LocationMessage,SDO Condition,Test.fed定義了object class maybe,object class selfcustom,interaction class LocationMessage,interaction class FireMessage。由于模型種類和數(shù)量過(guò)多,很難確定哪2個(gè)模型之間需要被映射。
本文采用圖形化方式支持用戶選擇映射關(guān)系如圖3所示,連線的一端是TDL模型,另一端是FED模型。它記錄了一個(gè)SDO或者M(jìn)essage的屬性被映射成的對(duì)象類屬性或交互類參數(shù)。
因?yàn)榫W(wǎng)關(guān)所需要實(shí)現(xiàn)的TENA與HLA間的數(shù)據(jù)訂閱和映射關(guān)系是由用戶根據(jù)不同的應(yīng)用需要指定的,不可能有一個(gè)固定的網(wǎng)關(guān)實(shí)現(xiàn)各種映射,因此網(wǎng)關(guān)的三部分都必須根據(jù)tdl和fed文件自動(dòng)生成,根據(jù)圖形連線和協(xié)議算法生成轉(zhuǎn)換協(xié)議,同時(shí)代碼以面向?qū)ο蟮慕M織形式寫(xiě)入若干個(gè)C++文件中,寫(xiě)完后,各個(gè)頭文件、源文件被加載到已創(chuàng)建的工程中,編譯該工程,便能生成網(wǎng)關(guān)的可執(zhí)行程序,至此,網(wǎng)關(guān)生成完畢,用戶可以開(kāi)啟該網(wǎng)關(guān)。
當(dāng)異網(wǎng)傳輸時(shí),分為TENA向HLA傳輸和HLA向TENA傳輸。2種不同傳輸方向,導(dǎo)致不同的協(xié)議算法,分別論述如下。
4.3.1 TENA-HLA轉(zhuǎn)換算法描述
該算法的輸入是TDL和FED文件經(jīng)各自編譯器編譯后,在內(nèi)存中組織的IR(intermediate representation)。
該算法的輸出是轉(zhuǎn)換協(xié)議。算法描述如下:
2) if(Model被標(biāo)識(shí))
3) then if(Model的類型是class&&Model不是數(shù)據(jù)成員)then映射為"對(duì)象類"對(duì)象,其數(shù)據(jù)成員映射goto 1
4) if(Model的類型是message&&Model不是數(shù)據(jù)成員)then 映射為"交互類"對(duì)象,其數(shù)據(jù)成員映射goto 1
5) if(Model的類型是message,localclass && Model是數(shù)據(jù)成員)then映射為struct類型,其數(shù)據(jù)成員映射goto 1
6) if(Model是基本類型‖枚舉類型)then映射為基本類型
7) if(Model是向量類型)then映射為向量
8) else goto 1
現(xiàn)階段,經(jīng)濟(jì)環(huán)境發(fā)生了比較顯著的變化,工資水平也越來(lái)越高,交個(gè)稅的群體也越來(lái)越多,不過(guò)由于物價(jià)水平的持續(xù)提升,拋除通貨膨脹的影響,整體的購(gòu)買能力還是比較低,不過(guò)還是需要繳納個(gè)人所得稅,個(gè)人稅收負(fù)擔(dān)會(huì)增加,隨著二胎政策的推廣,一些家庭的生活壓力越來(lái)越大,要想顯示出稅收的公平性,就需要進(jìn)行個(gè)人所得稅扣除項(xiàng)目改革。
上述偽代碼描述了TENA-HLA轉(zhuǎn)換協(xié)議的主要邏輯流程。首先,掃描FED-IR和TDL-IR(TDL文件編譯后的中間表示),當(dāng)掃描到SDO和Message,且當(dāng)前它們不作為屬性成員,則分別映射成“對(duì)象類”對(duì)象和“交互類”對(duì)象。
當(dāng)掃描到SDO和Message的屬性成員為基本類型或枚舉類型時(shí),則映射成HLA的基本數(shù)據(jù)類型,并在Publisher中生成發(fā)布該成員的代碼,它的值可通過(guò)Client的get函數(shù)獲取。
當(dāng)掃描到SDO和Message的屬性成員為vector類型時(shí),則映射成HLA的vector類型,并在Publisher中生成發(fā)布該成員的代碼,它的值通過(guò)Client的get函數(shù)獲取。
當(dāng)掃描到SDO和Message的屬性成員為Message,Localclass時(shí),則都被映射成C++struct類型。但由于它們是復(fù)合類型,所以需要繼續(xù)掃描IR,深入到復(fù)合類型內(nèi)部的成員變量,且對(duì)每個(gè)成員變量都依次遵循上述的轉(zhuǎn)換方式進(jìn)行迭代。
4.3.2 HLA-TENA轉(zhuǎn)換算法描述
該算法的輸入是FED和TDL文件經(jīng)各自編譯器編譯后,在內(nèi)存中組織的IR(intermediate representation)。
該算法的輸出是轉(zhuǎn)換協(xié)議。算法描述如下:
1) 掃描FED-IR&&TDL-IR
2) if(Model被標(biāo)識(shí))
3) then if(Model的類型是class && Model不是數(shù)據(jù)成員)then 獲取"對(duì)象類"數(shù)據(jù),創(chuàng)建class的ServantPtr,其數(shù)據(jù)成員映射goto 1
4) if(Model的類型是message && Model不是數(shù)據(jù)成員)then 獲取"交互類"數(shù)據(jù),創(chuàng)建message的ServantPt其數(shù)據(jù)成員映射goto 1
5) if(Model的類型是message,localclass && Model是數(shù)據(jù)成員)then獲取數(shù)據(jù),創(chuàng)建message或localclass的Pointer其數(shù)據(jù)成員映射goto 1
6) if(Model是基本類型或者是枚舉類型)then數(shù)據(jù)流按基本類型轉(zhuǎn)換
7) if(Model是向量類型)then 數(shù)據(jù)流按基本類型向量轉(zhuǎn)換
8) else goto 1
上述偽代碼描述了HLA-TENA轉(zhuǎn)換協(xié)議的主要邏輯流程。首先,掃描FED-IR和TDL-IR,當(dāng)掃描到SDO和Message時(shí),則創(chuàng)建它們的ServantPtr,且初始化配置信息;當(dāng)網(wǎng)關(guān)接收到“對(duì)象類”對(duì)象或“交互類”對(duì)象數(shù)據(jù)時(shí),該數(shù)據(jù)為二進(jìn)制數(shù)據(jù)流,必須用實(shí)際的類型轉(zhuǎn)換才能得到有效的數(shù)據(jù),所以,需要在最初編譯tdl文件時(shí),另生成一份tdl文件的拷貝,并把它變成C++頭文件,即把其內(nèi)部所有的class,message,local class關(guān)鍵字均換成struct,并且去掉復(fù)合類型內(nèi)部的成員函數(shù),修改不符合C++風(fēng)格的表示。這樣,該文件便成為只由struct構(gòu)成的頭文件。再把該文件加入工程中,其他源文件都可使用這些定義的類型。
將“對(duì)象類”數(shù)據(jù)按照tdl文件中相匹配的class-struct類型轉(zhuǎn)換,這樣,struct中的每一項(xiàng)成員都有了值。 Servant發(fā)布的值可直接通過(guò)struct調(diào)用。
“交互類”數(shù)據(jù)也按照tdl文件中相匹配的message-struct類型轉(zhuǎn)換,Servant發(fā)布的值可直接通過(guò)struct調(diào)用。
當(dāng)掃描到SDO,message中包含的local class對(duì)象時(shí),這里需要?jiǎng)?chuàng)建它的pointer,它的值由SDO,message獲取的數(shù)據(jù)賦予。
基本數(shù)據(jù)類型和向量類型不需要在創(chuàng)建任何關(guān)于發(fā)布的對(duì)象,直接發(fā)布即可。
4.3.3 網(wǎng)關(guān)代碼結(jié)構(gòu)
圖4簡(jiǎn)要描述了網(wǎng)關(guān)的代碼框架,當(dāng)應(yīng)用場(chǎng)景需要TENA到HLA的網(wǎng)關(guān)時(shí),將以類TENA-to-HLA-GateWay為核心,生成與其相關(guān)的main函數(shù)及所有類。TENA-to-HLA-GateWay類由Publisher類和Client類聚合而成,同時(shí),Publisher類又具有聚合對(duì)象Client。Client類主要完成訂閱來(lái)自TENA的數(shù)據(jù),Publisher類主要完成HLA代理功能,它接收聚合對(duì)象Client的數(shù)據(jù),經(jīng)轉(zhuǎn)化后,調(diào)用自己的私有方法將數(shù)據(jù)發(fā)送給HLA端。同理,當(dāng)應(yīng)用場(chǎng)景需要HAL到TENA的網(wǎng)關(guān)時(shí),將以類HLA-to-TENA-GateWay為核心,生成與其相關(guān)的main函數(shù)及所有類,功能與TENA-to-HLA-GateWay的輔助類相同且對(duì)稱,在此,不再贅述。
圖4 網(wǎng)關(guān)程序代碼框架
當(dāng)掃描到TDL-IR的interface時(shí),可不予考慮,因?yàn)閕nterface中只有遠(yuǎn)程方法,而HLA中并不支持遠(yuǎn)方法的調(diào)用,故不必考慮。
當(dāng)掃描到TDL-IR的class、message的“繼承”時(shí),在編譯的過(guò)程中將其內(nèi)部的屬性全部轉(zhuǎn)移到其子類中,然后再進(jìn)行映射。
HLA提供了“管理時(shí)間”的服務(wù),即可以將操作過(guò)程加速推進(jìn)到“超實(shí)時(shí)”或放慢到實(shí)時(shí)乃至“欠實(shí)時(shí)”,TENA沒(méi)有提供時(shí)間管理服務(wù),所有靶場(chǎng)事件總是實(shí)時(shí)運(yùn)行的。由于網(wǎng)關(guān)需要生成至少兩個(gè)應(yīng)用來(lái)接收和發(fā)送數(shù)據(jù),并且需要經(jīng)過(guò)對(duì)象轉(zhuǎn)換,很難保證TENA的實(shí)時(shí)性。
OMsampaleAnother.tdl在圖3左端,Test.fed在圖3右端,它們的映射關(guān)系如圖中的連線所示,SDO Platform與對(duì)象類selfcustom交換數(shù)據(jù),message LocationMessage與交互類LocationMessage交換數(shù)據(jù)。
如圖5所示,TENA應(yīng)用以O(shè)MsampaleAnother.tdl作為建模文件發(fā)布數(shù)據(jù),如圖6所示,HLA應(yīng)用以Test.fed為建模文件接收數(shù)據(jù)。經(jīng)試驗(yàn),發(fā)布和接收的數(shù)據(jù)一致無(wú)誤。
圖5 TENA發(fā)送數(shù)據(jù)圖
圖6 HLA接收數(shù)據(jù)圖
本系統(tǒng)架構(gòu)能夠較好地完成TENA系統(tǒng)與HLA系統(tǒng)的互聯(lián)。采用該系統(tǒng)架構(gòu),開(kāi)發(fā)人員能夠容易地改變模型轉(zhuǎn)換規(guī)則,在應(yīng)用生成部分可以利用模板機(jī)制產(chǎn)生通用代碼,可大幅縮短開(kāi)發(fā)人員的工作量,有效提升了系統(tǒng)開(kāi)發(fā)的效率,提高了可擴(kuò)展性、可維護(hù)性和可移植性。
整個(gè)網(wǎng)關(guān)程序經(jīng)編譯后就變成可執(zhí)行程序,它封裝了一個(gè)tdl文件定義的對(duì)象模型與另一個(gè)分布式網(wǎng)絡(luò)建模語(yǔ)言定義的對(duì)象映射協(xié)議,當(dāng)開(kāi)啟TENA IDE時(shí),需要“打開(kāi)”一個(gè)網(wǎng)關(guān)應(yīng)用。
模型映射時(shí),尚未考慮SDO聚合的映射方式。這種面向?qū)ο髾C(jī)制具有復(fù)雜的實(shí)現(xiàn)方式,而RTI所支持的OMT對(duì)象過(guò)少,找到一種合適的匹配機(jī)制較難。
參考文獻(xiàn):
[1] 周彥,戴劍偉,蔣曉原. HLA仿真程序設(shè)計(jì)[M]. 北京:電子工業(yè)出版社,2002
Zhou Yan, Dai Jianwei, Jiang Xiaoyuan. HLA Simulation Programming[M]. Beijing: Publishing House of Electronics Industry, 2002 (in Chinese)
[2] 畢博,朱元昌,邸彥強(qiáng),等. TENA網(wǎng)關(guān)及其應(yīng)用研究[J]. 計(jì)算機(jī)測(cè)量與控制,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] 馮潤(rùn)明,王國(guó)玉,黃柯棣,等. TENA及其與HLA的比較[J]. 系統(tǒng)工程與電子技術(shù),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] 王勝濤,楊志飛,杜紅兵,等. 邏輯靶場(chǎng)網(wǎng)關(guān)設(shè)計(jì)方法研究[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] 關(guān)萍萍,翟正軍. 虛擬靶場(chǎng)運(yùn)行支撐體系結(jié)構(gòu)研究[J]. 計(jì)算機(jī)測(cè)量與控制,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網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 哈爾濱工程大學(xué)報(bào),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] 林新,宋焱,王行仁,等. 戰(zhàn)斗機(jī)飛行仿真系統(tǒng)HLA互聯(lián)系統(tǒng)[J]. 系統(tǒng)仿真學(xué)報(bào),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)