基于 IP 的可扩展的面向服务的中间件 (SOME/IP)

概述

SOME/IP 是一种汽车中间件解决方案,可用于控制消息。它从一开始就被设计为完美适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR 设备,以及最高主机或远程信息处理设备。还确保 SOME/IP 支持信息娱乐域以及车辆中其他域的功能,允许 SOME/IP 用于 MOST 替换场景以及更传统的 CAN 场景。

虽然 IT 解决方案通常只支持单个中间件功能(例如 RPC 或发布/订阅),但 SOME/IP 支持广泛的中间件功能:

  • 序列化——在线表示的转换和转换。
  • 远程过程调用 (RPC) 和消息传递——实现函数和其他消息的远程调用。
  • 服务发现 (SD) – 动态查找和功能并配置其访问。
  • 发布/订阅 (Pub/Sub) – 动态配置需要哪些数据并将其发送给客户端。
  • UDP 消息分段– 允许通过UDP传输大型 SOME/IP 消息而无需分段。

序列化

SOME/IP 序列化被设计为非常高效;即它使用最少的 RAM 和 CPU 资源。这是通过使用二进制和非描述性格式来实现的。基本上所有参数都写在彼此后面。消息的格式与消息的内存表示(打包结构)非常相似或在许多情况下完全相同。

SOME/IP 可以序列化以下基本数据类型(数据类型默认以网络字节顺序/大端编码,但也可以以小端编码):

  • 布尔值:一个 8 位字段,编码 False (0) 或 True (1)。不允许使用所有其他值。
  • uint8: 8 位大小的无符号整数。
  • uint16: 16 位大小的无符号整数。
  • uint32: 32 位大小的无符号整数。
  • uint64: 64 位大小的无符号整数。
  • sint8: 8 位大小的有符号整数。
  • sint16: 16 位大小的有符号整数。
  • sint32: 32 位大小的有符号整数。
  • sint64: 64 位大小的有符号整数。
  • float32: 32 位大小的浮点数。
  • float64: 64 位大小的浮点数。

SOME/IP 可以序列化以下复杂数据类型:

  • struct:组合了预定义参数列表的参数。一个结构可以从一个可选的长度字段开始,该字段计算长度字段之后结构的所有字节。
  • string:固定长度或动态长度的字符串,用于传输 ascii、UTF-8 或 UTF-16 字符。对于动态长度字符串,该字符串以一个 big-endian 编码的长度字段开始,计算字符串字符使用的字节数。
  • 数组:包含相同参数类型的重复的参数。这可以是预定义数量或动态数量的参数。对于具有动态长度的数组,使用长度字段。
  • 枚举:具有命名不同值的选项的 uint。
  • 位域: 8、16 或 32 位参数,每一位代表一个布尔值。每个布尔值都可以有一个名称以及每个 True 和 False 值的名称。
  • union:一个参数,可以携带一个预定义的参数类型的参数,在运行时确定。序列化使用长度字段、类型字段和参数的数据。

长度和类型字段的大小为 32 位(默认),可配置为 0、8、16 或 32 位。所有长度和类型字段都以网络字节顺序/大端编码。

远程过程调用 (RPC) 和消息传递

某些/IP 服务支持以下消息:

  • 请求/响应方法:从客户端发送到服务器的请求和从服务器发送回客户端的响应。此外,SOME/IP 允许将错误响应从服务器发送回客户端,而不是常规响应。此功能可用于在错误情况下实现不同的有效负载格式。
  • Fire and Forget 方法:请求从客户端发送到服务器。
  • 事件:事件从服务器发送到相关客户端。哪个客户端需要此事件将通过 SOME/IP-SD 确定。
  • 字段:一个字段可以有一个选项通知器(循环或更改时发送的事件)、一个可选的设置器(更新字段的请求/响应方法)和一个可选的获取器(一个请求/响应方法来读取字段的当前值。)

SOME/IP 序列化的专有扩展

SOME/IP 已经在消息序列化方面支持了很大的灵活性,比如稍后向消息或内部结构添加参数。

在后来的 AUTOSAR 版本中,专有扩展(最初被错误地称为 TLV 扩展)被添加到 SOME/IP 中,以支持更大的灵活性。基本上参数和/或结构成员可以以数据 ID 和长度指示作为前缀。虽然这会降低序列化的效率,但它增加了灵活性,例如从消息中删除参数或稍后重新排序参数。要使用此功能,API 和应用程序也需要支持此功能。

由于有限的灵活性和高开销,这个扩展目前没有被广泛使用。

请记住,并非所有 SOME/IP 实现都支持此扩展,因为它不是原始 SOME/IP 的一部分。

AUTOSAR 支持

SOME/IP 是唯一已知的旨在集成到 AUTOSAR 4.x 版本中的中间件:

  • AUTOSAR 4.0 – 对已经存在的 SOME/IP 消息的基本支持。
  • AUTOSAR 4.1 – 添加了对 SOME/IP-SD 和发布/订阅的支持。
  • AUTOSAR 4.2 – 添加了转换器以进行序列化以及其他优化。
  • AUTOSAR 4.3 – 修复了一些转换器错误,添加了对带有 SOME/IP-TP 的大型 UDP 消息的支持以及一些/IP-SD 优化。

有关 AUTOSAR 规范,请参阅出版物

开源工具支持

由于 Wireshark 3.2 SOME/IP 支持是公开的!去Wireshark获取它。Wireshark 支持 SOME/IP、SOME/IP-SD、SOME/IP-TP 和可配置的 SOME/IP 有效载荷剖析。在接下来的版本中,添加了一些重要的改进,比如 TECMP 支持,如果你在打开的情况下进行捕获。

可以在github上找到有效载荷剖析配置的生成器。

目前,Wireshark(3.6 版?)和配置生成器中添加了一些更令人兴奋的功能。敬请关注。


版权所有 2012 – 2021  Lars Völker 博士。此处陈述的意见不一定是我雇主的意见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值