车载以太网网络测试-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.mzph.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…