一、方法論與Manifest 01 UML類圖關(guān)系 由于我們將會大量參考AP AUTOSAR元模型,,因此,,我們先根據(jù)上期的內(nèi)容簡單回顧一下UML類圖,UML共有6種類圖關(guān)系:
02 AP 開發(fā)流程 簡單說明一下AP AUTOSAR的開發(fā)流程,,總的來說,,主要包含以下階段:
圖 AP 開發(fā)流程 每個階段都有其輸入以及輸出:
如下圖所示: 圖 AP 開發(fā)流程概覽 根據(jù)AP AUTOSAR方法論,,我們可以得出以下較為詳細的AP AUTOSAR開發(fā)流程。 圖 AP AUTOSAR方法論概覽 上圖中,,我們可以看到有三種Manifest,,由于在基于AP AUTOSAR開發(fā)的時候,Manifest是跟著.exe文件一起運行在ECU上,因此,,我們需要進行相關(guān)的建模,。 先簡單了解一下這三種Manifest 03 Manifest AP AUTOSAR方法論概述圖中提到了3種Manifest:
Manifest是什么? Manifest代表一段AP模型描述,,為了支持AP產(chǎn)品的配置而創(chuàng)建,。 需要注意的是,不是所有的ARXML都會被示為Manifest,。 Machine Manifest是什么,? Machine Manifest描述了與部署相關(guān)的內(nèi)容。 需要注意的是,,Machine Manifest僅適用于運行AP的基礎(chǔ)Machine,。 Execution Manifest是什么? Execution Manifest用于指定在AP上運行的應(yīng)用程序部署相關(guān)的信息,。 Service Instance Manifest是什么,? Service Instance Manifest用于根據(jù)基礎(chǔ)傳輸協(xié)議的要求,指定如何配置面向服務(wù)的通信,。 總的來說,應(yīng)用程序通過使用Manifest中的元數(shù)據(jù),,在運行時集成到AP中,。 Manifest描述了實際功能以及平臺如何使用這些功能。 二,、Application Design 圖 AP AUTOSAR方法論概覽相對來說比較復(fù)雜,,還有一種相對簡單的AP AUTOSAR開發(fā)流程如下圖所示 圖 AP AUTOSAR開發(fā)設(shè)計 可能會有朋友會好奇,為什么有3,、7,、8、10的標(biāo)號在上圖中,? 這是根據(jù)《AUTOSAR_TPS_ManifestSpecification》進行的標(biāo)號,。 上圖中用3是指,在《AUTOSAR_TPS_ManifestSpecification》第3章中的內(nèi)容,。其他類似,。 《AUTOSAR_TPS_ManifestSpecification》中: 第3章是 Application Design 第7章是 Machine Manifest 第8章是 Executed Manifest 第10章是 Service Instance Manifest 我們需要在建模階段進行相應(yīng)的設(shè)計。然后將設(shè)計出的ARXML文件導(dǎo)入Manifest Generator中,,生成 .json文件,。 需要說明的是,生成的文件格式可以跟工具供應(yīng)商進行協(xié)調(diào),,不一定非得是 .json文件,。 接下來,我們基于上圖進行詳細說明。 01 開發(fā)一個服務(wù)接口描述 如下圖所示,,首先我們需要進行服務(wù)接口描述設(shè)計 圖 AP中的服務(wù)接口描述 這也對應(yīng)了AP AUTOSAR方法論中提到的" 開發(fā)一個服務(wù)接口描述 "這個Activity,。 如之前所說,每個Activity都有需要完成的Task,。 而" 開發(fā)一個服務(wù)接口描述 "所要完成的Task如下圖藍色部分所示,。 圖 開發(fā)一個服務(wù)接口描述 對上圖中提到的內(nèi)容進行說明:
在這些Task中,我們至少需要完成以下兩個Task:
我們先來看" Select or define Data Type for AP " 在" Select or define Data Type for AP "中,,我們需要進行ApplicationDataType & CppImplementationDataType的設(shè)計,。至少需要完成CppImplementationDataType的設(shè)計。 那么CppImplementationDataType是什么,? CppImplementationDataType是為支持cpp語言綁定而專門設(shè)計的數(shù)據(jù)類型建模,。 CppImplementationDataType需要做什么設(shè)計? CppImplementationDataType主要包括StdCppImplementationDataType 與 CustomCppImplementationDataType,。 我們以StdCppImplementationDataType為例進行說明,。 什么是StdCppImplementationDataType? StdCppImplementationDataType是為了將cpp語言綁定中,,映射到cpp標(biāo)準庫功能的數(shù)據(jù)類型進行建模,,使用ARXML進行描述。 為什么要進行StdCppImplementationDataType的設(shè)計,? 因為要使用ServiceInterface,,所以需要為ServiceInterface創(chuàng)建StdCppImplementationDataType 。 前面提到,,StdCppImplementationDataType使用ARXML進行建模,。AP AUTOSAR也提供了一個相應(yīng)的文件 《AUTOSAR_MOD_StandardTypes.arxml》,將其打開如下圖所示: 圖 標(biāo)準類型.arxml部分 從上圖中可以看出:encoding是 "UTF-8" 還有一個" AUTOSAR_00048.xsd "的字樣,,這是指AUTOSAR R1911版本,。 還有一個" TYPE-EMITTER ",是用于控制是否會通過ARA生成器生成相應(yīng)的數(shù)據(jù)類型定義,。 接下來,,我們基于一些公開的資料,使用具體的設(shè)計工具(版本是1911)對StdCppImplementationDataType進行設(shè)計如下圖所示: 圖 StdCppImplementationDataType設(shè)計 上圖中,,除了AUTOSAR規(guī)定的StandardType外,,我們也可以自定義一種" VECTOR "類型,。 " VECTOR "類型中的templateType屬性是指: 使用templateType引用定義類別VECTOR的CppImplementationDataType中包含的元素類型。 接下來,,我們看看一下Define Service Interface Service Interface是什么,? Service Interface繼承自PortInterface Service Interface建模目的是什么? 是為了支持面向服務(wù)的通信設(shè)計 Service Interface上存在三種通信方式:
其中Method包含以下兩種:
Field包含以下三種:
需要說明的是,,Service Interface中的Method,、Event、Field與SOME/IP中的Method,、Event,、Field是有所不同的。所進行的配置也不同,。 下圖定義了一個名為:" CMService1 "的Service Interface 并設(shè)置了一個Event,,以及Event上走的數(shù)據(jù)類型。 圖 定義服務(wù)接口 02 開發(fā)軟件組件 接下來,,我們來看" Develop Software ",,如下圖所示: 圖 Develop Software 上圖對應(yīng)的Activity如下圖紅色虛線所示: 圖 Develop Software對應(yīng)的Activity 當(dāng)然,這其中包含應(yīng)用層Application的設(shè)計,,我們這里主要是建模. 因此,,需要進行的是SWC (Software Component, SWC)的建模,Application的開發(fā)先暫時不討論,。 如下圖所示為方法論中對" Develop Adaptive Application Software "這個Activity的描述,。可以看到這其中有一個Task為" Design Software Component for Adaptive Platform " What SWC,? SWC主要作為整體設(shè)計模型而存在。 SWC中有兩個概念需要說明與區(qū)分:
Port類型包含以下三種:
就CP AUTOSAR而言,,有以下Interface類型:
就AP AUTOSAR而言,,有以下Interface類型:
如下圖所示,定義一個SWC,,并設(shè)計相關(guān)的Port類型與Interface類型,。 圖 設(shè)計SWC 根據(jù)開發(fā)流程圖,我們接下來需要進行 " Integrate Software "的開發(fā),。 03 Executable 開發(fā)流程中的" Integrate Software "對應(yīng)的方法論中的Activity也是" Integrate Software ",。 簡單看一下Activity " Integrate Software "如下圖所示: 圖 Activity-" Integrate Software " 從上圖中可以看到,在這其中,,有一個Task為: Build (Adaptive) Executable 由于我們需要編譯Executable,,因此,我們需要在建模階段創(chuàng)建相應(yīng)的Executable,。 這里的Executable主要是指:分級軟件組件的根元素,。 看一下相關(guān)的元模型如下圖所示: 圖 Executable的元模型 從上圖中也可以看到,,Executable的建模目的主要是通過RootSwComponentPrototype.applicationType將SWC與Executable關(guān)聯(lián)起來。 具體的建模如下圖所示: 圖 Executable的創(chuàng)建 需要說明的是,,上述只是創(chuàng)建了Executable,,并沒有完成" Integrate Software "這個Activity所有的Task。 04 ProcessDesign 可能也有朋友發(fā)現(xiàn)了,,在" Integrate Software "之前還需要進行Machine Manifest的設(shè)計,。 由于在進行Machine Manifest設(shè)計期間,需要進行ProcessToMachineMapping的設(shè)計,。 所以,,首先肯定得有Process(Process會在Execution Manifest階段進行設(shè)計)。 而在AP中,,Process需要有一個Proxy實現(xiàn),。這個Proxy是由ProcessDesign實現(xiàn)的。 而ProcessDesign是在Application Design中進行的描述,。 因此,,我們在Application Design階段進行ProcessDesgin的設(shè)計。 請注意區(qū)分Process與ProcessDesign,。 查看一下ProcessDesign相關(guān)的元模型可以發(fā)現(xiàn),,ProcessDesign需要與Executable進行關(guān)聯(lián)。 ProcessDesign的設(shè)計如下圖所示: 圖 ProcessDesign的設(shè)計 這里對Process,、ProcessDesign還有Executable的關(guān)系進行一個說明: 由ProcessDesign引用的任何Executable也應(yīng)由應(yīng)用ProcessDesign的Process引用 至此,,我們就初步完成了《AUTOSAR_TPS_ManifestSpecification》中的 " Application Design "的設(shè)計。 接下來我們來進行第7章,,Machine Manifest的設(shè)計 三,、Machine Manifest 如下圖紅色框所示為開發(fā)流程中對應(yīng)的Machine Manifest的設(shè)計 圖 開發(fā)流程中的Machine Manifest 與Machine Manifest 建模相關(guān)的Activity主要有以下兩個:
01 MachineDesign 先來看第一個Activity。 第一個Activity主要是進行MachineDesign的設(shè)計,,請注意這里是MachineDesign而不是Machine,。 第二個Activity才是對Machine進行設(shè)計等。 MachineDesign是什么,? 通信設(shè)計人員在系統(tǒng)范圍內(nèi)為Adaptive ECU(Machine)定義的一個placeholder(占位符) MachineDesign對應(yīng)于CP中的EcuInstance 通過方法論我們來看一下MachineDesign中有哪些Task,,如下圖藍色部分所示: 圖 Activity-Machine Design 主要包含兩個Task:
我們來看Task " 定義和配置Machine的網(wǎng)絡(luò)連接 "。 根據(jù)相關(guān)的元模型,,我們進行以下設(shè)計: 圖 Machine Design的設(shè)計1 圖 Machine Design的設(shè)計2 接著我們來看第二個Activity " Define Machine " 02 Define Machine 參考方法論,,可以得出在 Activity " Define Machine "中,需要進行的Task,,如下圖藍色部分所示: 圖 Activity - Define Machine Machine是什么,? Machine定義了一個操作系統(tǒng)上運行一個自適應(yīng)AUTOSAR軟件堆棧的實體。Machine可以是物理的也可以是虛擬的,。 Machine的元模型如下圖所示: 圖 Machine元模型 上圖中,,我們看出Machine是會與MachineDesign關(guān)聯(lián)的,。 MachineDesign我們在上一小節(jié)進行了設(shè)計。 除了MachineDesign外,,我們還需要進行moduleInstantiation與functionGroup的設(shè)計,。其中functionGroup是Machine中的一個屬性,指向的是ModeDelarationGroupPrototype,。 ModeDelarationGroup的設(shè)計 由于,,在Machine中有一個屬性為functionGroup。 因此,,我們先進行ModeDelarationGroupPrototype的設(shè)計如下圖所示: 需要注意的是,,各個工具之間的設(shè)計有所不同。會導(dǎo)致不同的界面,,但是底層原理及設(shè)計項是相通的,。 圖 ModeDelarationGroup的設(shè)計 Function Group的設(shè)計 接著我們進行Machine的定義設(shè)計,并將其與MachineDesign進行關(guān)聯(lián),。 同時,,進行Function Group的設(shè)計。 圖 Define Machine moduleInstantiation的設(shè)計 然后我們對moduleInstantiation-OS進行設(shè)計如下圖所示: 圖 moduleInstantiation-OS 至此,,我們便基本完成了Machine與MachineDesign的映射,。以及" Define Function Group "這個Task等。 Map Process To Machine 接著,,我們進行Task " Map Process To Machine "的設(shè)計,。 此設(shè)計是將一個Process鏈接到一個Machine。 先來看一下相關(guān)的元模型,,如下圖所示: 圖 ProcessToMachineMapping元模型 從上圖中,,我們也可以看到,既然是Map Process To Machine,,怎么說我們也得有一個Process,,一個Machine,才能進行映射,。 Machine我們已經(jīng)在 " Define Machine "階段進行了創(chuàng)建。 但是Process我們至今還沒有創(chuàng)建它(注意,,上文中進行了ProcessDesign的創(chuàng)建,,并沒有創(chuàng)建Process)。 Process的設(shè)計一般是在Execution Manifest設(shè)計階段,。 這里,,我們先創(chuàng)建一個Process,先不對其進行設(shè)計,。 然后將創(chuàng)建的Process與Machine進行映射,,如下圖所示: 圖 Map Process To Machine 至此,,我們就完成了最基礎(chǔ)的與Machine Manifest相關(guān)的設(shè)計。 接著,,我們進行Execution Manifest的設(shè)計,。 四、Execution Manifest Execution Manifest相關(guān)的Activity如下圖紅色虛線所示: 圖 Activity-Execution Manifest 參考方法論,,可以看出,,Activity " Create Execution Manifest "中的Task,如下圖藍色部分所示: 圖 Create Execution Manifest 我們一個Task一個Task的看: 01 Define Process Define Process 我先來看一下相關(guān)的元模型: 圖 Process元模型 從上圖中,,可以看到,,在Define Process階段,首先我們肯定要創(chuàng)建一個Process,。 創(chuàng)建Process我們已經(jīng)在Machine Manifest中的 Map Process To Machine階段做過了,。 除此之外,我們需要進行以下設(shè)計:
ProcessState我們在ModeDeclaration中進行了創(chuàng)建,,這里直接進行選擇,,如下圖所示: 圖 ProcessState設(shè)計 02 定義啟動配置 Define Startup Configuration 進行完Define Process之后,我們需要進行StateDependentStartupConfig的設(shè)計,。 在元模型中,,我們也可以看到,StateDependentStartupConfig有一個屬性為Startup Config,,因此,,我們先進行Startup Config的設(shè)計,如下圖所示,。 圖 Startup Config設(shè)計 然后,,我們再來完善我們的StateDependentStartupConfig的設(shè)計: 圖 StateDependentStartupConfig 從上圖中,也能看到,,還有個 " Execution Dependency "需要設(shè)計,。當(dāng)然,這個是可選的,。 我們這里假設(shè)要進行該項的設(shè)計,。具體設(shè)計如下。 03 定義執(zhí)行依賴 Define Execution Dependence 所謂的 " Execution Dependence "是指: 定義一個ProcessState 在該 (Process) State下,,需要啟動一個依賴Process,,然后才能啟動該Process。 我們再創(chuàng)建一個被依賴的Process如下圖所示: 圖 被依賴的Process 因為被依賴的Process也是Process,,因此,,我們?nèi)孕枰M行Process To Machine Mapping的設(shè)計。 圖 被依賴進程到Machine的映射 然后,,我們再返回之前Process的設(shè)計,,完成Execution Dependency的設(shè)計: 圖 Execution Dependency設(shè)計 由于依賴Process要與被依賴Process處于相關(guān)的FGs(功能組)狀態(tài),,因此這里我們需要對與依賴相關(guān)的FunctionGroupState進行設(shè)計: 圖 FunctionGroupState設(shè)計 至此,我們便基本完成了與Execution Manifest相關(guān)的設(shè)計,。 接下來我們看一下Service Instance Manifest相關(guān)的設(shè)計,。 五、Service Instance Manifest 與Service Instance Manifest相關(guān)的Activity如下圖所示: 圖 Activity-Service Instance Manifest 根據(jù)方法論,,我們可以得出下圖中藍色的Task: 圖 與Service Instance相關(guān)的Task 我們還是一個Task,,一個Task的來。 先來看Configure Service Interface Deployment 01 SOME/IP 服務(wù)接口部署 Service Interface Deployment是什么,? 是關(guān)于服務(wù)接口的傳輸層的部署配置的描述,。 Service Interface Deployment共包含以下三種:
這里,我們主要關(guān)心SOME/IP Service Interface Deployment,。 什么是SOME/IP Service Interface Deployment,? 對于SOME/IP而言,Service Interface Deployment定義服務(wù)接口ID,,消息ID和事件組,。 相關(guān)的元模型如下圖所示: 圖 SomeipServiceInterfaceDeployment 首先與我們之前定義的Service Interface進行關(guān)聯(lián),并對ServiceId等信息的配置,,如下圖所示: 圖 ServiceId等配置 由于在一開始的Service Interface中,,我們只對Event進行了設(shè)計,因此這里,,只對EventDeployment進行設(shè)計如下圖所示: 圖 EventDeployment設(shè)計 02 SOME/IP 服務(wù)實例 接下來我們看一下Task: Define and Configure Service Instance Service Instance也包含以下三種:
這里我們主要討論SOME/IP Service Instance,。 至于SOME/IP Service Instance是什么,主要目的是什么,,大家可以參考一下《AUTOSAR_TPS_ManifestSpecification》 在" SOME/IP Service Instance "中,,主要包含以下兩種:
由于我們只設(shè)計了一個PPORT類型的SWC,因此,,這里主要進行ProvidedSomeipServiceInstance的配置,。對于RequiredSomeipServiceInstance可根據(jù)具體需求進行設(shè)計。 ProvidedSomeipServiceInstance相關(guān)的元模型如下圖所示: 圖 ProvidedSomeipServiceInstance元模型 根據(jù)元模型我們也可以看到,,我們需要關(guān)聯(lián)相關(guān)的ServiceInterfaceDeployment,。 同時,還需要進行SdServerConfig的設(shè)計,,如下圖所示: 圖 ProvidedSomeipServiceInstance 設(shè)計 這里,,需要提一下的是,AP中面向服務(wù)的通信采用的是Skeleton和Proxy的設(shè)計,。 對于ProvidedSomeipServiceInstance,相對應(yīng)的是Skeleton,。 對于RequiredSomeipServiceInstance,,相對應(yīng)的是Proxy,。 03 Map服務(wù)實例到Machine 接下來,我們來看Task: Map Service Instance to Machine Map Service Instance to Machine 包含以下三種:
這里,,我們主要關(guān)系SOME/IP Service Instance to Machine Mapping,。 相關(guān)的元模型,如下圖所示: 圖 ServiceInstanceToMachineMapping元模型 SOME/IP Service Instance to Machine Mapping的設(shè)計如下圖所示,,這里選擇我們設(shè)計的Service Instance與Machine: 圖 SOME/IP Service Instance to Machine Mapping 根據(jù)元模型我們得知,,除了上述映射以外,還需要進行CommunicationConnector的關(guān)聯(lián),。如下圖所示,。 圖 關(guān)聯(lián)CommunicationConnector 04 映射服務(wù)實例到Port原型 還有一個Task: Map Service Instance to Port Prototype 為了確保應(yīng)用程序內(nèi)的所有本地服務(wù)實例(由軟件組件端口表示)與網(wǎng)絡(luò)上的服務(wù)實例(例如SOME / IP服務(wù)實例)之間的唯一關(guān)系,需要進行這種映射,。 相關(guān)的元模型如下圖所示: 圖 服務(wù)實例到端口原型映射元模型 相關(guān)的設(shè)計,,如下圖所示: 圖 服務(wù)實例到端口原型映射設(shè)計 至此,我們便完成了三種Manifest的設(shè)計,。 最后我們來看一下集成階段,。 六、集成調(diào)試 由于工具限制,,這里,,我們用一個其他的Demo來作為例子進行說明: 下圖所示為設(shè)計的一個名為Radar的Service Interface 圖 Radar-Service Interface 相應(yīng)的部分ARXML如下圖所示: 圖 Service Interface對應(yīng)的ARXML 生成的.json文件 (部分),如下圖所示: 圖 相應(yīng)的 .json文件 (部分) 相應(yīng)的生成的部分 " Skeleton.h " 與 " Proxy.h "如下圖所示,,(本demo的建模階段設(shè)計了PPort跟RProt,,所以才有" Skeleton.h " 與 " Proxy.h "): 圖 相應(yīng)的部分Skeleton.h 圖 相應(yīng)的部分Proxy.h 簡單書寫一個" Skeleton.cpp "如下圖所示: 圖 簡單的" Skeleton.cpp " 簡單書寫一個" Proxy.cpp "如下圖所示: 圖 簡單的" Proxy.cpp " 最后,我們編譯并調(diào)試,,如下圖所示: 需要注意的是,,這里是有兩個app,一個是發(fā)送數(shù)據(jù),,一個是接收數(shù)據(jù),。 兩個app運行不同的虛擬硬件上。 圖 Demo調(diào)試 |
|