文/程新滿 余愛國 秦正運
隨著信息技術(shù)的飛速發(fā)展,直升機(jī)航空電子系統(tǒng)的體系結(jié)構(gòu)已經(jīng)發(fā)生了重大改變。航電系統(tǒng)成立至今,經(jīng)歷了一個從分立式、聯(lián)合式、綜合化到高度綜合化的發(fā)展過程。與此同時,航電設(shè)備軟件化的趨勢日趨明顯,F(xiàn)-22上由軟件實現(xiàn)的航電功能高達(dá)80%,并且在一些安全關(guān)鍵的系統(tǒng)中,例如飛控計算機(jī)(Flight Control Computer,F(xiàn)CC),其應(yīng)用軟件代碼占整個源代碼的1/3,而支持系統(tǒng)余度管理和故障檢測的代碼部分超過整個代碼的55%(例如波音757的FCC軟件)。航電系統(tǒng)軟件代碼規(guī)模的變大,導(dǎo)致相關(guān)的開發(fā)極其復(fù)雜,同時對軟件測試提出了巨大的挑戰(zhàn)。
為降低開發(fā)成本、縮短研制周期、提高研發(fā)效率并保證產(chǎn)品質(zhì)量,在直升機(jī)航電系統(tǒng)及相關(guān)模擬器研制過程中,需要開發(fā)對應(yīng)的直升機(jī)航電仿真系統(tǒng),模擬各航電子系統(tǒng)的工作狀態(tài),通過純仿真、半實物仿真及系統(tǒng)聯(lián)調(diào),支持各航電子系統(tǒng)的協(xié)同開發(fā),提高了航電系統(tǒng)開發(fā)效率。傳統(tǒng)的針對接口控制文件(ICD,Interface Control Document)的仿真方法是在程序界面輸入仿真數(shù)值或者通過在程序內(nèi)部賦值進(jìn)行數(shù)據(jù)仿真。當(dāng)仿真系統(tǒng)的仿真數(shù)據(jù)量很大時,需要針對仿真數(shù)據(jù)逐行編程,該方法存在靈活性不強(qiáng),代碼復(fù)用性差等缺點。
本文針對傳統(tǒng)方法的缺點提出了一種基于MVC設(shè)計模式的仿真系統(tǒng)軟件架構(gòu),實現(xiàn)業(yè)務(wù)邏輯和數(shù)據(jù)訪問代碼的分離,并開發(fā)了相關(guān)工具軟件,并成功應(yīng)用于某型號直升機(jī)CNI仿真系統(tǒng)的軟件開發(fā)中。
圖1:MVC架構(gòu)設(shè)計圖
圖2:CNI仿真器系統(tǒng)框架
CNI系統(tǒng)作為航電系統(tǒng)的一個重要子系統(tǒng),負(fù)責(zé)直升機(jī)與直升機(jī)、直升機(jī)與地面指揮中心之間通信,具有無線電測高和測向功能,并能響應(yīng)空中、地面或艦艇詢問機(jī)對載機(jī)的敵我屬性的詢問。作為IMPS(Integrate Mission Process System)的數(shù)據(jù)終端,仿真軟件根據(jù)主仿真測試軟件的功能與接口要求,對CNI子系統(tǒng)與IMPS相關(guān)的控制邏輯與總線接口進(jìn)行仿真。
該仿真系統(tǒng)需要實現(xiàn)的功能包括:通信識別系統(tǒng)初始化過程仿真、通信識別系統(tǒng)工作狀態(tài)仿真、超短波電臺的設(shè)置與調(diào)顯數(shù)據(jù)仿真、短波電臺的設(shè)置與調(diào)顯數(shù)據(jù)仿真、無線電高度表數(shù)據(jù)仿真等等。
CNI仿真軟件駐留在仿真PC機(jī)中,通過數(shù)據(jù)終端卡的A/B口引出一路以太網(wǎng)線接入IMPS交換機(jī)中。通過配置ES通信參數(shù)實現(xiàn)CNI系統(tǒng)與IMPS的信號交聯(lián),仿真模塊應(yīng)具備符合系統(tǒng)設(shè)計所要求的總線接口通信功能。
本論文的直升機(jī)CNI仿真系統(tǒng)的工作環(huán)境是IMPS系統(tǒng)綜合與驗證平臺主仿真軟件。該系統(tǒng)的研制是為了支持IMPS系統(tǒng)的驗收交付測試需要,通過仿真航空電子系統(tǒng)中與IMPS系統(tǒng)交聯(lián)的1553B、ARINC429總線和RS422總線等數(shù)據(jù),為IMPS分系統(tǒng)的測試驗收提供所需的外部支持環(huán)境。
CNI仿真系統(tǒng)由硬件和軟件兩個部分組成。CNI仿真系統(tǒng)硬件設(shè)計包括數(shù)據(jù)通信板卡、CNI仿真計算機(jī)等部分;CNI仿真系統(tǒng)軟件部分即為本文所開發(fā)的仿真系統(tǒng),基于Visual Studio 2008平臺,采用C++語言開發(fā)。
航電子系統(tǒng)仿真軟件主要包括通信模塊、邏輯處理模塊和數(shù)據(jù)仿真模塊,不同子系統(tǒng)的邏輯處理模塊各不相同,代碼難以復(fù)用,但是通過設(shè)計恰當(dāng)?shù)能浖軜?gòu)和應(yīng)用正確的設(shè)計模式,可以實現(xiàn)通信模塊和數(shù)據(jù)仿真模塊的代碼復(fù)用。本文通過MVC設(shè)計模式的應(yīng)用,將數(shù)據(jù)處理,邏輯控制和視圖顯示的代碼分離,并開發(fā)相應(yīng)的工具軟件,實現(xiàn)了數(shù)據(jù)仿真模塊的代碼復(fù)用。
圖3:從ICD頭文件提取屬性
圖4:ICD成員變量到Model類的映射
圖5:ICD頭文件到Xml的映射
MVC(Model-View-Controller,模型-視圖-控制器),即把一個應(yīng)用的輸入、處理、輸出流程按照 Model、View、Controller 的方式進(jìn)行分離,這樣一個應(yīng)用被分成三部分——模型、視圖和控制器。MVC架構(gòu)把程序中數(shù)據(jù)處理、數(shù)據(jù)表示從業(yè)務(wù)邏輯中分離開來,同時又通過業(yè)務(wù)控制建立之間的通信方式,已經(jīng)有學(xué)者研究基于多線程MVC模式的航電仿真系統(tǒng)軟件設(shè)計。
Model封裝的是數(shù)據(jù)源和所有對這些數(shù)據(jù)的操作,是業(yè)務(wù)邏輯處理模塊。Model負(fù)責(zé)維護(hù)數(shù)據(jù)并提供數(shù)據(jù)訪問方法,Model包含了一系列的公開方法,通過這些公開方法,可以取得操作模型的所有功能。這些公開方法中,有的是取值方法,讓系統(tǒng)其他部分可以得到模型的內(nèi)部數(shù)據(jù),還有一些修改值的方法用于修改模型的數(shù)據(jù)。Model在狀態(tài)發(fā)生改變時要及時通知視圖,以便所有對應(yīng)的視圖都能夠得到及時更新。
View封裝的是對數(shù)據(jù)源模型的一種顯示,是用戶視圖模塊。View為用戶提供了輸入手段,并觸發(fā)Controller運行,然后通過Model訪問業(yè)務(wù)數(shù)據(jù),并用某種方式來顯示這些數(shù)據(jù)。對于CNI仿真系統(tǒng)而言,是系統(tǒng)數(shù)據(jù)查看和修改界面。
Controller是流程控制模塊,管理著用戶與 View的交互,能從View中取得數(shù)據(jù)并傳給 Model去執(zhí)行業(yè)務(wù)邏輯,然后根據(jù)Model的執(zhí)行結(jié)果,選擇一個合適的View把結(jié)果展現(xiàn)給用戶,MVC模式結(jié)構(gòu)如圖 1所示。
軟件架構(gòu)是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,實踐證明,一個成功的軟件系統(tǒng)往往都依托著一個好的軟件體系結(jié)構(gòu),也是實現(xiàn)軟件復(fù)用的全新的重要技術(shù)手段。CNI仿真系統(tǒng)基于MCV設(shè)計模式設(shè)計的系統(tǒng)框架如圖2所示。
用戶通過人機(jī)界面上的按鍵進(jìn)行操作,通過數(shù)據(jù)通信網(wǎng)絡(luò)發(fā)送相關(guān)請求給CNI仿真器,CNI接收到通信數(shù)據(jù)后,通過Controller模塊進(jìn)行邏輯處理,并調(diào)用相應(yīng)的Model塊進(jìn)行相關(guān)消息塊的數(shù)據(jù)讀寫操作;用戶可通過軟件界面(View)修改相關(guān)數(shù)據(jù),進(jìn)行仿真數(shù)據(jù)的修改。
接口控制文檔(ICD,Interface Control Document)是航電系統(tǒng)設(shè)計的頂層文件,是接口仿真軟件初始化的基礎(chǔ)。ICD定義了航電系統(tǒng)和子系統(tǒng)要處理和管理的各種電氣電子接口、信號、消息和數(shù)據(jù)流,是航電軟件詳細(xì)設(shè)計、代碼編寫、程序測試、功能聯(lián)試等研發(fā)工作的重要依據(jù),貫穿于航電軟件研發(fā)過程中。如下所示為經(jīng)過處理后的ICD實例(圖3):
Model類的核心是封裝數(shù)據(jù)源并對這些數(shù)據(jù)進(jìn)行操作,對CNI仿真系統(tǒng)而言,系統(tǒng)數(shù)據(jù)文件為Xml文檔。用戶發(fā)送的數(shù)據(jù)和CNI系統(tǒng)本身的基礎(chǔ)數(shù)據(jù)都保存在相應(yīng)的Xml文檔中。Model類需要實現(xiàn)的最重要的功能為ICD數(shù)據(jù)到相應(yīng)Xml數(shù)據(jù)文件的元素映射(圖4)。由于C++語言本身并不支持結(jié)構(gòu)體變量的遍歷,為此,需要設(shè)計一種通用方法能夠支持結(jié)構(gòu)體變量的遍歷。在代碼設(shè)計過程中,本文在前人經(jīng)驗的基礎(chǔ)上采用宏定義的方式進(jìn)行結(jié)構(gòu)體成員變量的屬性映射。通過從ICD結(jié)構(gòu)體中提取成員變量的類型、變量名和字段描述等屬性,建立XXXX.h文件。
在具體的Model類的頭文件(Model.h)中對該XXXX.h文件進(jìn)行包含(include),得到成員變量和遍歷用枚舉的定義。以下代碼為XXXXModel.h文件的代碼片段,通過該段代碼完成了ICD消息塊成員變量到Model類的成員變量的映射,變量的遍歷可以通過枚舉量進(jìn)行。
Model類對Xml數(shù)據(jù)文件的操作通過遍歷成員變量并調(diào)用LoadData()和SaveData()方法實現(xiàn)。
CNI仿真系統(tǒng)的重要功能包含設(shè)備參數(shù)的設(shè)置與調(diào)顯數(shù)據(jù)仿真,CNI系統(tǒng)通過接口數(shù)據(jù)與任務(wù)機(jī)進(jìn)行通信,MFD負(fù)責(zé)畫面和數(shù)據(jù)的顯示。CNI接口數(shù)據(jù)的仿真通過讀寫Xml數(shù)據(jù)文檔的形式實現(xiàn),參數(shù)設(shè)置和調(diào)顯的邏輯控制則交給Control模塊。為實現(xiàn)接口數(shù)據(jù)的仿真功能需要在Model模塊提供Xml數(shù)據(jù)文檔的讀寫和數(shù)據(jù)映射功能,當(dāng)Model狀態(tài)改變時,主動通知View進(jìn)行顯示更新。Xml文檔映射了對應(yīng)ICD消息塊的成員變量信息,如圖5所示。
View類負(fù)責(zé)顯示系統(tǒng)當(dāng)前的數(shù)據(jù)狀態(tài),并為用戶提供了輸入手段。為此,本文設(shè)計了CModelListCtrl類,通過該類可以顯示Model類的數(shù)據(jù)成員,與相應(yīng)Xml數(shù)據(jù)文件的狀態(tài)同步,便于查看和修改相應(yīng)的數(shù)值。
Model類的開發(fā)需要從ICD結(jié)構(gòu)體頭文件中提取成員變量的類型、變量名和字段描述等屬性,ICD結(jié)構(gòu)體數(shù)量繁多,結(jié)構(gòu)體可能還存在結(jié)構(gòu)體嵌套和數(shù)組的情況,如下:
從頭文件手工提取數(shù)據(jù)的過程十分枯燥且容易出錯;不同ICD消息塊對應(yīng)結(jié)構(gòu)體映射的Model類之間的差別僅僅為類的成員變量和支持的結(jié)構(gòu)體類型不一樣。由于航電子系統(tǒng)仿真器有著巨大的需求,本文開發(fā)了相應(yīng)的支持工具軟件,該工具軟件基于.net平臺,采用C#語言開發(fā)。通過工具軟件展開,結(jié)構(gòu)體tagA變成:
應(yīng)用該支持工具,選取航電ICD頭文件生成工具輸出的.h格式的接口控制文件(icd.h文件),能夠生成ICD消息塊屬性的XXXX.h頭文件和適用于監(jiān)控器的新ICD頭文件(new_icd.h);通過輸入Model類的模板文件(Model.h,Model.cpp),能夠生成對應(yīng)不同消息塊的Model類文件(XXXXModel.h,XXXXModel.cpp)當(dāng)需要對Model類重新設(shè)計時,只需要更新模板文件(Model.h,Model.cpp),通過工具可以自動更新所有的Model類;當(dāng)系統(tǒng)的ICD文件有更改時,只需要輸入icd.h文件即可生成適用于監(jiān)控器的new_icd.h文件,由此實現(xiàn)了仿真器開發(fā)過程的流程化。
利用仿真器Model文件生成支持工具能夠自動生成Model類文件和適用于仿真器的new_icd.h頭文件。支持工具的開發(fā)成功實現(xiàn)Model類代碼的復(fù)用,極大地減小了將來其他航電子系統(tǒng)仿真器開發(fā)的工作量和開發(fā)難度。
利用本文的軟件架構(gòu)和MVC設(shè)計模式,可以實現(xiàn)數(shù)據(jù)處理,邏輯控制和視圖顯示的代碼分離,減小代碼編寫的類間耦合?;诖a復(fù)用和將來其他航電子系統(tǒng)仿真系統(tǒng)開發(fā)的需要,編寫了仿真器Model文件生成工具軟件,能夠自動地生成各消息塊的Model類文件和適用于仿真器的new_icd.h頭文件,實現(xiàn)了仿真軟件的高效開發(fā)。
經(jīng)試驗驗證,在此架構(gòu)上開發(fā)的CNI仿真系統(tǒng)已經(jīng)在IMPS系統(tǒng)綜合與驗證平臺取得良好的效果。在將來的工作中可以進(jìn)一步研究如何設(shè)計出通用的航電子系統(tǒng)仿真軟件。
參考文獻(xiàn)
[1]Ahlstrom K,TorinJ.Future architecture for avionics system.IEEE 20th Digital Avionics Systems Conference,2009.
[2]謝文濤.數(shù)字航空電子技術(shù)(上)[M].北京:航空工業(yè)出版社,2010:61-62.
[3]韓紅偉,黨淑雯,何法江.飛行模擬器的結(jié)構(gòu)設(shè)計與仿真研究[J].計算機(jī)工程與應(yīng)用,2016,52(13):254-258.
[4]鄭鳳.基于MVC架構(gòu)的航電系統(tǒng)軟件研究與應(yīng)用[J].測控技術(shù),2012,31(06):2005.
[5]劉方軍.基于 MVC 架構(gòu)的航電系統(tǒng)軟件研究與應(yīng)用[D].廣東工業(yè)大學(xué)碩士學(xué)位論文.廣東:廣東工業(yè)大學(xué),2011.
[6]葉中脈.航電仿真系統(tǒng)接口監(jiān)控軟件的設(shè)計與實現(xiàn)[D].電子科技大學(xué)(碩士學(xué)位論文),四川:電子科技大學(xué),2012.