Поделиться через


Обнаружение источников данных OPC UA с помощью Предварительной версии Azure IoT Akri

Внимание

Предварительная версия операций Интернета вещей Azure, включенная Azure Arc в настоящее время находится в предварительной версии. Не следует использовать это программное обеспечение предварительной версии в рабочих средах.

Юридические условия, применимые к функциям Azure, которые находятся в состоянии бета-версии, предварительной версии или иным образом еще не выпущены в общедоступной версии, см. на странице Дополнительные условия использования предварительных версий в Microsoft Azure.

В этой статье вы узнаете, как автоматически обнаруживать источники данных OPC UA. После развертывания Предварительной версии операций Интернета вещей Azure настройте Предварительную версию Azure IoT Akri, чтобы обнаружить источники данных OPC UA на границе. Azure IoT Akri создает настраиваемые ресурсы в кластере Kubernetes, которые представляют обнаруженные источники данных. Возможность обнаружения источников данных OPC UA удаляет необходимость вручную настроить их с помощью портала Операций Интернета вещей Azure (предварительная версия).

Внимание

В настоящее время вы не можете использовать реестр устройств Azure для управления ресурсами, которые Azure IoT Akri обнаруживает и создает.

Azure IoT Akri позволяет обнаруживать и создавать ресурсы в адресном пространстве сервера OPC UA. Обнаружение активов OPC UA создает AssetType и Asset пользовательские ресурсы для спецификаций интеграции устройств OPC UA (DI).

Необходимые компоненты

  • Установите предварительную версию операций Интернета вещей Azure. Сведения об установке операций Интернета вещей Azure для демонстрации и изучения см . в кратком руководстве. Развертывание предварительной версии операций Интернета вещей Azure в кластере Kubernetes с поддержкой Arc.

  • Убедитесь, что модули pod Azure IoT Akri настроены правильно, выполнив следующую команду:

    kubectl get pods -n azure-iot-operations
    

    Выходные данные включают строки, показывающие выполнение агента Akri и модулей обработчика обнаружения:

    NAME                                             READY   STATUS    RESTARTS   AGE
    aio-akri-agent-daemonset-hwpc7                   1/1     Running   0          17m
    akri-opcua-asset-discovery-daemonset-dwn2q       1/1     Running   0          8m28s
    

Настройка обработчика обнаружения OPC UA

Чтобы настроить обработчик обнаружения OPC UA для обнаружения ресурсов, создайте файл конфигурации YAML, содержащий значения, описанные в этом разделе:

Имя. Обязательно Datatype По умолчанию. Комментарий
EndpointUrl true Строка null URL-адрес конечной точки OPC UA, используемый для обнаружения активов
AutoAcceptUntrustedCertificates true ¹ Логический false Должен ли клиент автоматически принимать ненадежные сертификаты? Сертификат может быть автоматически настроен как доверенный, если во время проверки цепочки не произошло никаких неудажимых ошибок. Например, сертификат с неполной цепочкой не принимается.
UseSecurity true ¹ Логический true Должен ли клиент использовать безопасное подключение?
UserName false Строка null Имя пользователя для проверки подлинности пользователя. ²
Password false Строка null Пароль для проверки подлинности пользователя. ²

¹ Текущая версия обработчика обнаружения поддерживает UseSecurity=false и требуется autoAcceptUntrustedCertificates=true.
2. Временная реализация до тех пор, пока Azure IoT Akri не сможет передать секреты Kubernetes.

В следующем примере показано обнаружение сервера OPC PLC. Параметры ресурса можно добавить для нескольких серверов OPC PLC.

  1. Чтобы создать файл конфигурации YAML, скопируйте и вставьте следующее содержимое в новый файл и сохраните его как opcua-configuration.yaml:

    Если вы используете имитированный сервер PLC, развернутый с помощью краткого руководства по операциям Интернета вещей Azure, вам не нужно изменять его endpointUrl. Если у вас есть собственные серверы OPC UA или используются имитированные серверы PLC, развернутые в Azure, добавьте в URL-адрес конечной точки соответствующим образом. URL-адреса конечных точек обнаружения выглядят следующим образом opc.tcp://<FQDN>:50000/. Чтобы найти полные доменные имена серверов OPC PLC, перейдите к развертыванию в портал Azure. Для каждого сервера скопируйте и вставьте полное доменное имя в URL-адреса конечной точки.

    apiVersion: akri.sh/v0
    kind: Configuration
    metadata:
      name: aio-akri-opcua-asset
    spec:
      discoveryHandler: 
        name: opcua-asset
        discoveryDetails: "opcuaDiscoveryMethod:\n  - asset:\n      endpointUrl: \"	opc.tcp://opcplc-000000:50000\"\n      useSecurity: false\n      autoAcceptUntrustedCertificates: true\n"
      brokerProperties: {}
      capacity: 1
    
  2. Чтобы применить конфигурацию, выполните следующую команду:

    kubectl apply -f opcua-configuration.yaml -n azure-iot-operations
    

