文/程新滿 余愛國 秦正運
隨著信息技術的飛速發展,直升機航空電子系統的體系結構已經發生了重大改變。航電系統成立至今,經歷了一個從分立式、聯合式、綜合化到高度綜合化的發展過程。與此同時,航電設備軟件化的趨勢日趨明顯,F-22上由軟件實現的航電功能高達80%,并且在一些安全關鍵的系統中,例如飛控計算機(Flight Control Computer,FCC),其應用軟件代碼占整個源代碼的1/3,而支持系統余度管理和故障檢測的代碼部分超過整個代碼的55%(例如波音757的FCC軟件)。航電系統軟件代碼規模的變大,導致相關的開發極其復雜,同時對軟件測試提出了巨大的挑戰。
為降低開發成本、縮短研制周期、提高研發效率并保證產品質量,在直升機航電系統及相關模擬器研制過程中,需要開發對應的直升機航電仿真系統,模擬各航電子系統的工作狀態,通過純仿真、半實物仿真及系統聯調,支持各航電子系統的協同開發,提高了航電系統開發效率。傳統的針對接口控制文件(ICD,Interface Control Document)的仿真方法是在程序界面輸入仿真數值或者通過在程序內部賦值進行數據仿真。當仿真系統的仿真數據量很大時,需要針對仿真數據逐行編程,該方法存在靈活性不強,代碼復用性差等缺點。
本文針對傳統方法的缺點提出了一種基于MVC設計模式的仿真系統軟件架構,實現業務邏輯和數據訪問代碼的分離,并開發了相關工具軟件,并成功應用于某型號直升機CNI仿真系統的軟件開發中。

圖1:MVC架構設計圖

圖2:CNI仿真器系統框架
CNI系統作為航電系統的一個重要子系統,負責直升機與直升機、直升機與地面指揮中心之間通信,具有無線電測高和測向功能,并能響應空中、地面或艦艇詢問機對載機的敵我屬性的詢問。作為IMPS(Integrate Mission Process System)的數據終端,仿真軟件根據主仿真測試軟件的功能與接口要求,對CNI子系統與IMPS相關的控制邏輯與總線接口進行仿真。
該仿真系統需要實現的功能包括:通信識別系統初始化過程仿真、通信識別系統工作狀態仿真、超短波電臺的設置與調顯數據仿真、短波電臺的設置與調顯數據仿真、無線電高度表數據仿真等等。
CNI仿真軟件駐留在仿真PC機中,通過數據終端卡的A/B口引出一路以太網線接入IMPS交換機中。通過配置ES通信參數實現CNI系統與IMPS的信號交聯,仿真模塊應具備符合系統設計所要求的總線接口通信功能。
本論文的直升機CNI仿真系統的工作環境是IMPS系統綜合與驗證平臺主仿真軟件。該系統的研制是為了支持IMPS系統的驗收交付測試需要,通過仿真航空電子系統中與IMPS系統交聯的1553B、ARINC429總線和RS422總線等數據,為IMPS分系統的測試驗收提供所需的外部支持環境。
CNI仿真系統由硬件和軟件兩個部分組成。CNI仿真系統硬件設計包括數據通信板卡、CNI仿真計算機等部分;CNI仿真系統軟件部分即為本文所開發的仿真系統,基于Visual Studio 2008平臺,采用C++語言開發。
航電子系統仿真軟件主要包括通信模塊、邏輯處理模塊和數據仿真模塊,不同子系統的邏輯處理模塊各不相同,代碼難以復用,但是通過設計恰當的軟件架構和應用正確的設計模式,可以實現通信模塊和數據仿真模塊的代碼復用。本文通過MVC設計模式的應用,將數據處理,邏輯控制和視圖顯示的代碼分離,并開發相應的工具軟件,實現了數據仿真模塊的代碼復用。

圖3:從ICD頭文件提取屬性

圖4:ICD成員變量到Model類的映射

圖5:ICD頭文件到Xml的映射
MVC(Model-View-Controller,模型-視圖-控制器),即把一個應用的輸入、處理、輸出流程按照 Model、View、Controller 的方式進行分離,這樣一個應用被分成三部分——模型、視圖和控制器。MVC架構把程序中數據處理、數據表示從業務邏輯中分離開來,同時又通過業務控制建立之間的通信方式,已經有學者研究基于多線程MVC模式的航電仿真系統軟件設計。
Model封裝的是數據源和所有對這些數據的操作,是業務邏輯處理模塊。Model負責維護數據并提供數據訪問方法,Model包含了一系列的公開方法,通過這些公開方法,可以取得操作模型的所有功能。這些公開方法中,有的是取值方法,讓系統其他部分可以得到模型的內部數據,還有一些修改值的方法用于修改模型的數據。Model在狀態發生改變時要及時通知視圖,以便所有對應的視圖都能夠得到及時更新。
View封裝的是對數據源模型的一種顯示,是用戶視圖模塊。View為用戶提供了輸入手段,并觸發Controller運行,然后通過Model訪問業務數據,并用某種方式來顯示這些數據。對于CNI仿真系統而言,是系統數據查看和修改界面。
Controller是流程控制模塊,管理著用戶與 View的交互,能從View中取得數據并傳給 Model去執行業務邏輯,然后根據Model的執行結果,選擇一個合適的View把結果展現給用戶,MVC模式結構如圖 1所示。
軟件架構是有關軟件整體結構與組件的抽象描述,實踐證明,一個成功的軟件系統往往都依托著一個好的軟件體系結構,也是實現軟件復用的全新的重要技術手段。CNI仿真系統基于MCV設計模式設計的系統框架如圖2所示。
用戶通過人機界面上的按鍵進行操作,通過數據通信網絡發送相關請求給CNI仿真器,CNI接收到通信數據后,通過Controller模塊進行邏輯處理,并調用相應的Model塊進行相關消息塊的數據讀寫操作;用戶可通過軟件界面(View)修改相關數據,進行仿真數據的修改。
接口控制文檔(ICD,Interface Control Document)是航電系統設計的頂層文件,是接口仿真軟件初始化的基礎。ICD定義了航電系統和子系統要處理和管理的各種電氣電子接口、信號、消息和數據流,是航電軟件詳細設計、代碼編寫、程序測試、功能聯試等研發工作的重要依據,貫穿于航電軟件研發過程中。如下所示為經過處理后的ICD實例(圖3):


Model類的核心是封裝數據源并對這些數據進行操作,對CNI仿真系統而言,系統數據文件為Xml文檔。用戶發送的數據和CNI系統本身的基礎數據都保存在相應的Xml文檔中。Model類需要實現的最重要的功能為ICD數據到相應Xml數據文件的元素映射(圖4)。由于C++語言本身并不支持結構體變量的遍歷,為此,需要設計一種通用方法能夠支持結構體變量的遍歷。在代碼設計過程中,本文在前人經驗的基礎上采用宏定義的方式進行結構體成員變量的屬性映射。通過從ICD結構體中提取成員變量的類型、變量名和字段描述等屬性,建立XXXX.h文件。
在具體的Model類的頭文件(Model.h)中對該XXXX.h文件進行包含(include),得到成員變量和遍歷用枚舉的定義。以下代碼為XXXXModel.h文件的代碼片段,通過該段代碼完成了ICD消息塊成員變量到Model類的成員變量的映射,變量的遍歷可以通過枚舉量進行。


Model類對Xml數據文件的操作通過遍歷成員變量并調用LoadData()和SaveData()方法實現。
CNI仿真系統的重要功能包含設備參數的設置與調顯數據仿真,CNI系統通過接口數據與任務機進行通信,MFD負責畫面和數據的顯示。CNI接口數據的仿真通過讀寫Xml數據文檔的形式實現,參數設置和調顯的邏輯控制則交給Control模塊。為實現接口數據的仿真功能需要在Model模塊提供Xml數據文檔的讀寫和數據映射功能,當Model狀態改變時,主動通知View進行顯示更新。Xml文檔映射了對應ICD消息塊的成員變量信息,如圖5所示。
View類負責顯示系統當前的數據狀態,并為用戶提供了輸入手段。為此,本文設計了CModelListCtrl類,通過該類可以顯示Model類的數據成員,與相應Xml數據文件的狀態同步,便于查看和修改相應的數值。
Model類的開發需要從ICD結構體頭文件中提取成員變量的類型、變量名和字段描述等屬性,ICD結構體數量繁多,結構體可能還存在結構體嵌套和數組的情況,如下:


從頭文件手工提取數據的過程十分枯燥且容易出錯;不同ICD消息塊對應結構體映射的Model類之間的差別僅僅為類的成員變量和支持的結構體類型不一樣。由于航電子系統仿真器有著巨大的需求,本文開發了相應的支持工具軟件,該工具軟件基于.net平臺,采用C#語言開發。通過工具軟件展開,結構體tagA變成:

應用該支持工具,選取航電ICD頭文件生成工具輸出的.h格式的接口控制文件(icd.h文件),能夠生成ICD消息塊屬性的XXXX.h頭文件和適用于監控器的新ICD頭文件(new_icd.h);通過輸入Model類的模板文件(Model.h,Model.cpp),能夠生成對應不同消息塊的Model類文件(XXXXModel.h,XXXXModel.cpp)當需要對Model類重新設計時,只需要更新模板文件(Model.h,Model.cpp),通過工具可以自動更新所有的Model類;當系統的ICD文件有更改時,只需要輸入icd.h文件即可生成適用于監控器的new_icd.h文件,由此實現了仿真器開發過程的流程化。
利用仿真器Model文件生成支持工具能夠自動生成Model類文件和適用于仿真器的new_icd.h頭文件。支持工具的開發成功實現Model類代碼的復用,極大地減小了將來其他航電子系統仿真器開發的工作量和開發難度。
利用本文的軟件架構和MVC設計模式,可以實現數據處理,邏輯控制和視圖顯示的代碼分離,減小代碼編寫的類間耦合。基于代碼復用和將來其他航電子系統仿真系統開發的需要,編寫了仿真器Model文件生成工具軟件,能夠自動地生成各消息塊的Model類文件和適用于仿真器的new_icd.h頭文件,實現了仿真軟件的高效開發。
經試驗驗證,在此架構上開發的CNI仿真系統已經在IMPS系統綜合與驗證平臺取得良好的效果。在將來的工作中可以進一步研究如何設計出通用的航電子系統仿真軟件。
參考文獻
[1]Ahlstrom K,TorinJ.Future architecture for avionics system.IEEE 20th Digital Avionics Systems Conference,2009.
[2]謝文濤.數字航空電子技術(上)[M].北京:航空工業出版社,2010:61-62.
[3]韓紅偉,黨淑雯,何法江.飛行模擬器的結構設計與仿真研究[J].計算機工程與應用,2016,52(13):254-258.
[4]鄭鳳.基于MVC架構的航電系統軟件研究與應用[J].測控技術,2012,31(06):2005.
[5]劉方軍.基于 MVC 架構的航電系統軟件研究與應用[D].廣東工業大學碩士學位論文.廣東:廣東工業大學,2011.
[6]葉中脈.航電仿真系統接口監控軟件的設計與實現[D].電子科技大學(碩士學位論文),四川:電子科技大學,2012.