#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
.
Это стоило мне и коллегам многих часов — надеюсь, это может помочь другим.