SOME/IP
介绍
SOME/IP是一种汽车中间件解决方案,可用于控制消息。它从一开始就被设计为完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR 设备,以及头戴设备或远程通信设备。它还确保SOME/IP支持信息娱乐域以及车辆中其他域的功能,从而允许SOME/IP用于大多数替换场景以及更传统的CAN场景。
SOME/IP工作在传输层之上,即硬件无关
功能
SOME/IP 支持广泛的中间件功能:
- 序列化 – 线上输入输出转换。
- 远程过程调用 (RPC) and Messaging – 实现函数和其他消息的远程调用。
- 服务发现 (SD) – 动态查找、功能、配置。
- 发布/订阅 (Pub/Sub) – 动态配置需要哪些数据并应发送到客户端。
- UDP信息块 – 允许通过 UDP 传输大型 SOME/IP 消息,而无需分段。
序列化
SOME/IP序列化被设计成高效率的,它使用极少的RAM和CPU资源。 是通过二进制和不可读的格式实现的。基本上,各设备都有所有的参数。消息的格式与消息的内存中表示形式(打包结构)非常相似或在许多情况下完全相同。
SOME/IP能序列化如下基本的数据类型(数据类型被默认编码成网络字节序也就是大端序,当然也可以编码成小端序):
- boolean: 一字节的布尔类型
- uint8: 无符号的一字节整型
- uint16: 无符号的两字节整型
- uint32: 无符号的四字节整型
- uint64: 无符号的八字节整型
- sint8: 有符号的一字节整型
- sint16: 有符号的两字节整型
- sint32: 有符号的四字节整型
- sint64: 有符号的八字节整型
- float32: 无符号的一字节整型
- float64: 无符号的一字节整型
SOME/IP能序列化如下的复杂的数据类型:
- struct: 结构体
- string: 字符串
- array: 数组
- enumeration: 枚举
- bitfield: 位域
- union: 共用体
远程过程调用 (RPC) 和消息体
SOME/IP服务支持以下几种消息:
- 请求/响应方法: 从客户端发送到服务器的请求和从服务器发送到客户端的响应。此外,SOME/IP 允许错误响应从服务器发送回客户端,而不是常规响应。此功能可用于在错误情况下实现不同的数据包格式。
- 即发即弃方法:从客户端发往服务端的请求。
- 事件:从服务器发送到相关客户端的事件。哪个客户端需要此事件将通过 SOME/IP-SD 确定
- 域: 字段可以具有选项通知程序(循环发送或更改时发送的事件)、可选资源库(用于更新字段的请求/响应方法)和可选 getter(用于读取字段当前值的请求/响应方法)。
SOME/IP报文格式
Message ID:
在SOME/IP里的Message ID被用来标识应用程序或事件的方法。MessageID跟CAN ID一样,它在整个车载网络总应该是唯一的。Message ID的规划由用户决定。
Message ID包含两个域,一个是service ID,另一个是Method ID。按如下方式构成:
Service ID [16 Bit] | 0 [1 Bit] | Method ID [last 15 Bit] |
Length:
长度域里的长度值为从Request ID/Client ID开始到SOME/IP消息尾的字节数。
Request ID:
请求 ID 用于区分同一方法、事件、getter 或 setter 的多个用例。应根据订阅者和提供者组合使用唯一的请求 ID。
提供者应当从请求中复制Request ID添加到响应中。这允许订阅者区分多个挂起的请求。
并且订阅者不应该使用相同的请求 ID,直到收到响应和/或不再期望收到响应。
Request ID 有两个子域 Client ID和Session ID,如下表所示。
Client ID [16 Bits] | Session ID [16 Bits] |
Client ID:
客户端 ID 也是唯一标识符,用于区分使用相同Method而来自不同提供者的响应。
Session ID:
session ID也是唯一的标识,用来区分使用相同Method的多个调用,此处的提供者可以相同。
请求/响应方法应使用带会话 ID 的会话处理。会话 ID 应在每次调用后递增。当会话 ID 达到 0xFFFF 时,它将滚动并重新启动。如果响应的会话 ID 与请求的会话 ID 不匹配,订阅者必须忽略该响应。
Protocol Version:
协议版本应该是一个字节大小包含SOME/IP的协议版本。
Interface Version:
接口版本应该是一个字节大小,包含服务接口的主版本。
Message Type:
消息类型字段用于区分不同类型的消息,应包含下表中所示的以下值。
Return Code:
返回码用于指示请求是否已成功处理。 支持的返回码如下所示。
Message Type | Allowed Return Codes |
---|---|
REQUEST | N/A set to 0x00 (E_OK) |
REQUEST_NO_RETURN | N/A set to 0x00 (E_OK) |
NOTIFICATION | N/A set to 0x00 (E_OK) |
RESPONSE | Many Sub Type are there |
ERROR | Many sub types are there , other then 0x00 (E_OK) |
Payload:
在此字段中,实际数据将被传输,有效载荷字段没有固定大小,它是用户/应用程序定义的。但是,SOME/IP 中有效负载数据的最大限制取决于传输协议。使用 UDP 的 SOME/IP 有效负载大小为 0 到 1400 字节。
有效负载包含事件的数据元素和方法的参数。
在 SOME/IP 应用程序中,数据将使用“有效负载”字段上的序列化进行存储。在 SOME/IP 数据序列化中也依赖于配置参数,数据的序列化在最开头有讨论。
参考
Scalable service-Oriented MiddlewarE over IP (SOME/IP)
发送SOME/IP数据包的工具 https://gitee.com/wq897/FibexConverter.git
SCALABLE SERVICE-ORIENTED MIDDLEWARE OVER IP (SOME/IP)
相关文章:

SOME/IP
介绍 SOME/IP是一种汽车中间件解决方案,可用于控制消息。它从一开始就被设计为完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR 设备,以及头戴设备或远程通信设备。它还确保SOME/IP支持信息娱乐域以及车辆中其他域…...
[2023.09.12]: Yew应用开发的第一个hook--use_state
Yew的SSR模式推荐使用function_component组件,并且在function_component中使用hooks。其中,我使用到的第一个hook是use_state。use_state的设计意图与React中的useState非常相似,都是为了保存并修改当前的状态。然而,由于Yew是用R…...

使用Langchain+GPT+向量数据库chromadb 来创建文档对话机器人
使用LangchainGPT向量数据库chromadb 来创建文档对话机器人 一.效果图如下: 二.安装包 pip install langchainpip install chromadbpip install unstructuredpip install jieba三.代码如下 #!/usr/bin/python # -*- coding: UTF-8 -*-import os # 导入os模块&…...
Spring Cloud(Finchley版本)系列教程(一) 服务注册与发现(eureka)
Spring Cloud(Finchley版本)系列教程(一) 服务注册与发现(eureka) 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 如有错误恳请大家批评指正,与大家共同学习、一起成长,万分感谢。 一、构建环境 Spring Cloud的构建工具可以使用Maven或Gr…...

【大数据】美团 DB 数据同步到数据仓库的架构与实践
美团 DB 数据同步到数据仓库的架构与实践 1.背景2.整体架构3.Binlog 实时采集4.离线还原 MySQL 数据5.Kafka2Hive6.对 Camus 的二次开发7.Checkdone 的检测逻辑8.Merge9.Merge 流程举例10.实践一:分库分表的支持11.实践二:删除事件的支持12.总结与展望 1…...

分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测
分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU鲸鱼算法优化卷积双向门控循环单元数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-BiGRU多特征分类…...

mac使用squidMan设置代理服务器
1,下载squidMan http://squidman.net/squidman/ 2, 配置SquidMan->Preference 3, mac命令窗口配置 export http_proxy export https_porxy 4,客户端配置(centos虚拟机) export http_proxyhttp://服务器ip:8080 export https…...

大数据Flink(七十八):SQL 的水印操作(Watermark)
文章目录 SQL 的水印操作(Watermark) 一、为什么要有 WaterMark...

【Linux】Qt Remote之Remote开发环境搭建填坑小记
总体思路 基于WSL2(Ubuntu 22.04 LTS)原子Alpha开发板进行Qt开发实验,基于Win11通过vscode remote到WSL2,再基于WSL2通过Qt 交叉编译,并通过sshrsync远程到开发板,构建起开发工具链。 Step1 基于Win11通过…...

