深入浅出:SOME/IP-SD的工作原理与应用

目录

往期推荐

相关缩略语

SOME/IP 协议概述

协议介绍  

SOME/IP TP 模块概述和 BSW 模块依赖性  

原始 SOME/IP 消息的Header格式

SOME/IP-SD 模块概述

模块介绍

BSW modules依赖

客户端-服务器通信示例

Message 结构

用于SD服务的BSWM状态处理


往期推荐

  1. ETAS工具链自动化实战指南<一>
  2. ETAS工具链自动化实战指南<二>
  3. ETAS工具链自动化实战指南<三>
  4. AUTOSAR工程师必读:Artop的核心功能
  5. Vector工具链自动化实战指南<一>
  6. isolar高手秘籍| ECU Configuration三分钟速成!
  7. 掌握核心步骤:RTA-BSW以太网配置全解析
  8. 一文详解TC399 CAN MCAL 配置
  9. LSL常见应用场景及示例<一>
  10. LSL常见应用场景及示例<二>
  11. LSL常见应用场景及示例<三>
  12. 为什么Autosar钟情arxml而非json?大揭秘!

目录

图片

从 AUTOSAR 的整体视角来看,SOME/IP 和 SD 是两个不同的组件。然而,它们在许多其他组件(如 RTE、LdCom、SoAd、BswM、PduR 等)之间相互协作,我们需要在配置中关注它们之间的关系。

通常,SOME/IP-SD 依赖于 SOME/IP。SOME/IP 本身支持 TCP 和 UDP 通信,但 SOME/IP-SD 仅限于通过 UDP 使用 SOME/IP。

图片

相关缩略语

  • SOME/IP: Scalable service-Oriented MiddlewarE over IP(基于 IP 的可扩展服务中间件)

  • SOME/IP-SD: SOME/IP Service Discovery(SOME/IP 服务发现)

  • N-PDU: Network Layer Protocol Data Unit(网络层协议数据单元)

  • I-PDU: Interaction Layer Protocol Data Unit(交互层协议数据单元)

  • SrvcMgr: Services Manager(服务管理器)

  • SoAd: Socket Adaptor(套接字适配器)

  • Sd: Service Discovery Module in AUTOSAR(AUTOSAR 中的服务发现模块)

  • SD: Service Discovery(服务发现)

  • RPC: Remote Procedure Call

  • LdCOM: Large Data COM

SOME/IP 协议概述

协议介绍  

SOME/IP 是一种汽车中间件解决方案,可用于控制消息。它从一开始就设计成能够完美适应不同大小和不同操作系统的设备。

SOME/IP 提供网络上的面向服务的通信。在面向服务的数据传输中,发送方仅在网络中的至少一个接收方需要这些数据时才发送数据。这种方法的优点是网络和所有连接的节点不会被不必要的数据所负载。

SOME/IP 基于列出服务功能的服务定义。

SOME/IP 支持广泛的中间件功能:

  • 序列化

  • 远程过程调用(RPC)

  • 服务发现(SD)

  • 发布/订阅(Pub/Sub)

SOME/IP TP 模块概述和 BSW 模块依赖性  

SOME/IP TP 模块的任务是对不适合放入一个 UDP 数据包中的 SOME/IP 数据包进行分段。在接收端,它将接收到的 SOME/IP 分段重新组装起来。

SOME/IP TP 模块与 PDU-R 在传输和接收路径上都进行交互。

图片

上图显示了 SOME/IP 组件的通信组件。从 SWCs 的角度来看,我们可以通过以太网网络发送/接收通信信号。这些信号将被封装在 I-PDU 和额外的 SOME/IP 头部(N-PDU)中。

在发送信号时,我们将使用 RTE 的接口访问 LdCOM 来分配 I-PDU 到发送的数据。该 I-PDU 将被路由到 PDU-R,PDU-R 将其路由到 SOME/IP 以封装其头部到 I-PDU,然后返回 N-PDU,该 N-PDU 将从 PDU-R 路由到 SoAd 和以太网网络。接收路径则相反。

原始 SOME/IP 消息的Header格式

Header的结构如下图所示。

图片

1.Message ID (4 字节):消息 ID 是一个 32 位标识符,用于识别对应用程序方法的 RPC 调用或事件。消息 ID 应在整个系统(即车辆)中唯一。

    • Service ID:每个服务的唯一标识符。

    • Method ID:方法的范围是 0-32767,事件的范围是 32768-65535。

2.Length (4 字节):负载的长度以字节为单位,从请求 ID/客户端 ID 开始,到 SOME/IP 消息的末尾(包括下一个 ID,即 8 个额外字节)。

3.RequestID (4 字节):请求 ID 使提供者和订阅者能够区分对同一方法、事件、getter 或 setter 的多个并行使用。请求 ID 应仅在提供者和订阅者组合(即一个订阅)中唯一。在 AUTOSAR 中,请求 ID 由客户端 ID 和会话 ID 组成,如下所示:

    • Client ID:是 ECU 内部调用客户端的唯一标识符。客户端 ID 允许 ECU 区分来自多个客户端的对同一方法的调用。

    • Session ID:是订阅者为每个调用选择的唯一标识符。会话 ID 允许订阅者区分对同一方法的多个调用。请求/响应方法应使用会话处理和会话 ID。会话 ID 应在每次调用后递增。当会话 ID 达到 0xFFFF 时,应回绕并重新开始。如果响应的会话 ID 不等于请求的会话 ID,订阅者必须忽略该响应。

4.Protocol Version(1 字节):协议版本应为一个 8 位字段,包含 SOME/IP 协议版本。

5.Interface Version(1 字节):接口版本应为一个 8 位字段,包含服务接口的主要版本号。

6.Message Type(1 字节):消息类型字段用于区分不同类型的消息,应包含以下值:

    • 正常请求(消息类型 0x00)应由响应(消息类型 0x80)回答,如果没有发生错误。如果发生错误,则发送错误消息(消息类型 0x81)。

    • 还可以发送没有响应消息的请求(消息类型 0x01)。用于通过通知更新值的回调接口存在(消息类型 0x02)。

    • 消息类型的第 3 高位(0x20)称为 TP-标志,应设置为 1,以表明当前的 SOME/IP 消息是一个段。消息类型为请求(0x00)的段具有消息类型(0x20),消息类型为响应(0x80)的段具有消息类型(0xa0),依此类推。

图片

7.Return Code(RetCode - 1 字节):返回码用于指示请求是否成功处理。为了简化头部布局,每个消息都会传输返回码字段。

图片

PRS_SOMEIP_00191 如下所示:

图片

SOME/IP-SD 模块概述

模块介绍

AUTOSAR 服务发现(SD)模块提供了在车载网络中检测和提供可用服务(即功能实体)的功能。为此,它利用了 IP 多播和所谓的 SOME/IP-SD 消息。

SD 模块的主要任务是管理车载通信中称为服务的功能实体的可用性,以及控制事件消息的发送行为。这允许仅将事件消息发送给需要它们的接收者(发布/订阅)。这里描述的解决方案也被称为 SOME/IP-SD。

AUTOSAR_TR_SomeIpExample_4.2.1

图片

本地 ECU 需要处理两种不同类型的服务:

  • Server Services:本地 ECU 向车辆其他部分提供服务器服务实例(即本地实例),可以被视为该服务实例的服务器。

  • Client Services:本地 ECU 可以使用另一 ECU 提供的服务器服务实例,可以被视为该服务实例的客户端。

对于Server Services,本地 ECU 的 SD 模块需要(server 角色):

    • 在服务可用时提供本地服务;即提供服务的 SWC 已准备就绪,并且服务在当前 ECU 状态下可用。

    • 当服务不再可用时,撤回本地服务的提供(停止提供)。

    • 回应并响应其他 ECU 的发现请求。

对于Client Services,本地 ECU 的 SD 模块需要(Client 角色):

    • 根据配置监听服务提供和发现,然后将这些信息存储在易失性内存中。

    • 根据配置监听停止提供消息,并将这些信息存储在易失性内存中。

    • 根据当前 ECU 及其 SWC 的状态发送发现请求。

BSW modules依赖

图片

SOME/IP-SD 使用服务,这些服务由 BswM 管理。当我们启动系统时,我们应该从 BswM 激活配置好的 SD 服务,之后通信将由 SD 组件及其邻接组件 Pdu-R、SoAd、BswM 和以太网网络处理。

如下图所示,展示了在 AUTOSAR 架构中 SOME/IP-SD 模块与其他 BSW 模块的交互关系。

图片

图片

对于控制路径,SOME/IP-SD 包括 SOME/IP 头部,但不包含 Message-ID 和 Length 字段本身。

客户端-服务器通信示例

下图展示了使用 SOME/IP-SD 协议的客户端与服务器实体之间的消息交换示例。

图片

具体步骤如下:

  1. 客户端发送 FindService 消息:客户端在多播中请求一个服务实例。

  2. 服务器接收 FindService 消息:服务器收到多播的 FindService 消息,并回复一个对应的 OfferService 消息,以告知服务实例的地址和端口,供客户端进行单播通信。

  3. 客户端收到 OfferService 消息后:根据 Sd 配置中指定的路由组,启用到 OfferService 消息中指定的单播地址的开放套接字连接:

    1. SdClientServiceActivationRef:用于执行远程过程调用(ConsumedMethod)。

    2. SdConsumedEventGroupUdpActivationRef:用于接收服务器事件(ConsumedEventGroup)。

  4. 客户端在服务器的 ProvidedMethod 上执行远程过程调用:使用单播,通过在第 3 步中打开的套接字连接进行。RPC 调用可以是“fire & forget",也可以返回值。

  5. 客户端请求订阅特定的 Eventgroup:通过 SubscribeEventgroup 消息进行订阅。

  6. 服务器确认订阅:服务器通过 SubscribeEventgroup 消息确认订阅。

  7. 服务器向订阅的客户端发送事件:事件可以是单播或多播,具体取决于配置。

Message 结构

图片

SOME/IP-SD 头部格式应遵循以下规范:

  • Message ID (Service ID/Method ID) [32 位]:0xFFFF 8100

    • Service ID [16 位]:服务发现消息中的服务 ID 始终设置为 0xFFFF。

    • EventID/MethodID  [16 位]:服务发现消息中的事件 ID/方法 ID 始终设置为 0x8100。

  • Request ID [32 位]

    • Client ID [32 位]:静态设置为 0x0000。

    • 第一个发送到多播地址的 SD 消息的会话 ID 为 0x0001,而发送给任何单播通信伙伴的第一个 SD 消息的会话 ID 也为 0x0001。

  • Protocol Version [8 位]:字段值静态设置为 0x01。

  • Interface Version [8 位]:字段值静态设置为 0x01。

  • Message Type [8 位]:字段值静态设置为 0x02。

  • Return Code:字段值静态设置为 0x00。

  • Flags [8 位]:SOME/IP-SD 头部以此字段开始。它用于传递全局服务发现信息,包括当前的最后重启状态以及接收单播消息的能力。Reboot Flag在重启后的所有消息中设置为 ‘1’,直到请求 ID 字段的会话 ID 包装并重新开始为 0x0001 为止。之后,Reboot Flag应设置为 ‘0’。

    • bit 0: Reboot Flag

    • bit 1: Unicast Flag

    • bit 2: Explicit Initial Data Control Flag

    • bit 3-7: 保留

  • Length of Entries Array [32 位]:条目数组的第一个字段应包含条目数组的字节数(不包括此 32 位字段)。

  • Entries Array Type 1

    • 服务

图片

    • Type 1  Entry format layout 的 Type 字段应携带以下值之一:

      • 0x00:表示 FindService。

      • 0x01:表示 OfferService 和 StopOfferService。

    • “Index First Option Run” 字段应携带此条目在选项数组中第一次选项运行的第一个选项的索引。

    • “Index Second Option Run” 字段应携带此条目在选项数组中第二次选项运行的第一个选项的索引。

    • “Number of Option 1” 字段应携带第一次选项运行所使用的选项数量。

    • “Number of Option 2” 字段应携带第二次选项运行所使用的选项数量。

    • “Service ID” 字段应携带服务的服务 ID(用于 Find、Offer 或 Stop Offering)。

    • “Instance ID” 字段应携带服务的实例 ID(用于 Find、Offer 或 Stop Offering)。如果不是单个实例而是所有实例都被寻址,则 “Instance ID” 字段应设置为 **0xFFFF**。

    • “Major Version” 字段应携带服务的主要版本。

    • TTL 字段定义了条目的有效时间(以秒为单位),对于 Stop-Entries,TTL 为 0。

    • “Minor Version” 字段应携带服务的次要版本。

  • Entries Array Type 2

    • 事件组

