陳 敏 屈景怡 裴方瑞 喻益琳
1(中國民航大學天津市智能信號與圖像處理重點實驗室 天津 300300) 2(內蒙古空管分局 內蒙古 呼和浩特 010070) 3(中國國際航空股份有限公司 四川 成都 610000)
馬來西亞航空MH370航班自2014年失聯至今已逾五年,其間雖然經過多次大規模搜索,但仍一無所獲[1]。MH370航班失聯事件在全球引起了巨大轟動,世界各國民航管理部門及機構均開始著力于推進全球航班跟蹤能力建設。2015年,國際民航組織提出了全球航班追蹤的路線圖以及運行實施概念草案。2016年中國民航局成立了中國民航航空器追蹤監控體系建設領導小組;2017年中國民航局發布了《中國民航航空器追蹤監控體系建設實施路線圖》,明確提出分三個階段實現我國民用航空全球航班跟蹤體制的建設。因而亟需研發全球航班跟蹤系統及相關技術,增強我國航班的全球實時跟蹤能力[2]。目前關于全球航班跟蹤技術及系統的研究較少。吳志軍等[3]研究了全球航班跟蹤系統中信息共享技術,并給出了一種集成網絡結構設計方案;Wang等[4]對可能用于全球航班跟蹤的多種監視數據源進行研究分析,并對各種監視數據源中存在的問題進行了總結;Han等[5]使用了ACARS數據實現了對航班位置的實時追蹤,但沒有實現航班動態顯示;劉琳[6]使用北斗衛星系統實現了對少量航班的追蹤;劉海濤等[7-8]對星基ADS-B監視容量及其數據處理和顯示進行研究,其研究結果可應用于全球航班跟蹤,但其并未針對大批量航班數據處理進行優化及測試。
全球航班跟蹤系統實時在線處理、跟蹤的航班數量最大超過10 000架次。大批量航班數據的并發式輸入容易導致系統處理過載、緩沖區溢出,從而產生航班數據丟失、延遲、航班飛行態勢顯示卡頓等異常。因而,在全球航班跟蹤系統的設計過程中,如何解決大批量、高并發航班數據的接入、處理及顯示問題,是一個不小的挑戰。
本文給出一種全球航班跟蹤系統設計方案,通過設計易于拓展、并行化的數據處理硬件架構,構建多線程并行化處理軟件架構,以及使用內存地址交換技術,充分利用服務器多核心處理能力,有效地解決了大批量、高并發航班數據處理帶來的問題。長時間的實際運行表明,設計方案有效可行,運行效果良好。
全球航班跟蹤系統是集監視數據接入、校驗、解析、處理、跟蹤顯示于一體的自動化系統。全球航班跟蹤系統采用模塊化設計思想,系統由數據管理、前端數據處理、地理信息系統、航行情報資料顯示、航班跟蹤、顯示子系統組成。全球航班跟蹤系統架構如圖1所示。

圖1 全球航班跟蹤系統框架
系統主要功能模塊有:
1) 前端數據處理模塊。通過局域網接入多源監視數據,數據類型包括ACARS、SSR、地基ADS-B、星基ADS-B數據,完成對數據的解析(星基ADS-B數據解析參見文獻[9])、CRC校驗(校驗算法參見文獻[10])、異常數據濾除、坐標投影等處理后,實現對多源異構監視數據的融合處理。
2) 航班跟蹤及顯示。實現對全球航班的顯示及跟蹤,包括航班飛行態勢顯示、航班跟蹤、歷史尾跡顯示、飛行剖面顯示、實時油量剖面顯示,同時還具備有航班過濾、航班檢索等功能。
3) 地理信息(GIS)系統。地理信息系統以SHAPEFILE標準地理數據文件為數據源,具備對地理信息資料,包括行政區域、城市、道路、河流、水域等元素的載入、處理、投影、顯示、管理。
4) 航行情報資料顯示。同時支持對航行情報資料,包括航路航線、飛行情報區、機場、危險區、限制區、終端近進區等元素的載入、處理、顯示、管理。支持地圖的投影、放大、縮小、拖動平移等操作。
5) 數據管理。以SQLite為基礎,完成對航行情報資料數據庫、監視數據數據庫等數據的存儲及管理,包括數據的查詢、增加、修改、刪除、導入導出等,同時提供各個功能的對外接口AIP函數,供其他功能模塊使用。數據管理子系統對各類監視數據存儲周期超180天,同時支持場景回放。
全球航班跟蹤系統可實現對我國范圍內飛行的全部航班及在境外飛行的我國航班的實時顯示及跟蹤。由于系統跟蹤的航班數據量巨大,系統最大實時處理航班數超過10 000個。如何實現大批量、高并發航班數據的有效接入及實時處理是一個必須解決的問題。在前端數據處理子系統中,主要通過易于拓展的硬件架構設計、多線程分級處理、結合多種優化方法來解決大批量、高并發航跡數據的接入及處理問題。
為了實現大批量、高并發航班數據有效的接入、處理、顯示,保證系統流程穩定運行,前端數據處理子系統在進行架構設計時,通過設立多臺前端數據處理服務器,對多路不同類型的數據源進行并行化處理,并行化處理后的結果在綜合顯示終端子系統進行整合。同時設立數據均衡服務器,通過周期性地檢測各個數據預處理服務器節點的CPU及內存負載情況,進而調配不同服務器數據處理流量,避免出現單一服務器數據處理超載情況發生。不同數據預處理服務器可獨立完成功能完整的數據預處理流程,在全球航班跟蹤系統的實際運行過程中可以根據數據流量的變化,靈活增減數據預處理服務器的數量,拓展數據預處理能力。各個前端數據處理服務器通過NTP授時服務器統計校時,保證數據處理時間同步。前端數據處理子系統可拓展硬件架構如圖2所示。

圖2 系統可拓展硬件架構
在進行大批量、高并發航班數據接入及處理時,為了充分利用高性能工作站的多核心處理能力,避免出現處理過載,減少數據處理延遲,前端數據處理模塊采用了多線程并行化軟件架構,軟件架構如圖3所示。不同線程間通過數據交換緩沖區來進行數據的交換。

圖3 多線程前端數據處理軟件架構
針對不同類型的航跡數據源,分別設立不同的數據接入線程,各線程獨立運行。使用不同的線程來分別完成數據預處理過程中的不同環節,將CRC校驗及數據必備項檢測與數據解析及坐標投影分別使用兩個不同的線程來實現,并使用CRC校驗以及數據必備項檢測的結果來修正數據解析的結果。不同線程之間使用內存數據緩沖區來進行數據的交換及共享。數據接入線程接入的數據存入數據交換緩沖區A中。CRC校驗及數據必備項檢測、數據解析及坐標投影線程則使用數據交換緩沖區B,多個CRC校驗線程以及數據解析及坐標投影線程分別從數據交換緩沖區B中提取數據,進行數據校驗、數據必備項檢測,數據解析及坐標投影。完成預處理后的航班數據存入到解碼數據交換緩沖區,解析后的不同類型的監視數據均歸一化為相同結構,方便進行多源異構數據的融合及信息補全。
然而,當航班數據批量過大時,會導致大量航班數據在不同緩沖區間來回進行高頻交換,數據在不同緩沖區間的來回拷貝將會極大地占用系統硬件資源,降低系統處理效率。為了解決數據交換帶來的處理效率降低問題,系統使用了內存地址交換方法,在進行數據交換時僅僅實現內存地址的交換,而數據在內存中的實際存儲位置并不發生變化。同時結合全局互斥鎖的同步使用,保證了各線程相互配合,協同完成數據預處理工作,同時避免了多線程間的訪問沖突的出現。基于內存地址交換技術的大批量數據預處理技術處理流程如圖4所示。

