gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:33:34 25 4
gpt4 key购买 nike

image shows the uint32 value but i need the NodeId details too, which is "Counter1" as in the NodeId in readAsync 我正在使用 Softing OPC UA 工具包开发客户端。使用 session->readAsync() 我尝试从 OPC UA 服务器读取值,使用请求的 DataValue vector 调用回调方法 onReadComplete,我可以从 DataValue 获取值但无法使用 namespaceIndex、indentifierType 获取 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());

回调方法:

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 Specification Part 4 - Services第5.10.2章阅读

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

  • 状态码
  • 来源时间戳
  • 服务器时间戳
  • 来源皮秒
  • 服务器皮秒数
  • 值(value)

OPC UA Value结构包含

  • ArrayType(在您的情况下为 0 = 标量)
  • 数据类型(在您的例子中为 6 = OpcUaType_Int32)
  • 值(来自一个 union ,取决于 ArrayType 和 DataType 值)

所以实际上在您的情况下,该值是 Int32 Variant Union value = 46132370

编辑

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

关于c++ - 如何使用 Softing 工具包从 OPC UA 服务器异步读取操作的回调中从 DataValue 响应中获取 NodeId 详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52192278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com