張明杰,王靜平
(中國電子科學研究院,北京 100041)
戰(zhàn)場態(tài)勢是指戰(zhàn)場中兵力分布及戰(zhàn)場環(huán)境當前狀態(tài)和發(fā)展變化趨勢,不同戰(zhàn)場態(tài)勢包含不同的態(tài)勢要素[1]。態(tài)勢實時顯示是指將態(tài)勢要素的位置、運動狀態(tài)等信息以計算機可視化的形式實時展現(xiàn)出來,使指揮員能夠清晰直觀了解戰(zhàn)場動態(tài),獲取戰(zhàn)場信息[2]。態(tài)勢回放是將指定歷史時間段內的態(tài)勢信息按照時間順序動態(tài)地顯示在計算機圖形界面上,為分析人員進行態(tài)勢分析提供一種方便易用的技術手段,主要用于事后回顧和分析[3]。態(tài)勢實時顯示和態(tài)勢回放都是將態(tài)勢信息通過計算機展現(xiàn)給相關人員進行決策和分析,態(tài)勢實時顯示更注重態(tài)勢信息的實時性。
近年來,相關學者對態(tài)勢實時顯示和回放技術進行研究和實現(xiàn)。這些研究和實現(xiàn)要么重點關注態(tài)勢實時顯示,要么重點關注態(tài)勢回放,而同時關注兩者的并不多見。文獻[4]基于GIS和COM設計了態(tài)勢實時顯示系統(tǒng),文獻[5]基于Qt實現(xiàn)運行目標態(tài)勢的實時顯示,這兩者僅側重于提高態(tài)勢實時顯示的效率。文獻[2][6]實現(xiàn)了基于Web的實時態(tài)勢顯示系統(tǒng),但是態(tài)勢顯示效率不高。文獻[8]基于Skyline對空戰(zhàn)仿真數(shù)據(jù)的三維態(tài)勢回放進行了研究和實現(xiàn),文獻[9-11]設計和實現(xiàn)了不同應用領域的態(tài)勢回放系統(tǒng)。文獻[7]基于HLA設計并實現(xiàn)了仿真態(tài)勢實時在線顯示與數(shù)據(jù)記錄回放顯示一體化的態(tài)勢顯示系統(tǒng),但是該系統(tǒng)只能在態(tài)勢仿真結束后進行態(tài)勢回放,即不具備在線回放功能。
在實際應用中,為了實時確定某一批運動目標的屬性,指揮員或情報員可能需要查看該批目標在較長時間段內的運動軌跡及相關信息。由于不具備在線回放功能,現(xiàn)有的態(tài)勢實時顯示系統(tǒng)基本無法滿足這種應用場景。
針對上述不足,本文設計并實現(xiàn)了一個態(tài)勢實時顯示與回放一體化的軟件系統(tǒng),即態(tài)勢實時顯示與回放系統(tǒng)。該系統(tǒng)可以實時從通信網(wǎng)絡接收數(shù)據(jù)報文(比如探測源探測到的航跡信息報文、從通信鏈路接收到的航跡信息報文、戰(zhàn)場元素自身發(fā)送的位置數(shù)據(jù)報文等),并從數(shù)據(jù)報文中提取航跡點(包括時間、位置等信息),然后將航跡點作為關鍵字存儲在B+樹文件中。系統(tǒng)工作在態(tài)勢實時顯示模式時,可進行態(tài)勢的實時顯示;工作在態(tài)勢回放模式時,可進行態(tài)勢的回放;并且可在兩種工作模式之間互相切換。這樣,就將態(tài)勢實時顯示和回放結合在一個軟件系統(tǒng)中,能為相關人員的使用提供方便。以B+樹文件的形式對態(tài)勢數(shù)據(jù)進行組織,保證了數(shù)據(jù)實時更新及查詢的效率;以多線程協(xié)同工作的方式實現(xiàn)系統(tǒng),提高了系統(tǒng)的運行效率。
為了實現(xiàn)態(tài)勢實時顯示與回放一體化,態(tài)勢實時顯示與回放軟件系統(tǒng)(簡稱為顯示回放系統(tǒng))需具備的功能有:
1) 從網(wǎng)絡實時接收態(tài)勢數(shù)據(jù);
2) 可以長時間穩(wěn)定運行;
3) 能夠對大量態(tài)勢數(shù)據(jù)進行存儲與快速查詢;
4) 能夠對態(tài)勢進行實時計算與顯示;
5) 能夠實現(xiàn)態(tài)勢實時顯示與回放功能的結合。即可在態(tài)勢實時顯示與回放模式之間相互轉換。
其中,數(shù)據(jù)存儲與查詢、態(tài)勢實時計算與顯示是系統(tǒng)的關鍵技術。
態(tài)勢數(shù)據(jù)存儲與查詢是系統(tǒng)的關鍵技術,數(shù)據(jù)查詢效率對系統(tǒng)的實時性具有決定性作用。為了獲得較高的查詢效率,將態(tài)勢數(shù)據(jù)作為關鍵字存儲在B+樹文件中。
B+樹是在B樹的基礎上演化而成的一種動態(tài)索引技術[12],具有隨機和順序查詢效率高、更新開銷小、高度自平衡等特點,特別適合于既需要隨機查找也需要順序查找的應用場景。目前,B+樹已在大數(shù)據(jù)索引[13]、云數(shù)據(jù)索引[14]等眾多領域得到廣泛應用。
B+樹文件是以B+樹形式組織的文件。B+樹文件由文件頭和文件體兩部分組成。文件頭描述文件中存儲的B+樹的相關信息,如B+樹的階數(shù)、結點總數(shù)、關鍵字總數(shù)、根結點在文件中的位置等;文件體就是B+樹的所有結點的數(shù)據(jù),可以看作結點的集合,每個結點中的關鍵字按從小到大的順序排列。關于B+樹文件的邏輯結構描述可參考文獻[15]。
但是B+樹要求任意兩個不同的關鍵字都能夠比較大小,為了適應這個要求,引入多維向量之間的關系及航跡點的形式化定義。
定義1多維向量之間的關系。設x=〈x1,x2,…,xn〉,y=〈y1,y2,…,yn〉是n維歐氏空間Rn中的任意兩個向量。若x與y的各個分量相等,則稱x與y相等,否則稱x與y不相等。若x與y不相等,那么x與y中必定存在不相等的分量,設j是所有不相等的分量的最小下標,即j=min{i|x.xi≠y.yi,(i=1,2,…,n)}。若x.xj>y.yj,則稱向量x大于y;若x.xj 定義2航跡點。即包含時間、航跡號、位置等信息的數(shù)據(jù)單元,可表示為如下形式的多維向量。 p= (1) 式(1)中,p表示航跡點;time是代表時間的正整數(shù),單位是毫秒;No是正整數(shù),代表航跡號;x、y、z表示航跡點的三維空間坐標,單位為米。 可將航跡點看作一個五維向量,依據(jù)定義1中的多維向量之間的關系,可以確定任意兩個不同的航跡點之間的大小關系。這樣,就可以將航跡點作為關鍵字插入B+樹中了。 將B+樹文件作為態(tài)勢數(shù)據(jù)的存儲形式,向文件中寫入航跡點時,可采用批量插入算法[16]提高效率;在進行數(shù)據(jù)檢索時,可以充分利用B+樹具有隨機和順序查詢效率高的特性,提高數(shù)據(jù)的查詢效率,為系統(tǒng)的實時性提供保障。 態(tài)勢實時計算與顯示是指將從B+樹文件獲取的某個時間段內的航跡點集合轉換為航跡集合并將其繪制在圖形界面的過程。為了便于表述,引入以下定義。 定義3航跡。即航跡號相同且按從小到大順序排列的航跡點的集合的特征,如航跡號、航跡長度等,可用下式定義: trk= (2) 其中,No表示航跡號,Len表示航跡的長度(即航跡包含的航跡點數(shù)),pl表示航跡的最后一個航跡點。 定義4時間窗。時間窗實質上就是時間段。可用下式定義: tw=[tb,te]=[tb,tb+w] (3) 式(3)中,tw代表時間窗,tb是時間窗的起始時間,te是時間窗的終止時間,w是時間窗的寬度。tb、te、w是正整數(shù),單位是毫秒。 定義5態(tài)勢。即航跡點集合及對其進行處理得到的航跡集合等信息的總稱。 定義6整體態(tài)勢。將B+樹的所有葉子結點中包含的航跡點及對其處理所得到的信息稱為整體態(tài)勢。態(tài)勢實時顯示和回放過程中某一時刻t的整體態(tài)勢表示為: Sit(t)={pm|m=1,2,…,M} (4) 式(4)中,M是正整數(shù),表示在時刻t的所有航跡點的個數(shù)。 定義7局部態(tài)勢(態(tài)勢幀)。整體態(tài)勢在某一時間窗內的子集,稱為局部態(tài)勢。在時刻t的局部態(tài)勢可表示為: Sit(t,tw)={p|p∈Sit(t)∧p.time∈tw} (5) 式(5)中,tw表示一個時間窗。 定義8態(tài)勢計算。就是由整體態(tài)勢得到局部態(tài)勢,并將局部態(tài)勢中的航跡點按航跡號相等關系進行劃分,從而得到航跡集合的過程。 定義9態(tài)勢繪制。就是將航跡集合中的航跡繪制在圖形界面上的過程。航跡繪制是指將航跡點及其之間的連接線段顯示在計算機圖形界面上。 定義10態(tài)勢實時顯示。即實時態(tài)勢繪制,是指將實時接收到的態(tài)勢進行繪制。從式(5)看,就是時間窗tw必須包含B+樹文件中的最大航跡點的時間。 定義11態(tài)勢回放。是指將整體態(tài)勢的某一局部態(tài)勢進行繪制。從式(5)看,就是時間窗tw不一定包含B+樹文件中的最大航跡點的時間。 由于B+樹文件中未保存航跡信息,需對態(tài)勢(航跡)進行實時計算與顯示,算法描述如下。 算法1態(tài)勢實時計算與顯示算法 輸入:有序航跡點集合P={pi|i=1,2,…,N}。 輸出:無。 步驟: 1) 將航跡表T置為空,即令T=?; 2) 順序掃描P,對pi(i=1,2,…,N),執(zhí)行步驟3)至5); 3) 在T中查找航跡號等于pi.No的航跡trk。若未找到,則執(zhí)行步驟4);否則執(zhí)行5); 4) 在圖形界面顯示航跡點pi。利用pi的相關信息新建航跡 5) 在圖形界面顯示航跡點pi及連接pi與trk.pl的線段。將航跡長度trk.Len的值增加1,將航跡的最后一個點trk.pl的值以pi代替;轉步驟2); 6) 顯示航跡信息。順序掃描航跡表T中的所有航跡trk,可在圖形界面上trk.pl對應的位置顯示航跡號、航跡長度等信息。 上述算法的時空復雜度均為線性;對T中航跡進行排序,以便于使用折半查找法提高效率。 為了使系統(tǒng)具備上述所述功能以及較強可控性和易用性,軟件采用數(shù)據(jù)流式架構;按照模塊化設計原則,將系統(tǒng)劃分為顯示回放控制模塊、數(shù)據(jù)源模塊、態(tài)勢數(shù)據(jù)提取模塊、態(tài)勢數(shù)據(jù)管理模塊、態(tài)勢繪制模塊等模塊。顯示回放控制模塊的引入是為增強系統(tǒng)的可控性和易用性。設計的軟件系統(tǒng)組織結構如圖1所示。 圖1 系統(tǒng)組織結構圖 顯示回放控制模塊。完成態(tài)勢實時顯示與回放控制人機交互界面(簡稱控制界面)的創(chuàng)建,數(shù)據(jù)源模塊、態(tài)勢數(shù)據(jù)管理模塊、態(tài)勢繪制模塊加載及相關對象的創(chuàng)建及協(xié)調,系統(tǒng)工作模式設置及切換等。 數(shù)據(jù)源模塊。負責從通信網(wǎng)絡接收實時數(shù)據(jù)報文,并將數(shù)據(jù)報文傳輸給態(tài)勢數(shù)據(jù)提取模塊。 態(tài)勢數(shù)據(jù)提取模塊。按照約定從接收到數(shù)據(jù)報文中提取航跡點,并將航跡點傳輸給態(tài)勢數(shù)據(jù)管理模塊。 態(tài)勢數(shù)據(jù)管理模塊。保存接收到的航跡點,對外提供航跡點查詢功能;該模塊將航跡點保存在B+樹文件中。 態(tài)勢繪制模塊。按照顯示回放控制模塊提供時間窗,完成態(tài)勢實時計算和顯示。 系統(tǒng)接口設計分為數(shù)據(jù)接口設計和功能接口設計。 2.2.1 數(shù)據(jù)接口設計 數(shù)據(jù)接口設計主要規(guī)定各模塊之間交互的數(shù)據(jù)格式及含義。 通信網(wǎng)絡與數(shù)據(jù)源模塊之間的數(shù)據(jù)接口遵循UDP協(xié)議,即目前系統(tǒng)通過UDP協(xié)議從網(wǎng)絡接收數(shù)據(jù);數(shù)據(jù)源模塊與態(tài)勢數(shù)據(jù)提取模塊之間的數(shù)據(jù)接口遵循特定的通信體系內部協(xié)議。以上兩種數(shù)據(jù)接口無須設計,只需遵循相關的標準和協(xié)議即可。 態(tài)勢數(shù)據(jù)提取模塊、態(tài)勢數(shù)據(jù)管理模塊、態(tài)勢繪制模塊三者之間的數(shù)據(jù)接口即航跡點結構體,該結構體定義如下。 struct TrackPoint{ uint64 t; // 時間(毫秒), 64位無符號 整數(shù). uint32 no; // 航跡號. double x,y,z; // 航跡點位置. }; 結構體中時間變量的類型設計為64位無符號整數(shù),是為了能夠在其中保存年月日信息。 顯示回放控制模塊與態(tài)勢繪制模塊之間的數(shù)據(jù)接口是時間窗結構體,該結構體定義如下: struct TimeWindow{ uint64 tb; // 時間窗的起始時間. uint64 te;// 時間窗的終止時間. }; 2.2.2 功能接口設計 功能接口設計主要規(guī)定各個模塊實現(xiàn)的功能接口。依據(jù)單一職責原則,每個模塊只實現(xiàn)一個功能接口。 態(tài)勢實時顯示與回放控制器接口(ISDRC,Interface of Situation real-time Display and Replay Controller)。由態(tài)勢顯示回放控制模塊實現(xiàn),主要方法有:控制界面的創(chuàng)建和顯示。 數(shù)據(jù)源接口(IDS,Interface of Data Source)。由數(shù)據(jù)源模塊實現(xiàn),主要方法有:1)判斷數(shù)據(jù)源是否有數(shù)據(jù);2)得到數(shù)據(jù)緩存地址。 態(tài)勢數(shù)據(jù)提取器接口(ISDE,Interface of Situation Extractor)。由態(tài)勢提取模塊實現(xiàn),主要方法有:提取航跡點。 態(tài)勢數(shù)據(jù)管理器接口(ISDM,Interface of Situation Data Manger)。由態(tài)勢數(shù)據(jù)管理模塊實現(xiàn),主要方法有:1)保存航跡點;2)更新航跡點數(shù)據(jù);3)得到B+樹文件的訪問權限。 態(tài)勢繪制器接口(ISP,Interface of Situation Plotter)。由態(tài)勢繪制模塊實現(xiàn),主要方法有:態(tài)勢繪制。 以上各接口方法簽名如表1所示(以C語言的形式描述)。 表1 能接口表 系統(tǒng)運行界面設計包括程序主界面(簡稱主界面)設計和控制界面設計。 主界面使用通用的用戶界面模型,由態(tài)勢繪制區(qū)和相關的菜單組成,如圖2所示。態(tài)勢繪制區(qū)用于繪制航跡及顯示相關信息。 圖2 主界面圖 在主界面中,點擊控制界面菜單項,可顯示控制界面;地圖操作菜單中的菜單項主要是一些與地圖相關的操作,如地圖平移、放大、縮小等。 控制界面用于人機交互,包括接收數(shù)據(jù)端口設置、時間窗寬度設置、工作模式選擇、滑動控制條等,如圖3所示。 圖3 控制界面圖 控制界面中,接收端口編輯框用于設置UDP協(xié)議的端口號。時間窗編輯框用于設置時間窗的寬度,單位是秒。工作模式下拉列表,用于設置系統(tǒng)的當前工作模式,有態(tài)勢實時顯示和態(tài)勢回放兩種工作模式;在系統(tǒng)運行時,可通過在下拉列表中選擇不同工作模式實現(xiàn)系統(tǒng)工作模式切換。更新周期編輯框用于設置實時顯示工作模式下的態(tài)勢更新周期。滑動條控件在態(tài)勢實時顯示工作模式下不可操作;在態(tài)勢回放工作模式下,使用者可通過拖動滑動塊來動態(tài)設置時間窗的起止時間,從而完成局部態(tài)勢的計算和繪制。點擊初始化按鈕,完成系統(tǒng)的創(chuàng)建及設置;點擊運行按鈕,系統(tǒng)開始運行;點擊終止運行按鈕,完成系統(tǒng)的銷毀。 由于在運行過程中涉及態(tài)勢數(shù)據(jù)實時接收及處理,為了提高運行效率,系統(tǒng)采用多線程協(xié)同方式工作。設計的系統(tǒng)工作流程見圖4所示。 圖4 系統(tǒng)工作流程圖 如圖4所示,系統(tǒng)運行時的線程主要有數(shù)據(jù)接收線程Tr、態(tài)勢數(shù)據(jù)獲取線程Tg、態(tài)勢數(shù)據(jù)更新線程Tu、態(tài)勢繪制線程Tp;數(shù)據(jù)管理對象主要有緩存管理器(數(shù)據(jù)源模塊內實現(xiàn)IDS接口)、態(tài)勢數(shù)據(jù)管理對象(態(tài)勢數(shù)據(jù)管理模塊內實現(xiàn)ISDM接口);數(shù)據(jù)處理對象有態(tài)勢數(shù)據(jù)提取對象(態(tài)勢數(shù)據(jù)提取模塊內實現(xiàn)ISDE接口)、態(tài)勢繪制對象(態(tài)勢繪制模塊內實現(xiàn)ISP接口)。 為了突出多線程對數(shù)據(jù)的互斥訪問,將線程對數(shù)據(jù)的訪問操作專門繪制在相應對象中。如Tr與Tg對緩存的訪問操作繪制在緩存管理器中,Tg、Tu和Tp對數(shù)據(jù)文件的訪問操作繪制在態(tài)勢數(shù)據(jù)管理模塊內。 為了減少線程之間相互等待的時間,提高系統(tǒng)的運行效率,在緩存管理器和態(tài)勢數(shù)據(jù)管理對象內部做了特殊的設計。緩存管理器維護兩個數(shù)據(jù)緩存及相應訪問控制信號量,在任一時刻都有一個緩存用于讀取數(shù)據(jù)、另一個用于寫入數(shù)據(jù),可以保證Tr與Tg在較短的時間內得到可用數(shù)據(jù)緩存。態(tài)勢數(shù)據(jù)管理對象內部維護兩個堆文件和一個B+樹文件及相應的訪問控制信號量;在任一時刻,一個堆文件用于Tg寫入航跡點數(shù)據(jù)、一個堆文件用于Tu讀取,可以縮短兩者之間相互等待的時間。 各線程完成的工作說明如下。 數(shù)據(jù)接收線程Tr完成的工作是: 1) 初始化。完成從控制界面獲取接收數(shù)據(jù)端口號、創(chuàng)建socket對象等操作; 2) 判斷是否終止運行(從控制界面點擊終止按鈕)。若終止,則銷毀socket對象、釋放占用資源后,退出;否則,轉3); 3) 從基于UDP協(xié)議的通信網(wǎng)絡接收數(shù)據(jù)報文; 4) 通過緩存管理器得到可寫緩存的訪問權限,將數(shù)據(jù)報文寫入數(shù)據(jù)緩存中后,釋放權限,轉2)。 態(tài)勢數(shù)據(jù)獲取線程Tg完成的工作是: 1) 初始化。完成的主要操作是:從控制界面獲取態(tài)勢更新周期,獲得緩存管理器的IDS接口、態(tài)勢數(shù)據(jù)提取對象的ISDE接口、態(tài)勢數(shù)據(jù)管理對象的ISDM接口; 2) 判斷是否終止運行。若終止,則線程釋放相關資源后,退出;否則,轉3); 3) 通過IDS接口HasData方法詢問數(shù)據(jù)源是否有數(shù)據(jù); 4) 數(shù)據(jù)源模塊內緩存管理器得到讀寫緩存訪問權限,交換讀寫緩存指針后,釋放權限。判斷讀緩存是否有數(shù)據(jù),將結果返回。 5) 根據(jù)返回結果,判斷數(shù)據(jù)源對象中是否有數(shù)據(jù),若無數(shù)據(jù),則休眠一個態(tài)勢更新周期后,轉2);若有數(shù)據(jù),則調用IDS接口GetData方法,執(zhí)行6); 6) 緩存管理器返回可讀緩存的地址; 7) 將緩存中所有數(shù)據(jù)報文通過ISDE接口ExtractTrkPt方法逐個傳遞給態(tài)勢數(shù)據(jù)提取對象,獲得數(shù)據(jù)報文中包含的航跡點;清空可讀緩存; 8) 調用ISDM接口SaveTP方法,完成航跡點存儲; 9) 態(tài)勢數(shù)據(jù)管理模塊SaveTP方法。得到可寫文件的訪問權限。將航跡點存儲到可寫文件;釋放可寫文件訪問權限。轉2)。 態(tài)勢數(shù)據(jù)更新線程Tu完成的工作是: 1) 初始化。完成從控制界面獲取態(tài)勢更新周期、獲得態(tài)勢數(shù)據(jù)管理對象ISDM接口等操作; 2) 判斷是否終止運行。若終止,則線程釋放相關資源后,退出;否則,轉3); 3) 線程休眠一個態(tài)勢更新周期后,從控制界面獲取系統(tǒng)工作模式,若工作模式為回放模式,則轉2)(即不進行態(tài)勢數(shù)據(jù)更新);若工作模式是實時顯示模式,則執(zhí)行4); 4) 調用ISDM UpdateTP方法,更新文件中存儲的航跡點數(shù)據(jù); 5) 態(tài)勢數(shù)據(jù)管理模塊UpdateTP方法:得到可讀文件與可寫文件訪問權限,交換可讀可寫文件指針,釋放可寫文件的訪問權限;得到B+樹文件的訪問權限,將可讀文件中航跡點存入B+樹文件中,釋放可讀文件與B+樹文件訪問權限,清空可讀文件內容; 6) 更新控制界面滑動條時間范圍及滑動塊位置,即將滑動條對應時間范圍設置為整體態(tài)勢時間范圍,滑動塊位置設置在滑動條的最右端; 7) 將態(tài)勢繪制線程等待信號量置為有效。轉(2)。 態(tài)勢繪制線程Tp完成的工作是: 1) 初始化。完成的主要工作有:從控制界面獲得時間窗的寬度、得到態(tài)勢繪制對象ISP接口等; 2) 判斷是否終止運行。若終止,則線程釋放相關資源后,退出;否則,轉3); 3) 從控制界面獲取系統(tǒng)工作模式,若是實時顯示模式,則等待態(tài)勢繪制信號有效后執(zhí)行4);若是回放模式,則直接執(zhí)行4); 4) 從控制界面滑動條滑動塊的位置及時間窗寬度得到需要繪制的態(tài)勢時間段;通過接口ISP PlotSit方法完成態(tài)勢繪制; 5) 態(tài)勢繪制對象通過接口ISDM的GetBpt方法得到B+樹文件的訪問權限,從B+樹文件得到指定時間段內的航跡點,完成態(tài)勢的實時計算與顯示。轉2)。 通過以上描述可知系統(tǒng)運行時具有以下特點: 1) 系統(tǒng)正常工作不發(fā)生丟包的前提是:網(wǎng)絡數(shù)據(jù)的平均傳輸速率小于系統(tǒng)的平均數(shù)據(jù)處理(主要是航跡點提取和存儲)速率; 2) 資源互斥共享問題得到有效解決。線程Tr和Tg競爭使用數(shù)據(jù)源管理模塊中的數(shù)據(jù)管理器對象、線程Tg和Tu競爭使用態(tài)勢數(shù)據(jù)管理模塊中的態(tài)勢數(shù)據(jù)管理對象,而這兩個對象分別通過引入多個緩存和多個文件解決了競爭問題,可以有效縮短線程的等待時間,提高系統(tǒng)的運行效率; 3) 實現(xiàn)工作模式之間的相互切換。系統(tǒng)工作模式由態(tài)勢實時顯示切換為態(tài)勢回放時,線程Tg將航跡點存儲在態(tài)勢數(shù)據(jù)管理對象的某一個堆文件中;當系統(tǒng)狀態(tài)再次切換為態(tài)勢實時顯示模式后,由于有可能需要將大量的航跡點寫入B+樹文件中,會導致態(tài)勢畫面在較長時間內不更新。 使用微軟Visual Studio 2010的C++語言、基于MFC框架、結合多線程技術對系統(tǒng)進行了實現(xiàn);實現(xiàn)過程中使用的地圖是由第三方提供的矢量地圖。 在實現(xiàn)過程中,將設計階段的各個模塊映射為相應的動態(tài)鏈接庫(DLL)。借鑒COM的基本思想,并依據(jù)功能單一原則做了簡化處理,即每個DLL只有一個用于創(chuàng)建對象的導出方法,該方法用于創(chuàng)建實現(xiàn)某一接口的類對象,并返回相應的接口指針供其他模塊使用;比如實現(xiàn)IDS接口的動態(tài)鏈接庫導出方法名為CreateDS,返回類型為IDS的接口指針。在接口定義的實現(xiàn)方面,除了具有表1列出的方法外,還在每個接口中添加了用于銷毀對象的方法。 系統(tǒng)運行過程如下所述: 1) 使用者在主界面點擊控制界面菜單項,創(chuàng)建控制界面; 2) 使用者在控制界面中設置接收端口號、時間窗寬度、更新周期、工作模式等參數(shù); 3) 使用者點擊初始化按鈕,系統(tǒng)進入初始化狀態(tài)。系統(tǒng)初始化完成的工作主要是:通過DLL的導出方法創(chuàng)建實現(xiàn)各個接口實現(xiàn)類的實例、創(chuàng)建各工作線程、創(chuàng)建信號量并設置初始狀態(tài)。初始化完成后,點擊運行按鈕,系統(tǒng)進入運行狀態(tài)。 4) 在系統(tǒng)運行時,可在控制界面的工作模式下拉列表中選擇不同的工作模式,實現(xiàn)系統(tǒng)工作模式的切換。 5) 在控制界面點擊終止運行按鈕,系統(tǒng)終止運行。 為了對系統(tǒng)設計和實現(xiàn)的正確性、長時間運行的穩(wěn)定性以及對大量航跡點處理的有效性進行檢驗,需進行測試實驗。由于實際通信網(wǎng)絡中存在的不可控因素較多,比如數(shù)據(jù)流量不可控、數(shù)據(jù)傳輸不穩(wěn)定等,故在實驗室內的局域網(wǎng)環(huán)境中進行。對系統(tǒng)進行測試實驗的配置如圖5所示。 圖5 系統(tǒng)實驗配置圖 圖5中,數(shù)據(jù)發(fā)送端和數(shù)據(jù)接收端是由交換機和普通網(wǎng)線連接起來的一般商用臺式計算機(型號Dell XPS 8300,操作系統(tǒng)是Windows XP Professional with SP3,內存容量4 GB;硬盤容量1 TB,每分鐘7200轉;ATI獨立顯卡)。 數(shù)據(jù)發(fā)送端的硬盤中存儲有從某型實際通信網(wǎng)絡中接收的真實數(shù)據(jù)文件(大小固定的數(shù)據(jù)集);數(shù)據(jù)接收端運行態(tài)勢實時顯示與回放軟件系統(tǒng)。為了能夠長時間無限制向數(shù)據(jù)接收端發(fā)送數(shù)據(jù)、并且使B+樹文件的體量不斷增大,實驗采取的策略是:數(shù)據(jù)發(fā)送端的數(shù)據(jù)發(fā)送軟件無限循環(huán)讀取數(shù)據(jù)文件,將文件中存儲的數(shù)據(jù)報文通過UDP協(xié)議發(fā)送給數(shù)據(jù)接收端;在數(shù)據(jù)接收端,得到航跡點后,將航跡點的時間屬性值改為本地 時間,這樣就能保證所有的航跡點都不相同,使得航跡點能夠插入B+樹文件中,進而使B+樹文件的體量不斷增大。 在數(shù)據(jù)接收端,系統(tǒng)相關工作參數(shù)設置為:端口號9995,時間窗寬度是100 s,態(tài)勢更新周期為1 s,B+樹的階數(shù)為1024(即每個結點中最多可以存儲1024個航跡點)。 在態(tài)勢實時顯示模式下運行7.05天(609 391 364 ms),數(shù)據(jù)發(fā)送端發(fā)送數(shù)據(jù)的速率約為每秒25 K字節(jié),數(shù)據(jù)接收端形成的B+樹文件大小約為3.4 G,B+樹的高度為3,葉結點個數(shù)為74 480,航跡點個數(shù)為38 134 022,每個葉子結點擁有的航跡點個數(shù)約為512。 使用每個態(tài)勢幀的數(shù)據(jù)加載速率VL、態(tài)勢計算速率VC、態(tài)勢計算與顯示速率VP對態(tài)勢實時計算與顯示的性能進行衡量,以N表示態(tài)勢幀包含的航跡點個數(shù),則上述指標的定義如下: VL=N/tL (6) 其中tL是從B+樹文件中將航跡點加載到內存所需的時間,tC是tL與對航跡點進行處理得到航跡(不繪制航跡點與線段)所用的時間之和,tP是tC與航跡點與線段繪制所用時間之和。 在控制界面將時間窗設置為300 s,1000個態(tài)勢幀的上述指標的平均值如表2所示。 表2 態(tài)勢實時計算與顯示性能表 以上實驗數(shù)據(jù)是在數(shù)據(jù)接收端運行的結果。 實驗結果顯示,數(shù)據(jù)加載速率約為每秒27萬點,態(tài)勢計算速率約為每秒13萬點,態(tài)勢計算與顯示速率約為每秒7萬點,具有較高的查詢與處理效率。 上述實驗結果表明,系統(tǒng)可以長時間穩(wěn)定運行,證明了系統(tǒng)設計和實現(xiàn)的正確性以及穩(wěn)定性。態(tài)勢實時計算與顯示的高效性,證明了系統(tǒng)對大量航跡點進行檢索處理的有效性。 本文設計并實現(xiàn)了一個態(tài)勢實時顯示與回放一體化的軟件系統(tǒng),該系統(tǒng)可以通過UDP協(xié)議實時從網(wǎng)絡接收數(shù)據(jù)報文,從中提取航跡點,將航跡點作為關鍵字存儲在B+樹文件中,態(tài)勢繪制線程從B+樹文件中獲取航跡點,完成態(tài)勢的實時計算與顯示。引入了多緩存和多文件管理機制,有效縮短線程競爭使用資源的等待時間,提高了系統(tǒng)的運行效率。由于B+樹文件具有隨機查詢和連續(xù)查詢的高效性,為態(tài)勢繪制效率提供了保證。實驗結果顯示了系統(tǒng)設計和實現(xiàn)的正確性、穩(wěn)定性和高效性。 在該系統(tǒng)的基礎上,將來擬繼續(xù)在以下方面開展相關研究工作: 1)系統(tǒng)實用化。從實際通信網(wǎng)絡中長時間接收數(shù)據(jù),進行實際應用試驗;對系統(tǒng)進一步完善,使其達到可以實用的狀態(tài)。 2)大數(shù)據(jù)存儲技術的研究。在系統(tǒng)的實現(xiàn)中,B+樹文件存儲在本地硬盤上,這就使其存儲的航跡點數(shù)量受制于硬盤的容量;若能利用大數(shù)據(jù)存儲技術,則可大大提高航跡點的存儲量。 3)優(yōu)化內部組件。對大數(shù)據(jù)索引技術進行研究和開發(fā),以進一步提高數(shù)據(jù)存儲空間的利用率和查詢效率。1.2 態(tài)勢實時計算與顯示
2 系統(tǒng)設計
2.1 架構設計

2.2 接口設計

2.3 界面設計


2.4 系統(tǒng)工作流程設計

3 系統(tǒng)實現(xiàn)與實驗
3.1 系統(tǒng)實現(xiàn)及運行
3.2 系統(tǒng)實驗

3.3 態(tài)勢實時計算與顯示性能
VC=N/tC
VP=N/tP
4 結束語