劉邦強
(中國民用航空三亞空中交通管理站,三亞572000)
廣播式自動相關監視(Automatic Dependent Surveillance-Broadcast,ADS-B)已經成為中國空管當前重要的監視手段之一,在南中國海和新疆地區的應用已經較為成熟。但是要將其融入到空管自動化系統進行處理,實現在空管運行上的真正投產,業內對其的評估褒貶不一[1]。不少國內自動化廠家甚至人為ADS-B 相比二次雷達而言可信度較低,數據運用的可靠性不高。這一方面來源于ADS-B 本身信號處理機制,另一方面也來源于空管自動化系統的設計在ADS-B 的研究上還尚未深入,雖然ADS-B 數據的獲取簡單,但是要適用于具體功能性測試則要求,根據具體的環境修改相應的數據項參數,定制相應的目標屬性和動態,目前國內相關的研究還是空白,這也阻礙了ADS-B 在空管自動化系統上的全面應用。本文從實際出發,提出一種基于C#的ADS-B 數據模擬系統,系統提供了用戶接口,用戶可以提前定義目標的具體屬性和飛行動態,并具有本地態勢顯示和外接網絡輸出的功能,可以為相關測試、飛行校飛等提供技術支持。
當前中國應用的ADS-B 主要是歐控監視數據格式,主要是ASTERIX CAT021,CAT021 通過數據項定義描述具體的數據項內容和適用的范圍,包括數據包組成的包類型、字段、長度和描述符等。V0.26 版本的報文包含信息如表1[2]。其中,包類型指的是具體的ASTERIX 類別,長度表示報文的具體字節數,字段描述則表示具體的數據項情況。數據項在歐控監視數據格式中分為固定長度和可擴展長度,前者通過給定數據具體數值定義長度,后者則通過擴展標識位進行實際長度的定義。主流的空管ADS-B 數據站對ADS-B 數據的解析主要如下:首先接收到數據包,將報文數據項劃分提取處報頭,利用報頭解析提取處包括類型、長度、字段描述符在內的信息,根據字段描述符和用戶應用相關表(User Application Profile,UAP)按照序列順序依次分割獲得各個數據子項的原值;其次,調用數據解析對數據項原值進行解析得到最終的數據項信息,此步驟不僅包含數據項本身內容還記錄解析過程出現的各種異常情況(如萊斯三級數據站目標標牌的fake 字段)。一般的解析軟件設計上主要通過接收報文數據包記錄接收時間并加入接收報文隊列,在接收的隊列中判斷是否存在數據,如若有則解析報文并檢查結果,判斷結果是否存在異常,將解析結果作為報文信息數據加入解析報文隊列,檢查解析隊列是否存在數據,如若存在則處理具體的報文信息數據并進一步的統計。ADS-B 的數據解析過程是ADS-B 數據應用的關鍵也是本文設計的參考之一。

表1 CAT021 V0.26 數據格式
系統提供用戶定義的配置數據接口[3],該接口可以實現對具體生成目標的設置、起始位置和終點位置設置、速度設置、飛行軌跡定義(單目標直飛、S 型機動、圓周繞飛,多目標的對頭飛、相離飛、追趕等)、巡航高度設置等;用戶配置結果將以內部消息的形式送到數據封裝及處理模塊,其首先對配置項進行檢測并根據用戶輸入匹配相應的CAT021 數據格式,如若該數據項為必備數據項則給予用戶提醒或對其檢測結果為不通過;前端界面顯示則用于對ADS-B 數據的態勢顯示,以及后臺進程的處理相關結果提醒。此處,包括對地圖的處理和目標的態勢處理。最終,系統根據ADS-B網絡組播配置設置好系統內部網絡接口,數據可以對外輸出。具體設計如圖1。

