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:

消息类型字段用于区分不同类型的消息,应包含下表中所示的以下值。

Message type in SOME/IP

Return Code:

返回码用于指示请求是否已成功处理。 支持的返回码如下所示。

Message TypeAllowed Return Codes
REQUESTN/A set to 0x00 (E_OK)
REQUEST_NO_RETURNN/A set to 0x00 (E_OK)
NOTIFICATIONN/A set to 0x00 (E_OK)
RESPONSEMany Sub Type are there
ERRORMany 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)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis6搭建高可用的多主多从集群

Redis6搭建高可用的多主多从集群 环境准备搭建redis6集群安装redis6修改配置文件修改cluster-enabled修改cluster-config-file修改cluster-node-timeout 启动集群 环境准备 首先我们需要6台redis,那么为啥是6太呢?是因为我们要部署多master和多slaver集…

Competitive Collaboration 论文阅读

论文信息 题目:Competitive Collaboration: Joint Unsupervised Learning of Depth, Camera Motion, Optical Flow and Motion Segmentation 作者:Anurag Ranjan, Varun Jampani, Lukas Balles 来源:CVPR 时间&#x…

自己开发一个接口文档页面html

演示效果 具体代码如下 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>框架框架文档页面</…

前端实现页面通过canvas添加全屏水印

写在前面&#xff0c;博主是个在北京打拼的码农&#xff0c;从事前端工作5年了&#xff0c;做过十多个大大小小不同类型的项目&#xff0c;最近心血来潮在这儿写点东西&#xff0c;欢迎大家多多指教。 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何…

IDEA新建的Moudle失效显示为灰色

现象&#xff1a;IDEA新建的Moudle失效显示为灰色&#xff01;&#xff01;&#xff01; 解决方案&#xff1a; 1. 右键点击父模块&#xff0c;选择Open Moudle Settings&#xff1a; 2. 点击加号&#xff0c;选择Import Moudle - 导入模块&#xff1a; 3. 找到对应模块的po…

vue 将public文件下的图片引入.vue文件内

data() {return {publicPath:process.env.BASE_URL,} }<div :style"{backgroundImage: url(${publicPath}images/tradingRegular_images/rectBg.png)}">11 </div>

【前端demo】CSVJSON转换器 原生实现:CSV转换为JSON,JSON转换为CSV

文章目录 效果过程textareaTooltip提示工具按钮的min-width判断输入是否是CSV或JSONJSON与CSV样例JSON转为CSVCSV转为JSON不足之处 代码HTMLCSSJS 其他demo 效果 效果预览&#xff1a;CSV&JSON Converter (codepen.io) 参照的预览&#xff1a;JSV Converter(gpaiva00.git…

【1++的数据结构】之map与set(二)

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的数据结构】 文章目录 一&#xff0c;前言二&#xff0c;红黑树的概念及其性质三&#xff0c;红黑树的插入四&#xff0c;红黑树的验证五&#xff0c;map与set的封装红黑树迭代器的实现map重载…

卧槽,发现一个Python技术变现神器!

最近收到了很多朋友的留言&#xff0c;几乎全是关于爬虫与逆向破解技术的问题咨询。包括小程序逆向、APP逆向、Web逆向、数据加密、加固解密、cookie防护突破、表单加密、动态签名加密、分包反编译在内的&#xff0c;爬虫逆向相关技术&#xff0c;不断地被无数人反复问及。 看…

spark集成hudi

启动spark-shell spark-shell \ > --jars /opt/software/hudi-spark3.1-bundle_2.12-0.12.0.jar \ > --conf spark.serializerorg.apache.spark.serializer.KryoSerializer\ > --conf spark.sql.extensionsorg.apache.spark.sql.hudi.HoodieSparkSessionExtension2…

RuoYi若依管理系统最新版 基于SpringBoot的权限管理系统

RuoYi是一个后台管理系统&#xff0c;基于经典技术组合&#xff08;Spring Boot、Apache Shiro、MyBatis、Thymeleaf&#xff09;主要目的让开发者注重专注业务&#xff0c;降低技术难度&#xff0c;从而节省人力成本&#xff0c;缩短项目周期&#xff0c;提高软件安全质量。 本…

如何短期通过PMP考试?(含pmp干货)

一般PMP的准备考试时间都是一个月到三个月之间&#xff0c;一般都不会花超过半年的时间去准备考试的&#xff0c;毕竟想要学习项目管理的人一般应该都还是讲究高效率的&#xff0c;对待考试肯定也是在短时间内去高效学习备考的。 但对于怎样在短期内能够极好的去迎战PMP考试&a…