劉 濤,馮 燦,李成浩
(中國商飛民用飛機試飛中心,上海 200232)
民機試飛是指在真實的環境中對飛機進行測試的過程,以驗證其功能和性能是否滿足相關適航條款規定,也是民機投放市場的必由之路[1]。用于試飛測試的飛機與航空公司運營的飛機不同,會抽引機體上各種總線,并在飛機上安裝各種傳感器、采集系統和數據處理設備,用于實時獲取反映飛機各個關鍵系統運行狀態的參數和影像數據,實現試飛過程中的實時監控,保障飛行安全。試飛實時監控又分為機載監控和遙測地面監控,其中,遙測地面監控是指將采集后參數數據和視頻流經過PCM(pulse code modulation,脈沖編碼調制)編碼,并采用無線傳輸的方式傳遞到地面,利用地面系統進行數據的接收和解析,為試飛工程師、地面指揮人員、飛機設計人員等提供決策依據[2-4],是飛行試驗開展過程中最重要的監控模式。隨著大量先進總線在飛機上的使用以及網絡化測試系統的普及,試飛測試參數的數量越發繁多,類型也越發復雜,以某國產大型客機為例,其用于遙測地面監控的試飛測試參數就超過了10 000個。
遙測數據實時處理軟件是地面系統中不可或缺的關鍵組件,主要功能是結合機載測試系統的采集格式、參數測試信息、校準信息和ICD信息,完成遙測數據的實時解算、工程量轉換和原始數據保存[5]。但傳統的遙測數據實時處理軟件功能單一,存在以下不足:
1)實時處理參數量有限,往往不超過2 000個,無法滿足當前多參數的實時監控需求;
2)參數和視頻流解析一般采用分離模式,對兩者的混合編碼無法解析;
3)受制于軟件性能,無法進行較為復雜的參數計算和分析。
因此,為了滿足某大型民機試飛安全監控需求,需要研制一套新的遙測數據實時處理軟件,實現試飛過程中遙測參數及視頻流的實時解析、計算和存儲。
遙測數據實時處理軟件由后端解析服務和前端顯示軟件兩部分構成,集成了網絡配置、試飛參數配置、數據實時處理、數據記錄及監控畫面顯示等多種功能,用以完成試飛參數的工程量處理及相關計算,并經過網絡傳輸實時驅動可視化監控終端,達到對試飛狀態實時監控的目的。軟件結構如圖1所示。

圖1 遙測地面實時數據軟件結構示意圖
后端解析服務主要由數據接收模塊、數據解析模塊、數據存儲模塊、數據傳輸模塊和任務控制模塊組成;前端顯示軟件包括了任務管理模塊、界面顯示模塊、算法處理模塊、數據同步模塊、異常告警模塊和日志信息模塊。前端顯示軟件和后端解析服務之間通過Redis數據庫及ZeroMQ消息隊列進行數據交互。Redis數據庫是非關系型數據庫,屬于鍵值型數據存儲[6],Redis支持高并發的快速數據訪問,在本軟件中被用于各類狀態信息的前后端傳輸。ZeroMQ是一個并發框架,提供的套接字支持信息在線程和進程間的多協議傳輸[7],本軟件使用ZeroMQ消息隊列用于實現各個模塊、各個線程間的數據安全通信。
后端解析服務基于C++編程語言開發,以控制臺形式運行,在基礎框架上按照功能模塊使用多線程進行數據的接收、處理和轉發,通過消息隊列使用序列化協議進行相關數據消息通信,同時集成了Redis數據庫進行實時狀態的更新,并使用日志框架,對服務內部運行狀態進行監控和存儲。圖2是后端解析服務內部工作流程圖。

圖2 后端解析服務流程
在實際工作時,后端解析服務由前端顯示軟件通過發送開始、暫停、停止等指令控制任務處理過程,并根據各指令執行情況,反饋執行結果給前端顯示軟件。任務模式包括實時處理和數據回放兩種模式。兩種模式除了數據源不同,其他處理過程完全一致。其中,數據回放模式是指后端解析服務通過加載IRIG 106 CH10記錄文件,進行數據的提取、解析和轉發;實時模式則是針對IRIG 106 CH10的實時TCP或UDP數據流的處理。
后端解析服務采用多線程調度實現,各個功能模塊與線程的對應關系如表1所示。

表1 功能模塊與線程對應表
圖3為在實時處理和數據回放模式工作狀態下,各線程間指令、數據流從任務開始到結束的交互時序圖。

圖3 線程調度示意圖
在任務啟動時,任務控制模塊首先會開啟主控調度線程,將任務信息發送給數據接收模塊,同時將通道ID、遙測參數等結構化配置信息發送至數據解析模塊;
數據接收模塊通過對任務信息的解析,創建并開啟數據接收線程,接收實時數據流或者讀取記錄文件數據,將IRIG-B碼數據、PCM參數數據、PCM視頻流數據傳輸至數據解析模塊和數據存儲模塊;
數據解析模塊在收到主調度線程發來的通道ID和參數信息后會自動創建對應的處理線程,用于各類數據包的解析,解析后的數據被發送至數據傳輸模塊;
數據存儲模塊將持續偵聽數據接收線程的PCM參數數據和PCM視頻流數據,并根據控制指令按照任務信息完成數據的實時存儲。
數據接收模塊主要負責實時處理模式下網絡數據流的接收或數據回放模式下記錄文件中歷史數據的讀取,該模塊是整個軟件的數據源,其工作流程如圖4所示。

圖4 數據接收模塊工作流程
無論在實時模式下還是回放模式下,遙測數據的本質均為IRIG 106 CH10數據包,該數據格式由包頭、包主體和包尾組成,其結構如圖5所示[8-10]。

圖5 IRIG 106 CH10數據包格式
其中,數據包包頭包含通道ID、數據包同步格式、數據包長度、數據類型等關鍵要素;數據包包體可存放IRIG-B碼數據、PCM參數數據以及PCM視頻流數據。
PCM的一般格式如圖6所示,每一行為一個子幀,多個子幀組成了主幀[11]。每個子幀均由Sync Word(同步字,一般為FE6B2840)、SFID(計數器)以及多個PCM Word組成。PCM Word可負載常用的航空總線數據(包括ARINC429、ARINC664、IMB總線等)、音頻數據和視頻數據,總線數據均以消息的形式存放在PCM的格式格柵中[12-14]。

圖6 PCM格式格柵
數據解析模塊作為本軟件的核心功能模塊,主要負責數據包的格式解析、PCM幀處理、PCM參數計算和PCM視頻流解析。
IRIG 106 CH10數據包在解析過程中,主要結合通道ID和數據類型進行指定數據包的篩選[8]。提取的數據包將按照圖7所示的流程進行解析。

圖7 PCM參數數據解析流程
本軟件集成了IRIG 106 官方提供的解析庫,首先根據數據類型關鍵字(如當數據類型的值為0x09時表示為PCM數據)判斷數據包類型。當數據包為PCM數據包時,將按照遙測數據XML配置文件中參數和視頻流的描述信息,對數據包體內容進行解析。
遙測數據XML配置信息以層級標簽進行描述,標簽包括
數據解析模塊以PCM子幀為單位,從數據包體中按照參數的位置和取位提取原碼,并將原碼與對應掩碼進行“與”計算,得到參數碼值P0,當該子幀內所有參數信息解析完成后實時轉發給數據傳輸模塊。
PCM視頻流的編碼與參數不同,往往以“超采”的形式嵌在PCM數據幀中,如圖6所示,該主幀中包括三路嵌入式視頻,第一路視頻數據即為Word-01、Word-04、Word11、Word-14...Word-n1、Word-n4。在試飛領域,視頻編碼一般采用H.264壓縮算法,經過H.264壓縮后的視頻流被稱為“裸流”由連續的NALU(NAL Unit)組成,并使用Start Code(一般為0x 00 00 00 01)來指示一個NALU的起始或者結束[20]。從功能層面,每一個NALU又可以分為VCL(視頻編碼層)和NAL(網絡適配層)。其中VCL獨立于網絡,用于影像數據的高效編碼,輸出的結果為字節數組;NAL的功能是將VCL生產的字節數組適配至網絡(例如將字節數組切分為不超過MTU的多個單元)。經過VCL處理的數據在傳輸或者存儲之前,被封裝到了NALU中,每一個NALU的結構可以表示為一組原始字節序列負載(RBSP,raw byte sequence payload)和對應視頻編碼頭部信息(NALU Header)的組合。
視頻在PCM的編碼中可使用裸流和傳輸流兩種形式,當采用傳輸流編碼時,解析只需要將每個子幀中屬于同一路視頻流的PCM Word按照順序提取出來,以UDP/IP形式發送至VLC播放器即可完成解碼和播放;當采用H.264編碼時,軟件在完成指定PCM Word提取的基礎上,以Start Code為標準提取完整的影像幀序列,最后封裝成RTP報文或者傳輸流。在RTP報文的封裝過程中,首先去除Start Code,利用NALU Header轉換成Payload Header,加上RBSP成為RTP Payload,配合RTP Header完成報文封裝[18];傳輸流的轉換過程是在H.264裸流基礎上添加PES數據包頭,并將PES數據包按照184字節進行切分,為每一個切片添加4字節TS包頭轉換成傳輸流[19]。過程如圖8所示。

