Сервер Milo OPC UA передает значения в логике сервера

Я новичок в OPC UA.

Моя цель - создать сервер OPC UA, и как только кто-то изменит какое-либо значение, я хочу получить вызов функции, чтобы я мог реагировать на ввод.

Чтобы заархивировать это, я создал сервер с MILO-Eclipse. В моем пространстве имен у меня есть несколько функций, называемых onDataItemsModified () и т. Д. Но если я изменю значение на моем сервере с помощью UAExpert, сервер не вызовет функцию onDataItemsModified (). Есть ли другой способ получить уведомление, как только кто-то изменил значение на моем сервере? Я видел возможность добавить клиента и зарегистрировать наблюдателя, но я думал, что могу видеть изменения напрямую, поскольку сервер и не нужно реализовывать клиента.


person DrMetzGer    schedule 16.12.2019    source источник


Ответы (1)


Когда клиент записывает в атрибут узла в вашем адресном пространстве, он поступает через службу записи, а не через какие-либо службы отслеживаемых элементов.

Вы можете переопределить вызов записи в своем адресном пространстве или просто добавить AttributeObserver или AttributeDelegate к созданным вами узлам.

person Kevin Herron    schedule 16.12.2019
comment
Извините за поздний ответ, большое спасибо за ваш ответ :) Я попытался добавить наблюдателя. Сначала я получаю свой UaVariableNode. Затем я добавляю ObserverClass, который реализует ваш AttributeObserver, но функция attributeChanged никогда не вызывается после того, как я изменяю значение в UaExpert. Вы знаете, в чем моя ошибка? - person DrMetzGer; 06.01.2020
comment
Я изменил способ перезаписи вашего метода вызова. Теперь все работает нормально! Большое спасибо :) Если кто-то хочет посмотреть, как это можно заархивировать: @Override public void write(WriteContext arg0, List<WriteValue> arg1) { super.write(arg0, arg1); if(observer != null) { observer.checkValues(arg1); } } - person DrMetzGer; 08.01.2020