ATFX汇市:离岸人民币大幅升值,昨日盘中跌破7.3关口
ATFX汇市:美国CPI数据即将公布之际,周一美元指数大跌,带动离岸人民币升值0.85%,实现3月14日以来的最大单日升值幅度,当日汇率(USDCNH)最低触及7.292,突破7.3000关口。消息面上&#…...
Spring Boot 配置 Knife4j
一、引入 maven <!-- 引入 knife4j 文档--> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi2-spring-boot-starter</artifactId> <version>4.1.0</version> </dependency>二…...
Java项目中遇到uv坐标如何转换成经纬度坐标
将UV坐标(通常指平面坐标,如二维地图坐标)转换为经纬度坐标(地理坐标)通常需要知道一个参考点的经纬度坐标,以及两者之间的比例关系。这是因为UV坐标通常用于在地图上绘制图形或标记点,而经纬度…...
std : : unordered_map 、 std : : unordered_set
一.简介 std::unordered_map 是C标准库中的一种关联容器,它提供了一种用于存储键-值对的数据结构,其中键是唯一的,且不会按特定顺序排序。与 std::map 不同,std::unordered_map 使用哈希表作为其底层数据结构,因此它具…...

Python解释器和Pycharm的傻瓜式安装部署
给我家憨憨写的python教程 有惊喜等你找噢 ——雁丘 Python解释器Pycharm的安装部署 关于本专栏一 Python解释器1.1 使用命令提示符编写Python程序1.2 用记事本编写Python程序 二 Pycharm的安装三 Pycharm的部署四 Pycharm基础使用技巧4.1 修改主题颜色4.2 修改字体4.3 快速修…...
14 Python使用网络
概述 在上一节,我们介绍了如何在Python中使用Json,包括:Json序列化、Json反序列化、读Json文件、写Json文件、将类对象转换为Json、将Json转换为类对象等内容。在这一节,我们将介绍如何在Python中使用网络。Python网络编程覆盖的范…...
AI ChatGPT 各大开放平台一览 大模型 Prompt
AI ChatGPT 各大开放平台一览 大模型 Prompt 国内 百度 ERNIE Bot 文心一言阿里巴巴 通义千问腾讯 Hunyuan BOT 混元 (暂未发布)华为 盘古旷视 ChatSpot科大讯飞 讯飞星火网易 子曰(暂未发布)京东 言犀奇安信 Q-GPT商汤科技 商量S…...

全球汽车安全气囊芯片总体规模分析
安全气囊系统是一种被动安全性的保护系统,它与座椅安全带配合使用,可以为乘员提供有效的防撞保护。在汽车相撞时,汽车安全气囊可使头部受伤率减少25%,面部受伤率减少80%左右。 汽车安全气囊芯片是整个系统的控制核心,并…...

USB适配器应用芯片 国产GP232RL软硬件兼容替代FT232RL DPU02直接替代CP2102
USB适配器,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术, 移动PC由于没有电池,电源适配…...

卫星物联网生态建设全面加速,如何抓住机遇?
当前,卫星通信无疑是行业最热门的话题之一。近期发布的华为Mate 60 Pro“向上捅破天”技术再次升级,成为全球首款支持卫星通话的大众智能手机,支持拨打和接听卫星电话,还可自由编辑卫星消息。 据悉,华为手机的卫星通话…...

SAP GUI 8.0 SMARTFORMS 使用SCR LEGACY TEXT EDITOR GUI8.00 禁用MSWORD
Smartforms使用WORD作为编辑器是很痛苦的一个事情,不支持拖拽,还很慢,各种不习惯,总之是非常的不舒服,能导致失眠。 在S/4以前的系统,可以使用TCODE I18N或者程序RSCPSETEDITOR或者暴力党直接改表TCP0I来…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地
NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配,成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景,通过标准化 SQL 工作台与细粒度权限管控两大能力,助力企业安全高效…...

SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
【导读】 本文针对无人机(UAV)视频中目标尺寸小、运动快导致的多目标跟踪难题,提出一种更简单高效的方法。核心创新在于从低置信度检测启动跟踪(贴合无人机场景特性),并改进传统外观匹配算法以关联此类检测…...

河北对口计算机高考MySQL笔记(完结版)(2026高考)持续更新~~~~
MySQL 基础概念 数据(Data):文本,数字,图片,视频,音频等多种表现形式,能够被计算机存储和处理。 **数据库(Data Base—简称DB):**存储数据的仓库…...