当前位置:首页 > ControlSystem > DDS > 正文内容

Open Splice DDS 示例

新手程序猿小贺4个月前 (08-06)DDS122

根据实际项目写一个能够运行的示例程序:

Publisher:

#include <string>
#include <sstream>
#include <iostream>
#include "ccpp_dds_dcps.h"        /* Include the DDS::DCPS API */
#include"interlocks_DCPS.hpp"
#include"interlock_enums_DCPS.hpp"
#include"common_DCPS.hpp"
#include "interlocksSplDcps.h"
int main(){
   dds::domain::DomainParticipant dp(0);
   
   dds::topic::qos::TopicQos topicQos=dp.default_topic_qos()    // 保证当前Topic的信息保存在所有publisher之外,且在接下来的是可用的。
   << dds::core::policy::Reliability::Reliable();   // 保证当前Topic信息传递的可靠性级别。
   
   
   dds::topic::Topic<PyramidDDS::interlock_condition> inter_lock_topic(dp, "interlock_condition", topicQos);
   
   dds::pub::qos::PublisherQos pubQos
            = dp.default_publisher_qos()
                << dds::core::policy::Partition("room1");
   dds::pub::Publisher pub(dp, pubQos);
   dds::pub::DataWriter<PyramidDDS::interlock_condition> dw(pub, inter_lock_topic);
   
   PyramidDDS::interlock_e interlock=PyramidDDS::interlock_e::eILK_COUNT;
   PyramidDDS::interlock_condition data(interlock,true,1,"message");
   dw.write(data);
   
   std::cout<<"走到这一步"<<std::endl;
   
   return 0;


Suscriber:

#include <string>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <thread>
#include"interlocks_DCPS.hpp"
#include"interlock_enums_DCPS.hpp"
#include"common_DCPS.hpp"
#include "interlocksSplDcps.h"
#include "common/example_utilities.h"
std::ostream&
operator << (std::ostream& os, const PyramidDDS::interlock_condition& dc)
{
  os << "(id = " << dc.condition()
     << ", interlock = " << dc.interlock()
     << ", message = " << dc.messageText()
     << ")";
     
  return os;
}
int main(){
   dds::domain::DomainParticipant dp(0);
   
   dds::topic::qos::TopicQos topicQos=dp.default_topic_qos()    // 保证当前Topic的信息保存在所有publisher之外,且在接下来的是可用的。
   << dds::core::policy::Reliability::Reliable();   // 保证当前Topic信息传递的可靠性级别。
   dds::topic::Topic<PyramidDDS::interlock_condition> inter_lock_topic(dp, "interlock_condition", topicQos);
   dds::sub::qos::SubscriberQos subQos
            = dp.default_subscriber_qos()
                << dds::core::policy::Partition("room1");
   
   dds::sub::Subscriber sub(dp, subQos);
   dds::sub::DataReader<PyramidDDS::interlock_condition> dr(sub, inter_lock_topic);
   
   while(true){
       std::cout<<"开始读"<<std::endl;
       auto samples=dr.read();
       std::for_each(samples.begin(),
            samples.end(),
            [](const dds::sub::Sample<PyramidDDS::interlock_condition>& s) {
                std::cout << s.data() << std::endl;
            });
   }
   
   return 0;


注意:

  1. 在上述代码中,publisher和suscriber里面的dp,topic的name,partion都要保持一致,不然接收不到。

  2. 在suscriber里面,想打印信息到控制台里面,需要重载<<符号,不然的话会报错误,另外,不知道为什么,我用samples.bengin;samples<samples.end;samples++,也会报同类型错误,即使我不输出什么数据,很奇怪

  3. 编译执行程序需要链接文件,可以参考examples里面的示例

扫描二维码推送至手机访问。

版权声明:本文由控制系统发布,如需转载请注明出处。

本文链接:http://cim-cs.com/?id=16

分享给朋友:
返回列表

上一篇:Open Splice DDS 个人学习

没有最新的文章了...

“Open Splice DDS 示例” 的相关文章

Open Splice DDS安装

Open Splice  DDS网址:https://github.com/ADLINK-IST/opensplice 选择自己的版本使用前,请确认自己的环境里面包含运行依赖包,具体看github网址下面的POSIX / Linux Minimal Build Required...

Open Splice DDS 个人学习

opensplice的架构是,首先定义好每个信息(topic),将信息存储到GDS(Global Data Space)中,然后动态的分配publisher与subscriber。虽然数据在程序执行之初已经静态分配,但可以动态的分配publisher与subscriber。从而实现去中心化,可以部分...