繁体   English   中英

如何使用Softing工具包从OPC UA服务器的异步读取操作的回调中的DataValue响应中获取NodeId详细信息

[英]How to get NodeId details from DataValue response in callback of async read operation from OPC UA server using Softing toolkit

该图显示了uint32值,但我也需要NodeId详细信息,就像readAsync中的NodeId一样,它是“ Counter1”。我正在使用Softing OPC UA工具包来开发客户端。 使用session-> readAsync()我尝试从OPC UA服务器读取值,使用请求的DataValue的向量调用回调方法onReadComplete,我可以从DataValue中获取值,但无法使用namespaceIndex,indentifierType,标识符。 在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());

回调方法:

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;
    }
}

请查看OPC UA规范的第4部分-服务第5.10.2章,阅读

OPC UA读取响应包含一个DataValue数组。 每个OPC UA数据值结构都包含

  • 的StatusCode
  • SourceTimestamp
  • ServerTimestamp
  • SourcePicoseconds
  • ServerPicoseconds

OPC UA值结构包含

  • ArrayType(您的情况下为0 =标量)
  • 数据类型(您的情况下为6 = OpcUaType_Int32)
  • 值(来自Union,取决于ArrayType和DataType值)

所以实际上您的情况是Int32 Variant Union值= 46132370

编辑

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM