[英]how do i return the response back to caller asynchronously using a final callback dispatched from on_read handler?
[英]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數據值結構都包含
OPC UA值結構包含
所以實際上您的情況是Int32 Variant Union值= 46132370
編輯
ReadResponse DataValue數組中DataValue的順序與您發送的ReadRequest中的Read NodeId的順序匹配。 然后,您應該在發送ReadRequest之前保存信息,以便知道DataValue [“ X”]是哪個NodeId的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.