当前位置: 首页 > news >正文

SOME/IP初试

SOME/IP介绍

SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP,是车载以太网里常见的一种服务通信协议。它的核心思想是:把车内 ECU 提供的能力抽象成“服务”,其他 ECU 或进程通过服务 ID、实例 ID、方法 ID 去调用这些能力。

它不像传统 CAN 信号那样主要按固定报文广播,而是更接近“服务调用模型”。

典型通信对象可以理解为:

Application ->Service ->Instance ->Method / Event / Field

对应到 hello_world 示例:

hello_world_service application: 0x4444 hello_world_client application: 0x5555serviceid: 0x1111 instance id: 0x2222 method id: 0x3333

也就是客户端调用服务端的:

Service 0x1111 Instance 0x2222 Method 0x3333

发送 “World”,服务端返回 “Hello World”。

SOME/IP 提供什么

SOME/IP 主要支持几类交互模式:

  1. Request / Response
    客户端调用服务端方法,服务端返回结果。

hello_world 就是这个模式:

client ->service: request("World")service->client: response("Hello World")
  1. Fire and Forget
    客户端发送请求,但不要求服务端返回 response。
  2. Event / Notification
    服务端周期性或按条件发布事件,客户端订阅后接收通知。

比如车速、温度、传感器状态变化。

  1. Field
    类似一个带 getter、setter、notification 的属性。
get currentSpeedsettargetTemperature notify currentSpeedChanged

SOME/IP Service Discovery

SOME/IP 通常还会配合 SOME/IP-SD,也就是 Service Discovery。
它解决的问题是:

  1. 某个服务现在在哪台 ECU 上?
  2. 它是否在线?
  3. IP/端口是多少?
  4. 客户端什么时候可以调用?

常见 SD 消息包括:

  • OfferService:服务端声明“我提供这个服务”。
  • FindService:客户端查询“谁提供这个服务”。
  • SubscribeEventgroup:客户端订阅事件组。
  • StopOfferService:服务端停止提供服务。

vSomeIP 和 SOME/IP 的关系

SOME/IP 是协议规范,vSomeIP 是一个 C++ 实现库。

vSomeIP 帮你处理:

  • application 注册
  • routing manager
  • service offer / request
  • message 编解码
  • payload 传输
  • service availability 回调
  • method/event handler 分发
  • 本地 UDS 或网络 UDP/TCP 传输
  • SOME/IP-SD 支持
    应用开发者主要写:
app_->offer_service(service_id, instance_id);app_->request_service(service_id, instance_id);app_->register_message_handler(...);app_->send(message);

SOME/IP 报文里有什么

一个 SOME/IP 消息大体包含:

字段作用
Service ID标识服务
Method ID / Event ID标识方法或事件
Length后续数据长度
Client ID客户端应用 ID
Session ID会话 ID,用于匹配 request/response
Protocol VersionSOME/IP 协议版本
Interface Version服务接口版本
Message Typerequest、response、notification 等
Return Code调用结果
Payload业务数据

在 hello_world 中,payload 很简单,就是字符串:

request payload: World response payload: Hello World

实际车载项目里,payload 通常是按 AUTOSAR、ARXML、IDL 或项目约定序列化后的结构体数据。

SOME/IP 的几个关键概念

  • Service ID
    标识一个服务类型,例如“车身控制服务”“诊断服务”“空调服务”。

  • Instance ID
    标识服务实例。一个 service 可以有多个 instance,比如左门控制器和右门控制器可能是同一种 service 的不同 instance。

  • Method ID
    标识服务里的某个 RPC 方法。

  • Event ID
    标识服务发布的某个事件。

  • Eventgroup
    事件组。客户端通常订阅 eventgroup,而不是单个 event。

  • Client ID
    标识调用方 application。

  • Session ID
    用于区分不同请求,帮助把 response 对回 request。

HelloWorld解析

演示的是 vSomeIP 的最小 request/response 通信流程:服务端 hello_world_service 提供 0x1111.0x2222 服务,客户端 hello_world_client 等待服务可用后调用 method 0x3333,发送 payload World,服务端回复 Hello World。它覆盖了 runtime/application 初始化、handler 注册、offer service、request service、服务可用通知、SOME/IP message/payload 构造、本地 routing manager 通信和优雅停止流程。

对象关系图

## 时序图

SOME/IP vs Fast-DDS

SOME/IP 更像“车载服务调用协议”,核心是 service / instance / method / event;
Fast-DDS 更像“分布式数据总线”,核心是 topic / publisher / subscriber / data type / QoS。
在车载里可以粗略理解为:

SOME/IP: 谁提供某个服务?我调用它的方法,或订阅它的事件。 Fast-DDS: 谁在发布某类数据?我订阅这个 Topic,持续接收数据流。

核心模型对比

维度SOME/IPFast-DDS
标准/协议AUTOSAR 常用服务通信协议DDS 标准的一种实现,底层常用 RTPS
通信模型面向服务 Service-Oriented面向数据 Data-Centric Publish/Subscribe
基本对象Service、Instance、Method、Event、FieldDomain、Topic、DataWriter、DataReader、Participant
常见交互Request/Response、Event Notification、Fire-and-ForgetPublish/Subscribe,也支持 Request/Reply 模式但不是主模型
接口标识数字 ID:Service ID、Instance ID、Method IDTopic 名称 + 数据类型
数据契约通常来自 AUTOSAR ARXML、接口文档、手写协议通常来自 IDL,生成强类型代码
发现机制SOME/IP-SD:OfferService、FindService、SubscribeEventgroupDDS Discovery:Participant、Endpoint、Topic 自动发现
QoS 能力相对有限,更多依赖应用和配置很强:可靠性、持久性、历史深度、deadline、liveliness 等
序列化SOME/IP payload 本身偏字节载荷,业务自定义DDS/CDR 序列化,强类型数据
典型场景AUTOSAR Adaptive、车载服务调用、ECU 间 RPCROS 2、机器人、中间件数据总线、复杂分布式系统

