車載以太網網絡測試-26【SOME/IP-通信方式-2】

目錄

  • 1 摘要
  • 2 Method (FF/RR)、Event、Filed介紹
    • 2.1. SOME/IP Method 接口
      • 2.1.1 **Fire & Forget (FF)** - 單向調用
      • 2.1.2 **Request/Response (RR)** - 請求/響應模式
      • 2.1.3 **車載ECU通信實現示例**:
      • 2.1.4 **通信序列示例**
      • 2.1.5 實現注意事項
    • 2.2 Event接口
      • 2.2.1 **Event接口工作流程**:
      • 2.2.2 報文通信示例
    • 2.3 some/ip 的 Field(Getter、Setter、Notifier)接口
      • 2.3.1 Getter 接口
      • 2.3.2 Setter 接口
      • 2.3.3 Notifier 接口
      • 2.3.4 報文通信示例(車載ECU場景)
  • 3 總結

1 摘要

本專題繼續對SOME/IP的通信方式進行介紹,主要有Method、Event以及Field這三類接口的定義、應用場景以及示例進行介紹。
上文回顧:
車載以太網網絡測試 -24【SOME/IP概述】
車載以太網網絡測試 -25【SOME/IP-報文格式-1】

2 Method (FF/RR)、Event、Filed介紹

SOME/IP主要為應用層提供API接口,創建CS接口,通過TCP/IP協議進行通信。而SOME/IP的訪問方式分為三種,分別是事件通知(Event Notification),遠程過程調用(Remote Procedure Call,RPC)和訪問進程數據(Accessing Process Data)。
在這里插入圖片描述

2.1. SOME/IP Method 接口

SOME/IP (Scalable service-Oriented MiddlewarE over IP) 是一種面向服務的車載通信協議,Method 是 SOME/IP 提供的核心通信模式之一,主要用于實現遠程過程調用 (RPC)。

SOME/IP 支持兩種 Method 調用方式:

  • Fire & Forget (FF) - 單向調用
  • Request/Response (RR) - 請求/響應模式

2.1.1 Fire & Forget (FF) - 單向調用

Fire&Forget,可以直譯成點火即忘,觸發了但不在乎結果(有點類似診斷服務中的抑制正響應。)

  • 客戶端發送請求后不等待響應

  • 適用于不需要確認的操作或事件通知
    在這里插入圖片描述

  • 特點:

    • 單向通信,無響應
    • 低延遲,不占用資源等待響應
    • 適用于非關鍵性操作或事件通知
    • 服務端不保證請求一定被處理
  • 典型應用場景:

    • 車門解鎖狀態通知
    • 環境溫度更新
    • 非關鍵診斷信息上報
  • 報文示例:

客戶端請求報文:

SOME/IP Header:Message ID: 0x12345678 (ServiceID:MethodID)Length: 0x0000000CClient ID: 0x0010Session ID: 0x0001Protocol Ver:  0x01Interface Ver: 0x02Message Type: 0x01 (REQUEST)Return Code: 0x00 (E_OK)Payload:0x01 0x00 0x00 0x00 // 布爾值 true (車門解鎖)

2.1.2 Request/Response (RR) - 請求/響應模式

  • 客戶端發送請求并等待服務端響應

  • 適用于需要獲取返回值的操作
    在這里插入圖片描述

  • 特點:

    • 雙向通信,有請求和響應
    • 客戶端等待服務端處理并返回結果
    • 適用于需要確認或獲取數據的操作
    • 支持同步和異步調用模式
  • 典型應用場景:

    • 讀取ECU版本信息
    • 設置車輛配置參數
    • 執行診斷命令
  • 報文示例:

客戶端請求報文:

SOME/IP Header:Message ID: 0x12345678 (ServiceID:MethodID)Length: 0x0000000CClient ID: 0x0020Session ID: 0x0002Protocol Ver:  0x01Interface Ver: 0x02Message Type: 0x01 (REQUEST)Return Code: 0x00 (E_OK)Payload:0x00 0x00 0x00 0x00 // 無參數請求

服務端響應報文:

SOME/IP Header:Message ID: 0x12345678 (ServiceID:MethodID)Length: 0x0000000CClient ID: 0x0020Session ID: 0x0002Protocol Ver:  0x01Interface Ver: 0x02Message Type: 0x02 (RESPONSE)Return Code: 0x00 (E_OK)Payload:0x01 0x02 0x03 0x04 // ECU版本號 1.2.3.4

2.1.3 車載ECU通信實現示例:

  • 車門狀態控制服務 (混合使用FF和RR)

服務定義 (ARXML):

<METHODS><METHOD NAME="SetDoorLock" ID="1" TYPE="FIRE_AND_FORGET"><ARGUMENTS><ARGUMENT NAME="doorState" TYPE="BOOLEAN"/></ARGUMENTS></METHOD><METHOD NAME="GetDoorStatus" ID="2" TYPE="REQUEST_RESPONSE"><ARGUMENTS><ARGUMENT NAME="doorID" TYPE="UINT8"/></ARGUMENTS><RETURN-ARGUMENT TYPE="BOOLEAN"/></METHOD>
</METHODS>

2.1.4 通信序列示例

  1. 設置車門狀態 (FF)

    • 客戶端發送:
      MessageID: 0x1001 (ServiceID=0x10, MethodID=0x01)
      Payload: 0x01 (true - 解鎖)
      
    • 服務端接收但不響應
  2. 獲取車門狀態 (RR)

    • 客戶端發送:
      MessageID: 0x1002 (ServiceID=0x10, MethodID=0x02)
      Payload: 0x01 (查詢左前門)
      
    • 服務端響應:
      MessageID: 0x1002
      Payload: 0x01 (門已解鎖)
      

2.1.5 實現注意事項

  1. 超時處理:RR方法需要設置合理的超時時間
  2. 會話管理:Session ID用于匹配請求和響應
  3. 錯誤處理:正確處理Return Code (如 E_NOT_OK, E_NOT_READY等)
  4. 序列化:確保payload按照定義的數據類型正確序列化
  5. 服務質量:根據應用需求配置TP協議或設置QoS參數

2.2 Event接口

Event接口是AUTOSAR SOME/IP (Scalable service-Oriented MiddlewarE over IP)協議中的一種重要通信機制,主要用于實現事件通知功能。在車載ECU通信中,Event接口允許服務提供者(Provider)主動向訂閱者(Subscriber)發送事件通知,而不需要訂閱者主動請求。

  • 主要特點:
  1. 發布/訂閱模式:基于訂閱機制,只有訂閱了特定事件的ECU才會收到通知
  2. 實時性:適用于需要實時通知的場景,如傳感器數據更新、狀態變化等
  3. 可靠性:支持可靠和不可靠兩種傳輸模式
  4. 多播支持:可以通過IP多播實現一對多通信

2.2.1 Event接口工作流程:

  1. 訂閱階段:客戶端ECU向服務端ECU發送訂閱請求
  2. 確認階段:服務端確認訂閱(對于可靠Event)
  3. 通知階段:當事件發生時,服務端主動發送事件數據
  4. 取消訂閱:客戶端可以主動取消訂閱
    在這里插入圖片描述
    在SOME/IP中,定義了三種通知發送的策略:
  5. Cyclic update周期發送,以一定的周期發送通知。
  6. Update on change變化后發送,當該事件發生變化時,進行發送。
  7. Epsilon change變化超過閾值發送,當較上一次的變化超過預先設置的閾值時,進行發送。

2.2.2 報文通信示例

  1. 訂閱請求 (Subscribe Eventgroup)
[客戶端 -> 服務端]
SOME/IP Header:Message ID: 0x12345678 (Service ID: 0x1234, Method ID: 0x5678)Length: 0x00000010Request ID: 0x00010001Protocol Version: 0x01Interface Version: 0x01Message Type: 0x02 (REQUEST)Return Code: 0x00 (E_OK)Payload:Eventgroup ID: 0x0001Subscribe/Unsubscribe Flag: 0x01 (Subscribe)Options:- Endpoint Option (IP: 192.168.1.100, Port: 30500)
  1. 訂閱確認 (Subscribe Eventgroup Ack)
[服務端 -> 客戶端]
SOME/IP Header:Message ID: 0x12345678 Length: 0x00000010Request ID: 0x00010001Protocol Version: 0x01Interface Version: 0x01Message Type: 0x03 (RESPONSE)Return Code: 0x00 (E_OK)Payload:Eventgroup ID: 0x0001Subscribe/Unsubscribe Flag: 0x01 (Subscribe)Options:- Endpoint Option (IP: 192.168.1.200, Port: 30501)
  1. 事件通知 (Event Notification)
[服務端 -> 客戶端]
SOME/IP Header:Message ID: 0x12340001 (Service ID: 0x1234, Event ID: 0x0001)Length: 0x0000000CRequest ID: 0x00000000 (Notification不需要響應)Protocol Version: 0x01Interface Version: 0x01Message Type: 0x02 (NOTIFICATION)Return Code: 0x00 (E_OK)Payload:Event Data: [具體事件數據,如傳感器值、狀態標志等]例如: 0x00000042 (表示溫度值66)
  1. 取消訂閱 (Unsubscribe Eventgroup)
[客戶端 -> 服務端]
SOME/IP Header:Message ID: 0x12345678Length: 0x00000010Request ID: 0x00010002Protocol Version: 0x01Interface Version: 0x01Message Type: 0x02 (REQUEST)Return Code: 0x00 (E_OK)Payload:Eventgroup ID: 0x0001Subscribe/Unsubscribe Flag: 0x00 (Unsubscribe)Options:- Endpoint Option (IP: 192.168.1.100, Port: 30500)
  • 車載ECU典型應用場景:
  1. 傳感器數據更新:如車速、發動機轉速、溫度等
  2. 狀態變化通知:如車門開關狀態、燈光狀態
  3. 故障報警:如電池電壓過低、發動機故障
  4. ADAS系統:如碰撞預警、車道偏離警告

2.3 some/ip 的 Field(Getter、Setter、Notifier)接口

在 SOME/IP (Scalable service-Oriented MiddlewarE over IP) 中,Field 是一種特殊類型的接口元素,它結合了 Getter、Setter 和 Notifier 功能,為車載ECU之間的通信提供了靈活的數據訪問機制。

  • Field 的三種操作模式:
  1. Getter:客戶端可以請求讀取Field的當前值
  2. Setter:客戶端可以請求修改Field的值
  3. Notifier:服務器可以在Field值變化時主動通知客戶端

在Getter與Setter的方式中我們使用的Request/Response機制。在Getter的請求報文中是一個空的Payload,響應報文中的Payload才是需要獲取的值;使用Setter請求時,請求消息中的Payload則是要設置的值,如果設置成功,那么響應報文中Payload就是設定成功的值。

2.3.1 Getter 接口

通過Request/Response的方式來實現,Request中為空,不攜帶數據,Response返回Field的值。
功能:允許客戶端查詢Field的當前值

特點

  • 同步請求/響應模式
  • 客戶端發起請求,服務器返回當前值
  • 適用于不頻繁變化的或需要精確時刻值的場景
    在這里插入圖片描述

2.3.2 Setter 接口

通過Request/Response的方式來實現,Request攜帶想要將Field設置的值,Response返回Field設置好的值。
功能:允許客戶端修改Field的值

特點

  • 同步請求/響應模式
  • 客戶端發送新值,服務器確認修改
  • 可能包含權限驗證和有效性檢查

2.3.3 Notifier 接口

通過Event的方式來實現,發送策略與Event一致,不同的是當第一次訂閱成功后,Server會主動發送一次Notifier,攜帶當前Field的值,即訂閱成功后,Client可以立刻獲得Field的初始值,而不用等待事件觸發。

功能:服務器主動通知客戶端Field值的變化

特點

  • 異步通信模式
  • 基于訂閱機制(客戶端需先訂閱)
  • 適用于頻繁變化或需要實時更新的數據
  • 可配置通知條件(如變化閾值、最小間隔等)
    在這里插入圖片描述

2.3.4 報文通信示例(車載ECU場景)

  • 場景描述:

假設我們有一個車速Field(VehicleSpeed)在儀表盤ECU(客戶端)和車輛控制ECU(服務器)之間通信。

  • 通信序列示例:

  • Getter 請求/響應:

  1. 客戶端請求 (儀表盤ECU → 車輛控制ECU)

    SOME/IP Message:
    - Message Type: Request (0x00)
    - Request ID: 0x1234
    - Service ID: 0x0100 (VehicleDataService)
    - Method ID: 0x0001 (GetVehicleSpeed)
    - Payload: Empty
    
  2. 服務器響應 (車輛控制ECU → 儀表盤ECU)

    SOME/IP Message:
    - Message Type: Response (0x80)
    - Request ID: 0x1234
    - Service ID: 0x0100 (VehicleDataService)
    - Method ID: 0x0001 (GetVehicleSpeed)
    - Payload: 60 (km/h, uint16)
    
  • Setter 請求/響應
  1. 客戶端請求設置值 (診斷工具 → 車輛控制ECU)

    SOME/IP Message:
    - Message Type: Request (0x00)
    - Request ID: 0x5678
    - Service ID: 0x0100 (VehicleDataService)
    - Method ID: 0x0002 (SetVehicleSpeed)
    - Payload: 100 (km/h, uint16)
    
  2. 服務器響應 (車輛控制ECU → 診斷工具)

    SOME/IP Message:
    - Message Type: Response (0x80)
    - Request ID: 0x5678
    - Service ID: 0x0100 (VehicleDataService)
    - Method ID: 0x0002 (SetVehicleSpeed)
    - Payload: 0x00 (Success status)
    
  • Notifier 訂閱與通知
  1. 客戶端訂閱 (儀表盤ECU → 車輛控制ECU)

    SOME/IP Message:
    - Message Type: Request (0x00)
    - Request ID: 0x9ABC
    - Service ID: 0x0100 (VehicleDataService)
    - Method ID: 0x8001 (SubscribeVehicleSpeed)
    - Payload: - EventGroup: 0x0001- TTL: 0xFFFFFFFF (永久訂閱)
    
  2. 服務器確認訂閱 (車輛控制ECU → 儀表盤ECU)

    SOME/IP Message:
    - Message Type: Response (0x80)
    - Request ID: 0x9ABC
    - Service ID: 0x0100 (VehicleDataService)
    - Method ID: 0x8001 (SubscribeVehicleSpeed)
    - Payload: 0x00 (Success status)
    
  3. 服務器通知變化 (車輛控制ECU → 儀表盤ECU)

    SOME/IP Message:
    - Message Type: Notification (0x02)
    - Request ID: 0x0000 (無意義)
    - Service ID: 0x0100 (VehicleDataService)
    - Method ID: 0x0003 (VehicleSpeedEvent)
    - Payload: 65 (km/h, uint16)
    
  • 典型車載應用場景
  1. 車輛狀態監控

    • 車速、轉速、油量等實時數據顯示
  2. 配置參數調整

    • 駕駛模式設置、懸架硬度調整
  3. 診斷接口

    • 讀取/寫入診斷參數
  4. ADAS系統

    • 傳感器數據共享和協調

Field接口的靈活組合使得SOME/IP非常適合車載ECU之間復雜的數據交換需求,能夠滿足從簡單狀態讀取到實時數據流傳輸的各種場景。

3 總結

上文對SOME/IP協議的Method、Event以及Field這三類接口的定義、應用場景以及示例進行了介紹。希望能對大家學習車載以太網SOME/IP通信有所幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75167.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

把doi直接插入word中,然后直接生成參考文獻

這段代碼通過提取、查詢、替換DOI&#xff0c;生成參考文獻列表來處理Word文檔&#xff0c;可按功能模塊劃分&#xff1a; 導入模塊 import re from docx import Document from docx.oxml.ns import qn from habanero import Crossref導入正則表達式模塊re用于文本模式匹配&a…

[C++] : C++11 右值引用的理解

&#xff08;一&#xff09;什么是左值和右值&#xff1f; 傳統的C語法中就有引用的語法&#xff0c;而C11中新增了的右值引用語法特性&#xff0c;所以從現在開始我們 之前學習的引用就叫做左值引用。無論左值引用還是右值引用&#xff0c;都是給對象取別名。 1.左值 左值是一…

windows服務器切換到linux服務器踩坑點

單節點環境依賴性 單節點問題&#xff0c;影響業務可用性&#xff0c;windows影響后續自動化&#xff0c;健壯性的提升&#xff0c;需要進行linux化 每個服務至少是雙節點&#xff0c;防止單點故障&#xff0c;提升系統的可用性&#xff0c;健壯性。linux化后可以進行docker化…

美顏SDK兼容性挑戰:如何讓美顏濾鏡API適配iOS與安卓?

如何讓美顏濾鏡API同時適配iOS與Android&#xff0c;并確保性能流暢、效果一致&#xff0c;是開發者面臨的一大挑戰。今天&#xff0c;我將與大家一同深度剖析美顏SDK的跨平臺兼容性問題&#xff0c;并分享優化適配方案。 一、美顏SDK兼容性面臨的挑戰 1.1不同平臺的圖像處理框…

Vue3 表單

Vue3 表單 隨著前端技術的發展,Vue.js 作為一款流行的前端框架,不斷更新迭代,以適應更高效、更便捷的開發需求。Vue3 作為 Vue.js 的第三個主要版本,引入了許多新特性和改進,其中包括對表單處理機制的優化。本文將深入探討 Vue3 表單的使用方法、技巧以及注意事項。 1. …

筆記:代碼隨想錄算法訓練營day62:108.冗余連接、109.冗余連接II

學習資料&#xff1a;代碼隨想錄 108. 冗余連接 卡碼網題目鏈接&#xff08;ACM模式&#xff09; 判斷是否有環的依據為&#xff0c;利用并查集&#xff0c;isSame函數&#xff0c;判斷當下這條邊的兩個節點入集前是否為同根&#xff0c;如果是的話&#xff0c;該邊就是會構…

RK3588,V4l2 讀取Gmsl相機, Rga yuv422轉換rgb (mmap)

RK3588, 使用V4l2 讀取 gmsl 相機,獲得yuv422格式圖像, 使用 rga 轉換 rgb 圖像。減少cpu占用率. 內存管理方式采用 mmap… 查看相機信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相機分辨率,輸出格式等信息,對應修改后續代碼測試… Driver Info:Driver name : rkcif…

Kubernetes》k8s》Containerd 、ctr 、cri、crictl

containerd ctr crictl ctr 是 containerd 的一個客戶端工具。 crictl 是 CRI 兼容的容器運行時命令行接口&#xff0c;可以使用它來檢查和調試 k8s 節點上的容器運行時和應用程序。 ctr -v 輸出的是 containerd 的版本&#xff0c; crictl -v 輸出的是當前 k8s 的版本&#x…

Vue 入門到實戰 十一 Vuex

目錄 11.1狀態管理與應用場景 1&#xff09;state 2&#xff09;Getters 3&#xff09;Mutations 4&#xff09;Actions 5&#xff09;Module 11.2Vuex的安裝與基本應用 11.3Vuex的核心概念 一句話解釋vuex&#xff1a;就是單獨成立一個組件&#xff0c;這個組件存儲共…

【YOLOv11】目標檢測任務-實操過程

目錄 一、torch環境安裝1.1 創建虛擬環境1.2 啟動虛擬環境1.3 安裝pytorch1.4 驗證cuda是否可用 二、yolo模型推理2.1 下載yolo模型2.2 創建模型推理文件2.3 推理結果保存路徑 三、labelimg數據標注3.1 安裝labelimg3.2 解決浮點數報錯3.3 labelimg UI界面介紹3.4 數據標注案例…

探索 Vue 中的多語言切換:<lang-radio /> 組件詳解!!!

