Уникальный идентификатор OPC UA

Я пытаюсь создать клиентское приложение OPC UA.
Я хотел бы иметь возможность однозначно идентифицировать узел UA в дереве OPC.
Я знаю, что в OPC DA стандартный идентификатор узла представляет собой строку с '.' в качестве разделителя, который я могу использовать для идентификации узла.

В OPC UA идентификатор узла не обязательно должен быть строкой, но я все же хотел бы иметь возможность создать уникальную строку, которая сопоставляется с конкретным узлом.
Я думаю о том, чтобы основать ее на имена узлов. например: Demo.MyNode.MyValue.
но я боюсь, что имя узла может содержать такие символы, как "." и это сделает мои идентификаторы не уникальными.

Можно ли использовать символ в качестве разделителя?
Есть ли лучший способ представить идентификатор узла в виде строки (включая его путь)?


person Idov    schedule 15.01.2016    source источник
comment
Если вы пишете клиентское приложение OPC, у вас нет выбора создания синтаксиса для идентификаторов элементов или узлов. Они указываются сервером OPC, к которому вы подключаетесь, и лучшее, что вы можете сделать, это написать свой клиент OPC таким образом, чтобы он хорошо с ними работал. Также небольшую поправку OPC DA не предписывает. как разделитель; это зависит от сервера, как он конструирует идентификаторы элементов и пока. кажется довольно распространенным явлением, есть много серверов, которые его не используют.   -  person ZbynekZ    schedule 15.01.2016


Ответы (3)


OPC-UA предлагает концепцию уникального «BrowsePath» для каждого узла, и клиент может выбрать сохранение BrowsePaths вместо NodeIds, а затем при запуске вызвать службу TranslateBrowsePathsToNodeIds.

На самом деле, я считаю, что это может быть предполагаемое поведение, поскольку не требуется, чтобы сервер использовал один и тот же NodeId для любого данного узла после перезапуска, даже если на практике это делается именно так.

Я ошибался, говоря, что NodeId разрешено изменять. В спецификации говорится: «Сервер должен сохранять NodeId узла, то есть он не должен генерировать новые NodeId при перезагрузке».

Теперь я считаю, что лучше всего хранить NodeIds и использовать BrowsePaths только для помощи в программировании на основе определений типов.

person Kevin Herron    schedule 15.01.2016

Одной из особенностей OPC UA является то, что сервер может предлагать разные деревья меню разным пользователям. Это может не иметь значения для вашего клиента, поскольку любой конкретный пользователь будет видеть только одно дерево, и BrowsePath будет уникальным для этого пользователя.

В v1.03 части 3 спецификации OPC UA "OPC UA Part 3 - Address Space Model 1.03 Specification.pdf" в разделе 5.2.2 говорится, что сервер не должен изменять NodeId узла при перезагрузке. (Спецификация доступна в OPC Foundation по адресу https://opcfoundation.org. Вы можете зарегистрироваться и загрузить ее бесплатно .)

Конечно, некоторые серверы UA могут не поддерживать свои NodeID при перезагрузке. Это еще одна причина использовать предложение Кевина использовать BrowsePath для создания уникальной строки для каждого узла. Строка может прояснить для пользователя, к какому узлу он обращается. Хорошая идея!

person J Cumming    schedule 29.12.2016

Фонд OPC Foundation объявил о своей стратегии OPC UA Open Shared Source (14 апреля / 2015).

Стек для .NET, включая множество примеров для клиентов и серверов DA, ​​Historie ... можно бесплатно скачать здесь OPCFoundation / UA-.NET на GitHub.

Также Создавайте приложения OPC UA .NET с помощью C #, VB.NET

Вы можете взглянуть на образцы в каталоге «SampleApplications» и увидеть, как они работают ...

person A.J.Bauer    schedule 29.01.2016