实时性

如果只谈“能不能做实时通信”,SOME/IP 和 Fast-DDS 都可以用于实时或准实时系统;但它们的实时性侧重点不同:

SOME/IP: 更偏确定的服务调用路径,适合车载控制服务、状态服务、RPC/事件通知。 Fast-DDS: 更偏高频数据分发,适合多订阅者、大量数据流、复杂 QoS 控制。

更直白一点:

低频/中频服务调用、车载 ECU 服务接口 ->SOME/IP 更自然 高频数据流、多消费者、QoS 细粒度控制 ->Fast-DDS 更强

延迟对比

维度SOME/IPFast-DDS
通信模型服务调用、事件通知Topic 发布订阅
典型延迟低,但依赖 routing、传输、序列化和服务发现配置低,RTPS/DDS 实现可针对低延迟优化
本地进程间通信vSomeIP 可走 Unix Domain Socket,本机很快Fast-DDS 可用共享内存传输,进程间大数据优势明显
网络通信UDP/TCPUDP/RTPS,部分实现支持 TCP/共享内存
大数据传输不是强项,payload 自己管理更强,尤其配合共享内存和零拷贝能力
小 RPC 调用很适合可以做,但不是最原生模型
高频流式数据可以用 event,但 QoS 和数据总线能力较弱适合,高频发布订阅是强项

抖动对比

实时系统不只看平均延迟,还要看抖动,也就是每次通信耗时是否稳定。

维度SOME/IPFast-DDS
抖动来源routing manager、线程调度、TCP/UDP、服务端处理时间discovery、QoS、可靠传输重发、队列深度、线程调度
可控性配置相对简单,路径清晰QoS 很强,但配置不当会引入额外抖动
可靠模式影响TCP 或应用层处理可能增加等待Reliable QoS、History、Durability 可能增加延迟和抖动
Best effort 模式UDP event 可较轻BestEffort + KeepLast 可做到很低延迟

Fast-DDS 的 QoS 是双刃剑:
配置得好,可以更贴近实时需求;配置得重,比如可靠传输、历史缓存、持久化、较大队列,会让延迟和抖动上升。

编译vsomeip

boost 1.75.0

$ ./bootstrap.sh $ ./b2 $sudo./b2install

编译vsome/ip

$gitclone https://github.com/COVESA/vsomeip.git $gitcheckout-b3.6.43.6.4 $mkdirbuild&&cdbuild $ cmake..$make-j4

中间会有编译错误, 注释掉-Werror和-Wno-inconsistent-missing-override

为什么选择3.6.4版本

系统使用Ubuntu 20.04, gcc版本是9.4.0, 支持的C++标准是C++17, 而master最新依赖C++20.

http://www.jsqmd.com/news/825558/

相关文章:

  • 终极指南:如何用Draw.io ECE库轻松绘制专业级电路图
  • 依喜替康:新型喜树碱衍生物的研究进展
  • 港科大DeepTech 28| 用于深度学习加速器设计的电子设计自动化(EDA)
  • VEML6075紫外线传感器:从I2C接口到户外监测的实战指南
  • 被安排做“脏活累活”怎么办?聪明人把它变成了核心竞争力
  • 【手把手推导】从单摆到机械臂:拉格朗日方程实战解析
  • 国央企备考求职精灵和粉笔APP哪家技术强询问
  • 艾尔登法环性能释放指南:3步突破60帧限制的技术方案
  • ARM Cortex-A系列Iris组件调试与性能优化指南
  • 基于MCP协议构建Azure DevOps AI助手:原理、部署与实战
  • Taotoken 如何为独立开发者提供稳定且高性价比的大模型 API 接入方案
  • Taotoken标准OpenAI协议兼容性在实际项目迁移过程中带来的便利
  • 《我祈祷星光洒满黑暗》的内容入口:暗夜意象如何被记住
  • 3D打印磁吸相机支架:为Hobby Creek Arm打造桌面拍摄神器
  • 谈薪资时,除了base还能争取什么?股权、签约奖、弹性工作
  • 三步搞定九大网盘直链下载:告别限速烦恼的终极指南
  • DELL R730XD加装二手H800阵列卡后噪音起飞?手把手教你用ipmitool命令降噪
  • 仅剩3%高手掌握的风格控制术:用--sref与--cref实现跨模型风格克隆
  • 2026年酒吧管理系统10款:主流软件全维度对比
  • 基于Council框架的多智能体协作:构建专家委员会式AI决策系统
  • Linux创意工作者的突破性选择:在Linux系统上运行Photoshop CC 2022的一站式解决方案
  • 零基础从零杀入网络安全行业,真实入行路径全曝光,普通人深耕三年稳稳冲刺年薪百万
  • 小型两栖无人平台潜行运动控制【附代码】
  • AI技能平台架构解析:从标准化接口到安全沙箱的实战指南
  • 实时语音AI对话系统:Web前端、音频流与LLM的工程化整合实践
  • PyTorch实战:用UNet完成你的第一个医学图像分割项目(从数据加载到模型训练全流程)
  • 别再裸奔了!从单片机while(1)到FreeRTOS多任务,新手避坑指南
  • 2026 国产桌面 AI 智能体横向评测:博云 BoClaw vs AutoClaw vs QClaw vs MaxClaw vs WorkBuddy
  • 【NotebookLM生物学研究辅助实战指南】:20年生物信息学专家亲授5大颠覆性工作流优化技巧
  • 内容创作团队如何利用多模型能力进行稿件批量润色与风格统一