SOME/IP, DDS 还是 MQTT

如今,用户希望将他们的汽车根据个人偏好进行定制,通过添加功能并定期进行更新,就像他们对待移动设备一样。实现这些期望属性的一个构建模块是基于 Internet Protocol(IP)的通信;IP为新的设计模式打开了大门,因为它使得使用更高层协议成为可能。这些“中间件”协议应该被更详细地考虑。它们的定义特点是什么?哪些协议可以在汽车环境中使用?

将以太网引入汽车行业不仅大幅增加了可用带宽,还在汽车环境中建立了基于IP的通信。最初的应用主要集中在离车诊断,特别是闪存过程。传统领域如动力总成、车身和底盘继续使用控制器局域网(CAN)、本地互连子总线网络(LIN)和FlexRay等总线技术,并采用基于信号的、静态配置的通信方法。然而,将更多的通信转移到以太网技术,并广泛利用其优势,是合理的做法。

为此,汽车行业引入了一种新的物理层("汽车以太网"或100BASE-T1)和第一个汽车中间件协议:SOME/IP(基于IP的可扩展面向服务的中间件)。一段时间以来,人们还对来自IT界和物联网(IoT)领域的协议进行了更多讨论。它们的主要特点是以数据为中心的方法。最感兴趣的协议是DDS(数据分发服务)和MQTT(消息队列遥测传输协议)。在某些个别应用中,REST(表征状态转移)也适用作为一种技术。它实现了用户交互中相关的拉取方法。然而,REST缺乏一项对于工程控制系统非常重要的特性:它无法以事件触发的方式发送数据(On Event)。在没有这种推送方法的情况下,该协议在车辆中的广泛使用不太可能。因此,在这里不再深入探讨REST。

本文提供了MQTT、DDS和SOME/IP的概述,并比较了这些协议在车辆通信方面的适用性。它们如何在电子控制单元(ECU)中实现,以及这对嵌入式架构有何影响?在系统级别上进行设计和建模时有哪些后果?

起源和通信范式

MQTT协议于1999年发布,并自2013年起由结构化信息标准促进组织(OASIS)管理。MQTT的两个主要版本是3.1.1版(ISO/IEC标准20922发布)和随后于2019年发布的版本5。MQTT的主要优点是其对资源的低要求以及在不可靠网络中的适用性,这使其在物联网领域广受欢迎。
在这里,MQTT依赖于一个中央的“代理”(服务器),它在发送者(发布者)和接收者(订阅者)之间传递信息(主题)。节点可以在特定主题下发布消息并订阅接收特定主题的消息。在这里,使用TCP作为传输协议(图1)。

DDS也使用了发布-订阅模式,但是没有中央代理(图2)。DDS的第一个版本于2004年由OMG(对象管理组)发布,现在可用的版本是1.4版。在DDS中,通信可以是单播或组播,这就是为什么同时使用TCP和UDP作为传输协议的原因。当使用组播时,UDP比TCP更能实现高效的通信。与MQTT相比,DDS的主要考虑因素是传输动态性和灵活性,以及其对具有大量节点的系统的可扩展性。

SOME/IP是专门为汽车使用而开发的唯一协议,于2013年发布。在这里,服务的提供者和消费者直接相互关联,没有中央代理。数据和功能根据面向服务的通信范式封装为服务。在服务接口的描述中使用方法、事件和字段(图3)。SOME/IP与DDS类似,利用单播和组播通信,并通常基于UDP。

通信设计和要素

在基于信号的通信世界中,信号周期性地发送或基于事件触发。没有原生的远程过程调用(RPC)通信模式或用于通知更改的原生动态订阅机制的计划。如果需要,它们在应用程序层面上会被手动模拟。SOME/IP固有地处理了这些范式。基于事件触发的数据传输也是与MQTT和DDS通信的基础。对于这两种协议,也意识到了RPC的必要性(MQTT版本5)。然而,它们并不直接支持,而是通过将多个主题组合为前向和返回通道来实现。
MQTT协议仅规定了最大长度为256兆字节的字节数组。有用数据(UTF8编码的字符串)的序列化和反序列化由发送方和接收方自主处理。另一方面,DDS提供了对数据的详细类型化和专用的传输协议。然而,与MQTT类似,它也涉及字节数组的序列化。在SOME/IP中,数据也被详细地进行了类型化。支持的数据类型的序列化在标准中定义。基于其4字节长度字段,SOME/IP允许具有最多4千兆字节负载的数据消息。

