C++ 如何使用Softing toolkit从OPC UA服务器异步读取操作回调中的DataValue响应中获取节点ID详细信息

C++ 如何使用Softing toolkit从OPC UA服务器异步读取操作回调中的DataValue响应中获取节点ID详细信息,c++,opc,opc-ua,C++,Opc,Opc Ua,我正在使用软件OPC UA工具包开发一个客户端。使用session->readAsync()我尝试从OPC UA服务器读取值,调用回调方法onReadComplete,并使用请求的DataValue向量,我可以从DataValue获取值,但无法获取具有namespaceIndex、IdentifierType、identifier的NodeId。在Visual Studio调试器中,这些值无法读取内存 读取异步: std::vector<ReadValueId> readValueI

我正在使用软件OPC UA工具包开发一个客户端。使用session->readAsync()我尝试从OPC UA服务器读取值,调用回调方法onReadComplete,并使用请求的DataValue向量,我可以从DataValue获取值,但无法获取具有namespaceIndex、IdentifierType、identifier的NodeId。在Visual Studio调试器中,这些值无法读取内存

读取异步:

std::vector<ReadValueId> readValueId1s;
ReadValueId ReadValueId1;
ReadValueId1.setNodeId(NodeId(2, _T("Counter1")));
ReadValueId1.setAttributeId(EnumAttributeId_Value);
readValueId1s.push_back(ReadValueId1);

// read the variable asynchronously
result = session->readAsync(pRdReq, EnumTimestampsToReturn_Both, 
readValueId1s, 0, pRdReq->getTransId());
std::vector readValueId1s;
ReadValueId ReadValueId1;
ReadValueId1.setNodeId(NodeId(2,_T(“Counter1”));
ReadValueId1.setAttributeId(EnumAttributeId_值);
readValueId1s.向后推(ReadValueId1);
//异步读取变量
结果=会话->读取异步(pRdReq、EnumTimestampsToReturn\u两者,
readValueId1s,0,pRdReq->getTransId();
回调方法:

void TestSession::onReadComplete(void* requestHandle, EnumStatusCode 
serviceResult, std::vector<DataValue>& values)
{
    for (unsigned int i = 0; i < values.size(); i++) {
        std::wcout << values[i].getValue()->getNodeId().toString() << std::endl;
    }
}
void TestSession::onReadComplete(void*requestHandle,EnumStatusCode
serviceResult,标准::向量和值)
{
for(无符号整数i=0;i
OPC UA读取响应包含一个数据值数组。每个OPC UA数据值结构包含

  • 状态码
  • 源时间戳
  • 服务器时间戳
  • 源皮秒
  • 服务器皮秒
OPC UA值结构包含

  • ArrayType(本例中的0=标量)
  • 数据类型(本例中为6=OpcUaType_Int32)
  • 值(来自联合,具体取决于ArrayType和DataType值)
实际上,在您的例子中,值是Int32 Variant Union value=46132370

编辑


ReadResponse DataValue数组中DataValue的顺序与您发送的ReadRequest中读取节点ID的顺序匹配。然后,您应该在发送ReadRequest之前保存信息,以便知道DataValue[“X”]针对哪个节点ID是值。

您能给我们提供一些代码吗?我已经添加了代码和调试器屏幕截图。感谢您提供的信息。我发现DataValue的顺序与读取请求中的顺序匹配。