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