На рисунке показано значение uint32, но мне также нужны подробности NodeId, который является «Counter1», как в NodeId в readAsync. Я использую набор инструментов Softing OPC UA для разработки клиента. С помощью session-> readAsync () я пытаюсь прочитать значение с сервера OPC UA, вызывается метод обратного вызова onReadComplete с запрошенным вектором DataValue, я могу получить значение из DataValue, но не могу получить NodeId с 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 Read содержит массив DataValue. Каждая структура OPC UA DataValue содержит
Структура значения OPC UA содержит
Так что на самом деле в вашем случае значение Int32 Variant Union = 46132370
редактировать
Порядок DataValue в массиве ReadResponse DataValue совпадает с порядком чтения NodeId из отправленного вами запроса ReadRequest. Затем вы должны сохранить информацию перед отправкой ReadRequest, чтобы узнать, для какого NodeId значение DataValue [«X»] является.
Других решений пока нет …