前言
01
近兩年牽頭參與了多個,基于SOA的全新架構項目。在和客戶一起開展項目的過程中,也遇到了很多共性的問題。所以想借這個機會,和大家分享一下,希望對大家有所啟發。有錯誤,不恰當的地方,歡迎大家指正。
開發過程中的痛點
02
近年來,由于汽車電子電氣架構的快速迭代,很多主機廠都處于新老架構交替的重要時期,搭建一個全新的架構,對于任何團隊都將是一個不小的挑戰。任何新生事物的出現,都是對傳統的革命,我們需要抱著積極的心態,至少在一定程度上打破原有的思維和框架,從而建立新的秩序。
在SOA架構設計項目中,無論是和主機廠,或是我們團隊內部,都對項目開展了多次復盤總結,大概得出了下圖中的這些共性問題。包括:“職責邊界”,“傳統和變革共存”,“服務是什么”......
這些問題需要從宏觀上,或者從思維意識上,給予特別的重視。今天我們就——“職責邊界”,來重點聊一聊。
我們知道,汽車電子電氣是個異常復雜的系統,不可能由一個人,一個組織來完成。所以站在主機廠角度,梳理出正確的事情,然后把他們交給正確的組織來做,就顯得異常重要。
當然這也涉及到公司的業務策略,對未來的定位,比如公司是否致力于主導打造完整的生態鏈,還是掌握核心的軟件,還是僅僅專注于市場需求的理解及實現,等等。
無論如何,宏觀的職責分工在一開始就需要規劃清楚,否則所有的工作是沒法有效開展的,就算開展了,也會逐步偏離初衷,變得難以控制。
職責定義
03
在我們討論職責邊界之前,應該先清晰一個問題,“職責由何而來?”,只有清楚了職責的由來,才能梳理出職責的準確定義,并進一步明確職責的邊界。
為了得到答案,先讓我們回到最初的起點,看看我們對車輛的定義是怎樣的。車輛是僅僅作為交通工具,還是發展成為所謂的第三生活空間?無論是哪種發展方向,有一點是肯定的:車輛都是為人來服務的。
從下圖中,我們可以看到車輛使用時的三個要素:環境,車輛和用戶。車輛需要感知環境,來滿足用戶的需求。從這點來看,也能說明為什么把整個車輛作為系統的邊界來定義用戶需求。(環境和用戶在這里都是廣義的,我們就不展開了。)
接下來我們撥開車輛的外殼,進到車輛的內部,來看下車輛是如何感知環境來滿足用戶需求的。這個層級已經屬于解決方案了,核心元素是傳感器,ECU和執行器。
從上圖中,我們可以看到,環境中的一切物理表象,通過傳感器轉化為對應的電信號,然后這些模擬電信號,傳輸到在ECU內部,轉化為數字信號。然后在軟件世界進行溝通,計算和分析,之后將控制指令轉化為模擬信號。模擬信號傳遞到執行器,執行器遵照這些指令,結合自身的物理特性,執行器完成功能在物理世界的最終實現。這個層級看得見摸得著,傳統的零部件供應商基本也是按照這個職責來劃分。
對于傳感器和執行器,目前的現狀和趨勢是各家的技術和方案逐漸趨同,以后應該是向標準化的方向發展了。當然這些不是我們今天討論的范圍,ECU才是我們今天討論的重點。我們可以看到ECU在感知環境和滿足用戶的過程中起到了關鍵的分析與控制的角色,所以ECU才是滿足車輛定義的核心元素。由此,也回答了我們之前的問題,當我們討論架構開發中的職責,其實本質是溯源到ECU所承擔的職責。
接下來我們再撥開ECU的外殼,到ECU內部來看看。這里我們提到的ECU是個泛化概念,對于用戶,不太在乎是1個ECU還是100個ECU實現了他們所期望的功能。但是從架構的角度,我們需要評估需要有哪些ECU,這些ECU分別承擔什么職責是最優化的。
我們詳細來看看ECU可能承擔的職責,這里將忽略ECU的中間件,應用層,操作系統......這些是用以 “實現” ECU職責的部件,但我們今天單講 “職責”,不講 “實現”。
在下圖中,我們根據不同的職責,將ECU分成多個軟件層級。
最底層的是Device (S&A) abstraction,這里是指傳感器,執行器這些物理部件的抽象。
當我們和其他人進行溝通,或者協作時,首先要保證有同樣的語言。如果都不能理解對方說了什么,好的溝通結果根本無從保證。
這里的Device (S&A) Abstraction其實就是這個作用,他們是在軟件世界里對實際物理設備的抽象,或者說翻譯。
除了Device (S&A) abstraction以外,其他的每一層都發揮著獨有的作用,為了更好的理解ECU每一層所承擔的職責,我們可以將他與人體機能進行類比,如下圖所示:
Device (S&A) abstraction:
這個最底層的作用就相當于人的雙手,雙腳,是最終接觸這個世界的對象。
Device (S&A) control:
這層就是對Device的控制,比如對天窗電機的控制,開還是關等等,類似于人手部的肌肉,控制手的活動。
Gateway of communication:
這層主要是通訊的樞紐,類似于人的關節,連接身體的各個部位。
Domain/zone level control:
這層是功能域控制,是對控制之間的協調。比如為了保證車身的穩定,需要考慮如何協調制動控制和轉向控制。類似于神經系統,如何協調手腳,來保持身體平衡。
Cross-domain/vehicle scope control:
這層就是整車范圍內的規劃。比如所謂的場景定義汽車,基于場景來進行整車范圍內的規劃。這類似于人的大腦,處理一個項目,考慮要做哪些事情,前后次序是什么等等。
這個層級架構,從下往上,層級越高,處理的事務就越復雜,就越需要規劃和計算,層級越低,越簡單,只需要條件反射。這和人,也是一樣的。
在了解了ECU可能承擔的職責以后,接下來我們來看看,架構在演變過程中ECU的職責是怎么變化的。
分布式架構
首先是最傳統的分布式架構,ECU承擔了設備抽象和設備控制的職責,每個ECU基本上是各司其職,盡可能不打擾對方。這個架構里,人承擔了總體規劃,思考分析,及車輛行為的協調的職責。
域(Domain)控架構
接下來是功能域架構,在原來的基礎上增加了功能域控制器,來承擔域內的協調及域間的溝通。
區域控制+中央計算架構
最后,就升級為區域控制+中央計算的架構,在這個架構中,人大腦的職責也要被取代了。到這一步,車輛將真正發展成為數據世界中的一環。
因為每個公司或多或少都有遺留的資產或者負擔,包括基于原有架構的打造的,車型,組織架構,流程和工具,原有的零部件和供應鏈體系等等。另外,支持新架構的產品體系還沒有完全打通,尤其是在性能,功能安全等方面,所以這個架構還處于,傳統控制器和新架構控制器同時存在的中間狀態,各自的職責還在不斷的發生演進,這背后會有不同的力量在推動。
接下來,我們聊下為什么要分層?
這和我們對架構的理解,以及供應商合作方式都有很大的關系。
我們暫且以ECU這個顆粒度來舉例。在上圖中,如果把一個ECU和另一個ECU的交互定義為一個復雜度,那么左邊這平級架構中的每個ECU因為自身功能,需要溝通的話,都將有3個可能的復雜度。最終,這4個ECU組成的架構,一共將存在3*4,12個復雜度。
而如果把其中一個ECU提高一個層級,通過這個ECU來協調底層的ECU。這個ECU將依然保持3個復雜度,但是底層的每個ECU,復雜度都將變成1。那這4個ECU組成的架構,就變為6個復雜度。
大家可以看下這個差異。同樣是4個ECU的總數,但最終的復雜度數量卻減少了一半。ECU數量越大,兩種架構的復雜度差異也將越大。
另外,因為不同層級復雜度的明確,對于如何宏觀分配資源,規劃平臺,我們就心中有數了。
需要注意的是,這個例子,只是以ECU為單位,對功能實現來講,顆粒度必須下沉到軟件單元才有意義。這種情況下,因為架構分層引起的數量差就更加可怕了。
從這點上,也能理解,為什么在傳統的架構和供應商體系中,有任何小的改動都如此緩慢和昂貴了。我們如果不從根本上解決復雜度,其他的措施都是揚湯止沸,治標不治本。
職責邊界
04
從車輛定義再到ECU層級的拆解,我們對開發過程中ECU所承擔的職責已經較為清晰了。最后,根據ECU所承擔的職責,我也對實際開發過程中的職責邊界給出自己的看法。
在上圖中,我們先將整個開發分為兩個大的階段,需求開發和產品開發,然后根據之前提到的ECU層級,將產品開發劃分為3級,每一級又拆分為軟件產品和硬件產品。然后基于這個分類,應當由主機廠,還是合作商來承擔某一分類的職責,在圖中給出了推薦程度。
因為傳統OEM的開發設計人員,不太懂軟件,而傳統的軟件商只關注單個ECU,沒有整車視野,所以在這個變革的歷史階段,市場上需要有能結合兩種能力和視野的方案供應商,來彌補缺失的地方。(在實際的情況中,方案商也可能是軟件供應商。)
最后,重點說明兩點:
在新的架構體系下,主機廠除了負責需求開發,還應該掌控域控制器及中央控制器的軟件開發,只有這樣,才真正培養迭代能力,保證產品質量,擁有真正的話語權。
注:掌控不一定代表需要事必躬親,什么都是自己來做。
最底層的ECU,建議軟硬件同一供應商,因為在這一層軟硬件耦合性較大。再往上,域和中央控制器的ECU,建議軟硬分離,由不同的供應商負責,而且因為領域的不同,可能存在多個軟件供應商,如此一來,主機廠的協調溝通就尤其重要。
作者介紹
05
END