|
蘇州培訓嵌入式_基于ARINC 653標準的嵌入式構件元,
摘要:為了提高航電軟件系統(tǒng)的設計和開發(fā)效率,文章利用構件化技術提出了一種適用于ARINC 653標準的嵌入式構件元模型ECOM,闡述了構件模型間的交互、構件的組合并定義了從構件模型到標準C++代碼框架的映射規(guī)則。最后給出了一個構件模型到C++代碼框架的映射實例。
新一代航電系統(tǒng)正朝著高度綜合化、模塊化和系統(tǒng)高度容錯等方向不斷發(fā)展與完善,隨之也帶來航電軟件系統(tǒng)的設計與開發(fā)的工作量變大、難度變高、開發(fā)周期和成本難以控制等問題。急需得到新方法和技術來支持航電軟件系統(tǒng)的設計與開發(fā)。
目前,基于AADL(Architecture Analvsis and Design Language)的航電系統(tǒng)建模技術和嵌入式構件化方法是最受重視的方法和技術;贏ADL的建模技術主要解決航電系統(tǒng)所面臨的空間/時間確定性、測試與驗證等問題,從而提高航電系統(tǒng)軟件的可靠性,降低系統(tǒng)開發(fā)及驗證成本。但是,由于目前AADL的語法、語義及擴展(Annex)機制等仍在發(fā)展與完善中,而且AADL十分復雜,它涉及的計算機理論較深,領域工程師和設計人員難以在較短時間內(nèi)熟練掌握,因而難以短時間內(nèi)推廣。而嵌入式構件化技術是基于面向?qū)ο螅∣b iect Oriented,OO)技術上的更高級抽象,它把已存在的嵌入式構件組裝到正在開發(fā)的嵌入式軟件系統(tǒng)框架結構中,從而提高軟件開發(fā)效率、降低軟件開發(fā)成本且經(jīng)過多年的發(fā)展已經(jīng)在相關領域應用實施,目前已相對成熟。所以文章擬通過嵌入式構件化的方法來解決航電系統(tǒng)目前亟待解決的問題。
嵌入式構件模型是基于構件化開發(fā)的前提,它規(guī)范了嵌入式構件必須遵循與其他構件實現(xiàn)正常交互的標準和習慣。目前比較成熟的嵌入式構件模型有飛利浦公司用于消費電子產(chǎn)品的Koala、ABB公司用于現(xiàn)場總線技術的PECOS以及比利時IWT協(xié)會贊助SEESCOA項目的CCOM模型同等等。但是,這些嵌入式構件模型均是針對各自專業(yè)領域所作出的設計,通過對這些模型的分析,發(fā)現(xiàn)它們并不支持航電軟件系統(tǒng)所廣泛采用的接口規(guī)范ARINC 653標準。Vanderbilt University通過對CORBA構件模型(Cobar Component Model,CCM)進行裁剪和修改,提出了適用于ARINC 653標準的ACM嵌入式構件,但是該構件模型支持跨分區(qū)間的方法調(diào)用,在運行過程可能由于分區(qū)間方法的調(diào)用造成分區(qū)間的相互影響,而這與ARINC 653標準所強調(diào)的時空分區(qū)不相符。通過對ARINC 653標準的研究提出了適用于ARINC 653的嵌入式構件元模型ECOM。
1 符合ARINC653的嵌入式構件模型ECOM
通過對ARINC 653標準進行分析,總結出符合ARINC653標準的構件必須滿足以下4個條件:
1)構件必須滿足實時性能的規(guī)定,因為ARINC 653是強實時系統(tǒng);
2)構件必須有良好的交互語義,使其能夠從底層的構件裝配分析系統(tǒng)的屬性;
3)構件必須支持靜態(tài)內(nèi)存分配,因為在ARINC 653中必須事先知道所有可能的任務以確保它們可以被調(diào)度;
4)構件的部署必須滿足ARINC 653標準規(guī)定的時空分區(qū)的要求。
針對上述條件提出了符合ARINC 653標準的嵌入式構件模型ECOM,首先采用UML擴展機制定義了構件元模型,它是一個可視化、易讀的模型,但其所表達的構件模型的語法并不嚴密,文章采用構件描述語言(Component Description Language,CDL)對ECOM構件模型的標準化描述,采用前后文無關文法(CFG),并使用巴思諾范式(BNF)進行描述,為下一步ECOM構件模型的重用和組合提供幫助。由于文章主題及篇幅的原因,在文章中并不詳細闡述關于CDL語法等相關信息。下文主要從ECOM構件元模型、構件交互和構件組合3個方面對其進行描述。
1.1 ECOM構件元模型
ECOM構件元模型如圖1所示,采用UML擴展機制定義了元模型的所有元素及其相互關系。圖中的每個概念在CDL中都有對應的關鍵字。
ECOM構件元模型的核心部件是構件(Component),其次是具有結構化數(shù)據(jù)特點的構件觸發(fā)器(Tigger)、屬性(ComAtttibute)、接口(Interface)、端口(Port)和構件參數(shù)(Com Parameter),其他輔助的元對象還有操作(Operation)、結構體(Struct)、聯(lián)合體(Union)、枚舉類型(Enumeration)、基本數(shù)據(jù)類型(Fundamental Types)。下面詳細介紹結構化數(shù)據(jù)特點的元模型部件。
構件:它是元模型所要描述的核心部件。構件中可以包含零個或多個構件參數(shù)、零個或多個構件屬性、零個或多個接口、零個或多個端口Port。構件中所包含的接口分為向構件外部提供服務的接口(Provide接口)和需要外部其它構件提供服務的接口(Require接口);所包含的端口分為向外部發(fā)布數(shù)據(jù)的端口(Publish端口)和接收其它構件所發(fā)布的數(shù)據(jù)的端口(Consume端口)。
構件觸發(fā)器:是指構件中可以被周期性觸發(fā)的內(nèi)部方法。它可以是由時鐘觸發(fā)也可以由一個事件來觸發(fā)這個內(nèi)部方法,而且必須有一個有限的、非零的周期。本文提出的構件模型通過在模型中加入構件觸發(fā)器并通過設置構件觸發(fā)器及其配置屬性來使構件滿足系統(tǒng)要求的實時性能。例如加入周期、截止時間、構件執(zhí)行的的前置條件和后置條件等來判斷構件的執(zhí)行與否以及故障反饋等。
構件屬性:是指構件自身的狀態(tài)。構件狀態(tài)是由其自身的屬性值反映的,可以外部觀察到。狀態(tài)的設置只能由構件自身進行,外部不得設置其狀態(tài),只能通過調(diào)用構件關于屬性的get方法獲取構件的狀態(tài)。
接口:獨立于構件之外定義,使接口的定義可以在不同的構件中復用。每一個構件定義必須說明自己對外提供哪些provide接口,以及需要外部提供哪些require接口。接口只有本地接口一種,即只能向同一分區(qū)中的構件提供方法調(diào)用服務。
端口:是指數(shù)據(jù)端口,用于在構件間進行數(shù)據(jù)或事件的通信。它也獨立于構件之外定義,每一個構件定義必須說明自己對外提供哪些publish端口,以及需要外部提供哪些consumer端口。端口定義關聯(lián)一個已定義的數(shù)據(jù)類型,比如可以是一個枚舉、結構、或者聯(lián)合體。端口定義為本地或遠程端口,本地端口僅能為同一分區(qū)內(nèi)的各構件進行數(shù)據(jù)通信,而遠程端口則可以跨分區(qū)甚至跨CPU進行通信。
構件參數(shù):用于在初始化過程中配置屬性信息,用于控制構件的工作模式。由于ARINC 653中的時空分區(qū),構件部署必須是靜態(tài)內(nèi)存分配,且不允許動態(tài)的分配內(nèi)存,所以一旦在初始化過程中設置構件的屬性則在該構件的生命周期中保持不變。
1.2 構件交互
由于ARINC 653規(guī)范所要求分區(qū)間空間的隔離,在分區(qū)間和分區(qū)內(nèi)所采用的通信機制并不相同,所以定義ECOM構件間交互為遠程交互和本地交互。遠程交互負責分區(qū)間構件的交互而本地交互負責同一分區(qū)內(nèi)構件的交互。
遠程交互:構件間只能通過端口進行交互,實現(xiàn)分區(qū)間進程的通信。端口交互屬于異步交互,一個consumer端口只能連接一個publish端口,但一個publish端口可被連接到多個consumer端口。publish端口和consumer端口之間的消息類型需要嚴格的事件類型匹配。在ECOM構件模型中,publish端口和consumer端口都分為周期性和非周期性,因此在構件的定義過程中應注意端口數(shù)據(jù)有效性,即數(shù)據(jù)停留在端口的時間小于用戶設置的數(shù)據(jù)刷新周期時間。
本地交互:構件間不僅能夠通過上述的端口通信實現(xiàn)分區(qū)內(nèi)進程間的通信,而且能夠通過接口方法調(diào)用實現(xiàn)進程間的同步。接口交互屬于同步交互,即采用調(diào)用-返回語義,但是接口可以由關鍵字oneway指明其是單向的,即調(diào)用者調(diào)用該接口時,不必等待其返回結果,也可實現(xiàn)異步接口調(diào)用。一個require接口只能關聯(lián)一個provide接口。一個prov ide接口可以關聯(lián)多個require接口。由于這些交互的同步特性,調(diào)用者require接口中的方法的截止期必須大于被調(diào)用者的provide接口中方法的截止期限。
需要注意的是,雖然遠程交互和本地交互均采用了端口交互,但是在交互的實現(xiàn)過程中遠程交互依賴APEX中的分區(qū)間通訊接口實現(xiàn),而本地端口則采用APEX分區(qū)內(nèi)通訊接口實現(xiàn)。嵌入式項目移植, 嵌入式常用編程語言, 嵌入式項目實戰(zhàn)開發(fā), 嵌入式和智能硬件, 嵌入式aoe, 睿易嵌入式路由器, 武漢嵌入式養(yǎng)老模式, 室內(nèi)地面嵌入式儲物, 嵌入式養(yǎng)老法律, 簡單的嵌入式小作品, ni嵌入式檢測系統(tǒng), 嵌入式組件產(chǎn)品, 瑞聲科技嵌入式面試, 嵌入式磚塊背景墻, 嵌入式控制算法實現(xiàn), 常熟理工嵌入式, 嵌入式外設初始化, 嵌入式qt界面設計, 嵌入式向量叉乘, 嵌入式編程提高, 硬件嵌入式郵件服務器, 啥是嵌入式培養(yǎng),
1.3 構件組合
根據(jù)ARINC 653系統(tǒng)所要求的應用軟件分區(qū)部署提出將構件的組合分為3類。
1)子構件:構件內(nèi)部不包含其他構件的構件;
2)分區(qū)內(nèi)組合構件:在ARINC 653系統(tǒng)中同一分區(qū)內(nèi)部,由多個構件通過本地端口和接口組裝而成的構件,使多個功能簡單的構件構成一個功能更為復雜的構件;
3)系統(tǒng)構件:在ARINC 653系統(tǒng)中不同分區(qū),各分區(qū)內(nèi)組合構件通過構件容器端口組合成的一個完整的軟件系統(tǒng)。
該系統(tǒng)構件是閉合的,所以該系統(tǒng)構件中的所有為其他構件提供數(shù)據(jù)端口必須綁定到其實現(xiàn)上,而需要其他構件提供數(shù)據(jù)的端口必須注意其數(shù)據(jù)類型的匹配。圖2描述了構件層次及其端口連接。其中端口和接口的實心代表本地端接口,空心代表遠程端口。
構件組合的原則是:
1)在復合構件中提供的端口與接口是由其子構件的遠程端口和遠程接口提供的,復合構件本身盡量避免提供在子構件沒有的端口和接口;
2)復合構件內(nèi)部構件的交互如果是分區(qū)內(nèi)構件交互通過本地端口或本地接口直接交互;
3)復合構件內(nèi)部構件的交互如果是不同分區(qū)構件的交互,則必須通過構件容器所提供的端口進行交互。
2 CDL/標準C++框架代碼的生成
將上文定義的ECOM構件模型利用CDL語言進行描述并將其映射成能夠運行在ARINC 653系統(tǒng)的C++應用成為驗證ECOM構件元模型正確性和可用性的重要標準,同時也是采用構件化開發(fā)航電系統(tǒng)軟件的關鍵點之一。目前,為提高效率、降低難度,采用Windows平臺下Vxworks 653仿真系統(tǒng)對模型的正確性等進行驗證,開發(fā)環(huán)境為VS2010。將構件模型的CDL文件經(jīng)CDL編譯器編譯映射為C++框架代碼,構件實現(xiàn)人員只需添加構件的業(yè)務邏輯處理代碼就可編譯運行在仿真系統(tǒng)中。
標準C++中存在操作、結構體、聯(lián)合體以及基本數(shù)據(jù)類型的關鍵字,所以只需將CDL中的這些元素的關鍵字直接映射為C++中的關鍵字即可,在此并不詳述。文章列舉了ECOM構件關鍵元素的CDL文法到標準C++代碼框架映射規(guī)則。
規(guī)則1:CDL中的每一個構件類型映射為C++中的一個頭文件和一個CPP文件。一個構件(Compent)映射的C++的一個class,在相應的頭文件中存放所映射的C++類的申明,其中聲明部分包括構件參數(shù)、構件屬性、端口以及接口的聲明。在CPP文件中,放置該類中相關方法的實現(xiàn)代碼;
規(guī)則2:CDL中每一個端口類型(Port)映射為C++的一個頭文件,將CDL該類型的一個端口映射為該頭文件中的一個class,該類包含protect數(shù)據(jù)成員,用于記錄端口所要求的數(shù)據(jù)結構,同時也是要發(fā)布數(shù)據(jù)的緩沖區(qū)。在實現(xiàn)該端口的cpp文件中,若端口為本地端口,調(diào)用APEX中的分區(qū)內(nèi)通訊接口,否則,調(diào)用APEX中分區(qū)間通訊接口實現(xiàn)。
規(guī)則3:CDL的每一個接口類型(Interface)映射為C++的一個頭文件,將CDL該類型的一個接口映射為C++頭文件中的一個class,其中接口中的操作(Operation)映射為類中pu blic的純虛函數(shù)。在實現(xiàn)該端口的cpp文件中,調(diào)用APEX中的分區(qū)內(nèi)通訊接口。
規(guī)則4:CDL構件的參數(shù)(ComParamater)和屬性(ComAttribute)由于均只能是基本數(shù)據(jù)類型或枚舉類型,對構、件中的每個參數(shù)或?qū)傩詫⑺鼈冇成錇镃++中對應的基本類型或枚舉類型,并自動生成對應的set()和get()方法對其進行設定和讀取。
規(guī)則5:CDL構件的觸發(fā)器(Tigger)映射為C++的一個頭文件,將CDL該類型映射為C++頭文件的一個class,其中的方法映射為類中public的純虛函數(shù)。在實現(xiàn)該方法中,調(diào)用APEX中時間管理接口來實現(xiàn)。
3 應用實例
以一個簡化的導航系統(tǒng)為例,介紹ECOM構件模型及其自動生成標準C++代碼框架的具體實現(xiàn)。
首先,為導航系統(tǒng)構件模型定義名為Navigation.cdl的文本文件,描述GPS構件模型經(jīng)傳感器構件獲取實時數(shù)據(jù),加工處理傳遞給導航構件處理的功能,其CDL定義如圖3左部構件模型CDL描述所示,根據(jù)映射規(guī)則,將CDL文件中結構體、端口以及接口映射到名為DataType的文件中,將Sensor、GPS、NaviDIsply三個構件模型映射分別映射到以其命名的文件中,Navigation.cdl文件經(jīng)編譯后自動生成如下的代碼框架,如圖3右部給出了GPS構件的CDL描述映射為C++代碼。
4 結論
文章利用構件化思想提出了一個適用于ARINC 653的構件元模型ECOM,并設計其交互規(guī)范及構件間的組合,通過將構件模型轉(zhuǎn)化為C++代碼框架并運行在仿真環(huán)境下,驗證了構件模型的正確性,使構件開發(fā)人能夠?qū)W⒂跇嫾䞍?nèi)部的邏輯實現(xiàn),提高了開發(fā)效率,降低了開發(fā)難度。在后續(xù)的工作中,還將研究在構件模型實例化時確定構件的實時特性,以滿足構件開發(fā)人員靈活的定義航電系統(tǒng)應用軟件的實時性要求,以及研究利用WorkBench工具使用ECOM構件在VxWorks653系統(tǒng)上開發(fā)出更加實際和復雜的航電系統(tǒng)應用。 |
|