Gêmeo digital

Estruturando um Gêmeo Digital ISA-95 com a Hierarquia de Equipamentos

Um guia sobre como usar a hierarquia de equipamentos ISA-95 para organizar modelos de gêmeo digital e topics MQTT, incluindo republicação de Sparkplug B, regras de nomenclatura e um script de validação.

Diagrama da hierarquia de um gêmeo digital ISA-95 mostrando os níveis empresa, site, área, linha e célula mapeados em topics MQTT
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

Um gêmeo digital ISA-95 usa a hierarquia de equipamentos da norma ISA-95 (empresa, site, área, linha, célula) como espinha dorsal do modelo do gêmeo e da árvore de topics MQTT que o alimenta. Neste guia você vai aprender como os níveis se mapeiam em objetos do gêmeo e em topics, como nomear tudo de forma consistente, como os dados Sparkplug B se encaixam e como validar se a sua planta realmente publica a estrutura que o seu gêmeo espera.

Por Que Gêmeos Digitais Precisam de uma Hierarquia

O gêmeo de uma única máquina é fácil de organizar. O gêmeo de uma planta com centenas de máquinas, ou de uma empresa com várias plantas, rapidamente vira um emaranhado de nomes improvisados se não houver uma estrutura acordada. Sem ela:

  • Cada equipe inventa sua própria nomenclatura, de modo que a mesma prensa é Press_07, L2-P7 e press7 em três sistemas.
  • Os visualizadores do gêmeo precisam de código personalizado para cada fonte de dados.
  • Agregações como "OEE de todas as linhas da área de Montagem" exigem tabelas de mapeamento manuais.

A ISA-95 (IEC 62264) já define uma hierarquia de equipamentos amplamente reconhecida para a manufatura. Usá-la no gêmeo significa que o modelo corresponde à forma como o pessoal da planta pensa a operação, e ele fica alinhado com os conceitos de MES e ERP. Para os fundamentos de gêmeos, veja o guia de tecnologia de gêmeo digital.

Os Níveis da Hierarquia de Equipamentos ISA-95

Nível ISA-95 Significado Exemplo Objeto do gêmeo Segmento do topic
Empresa (Enterprise) A companhia Acme Manufacturing Raiz do gêmeo acme
Site Um local físico Planta de Izmir Gêmeo do site com mapa e KPIs izmir
Área Uma área funcional do site Usinagem, Montagem, Utilidades Visão da área, região da planta baixa machining
Centro de trabalho / Linha Linha de produção ou grupo de células de processo Linha 2 Gêmeo da linha com topologia de fluxo line2
Unidade de trabalho / Célula Máquina ou unidade individual CNC 3, Robô 1 Gêmeo do ativo com telemetria cnc3

A norma distingue vários tipos de centros de trabalho (linhas de produção, células de processo, unidades de produção, zonas de armazenagem), dependendo do tipo de manufatura. Para topics MQTT, raramente você precisa dessa distinção no caminho; armazene-a como metadado no objeto do gêmeo.

Não confunda a hierarquia de equipamentos com os níveis funcionais da ISA-95 (do Nível 0, processo físico, até o Nível 4, planejamento de negócios). Ambos aparecem em discussões sobre "níveis ISA-95". A hierarquia do gêmeo descrita aqui usa a hierarquia de equipamentos.

Mapeando a Hierarquia em Topics MQTT

O padrão Unified Namespace publica todos os dados da planta em um broker, sob uma árvore de topics que espelha a hierarquia de equipamentos:

<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

Isso dá ao gêmeo três propriedades úteis:

  1. Estrutura a partir dos topics. Um serviço do gêmeo pode montar sua árvore de objetos analisando os caminhos dos topics, sem configuração separada para cada ativo.
  2. Escopo por wildcard. Um gêmeo de linha assina acme/izmir/machining/line2/#; uma visão geral da planta assina acme/izmir/+/+/+/state.
  3. Endereçamento estável. Cada valor tem um único endereço canônico, compartilhado por dashboards, historiadores e ferramentas de análise.

Para saber mais sobre essa abordagem, leia MQTT Sparkplug B e o Unified Namespace.