Проверить конфигурацию

Чтобы убедиться, что контейнер обнаружения активов настроен и запущен:

  1. Используйте следующую команду, чтобы проверка журналы pod:

    kubectl logs <insert aio-akri-opcua-asset-discovery pod name> -n azure-iot-operations
    

    Журнал из aio-akri-opcua-asset-discovery модуля pod указывает через несколько секунд, что обработчик обнаружения зарегистрировал себя в Azure IoT Akri:

    2023-06-07 10:45:27.395 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Akri OPC UA Asset Detection (0.2.0-alpha.203+Branch.main.Sha.cd4045345ad0d148cca4098b68fc7da5b307ce13) is starting with the process id: 1
    2023-06-07 10:45:27.695 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Got IP address of the pod from POD_IP environment variable.
    2023-06-07 10:45:28.695 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Registered with Akri system with Name opcua-asset for http://10.1.0.92:80 with type: Network as shared: True
    2023-06-07 10:45:28.696 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Press CTRL+C to exit
    

    Через минуту Azure IoT Akri выдает первый запрос на обнаружение на основе конфигурации:

    2023-06-07 12:49:17.344 +00:00 dbug: Grpc.AspNetCore.Server.ServerCallHandler[10]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Reading message.
    2023-06-07 12:49:18.046 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Got discover request opcuaDiscoveryMethod:
            - asset:
                endpointUrl: "opc.tcp://opcplc-000000:50000"
                useSecurity: false
                autoAcceptUntrustedCertificates: true
           from ipv6:[::ffff:10.1.7.47]:39708
    2023-06-07 12:49:20.238 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Start asset discovery
    2023-06-07 12:49:20.242 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Discovering OPC UA endpoint opc.tcp://opcplc-000000:50000 using Asset Discovery
    ...
    2023-06-07 14:20:03.905 +00:00 info: OpcUa.Common.Dtdl.DtdlGenerator[6901]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Created DTDL_2 model for boiler_1 with 35 telemetries in 0 ms
    2023-06-07 14:20:04.208 +00:00 info: OpcUa.AssetDiscovery.Akri.CustomResources.CustomResourcesManager[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Generated 1 asset CRs from discoveryUrl opc.tcp://opcplc-000000:50000
    2023-06-07 14:20:04.208 +00:00 info: OpcUa.Common.Client.OpcUaClient[1005]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Session ns=8;i=1828048901 is closing
    ...
    2023-06-07 14:20:05.002 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sending response to caller ...
    2023-06-07 14:20:05.003 +00:00 dbug: Grpc.AspNetCore.Server.ServerCallHandler[15]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sending message.
    2023-06-07 14:20:05.004 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sent successfully
    

    После завершения обнаружения обработчик обнаружения отправляет результат обратно в Azure IoT Akri, чтобы создать пользовательский ресурс экземпляра Akri с информацией о ресурсах и наблюдаемыми переменными. Обработчик обнаружения повторяет обнаружение каждые 10 минут, чтобы обнаружить изменения на сервере.

  2. Чтобы просмотреть обнаруженные экземпляры Azure IoT Akri, выполните следующую команду:

    kubectl get akrii -n azure-iot-operations
    

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

    NAMESPACE              NAME                      CONFIG             SHARED   NODES            AGE
    azure-iot-operations   akri-opcua-asset-dbdef0   akri-opcua-asset   true     ["my-aio-vm"]   35m
    

    Диспетчер opC UA Подключение проверяет наличие новых пользовательских ресурсов экземпляра opc-ua-assetAzure IoT Akri и создает для них исходные типы активов и пользовательские ресурсы. Настраиваемые ресурсы ресурсов можно изменить, добавив такие параметры, как расширенная публикация для дополнительных точек данных или параметры наблюдаемости брокера OPC UA.

  3. Чтобы убедиться, что экземпляр Akri правильно подключен к брокеру OPC UA, выполните следующую команду. Замените заполнитель именем экземпляра Akri, который был включен в выходные данные предыдущей команды:

    kubectl get akrii <AKRI_INSTANCE_NAME> -n azure-iot-operations -o json
    

    Выходные данные команды содержат раздел, который выглядит следующим образом. В фрагменте показаны значения экземпляра brokerProperties Akri и подтверждается, что брокер OPC UA подключен.

    "spec": {
    
            "brokerProperties": {
                "ApplicationUri": "Boiler #2",
                "AssetEndpointProfile": "{\"spec\":{\"uuid\":\"opc-ua-broker-opcplc-000000-azure-iot-operation\"……