Подписка OPC UA получает имя_позиции в быстром обработчике

#c# #.net #opc-ua

#c# #.net #opc-ua

Вопрос:

В настоящее время я переношу запрос данных на подписки. Поскольку я хочу наблюдать несколько значений, я создаю одну подписку с набором MonitoredItems и использую FastDataChangeNotificationEventHandler . При изменении данных вызывается делегат / метод, и я могу получить новые значения без проблем. Но я не вижу, к какому узлу принадлежит значение. Как я могу получить эту информацию?

Подпись обработчика

 public static void FastHandler(Subscription subscription, 
            DataChangeNotification notification, IList<string> stringTable)
 

Я нахожу обновленное значение в notification.MonitoredItems.ElementAt(i).Value.Value , но в элементе (типе MonitoredItemNotification ) нет Имя_дисПлея или идентификатора узла, позволяющего мне идентифицировать узел, которому принадлежит значение.

Параметр subscription содержит информацию о фактической подписке, но не сообщает, какие узлы / элементы в ней обновлены.

Так, например: я отслеживаю узлы A, B и C. A и C меняют свои значения, я получаю вызов FastHandler, как и ожидалось, в notification.MonitoredItems я нахожу 2 элемента, но никаких указаний на то, с какими узлами связаны ссылки.

Я что-то здесь упускаю? Как я могу связать эти новые значения с узлами, которые я просматриваю?

Я использую ссылку .Сетевая реализация для OPC UA

Ответ №1:

Кто-то из команды эталонной реализации помог мне:

notification.MonitoredItems Элементы также содержат поле ClientHandle — оно ClientHandle отображает соответствующие subscription.MonitoredItems элементы ClientHandle .

Это стоило мне и коллегам многих часов — надеюсь, это может помочь другим.