,,,
(1.海軍駐大連426廠軍代表室,遼寧 大連 116001;2.中國(guó)艦船研究設(shè)計(jì)中心,武漢 430064;3.海軍工程大學(xué) 電氣工程學(xué)院,武漢 430033)
隨著電力監(jiān)控系統(tǒng)在船舶中的應(yīng)用及部隊(duì)訓(xùn)練需求,亟須建立船舶電力虛擬模擬訓(xùn)練系統(tǒng)[1-3],對(duì)船員進(jìn)行相應(yīng)的培訓(xùn)輔導(dǎo),使其盡快掌握必要的基礎(chǔ)知識(shí)和實(shí)際的操作技能。在船舶電力虛擬模擬訓(xùn)練系統(tǒng)中,訓(xùn)練人員主要通過(guò)人機(jī)交互接口,點(diǎn)擊與實(shí)船一致的虛擬操控面板上的按鍵,實(shí)時(shí)觸發(fā)相關(guān)的指令處理邏輯,以實(shí)現(xiàn)正常的模擬訓(xùn)練功能。因此,對(duì)于上述在模擬訓(xùn)練系統(tǒng)中經(jīng)常出現(xiàn)的指令實(shí)時(shí)處理問(wèn)題,需要尋求一種實(shí)時(shí)的指令處理方法,以便艦員在操作時(shí)能夠體驗(yàn)到與實(shí)際系統(tǒng)操作時(shí)完全一致的實(shí)時(shí)操作,只有設(shè)計(jì)出這樣的訓(xùn)練系統(tǒng),才能真正實(shí)現(xiàn)“訓(xùn)戰(zhàn)一致”[4]。基于以上需求,提出一種基于Qt和OpenDDS的船舶電力模擬訓(xùn)練系統(tǒng)指令處理方法,以滿足船舶電力虛擬模擬訓(xùn)練系統(tǒng)對(duì)指令處理的實(shí)時(shí)性需求。
Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面庫(kù)[5], OpenDDS為對(duì)象管理組織OMG的實(shí)時(shí)數(shù)據(jù)分發(fā)系統(tǒng)的C++開(kāi)源實(shí)現(xiàn)[6],基于Qt和OpenDDS的船舶電力模擬訓(xùn)練系統(tǒng)指令信息流傳遞方法見(jiàn)圖1。參與指令信息流傳遞的對(duì)象如下。
1)訓(xùn)練客戶端,類(lèi)型為參與者(participant),在模擬訓(xùn)練系統(tǒng)中直接與用戶進(jìn)行交互。
2)客戶端仿真模型,類(lèi)型為實(shí)體(entity),為電力模擬訓(xùn)練系統(tǒng)在客戶端的一個(gè)數(shù)據(jù)緩存模型,用于實(shí)時(shí)同步服務(wù)器仿真模型的數(shù)據(jù)。
3)DDS指令發(fā)送接口,類(lèi)型為實(shí)體(entity),為電力模擬訓(xùn)練系統(tǒng)中的DDS指令數(shù)據(jù)分發(fā)模型接口,用于向指令數(shù)據(jù)分發(fā)接口寫(xiě)指令數(shù)據(jù)。
4)DDS指令應(yīng)答接收接口,類(lèi)型為實(shí)體(entity),為電力模擬訓(xùn)練系統(tǒng)中的DDS指令應(yīng)答數(shù)據(jù)分發(fā)模型接口,用于從指令應(yīng)答數(shù)據(jù)分發(fā)接口讀指令應(yīng)答數(shù)據(jù)。
5)DDS指令接收接口,類(lèi)型為實(shí)體(entity),為電力模擬訓(xùn)練系統(tǒng)中的DDS指令數(shù)據(jù)分發(fā)模型接口,用于從指令數(shù)據(jù)分發(fā)接口讀指令數(shù)據(jù)。
6)DDS指令應(yīng)答發(fā)送接口,類(lèi)型為實(shí)體(entity),為電力模擬訓(xùn)練系統(tǒng)中的DDS指令應(yīng)答數(shù)據(jù)分發(fā)模型接口,用于向指令應(yīng)答數(shù)據(jù)分發(fā)接口寫(xiě)指令應(yīng)答數(shù)據(jù)。
7)服務(wù)器仿真模型,類(lèi)型為實(shí)體(entity),為電力模擬訓(xùn)練系統(tǒng)在服務(wù)器端的一個(gè)數(shù)據(jù)緩存模型。用于建立服務(wù)器端電力系統(tǒng)仿真模型,是客戶端仿真模型實(shí)時(shí)數(shù)據(jù)的來(lái)源。服務(wù)器仿真模型與客戶端仿真模型在構(gòu)建時(shí)同屬于一個(gè)類(lèi)XiTong,具有相同的屬性和方法。只是在運(yùn)行時(shí)為不同實(shí)體,其調(diào)用XiTong類(lèi)中不同的方法電力系統(tǒng)仿真服務(wù)器,類(lèi)型為參與者(participant)。作為仿真服務(wù)器,接收指令并做出正確的響應(yīng),同時(shí)為客戶端提供模擬訓(xùn)練所需的電力系統(tǒng)仿真數(shù)據(jù)。

