一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

SOA 服務(wù)設(shè)計-傳統(tǒng)車載架構(gòu)的迭代升級

 Kuai2012 2022-05-11 發(fā)布于北京

隨著行業(yè)的 SOA 理念大火,帶著一系列的解讀和思考觀點橫行于世,筆者大多仔細研讀過,雖然增加了很多碎片化知識和曾經(jīng)的盲點,但也同樣帶來了更多的疑惑,本文撰寫初衷是基于車廠的角度思考,如何在現(xiàn)有整車架構(gòu)和軟件資產(chǎn)下,進行 SOA 的設(shè)計開發(fā),并從工具鏈和操作方法上給出案例。

1. 分布式 ECU-基于信號的架構(gòu)設(shè)計

現(xiàn)在我們來看,在域控制器開發(fā)階段,針對傳統(tǒng)車廠,在分布式 ECU,或區(qū)域控制器集成,已經(jīng)有了深厚的架構(gòu)開發(fā)和經(jīng)驗積累的前提條件下,如何轉(zhuǎn)型并進行中央域控的服務(wù)設(shè)計。
本章節(jié)描述現(xiàn)階段,面對分布式 ECU,如何進行基于信號的整車電子電器架構(gòu)開發(fā)。如下為介紹 MBSE 理論的較為經(jīng)典文章。

服務(wù)設(shè)計相對軟件架構(gòu)設(shè)計影響較大,接下來著重分析 SOA 服務(wù)設(shè)計。

2. 中央域控架構(gòu)-基于 SOA 服務(wù)設(shè)計

為了后續(xù)方便理解,我們大致把國內(nèi)的整車電子電器架構(gòu)分為三個階段:

  • 1.0 架構(gòu): 以逆向分析為主,整合現(xiàn)階段市面上供應(yīng)商的零部件,實現(xiàn)整車功能(典型代表 比亞迪 F3)

  • 2.0 架構(gòu): 以正向開發(fā)為主,融合國內(nèi)外先進經(jīng)驗技術(shù),進行整車多車型的架構(gòu)開發(fā)(典型代表 吉利 CMA 架構(gòu))

  • 3.0 架構(gòu):硬件上從分布式 ECU 變?yōu)檎囉蚩丶軜?gòu),軟件上由基于 signal 變?yōu)?SOA ,能夠大幅降低車輛上 ECU 數(shù)量,軟件迭代速度也由質(zhì)的飛躍(典型代表 特斯拉)

2.1. 服務(wù)設(shè)計依據(jù)

  • 總體采用自上而下與自下而上想結(jié)合的形式進行服務(wù)定義。

  • 針對網(wǎng)絡(luò)上全拓補硬件,進行自下而上設(shè)計,將其分為傳感器,執(zhí)行器,與單功能 ECU 三類,分別針對硬件進行設(shè)備抽象 api 設(shè)定,與原子服務(wù)抽象。

  • 針對整車功能定義 FR 與 FDR ,進行自上而下設(shè)計,首先使用面向?qū)ο蟮乃季S進行整車的類抽象,然后設(shè)計類的方法與屬性,其中屬性盡量與 原子服務(wù)進行映射,方法需要使用一個或多個原子服務(wù)進行實現(xiàn)

  • 最終進行原子服務(wù),與整車類的屬性與方法進行映射,找出無法實現(xiàn)的類,以及沒有使用到的原子服務(wù),此部分進行服務(wù)代理設(shè)計,及使用傳統(tǒng) SWC 軟件模塊實現(xiàn)部分功能,然后代理成組合服務(wù)形式,參與整車架構(gòu)設(shè)計。

2.2. SOA 設(shè)計區(qū)別

3.0 架構(gòu)全面采用 SOA(service-oriented Architecture)設(shè)計思想進行構(gòu)建,上一代 2.0 架構(gòu)采用的是 POP(procedure oriented programming)面向過程的設(shè)計思想,需要注意的是,在 SOA 設(shè)計中,自上而下的設(shè)計方法中引入了 OOP(object oriented programming)面向?qū)ο蟮某橄笈c封裝概念,這是為了在 2.0 現(xiàn)有架構(gòu)基礎(chǔ)上,能夠繼承原有 FR,FDR,LC,然后進行迭代開發(fā)。

也就是說通過 Class 的抽象,在原有 LC 一層新添加了類圖的設(shè)計,通過抽象的類進行用例設(shè)計進行功能鏈路實現(xiàn)。后續(xù)進行服務(wù)化設(shè)計,只要滿足類中的屬性和方法能夠?qū)崿F(xiàn)即可,而不必去關(guān)心設(shè)計的服務(wù)如何支撐整個子系統(tǒng)及功能鏈路的實現(xiàn)。

  • POP 面向過程設(shè)計
    在 2.0 架構(gòu)中,首先要進行 Composition 功能組合的劃分,然后在進行 Component 功能組件的劃分,每個組件都有相應(yīng)的輸入和輸出信號,依據(jù)這些來實現(xiàn)高內(nèi)聚,低耦合的功能點實現(xiàn),設(shè)計好組件/組合之后,然后進行模塊間接口信號的設(shè)計,每個模塊平均有 20 個左后的輸入和輸出信號

  • SOA 面向服務(wù)設(shè)計
    在 3.0 架構(gòu)中,首先要進行服務(wù)的劃分和設(shè)計,每個服務(wù)是松耦合的,也就是分治的設(shè)計理念,及服務(wù)里包含的方法、event、field 具備高扇入,合理的扇出,而服務(wù)所抽象的數(shù)據(jù)要與處理的業(yè)務(wù)邏輯、流程、功能實現(xiàn)三方解耦,所設(shè)計的基礎(chǔ)服務(wù)也要與操作系統(tǒng)解耦。對比 2.0 中的設(shè)計,可以類似的理解為 2.0 先設(shè)計軟件模塊,然后設(shè)計信號接口,而 3.0 soa 后先設(shè)計服務(wù)接口(此接口不僅包含類似信號的 event,還包含類似函數(shù)的 method 方法),有了服務(wù)之后,在設(shè)計哪些模塊提供這些服務(wù),哪些模塊訂閱服務(wù)。
    需要注意,SOA 后里的軟件模塊需要嚴格的區(qū)分 server 與 client,也就是一個模塊要不就是提供某個或多個服務(wù),要不就是訂閱了一個或多個服務(wù),不存在既訂閱了一些服務(wù)又提供了一些服務(wù)的情況,這與 2.0 架構(gòu)中的 swc 軟件模塊既有輸入又有輸出完全不一樣。

  • OOP 面向?qū)ο笤O(shè)計
    在 3.0 架構(gòu)中,需要借助面向?qū)ο蟮脑O(shè)計方法來輔助支撐,也就是依托現(xiàn)有 2.0 架構(gòu),不進行大范圍重構(gòu)的前提條件下,使用類抽象出所有 LC 模塊,并且通過設(shè)計不同類的用例圖來實現(xiàn)原 LC 處理的功能。

2.0 架構(gòu)上 MBSE 設(shè)計圖上 LC 映射實現(xiàn)
3.0 架構(gòu)上 MBSE 設(shè)計圖上 LC 映射實現(xiàn)

2.3. 接口命名規(guī)范

在進行 SOA 服務(wù)設(shè)計時,需要遵循如下命名規(guī)范

2.3.1. 基礎(chǔ)規(guī)范

  1. 盡量采用單詞全稱,名稱過長后才使用縮寫

  2. 名稱不包含特殊字符 ,./\~

  3. 名稱如果過長,需要參考常用單詞縮寫表中內(nèi)容進行縮寫

  4. 考慮服務(wù)和參數(shù)的復用性,各類命名中不應(yīng)帶有拓補節(jié)點信息

  5. 不同層級的各類名稱不能重復

  6. 命名中不能使用如下系統(tǒng)關(guān)鍵字:

  • skeleton

  • proxy

  • internal

  • resources

  • method

  • event

  • field

  • input/output

  • amsr

  • ara

  • com

  • someip

  • base

  • vac

  • std

  • serialization

