Compartir vía


Detección de orígenes de datos de OPC UA mediante la versión preliminar de Azure IoT Akri

Importante

Operaciones de IoT de Azure, habilitado por Azure Arc, está actualmente en VERSIÓN PRELIMINAR. No se debería usar este software en versión preliminar en entornos de producción.

Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.

En este artículo, aprenderá a detectar automáticamente orígenes de datos de OPC UA. Una vez implementado las operaciones de Azure IoT versión preliminar, configure la versión preliminar de Azure IoT Akri para descubrir orígenes de datos OPC UA en el perímetro. Azure IoT Akri crea recursos personalizados en el clúster de Kubernetes que representan los orígenes de datos que detecta. La capacidad de detectar orígenes de datos de OPC UA elimina la necesidad de configurarlos manualmente mediante el portal de operaciones de Azure IoT (versión preliminar).

Importante

Actualmente, no puede usar Azure Device Registry para administrar los recursos que Azure IoT Akri detecta y crea.

Azure IoT Akri permite detectar y crear recursos en el espacio de direcciones de un servidor OPC UA. La detección de recursos de OPC UA genera recursos personalizados AssetType y Asset para Especificación de integración de dispositivos OPC UA (DI) recursos compatibles.

Requisitos previos

  • Instale la versión preliminar de operaciones de Azure IoT. Para instalar operaciones de Azure IoT con fines de demostración y exploración, consulte Inicio rápido: Implementación de operaciones de IoT de Azure versión preliminar en un clúster de Kubernetes habilitado para Arc.

  • Para comprobar que los pods de Azure IoT Akri están configurados correctamente, ejecute el comando siguiente:

    kubectl get pods -n azure-iot-operations
    

    La salida incluye líneas que muestran el agente de Akri y los pods del controlador de detección que se están ejecutando:

    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
    

Configuración del controlador de detección de OPC UA

Para configurar el controlador de detección de OPC UA para la detección de recursos, cree un archivo de configuración de YAML que contenga los valores descritos en esta sección:

Nombre Obligatorio Datatype Valor predeterminado Comentario
EndpointUrl true String null Dirección URL del punto de conexión de OPC UA que se va a usar para la detección de recursos
AutoAcceptUntrustedCertificates Verdad ¹ Booleano false ¿Debe el cliente aceptar automáticamente certificados que no son de confianza? Un certificado solo se puede aceptar automáticamente como de confianza si no se han producido errores no suprimibles durante la validación de la cadena. Por ejemplo, no se acepta un certificado con cadena incompleta.
UseSecurity Verdad ¹ Boolean true ¿El cliente debe usar una conexión segura?
UserName false String null Nombre de usuario para la autenticación de usuario. ²
Password false String null Contraseña para la autenticación de usuario. ²

¹ La versión actual del controlador de detección solo admite UseSecurity=false y requiere autoAcceptUntrustedCertificates=true.
² Una implementación temporal hasta que Azure IoT Akri pueda pasar secretos de Kubernetes.

En el ejemplo siguiente se muestra la detección de un servidor OPC PLC. Puede agregar los parámetros de recurso para varios servidores OPC PLC.

  1. Para crear el archivo de configuración de YAML, copie y pegue el siguiente contenido en un nuevo archivo y guárdelo como opcua-configuration.yaml:

    Si usa el servidor PLC simulado que se ha implementado con el inicio rápido de Operaciones de Azure IoT, no es necesario cambiar endpointUrl. Si tiene sus propios servidores OPC UA en ejecución o usa los servidores PLC simulados implementados en Azure, agregue la dirección URL del punto de conexión en consecuencia. Las direcciones URL del punto de conexión de detección tienen un aspecto similar a opc.tcp://<FQDN>:50000/. Para buscar los FQDN de los servidores OPC PLC, vaya a la implementación en Azure Portal. Para cada servidor, copie y pegue el valor de FQDN en las direcciones URL del punto de conexión.

    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. Para aplicar la configuración, ejecute el siguiente comando:

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

Comprobar la configuración

Para confirmar que el contenedor de detección de recursos está configurado y en ejecución:

  1. Use el comando siguiente para comprobar los registros del pod:

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

    Un registro del pod aio-akri-opcua-asset-discovery indica después de unos segundos que el controlador de detección se registró con 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
    

    Después de aproximadamente un minuto, Azure IoT Akri emite la primera solicitud de detección en función de la configuración:

    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
    

    Una vez completada la detección, el controlador de detección devuelve el resultado a Azure IoT Akri para crear un recurso personalizado de instancia de Akri con información de recursos y variables observables. El controlador de detección repite la detección cada 10 minutos para detectar los cambios en el servidor.

  2. Para ver las instancias de Azure IoT Akri detectadas, ejecute el siguiente comando:

    kubectl get akrii -n azure-iot-operations
    

    La salida del comando anterior es similar al ejemplo siguiente. Es posible que tenga que esperar unos segundos para que se cree la instancia de Akri:

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

    El supervisor del conector de OPC UA supervisa los nuevos recursos personalizados de instancia de Azure IoT Akri de tipo opc-ua-asset, y genera los tipos de recursos iniciales y los recursos personalizados de recursos para ellos. Puede modificar los recursos personalizados de recursos agregando configuraciones como la publicación extendida para más puntos de datos o la configuración de observabilidad del agente de OPC UA.

  3. Para confirmar que la instancia de Akri se ha conectado correctamente al agente de OPC UA, ejecute el siguiente comando. Reemplace el marcador de posición por el nombre de la instancia de Akri que se incluyó en la salida del comando anterior:

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

    La salida del comando incluye una sección similar al ejemplo siguiente. El fragmento de código muestra los valores de la instancia de Akri brokerProperties y confirma que el agente de OPC UA está conectado.

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