【问题标题】:DDS C++ - Data Distribution ServiceDDS C++ - 数据分发服务
【发布时间】:2017-08-01 16:06:47
【问题描述】:

我开始使用 C#,并尝试测试 dds 应用程序的代码。我取自:http://www.laas.fr/files/SLides-A_Corsaro.pdf

using System;
/**********************************************************
 * Definition for the TempSensorType
 **********************************************************/
enum TemperatureScale{
    CELSIUS,
    KELVIN,
    FAHRENHEIT
};
struct TempSensorType{
    short id;
    float temp;
    float hum;
    TemperatureScale scale;
};
#pragma keylist TempSensor id

/**********************************************************
 * Main
 **********************************************************/
static public void Main(string[] args){

    dds::Topic<TempSensorType> tsTopic(TempSensorTopic);
    dds::DataWriter<TempSensorType> dw(tsTopic);
    dds::DataReader<TempSensorType> dr(tsTopic);
    dds::SampleInfoSeq info;

    TempSensorSeq data;
    TempSensorType ts;
    ts = new TempSensorType { 1, 25.0F, 65.0F, CELSIUS };
    dw.write(ts);
    ts = new TempSensorType { 2, 26.0F, 70.0F, CELSIUS };
    dw.write(ts);
    ts = new TempSensorType { 3, 27.0F, 75.0F, CELSIUS };
    dw.write(ts);
    sleep(10);
    while (true){
        dr.read(data, info);
        for (int i = 0; i < data.length(); ++i)
            std::cout << data[i] << std::endl;
        sleep(1);
    }
    Console.WriteLine("Bonjour");
}

我开始理解每段代码的用途。但我有疑问 关于主要的 4 行,以“dds::”开头的那些,我认为它们是错误的 - 我得到的是“预期的标识符”。如果您能提供帮助,将不胜感激。

【问题讨论】:

  • 这到底有什么问题?你有例外吗?
  • 是的,我在所有这些中都注意到“预期标识符”。我想这是因为语法。
  • 这是 C++,不是 C#。 #pragma keylist.... 不是有效的 C# 代码,但它是有效的 C++。与std::cout &lt;&lt; data[i] &lt;&lt; std::endl; 相同
  • 我没有看到包含 DDS 命名空间的任何内容。还有你用的是哪个库?
  • 是的,你是对的!我会重新从底部开始。

标签: c++ communication publish-subscribe data-distribution-service opensplice


【解决方案1】:

在我看来,它不是有效的 DDS 代码。您似乎缺少 IDL 定义(应该解释 #pragma)和代码。

您必须首先在 .idl 文件中创建主题,然后构建 id 以创建您在程序中使用的类,然后使用程序库,然后一切都丢失了。

开始下载 DDS 实现,例如 OpenDDSFast-RTPS。除此之外,您还可以从一个工作的 OpenDDS 示例中从头开始检查 this site 中的 OpenDDS 部分。

【讨论】:

  • 非常感谢,您的回答帮助我更好地理解了!
  • 我在安装 OpenDDS 时遇到问题...当我构建 DDS_TAOv2_all 时出现几个错误,似乎 dds\ 和 ace\ 丢失了。他们是图书馆吗?我在哪里可以找到它们?
  • 您没有或不在路径中。您是否按照教程的每个步骤进行操作?
  • 我很确定我正在遵循每一步。我认为他们不在场。可能(?)
  • 成功了!问题是 OpenDDS 的版本……我现在正在做“第一个 OpenDDS 程序”
猜你喜欢
  • 1970-01-01
  • 2016-02-05
  • 2017-06-08
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
相关资源
最近更新 更多