日本无码免费高清在线|成人日本在线观看高清|A级片免费视频操逼欧美|全裸美女搞黄色大片网站|免费成人a片视频|久久无码福利成人激情久久|国产视频一二国产在线v|av女主播在线观看|五月激情影音先锋|亚洲一区天堂av

  • 手機站
  • 小程序

    汽車測試網(wǎng)

  • 公眾號
    • 汽車測試網(wǎng)

    • 在線課堂

    • 電車測試

以太網(wǎng)SOME/IP協(xié)議解讀

2021-10-09 20:07:25·  來源:汽車電子聯(lián)盟  
 
標(biāo)準(zhǔn)的網(wǎng)絡(luò)七層架構(gòu),SOME/IP (Scalable service-Oriented MSOME/IP (Scalable service-Oriented MiddlewarE over IP) 是車載以太網(wǎng)通信引入的一個概念,位于OSI
“標(biāo)準(zhǔn)的網(wǎng)絡(luò)七層架構(gòu),SOME/IP (Scalable service-Oriented MSOME/IP (Scalable service-Oriented MiddlewarE over IP) 是車載以太網(wǎng)通信引入的一個概念,位于OSI 7層模型的層4之上。在以CAN總線為主的車載網(wǎng)絡(luò)中,通信過程是面向信號的(除了診斷通信之外),這是一種根據(jù)發(fā)送者需求實現(xiàn)的通信過程,當(dāng)發(fā)送者發(fā)現(xiàn)信號的值變化了,或者發(fā)送周期到了,就會發(fā)送信息,而不考慮接收者是否有需求。而SOME/IP則不同,它是在接收方有需求的時候才發(fā)送,這種方法的優(yōu)點在于總線上不會出現(xiàn)過多不必要的數(shù)據(jù),從而降低負(fù)載。”

01、服務(wù)說明
服務(wù)是SOME/IP的最核心的一個概念,屬于會話層的協(xié)議。在一個服務(wù)中,定義了Server和Client兩個不同角色:Server提供服務(wù),Client調(diào)用服務(wù)。對于同一個服務(wù),只能存在一個Server,但可以同時存在多個Client調(diào)用服務(wù)。一個Service由0~多個Event/Method/Field組成。與CAN相比,面向服務(wù)的通訊方式能夠大大降低總線的負(fù)載率。
  • 在以CAN總線為主的車載網(wǎng)絡(luò)中,通信過程是面向信號的(除了診斷通信之外),這是一種根據(jù)發(fā)送者需求實現(xiàn)的通信過程,當(dāng)發(fā)送者發(fā)現(xiàn)信號的值變化了,或者發(fā)送周期到了,就會發(fā)送信息,而不考慮接收者是否有需求。
  • 而SOME/IP則不同,它是在接收方有需求的時候才發(fā)送,這種方法的優(yōu)點在于總線上不會出現(xiàn)過多不必要的數(shù)據(jù),從而降低負(fù)載。
  • 在車載網(wǎng)絡(luò)中,某個ECU有時會需要調(diào)用實現(xiàn)在其他ECU上的個服務(wù),這個時候它倆就分別扮演了client和server的角色,而SOME/IP就是實現(xiàn)這種遠(yuǎn)程服務(wù)調(diào)用的接口。
1.1 Method
調(diào)用或引用一個進(jìn)程/函數(shù)/子程序,通常由Client發(fā)起,并由Server答復(fù)。Request是最常見的一種Method,由Client向Server請求數(shù)據(jù);Response是Request的結(jié)果,由Server答復(fù)Client的Request。而Method Fire & Forget方式,只Client向Server發(fā)起,但Server對該請求不回復(fù)。
1.2 Event
一個單向的數(shù)據(jù)傳輸,只能是on change類型,用于Server主動向訂閱(Subscribe)了相關(guān)服務(wù)的Client發(fā)布(Publish)信息。
1.3 Field
由以下三項內(nèi)容構(gòu)成:
Notifier:通知,Server的Client訂閱了服務(wù)后第一時間主動向其發(fā)送數(shù)據(jù)。
Getter:獲取,由Client向Server請求數(shù)據(jù)。
Setter:設(shè)置,由Client修改Server的數(shù)據(jù)。


NOTIFICATION又分為Event和Field 兩類,這兩類通知都需要首先使用SOME/IP-SD(Service Discovery)來進(jìn)行服務(wù)訂閱,然后才能發(fā)布通知。區(qū)別在于,Event是某一時刻的快照,只是事件通知,而Field除了事件通知之外,還具有Getter和Setter的功能,即對信息進(jìn)行讀寫的操作。
SOME/IP-SD可以被當(dāng)作SOME/IP的一種特殊服務(wù),前面提到過,client可以遠(yuǎn)程調(diào)用server提供的服務(wù),或者訂閱server發(fā)布的內(nèi)容,那么client是怎么知道server提供哪些服務(wù)呢,就是通過SOME/IP-SD來實現(xiàn)服務(wù)發(fā)現(xiàn)過程的。

02、解析SOME/IP的格式


2.1 Message Type說明

2.2 Payload說明
通常在傳輸數(shù)據(jù)時,為了使數(shù)據(jù)傳輸更可靠,要把原始數(shù)據(jù)分批傳輸,并且在每一批數(shù)據(jù)的頭和尾都加上一定的輔助信息,比如數(shù)據(jù)量的大小、校驗位等,這樣就相當(dāng)于給已經(jīng)分批的原始數(shù)據(jù)加一些外套,這些外套起標(biāo)示作用,使得原始數(shù)據(jù)不易丟失,一批數(shù)據(jù)加上“外套”就形成了傳輸通道的基本傳輸單元,叫做數(shù)據(jù)幀或數(shù)據(jù)包,而其中的原始數(shù)據(jù)就是payload。
SOME/IP 數(shù)據(jù)的格式:

上圖是SOME/IP數(shù)據(jù)的格式,除了最下面的Payload之外都屬于SOME/IP的header。SOME/IP消息由報頭header和有效負(fù)載Payload組成。
  • 消息ID:服務(wù)ID和事件/方法ID的組合
  • Length:包含從請求ID到SOME/IP消息結(jié)束的長度(以字節(jié)為單位)
  • 請求ID:允許提供者和訂閱者區(qū)分同一方法、事件、getter或setter的多個并行使用
  • 協(xié)議版本:包含SOME/IP協(xié)議版本的8位字段
  • 接口版本:包含服務(wù)接口主要版本的8位字段
  • 消息類型:用于區(qū)分消息類型
  • 返回碼:用于指示請求是否已成功處理。
Message Type [8 Bit],它有以下幾種取值:
  • REQUEST (期待響應(yīng)的請求)
  • REQUEST_NO_RETURN(不期待響應(yīng)的請求)
  • NOTIFICATION(事件通知)
  • RESPONSE(響應(yīng)消息)
  • ERROR(報錯消息)
03、SOME/IP服務(wù)發(fā)現(xiàn)SD
由于以太網(wǎng)數(shù)據(jù)傳輸服務(wù)需要由Server和Client兩個部分共同完成,因此在進(jìn)行數(shù)據(jù)傳輸之前,需要準(zhǔn)備一系列的工作來確認(rèn)Server和Client之間是否已建立網(wǎng)絡(luò)連接。其次,Client還要詢問Server能否提供所需的服務(wù),滿足數(shù)據(jù)傳輸需求,并對服務(wù)的Event進(jìn)行訂閱。這些工作都是通過SOME/IP服務(wù)發(fā)現(xiàn)(Service Discovery)實現(xiàn)的。
服務(wù)發(fā)現(xiàn)的報文格式與一般的SOME/IP報文相同,但是其Message ID固定為0xFFFF8100。
3.1 主要功能
定位服務(wù)實例
檢測服務(wù)實例是否在運行(即服務(wù)實例的狀態(tài))
發(fā)布/訂閱行為的管理
3.2 SD報文解析
SOME/IP SD報文也是一種SOME/IP的數(shù)據(jù)報文,是在SOME/IP數(shù)據(jù)報文的前提上進(jìn)行了擴展需求,增加了Entry、Option等字段;Entries用于同步服務(wù)實例的狀態(tài)和發(fā)布/訂閱的管理,Options用于傳輸Entries的附加信息。
SOME/IP SD數(shù)據(jù)報文的ServiceID(0xFFFF)、MethodID(0x8100)、Request ID(0x0000)、ProtocolVersion(0x01)、Interface Version(0x01)、MessageType(0x02)、ReturnCode(0x00)等等屬性都是一個固定值。
3.2.1 Entry
Entry字段是為服務(wù)實例的“入口”,該入口包含服務(wù)實例以及需要訂閱的事件組的信息?;旧鲜峭ㄟ^Entry來實現(xiàn)提供服務(wù)、發(fā)現(xiàn)服務(wù),以及訂閱事件組的功能。
供服務(wù)用Entries

供EventGroup用Entries

報文中Type內(nèi)容解釋如下:


對于Offer/ StopOfferService、Subscribe/ StopSubscribe和SubscribeAck/ Nack,每一組Entries都共用了Type值,但通過TTL字段可以分辨出究竟是開始或是停止提供服務(wù),是訂閱或者取消訂閱,是訂閱成功應(yīng)答或者訂閱失敗應(yīng)答:當(dāng)TTL = 0時,表示報文對應(yīng)的服務(wù)實例失效,此時對應(yīng)的Type類型分別就是停止提供服務(wù)、停止訂閱事件以及訂閱失敗應(yīng)答。
3.2.2 Options

每一個Option都是有一個2字節(jié)的Length字段、1字節(jié)的Type字段和1字節(jié)的保留位開始的。Length字段指示的長度是從保留位開始的。Options的類型如下表所示:

3.3 SD狀態(tài)機

不管是Server還是Client,都有同樣的狀態(tài)機,但是他們的狀態(tài)機具有不同的行為。
狀態(tài)
服務(wù)端行為
客戶端行為
Down
Service不可用
服務(wù)未被應(yīng)用請求,則停留在該狀態(tài);收到OfferService,啟動TTL計時器,此時服務(wù)若被應(yīng)用請求,進(jìn)入Main;
Init
進(jìn)入條件:
服務(wù)準(zhǔn)備完畢;During:收到Find Service報文后服務(wù)端忽略此消息;退出條件:服務(wù)不可用進(jìn)入Down ;INITIAL_DELAY,當(dāng)定時器超時進(jìn)入Repetition。
進(jìn)入條件:
服務(wù)被請求后進(jìn)入此階段;During:等待INITIAL_DELAY時間;退出條件:如果收到OfferService,取消計時器,進(jìn)入Main ;服務(wù)請求釋放進(jìn)入Down ;計時器超時發(fā)送第一個Find service,進(jìn)入Repetition。
Repetition
作用:
讓客戶端快速找到有哪些Service,During:收到某客戶端的FindService,會延遲一定時間后,發(fā)送單播OfferService給服務(wù)請求端;收到SubscribeEventgroup后,發(fā)送單播Ack/Nack,啟動此訂閱Entry的TTL計時器;如果收到StopSubscribeEventgroup,停止此訂閱Entry的TTL計時器;退出條件:如果服務(wù)不可用,離開此階段進(jìn)入Down ,并發(fā)送StopOfferService通知所有客戶端。
作用:
重復(fù)發(fā)送Find service;退出條件:收到Offer Service,停止發(fā)送計數(shù)和計時,立即進(jìn)入Main觸發(fā)發(fā)送SubscribeEventgroup;服務(wù)請求被釋放,進(jìn)入Down ,有訂閱,則發(fā)送StopSubscribeEventgroup。
Main
作用:
周期性發(fā)OfferServie;During:收到某客戶端的FindService,不影響發(fā)送計數(shù),發(fā)送單播OfferService給服務(wù)請求端;收到SubscribeEventgroup后,發(fā)送單播Ack/Nack,啟動此訂閱Entry的TTL計時器;收到StopSubscribeEventgroup后,停止此訂閱Entry的TTL計時器;退出條件:服務(wù)不可用,離開此階段進(jìn)入Down,并發(fā)送StopOfferService。
作用:
不周期發(fā)送Find Service,不必要負(fù)載;During:收到Offer Service,觸發(fā)發(fā)送SubscribeEventgroup;收到StopOfferService,則停止所有計時器;退出條件:服務(wù)請求被釋放,進(jìn)入Down Phase;若有訂閱,則發(fā)送StopSubscribeEventgroup。

04、SOME/IP序列化
4.1 概念
序列化(Serialization)指的是將數(shù)據(jù)結(jié)構(gòu)或?qū)ο笠罁?jù)事先定義的規(guī)則轉(zhuǎn)換成二進(jìn)制串的過程;反序列化(Deserialization)指的是將二進(jìn)制串依據(jù)相同規(guī)則重新構(gòu)建成數(shù)據(jù)結(jié)構(gòu)或?qū)ο蟮倪^程。
4.2 說明
在AUTOSAR中是指數(shù)據(jù)在PDU中的表達(dá)形式,可以理解為來自應(yīng)用層的真實數(shù)據(jù)轉(zhuǎn)換成固定格式的字節(jié)序,以實現(xiàn)數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸。軟件組件將數(shù)據(jù)從應(yīng)用層傳遞到RTE層,在RTE層調(diào)用SOME/IP Transformer,執(zhí)行可配置的數(shù)據(jù)序列化(Serialize)或反序列化(Deserialize)。SOME/IP Serializer將結(jié)構(gòu)體形式的數(shù)據(jù)序列化為線性結(jié)構(gòu)的數(shù)據(jù);SOME/IP Deserializer將線性結(jié)構(gòu)數(shù)據(jù)再反序列化為結(jié)構(gòu)體形式數(shù)據(jù)。在服務(wù)端,數(shù)據(jù)經(jīng)過SOME/IP Serializer序列化后,被傳輸?shù)椒?wù)層的COM模塊;在客戶端,數(shù)據(jù)從COM模塊傳遞到SOME/IP Deserializer反序列化后再進(jìn)入RTE層。如下圖參考Autosar Com過程

