DDS技术分享(一)
1.DDS简介
DDS定义:Data Distribution Service 数据分发服务,是新一代分布式实时通信中间件协议,采用发布/订阅体系架构,强调以数据为中心,DDS提供了Qos的策略可以确保通讯信号的监测功能。
在汽车领域,2018年Adaptive AUTOSAR引用了DDS,作为可选择的通信方式之一。
DDS是开源的库,但是其开源的库比较庞大,在汽车行业引入DDS需要进行配置和筛减以达到满足车载通讯的目的,因此这这个工具会在很多的行业进行了适配。所以会有供应商来适配DDS的产品,作为第二供应商提供DDS的平台通讯和搭建。
2.DDS是一个以数据为中心的中间件协议和API标准,数据通过Topic进行标识。发布和接收都是以这种主题消息发布的方式完成通讯的。
如图所示的方式通讯。
在代码层面,通常这样去设置:
pub.topic.topicKind = NO_KEY;
pub.topic.topicName = “Topic”;
pub.topic.topicDataType = “StructType”;
pub.topic.historyQos.kind = KEEP_LAST_HISTORY_QOS;
pub.topic.historyQos.depth = 30;
pub.topic.resourceLimitsQos.max_samples = 50;
pub.topic.resourceLimitsQos.allocated_samples = 20;
pub.qos.m_reliability.kind = RELIABLE_RELIABILITY_QOS;
pub.qos.m_durability.kind = TRANSIENT_LOCAL_DURABILITY_QOS;
解释一下:
topicName:就是所需要发布的话题名称
topicDataType:是这个话题所设置的话题数据结构,注意这个结构式在IDL文件中设置的。
关于IDL的设置,会在下一章节讲解,简单来说就是自动生成代码的设置文件,会自动生成所需代码,生成的代码是接口代码,开发人员可以使用这些接口文件调用进行代码实现。
historyQos:这是Qos通信设置,用来设置通信的状态等
m_reliability :用来设置Qos状态。
以上是发送端的代码。
sub.topic.topicKind = NO_KEY;
sub.topic.topicName = “Topic”;
sub.topic.topicDataType = “StructType”;
sub.topic.historyQos.kind = KEEP_LAST_HISTORY_QOS;
sub.topic.historyQos.depth = 30;
sub.topic.resourceLimitsQos.max_samples = 50;
sub.topic.resourceLimitsQos.allocated_samples = 20;
sub.qos.m_reliability.kind = RELIABLE_RELIABILITY_QOS;
sub.qos.m_durability.kind = TRANSIENT_LOCAL_DURABILITY_QOS;
以上是接收端的代码。
下一章讲解IDL。。。 。。。