OpenDDS系列(3) —— 第一个OpenDDS程序
文章目录
- @[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交换数据的结构。然后,发布者将定期发送该主题,并且将由订阅者接收,并将接收它。
**OpenDDS示例模式**
3.2 项目
为了尽可能保持代码的跨平台性,使用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
如果您想使用特定的编译器(例如更改体系结构),则需要添加-G
CMake选项,如下所示:
> 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
此时,服务器开始运行。
**DCPSInfoRepo 开始执行**
之后,打开另一个控制台,并启动publisher。转到我们构建项目的文件夹,输入bin\
文件夹,然后运行以下命令:
> .\publisher -DCPSConfigFile configuration.ini
输入以上命令后,publisher将会启动,并且在几秒钟之后,它将开始向控制台输出消息,这是通过DDS发送的消息。
**Publisher正在发送消息**
最后,打开第三个控制台。转到publisher服务器所在的同一文件夹,然后使用以下命令启动subscriber 服务器:
> .\subscriber -DCPSConfigFile configuration.ini
输入以上命令后用户将启动,初始化后控制台将显示从DDS接收到的消息,这些消息与发布者发送的消息相同。此时我们建立了一个可用的OpenDDS连接。
**用户打印收到的消息**
3.5 结论
在这篇文章中,我们展示了一个OpenDDS通信的一个小例子。
OpenDDS系列(3) —— 第一个OpenDDS程序相关推荐
- 【Python基础系列】每天一个小程序-01
文章目录 题目 参考代码 代码分析 题目 第0000题 将你的 QQ 头像(或者微博/信头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果. 参考代码 from PIL ...
- opendds开发实例linux,基于OpenDDS的应用程序开发(2)公布端实现
基于OpenDDS的应用程序开发 (2)公布端实现 本章主要介绍一个OpenDDS的应用程序的示例,演示如何开发一个将数据从公布端发送到订阅端的应用程序.该示例程序基于一个简单的消息应用程序,由一个简 ...
- Java调用OpenDDS(3)-自己编写调用OpenDDS的程序
第2篇消化理解了OpenDDS自带的Messager示例程序,这一篇就开始编写自己的OpenDDS程序. 提纲 1.编写IDL文件 2.将IDL编译为C++代码 3.将已生成代码编译为Java代码 4 ...
- Silverlight for Windows Phone 7开发系列(2):第一个Silverlight程序
前言 上一篇讲述了Windows Phone 7开发环境的搭建,这篇文章讲述如何创建,部署,调试以及运行Silverlight for Windows Phone应用程序,同时介绍如何Microsof ...
- [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序
本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(Paa ...
- SpringBoot系列二:搭建自己的第一个SpringBoot程序
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 一.根据官网手工搭建(http://projects.spring.io/spring-boot/#quick-start) 1 ...
- (转)WCF教程系列(1)-创建第一个WCF程序
作为微软技术.net 3.5的三大核心技术之一的WCF虽然没有WPF美丽的外观 但是它却是我们开发分布式程序的利器 但是目前关于WCF方面的资料相当稀少 希望我的这一系列文章可以帮助大家尽快入门 下面 ...
- AJAX教程系列一:环境安装及第一个ajax程序
去官网下载wamp服务器,一路next即可.PS:也可下载我本人所使用版本http://pan.baidu.com/s/1slOmEYx 下载dw wamp安装成功后,在你所在磁盘目录!![其中画红框 ...
- sharepoint 2016 学习系列篇(5)-创建一个应用程序网站
前面已经完成了整个sharepoint server 2016的安装和配置,接下来,我们当然是要创建一个应用程序网站. 1.创建应用程序网站 打开sharepoint管理中心,点击Applicatio ...
最新文章
- 5个java框架及其优缺点_各种Java Web框架的优缺点是什么?
- RocketMQ-初体验RocketMQ(10)-过滤消息_SQL92表达式筛选消息
- ICML 2021 | Option-GAI: 机器人任务太长太复杂?不妨试试层次化模仿学习
- Android官方开发文档Training系列课程中文版:分享文件之分享一个文件
- c语言 隐式声明,关于C#:隐式函数声明和链接
- 什么是贝叶斯定理?朴素贝叶斯有多“朴素”?终于有人讲明白了
- Tomcat_Servlet
- 虚幻引擎4.3发布:支持 iOS 8 的 Metal 图形 API
- 解决ipad,ios录屏保存失败-5823
- pandas实现分类汇总,查找不重复的一 一对应数据
- DoraemonKit一款功能齐全的Android研发助手
- 高数18讲_1000题错题总结_第三四讲
- VS2015/VS2017C++报错C++LNK1104 无法打开文件“ucrtd.lib”或无法打开包括文件“corecrt.h“
- 人工晶状体在线公式A常数优化
- 计算机论文摘要200字模板,设计论文摘要万能模板_论文摘要万能模板_论文摘要200字模板...
- 非功能需求分析--web开发课内实例
- 将安卓手机投屏到win10上
- creator多点触摸理解
- echarts 官网访问慢
- 李宏毅language课程Speach Recongition