,,,
(1.海軍駐大連426廠軍代表室,遼寧 大連 116001;2.中國艦船研究設(shè)計中心,武漢 430064;3.海軍工程大學(xué) 電氣工程學(xué)院,武漢 430033)
隨著電力監(jiān)控系統(tǒng)在船舶中的應(yīng)用及部隊訓(xùn)練需求,亟須建立船舶電力虛擬模擬訓(xùn)練系統(tǒng)[1-3],對船員進(jìn)行相應(yīng)的培訓(xùn)輔導(dǎo),使其盡快掌握必要的基礎(chǔ)知識和實際的操作技能。在船舶電力虛擬模擬訓(xùn)練系統(tǒng)中,訓(xùn)練人員主要通過人機(jī)交互接口,點擊與實船一致的虛擬操控面板上的按鍵,實時觸發(fā)相關(guān)的指令處理邏輯,以實現(xiàn)正常的模擬訓(xùn)練功能。因此,對于上述在模擬訓(xùn)練系統(tǒng)中經(jīng)常出現(xiàn)的指令實時處理問題,需要尋求一種實時的指令處理方法,以便艦員在操作時能夠體驗到與實際系統(tǒng)操作時完全一致的實時操作,只有設(shè)計出這樣的訓(xùn)練系統(tǒng),才能真正實現(xiàn)“訓(xùn)戰(zhàn)一致”[4]?;谝陨闲枨?,提出一種基于Qt和OpenDDS的船舶電力模擬訓(xùn)練系統(tǒng)指令處理方法,以滿足船舶電力虛擬模擬訓(xùn)練系統(tǒng)對指令處理的實時性需求。
Qt是一個跨平臺的C++圖形用戶界面庫[5], OpenDDS為對象管理組織OMG的實時數(shù)據(jù)分發(fā)系統(tǒng)的C++開源實現(xiàn)[6],基于Qt和OpenDDS的船舶電力模擬訓(xùn)練系統(tǒng)指令信息流傳遞方法見圖1。參與指令信息流傳遞的對象如下。
1)訓(xùn)練客戶端,類型為參與者(participant),在模擬訓(xùn)練系統(tǒng)中直接與用戶進(jìn)行交互。
2)客戶端仿真模型,類型為實體(entity),為電力模擬訓(xùn)練系統(tǒng)在客戶端的一個數(shù)據(jù)緩存模型,用于實時同步服務(wù)器仿真模型的數(shù)據(jù)。
3)DDS指令發(fā)送接口,類型為實體(entity),為電力模擬訓(xùn)練系統(tǒng)中的DDS指令數(shù)據(jù)分發(fā)模型接口,用于向指令數(shù)據(jù)分發(fā)接口寫指令數(shù)據(jù)。
4)DDS指令應(yīng)答接收接口,類型為實體(entity),為電力模擬訓(xùn)練系統(tǒng)中的DDS指令應(yīng)答數(shù)據(jù)分發(fā)模型接口,用于從指令應(yīng)答數(shù)據(jù)分發(fā)接口讀指令應(yīng)答數(shù)據(jù)。
5)DDS指令接收接口,類型為實體(entity),為電力模擬訓(xùn)練系統(tǒng)中的DDS指令數(shù)據(jù)分發(fā)模型接口,用于從指令數(shù)據(jù)分發(fā)接口讀指令數(shù)據(jù)。
6)DDS指令應(yīng)答發(fā)送接口,類型為實體(entity),為電力模擬訓(xùn)練系統(tǒng)中的DDS指令應(yīng)答數(shù)據(jù)分發(fā)模型接口,用于向指令應(yīng)答數(shù)據(jù)分發(fā)接口寫指令應(yīng)答數(shù)據(jù)。
7)服務(wù)器仿真模型,類型為實體(entity),為電力模擬訓(xùn)練系統(tǒng)在服務(wù)器端的一個數(shù)據(jù)緩存模型。用于建立服務(wù)器端電力系統(tǒng)仿真模型,是客戶端仿真模型實時數(shù)據(jù)的來源。服務(wù)器仿真模型與客戶端仿真模型在構(gòu)建時同屬于一個類XiTong,具有相同的屬性和方法。只是在運行時為不同實體,其調(diào)用XiTong類中不同的方法電力系統(tǒng)仿真服務(wù)器,類型為參與者(participant)。作為仿真服務(wù)器,接收指令并做出正確的響應(yīng),同時為客戶端提供模擬訓(xùn)練所需的電力系統(tǒng)仿真數(shù)據(jù)。
圖1 指令信息流傳遞方法
8)DDS信息倉庫,類型為參與者(participant),為電力模擬訓(xùn)練系統(tǒng)在客戶端的一個數(shù)據(jù)緩存模型,用于實時同步服務(wù)器仿真模型的數(shù)據(jù)。
整個信息流傳遞流程如下。
訓(xùn)練客戶端->客戶端仿真模型:調(diào)用faSongZhiLing()方法發(fā)送指令
客戶端仿真模型->客戶端仿真模型:將指令存入待發(fā)送緩存列表
客戶端仿真模型->DDS指令發(fā)送接口:發(fā)射指令待發(fā)送信號
DDS指令發(fā)送接口->DDS信息倉庫:寫指令數(shù)據(jù)
DDS信息倉庫->DDS指令接收接口:讀指令數(shù)據(jù)
DDS指令接收接口->服務(wù)器仿真模型:發(fā)射指令到達(dá)信號
服務(wù)器仿真模型->服務(wù)器仿真模型:將指令存入指令接收緩存列表
服務(wù)器仿真模型->電力系統(tǒng)仿真服務(wù)器:發(fā)射指令到達(dá)信號
電力系統(tǒng)仿真服務(wù)器->電力系統(tǒng)仿真服務(wù)器:處理指令
電力系統(tǒng)仿真服務(wù)器->服務(wù)器仿真模型:指令處理結(jié)果反饋
服務(wù)器仿真模型->DDS指令應(yīng)答發(fā)送接口:發(fā)射指令應(yīng)答到達(dá)信號
DDS指令應(yīng)答發(fā)送接口->DDS信息倉庫:寫指令應(yīng)答數(shù)據(jù)
DDS信息倉庫->DDS指令應(yīng)答接收接口:讀指令應(yīng)答數(shù)據(jù)
DDS指令應(yīng)答接收接口->客戶端仿真模型:發(fā)射指令應(yīng)答到達(dá)信號
客戶端仿真模型->客戶端仿真模型:將指令應(yīng)答存入指令應(yīng)答接收緩存列表
客戶端仿真模型->訓(xùn)練客戶端:發(fā)射指令應(yīng)答到達(dá)信號
訓(xùn)練客戶端->訓(xùn)練客戶端:將指令應(yīng)答結(jié)果反饋用戶
當(dāng)指令信息流被傳遞到電力系統(tǒng)仿真服務(wù)器時,仿真服務(wù)器需要對指令進(jìn)行處理,即需要完成以下任務(wù)。
從指令接收緩存列表頭部取出一條待處理指令。
根據(jù)指令類型和當(dāng)前模擬電力系統(tǒng)的控制方式和指令的操作部位,判斷指令的合法性。
若指令合法,繼續(xù)根據(jù)指令類型和電力系統(tǒng)當(dāng)前的運行狀態(tài),判斷指令的合法性。
若指令合法,則執(zhí)行指令。
將指令的處理結(jié)果反饋給訓(xùn)練客戶端,若指令執(zhí)行失敗(包括指令不合法等情況),在指令應(yīng)答信息中給出執(zhí)行失敗的原因。
指令合法性判斷方法見圖2。
圖2 指令合法性判斷流程
為了對設(shè)計的指令架構(gòu)的性能進(jìn)行比較與分析,必須通過定量化、通用的一些性能測試工具與方法,對上述方法進(jìn)行測試,并對結(jié)果進(jìn)行比較與分析。軟件其他功能可以通過檢驗驗證,不需要測試[7]。負(fù)載測試是為了檢驗系統(tǒng)在給定負(fù)載下是否能達(dá)到預(yù)期性能指標(biāo)。文中將主要采用Windows資源監(jiān)視器進(jìn)行負(fù)載測試。
分別同時啟動單個客戶端、50個客戶端,訪問相應(yīng)的仿真電力系統(tǒng)實時數(shù)據(jù)包以及典型的指令實時數(shù)據(jù)包,對OpenDDS數(shù)據(jù)分發(fā)方法進(jìn)行測試,得到相應(yīng)的測試結(jié)果。
隨著并行客戶端訪問量的增加,傳輸?shù)钠骄倲?shù)據(jù)也相應(yīng)增加,由于并行客戶端訪問量的增加,服務(wù)器的響應(yīng)時間也在相應(yīng)增大,其由單客戶端的,增大至100客戶端。由于在所有實時分發(fā)數(shù)據(jù)中,仿真電力系統(tǒng)數(shù)據(jù)幀屬于最長的數(shù)據(jù)幀,其大小為16.7 K,而指令數(shù)據(jù)幀均比較短,其大小在1 K以內(nèi)。仿真電力系統(tǒng)數(shù)據(jù)幀為周期數(shù)據(jù),模擬訓(xùn)練服務(wù)器每100 ms發(fā)送一次。指令數(shù)據(jù)幀為間歇性隨機(jī)數(shù)據(jù),由客戶端根據(jù)用戶的操作隨機(jī)發(fā)送。通過測試可知,對于實際情況中最常用的1-10個并行客戶端場景,通信延遲時間不大于2 ms,對于極限情況下的100個并行客戶端場景,通信延遲時間不大于100 ms。上述實時數(shù)據(jù)分發(fā)性能是完全滿足船舶電力模擬訓(xùn)練系統(tǒng)實際應(yīng)用的需求。
文中提出一種基于Qt和OpenDDS的船舶電力模擬訓(xùn)練系統(tǒng)指令處理方法。首先,基于指令信息流傳遞方法,對參與到指令實時處理中的多個對象進(jìn)行分別解耦建模,并對多個實體間消息相互傳遞的相互作用和關(guān)系進(jìn)行描述;然后,根據(jù)系統(tǒng)當(dāng)前狀態(tài)對指令的合法性進(jìn)行實時判定;最后,對基于Qt和OpenDDS的船舶電力模擬訓(xùn)練系統(tǒng)指令處理方法進(jìn)行負(fù)載測試。測試結(jié)果表明,該方法能滿足船舶電力模擬訓(xùn)練系統(tǒng)實際應(yīng)用需求。