译:SOME/IP 技术细节
原文: SOME/IP technical details
SOME/IP, Scalable service-Oriented MiddlewarE over IP (基于 IP 可扩展面向服务中间件)
概述
SOME/IP 是一种可用于“控制消息”的汽车中间件解决方案。它从一开始就被设计为完美地适合不同大小和不同操作系统的设备,包括小型设备如摄像机、AUTOSAR 设备,上至头部单元或远程信息处理设备,SOME/IP 还确保支持信息娱乐域的功能以及汽车中其他域的功能,允许 SOME/IP 用于大多数替换场景以及更传统的 CAN 场景。
SOME/IP 支持广泛的中间件功能:
- Serialization —— 序列化与反序列化。
- Remote Procedure Call (RPC) and Messaging —— 实现对函数以及其他消息的远程调用。
- Service Discovery (SD) —— 服务发现,动态查找并配置其访问。
- Publish/Subscribe (Pub/Sub) —— 发布与订阅,动态配置哪些数据是需要的以及应该发送给客户端的。
- Segmentation of UDP messages —— UDP 消息分包,允许通过 UDP 传输 SOME/IP 大型消息而无需分段。
序列化
SOME/IP 序列化被设计为高效,比如它使用最小的 RAM 和 CPU 资源。这是通过使用二进制和非描述性格式实现的,基本上,所有的数据都写在彼此后面,消息的格式与消息的内存表示(打包结构)非常相似,或者在许多情况下完全相同。
SOME/IP 可以序列化以下基本数据类型(默认情况下,数据类型以网络字节序/大端序编码,但也可以以小端序编码):
- boolean: 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 字符,对于动态长度字符串,字符串以一个大端序编码的长度字段开始,该字段计算字符串所使用的字节数。
- array: 包含相同数据类型的重复的数据。这可以是参数的预定义数量或动态数量,对于具有动态长度的数组则使用长度字段。
- enumeration: 具有命名不同值选项的 uint。
- bitfield: 8、16 或 32 位参数,每个位表示布尔值。每个布尔值可以有一个名称以及每个值的真值和假值的名称。
- union: 可以携带预定义参数类型的参数的参数,该参数在运行时确定,序列化使用长度字段、类型字段和参数的数据。
长度和类型字段的大小为 32 位(默认值),可以配置为 0、8、16 或 32 位,所有长度和类型字段都以网络字节序/大端序编码。
远程过程调用和消息传递
SOME/IP 服务支持以下消息:
- Request/Response Methods: 从客户端发送到服务器的请求 (Request) 和从服务器发送回客户的响应 (Response)。此外,SOME/IP 允许将错误响应从服务器发送回客户端,而不是常规响应,此功能可用于在错误情况下实现不同的 payload 格式。
- Fire and Forget Methods: 从客户端向服务器发送请求。
- Event: 事件 (Event) 从服务器发送到相关客户端,通过 SOME/IP-SD 确认哪个客户端需要此事件。
- Field: 字段 (Field) 可以有一个可选的通知器 notifier(事件循环发送或更改时发送),一个可选的 setter(更新字段的请求/响应方法)和一个可选的 getter(读取字段当前值的请求/应答方法)。
SOME/IP 序列化的专有扩展
SOME/IP 已经在消息的序列化中支持了很多灵活性,比如延后向消息或者结构体内部添加参数。
在后面的 AUTOSAR 版本中,SOME/IP 添加了专有扩展(最初错误地称为 TLV 扩展)以支持更多的灵活性,基本上,参数和/或结构成员可以以数据 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 消息的支持,以及进行了 SOME/IP-SD 优化。
有关 AUTOSAR 规范,请参阅标准。
参考
http://www.some-ip.com
http://www.some-ip.com/details.shtml
http://www.some-ip.com/standards.shtml
欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景
▽
\bigtriangledown
▽ 译:vsomeip 10 分钟阅读
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)