OpenDDS系列(3) |
您所在的位置:网站首页 › opendds › OpenDDS系列(3) |
文章目录
@[toc]3.1 发送数据3.2 项目3.2.1 主题3.2.2 Publisher(发布者)3.2.3 Subscriber(订阅者)
3.3 在Windows上构建3.4 在Linux上构建3.4.1 运行
3.5 结论
3.1 发送数据
我们将创建一个主题,这是一个通过DDS交换数据的结构。然后,发布者将定期发送该主题,并且将由订阅者接收,并将接收它。 为了尽可能保持代码的跨平台性,使用CMake构建项目。该项目可以从GitHub页面下载。只需转到需要保存项目的文件夹并执行以下代码: > git clone https://github.com/wteamit/opendds-sample-01.git该项目有两个分支:订阅者和发布者。除此之外,它们之间共享一些代码,代表用于交换的消息(主题)。 3.2.1 主题为了交换数据信息,我们需要一个主题。 主题是具有许多属性的结构体(通常在.idl文件中定义)。.idl文件由OpenDDS编译,同时也会创建出.h和.cpp等支持文件。当一个程序包括这些文件时它就可以发送和接收主题。 这就是我们想要创建的主题: 它包含两个字段: 一个消息字符串;一个整型计数器。这是该项目的Topics.idl文件: module TopicSample { #pragma DCPS_DATA_TYPE "TopicSample::Message" struct Message { string message; long counter; }; };我们可以看到,主题必须插入模块中(类似命名空间)。我们以类似 C语言 的格式创建结构,然后我们预先使用 #pragma指定一些主题属性。稍后我们会更详细地看到它。 现在可以通过执行以下命令从这个idl创建源文件: > opendds_idl.exe Topics.idl -o . > tao_idl.exe Topics.idl -o . > tao_idl.exe -Ipath\to\OpenDDSTopicsTypeSupport.idl -o .为了使用这些命令,必须使用OpenDDS文件夹内的命令 setenv.cmd 设置环境变量。也许还有必要设置可执行文件的路径 %PATH%。或者如果需要,可以使用可执行文件的完整路径。 无论如何,这些命令将创建与以下主题相关的c++文件: TopicsC.cpp TopicsC.h TopicsC.inl TopicsS.cpp TopicsS.h TopicsTypeSupport.idl TopicsTypeSupportC.cpp TopicsTypeSupportC.h TopicsTypeSupportC.inl TopicsTypeSupportImpl.cpp TopicsTypeSupportImpl.h TopicsTypeSupportS.cpp TopicsTypeSupportS.h这些文件必须包含在项目中,其中包含了发布者和订阅者。将在以下的文章中介绍这些文件的确切含义以及如何从IDL文件创建他们。 3.2.2 Publisher(发布者)现在我们将介绍如何通过这个主题发送数据。 该发布者项目是一个在DDS中使用主题发送随机消息的程序,它连接到DDS,每隔一秒发一次消息。 为了维护和组织代码,主要有两个类: MessageCreator: 创建随机消息的类Publisher: 这是包含OpenDDS发布者的类程序首先创建发布者,并通过创建一些OpenDDS类来初始化它。然后,在一个循环中,通过使用MessageCreator每秒创建一条消息,然后使用Publisher将其发送出去。 3.2.3 Subscriber(订阅者)订阅者是发布者的双重身份。它主要包含两个类,其中一个用于创建OpenDDS订阅者,另外一个名为MessageDataReaderListenerImpl,通常由订阅者使用,主要目的是为了知道如何处理送达的主题。我们向这个类传递一个函数,当它收到之后将会打印主题。 3.3 在Windows上构建该项目基于CMake,所以配置起来很简单。打开一个控制台,创建一个新文件夹,然后运行以下命令: > cmake-DDDS_ROOT_DIR=path\to\your\dds\installation\ \path\to\this\sample如果您想使用特定的编译器(例如更改体系结构),则需要添加-GCMake选项,如下所示: > cmake -G"Visual Studio 14 2015 Win64" -DDDS_ROOT_DIR=path\to\your\dds\installation\ path\to\this\sample当一切正常时,您可以使用以下命令构建项目: > cmake --build此时,在构建文件夹中可以看到一个文件夹bin\,输入它并找到可执行文件。 3.4 在Linux上构建在Linux上构建的步骤是一样的,唯一的区别是使用setenv.sh而不是setenv.cmd. 3.4.1 运行为了运行例子,我们需要三个控制台。 在第一个控制台上,我们必须启动InfoRepo。转到OpenDDS二进制目录,运行setenv脚本后,使用以下命令启动Inforepo: > ..\setenv.cmd > .\DCPSInfoRepo -ORBEndpoint iiop:**//**localhost:12345 -d domain_ids此时,服务器开始运行。 之后,打开另一个控制台,并启动publisher。转到我们构建项目的文件夹,输入bin\文件夹,然后运行以下命令: > .\publisher -DCPSConfigFile configuration.ini输入以上命令后,publisher将会启动,并且在几秒钟之后,它将开始向控制台输出消息,这是通过DDS发送的消息。 最后,打开第三个控制台。转到publisher服务器所在的同一文件夹,然后使用以下命令启动subscriber 服务器: > .\subscriber -DCPSConfigFile configuration.ini输入以上命令后用户将启动,初始化后控制台将显示从DDS接收到的消息,这些消息与发布者发送的消息相同。此时我们建立了一个可用的OpenDDS连接。 在这篇文章中,我们展示了一个OpenDDS通信的一个小例子。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |