Gemelo digital

Estructurar un gemelo digital ISA-95 con la jerarquía de equipos

Una guía para usar la jerarquía de equipos de ISA-95 al organizar los modelos de gemelo digital y los topics MQTT, con republicación de Sparkplug B, reglas de nomenclatura y un script de validación.

Diagrama de la jerarquía de un gemelo digital ISA-95 con los niveles de empresa, emplazamiento, área, línea y celda asignados a topics MQTT
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

Un gemelo digital ISA-95 usa la jerarquía de equipos de la norma ISA-95 (empresa, emplazamiento, área, línea, celda) como columna vertebral del modelo del gemelo y del árbol de topics MQTT que lo alimenta. En esta guía verás cómo se corresponden los niveles con los objetos del gemelo y los topics, cómo nombrar las cosas de forma coherente, dónde encajan los datos Sparkplug B y cómo validar que tu planta publica realmente la estructura que espera tu gemelo.

Por qué los gemelos digitales necesitan una jerarquía

El gemelo de una sola máquina es fácil de organizar. El gemelo de una planta con cientos de máquinas, o de una empresa con varias plantas, se convierte enseguida en una maraña de nombres improvisados si no hay una estructura acordada. Sin ella:

  • Cada equipo inventa su propia nomenclatura, así que la misma prensa es Press_07, L2-P7 y press7 en tres sistemas.
  • Los visores del gemelo necesitan código a medida para cada fuente de datos.
  • Las agregaciones como "OEE de todas las líneas del área de Montaje" exigen tablas de correspondencias manuales.

ISA-95 (IEC 62264) ya define una jerarquía de equipos ampliamente reconocida para la fabricación. Usarla en el gemelo hace que el modelo coincida con la forma en que la gente de planta entiende su operación, y lo alinea con los conceptos de MES y ERP. Para los fundamentos de los gemelos, consulta la guía de tecnología de gemelo digital.

Los niveles de la jerarquía de equipos ISA-95

Nivel ISA-95 Significado Ejemplo Objeto del gemelo Segmento del topic
Empresa (Enterprise) La compañía Acme Manufacturing Raíz del gemelo acme
Emplazamiento (Site) Una ubicación física Planta de Esmirna Gemelo del emplazamiento con mapa y KPI izmir
Área (Area) Un área funcional del emplazamiento Mecanizado, Montaje, Servicios auxiliares Vista de área, zona del plano machining
Centro de trabajo / Línea Línea de producción o grupo de celdas de proceso Línea 2 Gemelo de línea con topología de flujo line2
Unidad de trabajo / Celda Máquina o unidad individual CNC 3, Robot 1 Gemelo del activo con telemetría cnc3

La norma distingue varios tipos de centros de trabajo (líneas de producción, celdas de proceso, unidades de producción, zonas de almacenamiento) según el tipo de fabricación. En los topics MQTT rara vez necesitas esa distinción en la ruta; guárdala como metadato en el objeto del gemelo.

No confundas la jerarquía de equipos con los niveles funcionales de ISA-95 (del Nivel 0, proceso físico, al Nivel 4, planificación de negocio). Ambos aparecen cuando se habla de "niveles ISA-95". La jerarquía del gemelo descrita aquí usa la jerarquía de equipos.

Asignar la jerarquía a topics MQTT

El patrón Unified Namespace publica todos los datos de la planta en un broker bajo un árbol de topics que refleja la jerarquía de equipos:

<enterprise>/<site>/<area>/<line>/<cell>/<data-type>

acme/izmir/machining/line2/cnc3/telemetry
acme/izmir/machining/line2/cnc3/state
acme/izmir/machining/line2/robot1/telemetry
acme/izmir/utilities/compressors/comp1/energy

Esto aporta al gemelo tres propiedades útiles:

  1. Estructura a partir de los topics. Un servicio del gemelo puede construir su árbol de objetos analizando las rutas de los topics, sin configuración separada para cada activo.
  2. Alcance mediante comodines. Un gemelo de línea se suscribe a acme/izmir/machining/line2/#; una vista general de planta se suscribe a acme/izmir/+/+/+/state.
  3. Direccionamiento estable. Cada valor tiene una única dirección canónica que comparten paneles, historiadores y analítica.

