一文读懂DDS和AUTOSAR Adaptive的集成(2)

简介: 一文读懂DDS和AUTOSAR Adaptive的集成(2)

1 DDS的应用场景

在汽车行业中,整车的系统架构正在迅速发展并变得越来越复杂。为了控制这种复杂性并最大限度地提高数据吞吐量,数据分发服务(DDS) 已成为一种更高效、可扩展且更安全的解决方案。所以多个行业的联盟和标准组织已经开始选择DDS作为其下一代的系统之间信息交互的底层技术。有很多软件框架采用了dds的传输协议,这些标准和框架的示例包括用于机载系统的Open Group Future Airborne Capacity Environment (FACE)、用于智能电网的Open Field Message Bus (OpenFMB)、用于医疗设备的医疗设备“即插即用”互操作性计划(MD PnP)和用于机器人的机器人操作系统(ROS 2)。

2 DDS的主要特征

  • DDS注重数据,以topic为主;
  • 采用点对点、点对多、多对多、无代理发布/订阅消息模式,数据发送和接收流程都有特定的接口。
  • 如下图所示,数据的发送过程,通过DataWriter对象提供的write方法,把数据传递给Publisher对象(多个DataWriter复用Publisher对象),而Publisher负责将数据在网络上发送出去。
  • 数据的接收过程,通过Subscriber把数据从网络上接收过来,并把它存储在对应的DataReader中(多个DataReader复用Publisher对象)。也可以为DataReader注册一个回调函数来方便应用层接收处理数据,或者使用DataReader提供的read和take方法来轮询DataReader中的数据
  • 0a818713ce5849dc64f3a77be2eed129_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png
  • 有21个QoS服务质量策略。下面是几种常用的QoS策略:

05975cfc65c11dbbea194fec59dd62dd_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  • DEADLINE:如果希望某个Topic能够周期更新,可以设置DEADLINE属性。在数据的发布方设置DEADLINE,这意味着应用程序必须以小于DEADLINE的周期去更新Topic;而在数据的订阅方设置DEADLINE,这意味着数据的发布方必须以小于DEADLINE的周期去发布Topic。
  • LIFESPAN:通过设置LIFESPAN,可以使DataWriter写入的每个数据样本都有一个关联的“到期时间”,超过该时间后,该数据样本不再传送给任何应用程序,并且这些数据将从DataReader缓存中清除。
  • HISTORY:设置HISTORY属性可以让DataWriter保存并发送旧的采样数据,新的DDS节点如果订阅了相关的Topic,它不仅能够接收到数据的当前值,也能收到一部分历史值,从而了解数据近期的变化趋势。
  • RELIABILITY:为DataWriter设置RELIABILITY属性,可以使数据实现“可靠”的传输,当出现通信错误导致数据采样没有被接收到时,DataWriter会持续重传,直到所有数据被正确接收。

3 AutoSAR的技术概述

AUTOSAR(汽车开放系统架构)是汽车制造商、供应商、软件和电子供应商的全球合作伙伴关系。它为汽车系统的可互操作软件架构制定标准。

a9e453b74b37dacae6fa5a6be72ec541_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2004年,AUTOSAR推出了现在被国外主机厂广泛采用的经典平台CP,这是一种分层软件架构,为处理部署在基于微控制器的电子元件单元(ECU)中的时间关键型应用程序的开发、通信和执行提供了全面的解决方案。经典平台利用常见的连接总线,如CAN、LIN或Flexray,提供强大的通信功能。

在过去十年中,基于更强大的微处理器和以太网技术的新型ECU助力了更加智能的车载系统的发展。为了SOA架构,AUTOSAR推出了自适应平台,这是一个全新的软件架构,旨在解决一系列全新的用例。AUTOSAR 自适应中的通信管理 AUTOSAR自适应平台定义了许多功能集群,从执行管理到时间同步、监控、诊断和通信管理。

对于通信,AUTOSAR Adaptive 定义了 ara::com,一个基于 SOA 的标准C++ API。ara::com 最初基于 SOME/IP,旨在定义一个与底层连接技术无关的 API,提供定义和部署已知服务的方法,并向客户端应用程序提供API调用,就好像它们是本地的API调用一样。AUTOSAR服务接口通常使用ARXML定义,ARXML是一种派生自AUTOSAR UML元模型的建模语言。ARXML 解析器分别为客户端和服务器应用程序的代理和框架生成代码。在客户端,应用程序实例化绑定到服务器端运行的服务的代理实例化。每个代理一次只能绑定到一个服务实例,将代理显式耦合到服务实例。

085a0a9837c3f1815db994ed6e4563ab_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

Ara::com 服务提供以下资源:

b78b7de9ea5fa268929a285732378c34_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

