Я использую OP C UAs C ++ SDK и пытаюсь прочитать настраиваемые узлы.
При выполнении предоставленного примера сценария он отлично работает для чтения метки времени серверов (после урока 1: https://documentation.unified-automation.com/uasdkcpp/1.5.5/html/L3GettingStartedClientLesson01.html)
Теперь я пытаюсь прочитать настраиваемый узел, где идентификатор узла представляет собой строку - снимок экрана из UaExpert:
Но у меня возникла проблема с его реализацией вот так:
UaStatus SampleClient::read()
{
UaStatus result;
ServiceSettings serviceSettings;
UaReadValueIds nodeToRead;
UaDataValues values;
UaDiagnosticInfos diagnosticInfos;
// Configure one node to read
// We read the value of the ServerStatus -> CurrentTime
nodeToRead.create(1);
//nodeToRead[0].AttributeId = OpcUa_Attributes_Value;
//nodeToRead[0].NodeId.Identifier.Numeric = OpcUaId_Server_ServerStatus_CurrentTime;
nodeToRead[0].AttributeId = 1;
nodeToRead[0].NodeId.Identifier.String = "DISPLAY_VOLTAGE"; //"cant find operator which supports
//type const char[16]"
...
Я также не уверен, является ли AttributeIde номером пространства имен NodeID, но я ничего не нашел иначе называется «AttributeId».
Возможно, мне нужно реализовать здесь свой собственный атрибут, но я не знаю, как:
typedef struct _OpcUa_String
{
OpcUa_UInt uReserved1; /* Content is private to String Implementation */
#if OPCUA_STRING_SHORT
OpcUa_UInt16 uReserved2; /* Content is private to String Implementation */
#else /* OPCUA_STRING_SHORT */
OpcUa_UInt32 uReserved2; /* Content is private to String Implementation */
#endif /* OPCUA_STRING_SHORT */
OpcUa_Void* uReserved4; /* Content is private to String Implementation */
} OpcUa_String, *OpcUa_pString;
#endif
Надеюсь, вы, ребята, подскажете, как для решения этой проблемы.
Заранее спасибо!