王洪星,孫 剛,徐 智
(中國直升機設計研究所,江西 景德鎮 333001)
現代飛行器由于控制模型復雜,在試飛調參時往往需要多次進行參數調整。為定量評估飛行參數效果,需要在試飛過程中將各項飛行數據進行存儲,在飛行后進行分析并為控制律參數調整提供依據。另外,飛行過程中出現故障時,依靠記錄的故障信息可以快捷地對故障點定位。為節省存儲資源,數據存儲的格式往往為二進制形式,需要在飛行后對記錄數據進行重新解碼還原。由于常用的飛參設備需要記錄各系統的大量飛行數據,數據記錄周期往往設置得較長,以節約存儲空間,因而導致在長航時飛行時很難對某特定系統的數據進行詳細記錄。對此,在試驗試飛階段通常還需專門留出數據記錄器。另外,出于調參排故等需要,各系統需記錄的數據種類也會經常變化,因此需要一種高適應性的解碼軟件對存儲的二進制數據進行解碼。基于此方面考慮,本文提出并實現了一種基于MFC框架,用于對飛行數據解碼的Windows應用軟件,在存儲數據種類發生變化時,無需重新編譯生成軟件,只需對相關協議配置文件進行更改即可,可以快速適配新的存儲格式。
數據記錄器如圖1所示,采用了ARM+FPGA的處理器架構,其中FPGA作為429總線接口。在數據存儲過程中,FPGA接收并緩存外部輸入的高速429數據;當數據有效后,向ARM發出中斷信號,通知ARM讀取緩存數據,并將數據順序存儲在Flash中;Flash格式化為FAT32文件系統,因此應用軟件可以通過文件的形式對存儲數據進行讀寫操作。同時,ARM向FPGA發送控制信號,用于對總線數據讀取進行邏輯控制。在數據讀出過程中,首先將記錄器引出的USB接口連接上位機電腦;ARM接收到接入信號后,通過內部數據總線將Flash中存儲的數據以二進制文件格式讀出,并通過USB接口向PC發送;此時在PC中可以通過文件訪問的形式對存儲文件進行操作。

圖1 數據記錄器硬件組成
總線數據由飛行記錄軟件發送。記錄軟件貯存在飛行計算機中,按照固定周期運行,并由操作系統負責周期任務調度。記錄軟件負責傳感器數據的采集,并將中間數據向數據記錄器發送。程序流程如圖2所示。考慮到發送的數據量較大,為避免阻塞任務,在每個任務運行周期內,將待發送的一幀飛行數據包分成四拍發出。在機型上進行實測時,80 ms的數據記錄周期,每周期記錄的429字為113個,則每小時需要記錄的飛行數據約為39 MB。

圖2 數據發送流程
在記錄器上電后,ARM首先向FPGA發送初始化指令,并調用文件系統API在Flash中創建新文件。在接收到429數據后,ARM從FPGA的數據緩沖區中讀取數據,并向文件中寫入,如圖3所示。

圖3 數據存儲流程
為保證軟件的通用性,解碼軟件使用了配置文件對不同的存儲協議進行適配。配置文件的主要格式如表1所示:第1列為429字的各數據位的信號定義;第2列說明了對各數據位定義的說明,例如正負號的定義、單位等;第3列表示該429字在一幀數據包中的位置;第4列表示該數據位在429字中的起始位置;第5列表示該數據位所占據的位長度;第6列代表了數據的存儲類型,在本軟件中,以數字3代表該數據為離散量,在解析時只需按位解析即可,無需考慮LSB換算,數字2代表該數據為無符號值,數字1代表該數據為有符號值,在解析時應考慮數據正負;第7、8列分別為該數據的LSB值、數據字的429標號;第9列為數據在輸出中的列位置,用于在數據解析后,在輸出文件中按照一定順序對解析出的數據信息重新調整,以便于解讀。

表1 配置文件格式示例
按照此格式,在數據的存儲協議發生變化時,無需再重新修改解碼程序,只需要按照新協議修改配置文件,即可對新協議進行正確解析。
2.2.1 編程框架
解碼軟件采用基于MFC的程序框架編寫。MFC即微軟基礎類庫,是微軟公司于1992推出的通用C++開發庫。庫中大量封裝了可重用的Windows API,包括Windows的內建控件和組件等,支持消息循環、運行時類信息機制、動態創建機制等特性,是一種 Application Framework,包含多個程序框架模板,減少應用程序開發人員的工作量。發展到今天,MFC已成為一個穩定和廣泛覆蓋的C++類庫。
考慮到解碼軟件需要的界面控件數量較少,因此采用了基于對話框的架構進行代碼編寫,所使用到的類架構如圖4所示。

