SOME/IP, DDS 还是 MQTT

news2024/10/5 18:33:17

如今,用户希望将他们的汽车根据个人偏好进行定制,通过添加功能并定期进行更新,就像他们对待移动设备一样。实现这些期望属性的一个构建模块是基于 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.coloradmin.cn/o/1120441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

arcgis js api 4.x加载geoserver发布的地方坐标系(自定义坐标系)的wms服务

问题描述:之前研究过arcgis js api 4.x加载arcgis server 发布的地方坐标系的wms服务,后来研究出来能正常加载了,想了解的可以看我之前的博客。但是一直困于加载geoserver发布的地方坐标系的wms服务,一直都是用的WMSLayer这个调用…

1024渗透OpenVas扫描工具使用(第十四课)

1024渗透扫描工具使用(第十四课) 一 漏洞披露 1 微软安全更新指南(自2017年2月起,替代安全公告) 安全公告都有一个惟一的编号 其命名规则是:MS年份-补丁序号 或 CVE-年份-补丁序号 比如MS17-010就表示2017年发布的编号为010的安…

自然语言处理---Transformer构建语言模型

语言模型概述 以一个符合语言规律的序列为输入,模型将利用序列间关系等特征,输出一个在所有词汇上的概率分布,这样的模型称为语言模型。 # 语言模型的训练语料一般来自于文章,对应的源文本和目标文本形如: src1 "I can do&…

【剑指Offer】34.二叉树中和为某一值的路径(二)

题目 输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点 2.叶子节点是指没有子节点的节点 3.路径只能从父节点到子节点,不能从…

运维:mysql常用的服务器状态命令

目录 1、查询当前服务器运行的进程 2、查询最大链接数 3、查询当前链接数 4、展示当前正在执行的sql语句 5、查询当前MySQL当中记录的慢查询条数 6、展示Mysql服务器从启动到现在持续运行的时间 7、查询数据库存储占用情况 8、查询服务器启动以来的执行查询的总次数 9…

算法通关村第十关黄金挑战——归并排序详解

大家好,我是怒码少年小码。 归并排序 就是将一个大的序列分为多个小的序列,对小的序列排序,最后利用归并的思想合并序列。归并排序的思想就是分而治之。 分:将大序列分为很多个小的序列 治:将多个小的序列合并为大序…

用 pytorch 训练端对端验证码识别神经网络并进行 C++ 移植

文章目录 前言安装安装 pytorch安装 libtorch安装 opencv(C) 准备数据集获取训练数据下载标定 编码预分析 数据集封装格式 神经网络搭建神经网络训练神经网络测试神经网络预测C 移植模型转换通过跟踪转换为 Torch Script通过注解转换为 Torch Script 编写…

解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题

本文 Element-ui 版本 2.x 问题 在 el-table-column 上需根据不同 v-if 条件来控制列显隐时&#xff0c;就会出现列数据展示错乱的情况&#xff08;要么 A 列的数据显示在 B 列上&#xff0c;或者后端返回有数据的但是显示的为空&#xff09;&#xff0c;如下所示。 <tem…

Python教程(15)——Python流程控制语句详解

目录 if语句else if语句for循环遍历类型range关键字 while循环break语句continue语句 Python流程控制是Python编程中非常重要的一部分&#xff0c;它用于控制程序的执行流程。Python提供了多种流程控制语句&#xff0c;包括if语句、while循环、for循环、break和continue语句等。…

[翻译]理解Postgres的IOPS:为什么数据即使都在内存,IOPS也非常重要

理解Postgres的IOPS&#xff1a;为什么数据即使都在内存&#xff0c;IOPS也非常重要 磁盘IOPS&#xff08;每秒输入/输出操作数&#xff09;是衡量磁盘系统性能的关键指标。代表每秒可以执行的读写操作数量。对于严重依赖于磁盘访问的PG来说&#xff0c;了解和优化磁盘IOPS对实…

使用QT实现http里面的get和post

#1024程序员节&#xff5c;参与投稿&#xff0c;赢限定勋章和专属大奖# #假如你有一台服务器&#xff0c;你最想做哪些事&#xff1f;# #你被什么样的BUG困扰过一周以上&#xff1f;# 在http里面下面这些方法和服务器的响应代码一起用于HTTP协议中的请求和响应交互。请注意&…

模板再认识

在前面的文章中我写了关于模板的一些简单的认识&#xff0c;现在我们来再次认识模板文章目录 1.非类型模板参数2.模板特化1). 模板特化的写法2). 类模板特化3). 函数模板特化4). 模板全/偏特化 3.模板分离编译 1.非类型模板参数 在模板中还有一种是非类型的模板参数。我们代码…

【数组拷贝+二维数组遍历】

文章目录 前言数组的拷贝第一种方式&#xff1a;第二种方式:利用工具类拷贝 二维数组二维数组的三种定义打印二维数组的某个元素遍历二维数组 二维数组的每个元素是一维数组遍历二维数组&#xff08;优化&#xff09;打印出一个数组&#xff08;不是数组元素&#xff09;的方法…

linux性能分析(三)性能优化导轮

一 别再让Linux性能问题成为你的绊脚石 ① 学习历程 备注&#xff1a; 跟我的学习经历很相像刚工作时遇到的场景跟我现在一样,深深的无力感驱使我继续前行目标: 性能优化成为我的肌肉记忆,写代码的潜意识 ... ② 常见的问题 ③ 性能问题为什么这么难呢 思考&#xff1a…

顺序表ArrayList

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 顺序表 概念Arraylist构造方法相关方法遍历操作 自…

嵌入式实时操作系统的设计与开发(任意大小的内存管理)

任意大小的内存管理是根据用户需要为其分配内存&#xff0c;即用户需要多大内存就通过acoral_malloc2()为之分配多大内存&#xff0c;同时每块分配出去的内存前面都有一个控制块&#xff0c;控制块里记录了该块内存的大小。 同时未分配出去的内存也有一个控制块&#xff0c;寻…

守护进程深度分析

思考 代码中创建的会话&#xff0c;如何关联控制终端&#xff1f; 新会话关联控制终端的方法 会话首进程成功打开终端设备 (设备打开前处于空闲状态) 1、关闭标准输入输出和标准错误输出2、将 stdin 关联到终端设备&#xff1a;STDIN_FILENO > 03、将 stdout 关联到终端设…

FreeRTOS_队列

目录 1. 队列简介 1.1 数据存储 1.2 多任务访问 1.3 出队阻塞 1.4 入队阻塞 1.5 队列操作过程 1.5.1 创建队列 1.5.2 向队列发送第一个消息 1.5.3 向队列发送第二个消息 1.5.4 从队列中读取消息 2. 队列结构体 3. 队列创建 3.1 函数原型 3.1.1 函数 xQueueCreate…

网卡状态检测函数

内核中网卡的开启状态通过__LINK_STATE_START进行标识。网卡开启或关闭时&#xff0c;通过该标识会被置位。 内核专门提供了一个函数用于检测该标志位。函数定义如下&#xff1a; static inline bool netif_running(const struct net_device *dev) {return test_bit(__LINK_S…

YOLOv5源码中的参数超详细解析(1)— 项目目录结构及文件(包括源码+网络结构图)

前言:Hello大家好,我是小哥谈。作为初学者,为了后期能够熟练的使用YOLOv5进行模型的训练,首先必须做的就是了解YOLOv5项目目录结构中各文件以及参数的作用。本篇文章就向大家简单介绍一下每个文件的具体功能及作用,关于YOLOv5详细的代码解读后期会慢慢更新,欢迎大家收藏关…