接着前段时间那篇文章: 粗略聊聊中间件与SOME/IP之一
继续分享下SOME/IP内容。 SOME/IP满足车用要求的特性如下: 对于SOME/IP报文头格式如下: Message ID:Message ID的前16 bit表示所使用的服务(Service ID)。“服务”是通信的总体类别(进行服务功能区分),每一个服务都需要一个唯一的服务ID(与UDS Service相似),由系统集成商进行标识。Message ID的后16bit是方法ID,用于标识构成服务的方法、时间和字段。对比之下,车载CAN总线很少使用基于服务的通信。不过SOME/IP的Message ID的基本思想与CAN总线中的CAN ID类似。因此也可以使用相同的进程来处理SOME/IP的Message ID,相当于对CAN总线中的处理方法进行增强/采用。Length:长度字段共32 bit,表示包括有效载荷、头信息和请求/客户端ID在内的字节长度。这里与其他车载应用场景报文定义格式类似,不管是DoIP还是以太网帧对应都有长度定义,也算是对自己报文的自我检测。RequestID:Request ID用于客户区分同一处理方式的多次调用。详细可如下:RequestID的前16 bit为Client ID并标识特定的客户端。e.g. 首端(Client A)与后座娱乐系统(Client)均需要设置车载娱乐系统中CD播放器(Server)的歌曲,则Client A和Client B使用不同的Client ID。Request ID的后16 bit代表SessionID。ProtocolVersion:Protocol Version用于表示SOME/IP协议的版本;Interface Version:Interface Version表示服务接口的版本,长度为8bit。此接口的定义和版本皆有接口设计方提供,若有新的版本,可动检测接口的兼容性MessageType:此字段用于区分不同报文类型,如下列举了SOME/IP中包含的报文类型:Return Code [8 Bit]:用于表示报文的反馈(接收方是否成功处理报文);Payload :有效载荷字段包含SOME/IP消息的参数。UDP:SOME/IP有效载荷范围为0~1000 Bytes,该上限主要为日后协议栈更改而设定(比如使用IPv6或添加安全协议)TCP:可以将数据进行分段,因此TCP支持更大的有效载荷。在SOME/IP传输协议TP中,UDP同样支持有效载荷,规范中规定了参数序列化的方法:有效载荷中的数值以及低位至高位bit位的排列顺序。SOME/IP在AUTOSAR框架的示意图如下:
SOME/IP根据服务接口来定义一项服务,服务接口为依据已有的通信原则定义Client和Server端的行为。 如下图描述了SOME/IP支持不同的通信原则。服务接口包括: 具有响应(request/response)或没有响应(Fire & Forget)的方法 字段:用于获得、设置或通知性能或状态 事件组(event groups):用于发布/订阅处理的事件和字段的逻辑组。 事件(Event),即发生事件时,Server端向Client发送的消息 字段:用于获得、设置或通知性能或状态 事件组(event groups):用于发布/订阅处理的事件和字段的逻辑组。 Request/Response:描述具有请求消息和响应消息的通信方法。请求是Client端向Server端发送额调用方法的报文。响应则是Server反馈Client端调用结果的消息。Fire& Forget:描述仅存在请求报文的通信方式,与Request/Response相同,Client向Server发送请求调用的一个方法。不同的是在此种情况下,Client端不期待来自Server端的回复响应。Event:在这种情况下,Server会周期性或在情况发生变化(事件)时向Client端发送具有特定内容的报文。该Action的前提是Client告诉Server端它希望接受这类报文,即“订阅”。在此情况下Client端不会发送回应Server的报文。这种通信方式对于Server而言也遵守“Fire@Forget”的通信原则,Event报文与常规的CAN报文相似。Field:表示可以远程访问的“属性”。Filed可以有Client设置。“Get获取”与Filed的沟通原则与“Event”一致。不同的是,系统在任何时刻都可以获得“Filed”,而Event只有在该事件发生的时间内有效(事件触发性)。 汇总SOME/IP通信方式四大类: Methods:其包含了请求后有应答的Method,和收到请求后没有应答的Method(Fire&Forget); Event:当某种事情发生后,服务端向客户端发送的Message(有点类似CAN通信Event Message); Field:为Get/Set/Notifier(读熟悉、设置熟悉和初始化Event)某种属性或者状态; Event Group:用来进行publish/subscribe处理Event Fields的通信的逻辑组。
|