Para saber más sobre este enfoque, lee MQTT Sparkplug B y el Unified Namespace.

Reglas de nomenclatura que evitan problemas futuros

  • Minúsculas, letras, dígitos y guiones únicamente. Sin espacios, sin + ni #.
  • Un concepto por nivel; nunca te saltes un nivel. Si una máquina no está en una línea, usa un marcador como general.
  • Usa ID estables (cnc3) en los topics y guarda los nombres visibles (DMG Mori NHX 4000 #3) en los metadatos.
  • Deja el tipo de dato como último segmento, con un vocabulario fijo y reducido: telemetry, state, alarm, energy, health, command.
  • Documenta el árbol y trata los cambios como cambios de código, con revisión.

Cómo da soporte ConnectMQ a un gemelo digital ISA-95

ConnectMQ está diseñado con esta estructura en mente. Detecta los topics ISA-95 y Unified Namespace, y la vista de dispositivos del portal organiza los dispositivos por niveles ISA-95, para que puedas recorrer empresa, emplazamiento, área, línea y celda exactamente como lo hará el gemelo. El explorador de topics en vivo muestra el árbol y los mensajes en bruto para la resolución de problemas.

Muchos dispositivos de edge usan Sparkplug B, cuyos topics siguen otro esquema (spBv1.0/<group>/<message-type>/<edge-node>/<device>) y cuyos payloads son Protobuf. ConnectMQ decodifica Sparkplug B (Protobuf o JSON) y lo republica en topics ISA-95. Por ejemplo:

spBv1.0/factory1/DDATA/line1/cnc1   ->   connectmq/factory1/production/line1/cnc1/telemetry

Tu gemelo puede suscribirse al lado ISA-95 sin hacer ninguna decodificación Sparkplug propia, mientras los clientes SCADA compatibles con Sparkplug siguen usando los topics originales. Esto elimina uno de los obstáculos de integración más comunes al combinar dispositivos Sparkplug existentes con un gemelo nuevo.

Si no quieres operar tú mismo esta columna vertebral, un broker MQTT gestionado se encarga de la disponibilidad, el TLS y el control de acceso, y tu equipo puede centrarse en la jerarquía y el gemelo.

Construir el modelo del gemelo a partir de los topics

El modelo del gemelo es un árbol cuyos nodos llevan metadatos y valores en vivo. Una representación JSON sencilla:

{
  "id": "acme/izmir/machining/line2",
  "level": "line",
  "name": "Line 2 - Housings",
  "children": [
    { "id": "acme/izmir/machining/line2/cnc3", "level": "cell", "name": "CNC 3", "type": "cnc" },
    { "id": "acme/izmir/machining/line2/robot1", "level": "cell", "name": "Loading Robot", "type": "robot" }
  ]
}

Los valores en vivo se asocian a los nodos de celda a partir de los topics telemetry y state. Los agregados, como el estado o el OEE de la línea, los calcula un servicio del gemelo y los publica de vuelta en un topic a nivel de línea, por ejemplo acme/izmir/machining/line2/kpi, para que todos los visores lean las mismas cifras.

Práctica: valida tu jerarquía de topics

Antes de construir el gemelo, comprueba que lo que publican los dispositivos coincide con la jerarquía. Este script se suscribe a un prefijo en el servidor MQTT público gratuito e informa de los topics que incumplen las reglas. Usa un prefijo único y datos simulados; el servidor público es legible por todos y es solo para pruebas y prototipos.

import re
import uuid

import paho.mqtt.client as mqtt

PREFIX = "connectmq/demo-isa-3e8f"  # tu prefijo de demo único
LEVELS = ["enterprise", "site", "area", "line", "cell", "datatype"]
DATA_TYPES = {"telemetry", "state", "alarm", "energy", "health", "command", "kpi"}
SEGMENT = re.compile(r"^[a-z0-9-]+$")
seen = set()


def check(topic):
    parts = topic[len(PREFIX) + 1 :].split("/")
    problems = []
    if len(parts) != len(LEVELS):
        problems.append(f"expected {len(LEVELS)} levels, got {len(parts)}")
    for name, seg in zip(LEVELS, parts):
        if not SEGMENT.match(seg):
            problems.append(f"{name} '{seg}' has invalid characters")
    if parts and parts[-1] not in DATA_TYPES:
        problems.append(f"unknown data type '{parts[-1]}'")
    return problems


def on_connect(client, userdata, flags, reason_code, properties):
    client.subscribe(f"{PREFIX}/#")
    print("Validating topics under", PREFIX)


def on_message(client, userdata, msg):
    if msg.topic in seen:
        return
    seen.add(msg.topic)
    problems = check(msg.topic)
    print(("OK   " if not problems else "FAIL ") + msg.topic + ("" if not problems else "  -> " + "; ".join(problems)))


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"isa95-check-{uuid.uuid4().hex[:6]}")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_forever()

