做过车载项目的同学都知道,车内各控制域间有很多的信号需要交互, 比如我们的远控功能,数据上报功能等等。而车内信号交互的两种重要方式就是CAN和以太网。
在我们的实际项目中经常会提到SOA架构, 那么什么是SOA架构呢?
SOA(Service-Oriented Architecture,面向服务架构)是一种以 “服务” 为核心的软件设计范式,将业务功能封装为松耦合、可复用、标准化的独立单元,通过统一接口与协议实现跨系统 / 平台的互操作,核心目标是提升 IT 资源复用率、加速业务响应并降低集成成本。
今天我们不讲SOA架构,而是简单简单说一说SOA架构常用的实现方式 --- SOMEIP。
一. someip 概念
1.1 概念
SOME/IP是一种汽车中间件解决方案,SOME/IP全称:Scalable service-Oriented MiddlewarE over IP(位于IP协议蹭之上的一种面向服务的可扩展的中间件),是一种基于以太网的协议,提供面向服务的接口。
1.2 为什么需要SOME/IP?
(1) 传统汽车协议的局限性:传统的汽车协议如 CAN、MOST、LIN 和 Flexray 等,存在带宽有限的问题,难以满足现代汽车日益增长的高数据传输需求。基于IP网络,SOME/IP能够利用现有的IP网络基础设施,提供服务发现、描述、配置以及调用等功能
(2) SOME/IP的可扩展性:SOME/IP能够实现不同硬件平台,不同操作系统或嵌入式固件之间的可扩展和互操作
二.someip 协议格式

SOME/IP协议由消息头(header)和数据段(payload)组成。
1. message ID是唯一的[服务ID/方法ID, 占用32bit]。前16位标识服务(service id),后16位标识方法(method id) 32bits细分结构如下:
(1) 方法调用:method, getter,setter
| service id(16bit) | 0 (1bit) | method id(15 bit) |
(2) 事件通知:event, notify
| service id(16bit) | 1 (1bit) | method id(15 bit) |
2. length [占用32 bits] 标识后续的Request ID到payload的字节长度, 单位是字节。
3. Request ID (client id+session id)[占用32 bits]
Request ID允许server 和 clinet区分同一method, event, getter和setter的多个并行使用。 a. Client ID用于区分使用同一Method的不同客户端. client ID只有两个字节,能够同时支持多少客户端?支持65536个. b. session ID由数据的发送方每发送一次数据+1,从0x1加到0xffff后,从1重新开始,用于区分每一条消息 Request ID仅对提供方和订阅方组合(即一次订阅) 是唯一的。 数据生成响应消息时,server应将Request ID从请求复制到响应消息Response message中。
Request ID结构如下:
| client id [16位] | session id [16位] |
4. Protocol Version [占用8bits]
协议版本号,目前该值为1
5.


291

被折叠的 条评论
为什么被折叠?



