隨著行業(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è)計。 服務(wù)設(shè)計相對軟件架構(gòu)設(shè)計影響較大,接下來著重分析 SOA 服務(wù)設(shè)計。 2. 中央域控架構(gòu)-基于 SOA 服務(wù)設(shè)計為了后續(xù)方便理解,我們大致把國內(nèi)的整車電子電器架構(gòu)分為三個階段:
2.1. 服務(wù)設(shè)計依據(jù)
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)。
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ī)范
2.3.2. Service Instance 服務(wù)實例服務(wù)實例及指代定義的服務(wù)實現(xiàn),后文若單獨寫服務(wù),則意為服務(wù)實例
eg. LedControlSrv 2.3.3. Service Interface 服務(wù)接口SOA 平臺上服務(wù)之間通信接口有 Event、Method 和 Field 三種形式, ServiceInterface 用于定義 Event/Method/Field 消息類型和具體的命名空間,與具體的通信協(xié)議無關(guān)。
eg. LedControlSrvIf 2.3.4. EventEvent 接口表示實際傳輸?shù)臄?shù)據(jù),以數(shù)據(jù)為操作對象,只要能夠清晰的表達數(shù)據(jù)的含義即可,命名規(guī)范遵循基礎(chǔ)規(guī)范,后綴要以 eg. CurrentVleEvt : 電流值 Event 消息傳遞方式如下圖所示,為服務(wù)端主動向客戶端發(fā)送,并且會觸發(fā)客戶端的 callback 函數(shù)進行數(shù)據(jù)處理。 2.3.5. MethodMehtod 接口表示某種控制,通訊方式采用 RPC 遠程調(diào)用,通常有動詞行為,比如控制,狀態(tài)查詢,傳輸,注冊,設(shè)置等。其中 Method 又分為 F&F,與 R&R 兩類,F(xiàn)F 為單次調(diào)用,不需要反饋,RR 為 request resoponse,需要反饋。
整體設(shè)計依據(jù)遵循 CURD/REST 這類成熟的互聯(lián)網(wǎng)通用接口概念 CURD REST 接口名稱需要表達清楚該方法的含義,推薦使用動名詞進行命名,采用駝峰命名規(guī)范,基于如上 CURD/REST 參考,命名要以后綴
eg. setSoundOnMtd : 鳴響喇叭 Method 消息傳遞方式如下圖所示,為客戶端主動向服務(wù)端請求,可以設(shè)定是否有服務(wù)端的返回值。 2.3.6. FieldField 表示一種屬性,通常指狀態(tài)值或某種信息,名稱應(yīng)該清楚的表達該屬性的含義。 Field 包含如下三類信息:
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é)以車身控制器中 需要注意的是,在設(shè)計服務(wù)接口時,要清楚的知道不同接口的實際特性和性能消耗。Event 為 服務(wù)端主動向客戶端 發(fā)送請求,而 Method 恰好相反,為 客戶端主動向服務(wù)端 進行請求調(diào)用。根據(jù)如上接口描述,整體服務(wù)設(shè)計遵循如下方案要點。
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í)行一次即可。
類圖: 時序圖: 3.3. 服務(wù)設(shè)計上一章推導出,所設(shè)計的類就是一個需要實現(xiàn)服務(wù),根據(jù)此原則,在 gitee 中進行服務(wù)設(shè)計。 服務(wù)設(shè)計包含如下步驟和要素:
3.3.1. 數(shù)據(jù)類型設(shè)計在 3.3.2. 服務(wù)接口設(shè)計在 3.3.3. 服務(wù)實例設(shè)計在 3.3.4. 配置文件導出以及代碼框架生成通過 gitee 能夠?qū)С鏊蟹?wù) list 的 csv 文件,基于此開發(fā)工具進行 arxml 文件和代碼框架的轉(zhuǎn)換生成,最終進行基于 SOA 服務(wù)化的軟件開發(fā)。 代碼框架可以參考筆者之前的回答。 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ā)表許可。 |
|