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