Eclipse Milo: как использовать функцию обнаружения OPC UA?

У меня есть несколько вопросов о функции обнаружения OPC UA:

  1. Как зарегистрировать UA-сервер OPC на сервере обнаружения? Возможно ли это только в том случае, если производитель предоставляет для этого что-то вроде веб-интерфейса, или есть стандартизированный способ сделать это?
  2. Как мне зарегистрировать UA-сервер OPC, созданный с помощью milo, на сервере обнаружения?
  3. Можно ли отключить сервер обнаружения, который автоматически запускается с помощью milo opc ua-server?
  4. Как получить информацию о зарегистрированных серверах в milo?

person Bashdi    schedule 02.01.2019    source источник


Ответы (1)


  1. Как зарегистрировать UA-сервер OPC на сервере обнаружения? Возможно ли это только в том случае, если производитель предоставляет для этого что-то вроде веб-интерфейса, или есть стандартизированный способ сделать это?

Производителю необходимо поддерживать профиль обнаружения. Спецификация OPC UA, часть 11 (доступна бесплатно после регистрации: https://opcfoundation.org/developer-tools/specifications-unified-architecture/) описывает это более подробно.

Существует три основных концепции OPC UA Discovery:

  • Локальный сервер обнаружения (LDS):
    Клиенту необходимо знать IP-адрес сервера LDS, а затем он вызывает RegisterServer или RegisterServer2 службу через OPC UA.

  • Локальный сервер обнаружения с расширением многоадресной рассылки (LDS-ME):
    Сервер и клиент используют стандартизированные запросы многоадресной рассылки mDNS для поиска других экземпляров OPC UA в сети. Как только сервер LDS-ME объявляет о себе, обычный сервер OPC UA знает IP-адрес и вызывает RegisterServer или RegisterServer2

  • Global Discovery Server (GDS):
    Для больших систем может быть несколько подсетей, в которых многоадресные запросы не работают. GDS - это сервер обнаружения на уровне предприятия, который также поддерживает управление сертификатами.

  1. Как мне зарегистрировать UA-сервер OPC, созданный с помощью milo, на сервере обнаружения?

Eclipse Milo не полностью поддерживает функции обнаружения. Он в основном поддерживает СПД. В настоящее время у меня есть открытый PR, но, к сожалению, он еще не объединен: https://github.com/eclipse/milo/pull/89

  1. Можно ли отключить сервер обнаружения, который автоматически запускается с помощью milo opc ua-server?

Поскольку Eclipse Milo по умолчанию не поддерживает службы обнаружения, он не запускается автоматически. В любом случае вы можете определить, какие службы поддерживаются, добавив или удалив соответствующий набор служб. Посмотрите эту строку:

stackServer.addServiceSet((DiscoveryServiceSet) sessionManager);

https://github.com/eclipse/milo/pull/89/files#diff-6eb416ef6889e36b34b34e32cb78b823R122

  1. Как получить информацию о зарегистрированных серверах в milo?

После того, как другой сервер зарегистрировался через RegisterServer или RegisterServer2, клиент может получить список зарегистрированных серверов с помощью двух сервисных вызовов.

  • FindServers возвращает список зарегистрированных серверов, которые называются RegisterServer или RegisterServer2
  • FindServersOnNetwork поддерживается только для серверов LDS-ME и дополнительно возвращает серверы, которые заявили о себе через сообщение mDNS, но еще не зарегистрировались.

Если вам нужен стек с открытым исходным кодом, который полностью реализует функции LDS и LDS-ME, вы можете взглянуть на проект open62541, который представляет собой реализацию OPC UA на C / C ++: https://github.com/open62541/open62541

Функция GDS в настоящее время находится в стадии разработки для стека open62541. (Отказ от ответственности: я один из основных разработчиков open62541)

Дополнительные ресурсы:

Вы также можете ознакомиться с моей статьей о функции обнаружения OPC UA LDS-ME и конкретном сценарии использования под названием OPC UA для Plug & Produce: автоматическое обнаружение устройств с использованием LDS-ME (https://mediatum.ub.tum.de/node?id=1375255)

person Stefan Profanter    schedule 02.01.2019
comment
11:16:05.177 [main] INFO o.e.milo.opcua.stack.server.tcp.UaTcpStackServer - opc.tcp://127.0.0.1:12686/MiloTest/discovery bound to 127.0.0.1:12686 [None/None] Меня смущает эта строчка в моем журнале. Я думал, что это сервер обнаружения - person Bashdi; 02.01.2019
comment
Это конечная точка обнаружения. Все серверы должны иметь конечную точку без защиты, на которой клиент может вызывать FindServers и GetEndpoints. Добавление /discovery к URL-адресу базовой конечной точки - это стандартное расположение, определенное спецификацией. - person Kevin Herron; 02.01.2019