2.3.2. Service Instance 服務(wù)實例

服務(wù)實例及指代定義的服務(wù)實現(xiàn),后文若單獨寫服務(wù),則意為服務(wù)實例

  1. 服務(wù)名采用首字母大寫,全英文名稱

  2. 服務(wù)名不能有下劃線

  3. 服務(wù)名后綴需要以 Srv 結(jié)尾

eg. LedControlSrv

2.3.3. Service Interface 服務(wù)接口

SOA 平臺上服務(wù)之間通信接口有 Event、Method 和 Field 三種形式, ServiceInterface 用于定義 Event/Method/Field 消息類型和具體的命名空間,與具體的通信協(xié)議無關(guān)。

  1. 服務(wù)接口名采用首字母大寫,全英文名稱

  2. 服務(wù)接口名不能有下劃線

  3. 服務(wù)接口名需要以 SrvIf 結(jié)尾

eg. LedControlSrvIf

2.3.4. Event

Event 接口表示實際傳輸?shù)臄?shù)據(jù),以數(shù)據(jù)為操作對象,只要能夠清晰的表達數(shù)據(jù)的含義即可,命名規(guī)范遵循基礎(chǔ)規(guī)范,后綴要以 Evt 結(jié)尾。

eg. CurrentVleEvt : 電流值

Event 消息傳遞方式如下圖所示,為服務(wù)端主動向客戶端發(fā)送,并且會觸發(fā)客戶端的 callback 函數(shù)進行數(shù)據(jù)處理。

2.3.5. Method

Mehtod 接口表示某種控制,通訊方式采用 RPC 遠程調(diào)用,通常有動詞行為,比如控制,狀態(tài)查詢,傳輸,注冊,設(shè)置等。其中 Method 又分為 F&F,與 R&R 兩類,F(xiàn)F 為單次調(diào)用,不需要反饋,RR 為 request resoponse,需要反饋。

  • 請求-響應(yīng)(request/response): R&R

  • 請求-響應(yīng)流(request/stream)

  • 發(fā)后不管(fire-and-forget) : F&F

  • 通道模式(channel)

整體設(shè)計依據(jù)遵循 CURD/REST 這類成熟的互聯(lián)網(wǎng)通用接口概念

CURD

REST

接口名稱需要表達清楚該方法的含義,推薦使用動名詞進行命名,采用駝峰命名規(guī)范,基于如上 CURD/REST 參考,命名要以后綴 Mtd 作為結(jié)束,設(shè)計如下基礎(chǔ)命名范式:

  1. get 獲取狀態(tài)

  2. set 設(shè)置狀態(tài)

  3. report 傳遞信息

  4. judge 判斷事件,返回 boolean

  5. create 創(chuàng)建線程/進程/動態(tài)服務(wù)/文件/事件 等

  6. delete 刪除線程/進程/文件 等

eg.

setSoundOnMtd : 鳴響喇叭
judgeVehMovingMtd : 判斷車輛是否移動
getCarCfgMtd : 獲取 car config 值
reportComponentStsMtd : 上報 component 狀態(tài)信息
createXTaskUsrLightShowSrvMtd : 創(chuàng)建用戶自定義的燈光 show 服務(wù)
deleteDebugClass0MsgMtd : 刪除 debug 等級為 0 的所有 msg 調(diào)試文件

Method 消息傳遞方式如下圖所示,為客戶端主動向服務(wù)端請求,可以設(shè)定是否有服務(wù)端的返回值。

2.3.6. Field

Field 表示一種屬性,通常指狀態(tài)值或某種信息,名稱應(yīng)該清楚的表達該屬性的含義。

Field 包含如下三類信息:

  • getter : 只讀接口,原型為 method,獲取服務(wù)端信息

  • notifier : 只讀接口,原型為 event,接收服務(wù)端的數(shù)據(jù)

  • setter : 寫入接口,原型為 method,設(shè)置/修改服務(wù)端相關(guān)信息

eg. VehMoveFld : 車輛移動控制

Field 消息傳遞方式如下圖所示

3. 服務(wù)設(shè)計方法

針對大部分 OEM,需要在現(xiàn)有整車架構(gòu)上進行服務(wù)設(shè)計升級,也就是已有 base 的 LC 需求,和工程級的軟件 swc,需要依據(jù)這兩類已有資產(chǎn),使用 OOP 面向?qū)ο蟮某橄笈c封裝手段,進行 SOA 服務(wù)化重構(gòu)。

本章節(jié)以車身控制器中 危險報警 軟件模塊為例,說明如何在已有 LC 需求和軟件模塊前提下,使用 gitee,進行 SOA 設(shè)計。

需要注意的是,在設(shè)計服務(wù)接口時,要清楚的知道不同接口的實際特性和性能消耗。Event 為 服務(wù)端主動向客戶端 發(fā)送請求,而 Method 恰好相反,為 客戶端主動向服務(wù)端 進行請求調(diào)用。根據(jù)如上接口描述,整體服務(wù)設(shè)計遵循如下方案要點。

  • 原 2.0 平臺中信號盡量保留,作為 Event 接口類型進行預留

  • 服務(wù)設(shè)計包括 類抽象-服務(wù)接口設(shè)計-服務(wù)實例設(shè)計-設(shè)計具體的進程/線程 運行此服務(wù)實例

  • 每個抽象好的類,對應(yīng)一個服務(wù)接口 : XX_Class -> XX_SrvIf

    • 類中的屬性對應(yīng) Event 接口類型 XX_Class::value -> XX_SrvIf-valueEvt

    • 類中的方法對應(yīng) Method 接口類型 XX_Class::fuction -> XX_SrvIf-valueMtd

    • 盡量不要設(shè)計 Field 接口

  • 每個服務(wù)接口由一個具體的服務(wù)進行實例化 : XX_SrvIf -> XX_Srv

  • 每個實例化的服務(wù),都要設(shè)計哪個進程/線程/軟件模塊/ECU 來提供,哪些 App 會訂閱

  • App 使用/設(shè)定服務(wù)里的數(shù)據(jù)/功能,需要通過 CM 通訊管理進行服務(wù)的訂閱

  • 實例化的服務(wù)之間,數(shù)據(jù)/功能 傳遞,則直接調(diào)用相互暴露的 api,可以不用 CM 參與(即組合服務(wù)和原子服務(wù)的關(guān)系)

  • App 之間不能直接進行數(shù)據(jù)傳輸,需要調(diào)用專有的服務(wù)進行數(shù)據(jù)傳遞(即服務(wù)代理模塊)

3.1. 需求分析

示例軟件模塊主要實現(xiàn)危險警報功能,在整車條件允許的情況下,如果按下手機 app 上的警報按鈕,則會觸發(fā)車輛進行聲光報警。

需要注意 針對 VFC/PNC 相關(guān)軟件邏輯,雖然在 3.0 架構(gòu)上已經(jīng)不復存在,但是需要保留功能分區(qū)劃域的思想,也就是針對不同場景需要觸發(fā)不同的軟件組件來執(zhí)行完成,針對不同的 PNC,在 3.0 架構(gòu)上可以作為 VLAN 劃分的設(shè)計參考。

使用 gitee 進行需求編寫,與原 LC 中需求進行追溯

3.2. 類的抽象和封裝

使用 OOP 手段,根據(jù)需求和已有的軟件模塊,進行類的抽象,并將有可能被多次調(diào)用的軟件邏輯進行類方法的封裝,后續(xù)多次執(zhí)行的代碼邏輯,僅在實例化的類中執(zhí)行一次即可。

  • 類抽象,將整車從多個角度抽象成不同的類,每個類都可以映射成一個 service 的實體,不同的軟件模塊調(diào)用相同邏輯時,可以直接訂閱此 service,使用 service 中的 method、event、field。

  • 類方法封裝,將接口進行泛化,封裝成通用類的方法,達到松耦合的效果

類圖:

時序圖:

3.3. 服務(wù)設(shè)計

上一章推導出,所設(shè)計的類就是一個需要實現(xiàn)服務(wù),根據(jù)此原則,在 gitee 中進行服務(wù)設(shè)計。