Regras de nomenclatura que evitam dor de cabeça depois

  • Apenas letras minúsculas, dígitos e hifens. Sem espaços, sem + ou #.
  • Um conceito por nível; nunca pule um nível. Se uma máquina não está em uma linha, use um marcador como general.
  • Use IDs estáveis (cnc3) nos topics e mantenha os nomes de exibição (DMG Mori NHX 4000 #3) nos metadados.
  • Mantenha o tipo de dado como último segmento, com um vocabulário pequeno e fixo: telemetry, state, alarm, energy, health, command.
  • Documente a árvore e trate as mudanças como mudanças de código, com revisão.

Como a ConnectMQ Apoia um Gêmeo Digital ISA-95

A ConnectMQ foi construída com essa estrutura em mente. Ela detecta topics ISA-95 e Unified Namespace, e a visão de dispositivos do portal organiza os dispositivos por níveis ISA-95, para que você navegue por empresa, site, área, linha e célula exatamente como o gêmeo fará. O explorador de topics ao vivo mostra a árvore bruta e as mensagens para a resolução de problemas.

Muitos dispositivos de borda usam Sparkplug B, cujos topics seguem um esquema diferente (spBv1.0/<group>/<message-type>/<edge-node>/<device>) e cujos payloads são Protobuf. A ConnectMQ decodifica Sparkplug B (Protobuf ou JSON) e o republica em topics ISA-95. Por exemplo:

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

O seu gêmeo pode assinar o lado ISA-95 sem fazer nenhuma decodificação de Sparkplug por conta própria, enquanto os clientes SCADA compatíveis com Sparkplug continuam usando os topics originais. Isso elimina um dos obstáculos de integração mais comuns ao combinar dispositivos Sparkplug brownfield com um novo gêmeo.

Se você não quer operar essa espinha dorsal por conta própria, um broker MQTT gerenciado cuida da disponibilidade, do TLS e do controle de acesso, deixando sua equipe livre para se concentrar na hierarquia e no gêmeo.

Construindo o Modelo do Gêmeo a Partir dos Topics

O modelo do gêmeo é uma árvore cujos nós carregam metadados e valores ao vivo. Uma representação simples em JSON:

{
  "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" }
  ]
}

Os valores ao vivo se ligam aos nós de célula a partir dos topics telemetry e state. Agregados como o estado da linha ou o OEE da linha são calculados por um serviço do gêmeo e publicados de volta em um topic no nível da linha, por exemplo acme/izmir/machining/line2/kpi, para que todos os visualizadores leiam os mesmos números.

Mão na Massa: Valide Sua Hierarquia de Topics

Antes de construir o gêmeo, verifique se o que os dispositivos publicam corresponde à hierarquia. Este script assina um prefixo no servidor MQTT público (gratuito) e informa os topics que quebram as regras. Use um prefixo exclusivo e dados simulados; a área pública pode ser lida por qualquer pessoa.

import re
import uuid

import paho.mqtt.client as mqtt

PREFIX = "connectmq/demo-isa-3e8f"  # seu prefixo de demo exclusivo
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()

Publique alguns topics de teste para vê-lo funcionando:

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}'

O segundo topic falha por causa das maiúsculas e da ausência do nível de linha. O prefixo da demo tem, de propósito, dois níveis: o servidor MQTT público permite até 8 níveis de topic, e a hierarquia de seis níveis mais um prefixo de dois níveis cabe exatamente. Em um broker privado, você não precisa de prefixo algum.

Checklist de Implementação

  1. Defina os nomes de empresa, site e área junto com operações e TI.
  2. Faça o inventário de linhas e células por área; atribua IDs estáveis.
  3. Fixe o vocabulário de tipos de dados e os esquemas de payload por tipo.
  4. Configure os gateways de borda ou a republicação de Sparkplug para emitir topics ISA-95.
  5. Valide os topics com um script e com a visão de dispositivos ISA-95 antes de construir os visuais.
  6. Monte a árvore do gêmeo a partir dos topics, mais um arquivo de metadados para nomes e tipos.
  7. Publique os agregados no nível que eles descrevem.
  8. Versione o documento da hierarquia e revise cada mudança.

A estrutura se aplica diretamente a um gêmeo digital de fábrica e a programas de gêmeo digital na manufatura.

Organize os Dados da Sua Planta com a ConnectMQ

A ConnectMQ reconhece topics ISA-95 e Unified Namespace, decodifica Sparkplug B e oferece uma visão de dispositivos por níveis ISA-95. Cadastre-se em app.connectmq.com no plano Serverless (Free), sem cartão de crédito, e veja sua hierarquia tomar forma à medida que os dispositivos se conectam.

Perguntas frequentes

O que é um gêmeo digital ISA-95?

É um gêmeo digital cujo modelo e cujos topics de dados são organizados de acordo com a hierarquia de equipamentos ISA-95 (empresa, site, área, linha e célula), para que o gêmeo corresponda à estrutura da planta.

ISA-95 é a mesma coisa que Unified Namespace?

Não. A ISA-95 é uma norma que define a hierarquia; o Unified Namespace é um padrão de arquitetura que publica todos os dados em um broker. Um UNS costuma usar a hierarquia ISA-95 em sua árvore de topics.

Dispositivos Sparkplug B podem alimentar um gêmeo ISA-95?

Sim. A ConnectMQ decodifica Sparkplug B e republica os dados em topics ISA-95, para que o gêmeo possa assinar diretamente a árvore ISA-95.

E se uma máquina não pertencer a uma linha?

Use um segmento marcador como general no nível de linha, para que todos os topics mantenham a mesma profundidade e as assinaturas com wildcard continuem funcionando.

Artigos relacionados

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.