数据或服务的发布者和订阅者如何找到彼此?这是动态系统中的一个基本问题,尤其是在存在多个实例(即多个数据提供者)的情况下。SOME/IP的答案是所谓的“服务发现”,这是一种在运行时提供服务并可以订阅通知的机制。这种机制也存在于DDS中。另一方面,在MQTT中,由于存在中央代理(broker),实现方式不同。代理在运行时管理所有主题。要获取所有主题的列表,可以简单地通过在根级别使用通配符订阅所有主题。

通常使用服务质量(Quality-of-Service,QoS)参数来比较通信协议。这些参数包括数据传输速率、可靠性和容错性等。中间件协议并不涵盖所有特性,有些特性可能需要在应用程序的上一层进行实现。其中一些因素也会受到底层传输协议的影响。在MQTT中,唯一指定的QoS参数是可靠性。用户可以在发布(发送方到代理)和订阅(代理到接收方)之间选择三个不同的QoS级别。它们的范围从“发出并忘记”到包括历史值的交付确认不等。SOME/IP不定义自己的QoS机制,它依赖于应用程序和TCP、UDP的机制来实现。另一方面,DDS支持广泛的QoS机制。不仅实现了传输可靠性,还包括延迟和容错性。还提供了诸如软件看门狗、数据保存和元数据管理等功能,这可以在应用程序层面上节省很多工作量。

对嵌入式实现的影响

绝大多数今天具备以太网和因此支持IP的电子控制单元(ECU)都基于“AUTOSAR”(汽车开放系统架构)。在考虑将DDS、MQTT和SOME/IP嵌入到现有AUTOSAR解决方案中时,一个问题就出现了:它们能够多好地集成到现有AUTOSAR解决方案中?内存使用和处理器负载对于给定体系结构中的解决方案同样重要。AUTOSAR区分两个基本平台:经典平台(Classic Platform,CP)和自适应平台(Adaptive Platform,AP)。CP是为基于相对较小微控制器的传统控制系统设计的。配置在很大程度上是静态的,由OSEK操作系统控制。整个解决方案以单一二进制文件进行编译。它仍能够满足对实时能力和快速启动时间的严格要求。然而,通常情况下,这里使用的半导体芯片的RAM和ROM资源非常有限,特别是与AP系统中典型的半导体芯片进行直接比较时。作为高性能ECU的补充标准,AP设计为在基于POSIX的操作系统下在微处理器和应用核心上执行。AP所使用的典型半导体的资源也是可扩展的,因为它们通常使用外部闪存和RAM芯片进行操作。总体而言,AP在规定上更加注重灵活性:这种灵活性主要指的是后续添加的软件和更新能力。

在CP中,应用程序层通过运行时环境(“RTE”)与基本软件进行接口。在AP中,协议规范通过ARA:COM接口下面的协议绑定实现。对于SOME/IP,CP和AP都使用本地实现。但是,如果要使用AUTOSAR运行时环境进行DDS和MQTT应用程序,则今天通常的方法是访问现有的IoT实现并将其适应为AUTOSAR。在AP中已经定义了与DDS的绑定。因此,初步看来,AP的集成将是可能的,但需要适当的努力。但是对于CP来说情况并非如此,需要对RTE进行适配。另一方面,目前还没有计划将MQTT用于CP或AP(图4)。此外,所有协议都需要一种通过套接字进行通信的方式。在这里,重要的是考虑与TCP/IP堆栈的接口,特别是在CP中。SOME/IP直接放置在套接字适配器上,这也构成了SOME/IP协议头的一部分。在DDS和MQTT中,由于缺乏协议兼容性,这种方法是不可能的。原则上,在CP中可以在套接字适配器上放置没有PDU头选项或直接放置在TCP/IP上。

在评估三种中间件协议时,它们的资源需求也是有趣的。可以想象DDS由于协议的范围和其QoS功能,将对内存需求产生比SOME/IP更大的需求。因此,针对微控制器的DDS实现在其功能范围上通常非常有限。MQTT的资源需求主要取决于是否实现代理或终端节点。后者可以非常高效地集成到CP系统中。在将MQTT内存需求与SOME/IP进行比较时,仍需在未来的实现中进行验证。在考虑协议开销时也存在类似的情况。其许多功能和传输的元数据使DDS成为一个重量级协议。另一方面,MQTT仅有几个字节的头部,与SOME/IP相比是一个轻量级协议。

