Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 general de la eficacia del equipo (OEE), la previsión y la detección de anomalías. Mediante la información obtenida de estos casos de uso, puede crear un bucle de comentarios digitales que luego pueda aplicar optimizaciones y otros cambios en los procesos de producción.
La interoperabilidad es la clave para lograr un lanzamiento rápido de la arquitectura de la solución. El uso de estándares abiertos como OPC UA ayuda significativamente a lograr esta interoperabilidad.
En este tutorial se muestra cómo implementar una solución de IoT industrial mediante servicios de Azure. Esta solución usa la IEC 62541 Open Platform Communications (OPC) Unified Architecture (UA) para todos los datos de tecnología operativa (OT).
Requisitos previos
Para completar los pasos de este tutorial, necesita una suscripción de Azure. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Arquitectura de referencia de la solución
En los diagramas siguientes se muestra la arquitectura de la solución de IoT industrial:
Arquitectura simplificada que muestra las opciones de Azure y Microsoft Fabric:
Arquitectura detallada que muestra la opción de Azure:
En la tabla siguiente se describen los componentes clave de esta solución:
Componente | Descripción |
---|---|
Recursos industriales | Un conjunto de líneas de producción simuladas habilitadas para OPC UA 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 Event Hubs | El agente de mensajes en la nube que recibe mensajes pub/sub de OPC UA 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. |
Azure Managed Grafana | Azure Managed Grafana es una plataforma de visualización de datos creada con el software de Grafana por Grafana Labs. Grafana es un servicio totalmente administrado que Microsoft hospeda y admite. |
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 integral 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 agente MQTT o 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 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 de OPC UA, hospedados por OPC Foundation. |
UA Edge Translator | Esta aplicación de referencia de conectividad industrial de código abierto se traduce de interfaces de recursos propietarios a OPC UA. La solución usa las descripciones web W3C de las cosas 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 ejemplo es una muestra sencilla de cómo lograr el bucle de comentarios digitales.
Simulación de la línea de producción
La solución usa una simulación de línea de producción formada por varias estaciones, utilizando el modelo de información de OPC UA de la estación y un sistema de ejecución de fabricación simple (MES). Tanto las estaciones como el MES están en contenedores para facilitar la implementación.
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 del turno | Start | Final |
---|---|---|
Mañana | 07:00 | 14:00 |
Tarde | 15:00 | 22:00 |
Noche | 23:00 | 06:00 |
Nota:
Los tiempos de los turnos 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 la línea de producción.
El servidor OPC UA de estación usa los siguientes identificadores de nodo de OPC UA 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
La solución usa un bucle de comentarios digitales para administrar la presión en una estación simulada. Para implementar el bucle de comentarios, la solución desencadena un comando desde la nube en uno de los servidores OPC UA de la simulación. El desencadenador se activa cuando los datos de presión de serie temporal simulados alcanzan un umbral determinado. Puede ver la presión de la máquina de ensamblado en el panel de Azure Data Explorer. La presión se libera a intervalos regulares para la línea de producción de Seattle.
Instalación de la simulación de la línea de producción y los servicios en la nube
Seleccione el botón Implementar para implementar todos los recursos necesarios en la suscripción de Azure:
El proceso de implementación le pide que proporcione una contraseña para la máquina virtual (VM) que hospeda la simulación de línea de producción y la infraestructura perimetral. La contraseña debe incluir tres de: un carácter en minúsculas, un carácter en mayúsculas, un número y un carácter especial. La longitud de la contraseña debe tener entre 12 y 72 caracteres.
Nota:
Para reducir el costo, la implementación crea una sola máquina virtual Windows 11 Enterprise para la simulación de línea de producción y la infraestructura perimetral. En un escenario de producción, la simulación de línea de producción no es necesaria y, para el sistema operativo base, debe usar el Canal de mantenimiento a largo plazo de Windows IoT Enterprise.
Cuando se complete la implementación, use RDP para conectarse a la máquina virtual Windows implementada. Puede descargar el archivo RDP desde las opciones de Connect de la página de la máquina virtual en Azure Portal. Inicie sesión con las credenciales proporcionadas durante la implementación, abra un símbolo del sistema de Windows y use el siguiente comando para instalar el Subsistema de Windows para Linux (WSL):
wsl --install
Cuando finalice el comando, reinicie la máquina virtual e inicie sesión de nuevo. Un símbolo del sistema finaliza la instalación de WSL y se le pedirá que escriba un nuevo nombre de usuario y una contraseña para WSL. A continuación, en WSL, use el siguiente comando para instalar K3S, un entorno de ejecución ligero de Kubernetes:
curl -sfL https://get.k3s.io | sh
La máquina virtual ya está lista para ejecutar la simulación de línea de producción.
Ejecución de la simulación de línea de producción
En la máquina virtual, abra un símbolo del sistema de Windows, escriba wsl y presione Entrar. Vaya al directorio /mnt/c/ManufacturingOntologies-main/Tools/FactorySimulation
y ejecute el script del shell StartSimulation:
sudo ./StartSimulation.sh "<Your Event Hubs connection string>"
<Your Event Hubs connection string>
es la cadena de conexión del espacio de nombres de Event Hubs. Para obtener más información, consulte Obtención de una cadena de conexión de Event Hubs. Una cadena de conexión tiene el siguiente aspecto: Endpoint=sb://ontologies.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abcdefgh=
Nota:
Si la dirección IP externa de un servicio de Kubernetes se muestra como <pending>
, use el comando siguiente para asignar la dirección IP externa del servicio traefik
: sudo kubectl patch service <theService> -n <the service's namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["<the traefik external IP address>"]}}'
.
Sugerencia
Para evitar que WSL y K3s se apaguen automáticamente, mantenga abierto el símbolo del sistema de WSL.
Biblioteca en la nube de UA
Para leer los modelos de información de OPC UA directamente desde Azure Data Explorer, puede importar los nodos de OPC UA definidos en un modelo de información de OPC UA en una tabla. Puede usar la información importada para buscar más metadatos dentro de las consultas.
En primer lugar, configure una directiva de llamada de Azure Data Explorer para la biblioteca en la nube de UA mediante la ejecución de la siguiente consulta en el clúster de Azure Data Explorer. Antes de empezar, asegúrese de que es miembro del rol de AllDatabasesAdmin en el clúster, que puede configurar en Azure Portal; para ello, vaya a la página Permisos del clúster de Azure Data Explorer.
.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. En la consulta:
- Reemplace
<INFORMATION_MODEL_IDENTIFIER_FROM_THE_UA_CLOUD_LIBRARY>
por el identificador único del modelo de información que desea importar desde la biblioteca en la nube de UA. Puede encontrar este identificador en la dirección URL de la página del modelo de información en la biblioteca en la nube de UA. Por ejemplo, el identificador del conjunto de nodos de estación que usa este tutorial es1627266626
. - Reemplace por
<HASHED_CLOUD_LIBRARY_CREDENTIALS>
un encabezado de autorización básico que tenga las credenciales de la biblioteca en la nube de UA. Use una herramienta como https://www.debugbear.com/basic-auth-header-generator para generar el hash. También puede usar el siguiente comando de Bash:echo -n 'username:password' | base64
.
let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/<INFORMATION_MODEL_IDENTIFIER_FROM_THE_UA_CLOUD_LIBRARY>';
let headers=dynamic({'accept':'text/plain', 'Authorization':'Basic <HASHED_CLOUD_LIBRARY_CREDENTIALS>'});
evaluate http_request(uri, headers)
| 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
Para ver una representación gráfica de un modelo de información de OPC UA, puede usar la herramienta del Explorador de Kusto. Para representar el modelo de estación, ejecute la consulta siguiente en el Explorador de Kusto. Para obtener los mejores resultados, cambie la opción de Layout
a Grouped
y el Labels
a name
:
let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/1627266626';
let headers=dynamic({'accept':'text/plain', 'Authorization':'Basic <HASHED_CLOUD_LIBRARY_CREDENTIALS>'});
let variables = evaluate http_request(uri, headers)
| 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)
| 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
Opcionalmente, implemente operaciones de Azure IoT en el perímetro
De forma predeterminada, la simulación de línea de producción envía datos directamente al punto de conexión del centro de datos en el espacio de nombres de Event Hubs.
Para administrar este proceso, puede usar operaciones de Azure IoT en el perímetro en su lugar. 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.
Antes de implementar Azure IoT Operations, confirme que inició la simulación de línea de producción. A continuación, siga estos pasos en detalles de implementación de Azure IoT Operations.
Sugerencia
Puede usar la máquina virtual y la instancia de K3S que implementó anteriormente en este tutorial para implementar y ejecutar operaciones de Azure IoT.
Configurar la implementación de operaciones de Azure IoT
Puede configurar la implementación de Azure IoT Operations mediante la experiencia de operaciones de la interfaz de usuario web. Agregue los puntos de conexión de recursos, los recursos y los flujos de datos para procesar los datos de la simulación de línea de producción y enrutarlos al centro de datos en el espacio de nombres de Event Hubs.
En la implementación de Azure IoT Operations, cree puntos de conexión de recursos que definan conexiones a los siguientes servidores de OPC UA en la simulación de producción:
opc.tcp://assembly.munich/
opc.tcp://test.munich/
opc.tcp://packaging.munich/
opc.tcp://assembly.seattle/
opc.tcp://test.seattle/
opc.tcp://packaging.seattle/
Supervisión de condiciones de casos de uso, cálculo de OEE, detección de anomalías y predicciones en Azure Data Explorer
Para obtener información sobre cómo crear paneles sin código para la supervisión de condiciones, el rendimiento o las predicciones de mantenimiento, o la detección de anomalías, consulte la documentación de Azure Data Explorer. También hay un panel de ejemplo puede implementar. Para obtener información sobre cómo implementar un panel, consulte Visualizar datos con paneles de Azure Data Explorer > crear a partir del archivo . Después de importar el panel, actualice su origen de datos. Especifique el punto de conexión HTTPS del clúster del servidor de Azure Data Explorer en la esquina superior derecha del panel. El punto de conexión HTTPS tiene el siguiente aspecto: https://<ADXInstanceName>.<AzureRegion>.kusto.windows.net/
.
Nota:
Para mostrar el OEE para un turno específico, seleccione Intervalo de tiempo personalizado en la lista desplegable Intervalo de tiempo en la esquina superior izquierda del panel de Azure Data Explorer y escriba la fecha y hora de inicio a fin del turno que le interesa.
Representar el gráfico de modelos integrado Espacio de nombres unificado (UNS) e ISA-95 en Kusto Explorer
Esta solución de referencia implementa un espacio de nombres unificado (UNS), basado en los metadatos de OPC UA enviados a la base de datos de serie temporal de Azure Data Explorer en la nube. Estos metadatos de OPC UA incluyen la jerarquía de recursos ISA-95. Puede visualizar el gráfico resultante en la herramienta Explorador de Kusto.
Agregue una nueva conexión a la instancia de Azure Data Explorer y ejecute la consulta siguiente en el Explorador de Kusto:
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 opción Layout
a Grouped
.
Use Azure Managed Grafana
También puede usar Azure Managed Grafana para crear un panel en Azure para la solución descrita en este artículo. Use Grafana en la fabricación para crear paneles que muestren datos en tiempo real. Los pasos siguientes muestran cómo habilitar Grafana en Azure y crear un panel con los datos de línea de producción simulados desde Azure Data Explorer.
Habilitación del servicio de Azure Managed Grafana
Para crear un servicio de Azure Managed Grafana y configurarlo con permisos para acceder a la base de datos de ontologías:
En Azure Portal, busque Grafana y, a continuación, seleccione el servicio Azure Managed Grafana.
Para crear el servicio, en la página Crear área de trabajo de Grafana, escriba un nombre a la instancia. Elija todas las opciones predeterminadas.
Después de haber creado el servicio, asegúrese de que la instancia de Grafana tiene una identidad administrada asignada por el sistema, para ello, vaya al panel Identidad de la instancia de Azure Managed Grafana en Azure Portal. Si la identidad administrada asignada por el sistema no está habilitada, habilítela. Tome nota del id. de objeto (entidad de seguridad), lo necesitará más adelante.
Para conceder el permiso a la identidad administrada para acceder a la base de datos de ontologías en Azure Data Explorer:
- Vaya al panel Permisos de la instancia de Azure Data Explorer en Azure Portal.
- Seleccione Agregar > AllDatabasesViewer.
- Busque y seleccione el id. de objeto (entidad de seguridad) que se había anotado anteriormente.
Adición de un nuevo origen de datos en Grafana
Agregue un nuevo origen de datos para conectarse a Azure Data Explorer. En este ejemplo, usará una identidad administrada asignada por el sistema para conectarse a Azure Data Explorer. Para configurar la autenticación, siga estos pasos:
Para agregar el origen de datos a Grafana, siga estos pasos:
Vaya a la dirección URL del punto de conexión de la instancia de Grafana. Puede encontrar la dirección URL del punto de conexión en la página de Azure Managed Grafana de la instancia en Azure Portal. Inicie sesión en la instancia de Grafana.
En el panel de Grafana, seleccione Conexiones > Orígenes de datos y, a continuación, seleccione Agregar nuevo origen de datos. Desplácese hacia abajo y seleccione Origen de datos de Azure Data Explorer.
Elija Identidad administrada como menú de autenticación. A continuación, agregue la dirección URL de ingesta del clúster de Azure Data Explorer. Puede encontrar la dirección URL en el menú de la instancia de Azure Data Explorer en Azure Portal debajo de URI.
Seleccione Guardar y probar para comprobar la conexión del origen de datos.
Importación de un panel de ejemplo
Ahora está listo para importar el panel de ejemplo.
Descargue el panel Panel de fabricación de Grafana de ejemplo.
En el menú Grafana, vaya a Paneles y seleccione Nuevo > Importar.
Seleccione Cargar archivo JSON del panel y seleccione el archivo samplegrafanadashboard.json que ha descargado previamente. Seleccione importar.
En el panel Estación de OEE, seleccione Editar y seleccione el Origen de datos de Azure Data Explorer que ha configurado previamente. A continuación, seleccione KQL en el panel de consulta y agregue la siguiente consulta:
print round (CalculateOEEForStation('${Station}', '${Location}', '${CycleTime}', '${__from:date:iso}', '${__to:date:iso}') * 100, 2)
. Seleccione Aplicar para aplicar los cambios y volver al panel.En el panel Línea de OEE, seleccione Editar y, a continuación, seleccione el Origen de datos de Azure Data Explorer que ha configurado previamente. A continuación, seleccione KQL en el panel de consulta y agregue la siguiente consulta:
print round(CalculateOEEForLine('${Location}', '${CycleTime}', '${__from:date:iso}', '${__to:date:iso}') * 100, 2)
. Seleccione Aplicar para aplicar los cambios y volver al panel.En el panel Productos descartados, seleccione Editar y, a continuación, seleccione el Origen de datos de Azure Data Explorer que ha configurado previamente. A continuación, seleccione KQL en el panel de consulta y agregue la siguiente consulta:
opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry| where Name == "NumberOfDiscardedProducts"| where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend numProd = toint(Value)| summarize max(numProd)
. Seleccione Aplicar para aplicar los cambios y volver al panel.En el panel Productos fabricados, seleccione Editar y, a continuación, seleccione el Origen de datos de Azure Data Explorer que ha configurado previamente. A continuación, seleccione KQL en el panel de consulta y agregue la siguiente consulta:
opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry| where Name == "NumberOfManufacturedProducts"| where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend numProd = toint(Value)| summarize max(numProd)
. Seleccione Aplicar para aplicar los cambios y volver al panel.En el panel Consumo de energía, seleccione Editar y, a continuación, seleccione el Origen de datos de Azure Data Explorer que ha configurado previamente. A continuación, seleccione KQL en el panel de consulta y agregue la siguiente consulta:
opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry | where Name == "Pressure" | where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend energy = todouble(Value)| summarize avg(energy)); print round(toscalar(averageEnergyConsumption) * 1000, 2)
. Seleccione Aplicar para aplicar los cambios y volver al panel.En el panel Presión, seleccione Editar y, a continuación, seleccione el Origen de datos de Azure Data Explorer que ha configurado previamente. A continuación, seleccione KQL en el panel de consulta y agregue la siguiente consulta:
opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry | where Name == "Pressure" | where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend NodeValue = toint(Value)| project Timestamp1, NodeValue
. Seleccione Aplicar para aplicar los cambios y volver al panel.
Configurar alertas
En Grafana, también puede crear alertas. En este ejemplo, creará una alerta de OEE baja para una de las líneas de producción.
En el menú de Grafana, vaya a **Alertar >Reglas de alertas.
Seleccione Nueva regla de alertas.
Asigne un nombre a la alerta y seleccione Azure Data Explorer como origen de datos. Seleccione KQL en el panel Definir consulta y condición de alerta.
En el campo de consulta, escriba la consulta siguiente. Este ejemplo usa la línea de producción Seattle:
let oee = CalculateOEEForStation("assembly", "seattle", 10000, now(), now(-1h)); print round(oee * 100, 2)
Seleccione Establecer como condición de alerta.
Desplácese hacia abajo hasta la sección Expresiones. Elimine la expresión Reduce, no la necesitará.
Para el umbral de alerta, seleccione A como Entrada. Seleccione INFERIOR A y escriba 10.
Desplácese hacia abajo hasta la sección Establecer comportamiento de evaluación. Cree una Carpeta para guardar las alertas. Cree un nuevo Grupo de evaluación y especifique 2m.
Seleccione el botón Guardar regla y salir en la parte superior derecha.
En la información general de las alertas, ahora puede ver una alerta que se desencadena cuando la OEE es inferior a 10.
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.
Para crear el panel de Power BI, complete los pasos siguientes:
Instale la aplicación Power BI Desktop.
Inicie sesión en la aplicación Power BI Desktop mediante el usuario con acceso a la suscripción de Power BI.
En Azure Portal, vaya a la base de datos de Azure Data Explorer denominada ontologías y agregue permisos de Administrador de bases de datos a un usuario de Microsoft Entra ID con acceso solo a la suscripción usada para la instancia implementada de esta solución de referencia. Si es necesario, cree un nuevo usuario en Microsoft Entra ID.
En Power BI, cree un nuevo informe y seleccione Datos de serie temporal de Azure Data Explorer como origen de datos mediante Obtener datos > Azure > Azure Data Explorer (Kusto).
En la ventana emergente, escriba el punto de conexión de Azure Data Explorer del clúster (
https://<your cluster name>.<location>.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
Inicie sesión en Azure Data Explorer con el usuario de Microsoft Entra ID que ha concedido permiso para acceder a la base de datos de Azure Data Explorer anteriormente.
Nota:
Si la marca de tiempo contiene el mismo valor para todas las filas, modifique la última línea de la consulta de la siguiente manera:
| project Timestamp1, NodeValue
.Seleccione Cargar. Esta acción importa el tiempo de ciclo real de la estación de ensamblado de la línea de producción Múnich durante la última hora.
En
Table view
, seleccione la columna NodeValue y seleccione No resumir en el elemento de menú Resumen.Cambie a
Report view
.En Visualizaciones, seleccione la visualización Gráfico de líneas.
En Visualizaciones, mueva la
Timestamp
del origenData
alX-axis
, selecciónelo y seleccione Marca de tiempo.En Visualizaciones, mueva el
NodeValue
del origenData
alY-axis
, selecciónelo y seleccione Mediana.Guarde el nuevo informe.
Sugerencia
Use el mismo enfoque para agregar otros datos de Azure Data Explorer al informe.
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 de ontologías de fabricación a Dynamics 365 Field Service.
- Cree alertas en Dynamics 365 Field Service cuando se alcance un umbral determinado en los datos de telemetría de la solución de referencia de ontologías de fabricación.
La integración usa Azure Logics Apps. Con Logic Apps, puede usar flujos de trabajo sin código para conectar aplicaciones y servicios críticos para la empresa. En este ejemplo se muestra cómo capturar datos de Azure Data Explorer y desencadenar acciones en Dynamics 365 Field Service.
Si aún no es cliente de Dynamics 365 Field Service, active una prueba de 30 días.
Sugerencia
Para no tener que configurar la autenticación entre inquilinos, use el mismo Microsoft Entra ID que usó para implementar la solución de referencia de ontologías de fabricación.
Creación de un flujo de trabajo de Azure Logic Apps para crear recursos en Dynamics 365 Field Service
Para cargar recursos desde la solución de referencia de ontologías de fabricación a Dynamics 365 Field Service:
Vaya a Azure Portal y cree un recurso de aplicación lógica.
Asigne un nombre al recurso de Azure Logic Apps y colóquelo en el mismo grupo de recursos que la solución de referencia de ontologías de fabricación.
Seleccione Flujos de trabajo.
Asigne un nombre al flujo de trabajo. En este escenario, use el tipo de estado con estado, ya que los recursos no son flujos de datos.
En el diseñador de flujo de trabajo, seleccione Agregar un desencadenador. Cree un desencadenador Periodicidad que se ejecute todos los días. Puede cambiar el desencadenador para que se produzca con más frecuencia.
Agregue una acción después del desencadenador de periodicidad. En Agregar una acción, busque
Azure Data Explorer
y seleccione el comando Ejecutar consulta KQL. Conserve la autenticación predeterminada OAuth. Escriba la dirección URL del clúster de Azure Data Explorer yontologies
como nombre de la base de datos. En esta consulta, comprobará qué tipo de recursos tiene. Use la siguiente consulta para obtener recursos de la solución de referencia de ontologías de fabricación:opcua_telemetry | join kind=inner ( opcua_metadata | distinct Name, DataSetWriterID | extend AssetList = split(Name, ';') | extend AssetName = tostring(AssetList[0]) ) on DataSetWriterID | project AssetName | summarize by AssetName
Para obtener los datos de recursos en Dynamics 365 Field Service, debe conectarse a Microsoft Dataverse. En Agregar una acción, busque
Dataverse
y seleccione el comando Agregar una nueva fila. Conserve la autenticación predeterminada OAuth. Conéctese a la instancia de Dynamics 365 Field Service y use la siguiente configuración:- En el campo Nombre de tabla, seleccione Recursos del cliente
- En el campo Nombre, seleccione Escribir datos desde un paso anterior y luego seleccione AssetName.
Guarde el flujo de trabajo y ejecútelo. Puede ver que los nuevos recursos se crean en Dynamics 365 Field Service:
Creación de un flujo de trabajo de Azure Logic Apps para crear alertas en Dynamics 365 Field Service
Este flujo de trabajo crea alertas en Dynamics 365 Field Service, cuando el FaultyTime
para un recurso de la solución de referencia de ontologías de fabricación alcanza un umbral.
Para capturar los datos, cree una función de Azure Data Explorer. En el panel de consultas de Azure Data Explorer de Azure Portal, ejecute el código siguiente para crear una función
FaultyFieldAssets
en la base de datos ontologies:.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}
Cree un nuevo flujo de trabajo con estado en la aplicación lógica.
En el diseñador de flujo de trabajo, cree un desencadenador de periodicidad que se ejecute cada tres minutos. A continuación, agregue una acción y seleccione la acción Ejecutar consulta KQL.
Escriba la dirección URL del clúster de Azure Data Explorer, luego escriba ontologies como nombre de la base de datos y use el nombre de la función
FaultyFieldAssets
como consulta.Para obtener los datos de recursos en Dynamics 365 Field Service, debe conectarse a Microsoft Dataverse. En Agregar una acción, busque
Dataverse
y seleccione el comando Agregar una nueva fila. Conserve la autenticación predeterminada OAuth. Conéctese a la instancia de Dynamics 365 Field Service y use la siguiente configuración:- En el campo Nombre de tabla, seleccione Alertas de IoT
- En el campo Descripción, use Escribir datos desde un paso anterior para crear un mensaje "[AssetName] tiene un [Nombre] de [Valor]". AssetName, Nombre y Valor son los campos del paso anterior.
- En el campo Hora de alerta, seleccione Escribir datos desde un paso anterior y luego seleccione Marca de tiempo.
- En el campo Tipo de alerta, seleccione Anomalía.
Ejecute el flujo de trabajo y para ver las nuevas alertas que se generan en el panel Alertas de IoT de Dynamics 365 Field Service: