Tutorial: Implementación de la arquitectura de la solución de referencia de IoT Industrial de Azure

Los fabricantes quieren implementar una solución de IoT industrial general a escala global y conectar todos sus sitios de producción a esta solución para aumentar la eficiencia de cada sitio de producción individual.

Estas mayores eficiencias conducen a una producción más rápida y a un menor consumo de energía, lo que reduce el costo de los productos producidos al tiempo que aumenta su calidad en la mayoría de los casos.

La solución debe ser lo más eficaz posible y habilitar todos los casos de uso necesarios, como la supervisión de condiciones, el cálculo de OEE, la previsión y la detección de anomalías. A partir de la información obtenida de estos casos de uso, en un segundo paso se puede crear un bucle de comentarios digitales que luego puede aplicar optimizaciones y otros cambios a los procesos de producción.

La interoperabilidad es la clave para lograr un lanzamiento rápido de la arquitectura de la solución y el uso de estándares abiertos como OPC UA ayuda significativamente a lograr esta interoperabilidad.

Arquitectura unificada de comunicaciones de plataforma abierta IEC 62541 (OPC UA)

Esta solución usa la arquitectura unificada (UA) IEC 62541 Open Platform Communications (OPC) para todos los datos de tecnología operativa (OT). Este estándar se describe aquí.

Arquitectura de referencia de la solución

Arquitectura simplificada (opciones de Azure y Fabric):

Diagrama de una arquitectura IIoT sencilla.

Arquitectura detallada (solo Azure):

Diagrama de una arquitectura de IIoT.

Componentes

Estos son los componentes implicados en esta solución:

Componente Descripción
Recursos industriales Un conjunto de líneas de producción habilitadas para OPC-UA simuladas hospedadas en contenedores de Docker
Operaciones de IoT de Azure Operaciones de IoT de Azure es un plano de datos unificado para el perímetro. Incluye un conjunto de servicios de datos modulares, escalables y de alta disponibilidad que se ejecutan en clústeres de Kubernetes perimetrales habilitados para Azure Arc.
Puerta de enlace de datos Esta puerta de enlace conecta los orígenes de datos locales (como SAP) a Azure Logic Apps en la nube.
Azure Kubernetes Services Edge Essentials Esta implementación de Kubernetes se ejecuta en Edge. Proporciona clústeres de Kubernetes de un solo nodo y varios nodos para una configuración perimetral tolerante a errores. Se admiten K3S y K8S. Se ejecuta en hardware incrustado o de clase PC, como una puerta de enlace industrial.
Azure Event Hubs El agente de mensajes en la nube que recibe mensajes de OPC UA PubSub de puertas de enlace perimetrales y los almacena hasta que los suscriptores los recuperen.
Azure Data Explorer La base de datos de serie temporal y el servicio de panel de front-end para análisis avanzados en la nube, incluida la detección y las predicciones integradas de anomalías.
Azure Logic Apps Azure Logic Apps es una plataforma en la nube que puede usar para crear y ejecutar flujos de trabajo automatizados con poco o ningún código.
Azure Arc Este servicio en la nube se usa para administrar el clúster de Kubernetes local en el perímetro. Las nuevas cargas de trabajo se pueden implementar a través de Flux.
Almacenamiento de Azure Este servicio en la nube se usa para administrar el almacén de certificados de OPC UA y la configuración de las cargas de trabajo de Kubernetes de Edge.
Azure Managed Grafana Azure Managed Grafana es una plataforma de visualización de datos creada con el software de Grafana por Grafana Labs. Grafana se crea como un servicio totalmente administrado hospedado y compatible con Microsoft.
Microsoft Power BI Microsoft Power BI es una colección de servicios de software SaaS, aplicaciones y conectores que funcionan juntos para convertir los orígenes de datos no relacionados en información coherente, visualmente envolvente e interactiva.
Microsoft Dynamics 365 Field Service Microsoft Dynamics 365 Field Service es una solución SaaS llave en mano para administrar solicitudes de servicio de campo.
UA Cloud Commander Esta aplicación de referencia de código abierto convierte los mensajes enviados a un transporte de telemetría de cola de mensajes (MQTT) o agente de Kafka (posiblemente en la nube) en solicitudes de cliente o servidor de OPC UA para un servidor OPC UA conectado. La aplicación se ejecuta en un contenedor de Docker.
UA Cloud Action Esta aplicación en la nube de referencia de código abierto consulta Azure Data Explorer para obtener un valor de datos específico. El valor de los datos es la presión en una de las máquinas de línea de producción simuladas. Llama a UA Cloud Commander a través de Azure Event Hubs cuando se alcanza un umbral determinado (4000 mbar). UA Cloud Commander llama entonces al método OpenPressureReliefValve en la máquina a través de OPC UA.
Biblioteca en la nube de UA La biblioteca en la nube de UA es una tienda en línea de modelos de información OPC UA, hospedada por OPC Foundation aquí.
UA Edge Translator Esta aplicación de referencia de conectividad industrial de código abierto se traduce de interfaces de activos propietarios a OPC UA mediante descripciones de elementos web de cosas (WoT) W3C como esquema para describir la interfaz de recursos industriales.

Nota:

En una implementación real, algo tan crítico como abrir una válvula de alivio de presión se haría en el entorno local. Este es solo un ejemplo sencillo de cómo lograr el bucle de comentarios digitales.

Un almacén de certificados de OPC UA basado en la nube y almacenamiento persistente

Cuando los fabricantes ejecutan aplicaciones de OPC UA, sus archivos de configuración, claves y certificados de OPC UA deben conservarse. Aunque Kubernetes tiene la capacidad de conservar estos archivos en volúmenes, un lugar más seguro para ellos es la nube, especialmente en clústeres de nodo único en los que el volumen se perdería cuando se produce un error en el nodo. Este escenario es el motivo por el que las aplicaciones de OPC UA que se usan en esta solución almacenan sus archivos de configuración, claves y certificados en la nube. Este enfoque también tiene la ventaja de proporcionar una única ubicación para certificados de confianza mutua para todas las aplicaciones de OPC UA.

Biblioteca en la nube de UA

Puede leer modelos de información de OPC UA directamente desde Azure Data Explorer. Para ello, importe los nodos de OPC UA definidos en el modelo de información de OPC UA en una tabla para buscar más metadatos dentro de las consultas.

En primer lugar, configure una directiva de llamada de Azure Data Explorer (ADX) para la biblioteca en la nube de UA mediante la ejecución de la siguiente consulta en el clúster de ADX (asegúrese de que es administrador de clústeres de ADX, configurable en Permisos en la pestaña ADX de Azure Portal):

.alter cluster policy callout @'[{"CalloutType": "webapi","CalloutUriRegex": "uacloudlibrary.opcfoundation.org","CanCall": true}]'

A continuación, ejecute la siguiente consulta de Azure Data Explorer desde Azure Portal:

let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/\<insert information model identifier from the UA Cloud Library here\>';
let headers=dynamic({'accept':'text/plain'});
let options=dynamic({'Authorization':'Basic \<insert your cloud library credentials hash here\>'});
evaluate http_request(uri, headers, options)
| project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
| mv-expand UAVariable=nodeset.UANodeSet.UAVariable
| project-away nodeset
| extend NodeId = UAVariable.['@NodeId'], DisplayName = tostring(UAVariable.DisplayName.['#text']), BrowseName = tostring(UAVariable.['@BrowseName']), DataType = tostring(UAVariable.['@DataType'])
| project-away UAVariable
| take 10000

Debe proporcionar dos cosas en esta consulta:

  • El identificador único del modelo de información de la biblioteca en la nube de UA y escríbalo en el <insertar el identificador del modelo de información de la biblioteca en la nube aquí> campo de la consulta ADX.
  • El hash de encabezado de autorización básico de las credenciales de la biblioteca en la nube de UA (generada durante el registro) e inserte en el <inserte el hash de credenciales de la biblioteca en la nube aquí> campo de la consulta de ADX. Use herramientas como https://www.debugbear.com/basic-auth-header-generator para generar esto.

Por ejemplo, para representar el modelo de información del servidor OPC UA de la estación de simulación de línea de producción en la herramienta Kusto Explorer disponible para descarga aquí, ejecute la consulta siguiente:

let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/1627266626';
let headers=dynamic({'accept':'text/plain'});
let options=dynamic({'Authorization':'Basic \<insert your cloud library credentials hash here\>'});
let variables = evaluate http_request(uri, headers, options)
    | project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
    | mv-expand UAVariable = nodeset.UANodeSet.UAVariable
    | extend NodeId = UAVariable.['@NodeId'], ParentNodeId = UAVariable.['@ParentNodeId'], DisplayName = tostring(UAVariable['DisplayName']), DataType = tostring(UAVariable.['@DataType']), References = tostring(UAVariable.['References'])
    | where References !contains "HasModellingRule"
    | where DisplayName != "InputArguments"
    | project-away nodeset, UAVariable, References;
let objects = evaluate http_request(uri, headers, options)
    | project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
    | mv-expand UAObject = nodeset.UANodeSet.UAObject
    | extend NodeId = UAObject.['@NodeId'], ParentNodeId = UAObject.['@ParentNodeId'], DisplayName = tostring(UAObject['DisplayName']), References = tostring(UAObject.['References'])
    | where References !contains "HasModellingRule"
    | project-away nodeset, UAObject, References;
let nodes = variables
    | project source = tostring(NodeId), target = tostring(ParentNodeId), name = tostring(DisplayName)
    | join kind=fullouter (objects
        | project source = tostring(NodeId), target = tostring(ParentNodeId), name = tostring(DisplayName)) on source
        | project source = coalesce(source, source1), target = coalesce(target, target1), name = coalesce(name, name1);
let edges = nodes;
edges
    | make-graph source --> target with nodes on source

Para obtener los mejores resultados, cambie la Layoutopción a Grouped y el Lables a name.

Gráfico del modelo de información de la estación.

Simulación de línea de producción

La solución usa una simulación de línea de producción formada por varias estaciones, mediante un modelo de información de OPC UA y un sencillo sistema de ejecución de fabricación (MES). Tanto las estaciones como el MES están en contenedores para facilitar la implementación.

Configuración de simulación predeterminada

La simulación está configurada para incluir dos líneas de producción. La configuración predeterminada es la siguiente:

Línea de producción Tiempo de ciclo ideal (en segundos)
Múnich 6
Seattle 10
Nombre de mayús Start Final
Mañana 07:00 14:00
Tarde 15:00 22:00
Noche 23:00 06:00

Nota:

Los tiempos de desplazamiento se encuentran en la hora local, en concreto la zona horaria en la que se encuentra la Máquina Virtual (VM) que hospeda la simulación de línea de producción.

Identificadores de nodo de OPC UA del servidor OPC UA de estación

Los siguientes identificadores de nodo de OPC UA se usan en el servidor OPC UA de la estación para la telemetría en la nube.

  • i=379: número de serie del producto fabricado
  • i=385: número de productos fabricados
  • i=391: número de productos descartados
  • i=398: tiempo de ejecución
  • i=399: tiempo defectuoso
  • i=400: estado (0=estación lista para trabajar, 1=trabajo en curso, 2=trabajo realizado y pieza buena fabricada, 3=trabajo realizado y pieza defectuosa fabricada, 4=estación en estado de avería)
  • i=406: consumo de energía
  • i=412: tiempo de ciclo ideal
  • i=418: tiempo de ciclo real
  • i=434: presión

Bucle de comentarios digitales con UA Cloud Commander y UA Cloud Action

Esta implementación de referencia implementa un "bucle de comentarios digitales", que desencadena específicamente un comando en uno de los servidores de OPC UA en la simulación desde la nube, en función de los datos de serie temporal que alcanzan un umbral determinado (la presión simulada). Puede ver la presión de la máquina de ensamblados en la línea de producción de Seattle que se libera en intervalos regulares en el panel de Azure Data Explorer.

Instalación de la simulación de línea de producción y los servicios en la nube

Al hacer clic en el botón, se implementan todos los recursos necesarios en Microsoft Azure:

Implementación en Azure

Durante la implementación, debe proporcionar una contraseña para una máquina virtual que se usa para hospedar la simulación de línea de producción y para UA Cloud Twin. La contraseña debe tener tres de los siguientes atributos: Un carácter en minúsculas, un carácter mayúscula, un número y un carácter especial. La contraseña debe tener entre 12 y 72 caracteres.

Nota:

Para ahorrar costos, la implementación implementa solo una máquina virtual Windows 11 Enterprise para la simulación de línea de producción y el sistema operativo base para la instancia de Azure Kubernetes Services Edge Essentials. En escenarios de producción, la simulación de línea de producción no es necesaria y para el sistema operativo base para la instancia de Azure Kubernetes Services Edge Essentials, se recomienda el canal de mantenimiento a largo plazo (LTSC) de Windows IoT Enterprise.

Una vez completada la implementación, conéctese a la máquina virtual Windows implementada con una conexión RDP (escritorio remoto). Puede descargar el archivo RDP en la página Azure Portal de la máquina virtual, en las opciones Conectar. Inicie sesión con las credenciales que proporcionó durante la implementación, abra una Ventana de PowerShell del administrador, vaya al directorio C:\ManufacturingOntologies-main\Deployment y ejecute:

New-AksEdgeDeployment -JsonConfigFilePath .\aksedge-config.json

Una vez finalizado el comando, la instalación de Azure Kubernetes Services Edge Essentials se ha completado y puede ejecutar la simulación de línea de producción.

Sugerencia

Para obtener registros de todas las cargas de trabajo y servicios de Kubernetes en cualquier momento, ejecute Get-AksEdgeLogs desde una Ventana de PowerShell de administrador.

Para comprobar el uso de memoria del clúster de Kubernetes, ejecute Invoke-AksEdgeNodeCommand -Command "sudo cat /proc/meminfo" desde una Ventana de PowerShell de administrador.

Ejecución de la simulación de línea de producción

En la máquina virtual implementada, abra un símbolo del sistema de Windows. Vaya al directorio C:\ManufacturingOntologies-main\Tools\FactorySimulation y ejecute el comando StartSimulation proporcionando los parámetros siguientes:

    StartSimulation <EventHubsCS> <StorageAccountCS> <AzureSubscriptionID> <AzureTenantID>

Parámetros:

Parámetro Descripción
EventHubCS Copie la cadena de conexión del espacio de nombres de Event Hubs como se describe aquí.
StorageAccountCS En Azure Portal, vaya a la cuenta de almacenamiento creada por esta solución. Seleccione "Claves de acceso" en el menú de navegación izquierdo. A continuación, copie la cadena de conexión para key1.
AzureSubscriptionID En Azure Portal, examine las suscripciones y copie el identificador de la suscripción que se usa en esta solución.
AzureTenantID En Azure Portal, abra la página Id. de entrada de Microsoft y copie el identificador de inquilino.

En el ejemplo siguiente se muestra el comando con todos los parámetros:

    StartSimulation Endpoint=sb://ontologies.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abcdefgh= DefaultEndpointsProtocol=https;AccountName=ontologiesstorage;AccountKey=abcdefgh==;EndpointSuffix=core.windows.net <your-subscription-id> <your-tenant-id>

Nota:

Si tiene acceso a varias suscripciones de Azure, merece la pena iniciar sesión en Azure Portal desde la máquina virtual a través del explorador web. También puede cambiar los inquilinos de Active Directory a través de la interfaz de usuario de Azure Portal (en la esquina superior derecha) para asegurarse de que ha iniciado sesión en el inquilino usado durante la implementación. Una vez que haya iniciado sesión, deje abierta la ventana del explorador. Esto garantiza que el script StartSimulation pueda conectarse más fácilmente a la suscripción correcta.

En esta solución, el almacén de certificados de la aplicación OPC UA para UA Cloud Publisher y el almacén de máquinas individuales y MES de la línea de producción simulada se encuentran en la nube en la cuenta de Azure Storage implementada.

Habilitación del clúster de Kubernetes para la administración mediante Azure Arc

  1. En la máquina virtual, abra una Ventana de PowerShell de administrador. Vaya al directorio C:\ManufacturingOntologies-main\Deployment y ejecute CreateServicePrincipal. Los dos parámetros subscriptionID y tenantID se pueden recuperar desde Azure Portal.

  2. Ejecute notepad aksedge-config.json y proporcione la siguiente información:

    Atributo Descripción
    Location Ubicación de Azure del grupo de recursos. Puede encontrar esta ubicación en Azure Portal en el grupo de recursos que se implementó para esta solución, pero quitar los espacios en el nombre. Actualmente, las regiones admitidas son eastus, eastus2, westus, westus2, westus3, westeurope y northeurope.
    SubscriptionId El identificador de suscripción. En Azure Portal, seleccione la suscripción que usa y copie o pegue el identificador de suscripción.
    TenantId El identificador de inquilino. En Azure Portal, seleccione en Azure Active Directory y copie o pegue el identificador de inquilino.
    ResourceGroupName Nombre del grupo de recursos de Azure que se implementó para esta solución.
    ClientId Nombre de la entidad de servicio de Azure creada anteriormente. Azure Kubernetes Services usa esta entidad de servicio para conectar el clúster a Arc.
    ClientSecret Contraseña de la entidad de servicio de Azure.
  3. Guarde el archivo, cierre la ventana de PowerShell y abra una nueva Ventana de PowerShell de administrador. Vuelva al directorio C:\ManufacturingOntologies-main\Deployment y ejecute SetupArc.

Ahora puede administrar el clúster de Kubernetes desde la nube a través de la instancia de Azure Arc recién implementada. En Azure Portal, vaya a la instancia de Azure Arc y seleccione Cargas de trabajo. El token de servicio necesario se puede recuperar a través de Get-AksEdgeManagedServiceToken desde una Ventana de PowerShell de administrador de en la máquina virtual.

Captura de pantalla de Azure Arc en Azure Portal.

Implementación de operaciones de Azure IoT en el perímetro

Asegúrese de que ya ha iniciado la simulación de línea de producción y ha habilitado el Clúster de Kubernetes para la administración a través de Azure Arc, tal como se describe en los párrafos anteriores. A continuación, siga estos pasos:

  1. En Azure Portal, vaya a Key Vault implementado en esta solución de referencia y agregue su propia identidad a las directivas de acceso haciendo clic en Access policies, Create, seleccione la Keys, Secrets & Certificate Managementplantilla, seleccione Next, busque y seleccione su propia identidad de usuario, seleccione Next, deje en blanco la sección Aplicación, seleccione Next y por último Create.
  2. Habilite primero las ubicaciones personalizadas para el clúster de Kubernetes conectado a Arc (denominada ontologies_cluster) iniciando sesión en la suscripción de Azure a través de az login desde una Ventana de PowerShell del administrador y a continuación, ejecutando az connectedk8s enable-features -n "ontologies_cluster" -g "<resourceGroupName>" --features cluster-connect custom-locations, lo que proporciona el resourceGroupName desde la solución de referencia implementada.
  3. En Azure Portal, implemente Azure IoT Operations; para ello, vaya al clúster de Kubernetes conectado a Arc, seleccione en Extensions, Add, seleccione Azure IoT Operations, y seleccione Create. En la página Básico, deje todo lo que está. En la página Configuración, establezca el MQ Mode en Auto. No es necesario implementar un controlador lógico programable simulado (PLC), ya que esta solución de referencia ya contiene una simulación de línea de producción mucho más sustancial. En la página Automatización, seleccione la instancia de Key Vault implementada para esta solución de referencia y, a continuación, copie el comando az iot ops init generado automáticamente. En la máquina virtual implementada, abra una nueva Ventana de PowerShell del administrador, inicie sesión en la suscripción correcta de Azure ejecutando az login y, a continuación, ejecute el comando az iot ops init con los argumentos de Azure Portal. Una vez completado el comando, seleccione Next y cierre el asistente.

Configuración de la seguridad y conectividad de OPC UA para operaciones de Azure IoT

Asegúrese de implementar correctamente las operaciones de Azure IoT y de que todas las cargas de trabajo de Kubernetes están en funcionamiento; para ello, vaya al recurso de Kubernetes habilitado para Arc en Azure Portal.

  1. En Azure Portal, vaya a Azure Storage implementado en esta solución de referencia, abra el Storage browser y, a continuación, Blob containers. Aquí puede acceder al almacén de certificados de OPC UA basado en la nube que se usa en esta solución. Azure IoT Operations usa Azure Key Vault como almacén de certificados de OPC UA basado en la nube, por lo que es necesario copiar los certificados:
    1. Desde los contenedores de blobs del explorador de Azure Storage, para cada línea de producción simulada, vaya a la carpeta app/pki/trusted/certs, seleccione el ensamblado, el empaquetado y el archivo de certificado de prueba y descárguelo.
    2. Inicie sesión en su suscripción de Azure az logindesde una Ventana de PowerShell de administrador y, a continuación, ejecute az keyvault secret set --name "<stationName>-der" --vault-name <keyVaultName> --file .<stationName>.der --encoding hex --content-type application/pkix-cert, proporcionando la keyVaultName y stationName de cada una de las 6 estaciones que descargó un archivo de certificado .der para en el paso anterior.
  2. En la máquina virtual implementada, abra un símbolo del sistema de Windows y ejecute kubectl apply -f secretsprovider.yaml con el archivo de recursos del proveedor de secretos actualizado proporcionado en el directorio C:\ManufacturingOntologies-main\Tools\FactorySimulation\Station, proporcionando el nombre de Key Vault, el identificador de inquilino de Azure y los nombres y alias del certificado de estación que cargó en Azure Key Vault anteriormente.
  3. Desde un explorador web, inicie sesión en https://iotoperations.azure.com, elija el directorio de Azure derecho (esquina superior derecha) y empiece a crear recursos desde la simulación de línea de producción. La solución incluye dos líneas de producción (Múnich y Seattle) que constan de tres estaciones cada una (montaje, prueba y empaquetado):
    1. En el caso de los puntos de conexión de recursos, escriba opc.tcp://assembly.munich en el campo Dirección URL del agente de OPC UA para la estación de ensamblado de la línea de producción de Múnich, etc. Seleccione Do not use transport authentication certificate (autenticación mutua basada en certificados de OPC UA entre Azure IoT Operations y cualquier servidor de OPC UA conectado todavía se está usando).
    2. Para las etiquetas de recursos, seleccione Import CSV file y abra el archivo StationTags.csv ubicado en el directorio C:\ManufacturingOntologies-main\Tools\FactorySimulation\Station.
  4. En Azure Portal, vaya a Azure Storage implementado en esta solución de referencia, abra el Storage browser y, a continuación, Blob containers. Para cada línea de producción simulada, vaya a la carpeta app/pki/rejected/certs y descargue el archivo de certificado de operaciones de Azure IoT. A continuación, elimine el archivo. Vaya a la carpeta app/pki/trusted/certs y cargue el archivo de certificado de operaciones de Azure IoT en este directorio.
  5. En la máquina virtual implementada, abra un símbolo del sistema de Windows y reinicie la simulación de línea de producción; para ello, vaya al C:\ManufacturingOntologies-main\Tools\FactorySimulationdirectorio y ejecute el comando StopSimulation, seguido del comando StartSimulation.
  6. Siga las instrucciones que se describen aquí para comprobar que los datos fluyen desde la simulación de línea de producción.
  7. Como último paso, conecte Azure IoT Operations a Event Hubs implementado en esta solución de referencia, como se describe aquí.

Supervisión de condiciones de casos de uso, cálculo de OEE, detección de anomalías y realización de predicciones en Azure Data Explorer

También puede visitar la documentación de Azure Data Explorer para aprender a crear paneles sin código para la supervisión de condiciones, las predicciones de rendimiento o mantenimiento o la detección de anomalías. Hemos proporcionado un panel de ejemplo aquí para implementarlo en el panel de ADX siguiendo los pasos descritos aquí. Después de la importación, debe actualizar el origen de datos del panel especificando el punto de conexión HTTPS de la instancia del clúster del servidor de ADX en el formato https://ADXInstanceName.AzureRegion.kusto.windows.net/ en la esquina superior derecha del panel.

Captura de pantalla de un panel de Azure Data Explorer.

Nota:

Si desea mostrar el OEE para un turno específico, seleccione Custom Time Range en la Time Range lista desplegable de la esquina superior izquierda del panel de ADX y escriba la fecha y hora desde el principio hasta el final del turno que le interesa.

Representar el gráfico de modelos integrado Espacio de nombres unificado (UNS) e ISA-95 en el Explorador de Kusto

Esta solución de referencia implementa un objeto Unified NameSapce (UNS), basado en los metadatos de OPC UA enviados a la base de datos de serie temporal en la nube (Azure Data Explorer). Estos metadatos de OPC UA también incluyen la jerarquía de recursos ISA-95. El gráfico resultante se puede visualizar fácilmente en la herramienta Kusto Explorer disponible para descargar aquí.

Agregue una nueva conexión a la instancia de Azure Data Explorer implementada en esta solución de referencia y, a continuación, ejecute la siguiente consulta en Kusto Explorer:

let edges = opcua_metadata_lkv
| project source = DisplayName, target = Workcell
| join kind=fullouter (opcua_metadata_lkv
    | project source = Workcell, target = Line) on source
    | join kind=fullouter (opcua_metadata_lkv
        | project source = Line, target = Area) on source
        | join kind=fullouter (opcua_metadata_lkv
            | project source = Area, target = Site) on source
            | join kind=fullouter (opcua_metadata_lkv
                | project source = Site, target = Enterprise) on source
                | project source = coalesce(source, source1, source2, source3, source4), target = coalesce(target, target1, target2, target3, target4);
let nodes = opcua_metadata_lkv;
edges | make-graph source --> target with nodes on DisplayName

Para obtener los mejores resultados, cambie la Layout opción a Grouped.

Gráfico que muestra una jerarquía de recursos ISA-95.

Uso del servicio Azure Managed Grafana

También puede usar Grafana para crear un panel en Azure para la solución descrita en este artículo. Grafana se usa en la fabricación para crear paneles que muestren datos en tiempo real. Azure ofrece un servicio denominado Azure Managed Grafana. Con esto, puede crear paneles en la nube. En este manual de configuración, habilitará Grafana en Azure y creará un panel con datos que se consultan desde el servicio Azure Data Explorer y Azure Digital Twins mediante los datos simulados de la línea de producción de esta solución de referencia.

En la captura de pantalla siguiente se muestra el panel:

Captura de pantalla que muestra un panel de Grafana.

Habilitación del servicio Azure Managed Grafana

  1. Vaya a Azure Portal y busque el servicio "Grafana" y seleccione el servicio "Azure Managed Grafana".

    Captura de pantalla de la habilitación de Grafana en Marketplace.

  2. Asigne un nombre a la instancia y deje las opciones estándar en y cree el servicio.

  3. Una vez creado el servicio, vaya a la dirección URL donde tiene acceso a la instancia de Grafana. Puede encontrar la dirección URL en la página principal del servicio.

Adición de un nuevo origen de datos en Grafana

Después del primer inicio de sesión, deberá agregar un nuevo origen de datos a Azure Data Explorer.

  1. Vaya a "Configuración" y agregue un nuevo origen de datos.

  2. Busque Azure Data Explorer y seleccione el servicio.

  3. Configure la conexión y use el registro de la aplicación (siga el manual que se proporciona en la parte superior de esta página).

  4. Guarde y pruebe la conexión en la parte inferior de la página.

Importación de un panel de ejemplo

Ahora está listo para importar el panel de ejemplo proporcionado.

  1. Descargue el panel de ejemplo aquí: Panel de fabricación de Grafana de ejemplo.

  2. Vaya a "Panel" y seleccione "Importar".

  3. Seleccione el origen que ha descargado y seleccione en "Guardar". Aparece un error en la página, porque aún no se han establecido dos variables. Vaya a la página de configuración del panel.

  4. Seleccione a la izquierda en "Variables" y actualice las dos direcciones URL con la dirección URL del servicio Azure Digital Twins.

  5. Vuelva al panel y presione el botón Actualizar. Ahora debería ver los datos (no olvide pulsar el botón Guardar en el panel).

    La variable de ubicación de la parte superior de la página se rellena automáticamente con datos de Azure Digital Twins (los nodos de área de ISA95). Aquí puede seleccionar las diferentes ubicaciones y ver los distintos puntos de datos de cada fábrica.

  6. Si los datos no se muestran en el panel, vaya a los paneles individuales y compruebe si está seleccionado el origen de datos correcto.

Configurar alertas

En Grafana, también es posible crear alertas. En este ejemplo, creamos una alerta de OEE baja para una de las líneas de producción.

  1. Inicie sesión en el servicio Grafana y seleccione Reglas de alerta en el menú.

    Captura de pantalla que muestra la navegación a las alertas.

  2. Seleccione "Crear regla de alertas".

    Captura de pantalla en la que se muestra cómo crear una regla de alertas.

  3. Asigne un nombre a la alerta y seleccione "Azure Data Explorer" como origen de datos. Seleccione la consulta en el panel de navegación.

    Captura de pantalla de la creación de una consulta de alertas.

  4. En el campo de consulta, escriba la consulta siguiente. En este ejemplo, se usa la línea de producción "Seattle".

    let oee = CalculateOEEForStation("assembly", "seattle", 6, 6);
    print round(oee * 100, 2)
    
  5. Seleccione "tabla" como salida.

  6. Desplácese hacia abajo hasta la sección siguiente. Aquí, configurará el umbral de alerta. En este ejemplo, usamos "por debajo de 10" como umbral, pero en entornos de producción, este valor puede ser mayor.

    Captura de pantalla que muestra una alerta de umbral.

  7. Seleccione la carpeta donde desea guardar las alertas y configure el "Comportamiento de evaluación de alertas". Seleccione la opción "cada 2 minutos".

  8. Seleccione el botón "Guardar y salir".

En la información general de las alertas, ahora puede ver una alerta que se desencadena cuando el OEE está por debajo de "10".

Captura de pantalla que muestra una introducción a las alertas.

Puede integrar esta configuración con, por ejemplo, Microsoft Dynamics Field Services.

Conexión de la solución de referencia a Microsoft Power BI

Para conectar la solución de referencia de Power BI, necesita acceso a una suscripción de Power BI.

Complete los pasos siguientes:

  1. Instale la aplicación Power BI Desktop desde aquí.

  2. Inicie sesión en la aplicación de Power BI Desktop mediante el usuario con acceso a la suscripción de Power BI.

  3. En Azure Portal, vaya a la instancia de base de datos de Azure Data Explorer (ontologies) y agregue permisos Database Admin a un usuario de Azure Active Directory con acceso a solo una suscripción única de Azure, específicamente la suscripción que se usa para la instancia implementada de esta solución de referencia. Cree un nuevo usuario en Azure Active Directory si tiene que hacerlo.

  4. En Power BI, cree un nuevo informe y seleccione Datos de serie temporal de Azure Data Explorer como origen de datos a través de Get data ->Azure ->Azure Data Explorer (Kusto).

  5. En la ventana emergente, escriba el punto de conexión de Azure Data Explorer de la instancia (por ejemplo https://erichbtest3adx.eastus2.kusto.windows.net), el nombre de la base de datos (ontologies) y la consulta siguiente:

    let _startTime = ago(1h);
    let _endTime = now();
    opcua_metadata_lkv
    | where Name contains "assembly"
    | where Name contains "munich"
    | join kind=inner (opcua_telemetry
        | where Name == "ActualCycleTime"
        | where Timestamp > _startTime and Timestamp < _endTime
    ) on DataSetWriterID
    | extend NodeValue = todouble(Value)
    | project Timestamp, NodeValue
    
  6. Seleccione Load. Esto importa el tiempo real del ciclo de la estación de montaje de la línea de producción de Múnich durante la última hora.

  7. Cuando se le solicite, inicie sesión en Azure Data Explorer mediante el usuario de Azure Active Directory que ha concedido permiso para acceder a la base de datos de Azure Data Explorer anteriormente.

  8. En el Data view, seleccione la columna NodeValue y seleccione Don't summarize en el elemento de menú Summarization.

  9. Cambie al Report view.

  10. En Visualizations, seleccione la Line Chart visualización.

  11. En Visualizations, mueva el Timestamp del origen de Data al X-axis, selecciónelo y seleccione Timestamp.

  12. En Visualizations, mueva el NodeValue del origen de Data al Y-axis, selecciónelo y seleccione Median.

  13. Guarde el nuevo informe.

    Nota:

    Puede agregar otros datos de Azure Data Explorer al informe de forma similar.

    Captura de pantalla de una vista de Power BI.

Conexión de la solución de referencia a Microsoft Dynamics 365 Field Service

Esta integración muestra los siguientes escenarios:

  • Carga de recursos desde la solución de referencia Manufacturing Ontologies a Dynamics 365 Field Service.
  • Cree alertas en Dynamics 365 Field Service cuando se alcance un umbral determinado en Ontologías de fabricación de referencia de la solución de datos de telemetría.

La integración usa Azure Logics Apps. Con las aplicaciones y servicios bussiness-critcal de Logic Apps se pueden conectar a través de flujos de trabajo sin código. Capturamos información de Azure Data Explorer y desencadenamos acciones en Dynamics 365 Field Service.

En primer lugar, si aún no es un cliente de Dynamics 365 Field Service, active una prueba de 30 días aquí. Recuerde usar el mismo Microsoft Entra ID (anteriormente Azure Active Directory) que se usa al implementar la solución de referencia de Ontologías de fabricación. De lo contrario, tendría que configurar la autenticación entre inquilinos que no forma parte de estas instrucciones.

Creación de un flujo de trabajo de Azure Logic App para crear recursos en Dynamics 365 Field Service

Comencemos con la carga de recursos desde las Ontologías de fabricación en Dynamics 365 Field Service:

  1. Vaya a Azure Portal y cree una aplicación lógica.

  2. Asigne un nombre a Azure Logic App y colóquelo en el mismo grupo de recursos que la solución de referencia de Ontologías de fabricación.

  3. Seleccione "Flujos de trabajo".

  4. Asigne un nombre al flujo de trabajo: en este escenario se usa el tipo de estado con estado, ya que los recursos no son flujos de datos.

  5. Cree un nuevo desencadenador. Comenzamos con la creación de un desencadenador de "Periodicidad". Esto comprueba la base de datos todos los días si se crean nuevos recursos. Puede cambiar esto para que suceda con más frecuencia.

  6. En las acciones, busque Azure Data Explorer y seleccione el comando Run KQL query. Dentro de esta consulta, se comprueba qué tipo de recursos tenemos. Use la consulta siguiente para obtener recursos y pegarlos en el campo de consulta:

    let ADTInstance =  "PLACE YOUR ADT URL";let ADTQuery = "SELECT T.OPCUAApplicationURI as AssetName, T.$metadata.OPCUAApplicationURI.lastUpdateTime as UpdateTime FROM DIGITALTWINS T WHERE IS_OF_MODEL(T , 'dtmi:digitaltwins:opcua:nodeset;1') AND T.$metadata.OPCUAApplicationURI.lastUpdateTime > 'PLACE DATE'";evaluate azure_digital_twins_query_request(ADTInstance, ADTQuery)
    
  7. Para obtener los datos de recursos en Dynamics 365 Field Service, debe conectarse a Microsoft Dataverse. Conéctese a la instancia de Dynamics 365 Field Service y use la siguiente configuración:

    • Usar el nombre de la tabla "Customer Assets"
    • Coloque el valor de "AssetName" en el campo Nombre
  8. Guarde el flujo de trabajo y ejecútelo. Verá en unos segundos que se crean nuevos recursos en Dynamics 365 Field Service.

Creación de un flujo de trabajo de Azure Logic App para crear alertas en Dynamics 365 Field Service

Este flujo de trabajo crea alertas en Dynamics 365 Field Service, específicamente cuando se alcanza un umbral determinado de FaultyTime en un recurso de la solución de referencia de Ontologías de fabricación.

  1. En primer lugar, es necesario crear una función de Azure Data Explorer para obtener los datos correctos. Vaya al panel de consulta de Azure Data Explorer en Azure Portal y ejecute el código siguiente para crear una función FaultyFieldAssets:

    Captura de pantalla de la creación de una consulta de ADX de función.

    .create-or-alter function  FaultyFieldAssets() {  
    let Lw_start = ago(3d);
    opcua_telemetry
    | where Name == 'FaultyTime'
    and Value > 0
    and Timestamp between (Lw_start .. now())
    | join kind=inner (
        opcua_metadata
        | extend AssetList =split (Name, ';')
        | extend AssetName=AssetList[0]
        ) on DataSetWriterID
    | project AssetName, Name, Value, Timestamp}
    
  2. Cree un flujo de trabajo en Azure Logic App. Cree un desencadenador "Periodicidad" para iniciarse cada 3 minutos. Cree como acción "Azure Data Explorer" y seleccione la opción Ejecutar consulta KQL.

  3. Escriba la dirección URL del clúster de Azure Data Explorer y, a continuación, seleccione la base de datos y use el nombre de la función creado en el paso 1 como consulta.

  4. Seleccione Microsoft Dataverse como acción.

  5. Ejecute el flujo de trabajo y para ver las nuevas alertas que se generan en el panel de Dynamics 365 Field Service:

    Captura de pantalla de las alertas en Dynamics 365 FS.