#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 — это должен быть ваш ключ для доступа к узлу и любым интересующим вас атрибутам.