服務(wù)設(shè)計包含如下步驟和要素:

  1. 服務(wù)接口設(shè)計(method/event/field)

  2. 接口變量設(shè)計(method 的入?yún)⒊鰠⒓皵?shù)據(jù)類型,event 變量名及數(shù)據(jù)類型)

  3. 服務(wù)實例設(shè)計(發(fā)布者,服務(wù) ID 等信息)

3.3.1. 數(shù)據(jù)類型設(shè)計

在 Gitee-數(shù)據(jù)類型 中進行數(shù)據(jù)類型設(shè)計

3.3.2. 服務(wù)接口設(shè)計

在 Gitee-Service 接口 中進行 service 接口設(shè)計

3.3.3. 服務(wù)實例設(shè)計

在 Gitee-Service 實例 中進行服務(wù)實例設(shè)計

3.3.4. 配置文件導出以及代碼框架生成

通過 gitee 能夠?qū)С鏊蟹?wù) list 的 csv 文件,基于此開發(fā)工具進行 arxml 文件和代碼框架的轉(zhuǎn)換生成,最終進行基于 SOA 服務(wù)化的軟件開發(fā)。

代碼框架可以參考筆者之前的回答。

C++大型項目怎么管理依賴?43 贊同 · 2 評論回答

4. 小結(jié)

針對已有歷史軟件資產(chǎn)的廠商,進行 SOA 架構(gòu)升級的方法大致如上,此處借用了 gitee 企業(yè)版輔助進行架構(gòu)設(shè)計,也希望大家意識到,軟件定義汽車,不僅僅是軟件產(chǎn)品,甚至整車研發(fā)的工具鏈和開發(fā)流程也都會慢慢靠向軟件開發(fā)的生態(tài)工具鏈,抱殘守缺,是注定要被時代淘汰的,此處諾基亞和柯達會深有感觸。

最后附上最新的 SDV 工作組,標準服務(wù)的定義文檔,去年開始,我們國內(nèi)的汽車行業(yè)也有了屬于自己的技術(shù)標準組織,SDV-軟件定義汽車工作組,負責標準化車輛的服務(wù)接口名稱;AutoSEMO 中國車輛基礎(chǔ)軟件協(xié)會,負責標準化 SOA 架構(gòu)下的中間件開發(fā)規(guī)范。所以,AutoSAR 的生與死在未來是個值得思考的問題。

版權(quán)聲明:本文為知乎「Tomato」的原創(chuàng)文章,已獲作者發(fā)表許可。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    台湾综合熟女一区二区| 夫妻性生活动态图视频| 国产精品久久女同磨豆腐| 久久精品亚洲欧美日韩| 亚洲中文字幕三区四区| 欧美人与动牲交a精品| 国产一区二区三区午夜精品| 亚洲精品一二三区不卡| 亚洲精品熟女国产多毛| 亚洲少妇一区二区三区懂色| 成年人免费看国产视频| 国产精品成人一区二区在线| 亚洲综合一区二区三区在线| 日本 一区二区 在线| 日本一区二区三区久久娇喘| 亚洲国产精品无遮挡羞羞| 国产成人在线一区二区三区| 免费在线播放一区二区| 亚洲一区二区亚洲日本| 欧美日韩亚洲精品内裤| 91精品国自产拍老熟女露脸| 久久亚洲精品成人国产| 日韩欧美中文字幕人妻| 真实国产乱子伦对白视频不卡| 欧美尤物在线视频91| 国产日韩精品激情在线观看| 亚洲av专区在线观看| 欧美精品在线观看国产| 日韩午夜福利高清在线观看| 欧美大黄片在线免费观看| 国产欧美日韩不卡在线视频| 精品久久综合日本欧美| 亚洲中文字幕高清乱码毛片 | 在线观看中文字幕91| 邻居人妻人公侵犯人妻视频| 九九视频通过这里有精品| 日本淫片一区二区三区| 国产精品香蕉在线的人| 欧美人禽色视频免费看| 国内外免费在线激情视频| 亚洲中文字幕熟女丝袜久久|