簡體   English   中英

從 open62541Client 讀取節點的 UA_Arguments

[英]Reading UA_Arguments of a Node from open62541Client

我有興趣從客戶端讀取Method節點的 InputArguments 和 OutputArgument 節點。 假設我有 2 個 InputArgument 並且我正在嘗試讀取第一個 InputArgument。

    UA_Variant v;
    UA_NodeId n = UA_NODEID_NUMERIC(0, node_id_inp_arg);
    UA_Client_readValueAttribute(client, n, &v);
    UA_Argument* a = (UA_Argument*)v.data;
    std::cout<<(char*)a[0].name.data<<"\n";    // Prints junk
    std::cout<<a[0].arrayDimensionsSize<<"\n"; // Works
    //Need to access other attributes as well

我正在像上面那樣做,但不幸的是沒有成功。 任何可以提供幫助的人都將不勝感激。 我也想為 OutputArguments 做同樣的事情。 謝謝你。

方法在地址空間中沒有輸入和 output 參數,因此您無法“讀取”它們。 輸入和 output arguments 傳遞到 CallMethod 服務/從 CallMethod 服務傳遞。 (地址空間中可能有輸入和 output arguments 的描述,但我認為這不是你想要的)。

open62541中有UA_Client_CallServerMethod調用UA方法。

我想出了一個解決方案,但這不是很簡單

UA_ReadRequest request;
UA_ReadValueId id;
UA_ReadRequest_init(&request);
UA_ReadValueId_init(&id);
id.attributeId          = UA_ATTRIBUTEID_VALUE;
id.nodeId               = node; /* NodeId of the Input or Output Argument*/
request.nodesToRead     = &id;
request.nodesToReadSize = 1;
size_t argLen           = argument_length; /* Cardinatlity of argument */

UA_ReadResponse response = UA_Client_Service_read(m_client, request);

UA_StatusCode retval = UA_STATUSCODE_GOOD;
if(response.responseHeader.serviceResult != UA_STATUSCODE_GOOD){
    retval = response.responseHeader.serviceResult;
} else if(response.resultsSize != 1 || !response.results[0].hasValue){
    retval = UA_STATUSCODE_BADNODEATTRIBUTESINVALID;
}else if(response.results[0].value.type != &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]){
    retval = UA_STATUSCODE_BADTYPEMISMATCH;
}if(retval != UA_STATUSCODE_GOOD) {
    UA_ReadResponse_deleteMembers(&response);
    return retval;
}
retval = UA_STATUSCODE_BADNOTFOUND;

UA_ExtensionObject *value = reinterpret_cast<UA_ExtensionObject*>(response.results[0].value.data);

for(size_t l(0); l < argLen; l++){
    UA_Argument* arg = reinterpret_cast<UA_Argument*>(value[l].content.decoded.data);
    /* Do my stuff*/
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM