簡體   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