2016-09-30 47 views
0

我很新的紅鷹和我有以下情形:紅鷹物業查詢/配置從成分A成分B

我有三個組成部分AB和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的詳細文檔。如果有人能指引我,那將是非常棒的。

謝謝。

+0

爲了幫助創建一個片段,你可以讓我知道這些組件寫入哪種語言? –

+0

嗨Youssef,這些組件是用cpp編寫的。 – KKsan

回答

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 

的any_to_string方法在prop_helpers.cpp發現,在覈心框架碼;在某個頭文件中可能會有一個幫助函數,這將是一個更好的解決方案。

+0

非常感謝! – KKsan

+0

假設A想訪問B中名爲'firepower'的屬性('firepower'是一個結構體,它包含一個名爲'calibre'的字符串),代碼如何改變? – KKsan