RedHawk属性查询/从组件A到组件B的配置

时间:2016-09-30 19:52:07

标签: c++ redhawksdr

我是RedHawk的新手,我有以下情况:

我有三个组件A B和C,B和C都具有属性技能,这是一个描述B或C能力的关键字。流程是:A启动并查询B.skill和C.skill,以便A知道B和C可以做什么。然后当A遇到适合B或C的技能组的任务时,A将启动该特定组件来完成任务。

我的问题是:组件A如何访问B的属性?我在网上查了一下,发现了一些简单的redhawk查询介绍(https://redhawksdr.github.io/Documentation/mainch4.html 4.6.2节),但我希望有人能给我看一个代码片段来演示A如何访问B的属性。另外,我找不到查询api的任何详细文档。如果有人能指导我,那就太好了。

谢谢。

1 个答案:

答案 0 :(得分:0)

这个例子可能会被清理一下但是在我的示例代码片段中,CompA有两个输出端口,两个输出端口都是名称为compB_connection和compC_connection的类型资源。然后我们可以连接到compB和compC的资源端口(也称为棒棒糖端口),它是与组件本身的直接连接,因为它继承自资源API。这使我们可以访问组件上的方法,如启动,停止,配置,查询等。有关完整列表,请参阅idl文件。

CompB和CompC都有一个id为"技能"的属性。我们可以使用查询API来查询这些属性的值。

std::string CompA_i::any_to_string(CORBA::Any value) {
    std::ostringstream result;
    const char* tmp;
    value >>= tmp;
    result << tmp;
    return result.str();
}

int CompA_i::serviceFunction() {
    CF::Properties compB_props, compC_props;

    compB_props.length(1);
    compC_props.length(1);

    compB_props[0].id = "skill";
    compC_props[0].id = "skill";

    compB_connection->query(compB_props);
    compC_connection->query(compC_props);

    std::cout << "CompB Skills: " << any_to_string(compB_props[0].value) << std::endl;
    std::cout << "CompC Skills: " << any_to_string(compC_props[0].value) << std::endl;

    return FINISH;
}

现在,当我们将CompA连接到CompB和CompC并启动波形或沙箱时,我们得到以下输出:

CompB Skills: nunchuck skills
CompC Skills: bow hunting skills

在核心框架代码的prop_helpers.cpp中找到了any_to_string方法;在某个头文件中可能有一个辅助函数,这将是一个更好的修复。