圖4 使用到的架構類
其中,CMyApp為應用程序類,負責應用程序的初始化;CMainDlg為對話框類,負責解碼主界面的刷新、消息響應等工作;CDialogLogIn用于管理軟件登錄界面并讀取配置文件。
2.2.2 界面設計
解碼軟件主要設計了登錄界面與解析界面兩個對話框,登錄界面如圖5所示。在該界面中,用戶需輸入正確的用戶名與登錄密碼后方可進入解析界面。任意輸入錯誤,將進行錯誤提示,如圖6所示。

數據解析界面為解碼功能的主界面,如圖7所示。通過點擊“解碼”按鍵,彈出文件選擇對話框,選擇需要解析的二進制文件。當“控件刷新”為選中時,將解析結果在下方列表框中即時顯示,并在當前進度中顯示解析進度。同時,解析出的故障信息與PBIT自檢信息同樣在控件中顯示。為方便不同界面切換,使用Tab控件來對當前顯示的數據主頁面進行管理。

圖7 解碼軟件主界面
2.2.3 軟件流程
軟件登錄界面中,添加“登錄”按鍵的消息響應函數CDialogLogIn::OnBnClickedOk(),在響應函數中,首先校驗用戶名與密碼是否正確。在正確輸入后,顯示解碼軟件的主界面。主界面由CMainDlg類管理,在對話框初始化函數CMainDlg:: OnInitDialog()中讀取應用程序路徑中存在的有效配置文件,并將讀取結果存放于類成員m_pConfigStruct中。
在協議配置文件成功讀取后,CMainDlg將各協議字配置項名稱作為列標,插入到列表控件中,顯示順序由配置文件中的列位置決定。
進入解碼主界面,在“解碼”按鍵的單擊事件響應函數中,調用系統文件打開對話框,選擇并讀入待解析的二進制文件,開始解析飛行數據。解析流程如圖8所示。

圖8 數據解析流程
首先根據標號尋找每幀數據中第一個429字位置;此后每讀取到一個429字時,應首先對其標號與配置文件中的標號進行對比。配置文件中的各429字的行順序應與接收順序相一致,當接收順序不同時,認為該次數據包接收錯誤,不再解析本包中的其余字,并在故障字解析文件中進行說明,同時尋找下一包有效數據。
根據429字中數據位類型的不同,將有符號數、無符號數以及離散量進行分類解析。
在數據解析過程中,考慮到本軟件采用了單線程的工作方式,在數據量較大時,往往不能及時響應系統消息,會出現界面無法響應用戶操作的情況,因此加入了消息循環結構,::SendMessage用于將消息發送到消息所標識的窗口,直到窗口完成指定的窗口過程后再返回。這樣就避免了在解碼過程中,當發生窗口事件時無法響應消息的情況:
if(PeekMessage(&msg,(HWND)NULL,0,0,PM_REMOVE))
{ …
::SendMessage(msg.hwnd,msg.message,msg.wParam,msg.lParam);
…
}
解析完成后,創建輸出文件夾。文件夾按照飛行時間與架次重命名,并將生成文本格式的數據解析文件、格式說明文件、故障信息、PBIT結果文件依次存放。
2.2.4 軟件驗證
在機型上進行記錄器功能驗證,如圖9所示,飛行過程共計約2小時。

圖9 試飛數據解析結果
通過解析數據能夠基本還原飛行過程中的各系統狀態與內部運行信息,數據記錄準確,解析結果(圖10)與實際飛行情況一致。

圖10 離散量解析結果
本文提出了一種通用的429數據解碼軟件設計方法,用于對數據記錄器存儲的數據進行解碼,即將二進制總線數據解析還原為實際物理量。一方面用于在試驗試飛時,對各系統的參數調試提供參考,同時保證飛行數據的完整性,能夠高效地還原飛行過程中各飛行系統工作狀態;也可以用于對飛行過程中的故障快速定位,為地面維護人員排故工作提供數據支持。最后對軟件的正確性進行了充分驗證。
飛機實際飛行試驗表明,軟件易于使用,飛行數據解碼準確,通用性較好,能夠方便地將該解碼軟件移植到不同的機型中。本文為429總線數據譯碼提供了一套通用的方法,證明了該軟件的實用意義,為今后的試驗試飛提供了有力保障。