从 open62541Client 读取节点的UA_Arguments
Reading UA_Arguments of a Node from open62541Client
我对从客户端读取方法节点的输入参数和输出参数节点感兴趣。假设我有 2 个输入参数,并且我正在尝试读取第一个输入参数。
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
我正在做上述事情,但不幸的是没有成功。任何能提供帮助的人都可以不胜感激。我也想为输出参数做同样的事情。 谢谢。
方法在地址空间中没有其输入和输出参数,因此您无法"读取"它们。输入和输出参数传递到 CallMethod 服务/从 CallMethod 服务传递。(地址空间中可能有输入和输出参数的描述,但我认为这不是您想要的(。
open62541 中有调用 UA 方法的UA_Client_CallServerMethod。
我想出了一个解决方案,但这并不简单
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*/
}
相关文章:
- 具有变量Number of Arguments的std::函数的矢量
- 如何修复"too few arguments to function"?
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 开放CV垫"Sizes of input arguments do not match"的问题
- 有没有办法在初始化字符串时避免来自 clang-tidy(fuchsia-default-arguments)的警告?
- glGenVertexArrays and glGenBuffers arguments
- 'type_alias<char[N]>{}' VS 'char[N]{}' in function's arguments
- Command Line Arguments wxCmdLineArgsArray in wxWidgets
- OpenCV std::vector for cv::Mat arguments
- map.insert:"Invalid arguments"错误与 pair<enum,vector<*>>
- VS说"Too few arguments...",但其他编译器给了我正确的输出?
- 与OPC UA服务器的连接通过思科工作,但不通过Sinema RC客户端
- Win32 CreateThread() Arguments Zero'ed?
- OPC-UA open62541 sdk 运行服务器后动态添加变量节点
- Eclipse CDT - 使用模板默认值时的"Invalid arguments"
- "All arguments to functions are passed by value" C 中的,C++ 中对引用传递的混淆
- std::result_of for lvalue/rvalue arguments
- RPC:xdr_bytes "Can't encode arguments"当阵列太大时
- 是“ Gnu-Zero-variadic-Macro-arguments”可靠地忽略
- MEX 编译给出"there are no arguments to ... that depend on a template parameter"错误