1.什么是someip?
2011年,寶馬提出和設(shè)計(jì)了Someip,SOME/IP全稱Scalable service-Oriented Middleware over IP,即基于IP的可擴(kuò)展面向服務(wù)的中間件。因此,從Someip的名字出發(fā),有三個(gè)典型要素:
因此,要了解Someip,首先得理解Someip為什么要具備三個(gè)典型要素。
1.1 面向服務(wù)
提到面向服務(wù),很多人會(huì)聯(lián)想到面對(duì)對(duì)象編程的C++與python語言,someip的面向服務(wù)與python語言中的“類”是一致的,即把方法以及數(shù)據(jù)抽象出來,供多方使用。
即someip通信的本質(zhì)是:一個(gè)控制器通過服務(wù)的方式使用另一個(gè)控制器的方法或者數(shù)據(jù)。
以車內(nèi)溫度值獲取方式為例:
在基于can通信的電器架構(gòu)中,一個(gè)特定的功能就需要一個(gè)人特定的信號(hào)。比如對(duì)于車窗控制功能,就需要一個(gè)can信號(hào)來表示車窗的上升與下降。當(dāng)需要控制車窗上升時(shí),對(duì)應(yīng)的can信號(hào)的將設(shè)置為上升,并且周期發(fā)送。
基于can信號(hào)開啟車窗
在基于Someip通信的電器架構(gòu)中,一個(gè)特定的功能將被抽象成“服務(wù)”。這服務(wù)中可以有多種不同的方法,比如:車燈控制器服務(wù),喇叭控制服務(wù)等。當(dāng)需要控制車窗上升時(shí),只需要通過將服務(wù)中的車窗控制方法設(shè)置為上升,并且只需要發(fā)送一次即可。
基于Someip信號(hào)開啟車窗 那基于服務(wù)的通信方式有什么優(yōu)勢(shì)呢?
基于服務(wù)的通信方式的最大優(yōu)勢(shì)在于可擴(kuò)展性強(qiáng),便于更新。舉個(gè)例子:
如果在車內(nèi)有另一個(gè)控制器ECU3也需要對(duì)車窗升降進(jìn)行控制,比如語音控制車窗。
1)如果使用Can通信,那么需要增加哪些工作呢?
l整車通信設(shè)計(jì):增加Can網(wǎng)段或者Can信號(hào)(修改硬件或者修改通信矩陣),提供另一個(gè)車窗指令信號(hào)給ECU3使用。
lECU2軟件設(shè)計(jì):ECU2需要專門為了ECU3設(shè)計(jì)對(duì)應(yīng)的車窗控制邏輯,因此需要修改軟件。
2)如果使用Someip為基礎(chǔ)的面向服務(wù)的通信,需要增加哪些工作呢?
l整車通信設(shè)計(jì):只需要在整車通信設(shè)計(jì)層面,增加ECU3消費(fèi)ECU2車窗服務(wù)。
面向服務(wù)是將功能抽象成服務(wù),如ECU2將車窗功能抽象成車窗控制服務(wù),車內(nèi)任意節(jié)點(diǎn)需要使用車窗控制服務(wù),只需要給ECU2發(fā)送對(duì)應(yīng)的服務(wù)someip報(bào)文,而ECU2對(duì)應(yīng)的車窗邏輯代碼完全不需要修改。即面向服務(wù)的通信與信號(hào)完全解耦,擴(kuò)展性強(qiáng)。 綜上所述,面向服務(wù)的通信將原子功能服務(wù)化,軟件功能邏輯與信號(hào)解耦,具有更強(qiáng)的可擴(kuò)展性,降低修改需求時(shí)的成本。
1.2基于IP之上的協(xié)議
以太網(wǎng)是一種使用十分廣泛的協(xié)議,由標(biāo)準(zhǔn)的七層架構(gòu)組成,但CP中的以太網(wǎng)其實(shí)僅用了5層協(xié)議,Someip為第5層協(xié)議。
以太網(wǎng)第一層是物理層,既可以理解為硬件層,在MCU的軟硬件系統(tǒng)中由Phy芯片完成。Phy芯片能對(duì)模擬信號(hào)與數(shù)字信號(hào)進(jìn)行轉(zhuǎn)換,接收?qǐng)?bào)文時(shí),將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)給MCU芯片處理;發(fā)送報(bào)文時(shí),將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào)發(fā)送至以太網(wǎng)總線上。
以太網(wǎng)第二層是數(shù)據(jù)鏈路層。鏈路層即Mac層,規(guī)定了數(shù)據(jù)幀能被網(wǎng)卡接收的條件,最常見的方式是利用利用網(wǎng)卡的MAC 地址,發(fā)送方會(huì)在欲發(fā)送的數(shù)據(jù)幀的首部加上接收方網(wǎng)卡的MAC 地址信息,接收方只有監(jiān)聽到屬于自己的MAC 地址信息后,才會(huì)去接收并處理該數(shù)據(jù)。以太網(wǎng)第三層是網(wǎng)絡(luò)層。每一臺(tái)搭載了以太網(wǎng)的ECU都需要定義ip地址,主機(jī)的網(wǎng)絡(luò)地址該如何定義,以及如何在網(wǎng)絡(luò)地址和MAC 地址之間進(jìn)行映射,即ARP 協(xié)議;網(wǎng)絡(luò)層實(shí)現(xiàn)了數(shù)據(jù)包在ECU之間的傳遞。
以太網(wǎng)第四層是傳輸層。傳輸層主要是實(shí)現(xiàn)UDP以及TCP協(xié)議功能,在一個(gè)ECU內(nèi)可能存在不同的應(yīng)用程序,這些程序可能會(huì)使用到不同的IP地址,那么傳輸層就能區(qū)分?jǐn)?shù)據(jù)包是屬于哪個(gè)應(yīng)用程序的,即傳輸層可以實(shí)現(xiàn)數(shù)據(jù)包端到端的傳遞,即ECU1的應(yīng)用程序至ECU2的應(yīng)用程序。
Someip,Someipsd,Doip位于以太第五層應(yīng)用層:Someip協(xié)議,,Someipsd協(xié)議,doip協(xié)議本質(zhì)上是規(guī)定了對(duì)網(wǎng)絡(luò)層傳遞的數(shù)據(jù)的處理,適應(yīng)了不同的應(yīng)用場(chǎng)景。在CP中,實(shí)際上Soad,SD,Doip,Soemipxf都是在實(shí)現(xiàn)應(yīng)用層功能。
1.3 通信中間件
中間件本來是在互聯(lián)網(wǎng)行業(yè)十分流行的術(shù)語,是基礎(chǔ)軟件一類,位于操作系統(tǒng),網(wǎng)絡(luò),數(shù)據(jù)庫之上,應(yīng)用軟件的下層。作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行與開發(fā)的環(huán)境,幫助用戶靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用軟件。在不同的技術(shù)之間共享資源并管理計(jì)算資源和網(wǎng)絡(luò)通信。
中間件的核心思想在于“統(tǒng)一標(biāo)準(zhǔn)、分散實(shí)現(xiàn)、集中配置”。Someip這套協(xié)議具備了中間件的顯著特征,能夠運(yùn)行于車內(nèi)不同的操作系統(tǒng)之上,并且能滿足同一套標(biāo)準(zhǔn)協(xié)議。
2.SOMEIP服務(wù)化通信
在面向服務(wù)的Someip通信中,Someip提供了三種接口將幫助使用者將原子功能服務(wù)化:
事件Events:事件通知主要提供事件型的接口,該事件可以是突發(fā)型的事件,也可以是周期性的事件。
方法Methods:遠(yuǎn)程過程調(diào)用, 主要用于遠(yuǎn)程調(diào)用方法。
字段Fields:訪問進(jìn)程數(shù)據(jù)(Field)。訪問進(jìn)程通信機(jī)制主要是為了實(shí)現(xiàn)針對(duì)對(duì)應(yīng)用程序的數(shù)據(jù)獲取與更改
看完上面對(duì)于someip接口的解釋,相信很多人還是對(duì)這些官方的抽象解釋一臉疑惑,接下來為大家提供接地氣的描述。
2.1 設(shè)定不同Someip接口的目的
本質(zhì)上一個(gè)服務(wù)抽象的是一個(gè)大功能,每個(gè)功能會(huì)有不同的子功能以及不同的應(yīng)用場(chǎng)景,所以就需要不同的接口滿足不同場(chǎng)景需求。
以上文中提到的車窗服務(wù)為例,如果車窗服務(wù)有如下使用需求:
需求1:某ECU需要ECU2周期性提供車窗開度狀態(tài)信息。
需求2:某ECU需要ECU2在車窗開度信息有變化時(shí)提供車窗開度信息。
需求3:某ECU在有需要時(shí)遠(yuǎn)程單次獲取車窗開度信息。
需求4:某ECU需要設(shè)置當(dāng)前的車窗開度信息
需求5:某ECU需要直接開關(guān)車窗
上面的不同功能需求都可以通過Someip提供的三種接口實(shí)現(xiàn)。
需求1:該需求為需要提供周期性事件信息,選Event接口。
需求2:該需求為需要提供突發(fā)型事件型的數(shù)據(jù),選Event接口。
需求3:有需要時(shí)獲取數(shù)據(jù),即訪問進(jìn)程中的內(nèi)容,選Field接口。
需求4:設(shè)置當(dāng)前的車窗開度信息,也是訪問進(jìn)程中的內(nèi)容,選Filed接口。
需求5:直接開關(guān)車窗,實(shí)現(xiàn)車窗的遠(yuǎn)程控制,需要遠(yuǎn)程調(diào)用開關(guān)服務(wù),這是典型的遠(yuǎn)程調(diào)用,選Method接口。
看到這兒,大家是否對(duì)Someip接口有所認(rèn)識(shí),本質(zhì)上Method/Event/Filed都是上層的概念,用以體現(xiàn)服務(wù)中子功能的特征,根據(jù)子功能的特點(diǎn)選擇合適的接口。
比如事件型的子功能選Event,過程訪問(比如車輛運(yùn)行過程中獲取空調(diào)溫度,設(shè)置空調(diào)溫度)選Filed,遠(yuǎn)程調(diào)用(比如App遠(yuǎn)程直接控制空調(diào)開關(guān))選Method。
2.2 Someip服務(wù)的通信機(jī)制
Method/Event/Filed三個(gè)接口只是上層概念,是對(duì)于功能層面概念的抽象,在整車架構(gòu)中實(shí)現(xiàn)這幾種概念,還需要通信機(jī)制的支撐。
比如:打工仔有很好的針對(duì)業(yè)務(wù)上的建議(Method/Event/Filed),需要獲取領(lǐng)導(dǎo)的資源支持,那么就需要使用PPT進(jìn)行匯報(bào),PPT就是底層的通信機(jī)制。
Someip提供了三種通信方式:
l請(qǐng)求/響應(yīng)
l請(qǐng)求不響應(yīng)
l服務(wù)發(fā)現(xiàn)/訂閱發(fā)布
上述三種方式對(duì)應(yīng)著四種真正的通信機(jī)制:
lRequest/response
lFire&Forget
lNotification
lGetter/Setter
通信方式描述的是通信機(jī)制的特點(diǎn),通信機(jī)制是支撐Someip接口功能實(shí)現(xiàn)的底層通信機(jī)制。
通信機(jī)制有如下圖中的對(duì)應(yīng)關(guān)系,下面將介紹各接口中的通信機(jī)制。
1)Method
Method的特點(diǎn)是遠(yuǎn)程調(diào)用,根據(jù)是否需要服務(wù)端發(fā)出響應(yīng)報(bào)文可以分為兩類:
1.請(qǐng)求響應(yīng),即Request/Response機(jī)制
簡(jiǎn)而言之,Client端(某個(gè)ECU)有需求的時(shí)候,向Server端(某個(gè)ECU)發(fā)送Request請(qǐng)求Someip報(bào)文,Server接收?qǐng)?bào)文后處理該請(qǐng)求,并向Client端發(fā)送響應(yīng)Someip報(bào)文,響應(yīng)Someip報(bào)文中將攜帶請(qǐng)求處理結(jié)果。
2.請(qǐng)求不響應(yīng),即Fire/Forget機(jī)制
Fire/Forget機(jī)制相對(duì)于Request/Response機(jī)制,區(qū)別在于前者不需要Server端發(fā)送響應(yīng)報(bào)文,而后者需要。
2)Event
Event服務(wù)接口支持的通信機(jī)制是Notification,有如下特性:
l由Server向Client發(fā)送報(bào)文
l可周期性發(fā)送或者根據(jù)事件狀態(tài)(值改變或者特定條件滿足)發(fā)送通知類消息。
l在Server端發(fā)送報(bào)文之前,需要Client端先對(duì)服務(wù)進(jìn)行訂閱。
3)Field
Field訪問進(jìn)程通信支持了三種通信機(jī)制,Notification,Getter,Setter三種。
1.Notification
Filed支持Notification時(shí),具有如下特性:
1)由Server端主動(dòng)發(fā)送報(bào)文
2)在Server端提供的服務(wù)整個(gè)生命周期中,即在服務(wù)上線后的任意時(shí)刻,Server端可以Filed數(shù)據(jù)報(bào)文發(fā)送給Client端。Filed強(qiáng)調(diào)的是全生命周期的數(shù)據(jù),Event強(qiáng)調(diào)的是變化的事件。
3)在Server端發(fā)送報(bào)文之前,需要Client端先對(duì)服務(wù)進(jìn)行訂閱。
2.Getter
Client主動(dòng)從Server端獲取field數(shù)據(jù)。
3.Setter
Client主動(dòng)設(shè)置Server端的Field數(shù)據(jù)。
3.Someip的軟件實(shí)現(xiàn)
在AUTOSAR架構(gòu)中,Someip服務(wù)化通信的實(shí)現(xiàn)需要依賴于底層以太協(xié)議棧與應(yīng)用層的共同完成。
如上文所描述,服務(wù)接口的抽象由應(yīng)用層完成,即Event,F(xiàn)iled,Method的抽象,具體的通信機(jī)制由以太棧支持。
即以太協(xié)議棧與Rte將完成數(shù)據(jù)的序列化與反序列化,報(bào)文的組裝與分解以及notify,RR,Getter/Setter等通信機(jī)制。
應(yīng)用層SWC將完成Event與Method或者Filed特性的實(shí)現(xiàn)。
3.1 Method請(qǐng)求代碼實(shí)現(xiàn)
下圖為Method接口請(qǐng)求/響應(yīng)中請(qǐng)求的代碼實(shí)現(xiàn)方式。
Request/Response中Request即是典型的請(qǐng)求。
實(shí)際上,Method接口中請(qǐng)求在AUTOSAR架構(gòu)中體現(xiàn)為函數(shù)調(diào)用。Client向Server端通過Method接口請(qǐng)求車窗開啟,本質(zhì)上就是,Client端向Server端請(qǐng)求調(diào)用對(duì)應(yīng)的車窗控制函數(shù),只不過函數(shù)調(diào)用請(qǐng)求需要通過Someip報(bào)文從Client端發(fā)送至Server端實(shí)現(xiàn)。
如下圖,Client端Rte_Call_OpenTheWindowMethod(State)執(zhí)行后,Someip報(bào)文將此請(qǐng)求傳輸至Server端,Re_OpenTheWindowMethod被調(diào)用。
注意:Request/Response中Response的實(shí)現(xiàn)方式與Request一致,不同點(diǎn)在于變?yōu)镾erver端請(qǐng)求調(diào)用Client端中的函數(shù)。
3.2 Event主動(dòng)發(fā)送代碼實(shí)現(xiàn)
下圖為Event服務(wù)接口在代碼中的實(shí)現(xiàn)方式。
在AUTOSAR架構(gòu)中,Event實(shí)現(xiàn)的即為ECU間的數(shù)據(jù)傳輸。
Server端使用Rte_Write_WindowStateEvent(State)接口,通過Someip報(bào)文將State數(shù)據(jù)傳送給Client端,Client端通過Rte_read_WindowStateEvent(State)獲取數(shù)據(jù)。
注意:Fire/Forget.Field之notifation的實(shí)現(xiàn)機(jī)制與Event一致。
總結(jié)
本文對(duì)Someip的來源本質(zhì),Someip的服務(wù)化通信,以及Someip服務(wù)化通信在AUTOSAR中代碼實(shí)現(xiàn)方式做了詳細(xì)的介紹,如果需要深入了解Someip,還需要對(duì)Someip的報(bào)文格式,SomeipSD的機(jī)制以及AUTOSAR的以太棧模塊進(jìn)行學(xué)習(xí)。
審核編輯:劉清
-
控制器
+關(guān)注
關(guān)注
112文章
16105瀏覽量
177082 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5343瀏覽量
170804 -
CAN通信
+關(guān)注
關(guān)注
5文章
93瀏覽量
17802 -
C++語言
+關(guān)注
關(guān)注
0文章
147瀏覽量
6951 -
python
+關(guān)注
關(guān)注
55文章
4768瀏覽量
84376
原文標(biāo)題:通信中間件Someip服務(wù)化通信
文章出處:【微信號(hào):汽車電子嵌入式,微信公眾號(hào):汽車電子嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論