就数据吞吐量而言,在纯协议分析中,目前没有证据表明DDS在性能方面优于SOME/IP。但可以确定的是,MQTT的可扩展性较差。根据 broker 的实现方式,延迟会与需要管理的主题数量不成比例地增加。这使得在某些应用程序中使用MQTT更加困难。

在体系结构和系统设计上的差异

MQTT的中央代理在功能安全系统设计方面至关重要。在安全相关的系统中,这个代理必须实现冗余,因为它是潜在的单点故障。MQTT 5版本完全解决了这一问题:它提供了指定备用服务器地址的选项。在功能安全方面没有根本性障碍。与此同时,在大数据量的情况下,MQTT的中央代理成为瓶颈,必须进行相应的规模调整。
而在DDS和SOME/IP通信架构的分散布局中,不存在这个挑战。如果由不同的合作伙伴实施广泛的电气/电子架构,则需要一个标准化的交换格式。DDS和SOME/IP在这里受益于被纳入AUTOSAR标准(DDS仅在AUTOSAR Adaptive中),因此可以以标准化的方式进行描述。而这在MQTT中并没有实现,部分原因是由于所引用的类型和详细程度的差异。。

结论与展望

这三种协议对于特定应用具有特定的属性、优点和缺点。SOME/IP清晰地反映了它在汽车应用中的起源和定制。它可以在AUTOSAR中无缝集成,并在资源需求和可扩展性方面表现出色。然而,与DDS和MQTT不同,SOME/IP中没有定义QoS功能。如果某些应用需要这些功能,必须在应用程序或传输协议中实现。评估DDS时必须考虑使用目的。由于其广泛的规范和许多不同的功能,DDS的适合性非常广。然而,由于资源有限,生产使用始终需要更精确定制的版本。

最重要的是,MQTT以其简单性和低资源需求给人留下了深刻的印象。该协议设计用于在不可靠的通信通道上传输少量数据,并且非常适合将少量数据传输到后端。然而,目前在车辆通信中使用它仍有一些问题需要回答。特别是关于中央代理的功能安全设计和可伸缩性的问题。对于车辆应用程序来说,未来将展示DDS是否能够作为一种汽车新秀与已经建立起来的SOME/IP竞争。决定性因素将是考虑到的功能范围,以及哪种中间件解决方案为大多数以太网ECU提供了最佳的成本效益比。

本文主要翻译下面的文章:

https://cdn.vector.com/cms/content/know-how/_technical-articles/PREEvision/PREEvision_MiddlewareProtocols_ElektronikAutomotive_202003_PressArticle_EN.pdf

如对文章感兴趣,可以关注公众号:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/167102.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nautilus Chain 与 Coin98 生态达成合作,加速 Zebec 生态亚洲战略进程

目前,行业内首个模块化 Layer3 架构公链 Nautilus Chain 已经上线主网,揭示了模块化区块链领域迎来了全新的进程。在主网上线后,Nautilus Chain 将扮演 Zebec 生态中最重要的底层设施角色,并将为 Zebec APP 以及 Zebec Payroll 规…

Selenium的find_element()与find_elements()和By的几种方法

打印索引元素的文本属性 def print_list(coordinate_list):print(当前项目地块数:, len(coordinate_list))for i in range(0, len(coordinate_list)):print(i)print(coordinate_list[i].text)看一下By支持的方法 class By:"""Set of supported loc…

2023年10月小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案

一,问题描述 最近越来越多的同学找石头哥,说cms用不了,其实是小程序官方最近又搞大动作了,偷偷的升级的云开发cms(内容管理)以下都称cms,不升级不要紧,这一升级,就导致我…

ZKP5.2 PLONK IOP

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 5: The Plonk SNARK (Dan Boneh) 5.2 Proving properties of committed polynomials overview Polynomial equality testing with KZG KZG: determined commitment (if the function is equal, then the commitment is equa…

阿里云ECS服务器的搭建学习

云服务器ECS: 云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备&a…

相机镜头选择与机器视觉控制

相机镜头选择与机器视觉控制 在机器视觉领域,除了图像处理和算法,还需要关注硬件方面的选型和控制。相机镜头的选择是其中重要的一部分,需要考虑像素大小、镜头焦距等因素以满足项目需求。此外,编程技能也包括相机的调用和使用&a…

Python 机器学习入门之ID3决策树算法

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 番外 Python 机器学习入门之K近邻算法 番外 Python 机器学习入门之K-Means聚类算法 第三章 Python 机…

C++设计模式_10_ Prototype 原型模式(小模式,不太常用)

Prototype 原型模式仍然属于“对象创建模式”模式的一种。前面两篇介绍的工厂方法模式和抽象工厂模式的流行程度要远大于Prototype 原型模式和builder构建器模式,后两种由于较为简单,介绍篇幅也会少一些。 文章目录 1. 动机 (Motivation)2. 代码演示Prot…

【Java基础面试三十七】、说一说Java的异常机制

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说一说Java的异常机制 …

【LeetCode】1. 两数之和

题目链接 文章目录 Python3方法一:暴力枚举 ⟮ O ( N 2 ) 、 O ( 1 ) ⟯ \lgroup O(N^2)、O(1)\rgroup ⟮O(N2)、O(1)⟯方法二:哈希表 ⟮ O ( N ) ⟯ \lgroup O(N)\rgroup ⟮O(N)⟯ C方法一:暴力枚举 ⟮ O ( N 2 ) 、 O ( 1 ) ⟯ \lgroup …

[Golang]多返回值函数、defer关键字、内置函数、变参函数、类成员函数、匿名函数

函数 文章目录 函数多返回值函数按值传递、按引用传递类成员函数改变外部变量变参函数defer和追踪说明一些常见操作实现 使用defer实现代码追踪记录函数的参数和返回值 常见的内置函数将函数作为参数闭包实例闭包将函数作为返回值 计算函数执行时间使用内存缓存来提升性能 参考…

「我的AIGC咒语库:分享和AI对话交流的秘诀——如何利用Prompt和AI进行高效交流?」

文章目录 每日一句正能量前言基础介绍什么是Prompt?什么是 Prompt Engineering?为什么需要 Prompt Engineering?如何进行 Prompt Engineering?Prompt的基本原则Prompt的编写模式AI 可以帮助程序员做什么?技术知识总结拆解任务阅读…

【C语言进阶】文件操作

文件操作 1. 为什么使用文件2. 什么是文件2.1程序文件2.2 数据文件2.3 文件名 3. 文件的打开和关闭3.1 文件指针3.2 文件的打开和关闭 4. 文件的顺序读写4.1 对比一组函数 5. 文件的随机读写5.1 fseek5.2 ftell5.3 rewind 6. 文本文件和二进制文件7. 文件读取结束的判定7.1 被错…

react配置 axios

配置步骤(基本配置): 1.安装 axios cnpm install axios --save2.src/utils 新建一个 request.js文件(没有utils就新建一个目录然后再建一个request.js) 3.request代码如下: 这个是最简单的配置了,你可以根据自己的需…

solidworks 2024新功能之-让您的工作更加高效

您可以创建杰出的设计,并将这些杰出的设计将融入产品体验中。为了帮您简化和加快由概念到成品的产品开发流程,SOLIDWORKS 2024 涵盖全新的用户驱动型增强功能,致力于帮您实现更智能、更快速地与您的团队和外部合作伙伴协同工作。 SOLIDWORKS…

61 不同路径

不同路径 重点:从左上角移动到右下角,m-1次向右,n-1次向下题解1 DP降维——滚动数组 题解2 求解组合 C m n − 2 m − 1 C^{m-1}_{mn-2} Cmn−2m−1​的值 一个机器人位于一个 m x n 网格的 左上角 (起始点在下图中标记为 “St…

FreeRTOS学习day1

顾名思义 免费的实时操作系统 用法基本和Linux下的多线程编程类似 探索者开发版实验 动态创建4个任务start_task task1 task2 task3 优先级依次为1 2 3 4 (注意优先级不能为0,0是空闲任务) 我的理解:主线程start_task 主线程 task1 ta…

Linux:实用操作

Linux:实用操作 1. 各类小技巧1.1 controlc(ctrl c) 强制停止1.2 可以通过快捷键:control d(ctrl d),退出账户的登录1.3 历史命令搜索1.4 光标移动快捷键 2. 软件安装2.1 介绍2.2 yum命令(需要root权限)在这里插入图片描述 3. systemctl4.…

从0-1,使用腾讯OCR进行身份证识别

目录 1.申请腾讯OCR权限 2.代码思路 3.Postman测试​ 1.申请腾讯OCR权限 获取 secretId 和 secretKey,见上文从0到1,申请cos服务器并上传图片到cos文件服务器-CSDN博客https://blog.csdn.net/m0_55627541/article/details/133902798 2.代码思路 入参…

Java File与IO流学习笔记

内存中存放的都是临时数据,但是在断电或者程序终止时都会丢失 而硬盘则可以长久存储数据,即使断电,程序终止,也不会丢失 File File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文…