DDS (Data Distribution Service, 数据分发服务)是一种基于数据的通信中间件标准,目的是建立分布式系统的高质量的数据通信。
DDS以“全局数据空间”的形式表示数据,能够在正确的时间将正确的信息高效、稳健地传输到正确的地方。因此,广泛应用于汽车、医疗、机器人和智能交通等不同行业。

图 1 DDS应用在不同行业
DDS重要概念
在介绍DDS在CANoe中的应用之前,先来了解一下DDS的重要概念。
1. Domain(域):域是DDS的基本结构,是一个通信平面,连接所有能够互相通信的应用程序的分布式概念,由域名(Domain Name)和唯一Domain ID标识。
2. Domain Participant(域参与者):定义域(Domain)及主题(Topic)。
3. Publisher/Subscriber(发布者/订阅者):数据发送/接收的终端,发送数据的一方称为Publisher,接收数据的一方称为Subscriber。
4. Topic(主题):定义分发的数据,连接Publisher和 Subscriber的桥梁,标识传输的数据类型和名称。
5. DataWriter/ DataReader(数据写入器/数据读取器):DataWriter基于绑定的Topic,由应用程序发送数据的实体,1个DataWriter隶属于1个Publisher;DataReader访问Subscriber收到的数据,1个DataReader隶属于1个Subscriber。DataWriter/DataReader与Topic有一一对应关系。
6. QoS(Quality of Service服务质量):是控制DDS服务的特性。Topic, DataWriter, DataReader, Publisher, Subscriber以及Domain Participant各实体均可配置其各自的QoS规则,这些QoS互相存在兼容性检查。

图 2 DDS重要概念
随着 DDS 技术在汽车电子领域的广泛应用,Vector公司为了满足客户需求,从 CANoe 16 SP3版本开始引入对 DDS 仿真、分析和测试的支持,CANoe 19版本开始将DDS设为CANoe的扩展选项包,在该扩展选项包下可以支持仿真Publisher/Subscriber、配置QOS策略、通过Trace窗口监控和分析DDS报文等功能。下面将以CANoe 19 SP2中的DEMO工程DDS Basic Medical为例,介绍DDS在CANoe软件中的应用。
DDS的DEMO工程示例
一、 该示例展示了如何使用 CANoe 对DDS参与者进行建模,从而能够接收和发送DDS消息。

图 3 DDS Basic Medical工程
二、 在仿真模式下运行该工程,信号发生器模拟的数据通过传感器(Sensor)发送,监控器(Monitor)接收到数据,数据清晰地显示在Trace窗口、图形窗口以及监控面板中。

图 4 DDS Basic Medical工程具体信息
三、 该工程的相关数据都在vCDL(Vector Communication Description Language)数据库文件中定义,在整个DDS通信配置中,vCDL是CANoe Communication Concept中描述通信对象的关键语言,接下来结合DDS Basic示例工程中的vCDL对建模过程进行说明:
1. 通过import module"DDS"语句导入DDS模块,然后基于该模块进行DDS通信建模。
2. 定义结构体作为Topic(示例中 HealthData),结构体内部可使用一些常规数据类型,如整型、浮点型、布尔型、字符串、结构体、数组等。
3. 定义接口(IMonitor):在接口中,首先使用关键字consumed data声明该接口数据类型是"HealthData"的数据,配置数据属性。
4. 将接口实例化为DDS Subscriber (示例中 Monitor),并设置其QoS规则。
5. 使用关键字reverse将接口实例化为DDS Publisher(示例中Sensor),并设置其QoS规则。

图 5 vCDL建模过程
若数据类型已在IDL(DDS的接口描述语言)中定义,可参考下图在vCDL中使用对应的数据类型:

图 6 IDL与vCDL转换对应关系
创建DDS仿真模型
在了解了上述示例后,您可能会想知道:如何从头开始创建一个完整的DDS工程?我们将通过一个具体的案例——构建DDS DataWriter的仿真模型,来详细说明。

图 7 构建DDS DataWriter的仿真模型
在这个案例中,为了测试 Monitor(SUT)的数据接收和处理能力,使用CANoe仿真DDS DataWriter(Sensor),负责发布名为"HelloWorldData Msg"的Topic数据。
1. 在CANoe中,使用Distributed Objects(DOs)建立DDS通信。

图 8 Distributed Objects(DOs)建立DDS 通信
2. 基于Communication Setup仿真模式,建立vCDL数据库文件
注:如果已经有IDL文件,CANoe中附带的插件可以将IDL直接转换成vCDL文件。

图 9 新建vCDL文件
3. 编辑文件如下图所示,DDS DataWriter(Sensor)和 DDS DataReader(Monitor)具有相同的Domain ID 、Topic 名称、数据类型和兼容的QoS时才能互相通信,若与真实的SUT通信,需通过属性指定CANoe端使用的网卡IP地址。配置完成后可以通过Communication Setup中的Load Data Source导入。

图 10 编辑vCDL文件
4. 通过网线或Vector Ethernet Hardware连接SUT的网络接口和PC端网络接口,并修改PC端网口IP地址,配置其与SUT的IP地址在相同网段内。
注:CANoe 16/17 版本暂不支持使用Vector Ethernet Hardware(如 VN5650)作为DDS通信硬件。

图 11 物理连接
5. Communication Setup中会自动识别vCDL文件中实例化的对象作为DDS Participants, Participants的默认状态为On/Simulated(CANoe),用户可根据需求将不需要CANoe仿真的SUT状态设置为Off,由于本案例没有真实SUT,所以Sensor与Monitor都设置为On/Simulated(CANoe)。
图 12 设置Participants状态
6. 启动工程后,发送Topic数据,点击Simulation->Application Panel来激活 Sensor的Application Panel。接着,选择所需Topic并设置相关参数,点击 Apply 即可发送。

图 13 通过Application Panel发送数据
除此之外,也可以通过添加CAPL文件,编辑脚本发送。在Communication Setup窗囗点击Application Models->Add添加.can文件。

图 14 添加.can 文件
编辑.can文件,在Symbol Explorer窗口中拖拽DO数据成员到CAPL编辑界面,并使用特殊符号“$”对其进行赋值操作。

图 15 编辑.can文件
7. 打开Trace窗口,可以看到DDS报文的具体信息

图 16 DDS报文信息
上面是构建DDS DataWriter的过程,如果想要构建DDS DataReader(如下图所示), 验证 Sensor(SUT)发布的数据,使用CANoe仿真DDS DataReader(Monitor),负责接收名为"HelloWorldData Msg"的Topic数据。方法与构建DDS DataWriter大致相同。

图 17 构建DDS Data Reader的仿真模型
通过Distributed Objects(DOs)建立DDS通信后,编辑vCDL以调整DDS通信模型,具体包括修改数据类型、Domain ID、DDS Topic名称以及QoS规则设置。随后的物理连接及设置Participants状态等操作,与构建DDS DataWriter时的流程一致。完成上述配置后,即可运行工程,并在CANoe中接收并观测数据。

图 18 编辑vCDL文件
以上就是有关DDS在CANoe软件中应用的相关内容,期待在未来的使用中,会有更多的应用场景!如果您有任何问题,都欢迎随时联系我们的支持团队:support@dotrustech.com,我们竭力为您解答!
391

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