圖1 指令信息流傳遞方法
8)DDS信息倉(cāng)庫(kù),類(lèi)型為參與者(participant),為電力模擬訓(xùn)練系統(tǒng)在客戶端的一個(gè)數(shù)據(jù)緩存模型,用于實(shí)時(shí)同步服務(wù)器仿真模型的數(shù)據(jù)。
整個(gè)信息流傳遞流程如下。
訓(xùn)練客戶端->客戶端仿真模型:調(diào)用faSongZhiLing()方法發(fā)送指令
客戶端仿真模型->客戶端仿真模型:將指令存入待發(fā)送緩存列表
客戶端仿真模型->DDS指令發(fā)送接口:發(fā)射指令待發(fā)送信號(hào)
DDS指令發(fā)送接口->DDS信息倉(cāng)庫(kù):寫(xiě)指令數(shù)據(jù)
DDS信息倉(cāng)庫(kù)->DDS指令接收接口:讀指令數(shù)據(jù)
DDS指令接收接口->服務(wù)器仿真模型:發(fā)射指令到達(dá)信號(hào)
服務(wù)器仿真模型->服務(wù)器仿真模型:將指令存入指令接收緩存列表
服務(wù)器仿真模型->電力系統(tǒng)仿真服務(wù)器:發(fā)射指令到達(dá)信號(hào)
電力系統(tǒng)仿真服務(wù)器->電力系統(tǒng)仿真服務(wù)器:處理指令
電力系統(tǒng)仿真服務(wù)器->服務(wù)器仿真模型:指令處理結(jié)果反饋
服務(wù)器仿真模型->DDS指令應(yīng)答發(fā)送接口:發(fā)射指令應(yīng)答到達(dá)信號(hào)
DDS指令應(yīng)答發(fā)送接口->DDS信息倉(cāng)庫(kù):寫(xiě)指令應(yīng)答數(shù)據(jù)
DDS信息倉(cāng)庫(kù)->DDS指令應(yīng)答接收接口:讀指令應(yīng)答數(shù)據(jù)
DDS指令應(yīng)答接收接口->客戶端仿真模型:發(fā)射指令應(yīng)答到達(dá)信號(hào)
客戶端仿真模型->客戶端仿真模型:將指令應(yīng)答存入指令應(yīng)答接收緩存列表
客戶端仿真模型->訓(xùn)練客戶端:發(fā)射指令應(yīng)答到達(dá)信號(hào)
訓(xùn)練客戶端->訓(xùn)練客戶端:將指令應(yīng)答結(jié)果反饋用戶
當(dāng)指令信息流被傳遞到電力系統(tǒng)仿真服務(wù)器時(shí),仿真服務(wù)器需要對(duì)指令進(jìn)行處理,即需要完成以下任務(wù)。
從指令接收緩存列表頭部取出一條待處理指令。
根據(jù)指令類(lèi)型和當(dāng)前模擬電力系統(tǒng)的控制方式和指令的操作部位,判斷指令的合法性。
若指令合法,繼續(xù)根據(jù)指令類(lèi)型和電力系統(tǒng)當(dāng)前的運(yùn)行狀態(tài),判斷指令的合法性。
若指令合法,則執(zhí)行指令。
將指令的處理結(jié)果反饋給訓(xùn)練客戶端,若指令執(zhí)行失敗(包括指令不合法等情況),在指令應(yīng)答信息中給出執(zhí)行失敗的原因。
指令合法性判斷方法見(jiàn)圖2。