圖4 前端數據預處理流程
數據接入線程接入在完成數據的接收與存入后即向后續數據處理線程發送數據到達事件消息。數據處理線程接收到達事件消息后,通過使用內存地址交換技術,交換“數據交換緩沖區A”與“數據交換緩沖區B”的地址,對數據緩沖區B中的數據進行逐條處理。通過使用內存地址交換技術,避免了直接交換內存AB中的數據,節省了數據交換時間,提高了程序的數據處理能力。然而,此方法必須要保證多線程訪問數據緩沖區時嚴格同步,避免出現多個線程同時使用同一個數據緩沖區,同步避免了在進行數據緩沖區地址交換時出現線程訪問沖突的情況出現。通過使用C++中的全局鎖CRITICAL_SECTION以及EnterCriticalSection()和LeaveCriticalSection()函數的合理使用,保證各線程能協調使用各數據緩沖區,不會出現訪問沖突。
航班跟蹤及顯示是以GIS平臺為基礎,在地理信息平臺上通過疊加航班標識符、航班標牌、列表、速度剖面、油量剖面及高度剖面等跟蹤信息,實現航班飛行態勢的顯示。航班跟蹤及顯示子系統基于GDI繪圖庫構建了大量的繪圖函數類,這些類分別完成飛行標識、飛行標牌等不同元素的繪制工作。航班跟蹤及顯示子系統通過接收來自定時器、MFC窗口界面、用戶操作等多種不同的消息,經過消息處理中心處理后,實現對飛行態勢的動態更新顯示以及航班跟蹤。航班跟蹤處理流程如圖5所示。
航班跟蹤處理是基于“解碼數據交換緩沖區”來進行的,“解碼數據交換緩沖區”是一個靜態的全局的數據存儲緩沖區。前端數據處理功能模塊將經過處理后的航班數據存入“解碼數據交換緩沖區”內,航班跟蹤及顯示子系統則定期地從“解碼數據交換緩沖區”中提取航班數據,經過坐標轉換后,將航跡數據坐標由WGS- 84大地坐標系轉換至屏幕坐標系下,通過各種顯示元素的繪圖類完成飛行態勢、標牌、速度、高度及油量剖面的繪制。
“解碼數據交換緩沖區”中存儲的數據經過嚴格的維護以實現航班的跟蹤。由于系統接入的數據種類較多,包括ACARS、SSR、地基ADS-B、星基ADS-B數據,不同類型的監視數據源中會存在著大量相同航班。因而,在完成航班數據的前端處理后,數據進入“解碼數據交換緩沖區”時必須進行數據關聯及融合。由于ACARS及ADS-B中的24位地址碼、航班號及機尾號(飛行國際登記號)均為航班關聯的唯一標識。而SSR以二次代碼(二次雷達代碼)為航班標識,但不同地區二次代碼可能出現重復,因而需要將二次代碼結合監視數據源標識中的區域源代碼(SAC)及設備源代碼(SIC)字段才可完成航班關聯。完成關聯后的航班其狀態可以得到實時更新。
全球航班跟蹤系統實際運行狀態下系統部署情況如下:系統由三臺服務器、一臺高性能工作站組成,分別為一臺負載均衡服務器、兩臺前端數據處理服務器、一臺航班跟蹤及顯示工作站。負載均衡服務器完成數據接入及分發,同時監控兩臺前端數據處理服務器的工作狀態和負荷情況,實時調整數據流量。兩臺前端數據處理服務器并行工作,分別處理一部分航班數據,同時互為備份,若其中一臺服務器出現異常,負載均衡服務器可以將數據計算分配至另外一臺前端數據處理服務器,以保證系統正常工作。系統引接一路二次雷達數據、一路地基ADS-B數據、一路ACRAS數據,實時在線監視跟蹤國內的所有航班及境外飛行的我國航班2 000余個。圖6為全球航班跟蹤系統實際運行界面截圖。

圖6 全球航班跟蹤系統運行效果
圖7為全球航班跟蹤系統在地理信息及航行情報資料顯示效果。顯示內容包括行政區域邊界、河流、水域、路航線圖、飛行情報區地圖、機場地圖、危險區、限制區等。系統支持地圖的放大、縮小及平移操作。

圖7 系統地理信息及航行情報資料顯示
在實際運行的情況下對全球航班跟蹤系統的數據實時處理能力進行了測試。圖8為全球航班跟蹤系統在實際運行情況下,執行一次數據處理所需要的時間,其中:橫坐標為系統完成一次數據處理時的數據量;縱坐標為數據處理所消耗的時間,消耗時間通過Windows操作系統API函數GetTickCount()函數獲取。
全球航班跟蹤系統在實際運行時,單批次處理的航班數據條數小于1 000條/次時,在進行小批量航跡數據處理時,由于系統流水線任務調度、線程同步等待等原因,每次處理數據平均耗時并不相同,但通常在50 ms以內。當系統處理的數據量達到12 000條/次以上時,系統處理數據耗時也相應變長,但整體數據處理耗時均小于350 ms。測試結果表明系統整體數據處理延遲較小,能夠滿足全球航班跟蹤系統任務要求。
本文提出一種可行的全球航班跟蹤系統設計方案及各個關鍵功能單元的詳細架構和處理流程設計,并針對全球航班跟蹤應用場景中面臨的大批量、高并發航班數據處理問題,給出了具體的優化設計方法。通過設計可拓展的硬件處理架構,同時結合多線程軟件處理架構設計,保證了系統流暢穩定運行。系統實際運行結果良好,實現了對我國境內的所有航班以及在境外飛行的我國航班的跟蹤監視,我國航班覆蓋率達到87%。系統操作流暢,運行穩定,實時性高,滿足了對我國航班境內飛行的所有航班及境外飛行的我國航班的全球跟蹤要求。