圖8
數據傳輸模塊的主要功能是負責通過消息隊列和序列化協議對相關消息進行內部和外部交互,包括PCM參數和PCM視頻消息、時間消息、日志消息、交互反饋消息、狀態消息、心跳消息等。數據傳輸模塊根據這些消息通過制定相關數據結構,使用Protobuf序列化成二進制數據,并通過類型進行相關區分,然后進行打包,使用ZeroMQ消息隊列將數據發送給前端顯示軟件。Protobuf文件中各數據結構定義如表2所示。

表2 Protobuf數據結構
數據存儲模塊按照任務信息,以任務名稱創建一級目錄,并在該目錄下創建文件,按照IRIG 106 CH10格式實時存儲由數據接收模塊轉發的所有數據,同時該目錄還存儲了遙測數據XML配置文件、日志文件和嵌入式視頻流文件,如圖9所示。視頻存儲目錄作為二級路徑以通道ID命名,在該目錄下,每路視頻文件以”通道ID_視頻通道”命名。

圖9 數據存儲目錄
任務控制模塊主要負責后端解析服務和前端顯示軟件任務開始、結束等指令的交互和執行情況的反饋,并對后端解析服務內部各模塊、各線程、各數據流進行調度,是整個端解析服務處理流程的調度樞紐。
在收到任務啟動指令時,任務控制模塊首先進行報文解析,完成遙測XML配置文件的加載,當加載成功后識別工作模式,完成網絡初始化和任務信息讀取,并啟動各功能模塊的相關線程,同時完成狀態記錄;當接收到結束指令時,任務控制模塊會停止各個模塊的線程,并完成狀態記錄。
任務控制模塊使用了Redis數據庫,記錄任務運行的相關狀態,包括任務運行狀態,IRIG-B碼處理、PCM參數處理、PCM視頻流處理狀態。各狀態消息的主鍵和數據類型定義如表3所示。

表3 Redis關鍵字段
前端顯示軟件采用C#編程語言和WPF框架進行開發,WPF(windows presentation foundation)是微軟推出的基于Windows的用戶界面框架,做到了界面設計和業務邏輯的分離[15-17]。前端顯示軟件的主要功能是負責任務控制、狀態可視化顯示以及相關信息的配置,分為任務管理模塊、界面顯示模塊、算法處理模塊、數據同步模塊、異常告警模塊、日志信息模塊等6個部分。
前端顯示軟件主要通過數據同步模塊與后端解析服務進行數據交互,將同步得到的相關信息提供給各個工作模塊進行處理。例如任務管理模塊獲取得到任務狀態信息,用以控制任務的進行;算法處理模塊捕獲傳過來的輸入參數,調用對應的算法進行解析處理,得到計算結果并派生出對應的參數信息,流程如圖10所示。

圖10 前端顯示軟件各功能模塊關系圖
任務管理模塊主要負責對任務的加載、保存、刪除以及進行歷史任務的回放。在實時模式下,加載任務主要通過導入遙測XML配置文件機載對應的任務信息,并將數據源、數據流、數據參數和分發終端等任務信息結構化后存儲于SQLite數據庫;在回放模式下,主要通過訪問SQLite數據庫,提取相應的任務內容。
界面顯示模塊主要負責針對數據源、數據流、參數信息以及分發監控終端的狀態信息進行可視化展示,展示內容包括IRIG-B碼信息、PCM數據流同步狀態、PCM參數值、PCM視頻流解析狀態等。所有展示信息通過WPF框架的數據綁定(DataBinding)進行顯示。所謂數據綁定就是在顯示控件與其顯示的數據之間建立連接的過程,其原理為界面顯示模塊會將需要顯示的信息自動包裝成依賴屬性,并在其Set方法中實現INotifyPropertyChanged接口,當該屬性被更新(賦值)時將值傳遞給顯示控件。
前端顯示軟件主界面采用TapPage切換模式,包括數據源、IRIG-B數據流、PCM數據流、PCM視頻流、數據參數界面和終端狀態等6個顯示頁面:
1)數據源顯示界面主要包括數據源名稱、輸入詳細信息、通道等內容。其中,輸入詳細信息允許用戶在回放模式下輸入記錄文件的路徑和類型;通道信息包括了通道編號、通道類型、數據鏈路名稱和通道ID。

