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

RedHawk Property query/Config from Component A to Component B

本文关键字:组件 属性 查询 配置 RedHawk      更新时间:2023-10-16

我是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),但我希望如果有人能给我展示一个代码片段,演示如何访问B的属性。另外,我找不到查询api的任何详细文档。如果有人能告诉我怎么走就太好了。

谢谢。

这个例子可能会得到一些清理,但在我的例子片段中,CompA有两个输出端口,都是资源类型,名称为compB_connection和compC_connection。然后我们可以连接到compB和compC的资源端口(也称为棒棒糖端口),这是一个直接连接到组件本身的端口,因为它继承了资源API。这使我们能够访问组件上的方法,如start、stop、configure、query等。有关完整列表,请参阅idl文件。

CompB和CompC都有一个id为"skill"的属性。我们可以使用查询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

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