1)事件 - 通知客户端应用程序服务器端触发的事件。

2)方法 - 公开客户端应用程序可以调用的远程方法。

3)字段 - 提供客户端应用程序可以使用远程 getter 和 setter 修改的数据值。客户端也可以订阅字段值更改。

4 AUTOSAR与DDS的集成

采用DDS的最新组织之一是AUTOSAR,那怎怎么把AUTOSAR 自适应平台和DDS 网络绑定,来把DDS 及其丰富的服务质量 (QoS) 策略集引入 AUTOSAR 面向服务的体系结构 (SOA) 中,从而实现新的互操作性方案,其中 AUTOSAR 系统可以集成到基于 DDS 数据总线的大型系统系统中。但是将DDS集成到AUTOSAR自适应平台中 DDS 和 ara::com 在架构层面呈现出明显的差异。Ara::com 基于纯面向服务的体系结构,其中客户端(即代理)和服务器(即服务实例)紧密耦合。DDS 引入了以数据为中心的发布-订阅模型,该模型通过提供用于通信的逻辑数据总线来有效地分离发布者和订阅者。但是,DDS 以数据为中心的发布-订阅模型非常灵活,通常被认为是一种超级模式,可用于实现发布-订阅以及其他模式,例如请求-答复和队列。因此,DDS可以使用DDS系列规范中已有的机制来遵循ara::com和AUTOSAR自适应平台的语义。下面,我们将介绍实现这些概念的基本机制。

  1. 耦合服务实例和代理 :正如我上面提到的,在实例化时,代理只能绑定到特定的服务实例。在 DDS 术语中,这意味着订阅者应用程序只能从特定的发布者应用程序接收数据。此类语义要求发布者和订阅者之间的特殊耦合,这可以通过分区和内容筛选器等机制实现。为了限制内容筛选器所需的处理和资源量,DDS 网络绑定使用分区将代理与服务实例绑定。每个 ara::com 服务实例在以服务 ID 命名的特定分区上发布数据,每个代理使用以它们绑定的服务 ID 命名的分区订阅数据。如果要订阅不同 ara::com 服务实例发布的数据,本机 DDS 应用程序或工具可以订阅“*”字符定义的分区。2.映射事件、方法和字段 为了将事件、方法和字段映射到 DDS 概念(如主题和服务),我们利用了 OMG DDS 和 RPC over DDS 规范中定义的机制。使用这些机制:
  • 事件映射到常规主题Topic。这种映射只需通过订阅使用适当分区表示事件的相应 DDS 主题即可。
  • 方法映射到 DDS 服务方法。每个 ara::com 服务实际上都由一个 DDS 服务组成,该服务公开客户端应用程序可以调用的所有方法。
  • 映射到 DDS 服务的 getter 和 setter 方法的字段遵循与常规方法相同的机制。字段通知映射到提供当前字段值的常规主题。为处理通信而创建的所有主题和 DDS 实体都可以根据相应的 QoS 策略进行配置。

2. DDS 网络绑定为 ara::com 提供了一个全面的连接解决方案,DDS引入了:

  • 确定性实时通信,使用 DDS 可靠性协议和其他 QoS 策略,例如实时性和截止时间。可配置的数据分发,使用其丰富的 QoS 策略集。
  • 安全通信,利用 DDS 安全标准及其细粒度的安全功能。可扩展和可插拔的基础设施,基于独立于传输的线路协议,可以有效地部署在共享内存、UDP 和 TCP 之上。
  • 最重要的是,DDS 网络绑定使 AUTOSAR 自适应应用程序能够与现有和未来的 DDS 系统进行互操作。
相关文章
|
存储 运维 中间件
一文读懂DDS和AUTOSAR Adaptive的集成
一文读懂DDS和AUTOSAR Adaptive的集成
一文读懂DDS和AUTOSAR Adaptive的集成
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
290 6
|
4月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
368 4
|
4月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
318 1
|
5月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
168 2
|
5月前
|
消息中间件 Java Kafka
集成Kafka到Spring Boot项目中的步骤和配置
集成Kafka到Spring Boot项目中的步骤和配置
264 7
|
5月前
|
druid Java 关系型数据库
在Spring Boot中集成Druid实现多数据源有两种常用的方式:使用Spring Boot的自动配置和手动配置。
在Spring Boot中集成Druid实现多数据源有两种常用的方式:使用Spring Boot的自动配置和手动配置。
793 5
|
5月前
|
Java 数据库连接 mybatis
在Spring Boot应用中集成MyBatis与MyBatis-Plus
在Spring Boot应用中集成MyBatis与MyBatis-Plus
123 5
|
5月前
|
监控 前端开发 Java
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成