目录
SOME/IP介绍
SOME/IP主要功能
SOME/IP协议
SOME/IP服务类型
SOME/IP-举例
SOME/IP各模块协议
SOME/IP-基础元件
SOME/IP-SoAD
SOME/IP-SD协议
SOME/IP-SD举例
SOME/IP-TP协议
SOME/IP-TP举例
SOME/IP ( Scalable service-Oriented Middleware over IP),即“运行于IP之上的可伸缩(可扩展)的面向服务的中间件”。是一个汽车中间件解决方案,可以用于控制消息。从一开始,它的设计就是为了完美地适应不同尺寸和不同操作系统的设备。这包括小型设备,如相机、AUTOSAR设备,以及头部单元或远程信息处理设备。同时还确保了SOME/IP支持Infotainment域以及车内其他域的功能,从而使SOME/IP可以用于多数替换场景以及更传统的CAN场景。所谓“Middleware中间件”是一种独立的系统软件或服务程序,分布式应用软件可借助Middleware在不同的技术之间共享资源。所谓的分布式应用软件,在这里指的就是“服务”;不同的技术之间,在这里指的就是“不同的平台或操作系统,比如Adaptive AUTOSAR系统等。
SOME/IP服务是SOME/IP的最核心概念。在一个服务中,定义了Server和Client两个角色:Server提供服务,Client调用服务。对于同一个服务,只能存在一个Server,但可以同时存在多个Client调用服务。一个Service由0~多个Event/Method/Field组成。与CAN相比,面向服务的通讯方式能够大大降低总线的负载率。
SOME/IP不等同于SOA,SOME/IP只是实现了SOA(面向服务的架构)和符合其协议规范。
1) SOME/IP中间件在运行时(而不是在系统设计时)动态地创建服务提供者和服务使用者之间的连接
2) 通过网络提供面向服务的通信
3) SOME/IP 支持广泛的中间件功能
-序列化转换为二级制序列转换,包含基本数据类型(e.g. Boolean、uint8和sint32等)和复杂数据类型(e.g. struct string和array等)
-远程过程调用 (RPC) 实现函数的远程调用。
-服务发现 (SD) 动态查找功能并配置其访问权限。
-发布/订阅 (Pub/Sub) 动态配置需要哪些数据并将其发送到客户端。
-UDP 消息的分段允许通过 UDP 传输大型 SOME/IP 消息而无需分段。
4) SOME/IP 可以在不同的操作系统上实现(即 AUTOSAR、GENIVI Linux和 OSEK),甚至没有操作系统的嵌入式设备
5) SOME/IP 用于 ECU 间客户端/服务器序列化
英文原始内如如下:
Message ID,用于唯一标识消息,当消息为Method类型时,由Service ID和Method ID组成,当消息为Event类型时,由Service ID和Event ID组成,如下图所示:
Length,消息长度(从Request ID开始到Payload结束);
Request ID,服务提供者和调用者可用于区分相同消息的不同调用,由Client ID和Session ID组成。通常我们称服务提供者为Service,服务调用者为Client,Service ID和Client ID用于区分,一般会在一个SOA架构中统一地配置这些ID的数值。
Protocol Version,协议头版本号,目前该值必须为1;
Interface Version,接口版本号,一般由服务提供者定义;
Message Type和Return Code,用于标识消息的类型,报文类型,目前共5种/返回码
Payload,数据段,需要传输的相关数据
Term | Description | 描述 |
Service | A functional entity that offers an interface. A logical combination of zero or more methods, zero or more events, and zero or more fields. | 提供接口的功能实体。零个或多个Methods、零个或多个events以及零个或多个Field的逻辑组合。 |
Service Instance | A single instance of the Service. Implementation of a service, which can exist more than once in the vehicle and more than once on an ECU | 服务的单个实例。实施一项服务,该服务可以在车辆中存在多次,也可以在ECU中存在多次 |
Offer Service | A message entry that declares offer of a Service Instance | 声明服务实例提供的消息条目 |
Stop Offer | A message entry that declares stopping of a Service Instance | 声明停止服务实例的消息项 |
Find Service | A message entry used to find a Service Instance. | 用于查找服务实例的消息条目 |
Event | A message send by an ECU implementing a Service Instance to an ECU using this Service Instance. | 由执行服务实例的ECU向使用该服务实例的ECU发送的消息 |
EventGroup | A logical grouping of 1 or more events. An EventGroup is part of a Service. | 一个或多个事件的逻辑分组。事件组是服务的一部分 |
Field | A field does represent a status and thus has an valid value at all times on which getter, setter and notifieract upon. | 一个字段确实代表一个状态,因此在getter、setter和notified所依赖的任何时候都有一个有效值。 |
Getter/Setter | A Request/Response call that allows Read/Write access to a field. | 允许对字段进行读/写访问的请求/响应调用。 |
Method | A method, procedure, function, or subroutine that is called/invoked. | 被调用的方法、过程、函数或子例程。 |
Notification Event | An event message of the notifierof a field. | 通知字段的事件消息。 |
Notifier | Sends out event message with a new value on change of the value of the field. | 在字段值发生变化时,发送带有新值的事件消息。 |
Remote Procedure Call (RPC) | A method call from one ECU to another that is transmitted using messages | 从一个ECU到另一个ECU的方法调用,使用消息进行传输 |
我们知道CAN-TP是用来对当总线CAN数据过大时,就需要对CAN整包数据进行分割拆包进行发送,这个时候发送方的TP层就起作用,同理对于接收方而言,也需要将分割的数据包进行组包完成整包数据的重组还原。
因此,举一反三,我们便可以知道SOME/IP-TP模块的主体功能就是为了实现对应用层发送数据过大时进行的必要拆包与组包的工作,进而完成大量数据包的发送与接收。
SOME/IP作为一种应用层协议,既可以运行在TCP之上,也可以运行在UDP之上,由于TCP协议本身支持发送大量数据同时还支持流控等特点因此无需用到SOME/IP-TP,该协议仅针对运行在UDP协议基础上的SOME/IP协议。
如下图7.1所示,则较为清晰的表明了SOME/IP-TP在CP AUTOSAR的具体位置以及与其他模块的交互关系。