梁培生,周玉芳,翟永翠
(中國船舶重工集團(tuán)公司江蘇自動化研究所,江蘇 連云港 222006)
分布交互仿真(Distributed Interactive Simulation)具有分布性、交互性、異構(gòu)型、時空一致性和開放性特點[1]。它的體系結(jié)構(gòu)主要經(jīng)歷了仿真組網(wǎng)(Simulation Networking,SIMNET)、分布交互式仿真(Distributed Interactive Simulation,DIS)、聚合級仿真協(xié)議(Aggregate Level Simulation Protocol,ALSP)、高層體系結(jié)構(gòu)(High Level Architecture,HLA)、試驗與訓(xùn)練使能體系結(jié)構(gòu)[2](Test and Training Enabling Architecture,TENA)等階段。
HLA主要針對建模與仿真領(lǐng)域,因而它主要應(yīng)用于虛擬和構(gòu)造仿真,而TENA主要針對靶場領(lǐng)域,它所支持的是真實仿真。因而構(gòu)建LVC體系結(jié)構(gòu)可以從HLA或者 TENA方面進(jìn)行研究??紤]到目前 TENA參考資料較少并且只支持真實仿真等原因,本文打算從HLA進(jìn)行研究。HLA時間管理的出發(fā)點是在保證正確地實現(xiàn)聯(lián)邦成員間仿真時間的協(xié)調(diào)推進(jìn)和數(shù)據(jù)交換的前提下,定義所需服務(wù)的最小集合,它的時間管理原則[3]主要是不存在全局時鐘,可以產(chǎn)生“時戳”是“未來”的事件而且聯(lián)邦成員不需要按事件的時戳調(diào)度事件。同時它將聯(lián)邦成員設(shè)為時間控制和時間受限等狀態(tài),時間控制成員只能發(fā)送時戳消息,時間受限成員只能接收時戳消息,同時當(dāng)聯(lián)邦成員請求時間推進(jìn)時,必須得到RTI的同意,這樣就在一定程度上影響了信息傳輸?shù)膶崟r性。
由于真實仿真的實時性要求比較高,而LVC為了支持真實仿真,必須在實時性方面較以往體系結(jié)構(gòu)有較大的改善。為了實現(xiàn)這一目標(biāo),在參考了 HLA相關(guān)知識的基礎(chǔ)上,本文提出了一套LVC時間管理的實時性方法,并給出了性能測試。測試結(jié)果表明該方法的提出對分布交互仿真的發(fā)展具有重要的意義。
HLA時間管理在實時性方面主要存在以下幾個問題:
1)在HLA中,每個聯(lián)邦成員可以有自己的聯(lián)邦成員時間,而各個成員的聯(lián)邦成員時間可以不同,這樣雖然可以提高聯(lián)邦的交互性。但這樣一個聯(lián)邦成員Fi發(fā)送消息給另一各聯(lián)邦成員 Fj請求知道它目前 t時刻的狀態(tài)信息,這里的t時刻是相對Fi的聯(lián)邦成員時間來說的,而Fj的 目前聯(lián)邦成員時間小于t,F(xiàn)j等到自己聯(lián)邦成員時間到達(dá) t時把自己的信息發(fā)送給Fi。這樣,F(xiàn)i接收到的消息并不是自己想要的信息,從而導(dǎo)致了實時消息的錯誤。
2)在HLA中,由于各個聯(lián)邦成員內(nèi)部都可以有自己的聯(lián)邦成員時間[4],當(dāng)要推進(jìn)聯(lián)邦成員時間時,必須向RTI提出“時間推進(jìn)請求”服務(wù),而RTI要根據(jù)聯(lián)邦成員的邏輯時間管理策略、消息傳遞機(jī)制和時間推進(jìn)機(jī)制的配置信息來響應(yīng)這個請求,所以當(dāng)一個聯(lián)邦成員請求時間推進(jìn)時,不一定可以馬上得到RTI的響應(yīng),這樣聯(lián)邦成員不能及時推進(jìn)它的邏輯時間,這樣就產(chǎn)生了聯(lián)邦成員邏輯時間推進(jìn)響應(yīng)速度比較慢的問題。
3)目前一些 RTI的軟件開發(fā)采用的是基于CORBA的技術(shù),而從目前的資料來看,CORBA本身就沒有提供實時功能。如果想真正實現(xiàn)實時,就不能采用CORBA技術(shù),而必須通過調(diào)用底層的API函數(shù)來實現(xiàn)。
4)聯(lián)邦成員間的消息傳遞是通過網(wǎng)絡(luò)來完成的,網(wǎng)絡(luò)傳輸總存在時延,而且時延還受到網(wǎng)絡(luò)的帶寬和流量的限制。當(dāng)系統(tǒng)要求實時仿真時,就會出現(xiàn)各種預(yù)期不到的問題,而無法實現(xiàn)實時要求,這樣就產(chǎn)生了網(wǎng)絡(luò)延遲較大的問題。
5)在實際的系統(tǒng)中,DIS仿真系統(tǒng)是實物直接和仿真機(jī)互聯(lián),然后接入到DIS系統(tǒng)中,實現(xiàn)的是實時仿真;由于 HLA本身仿真的盟員較多,加上仿真設(shè)備性能的影響,會使得仿真不能實時推進(jìn),仿真時間與墻鐘(wall clock)不一致。當(dāng)DIS和HLA系統(tǒng)互聯(lián)時,很難實現(xiàn)系統(tǒng)的協(xié)調(diào)同步,從而在HLA和DIS系統(tǒng)互操作時無法滿足實時仿真的要求[5]。
LVC仿真體系結(jié)構(gòu)的目的是為了同時支持真實仿真(L)、虛擬仿真(V)和構(gòu)造仿真(C)之間的互操作。對于一個真實仿真來說,實時性的要求是構(gòu)建一個真實仿真系統(tǒng)的重要因素。對于 HLA來說,HLA時間管理是可選服務(wù),只定義了所需服務(wù)的最小集合,目的是盡量減少時間管理服務(wù)對消息傳遞的延遲,但是這些措施并不足以滿足真實仿真的要求。真實仿真需要端到端的網(wǎng)絡(luò)性能預(yù)測能力,但是 HLA沒有提供用于規(guī)定端到端性能預(yù)測所需要的接口,而且 HLA只支持可靠的(reliable)和盡可能快的(best effort)兩種消息傳遞方式,遠(yuǎn)不能滿足真實仿真對消息傳遞的要求。另外,標(biāo)準(zhǔn)的 HLA時間管理并不能區(qū)分需要實時處理的消息和非實時消息,因此不能給有實時處理要求的消息優(yōu)先分配資源。為了實現(xiàn)LVC體系結(jié)構(gòu)的構(gòu)建,就必須在時間管理的實時性方面進(jìn)行深入研究。
鑒于 HLA時間管理機(jī)制在實時性方面存在上述問題,國內(nèi)外有不少專家提出了 HLA的實時性改善方法,如提高網(wǎng)絡(luò)和主機(jī)性能、增加特殊的硬件和采用實時算法[3]等等,但由于其代價比較大,本文提出了如下兩種 LVC時間管理實時性方法:優(yōu)先級方法HLA雖然提出過,但沒有真正實現(xiàn);最大發(fā)送時間限制是一個新提出的方法,因此LVC的時間管理機(jī)制與RTI的時間管理機(jī)制不同。
1)優(yōu)先級方法 優(yōu)先級方法的本質(zhì)是減少同一時刻在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)量,優(yōu)先級在設(shè)置時可以對成員設(shè)置優(yōu)先級,也可以對成員發(fā)送的消息設(shè)置優(yōu)先級。如對成員設(shè)置優(yōu)先級時,中間件將對各個成員的類型進(jìn)行判斷,根據(jù)仿真需要給各個成員設(shè)置不同等級的優(yōu)先級,優(yōu)先級高的成員中間件會提前發(fā)送,這樣在網(wǎng)絡(luò)上傳輸?shù)闹皇歉邇?yōu)先級成員發(fā)送的消息,等到高優(yōu)先級成員消息發(fā)送完畢以后,再發(fā)送中、低優(yōu)先級成員的消息。對消息設(shè)置不同優(yōu)先級原理類似,通過給成員發(fā)送的消息設(shè)置優(yōu)先級,中間件將會根據(jù)消息的優(yōu)先級大小在網(wǎng)絡(luò)上傳輸,這樣也同樣減少了網(wǎng)絡(luò)的數(shù)據(jù)量。
優(yōu)先級方法實現(xiàn)過程是當(dāng)聯(lián)邦成員需要發(fā)送消息時首先向中間件發(fā)送一個請求,這個請求中包含了成員的類型,如真實仿真成員、虛擬仿真成員和構(gòu)造仿真成員。用戶在中間件中給真實仿真成員、虛擬仿真成員和構(gòu)造仿真成員設(shè)置不同級別的優(yōu)先級,優(yōu)先級的數(shù)值大小是用戶根據(jù)自己的實際需要來設(shè)置的。這樣當(dāng)中間件收到各個聯(lián)邦成員的消息發(fā)送請求時會根據(jù)事先設(shè)置好的優(yōu)先級大小來給各個聯(lián)邦成員優(yōu)先級賦值,中間件會根據(jù)優(yōu)先級的大小來將消息發(fā)送到接收方。例如若為真實仿真成員,則用戶可以在中間件上將該聯(lián)邦成員的優(yōu)先級設(shè)為高優(yōu)先級,將其他聯(lián)邦成員設(shè)置中、低優(yōu)先級,這樣給有實時處理要求的真實仿真成員的消息優(yōu)先分配資源,從而可以保證真實仿真成員發(fā)送的消息能夠及時的發(fā)送到消息接收方,其具體的實現(xiàn)過程如圖1所示。
圖1 優(yōu)先級實現(xiàn)過程
2)最大發(fā)送時間限制 最大發(fā)送時間限制是中間件所具有的一個對接收到的消息超時與否進(jìn)行判斷的功能。當(dāng)接收到的消息發(fā)送超時時,中間件將根據(jù)仿真成員的要求來請求成員重新發(fā)送。具體的實現(xiàn)過程是仿真系統(tǒng)中的聯(lián)邦成員在發(fā)送的消息中事先增加了一個最大發(fā)送時間限制參數(shù),該參數(shù)表示此消息必須在規(guī)定的時間之內(nèi)發(fā)送到接收方,同時增加了一個發(fā)送超時是否重新發(fā)送參數(shù)。當(dāng)此參數(shù)為真時,表示發(fā)送超時將重新發(fā)送;若此參數(shù)為假,則表示發(fā)送超時無須重新發(fā)送。當(dāng)中間件接收到該消息后,它將負(fù)責(zé)計算接收到的消息的傳輸時間是否超過了規(guī)定的最大發(fā)送時間限制,若消息沒有在規(guī)定的時間內(nèi)成功發(fā)送到中間件,則中間件將發(fā)送一個信息發(fā)送超時報告,同時根據(jù)發(fā)送超時是否重新發(fā)送參數(shù)來判斷是否請求聯(lián)邦成員重新發(fā)送。這種處理方式在一定程度上提高了信息發(fā)送的實時性,也避免了對錯誤信息的處理,提高了仿真的效率。同時為了解決消息發(fā)送時發(fā)生邏輯錯誤,LVC時間管理的實時性方法還采用了“因果關(guān)系處理”服務(wù),為了防止出現(xiàn)聯(lián)邦成員接收到的消息邏輯時間前后不一致,中間件將會判斷成員需要接收的多個消息是否具有因果關(guān)系,若具有因果關(guān)系則LVC時間管理中間件首先將“因消息”發(fā)送到接收方,再將“果消息”發(fā)送到接收方。這種處理方式在一定程度上解決了“因果顛倒”的問題。
LVC時間管理中間件作為聯(lián)邦執(zhí)行的底層支撐系統(tǒng),其體系結(jié)構(gòu)的優(yōu)劣直接關(guān)系到仿真系統(tǒng)的性能,從其邏輯結(jié)構(gòu)看,有以下三種結(jié)構(gòu)模型:
1)集中式結(jié)構(gòu)模型 這種結(jié)構(gòu)的特點是具有一個全功能的中心節(jié)點,在該中心節(jié)點上實現(xiàn)所有的服務(wù)。聯(lián)邦成員之間無直接的通信關(guān)系,所有的成員之間都通過中心節(jié)點提供的服務(wù),來實現(xiàn)消息的轉(zhuǎn)發(fā)與交換。其優(yōu)點是結(jié)構(gòu)簡單,容易實現(xiàn),但中心節(jié)點負(fù)擔(dān)大,將成為系統(tǒng)的瓶頸,不利于系統(tǒng)規(guī)模的擴(kuò)展。
2)分布式結(jié)構(gòu)模型 這種結(jié)構(gòu)的特點類似于ALSP系統(tǒng)的體系結(jié)構(gòu),不存在中心節(jié)點,但在每個仿真節(jié)點機(jī)上都有自己的局部 RTI服務(wù)器(Local RTI),聯(lián)邦成員只需向本地RTI服務(wù)進(jìn)程提出請求,由本地RTI做出響應(yīng)。如果本地RTI不能完成響應(yīng),則請求外部的RTI服務(wù)進(jìn)程協(xié)同完成。
3)層次式結(jié)構(gòu)模型 層次式結(jié)構(gòu)模型結(jié)合分布式和集中式實現(xiàn)方法,以克服各自存在的問題,這種結(jié)構(gòu)模型中有一個中心服務(wù)器,用于執(zhí)行一些全局操作,在中心服務(wù)器下設(shè)置一組子RTI服務(wù)器,每個子服務(wù)器負(fù)責(zé)一組聯(lián)邦成員的服務(wù)請求,涉及到全局操作的請求,由中心服務(wù)器協(xié)調(diào)各個子RTI服務(wù)器共同完成。
由于層次式結(jié)構(gòu)模型可以減少全局操作的延遲,提高仿真系統(tǒng)運行的效率。對于一些局部操作,由RTI的子服務(wù)器分散執(zhí)行,可降低計算的耦合度,從而提高執(zhí)行效率。因此本文的LVC時間管理中間件采用這種層次式的結(jié)構(gòu)模型。其系統(tǒng)總體模型如圖2所示。
圖2 系統(tǒng)總體模型圖
LVC時間管理中間件提供給聯(lián)邦成員調(diào)用的函數(shù)及功能主要有以下幾類:
1)MemberJoinRequest()
此函數(shù)的主要功能是當(dāng)中間件發(fā)送仿真初始化報文以后,成員調(diào)用此函數(shù)加入到仿真系統(tǒng)中,如果加入成功的話,中間件會發(fā)送一個回執(zhí)信息。
2)SendPublishMsg()
此函數(shù)的主要功能是成員調(diào)用此函數(shù)后可以向中間件發(fā)送自己公布的消息,即成員對外要發(fā)送的消息。
3)SendSubscribeMsg()
此函數(shù)的主要功能是成員調(diào)用此函數(shù)后可以向中間件發(fā)送自己訂購的消息,即成員要接收的消息。
4)TimeAdvanceRequest()
此函數(shù)的主要功能是成員通過調(diào)用此函數(shù)來實現(xiàn)仿真時間的推進(jìn)。
此功能的實現(xiàn)算法如下:
①處理異常:如果聯(lián)邦成員沒有加入聯(lián)邦或者已經(jīng)處于掛起狀態(tài),則引發(fā)異常;如果請求推進(jìn)的邏輯時間小于聯(lián)邦成員的當(dāng)前邏輯時間,則引發(fā)異常。
②計算最大可用邏輯時間(GALT):GALT的計算與推進(jìn)服務(wù)的類型、聯(lián)邦成員所處的狀態(tài)、Lookahead以及時戳隊列中的最小時標(biāo)信息等因素有關(guān),絕不能簡單地歸結(jié)為min{Ti+Li}(Ti為聯(lián)邦成員i的當(dāng)前邏輯時間,Li為聯(lián)邦成員i的Lookahead)。
③重新計算當(dāng)前邏輯時間 T:如果聯(lián)邦成員不是時間受限成員,則 T=theTime;否則T=min{minTSO,GALT,theTime},其中theTime為調(diào)用服務(wù)的參數(shù),minTSO為獲得的聯(lián)邦成員時戳隊列中最小消息的時標(biāo)。
④處理Lookahead:如果 Lookahead在推進(jìn)的過程中逐漸變小,此時必須檢查聯(lián)邦成員的 Lookahead是否在變化,并重新計算Lookahead。
⑤發(fā)送時戳消息:調(diào)用 SendPublishMsg()函數(shù),將時戳隊列中的消息按優(yōu)先級順序發(fā)送出去。
⑥中間件同意聯(lián)邦成員推進(jìn):調(diào)用timeAdvanceGrant回調(diào)服務(wù),允許聯(lián)邦成員推進(jìn)到邏輯時間T。
LVC時間管理中間件的內(nèi)部回調(diào)函數(shù)主要有以下幾類:
1)EnableMemberJoin()
此函數(shù)的主要功能是 LVC時間管理中間件內(nèi)部調(diào)用此函數(shù)后向成員發(fā)送一個加入回執(zhí)。
2)MiddlewareProcess()
此函數(shù)的是LVC時間管理中間件的核心部分,它主要用來完成優(yōu)先級處理和因果關(guān)系處理,中間件內(nèi)部調(diào)用此函數(shù)后,會根據(jù)優(yōu)先級的大小來決定發(fā)送消息的順序,同時此函數(shù)還會根據(jù)成員訂購的消息是否具有因果關(guān)系來優(yōu)先發(fā)送“因消息”,從而防止出現(xiàn)“因果顛倒”錯誤。
3)Federateprocess()
此函數(shù)的主要功能是對接收到的消息進(jìn)行處理,判斷接收到的消息是否超時,當(dāng)中間件收到公布消息時,該函數(shù)獲得成員發(fā)送時間、中間件時間以及最大發(fā)送時間等數(shù)據(jù)之后,來判斷接收到的消息是否超時,若發(fā)送超時中間件請求成員重新發(fā)送。
4)processovertime()
此函數(shù)的主要功能是 LVC時間管理中間件內(nèi)部調(diào)用此函數(shù)后對接收到的公布消息的最大發(fā)送時間限制進(jìn)行處理,如果發(fā)送超時提示用戶重新發(fā)送。
5)timeAdvanceGrant()
中間件同意聯(lián)邦成員的時間推進(jìn),通知聯(lián)邦成員將時間推進(jìn)到其請求的時刻。
聯(lián)邦成員調(diào)用 LVC時間管理中間件過程如圖3所示。
圖3 聯(lián)邦成員調(diào)用LVC時間管理中間件過程
Windows XP操作系統(tǒng)的三臺計算機(jī)、MAK RTI1.3V6版本和LVC時間管理中間件。
由于真實仿真成員的實時性要求比較高,因此LVC仿真系統(tǒng)信息傳輸?shù)膶崟r性要求比其他的仿真系統(tǒng)要求要高,這時LVC仿真系統(tǒng)與其他系統(tǒng)的主要區(qū)別之一。
設(shè)定3個聯(lián)邦成員:真實仿真成員Federate1、虛擬仿真成員 Federate2和構(gòu)造仿真成員 Federate3。Federate1訂購和接收Federate2,Federate3的數(shù)據(jù),公布和更新自己的數(shù)據(jù)。Federate2訂購和接收Federate1的數(shù)據(jù),公布和更新自己的數(shù)據(jù)。Federate3訂購和接收Federate1的數(shù)據(jù)[6]。
1)Federate1公布自己的數(shù)據(jù)和訂購 Federate2,Federate3的數(shù)據(jù)。Federate2訂購Federate1的數(shù)據(jù),公布和更新自己的數(shù)據(jù)。Federate3訂購Federate1的數(shù)據(jù),公布自己的數(shù)據(jù),接下來進(jìn)入仿真循環(huán)。
2)Federate1更新自己的數(shù)據(jù)。
3)Federate2和 Federate3確保接收到 Federate1的更新數(shù)據(jù)。
4)Federate2和Federate3分別更新自己的數(shù)據(jù)。
5)Federate1確保接收到過程4)中Federate2和Federate3的更新數(shù)據(jù)。
6)重復(fù)過程2)~過程5),直至仿真循環(huán)結(jié)束。
在不同數(shù)據(jù)量的情況下,記錄過程2)~過程5)在LVC時間管理中間件中的時間延遲,然后將此同樣 的環(huán)境在RTI1.3V6中測試。測試過程如圖4所示。
圖4 LVC時間管理中間件測試過程
在每種數(shù)據(jù)量下測量500組數(shù)據(jù),獲得傳輸延遲的最大延遲和最小延遲,然后獲得這500組數(shù)據(jù)的均值。部分測試數(shù)據(jù)如表1所示。
表1 RTI1.3V6和LVC時間管理中間件時間延遲測試數(shù)
由均值數(shù)據(jù)得到的 LVC時間管理中間件與RTI1.3V6延遲大小對比如圖5所示。
圖5 LVC時間管理中間件與RTI1.3V6時間延遲比較
HLA解決了仿真領(lǐng)域中的可重用和互操作問題,但它應(yīng)用在實時性要求較高的仿真系統(tǒng)中還存在缺陷和不足,從而也就限制了它的應(yīng)用范圍。LVC體系結(jié)構(gòu)的提出就是為了能夠在真正意義上實現(xiàn)真實、虛擬和構(gòu)造這三種類型的仿真,而實時問題是LVC能否真正實現(xiàn)的關(guān)鍵,也是目前基于LVC分布仿真技術(shù)中極具挑戰(zhàn)性的研究方向之一,其應(yīng)用前景非常廣闊。
本文針對HLA時間管理實時性方面存在的問題,提出了分布交互仿真的實時性改善方法。在綜合考慮LVC時間管理中間件設(shè)計時應(yīng)該注意的問題之后,實現(xiàn)了 LVC時間管理中間件的設(shè)計,進(jìn)而分別對RTI1.3V6和LVC時間管理中間件進(jìn)行性能測試,測試結(jié)果表明 LVC的時間管理在實時性方面較RTI1.3V6有較大的改善,LVC時間管理中間件工程使用的實現(xiàn)將會進(jìn)一步推動分布交互仿真的發(fā)展。
[1]周彥,戴劍偉.HLA仿真程序設(shè)計[M].北京:電子工業(yè)出版社,2008.
[2]高世峰,蔣海濱,周紅梅.分布交互式仿真體系結(jié)構(gòu)發(fā)展?fàn)顩r的研究[C].2003年全國仿真技術(shù)學(xué)術(shù)會議論文集,2003.
[3]翟永翠,程健慶.HLA中時間管理及其對實時仿真改善方法的研究[J].計算機(jī)仿真,2003,8(8):144-147.
[4]徐大勇,蔣曉原,王鈺.HLA時間管理的實時性擴(kuò)展[J].計算機(jī)仿真,2005,6(5):202-207.
[5]姚新宇,黃柯棣.基于HLA時間管理的實時時間控制和樂觀時間同步算法設(shè)計[J].國防科技大學(xué)學(xué)報,1999(6):84-87.
[6]何少情,王懷民,姚益平,等.HLA_RTI時間管理算法性能測試[J].系統(tǒng)仿真學(xué)報,2005,2(2):358-361.