一种DDS内部实体数据关联和处理的实现方法与流程

文档序号:17718925发布日期:2019-05-22 02:01阅读:763来源:国知局
一种DDS内部实体数据关联和处理的实现方法与流程

本发明涉及一种基于dds的数据监听方法,尤其涉及一种dds内部实体数据关联和处理的实现方法。



背景技术:

随着信息化的建设发展,需要面对多变的海量数据信息,实时、高效、高速的数据交互具有至关重要的地位。因此,建立实时性强、可靠性高、安全性好的信息传输中间件,提高系统互联能力,满足系统内各种信息交换和共享需求,并解决应用软件之间的数据共享和集成问题是亟待解决的问题。

数据分发服务(datadistributionservice,dds)是对象管理组织(objectmanagementgroup,omg)继推出corba规范后颁布的实现订阅/发布通信模式、满足实时性要求的软件设计标准和规范,该规范对分布式实时系统中数据发布、传递和接收的接口和行为进行了标准化。dds纯粹以数据为中心来进行数据分发,并将资源状况、对资源的期待程度、网络状况等都用qos参数来描述,大大增强了通信的实时性和灵活性,简化了分布式系统中数据的有效发布,为实时环境下以数据为中心的分布式应用提供高效、有用的通信服务。

dds定义了以数据为中心的发布/订阅机制,以数据为中心的发布/订阅模型基于全局数据空间(globaldataspace)的概念,如图1所示。

dds规范包括域参与者、发布者、订阅者、数据类型、数据写入者、数据读取者、主题、内置主题和qos等。在具体的产品实现中,dds处于操作系统之上、用户应用程序之下,可以很好的屏蔽底层系统、总线的异构等细节,对应用数据提供统一的api接口,具体如下图2所示。

dds使用域来划分数据通信的子空间,隶属于同一个域的各个域参与者(participant)可以互相通信,每个域参与者里面可以有一个或多个发布者(publisher)或订阅者(subscriber),每个发布者里面可以有一个或多个数据写入者(datawriter),每个订阅者里面也可以有一个或多个数据读取者(datareader)。数据写入者通过数据通道将数据发送到相应的数据读取者处,数据读取者则从数据通道中获取自己感兴趣的数据,数据写入者和数据读取者通过主题(topic)和qos进行匹配和建立联系,一般每个数据写入者或数据读取者只写入或读取一种类型的数据。

随着dds越来越多的被使用,对其配套的工具需求较为迫切,尤其对dds的监控管理工具的诉求较为强烈,需要监控当前各个域下的主题、发布者、订阅者等相关信息。dds标准中有规定了一些内置主题(比如:dcpspublication、dcpssubscription和dcpsparticipant等),我们可以通过内置主题来实现相关的监控管理,但是dds标准没有规定与内置主题相匹配的内部控制数据的相关qos策略,当前一般的实现就通过一些全局变量来记录相关数据,这样不但会提高代码的耦合度,而且在多线程的场景下降低处理效率和性能。



技术实现要素:

发明目的:本发明提供了一种实现数据监听的dds内部实体数据关联和处理的实现方法,创建内部控制数据策略inner_ctrl_dataqos,通过datareader直接获取数据信息,从而实现基于dds内部主题的数据监听和管理。

技术方案:本发明所述的一种dds内部实体数据关联和处理的实现方法,包括步骤:

(1)建立一个基于dds的通信环境,创建一个id为a的域,创建域参与者对象test_domain,其中,a的取值范围为0~230;

(2)基于test_domain创建一个用于读数据的订阅者对象test_sub;

(3)通过dds标准规定的应用程序编程接口获取test_domain的内置订阅者;

(4)通过dds标准规定的应用程序编程接口获取dds规范中定义的内置主题对应的数据读取者datareader的指针信息及qos策略信息;

优选地,所述内置主题为“dcpspublication”。

(5)创建并设置datareader的内部控制数据策略inner_ctrl_dataqos信息,包括用于存储枚举类型的变量inner_type和用于存储订阅者test_sub的地址的字段value;所述枚举类型包括成员变量:表示默认值的“dds_inner_ctrl_default”、表示订阅者的“dds_inner_ctrl_sub”、表示发布者的“dds_inner_ctrl_pub”、表示数据写入者的“dds_inner_ctrl_writer”、表示数据读取者的“dds_inner_ctrl_reader”、表示保留字段的“dds_inner_ctrl_reserve”,其枚举值分别为0、1、2、3、4、255;

(6)在datareader上注册回调函数;

(7)进入监听状态,等待回调函数被触发;

(8)当监听到数据时,datareader的回调函数被触发,通过解析回调函数的输入参数,获取输入参数的qos策略的配置信息,判断其中的inner_ctrl_dataqos信息中的inner_type是否赋值为步骤(5)中设定的枚举类型,若是则执行步骤(9),否则跳转至步骤(7);

(9)判断inner_ctrl_dataqos信息中的value字段是否为空,若不为空,则获取到订阅者test_sub信息,执行步骤(10);否则,跳转至步骤(7);

(10.1)获取当前域的主题名称信息;

(10.2)创建并在test_domain上注册动态数据类型;

(10.3)根据步骤(10.1)中的主题名称信息,创建相对应的主题;

(10.4)根据inner_ctrl_dataqos策略信息中value存储的订阅者地址信息,创建步骤(10.3)所述主题对应的新的数据读取者;

(11)在新的数据读取者上设置回调函数,进行当前域和该主题的数据监听、监控和统计。

有益效果:本发明提高了dds工具软件的开发效率,降低了代码的耦合度,降低了dds工具软件的设计难度,同时,提高了代码的处理性能。

附图说明

图1是dds架构图;

图2是dds中间件位置示意图;

图3是本发明实施例基于dds内置主题dcpspublication来监听指定域信息流程示意图;

图4是本发明实施例监听指定域下各个主题消息流程图。

具体实施方式

下面结合附图和实施例对本发明的技术方案作进一步的说明。

如图3所示,以dcpspublication作为dds内置主题为例,本发明所述的一种dds内部实体数据关联和处理的实现方法,包括步骤:

(1)创建一个域id为10的域参与者(domainparticipant)对象test_domain;

(2)基于test_domain创建一个订阅者(subscriber)对象test_sub;

(3)通过dds的对外接口方法获取test_domain的内置订阅者buildin_sub;

(4)通过dds的对外接口方法获取内置主题“dcpspublication”对应的数据读取者(datareader)buildin_datareader;

(5)通过dds的对外接口方法获取buildin_datareader当前的qos值信息;

(6)设置buildin_datareader当前的qos值中的inner_ctrl_dataqos策略信息,该qos策略字段定义及说明见表1和表2,把inner_ctrl_data中的type参数设置为dds_inner_ctrl_sub,把value参数设为test_sub的地址信息;

(7)给buildin_datareader设置监听回调函数on_data_available;

(8)buildin_datareader进入监听状态,等待其回调函数on_data_available被触发;

(9)监听到数据时,buildin_datareader的回调函数on_data_available被触发,根据on_data_available的输入参数datareader获取该数据读取者的qos值;

(10)根据上一步骤获取的qos信息,判断inner_ctrl_dataqos策略信息中的type是否为dds_inner_ctrl_sub,若为dds_inner_ctrl_sub则执行下面步骤,否则跳出当前的处理,直接进入监听状态,等待下一个消息到来;

(11)获取inner_ctrl_dataqos策略信息中value携带订阅者信息是否不为空,若不空,执行下一步骤,否则跳出当前的处理,直接进入监听状态,等待下一个消息到来;

(12)获取当前域的主题名称信息;

(13)创建动态数据类型;

(14)在域test_domain上注册上一步骤创建的动态数据类型;

(15)在域test_domain上创建在步骤十二中获取到的主题名称所对应的主题(topic);

(16)根据inner_ctrl_dataqos策略信息中value携带订阅者信息,创建步骤十五中主题对应的数据读取者(datareader);

(17)在上一步骤中创建的datareader上设置相关的监听回调函数;

(18)进入监听状态,这样就可以监听当前域上各个主题的数据信息。

对基于dds标准中的其他内置主题的数据监测方法,其步骤与上述方法类似,不做赘述。

表1inner_ctrl_data策略参数

表2inner_ctrl_data_type枚举定义说明

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1