Как я могу получить имя узла OPC UA в Eclipse Milo?

#java #opc-ua #milo

Вопрос:

Я последовал ManagedSubscriptionDataExample.java (https://github.com/eclipse/milo/blob/master/milo-examples/client-examples/src/main/java/org/eclipse/milo/examples/client/ManagedSubscriptionDataExample.java ) пример на странице github для чтения OPC-узлов из PLC S7-1200.

Значение для узлов обновляется, но я не могу получить имя.

Для кода:

 subscription.addDataChangeListener((items, values) -> {
                for (int i = 0; i < items.size(); i  ) {
                    logger.info(
                            "subscription value received: item={}, value={}, valueID={}",
                            items.get(i).getNodeId(), values.get(i).getValue(), items.get(i).getReadValueId());
                }
 

Я получаю ответ:

ИНФОРМАЦИЯ: получено значение подписки: item= NodeID{ns = 4, id = 4}, value=Variant{value=false}, valueId=ReadValueId(NodeID=NodeID{ns = 4, id = 4}, AttributeID = 13, indexRange= null, dataEncoding=QualifiedName{name= null, namespaceIndex=0})

Я вижу, что имя равно нулю и что нет способа получить имя для узла. Но если я использую OPC-клиент «OPC Expert», я также могу получить имена для узлов, поскольку они находятся на ПЛК: введите описание изображения здесь

Есть ли какой-либо другой вариант получения имени переменной?

Ответ №1:

UaExpert ведет бухгалтерию больше, чем вы. Вы должны знать, для каких узлов вы создали MonitoredItems, и иметь возможность получать атрибут BrowseName или DisplayName из этих узлов.

Внутри этого обратного вызова у вас есть доступ к NodeID — это должен быть ваш ключ для доступа к узлу и любым интересующим вас атрибутам.