OpenDDS简单示例

OpenDDS简单示例

1 概述

对于一个搞软件的人来说,接触一个新软件或库或架构,最先想的肯定不是它是如何实现的,而是想让它运行起来,看看效果。所以刚接触OpenDDS,首先想的也是写个小demo,尽管OpenDDS开发指南中已经详细介绍了一个小例子,但这里还是再次说明一下详细开发步骤。
前提环境:

  • vs2015 

  • 安装好的perl

  • 编译并配置好的OpenDDS。不会请看https://blog.csdn.net/a369189453/article/details/81082543

2 主题相关数据文件生成

2.1 IDL文件定义

示例:TopicData.idl

module TopicData{
    #pragma DCPS_DATA_TYPE "TopicData::Message"
    #pragma DCPS_DATA_KEY  "TopicData::Message id"

     struct Message{
        string id;
        int posX;
        int posY;
    };
};

OpenDDS中主题的格式是用一个IDL文件来定义的。IDL文件使用DCPS_DATA_TYPE定义一个结构体数据类型,OpenDDS规定数据类型必须为一个结构体。结构体中可能包含标量类型(short、long、float等等)、枚举类型、字符串、队列、数组、结构体、以及它们的组合。,IDL文件支持的数据类型可参看:https://blog.csdn.net/rain_qingtian/article/details/34886727。
使用DCPS_DATA_KEY定义了一个数据类型的键。一种数据类型可能有0个或多个键。这些键用于区分同一个主题内的不同实体。每个键应当是数值型、枚举型、字符串串或者是这些类型的typedef。DCPS_DATA_KEY限定了作用域的数据类型以及成员名,成员名标识为该类型的键。多个键由多个DCPS_DATA_KEY指定。在上面的IDL定义中,指定了id作为Demo::Pos的键。每个样本发布时带有一个唯一的id值,这样就可以区分同一主题中的不同实例。由于使用了默认的QoS策略,随后带有相同pos_id值的样本就会替代先前的样本。结构体、序列和数组不能直接用来做key。
详细idl文件如何定义在此就不介绍,可以看开发指南,值得注意的是IDL中大括号不能另起一行,必须与代码同行。这里直接给出一个idl

2.2 编译IDL文件
2.2.1 方法一

使用vs开发人员命令行工具。切到TopicData.idl文件所在目录,输入:
tao_idl.exe TopicData.idl。文件夹会生成新文件如下:在这里插入图片描述

再次输入命令:opendds_idl.exe TopicData.idl。文件夹会生成新文件如下:
在这里插入图片描述

2.2.2 方法二

编写mpc文件:Demo.mpc。前提是opendds编译且配置好了。

project(*idl): dcps{
    TypeSupport_Files{    
        TopicData.idl
    }
    custom_only = 1
}

使用vs开发人员命令行工具。切到TopicData.idl文件所在目录,输入:
perl C:\SoftWare\OpenDDS\ACE_wrappers\MPC\mwc.pl -type vc14
mwc.pl位置自己确定,这里是vs2015所以是vc14。文件会生成DDSTopic.sln解决方案。打开解决方案编译,文件夹会生成新文件如下:

在这里插入图片描述

3 程序实现

程序分为发布端和订阅端,本来想详细介绍一下的,但由于时间关系,加上自带示例已经很清楚了,相信懂编程的同学都会照猫画虎的,在这里就直接给出根据上面idl定义数据的一个小例子。里面有运行说明。
https://download.csdn.net/download/a369189453/10879249

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值