師麗斌,李蜀瑜
(陜西師范大學 計算機科學學院,陜西 西安 710119)
新一代航電系統正朝著高度綜合化、模塊化和系統高度容錯等方向不斷發展與完善,隨之也帶來航電軟件系統的設計與開發的工作量變大、難度變高、開發周期和成本難以控制等問題。急需得到新方法和技術來支持航電軟件系統的設計與開發。
目前,基于AADL(Architecture Analysis and Design Language)的航電系統建模技術和嵌入式構件化方法是最受重視的方法和技術[1-2]。基于AADL的建模技術主要解決航電系統所面臨的空間/時間確定性、測試與驗證等問題,從而提高航電系統軟件的可靠性,降低系統開發及驗證成本[3]。但是,由于目前AADL的語法、語義及擴展(Annex)機制等仍在發展與完善中,而且AADL十分復雜,它涉及的計算機理論較深,領域工程師和設計人員難以在較短時間內熟練掌握,因而難以短時間內推廣。而嵌入式構件化技術[4]是基于面向對象(Object Oriented,OO)技術上的更高級抽象,它把已存在的嵌入式構件組裝到正在開發的嵌入式軟件系統框架結構中,從而提高軟件開發效率、降低軟件開發成本且經過多年的發展已經在相關領域應用實施,目前已相對成熟。所以文章擬通過嵌入式構件化的方法來解決航電系統目前亟待解決的問題。
嵌入式構件模型是基于構件化開發的前提,它規范了嵌入式構件必須遵循與其他構件實現正常交互的標準和習慣。目前比較成熟的嵌入式構件模型有飛利浦公司用于消費電子產品的Koala、ABB公司用于現場總線技術的PECOS[5]以及比利時IWT協會贊助SEESCOA項目的CCOM模型[6]等等。但是,這些嵌入式構件模型均是針對各自專業領域所作出的設計,通過對這些模型的分析,發現它們并不支持航電軟件系統所廣泛采用的接口規范ARINC 653標準[7]。Vanderbilt University通過對CORBA構件模型(Cobar Component Model,CCM)進行裁剪和修改,提出了適用于ARINC 653標準的ACM嵌入式構件[8],但是該構件模型支持跨分區間的方法調用,在運行過程可能由于分區間方法的調用造成分區間的相互影響,而這與ARINC 653標準所強調的時空分區不相符。通過對ARINC 653標準的研究提出了適用于ARINC 653的嵌入式構件元模型ECOM。
通過對ARINC 653標準進行分析,總結出符合ARINC 653標準的構件必須滿足以下4個條件:
1)構件必須滿足實時性能的規定,因為ARINC 653是強實時系統;
2)構件必須有良好的交互語義,使其能夠從底層的構件裝配分析系統的屬性;
3)構件必須支持靜態內存分配,因為在ARINC 653中必須事先知道所有可能的任務以確保它們可以被調度;
4)構件的部署必須滿足ARINC 653標準規定的時空分區的要求。
針對上述條件提出了符合ARINC 653標準的嵌入式構件模型ECOM,首先采用UML擴展機制定義了構件元模型,它是一個可視化、易讀的模型,但其所表達的構件模型的語法并不嚴密,文章采用構件描述語言(Component Description Language,CDL)對ECOM構件模型的標準化描述,采用前后文無關文法(CFG),并使用巴思諾范式(BNF)進行描述[9],為下一步ECOM構件模型的重用和組合提供幫助。由于文章主題及篇幅的原因,在文章中并不詳細闡述關于CDL語法等相關信息。下文主要從ECOM構件元模型、構件交互和構件組合3個方面對其進行描述。
ECOM構件元模型如圖1所示,采用UML擴展機制定義了元模型的所有元素及其相互關系。圖中的每個概念在CDL中都有對應的關鍵字。
ECOM構件元模型的核心部件是構件(Component),其次是具有結構化數據特點的構件觸發器 (Tigger)、屬性(ComAtttibute)、 接口 (Interface)、 端口 (Port) 和構件參數(ComParameter),其他輔助的元對象還有操作(Operation)、結構體(Struct)、聯合體(Union)、枚舉類型(Enumeration)、基本數據類型(Fundamental Types)。下面詳細介紹結構化數據特點的元模型部件。
構件:它是元模型所要描述的核心部件。構件中可以包含零個或多個構件參數、零個或多個構件屬性、零個或多個接口、零個或多個端口Port。構件中所包含的接口分為向構件外部提供服務的接口(Provide接口)和需要外部其它構件提供服務的接口(Require接口);所包含的端口分為向外部發布數據的端口(Publish端口)和接收其它構件所發布的數據的端口(Consume端口)。
構件觸發器:是指構件中可以被周期性觸發的內部方法。它可以是由時鐘觸發也可以由一個事件來觸發這個內部方法,而且必須有一個有限的、非零的周期。本文提出的構件模型通過在模型中加入構件觸發器并通過設置構件觸發器及其配置屬性來使構件滿足系統要求的實時性能。例如加入周期、截止時間、構件執行的的前置條件和后置條件等來判斷構件的執行與否以及故障反饋等。

圖1 ECOM構件元模型Fig.1 Component metamodel of ECOM
構件屬性:是指構件自身的狀態。構件狀態是由其自身的屬性值反映的,可以外部觀察到。狀態的設置只能由構件自身進行,外部不得設置其狀態,只能通過調用構件關于屬性的get方法獲取構件的狀態。
接口:獨立于構件之外定義,使接口的定義可以在不同的構件中復用。每一個構件定義必須說明自己對外提供哪些provide接口,以及需要外部提供哪些require接口。接口只有本地接口一種,即只能向同一分區中的構件提供方法調用服務。
端口:是指數據端口,用于在構件間進行數據或事件的通信。它也獨立于構件之外定義,每一個構件定義必須說明自己對外提供哪些publish端口,以及需要外部提供哪些consumer端口。端口定義關聯一個已定義的數據類型,比如可以是一個枚舉、結構、或者聯合體。端口定義為本地或遠程端口,本地端口僅能為同一分區內的各構件進行數據通信,而遠程端口則可以跨分區甚至跨CPU進行通信。
構件參數:用于在初始化過程中配置屬性信息,用于控制構件的工作模式。由于ARINC 653中的時空分區,構件部署必須是靜態內存分配,且不允許動態的分配內存,所以一旦在初始化過程中設置構件的屬性則在該構件的生命周期中保持不變。
由于ARINC 653規范所要求分區間空間的隔離,在分區間和分區內所采用的通信機制并不相同,所以定義ECOM構件間交互為遠程交互和本地交互。遠程交互負責分區間構件的交互而本地交互負責同一分區內構件的交互。
遠程交互:構件間只能通過端口進行交互,實現分區間進程的通信。端口交互屬于異步交互,一個consumer端口只能連接一個publish端口,但一個publish端口可被連接到多個consumer端口。publish端口和consumer端口之間的消息類型需要嚴格的事件類型匹配。在ECOM構件模型中,publish端口和consumer端口都分為周期性和非周期性,因此在構件的定義過程中應注意端口數據有效性,即數據停留在端口的時間小于用戶設置的數據刷新周期時間。
本地交互:構件間不僅能夠通過上述的端口通信實現分區內進程間的通信,而且能夠通過接口方法調用實現進程間的同步。接口交互屬于同步交互,即采用調用-返回語義,但是接口可以由關鍵字oneway指明其是單向的,即調用者調用該接口時,不必等待其返回結果,也可實現異步接口調用。一個require接口只能關聯一個provide接口。一個provide接口可以關聯多個require接口。由于這些交互的同步特性,調用者require接口中的方法的截止期必須大于被調用者的provide接口中方法的截止期限。
需要注意的是,雖然遠程交互和本地交互均采用了端口交互,但是在交互的實現過程中遠程交互依賴APEX中的分區間通訊接口實現,而本地端口則采用APEX分區內通訊接口實現。
根據ARINC 653系統所要求的應用軟件分區部署提出將構件的組合分為3類。
1)子構件:構件內部不包含其他構件的構件;
2)分區內組合構件:在ARINC 653系統中同一分區內部,由多個構件通過本地端口和接口組裝而成的構件,使多個功能簡單的構件構成一個功能更為復雜的構件;
3)系統構件:在ARINC 653系統中不同分區,各分區內組合構件通過構件容器端口組合成的一個完整的軟件系統。該系統構件是閉合的,所以該系統構件中的所有為其他構件提供數據端口必須綁定到其實現上,而需要其他構件提供數據的端口必須注意其數據類型的匹配。圖2描述了構件層次及其端口連接。其中端口和接口的實心代表本地端接口,空心代表遠程端口

圖2 構件組合及端口/接口連接Fig.2 Component combination and Port/Interface interaction
構件組合的原則是:
1)在復合構件中提供的端口與接口是由其子構件的遠程端口和遠程接口提供的,復合構件本身盡量避免提供在子構件沒有的端口和接口;
2)復合構件內部構件的交互如果是分區內構件交互通過本地端口或本地接口直接交互;
3)復合構件內部構件的交互如果是不同分區構件的交互,則必須通過構件容器所提供的端口進行交互。
將上文定義的ECOM構件模型利用CDL語言進行描述并將其映射成能夠運行在ARINC 653系統的C++應用成為驗證ECOM構件元模型正確性和可用性的重要標準,同時也是采用構件化開發航電系統軟件的關鍵點之一。目前,為提高效率、降低難度,采用Windows平臺下Vxworks 653仿真系統對模型的正確性等進行驗證,開發環境為VS2010。將構件模型的CDL文件經CDL編譯器編譯映射為C++框架代碼,構件實現人員只需添加構件的業務邏輯處理代碼就可編譯運行在仿真系統中。
標準C++中存在操作、結構體、聯合體以及基本數據類型的關鍵字,所以只需將CDL中的這些元素的關鍵字直接映射為C++中的關鍵字即可,在此并不詳述。文章列舉了ECOM構件關鍵元素的CDL文法到標準C++代碼框架映射規則。
規則1:CDL中的每一個構件類型映射為C++中的一個頭文件和一個CPP文件。一個構件(Compent)映射的C++的一個class,在相應的頭文件中存放所映射的C++類的申明,其中聲明部分包括構件參數、構件屬性、端口以及接口的聲明。在CPP文件中,放置該類中相關方法的實現代碼;
規則2:CDL中每一個端口類型(Port)映射為C++的一個頭文件,將CDL該類型的一個端口映射為該頭文件中的一個class,該類包含protect數據成員,用于記錄端口所要求的數據結構,同時也是要發布數據的緩沖區。在實現該端口的cpp文件中,若端口為本地端口,調用APEX中的分區內通訊接口,否則,調用APEX中分區間通訊接口實現。
規則3:CDL的每一個接口類型(Interface)映射為C++的一個頭文件,將CDL該類型的一個接口映射為C++頭文件中的一個 class,其中接口中的操作(Operation)映射為類中public的純虛函數。在實現該端口的cpp文件中,調用APEX中的分區內通訊接口。
規則 4:CDL構件的參數 (ComParamater)和屬性(ComAttribute)由于均只能是基本數據類型或枚舉類型,對構件中的每個參數或屬性將它們映射為C++中對應的基本類型或枚舉類型,并自動生成對應的set()和get()方法對其進行設定和讀取。
規則5:CDL構件的觸發器(Tigger)映射為C++的一個頭文件,將CDL該類型映射為C++頭文件的一個class,其中的方法映射為類中public的純虛函數。在實現該方法中,調用APEX中時間管理接口來實現。
以一個簡化的導航系統為例,介紹ECOM構件模型及其自動生成標準C++代碼框架的具體實現。
首先,為導航系統構件模型定義名為Navigation.cdl的文本文件,描述GPS構件模型經傳感器構件獲取實時數據,加工處理傳遞給導航構件處理的功能,其CDL定義如圖3左部構件模型CDL描述所示,根據映射規則,將CDL文件中結構體、端口以及接口映射到名為DataType的文件中,將Sensor、GPS、NaviDIsply三個構件模型映射分別映射到以其命名的文件中,Navigation.cdl文件經編譯后自動生成如下的代碼框架,如圖3右部給出了GPS構件的CDL描述映射為C++代碼。

圖3 CDL描述構件模型及映射為C++代碼Fig.3 CDL description of component model and mapping to C++code
文章利用構件化思想提出了一個適用于ARINC 653的構件元模型ECOM,并設計其交互規范及構件間的組合,通過將構件模型轉化為C++代碼框架并運行在仿真環境下,驗證了構件模型的正確性,使構件開發人能夠專注于構件內部的邏輯實現,提高了開發效率,降低了開發難度。在后續的工作中,還將研究在構件模型實例化時確定構件的實時特性,以滿足構件開發人員靈活的定義航電系統應用軟件的實時性要求,以及研究利用WorkBench工具使用ECOM構件在VxWorks653系統上開發出更加實際和復雜的航電系統應用。
[1]D.C.Sharp,Reducing Avionics Software Cost Through Component Based Product Line Development[C]//Annual Software Technology Conference,1998.
[2]Horváth,á.Varró,D.Schoofs.Model-driven development of ARINC 653 configuration tables[C]//29th IEEE&AIAA Digital Avionics System Conference (DASC),2010,10:5.A.5-1-5.A.5-115.
[3]田丹,霍峰.基于AADL的航電系統建模技術[J].航空計算技術,2010(5):116-118.TIAN Dan,HUO Feng.AADL-based avionics modeling technology[J].Aeronautical Computing Technique,2010(5):116-118.
[4]王博,白曉穎,賀飛,等.可組合嵌入式軟件建模與驗證技術研究綜述[J].軟件學報,2014(2):234-253.WANG Bo,BAI Xiao-ying,HE Fei,et al.Survey on modeling and verification techniques of composable embedded software[J].Journal of Software,2014(2):234-253.
[5]Müller P,Zeidler C.PECOS—Pervasive component systems.Proc.of the Workshop on Open Source Technologie in der Automatisierungstechnik[EB/OL].http://scg.unibe.ch/archive/pecos/public_documents/Muel01a.pdf
[6]何鵬飛,何平,張松陽,等.組件技術在嵌入式系統中的應用[J].計算機系統應用,2014(6):220-223.HE Peng-Fei,HE Ping,ZHANG Song-Yang,et al.Application of component technology in embedded system[J].Computer Systems&Applications,2014(6):220-223.
[7]ARINC Speeifieation 653-3,Avionies Application Software Standard Interface,Part 3 Conformity Test Specification[S].2006.
[8]Dubey A,Karsai G,Kereskenyi R,et al.Areal-time component framework:experience with CCMand ARINC-653[C]//IEEE international symposium on object-oriented real-time,distributed computing,2010.
[9]林卓,吳健,萬豪,等.分布式仿真環境下虛擬試驗對象建模技術研究及應用[J].計算機測量與控制,2012(11):3011-3013.LIN Zhuo,WU Jian,WAN Hao,et al.Research and application on virtual test modeling technology in the environment of distributed simulation[J].Computer Measurement&Control,2012(11):3011-3013.