图片

    • Type 2 Entry format layout的 Type 字段应根据发送消息的目的携带以下值之一:

      • 0x06:表示 SubscribeEventgroup 和 StopSubscribeEventgroup。

      • 0x07:表示 SubscribeEventgroupAck 和 SubscribeEventgroupNack。

    • “Index Second Option Run” 字段应携带此条目在选项数组中第二次选项运行的第一个选项的索引。

    • “Number of Option 1” 字段应携带第一次选项运行所使用的选项数量。

    • “Number of Option 2” 字段应携带第二次选项运行所使用的选项数量

    • “Service ID” 字段应携带事件组服务的服务 ID。

    • “Instance ID” 字段应携带事件组服务的实例 ID。

    •  “Major Version” 字段应携带 Sd 服务器服务的主要版本。

    • TTL” 字段定义了条目的有效时间(以秒为单位),Stop-Entries 或 Nack-Entries 使用 TTL 为 0。

    • Reserved 字段应静态设置为 0x000。

    • Counter 字段用于区分相同的 Type 2 条目(例如,对同一事件组的多个订阅)。

用于SD服务的BSWM状态处理

图片

图片

                   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/34575.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【AI系统】EfficientFormer 系列

EfficientFormer 系列 本文主要介绍一种轻量化的 Transformer 结构,在获得高性能的同时,能够保持一定的推理速度。以延迟为目标进行优化设计。通过延迟分析重新探讨 ViT 及其变体的设计原则。 EfficientFormer V1 模型 EfficientFormer V1:基于 ViT 的…

vue3 vite ts day1

创建项目: npm init vitelatest 来创建项目 第二布: y 第三步:project name :项目名称 第四步:select a framework 选择框架 熟悉那种选择那种,当前选择vue 第五步:select a variant&…

dbus接口方法的variant类型传参详解

python实现c++中so库调用及dbus服务开发-CSDN博客 之前写的这篇博文介绍了如何创建一个dbus服务,但是注册的接口方法的入参还是比较简单的,实际上dbus的参数类型有很多种,调用方式也有多种,我们来逐一介绍下。 其实基础数据类型,如字符串、整型、浮点型、布尔型等大多数…

路由策略一

目录 匹配C类网络全部的子网 ip ip-prefix 1 permit 192.0.0.0 3 greater-equal 25 less-equal 32 ACL的组成: ACL编号:在网络设备上配置ACL时,每个ACL都需要分配一个编号,称为ACL编号,用来标识ACL。不同分类的AC…

摩尔线程 国产显卡 MUSA 并行编程 学习笔记-2024/12/03

Learning Roadmap: Section 1: Intro to Parallel Programming & MUSA Deep Learning Ecosystem(摩尔线程 国产显卡 MUSA 并行编程 学习笔记-2024/11/30-CSDN博客)UbuntuDriverToolkitcondapytorchtorch_musa环境安装(2024/11/24-Ubunt…

基于 MindQuantum 实现对 “天衍” 量子云平台真机的比特映射

MindQuantum 目前只支持量子模拟器,如果需要获得量子算法在真机上的实测数据,可以借助“天衍”量子云平台提供的真机。本文将介绍如何基于 MindQuantum 绘制“天衍”真机的拓扑图,并进而实现比特映射。 关于 MindQuantum 涉及比特映射的教程…

2025客服知识库工具推荐哪些?

在2025年,企业对于客服知识库工具的需求日益增长,这些工具不仅能够提升客户服务的效率和质量,还能增强客户满意度和忠诚度。以下是几款备受推崇的客服知识库工具。 1. HelpLook AI知识库 HelpLook AI知识库是一款企业级AI知识库系统&#x…

Docker运行hello-world镜像出现错误

错误类型&#xff1a; 解决方案&#xff1b; 配置加速地址&#xff1a;设置registry mirror sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://do.nark.eu.org","https://dc.j8.work"…

西南大学软件工程考研录取情况分析

西南大学软件工程学硕近三年呈现出招生规模稳定、复试线稳中有升的特点。2024届实际录取8人&#xff0c;复试分数线305分&#xff0c;复试录取率67%&#xff0c;相比去年复试线略有下降但仍高于2022届&#xff0c;显示出温和的竞争态势。 详细分析 1. 统招录取人数分析 2022-…

【测试工具JMeter篇】JMeter性能测试入门级教程(八):JMeter参数关联

JMeter参数关联&#xff0c;就是请求或者线程之间通过传递参数建立联系。一般&#xff0c;我们将一个请求的响应参数&#xff0c;作为另一个请求的入参。比如登录后的操作&#xff0c;第一步用来实现登录操作&#xff0c;然后将请求返回的token提取出来保存到某一个变量当中&am…

运算符重载(五)

目录 const成员函数const对象不可以调用非const成员函数非const对象可以调用const成员函数const成员函数内不可以调用其它的非const成员函数非const成员函数内可以调用其它的const成员函 取地址及const取地址操作符重载const补充场景1场景2场景3场景4 const成员函数 将const修…

论文阅读笔记:Adaptive Rotated Convolution for Rotated Object Detection

论文阅读笔记&#xff1a;Adaptive Rotated Convolution for Rotated Object Detection 1 背景1.1 问题1.2 提出的方法 2 创新点3 方法4 模块4.1 旋转卷积核4.2 路由函数4.3 自适应旋转卷积模块 5 效果5.1 与SOTA方法对比5.2 消融实验 论文&#xff1a;https://arxiv.org/pdf/2…

OPenCV 图片局部放大

m_image cv::imread("C:/Code/JPG/1.jpg");if (m_image.empty()) return;cv::imshow("原始图像", m_image); // TODO: 在此添加控件通知处理程序代码int width m_image.cols;int height m_image.rows;// 确定要放大的区域&#xff08;这里是图像中心部分…

SpringBoot项目启动报错-Slf4j日志相关类找不到

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

剧本杀门店预约系统开发,助力门店业务升级

剧本杀门店系统是一个统一管理门店的应用程序&#xff0c;能够让消费者通过系统与好友组局预订剧本杀游戏&#xff0c;节省到线下门店排队预约的时间&#xff0c;提高玩家的游戏体验感。同时商家也可以借助小程序高效管理、运营门店&#xff0c;提高门店的整体服务质量。 小程…

c语言指针练习

1.已知数组a[10]和b[10]中元素的值递增有序&#xff0c;用指针实现将两个数组中的元素按递增的顺序输出。 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {int a[10]{1,3,5,7,9,11,13,15,17,19};int…

MYSQL中的增删改查操作(如果想知道MYSQL中有关增删改查操作的知识,那么只看这一篇就足够了!)

前言&#xff1a;在 MySQL 中&#xff0c;增、删、改、查&#xff08;CRUD&#xff09;操作是基本的数据库操作&#xff0c;增操作&#xff08;INSERT&#xff09;用于插入数据&#xff0c;删操作&#xff08;DELETE&#xff09;用于删除数据&#xff0c;改操作&#xff08;UPD…

代码随想录-算法训练营day36(贪心算法06:单调递增的数字,监控二叉树,总结)

第八章 贪心算法 part06● 738.单调递增的数字 ● 968.监控二叉树 ● 总结 详细布置 738.单调递增的数字 https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html 968.监控二叉树 &#xff08;可以跳过&#xff09;本题是…

NeurIPS Spotlight|从分类到生成:无训练的可控扩散生成

近年来&#xff0c;扩散模型&#xff08;Diffusion Models&#xff09;已成为生成模型领域的研究前沿&#xff0c;它们在图像生成、视频生成、分子设计、音频生成等众多领域展现出强大的能力。然而&#xff0c;生成符合特定条件&#xff08;如标签、属性或能量分布&#xff09;…