圖1 系統總體設計
系統主要采用C#設計,軟件部署在一臺普通工控機上(以HP Z400 為例),如若需要多個數據輸出則通過網絡端口號設置并外接相關的交換機、路由器等網絡設備即可。
用戶接口模塊主要用于人機交互,在設計上考慮符合實際測試需要的ADS-B 數據模擬設置。主要接口配置有:空管自動化系統兩項告警測試(目標沖突告警和低高度告警驗證測試)劇本的導入(實現上包括對劇本文件的解析和讀取)、校飛劇本配置、普通目標模擬設計以及系統軟件運行的普通配置。在用戶接口模塊中,系統主要處理文本數據,通過正則表達式實現對具體文本參數和關鍵字的識別和讀取[4],讀取完畢后轉換為系統內部消息,以消息的形式發送給各個主要模塊。
數據封裝及處理是系統的核心模塊,其主要按照CAT021 數據格式結合用戶接口模塊傳送的用戶定制參數對數據進行封裝,并通過內部函數自動生成目標數據。CAT021 的格式是固定的,在軟件實現上只需要將固定的格式寫入內部配置數據列表中即可,C#對列表的處理較為快捷,為了后期軟件模塊化管理,此處定義目標數據類Target_class,該類可以使得模塊在接收用戶接口消息時實現內部類對象的具體初始化。所有數據項在類處理中將轉換為具體對象的具體屬性。
ADS-B 在數據站上的更新周期為1s(以南京萊斯ADS-B 數據站為例)。為了與其對應,模塊增加Timer控件,定義其周期為1s。在Timer 觸發函數中進行類屬性的賦值完成數據封裝。為了實現具體對象的數據不間斷生成,模塊設置了信號發生函數,該函數將根據配置在時間范圍內實現目標的WGS-84 坐標、高度、速度及上升下降率的生成和更新,實現航跡新建和航跡相關。信號發生函數可以根據用戶接口定義的航跡軌跡規劃,如單目標直線飛行、圓周飛行、S 機動飛行等對數據模擬進行自定義的繪制,并且根據用戶接口提供的在具體fix 點設置實現具體參數的模擬。以速度和位置為例,系統模擬的數據需要根據各個fix 點之間的定義進行平滑計算模擬,這種平滑有異于空管自動化系統的目標航跡平滑,主要通過起點和終點實現過程的平滑。系統將第一個需要計算的fix 點定義為起點,將最后一個計算的fix 點定義為終點,將起點和終點作為參數傳入平滑函數中即可完成該航段的數據平滑模擬。在數據處理上,fix 點的屬性數據也被定義為類(Fix_class),并形成Fix_class 類列表。平滑模擬函數需要遍歷Fix_class 類列表,將所有數據都進行計算。如此循環計算,函數將計算列表中兩兩相鄰對象之間數據模擬平滑。當然,為了提高仿真度,在高度方面的處理,系統對平滑做一定的閾值控制(類似空管自動化系統對高度的不濾波處理),系統目標的高度不會突變。在正常航空器的飛行性能要求下控制模擬的高度符合要求,在到達有高度變化的fix 點的一定范圍內(設計取值5km)逐步計算高度的變化使其表現符合現實。對于多目標的模擬,系統類似空管自動化系統,提供了兩項告警在內的基礎告警的設置,通過界面顯示“CA”、“MSAW”等告警字符,相關字符的定義在用戶接口模塊也可配置,最終以系統配置文件的形式存放在軟件啟動路徑下。
態勢顯示主要用于系統的本地顯示,可以驗證發送到外系統數據的準確性和測試相應參數設置。態勢顯示首先從主程序中獲取目標,在信號發生函數中獲取相應的動態列表數據更新目標信息。由于ADS-B數據可以直接解出經緯度坐標,因此系統的界面坐標全部設置為WGS-84 坐標,地圖文件可以直接利用在用數據站的地圖文件SDD_map.txt[5]。界面的顯示全部轉換為以經緯度為準的坐標描述和具體的格式、顏色設置。而對于目標標牌的顯示上,系統本身作為模擬數據源不需要同時顯示過多航跡,因此不存在資源占用問題,不需要通過畫筆Draw 類進行界面描繪(該方法雖然占用資源少但算法構成較為復雜,需要考慮標牌拖動以及目標移動等多種鼠標操作情況),可以直接采用Label 控件。換言之,系統列表中生成一個目標將綁定生成一個Label 控件和RadioButton 控件,兩者組成控件組。RadioButton 的位置為具體目標的經緯度坐標定義,Label 則作為標牌顯示具體目標的航班呼號、高度、24 位地址碼、速度和告警字段等航跡信息。如若目標對象的屬性更新則直接修改相應的參數即可,航跡新建和航跡相關轉換為控件組的新建和控件屬性的更新。
另外,用戶接口模塊配置如若出現不合規范的格式或者數值,系統在界面顯示模塊將會給出提醒,提醒用戶修改或刪除相應的配置。這種信息的互聯主要通過系統內部消息進行,系統開銷小,穩定性強。
網絡組播接口模塊可以采用C#的socket 編程即可[6]。首先建立socket 并將其進行端口綁定,其次增加一個組播域,通過sendto 函數進行數據的發送,完畢后關閉socket。設計上采用特定組播源,特定源組播(Source Specific Multicast,SSM)提供給主機應用程序一個“通道”抽象,每個通道擁有一個源和多個接收者。組播源可以發送一個IP 報文給SSM 目的地址G,接受者可以加入通道(S,G)來接收該報文。
系統首先添加以下命名空間:

實現的部分代碼如下:

本文從實際出發,提出一種基于C#的ADS-B 數據模擬系統,該系統通過用戶接口配置可以實現對模擬目標的定制模擬和文件導入配置模擬,并具有本地態勢顯示和外接輸出的功能。系統可以驗證空管自動化系統對ADS-B 數據處理的算法,同時也可以為相應的校飛和告警測試提供參考。系統實現簡潔、穩定,可以為ADS-B 的空管現場運行保障提供一種技術手段。