SOME/IP

SOME/IP 不是广义上的中间件,严格的来讲它是一种通信协议,但中间件这个概念太模糊了,所以我们也一般称 SOME/IP 为通信中间件。

SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP。也就是基于 IP 协议的面向服务的可扩展性通信中间件协议。

所以,要弄清 SOME/IP 需要从它的名字出发,要搞清楚它的 3 个要素:

  • 面向服务 SOA
  • 基于 IP 协议之上的通信协议
  • 中间件

SOME/IP 功能

既然是通信中间件,那么做的就是通信相关的事情。
SOME/IP 能干的事情有 3 类:

  • 服务发现 (Service Discovery)
  • 远程服务调用 (RPC,remote producer call)
  • 读写进程信息 (Getter & Setter)

SOME/IP 与 CAN

CAN 是传统的汽车软件通信协议,CAN FD 是其扩展,它们与 SOME/IP 的主要区别如下:
中间件SOME/IP简述-LMLPHPCAN 协议是汽车软件开发最重要的通信协议,但随着汽车智能化程度越来越高,CAN 通信遇到的瓶颈越来越大,表现在 2 个维度:
通信速度
CAN 一般是 512kb/s,CAN FD 能到 1MB/s
通信负荷
CAN 是 8Byte,CAN FD 能到 64Byte,而 SOME/IP 能到 1500 Byte

SOME/IP 和车载以太网、IP关系

CAN 是基于信号在双绞线中传输信号,而 SOME/IP 是面向服务在车载以太网中传输信号。而 SOME/IP 中的 IP 是 Over IP ,也就是在 IP 协议层之上的意思。
TCP/IP、UDP 都是传统网络协议,网络协议是分层的,车载以太网网络协议也是一样的。位于协议栈的应用层,基于 TCP/UDP 协议之上的应用。
中间件SOME/IP简述-LMLPHP

SOME/IP 和 Autosar、SOA 的关系

SOME/IP 最初由宝马公司设计,2013 年被收录到 Autosar 4.1 规范。

AP和CP Autosar 都支持 SOME/IP 协议。一辆汽车中可能同时存在基于 AP Autosar 的 ECU 和基于 CP Autosar 的 ECU,它们之间存在 Signal2Service 操作,通过车载以太网中的 SOME/IP 之类的协议通信。

AP Autosar 是基于 SOA 理念设计的软件框架,而 SOME/IP 作为其通信协议,可以实现 Service 的 Publishe/Subscribe 通信,所以在汽车领域一般讲 SOA 不能不提到 AP Autosar,而讲到 SOME/IP 时,SOA 也会常被提起。

SOME/IP 的形态

具体到汽车软件开发,SOME/IP 有两种形态:

  • 集成到 Autosar 中的 Module
  • 集成到 Posix 系统中的独立的 Lib

需要注意 GENIVI 这个组织,它针对 SOME/IP 标准实现了开源 vsomeip 方案,vsomeip 能够独立集中到操作系统中。
中间件SOME/IP简述-LMLPHP

SOME/IP 的消息格式

SOME/IP 协议一般指代具体

  • SOME/IP
  • SOME/IP-SD
  • SOME/IP-TP

SOME/IP 消息结构:
中间件SOME/IP简述-LMLPHP

一个完整的 SOME/IP 消息,包含以下内容:

  • Message ID 代表 Sevice ID 或者 Method ID
  • Length 消息长度,从 Request ID 算起到
  • Request ID
  • Protocal Version 协议版本号
  • Interface Version 接口版本号
  • Message Type 消息类型
  • Return Code 返回编码
  • Payload 数据负载

Message ID
可以指代一个远程调用 RPC 的 Method 或者是一个服务的 Event。

Request ID
Client ID 用来区分不同的客户对象,Session ID 用来区分不同的对话。

Message Type
Message Type 用来标记消息类型。共有如下几种:
中间件SOME/IP简述-LMLPHP

Return Code
根据 MessageType 不同,Return Code 不同。 一般是 E_OK(0x00),但如果是 Response 或者 Error 的话就不会是 0x0。

Payload
SOME/IP 底层可以基于 TCP 或者 UDP,这使得 Payload 的容量不一样。
如果是 UDP 协议,那么 SOME/IP 大概限制在 1400 Bytes的容量。
但如果是基于 TCP 协议,通过数据分段传输,那么 SOME/IP 可以实现更大容量传输。

Endianess
所有的 SOME/IP Header 内容采用大端传输(big endian)。 而 Payload 中的数据存放顺序通过配置设置。

SOME/IP 支持的数据结构类型

基础数据类型
中间件SOME/IP简述-LMLPHP
结构化数据类型
中间件SOME/IP简述-LMLPHP

SOME/IP 消息通信类型

  • R & R (Request & Response)
  • F & F (Fire & Forget)
  • Notification
  • Event

R&R
最常见的通信模式之一是请求/响应模式。客户端发送请求消息,服务器给予回应。

F&F
客户端发送 Request,无需 Response 的操作称为 Fire & Forget。

Notification Event
Notification 代表的是一种 Publish-Subscribe 通信机制,Server 端会主动推送信息给订阅方。
但 Notification 分3种情况:

  • Cyclic Update 周期性的发送相关 value 的变化
  • Update On Change 如果 value 发生变化,则向外推送
  • Epsilon Change 如果 value 的值大于相应的 epsilon值,那么对外推送消息
05-27 20:27