Publica algunos topics de prueba para verlo funcionar:

mosquitto_pub -h broker.connectmq.com -p 1883 -i isa-pub-1 -t "connectmq/demo-isa-3e8f/acme/izmir/machining/line2/cnc3/telemetry" -m '{"rpm":8000}'
mosquitto_pub -h broker.connectmq.com -p 1883 -i isa-pub-2 -t "connectmq/demo-isa-3e8f/acme/izmir/Machining/cnc3/Telemetry" -m '{"rpm":8000}'

El segundo topic falla por las mayúsculas y por la falta del nivel de línea. El prefijo de la demo tiene deliberadamente dos niveles: el servidor público admite hasta 8 niveles de topic, y la jerarquía de seis niveles más un prefijo de dos encaja exactamente. En un broker privado no necesitas ningún prefijo.

Lista de comprobación de implementación

  1. Acuerda los nombres de empresa, emplazamiento y área con operaciones y TI.
  2. Haz inventario de líneas y celdas por área y asigna ID estables.
  3. Fija el vocabulario de tipos de datos y los esquemas de payload por tipo.
  4. Configura los gateways de edge o la republicación de Sparkplug para emitir topics ISA-95.
  5. Valida los topics con un script y con la vista de dispositivos ISA-95 antes de construir las visualizaciones, como un gemelo digital 3D.
  6. Construye el árbol del gemelo a partir de los topics más un archivo de metadatos con nombres y tipos.
  7. Publica los agregados en el nivel que describen.
  8. Versiona el documento de la jerarquía y revisa cada cambio.

La estructura se aplica directamente a un gemelo digital de fábrica y a los programas de gemelo digital en fabricación.

Organiza los datos de tu planta con ConnectMQ

ConnectMQ reconoce los topics ISA-95 y Unified Namespace, decodifica Sparkplug B y te ofrece una vista de dispositivos por niveles ISA-95. Regístrate en app.connectmq.com en el plan Serverless gratuito, sin tarjeta de crédito, y observa cómo toma forma tu jerarquía a medida que se conectan los dispositivos.

Preguntas frecuentes

¿Qué es un gemelo digital ISA-95?

Es un gemelo digital cuyo modelo y topics de datos se organizan según la jerarquía de equipos de ISA-95 (empresa, emplazamiento, área, línea y celda), de modo que el gemelo coincide con la estructura de la planta.

¿ISA-95 es lo mismo que el Unified Namespace?

No. ISA-95 es una norma que define la jerarquía; el Unified Namespace es un patrón de arquitectura que publica todos los datos en un broker. Un UNS suele usar la jerarquía ISA-95 para su árbol de topics.

¿Pueden los dispositivos Sparkplug B alimentar un gemelo ISA-95?

Sí. ConnectMQ decodifica Sparkplug B y republica los datos en topics ISA-95, de modo que el gemelo puede suscribirse directamente al árbol ISA-95.

¿Qué pasa si una máquina no pertenece a ninguna línea?

Usa un segmento de marcador como general en el nivel de línea, para que todos los topics mantengan la misma profundidad y las suscripciones con comodines sigan funcionando.

Artículos relacionados

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.