4.3 舉例
一個unit32類型數(shù)據(jù)(0x12345678)的序列化。

05、RPC遠(yuǎn)程調(diào)用機制
遠(yuǎn)程調(diào)用機制包括以下幾種:
  • 請求/響應(yīng)(R/R)通信
客戶端發(fā)送一條Request消息,該消息由服務(wù)端Response。(帶返回值的函數(shù)調(diào)用)
客戶端向服務(wù)器調(diào)用方法,無需服務(wù)器響應(yīng)消息的請求稱為fire&forget。(空函數(shù)調(diào)用)

與CAN報文類似,當(dāng)客戶端訂閱Event Group后,當(dāng)發(fā)生某些特定事件時(周期更新、值發(fā)生改變或值改變了),服務(wù)器就會給客戶端發(fā)送Event報文。(應(yīng)用數(shù)據(jù)轉(zhuǎn)換)

06、管理整個網(wǎng)絡(luò)中服務(wù)的狀態(tài)
6.1 通信機制
SOME/IP通過以太網(wǎng)提供面向服務(wù)的通訊,采用SOME/IP-Service Discovery定位服務(wù)實例,并檢測服務(wù)的運行狀態(tài),同時發(fā)布訂閱處理功能。

客戶端收到需要的服務(wù),會發(fā)送訂閱報文,服務(wù)端給出訂閱ACK后,開始發(fā)送Event。所有需要Event或NotificationEvent的客戶端必須在運行時間中利用SOME/IP-SD在某個server上注冊。
1.服務(wù)發(fā)現(xiàn)通信行為
對每一個服務(wù)實例或事件組,服務(wù)發(fā)現(xiàn)在發(fā)送條目時必須至少包含初始等待階段、重復(fù)階段和主階段。
2.初始等待階段
隨機等待一段時間后發(fā)送報文(發(fā)現(xiàn)服務(wù)和提供服務(wù)條目)。
3.重復(fù)階段
服務(wù)發(fā)現(xiàn)實現(xiàn)時必須在重復(fù)階段等待一段時間,且發(fā)送的條目數(shù)量有限制。如果發(fā)送的條目數(shù)量設(shè)置為0,則必須跳過重復(fù)階段。在初始等待階段之后服務(wù)實例進(jìn)入主階段。
4.主階段
在進(jìn)入主階段之后,必須等待一段時間后發(fā)送第一條報文,循環(huán)發(fā)送提供服務(wù)報文。
當(dāng)某ECU的服務(wù)實例停止服務(wù)時,必須發(fā)送停止提供服務(wù)條目。服務(wù)端的狀態(tài)機如下圖所示:
客戶端在Down階段如收到提供服務(wù)條目,可內(nèi)部調(diào)用服務(wù)請求;如未收到提供服務(wù)條目,則進(jìn)入初始等待階段等待一段時間后進(jìn)入重復(fù)階段發(fā)送報文,接收到提供服務(wù)條目,進(jìn)入主階段。當(dāng)收到服務(wù)實例停止服務(wù)時,服務(wù)停止,仍停留在主階段。客戶端的狀態(tài)機如下圖所示:
6.2 SOME/IP與AUTOSAR
在AUTOSAR架構(gòu)中,SOME/IP-SD模塊位于AUTOSAR BSW Mode Manager module(BswM)和AUTOSAR Socket Adaptor module (SoAd)之間,如圖11所示。BswM模塊提供了通用模式請求和服務(wù)請求之間的連接。SoAd模塊則處理以太網(wǎng)堆棧和Sd模塊之間的服務(wù)請求。通過配置SoAd中的SocketConnection表,可以接收其他ECU的Sd模塊發(fā)來的單播和多播報文。
 
分享到:
 
反對 0 舉報 0 收藏 0 評論 0
滬ICP備11026917號-25