圖2 指令合法性判斷流程
為了對(duì)設(shè)計(jì)的指令架構(gòu)的性能進(jìn)行比較與分析,必須通過(guò)定量化、通用的一些性能測(cè)試工具與方法,對(duì)上述方法進(jìn)行測(cè)試,并對(duì)結(jié)果進(jìn)行比較與分析。軟件其他功能可以通過(guò)檢驗(yàn)驗(yàn)證,不需要測(cè)試[7]。負(fù)載測(cè)試是為了檢驗(yàn)系統(tǒng)在給定負(fù)載下是否能達(dá)到預(yù)期性能指標(biāo)。文中將主要采用Windows資源監(jiān)視器進(jìn)行負(fù)載測(cè)試。
分別同時(shí)啟動(dòng)單個(gè)客戶端、50個(gè)客戶端,訪問(wèn)相應(yīng)的仿真電力系統(tǒng)實(shí)時(shí)數(shù)據(jù)包以及典型的指令實(shí)時(shí)數(shù)據(jù)包,對(duì)OpenDDS數(shù)據(jù)分發(fā)方法進(jìn)行測(cè)試,得到相應(yīng)的測(cè)試結(jié)果。
隨著并行客戶端訪問(wèn)量的增加,傳輸?shù)钠骄倲?shù)據(jù)也相應(yīng)增加,由于并行客戶端訪問(wèn)量的增加,服務(wù)器的響應(yīng)時(shí)間也在相應(yīng)增大,其由單客戶端的,增大至100客戶端。由于在所有實(shí)時(shí)分發(fā)數(shù)據(jù)中,仿真電力系統(tǒng)數(shù)據(jù)幀屬于最長(zhǎng)的數(shù)據(jù)幀,其大小為16.7 K,而指令數(shù)據(jù)幀均比較短,其大小在1 K以?xún)?nèi)。仿真電力系統(tǒng)數(shù)據(jù)幀為周期數(shù)據(jù),模擬訓(xùn)練服務(wù)器每100 ms發(fā)送一次。指令數(shù)據(jù)幀為間歇性隨機(jī)數(shù)據(jù),由客戶端根據(jù)用戶的操作隨機(jī)發(fā)送。通過(guò)測(cè)試可知,對(duì)于實(shí)際情況中最常用的1-10個(gè)并行客戶端場(chǎng)景,通信延遲時(shí)間不大于2 ms,對(duì)于極限情況下的100個(gè)并行客戶端場(chǎng)景,通信延遲時(shí)間不大于100 ms。上述實(shí)時(shí)數(shù)據(jù)分發(fā)性能是完全滿足船舶電力模擬訓(xùn)練系統(tǒng)實(shí)際應(yīng)用的需求。
文中提出一種基于Qt和OpenDDS的船舶電力模擬訓(xùn)練系統(tǒng)指令處理方法。首先,基于指令信息流傳遞方法,對(duì)參與到指令實(shí)時(shí)處理中的多個(gè)對(duì)象進(jìn)行分別解耦建模,并對(duì)多個(gè)實(shí)體間消息相互傳遞的相互作用和關(guān)系進(jìn)行描述;然后,根據(jù)系統(tǒng)當(dāng)前狀態(tài)對(duì)指令的合法性進(jìn)行實(shí)時(shí)判定;最后,對(duì)基于Qt和OpenDDS的船舶電力模擬訓(xùn)練系統(tǒng)指令處理方法進(jìn)行負(fù)載測(cè)試。測(cè)試結(jié)果表明,該方法能滿足船舶電力模擬訓(xùn)練系統(tǒng)實(shí)際應(yīng)用需求。