圖11 數據源顯示頁
2)數據流顯示界面主要顯示PCM數據流、PCM視頻流、IRIG-B時間流的狀態和信息。
3)數據參數界面包括有所有參數的列表,當參數被選中時,則顯示當前參數的名稱、單位和描述,同時結合PCM格式格柵地圖呈現參數的位置(SFID、Word)、取位以及算法編輯子窗口。通過算法編輯子窗口,用戶可從預定義算法或者自定義算法庫中以拖拽方式拉取一個或多個算法進行運算,形成計算鏈,如圖12所示。

圖12 數據參數顯示頁
4)終端狀態顯示頁主要顯示各個監控終端的名稱、通信碼速率和數據傳輸狀態,當數據傳輸處于不同狀態時,軟件會通過不同的顏色進行明顯區分。

圖13 終端顯示頁
數據同步模塊主要通過ZeroMQ消息隊列的方式,從后端解析服務中獲得任務狀態信息、數據參數信息、異常告警信息和操作日志信息。獲取以上信息,并分別提供給任務管理模塊、算法處理模塊、異常告警模塊和日志信息模塊使用,最終由界面顯示模塊完成展示。ZeroMQ通訊協議采用命令碼和Protobuf數據格式組成,命令碼長度為2個字節。

表4 命令碼表
算法處理模塊主要完成遙測PCM參數的計算,流程如下:
1)算法處理模塊通過任務管理模塊加載的遙測XML配置文件,得到參數列表,形成參數集合;
2)通過數據同步模塊從后端解析服務獲得P0參數后,根據配置信息判斷該參數是否有算法綁定,若無,則不作處理,若有,則調用響應的算法鏈進行計算,得到每一步的計算結果P1、P2、…、Pn;
3)P0以及每一步計算結果P1、P2、…、Pn通過界面顯示模塊進行顯示,同時將結果發送給監控終端。
異常告警模塊主要負責對界面、數據操作時的異常告警信息進行捕獲和提示,以警告彈窗、日志輸出和告警信息文件的形式進行展示和存儲。當軟件運行過程中出現告警時,前后端的告警信息會形成異常告警集合,并通過時間進行排序,同時輸出到顯示界面和日志文件中。告警信息分為普通、警告、嚴重等三個不同的等級,顯示時按照等級不同分別顯示為白色、琥珀色和紅色。
軟件運行過程中,相關的操作,特別是異常情況、告警信息,在沒有運行日志的情形下,很難排查故障原因,因此日志信息模塊至關重要。
本軟件采用Log4cplus框架對調試信息、過程警告信息、執行流程記錄信息、內部程序斷言信息、內部程序錯誤信息和用戶的基本操作信息進行管理。
為了驗證遙測實時數據處理軟件的功能和性能,分別在實時處理和數據回放模式下開展驗證試驗。
在實時處理模式下(處理流程如如圖14所示),利用國產某大型客機的實時遙測數據作為數據源(數據源信息如表5所示),經移動遙測系統接收后,通過地面幀同步處理工作站完成PCM的位幀同步處理,形成IRIG 106 CH10網絡數據流,經網絡交換機發送至運行本軟件的數據處理服務器進行實時處理,處理后的結果轉發至實時監控終端進行可視化顯示;在回放模式下通過加載記錄的IRIG 106 CH10文件進行測試(數據源信息如表5所示)。

圖14 驗證試驗流程

表5 數據源信息
經測試,結果如表6所示,遙測數據及解析后的視頻如圖15所示。

表6 數據源信息

圖15 監控終端顯示結果
本文設計研發了一套用于民機試飛遙測數據實時監控的軟件,在實時處理和文件回放兩種工作模式下,實現了國產某大型民機不少于15 000個PCM參數和4路高清嵌入視頻的實時處理、計算和分發,驅動了實時監控終端的監控應用,為民機試飛的安全監控提供了有力保障。