探索 Vue 中的多語言切換&#xff1a;<lang-radio /> 組件詳解 &#x1f30d; 嗨&#xff0c;大家好&#xff01;&#x1f44b; 今天我們來聊聊如何在 Vue 項目中實現一個優雅的多語言切換功能——<lang-radio /> 組件。這是一個小而美的組件&#xff0c;出現在登…

grafana 配置頁面告警

添加告警規則 1.登錄grafana 點擊 Alerting > Alert rules 點擊 New alert rule 2.填寫告警規則名字 3.配置告警規則 選擇數據源為 Loki 單機 Builder 單機Label brower 單機 node_name 標簽&#xff0c;選擇一個主機&#xff0c;選好后單機 Show logs 這時候查詢語…

關于JVM和OS中的棧幀的區別和內存淺析

關于JVM和OS中的棧幀的區別和內存淺析 剛看了黑馬JVM中的棧幀的講解&#xff0c;感覺和自己理解的棧幀有一定出入&#xff0c;查詢資料研究了一下發現的確有天壤之別&#xff0c;可惜黑馬并沒有講。 故寫下這篇文章鞏固一下, OS的棧幀&#xff1a; ? OS的棧幀會在調用一個函…

Python FastApi(7):請求體

1 多個參數 1.1 混合使用 Path、Query 和請求體參數 首先&#xff0c;毫無疑問地&#xff0c;你可以隨意地混合使用 Path、Query 和請求體參數聲明&#xff0c;FastAPI 會知道該如何處理。你還可以通過將默認值設置為 None 來將請求體參數聲明為可選參數&#xff1a; from ty…

告別枯燥工作,走向自動化

嘿&#xff0c;小伙伴們&#xff01;今天給你們介紹兩款超實用的RPA辦公自動化軟件&#xff0c;用它們&#xff0c;再也不用像機器一樣做重復勞動啦&#xff0c;超省時間&#xff01; 工具名稱&#xff1a;影刀RPA&#xff08;類似產品&#xff0c;八爪魚 RPA&#xff0c;操作上…

一種C# Winform的UI處理

效果 圓角 陰影 突出按鈕 說明 這是一種另類的處理&#xff0c;不是多層窗口 也不是WPF 。這種方式的特點是比較簡單&#xff0c;例如圓角、陰影、按鈕等特別容易修改過。其實就是html css DirectXForm。 在VS中如下 圓角和陰影 然后編輯這個窗體的Html模板&#xff0c…

HarmonyOS-ArkUI Navigation (導航組件)-第一部分

導航組件主要實現頁面間以及組件內部的界面跳轉&#xff0c;支持在不同的組件間進行參數的傳遞&#xff0c;提供靈活的跳轉棧操作&#xff0c;從而便捷的實現對不同頁面的訪問和復用。 我們之前學習過Tabs組件&#xff0c;這個組件里面也有支持跳轉的方式&#xff0c;Navigati…

華為開源自研AI框架昇思MindSpore應用案例:基于MindSpore框架實現PWCNet光流估計

如果你對MindSpore感興趣&#xff0c;可以關注昇思MindSpore社區 1 環境準備 1.進入ModelArts官網 云平臺幫助用戶快速創建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;選擇下面的云平臺以開始使用昇思MindSpore&#xff0c;可以在昇思教程中進入ModelArts官網 創建…

虛幻基礎:UI

文章目錄 控件藍圖可以裝載其他控件藍圖可以安裝其他藍圖接口 填充&#xff1a;相對于父組件填充水平框尺寸—填充—0.5&#xff1a;改變填充的尺寸填充—0.5&#xff1a;改變與父組件的距離 錨點&#xff1a;相對于父組件的控件坐標系原點&#xff0c;屏幕比例改變時&#xff…

監控平臺——SkyWalking部署

一、環境準備 先下載SkyWalking安裝包&#xff0c;需要注意的是SkyWalking 版本在10.X以上使用的nacos-client是2.X&#xff0c;如果安裝的Nacos版本是1.X就會存在兼容性的問題。由于本人使用的SpringBoot項目是2.7.X版本&#xff0c;安裝的Nacos版本只能是1.X版本的&#xff…