李國帥,范惠林,竹武林
(空軍航空大學,長春 130022)
為滿足某型飛機武器系統(tǒng)日常操作訓練和技術培訓的需要,解決實裝訓練中的矛盾,在充分考慮實際訓練需要的基礎上,運用計算機仿真等技術,開發(fā)了某型飛機武器模擬訓練系統(tǒng),其中軟件系統(tǒng)的開發(fā)是武器模擬訓練系統(tǒng)研制的核心,而軟件系統(tǒng)的通信機制是連接軟件各模塊的紐帶,本文在模擬訓練系統(tǒng)硬件開發(fā)和軟件總體設計的基礎上,設計了軟件系統(tǒng)的通信機制。
在開發(fā)軟件系統(tǒng)過程中,為了便于開發(fā)和維護,充分采用了模塊化設計思想,針對模擬訓練系統(tǒng)各種功能單元和訓練科目,設計了主進程、導彈系統(tǒng)、轟炸系統(tǒng)、射擊系統(tǒng)、多制式、指揮儀等功能模塊,各模塊之間高內聚、低耦合,它們之間通過一定的通信機制完成數(shù)據(jù)交換,實現(xiàn)武器模擬訓練系統(tǒng)的訓練功能,設計的軟件系統(tǒng)通信關系如圖1所示。
軟件系統(tǒng)運行在主控機和從控機上,主控機上的導彈、轟炸和射擊程序完成武器系統(tǒng)模擬訓練的主要工作,主進程采集操作信號并將信號傳給導彈等程序和從控機,接收其他系統(tǒng)的數(shù)據(jù)處理結果并發(fā)出響應;從控機上主要運行導彈系統(tǒng)指揮儀和多制式轟炸模擬程序,運行過程中,接收主控機主進程的命令和數(shù)據(jù)信號進行相應的信號處理,一部分處理結果在從控機上完成人機交互,另一部分處理結果傳輸給主控機進行響應;從控機調用模塊、指揮儀和多制式各模塊間相互通信完成模塊間的調用,以配合主控機程序的運行,各程序內部的數(shù)據(jù)收發(fā)線程與數(shù)據(jù)處理線程之間進行通信完成各程序的實時運行。
圖1 軟件系統(tǒng)通信關系圖Fig.1 The communication relationship of the software
系統(tǒng)運行時,主控機和從控機要進行實時通信完成數(shù)據(jù)的交換,從控機要從主控機接收的數(shù)據(jù)有:觀測角、瞄準角等20個模擬量,追趕手柄狀態(tài)等35個開關量和三個功能模塊調用指令,主控機接收從控機的數(shù)據(jù)有:投彈信號等17個開關量信號,瞄準具構成參數(shù)(模擬量)和 3個控制信號。
主控機和從控機之間通過基于Winsock的網(wǎng)絡通信實現(xiàn)數(shù)據(jù)的傳遞,為簡化程序的開發(fā),采用MFC對套接字API函數(shù)封裝得到的CSocket類進行編程,程序運行流程[1]圖如圖2所示。主控機作為客戶機,從控機作為服務器,當需要運行指揮儀或多制式程序時,主控機向調用模塊發(fā)出連接請求,從控機接收請求后,主控機再發(fā)出指令調用相應模塊,并不斷進行通信完成功能模塊運行期間的數(shù)據(jù)交換,雙方根據(jù)通信協(xié)議完成對交換數(shù)據(jù)的編碼和解碼。訓練完成之后功能模塊接收主控機的控制命令返回調用界面,等待下一次的程序調用。
圖2 主控機和從控機通信流程Fig.2 The communication flow between master PC and assistant PC
主系統(tǒng)與訓練子系統(tǒng)之間的通信主要存在于主控機中,主控機中導彈系統(tǒng)等四個功能模塊設計成了四個進程的形式,在通信過程中選用進程間通信機制來實現(xiàn)數(shù)據(jù)交換,進程間的通信機制包括管道、消息隊列、共享內存、郵槽[2],結合實際需要和通信技術本身特點[3],選擇消息隊列來實現(xiàn)四個功能模塊之間的通信。
利用消息實現(xiàn)進程間通信時,為保證數(shù)據(jù)交換的正常運行,制定了通信協(xié)議,主要包括兩個方面,一個是主線程對訓練子系統(tǒng)的信息格式,另一個是訓練子系統(tǒng)發(fā)往主線的信息格式兩種信息除了長度不同外,格式可以設為相同,格式如圖 3所示。
圖3 進程間通信協(xié)議Fig.3 The communication protocol between processes
信息標識字段占2個字節(jié),在主進程向訓練子進程傳遞數(shù)據(jù)時可以設為無效,也可以按照需要進行相應的設置,訓練子系統(tǒng)和其他兩個系統(tǒng)向主進程傳遞數(shù)據(jù)時標識信息的來源,00代表數(shù)據(jù)來自導彈系統(tǒng),01代表數(shù)據(jù)來自轟炸系統(tǒng),10代表數(shù)據(jù)來自射擊系統(tǒng)。
控制數(shù)據(jù)和模擬數(shù)據(jù)字段包含了通信中的有效信息,由主系統(tǒng)發(fā)至子系統(tǒng)的控制數(shù)據(jù)字段占187字節(jié),用于存放操作過程中產(chǎn)生的各種控制信號,模擬數(shù)據(jù)字段占80字節(jié),以字符的形式存放采集的模擬信號,每個模擬信號占4個字節(jié),訓練子系統(tǒng)發(fā)至主系統(tǒng)的數(shù)據(jù),根據(jù)子系統(tǒng)的不同發(fā)送數(shù)據(jù)的大小也各異,控制數(shù)據(jù)字段,導彈系統(tǒng)占31字節(jié),轟炸系統(tǒng)占24字節(jié),射擊系統(tǒng)占5個字節(jié),模擬數(shù)據(jù)字段導彈系統(tǒng)為0字節(jié),轟炸系統(tǒng)占2字節(jié),射擊系統(tǒng)占0字節(jié)。
校驗位占一個字節(jié),對數(shù)據(jù)傳遞進行奇校驗,結束標識占一個字節(jié),它標識一次傳遞數(shù)據(jù)的結束。
圖4 訓練系統(tǒng)進逞間通信流程Fig.4 The communication flow among processes of the training system
主系統(tǒng)與訓練子系統(tǒng)之間通信流程如圖 4所示。主進程中的數(shù)據(jù)收發(fā)線程首先采集操作者發(fā)出的各種控制信號,根據(jù)通信協(xié)議將這些信號進行封裝;然后主進程搜索接收數(shù)據(jù)的訓練子系統(tǒng)進程,若未找到則發(fā)出語音提示,接著進行下一次的搜索,直至找到指定的訓練子系統(tǒng)進程,將封裝好的數(shù)據(jù)寫入緩沖區(qū),向訓練子系統(tǒng)進程發(fā)出接收數(shù)據(jù)消息,訓練子系統(tǒng)在接到通知后,根據(jù)消息內指向緩沖區(qū)的指針等參數(shù)讀取數(shù)據(jù)[4]。對數(shù)據(jù)進行解析和處理,處理結果一方面通過自身實現(xiàn)人機交互,另一方面?zhèn)魉偷街鬟M程中,由主進程進行相應的響應,根據(jù)這一流程,主進程與其他進程不斷地進行通信,完成各進程間的數(shù)據(jù)交換。
軟件系統(tǒng)是基于Windows非實時性操作系統(tǒng)開發(fā)的,為了實現(xiàn)模擬訓練的實時運行,軟件系統(tǒng)選用Windows操作系統(tǒng)提供的主要是多線程技術來滿足訓練系統(tǒng)的要求,主控機上的主進程和從控機上運行的指揮儀、多制式模塊創(chuàng)建兩個線程,一個用于收發(fā)數(shù)據(jù),另一個用于運行訓練程序;在導彈系統(tǒng)等子訓練程序中多建一個線程用于聲音提示,根據(jù)數(shù)據(jù)交換需要采用全局變量法建立起線程間的通信機制。
線程是按操作系統(tǒng)分配的時間片運行的,同一進程的所有線程共享進程資源,在多線程程序中,每個線程都要對進程中的一些數(shù)據(jù)不斷地進行讀寫操作,線程之間的運行只按系統(tǒng)分配的時間片運行,當一個線程的運行時間到期,該線程暫停所有操作,另一個等待線程開始運行,如此不斷進行下去,使系統(tǒng)數(shù)據(jù)得以持續(xù)地交換和處理。
圖5 線程間通信原理Fig.5 The communication schematic diagram between threads
線程間通信時,如果數(shù)據(jù)收發(fā)線程正在獲取某一信號時,該線程剛好用完此次運行的時間片,程序切換到數(shù)據(jù)處理線程運行,此線程讀取的信號可能是數(shù)據(jù)收發(fā)線程獲取信號過程中的不穩(wěn)定值,導致程序運行出錯。為了避免這種情況的發(fā)生,保證線程間通信的正確性,采用互斥對象技術實現(xiàn)線程間同步運行,互斥對象屬于系統(tǒng)內核對象,擁有互斥對象的線程能夠獨占某個系統(tǒng)資源,其他線程無法對這個系統(tǒng)資源進行訪問,可以避免多個線程同時訪問同一個全局變量的情況[5]。軟件系統(tǒng)的線程間通信流程原理如圖5所示。
在某型飛機武器模擬訓練系統(tǒng)的研制過程中,軟件系統(tǒng)通信機制在各模塊之間和模塊內部線程之間起到橋梁作用。經(jīng)過實際調試,設計的通信機制可以保證軟件系統(tǒng)數(shù)據(jù)交換得以較好地實現(xiàn),滿足了武器模擬訓練系統(tǒng)軟件對通信實時、可靠和高效的要求。
[1]朱輝生.VC中基于SOCKET的網(wǎng)絡編程[J].計算機應用與軟件,2004,21(4):118-119.
[2]郭克新.VisualC++代碼參考與技巧大全[M].北京:電子工業(yè)出版社,2008:393-407.
[3]陸靜,胡明慶.幾種進程通信方法的研究和比較[J].福建電腦,2007(2):60-61.
[4]孫皓.Visual C++范例大全[M].北京:機械工業(yè)出版社,2009:431-432.
[5]明日科技,宋坤,劉銳寧,等.MFC程序開發(fā)參考大全[M].北京:人民郵電出版社,2007:470-489.