Jumeau numérique

Structurer un jumeau numérique ISA-95 avec la hiérarchie des équipements

Un guide pour utiliser la hiérarchie des équipements ISA-95 afin d'organiser les modèles de jumeau numérique et les topics MQTT, avec la republication Sparkplug B, des règles de nommage et un script de validation.

Schéma de la hiérarchie d'un jumeau numérique ISA-95 montrant les niveaux entreprise, site, zone, ligne et cellule mappés sur des topics MQTT
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

Un jumeau numérique ISA-95 utilise la hiérarchie des équipements de la norme ISA-95 (entreprise, site, zone, ligne, cellule) comme ossature du modèle du jumeau et de l'arborescence de topics MQTT qui l'alimente. Dans ce guide, vous verrez comment les niveaux correspondent aux objets du jumeau et aux topics, comment nommer les éléments de façon cohérente, comment intégrer les données Sparkplug B et comment vérifier que votre usine publie réellement la structure attendue par votre jumeau.

Pourquoi les jumeaux numériques ont besoin d'une hiérarchie

Le jumeau d'une seule machine est facile à organiser. Le jumeau d'une usine comptant des centaines de machines, ou d'une entreprise possédant plusieurs usines, devient vite un enchevêtrement de noms improvisés en l'absence de structure convenue. Sans elle :

  • Chaque équipe invente son propre nommage, si bien que la même presse s'appelle Press_07, L2-P7 et press7 dans trois systèmes.
  • Les visionneuses du jumeau nécessitent du code spécifique pour chaque source de données.
  • Les agrégations comme « le TRS de toutes les lignes de la zone Assemblage » exigent des tables de correspondance manuelles.

ISA-95 (IEC 62264) définit déjà une hiérarchie des équipements largement reconnue dans l'industrie manufacturière. L'utiliser pour le jumeau permet au modèle de correspondre à la façon dont les gens de l'usine pensent leur activité, et de s'aligner sur les concepts du MES et de l'ERP. Pour les fondamentaux du jumeau, voir le guide de la technologie du jumeau numérique.

Les niveaux de la hiérarchie des équipements ISA-95

Niveau ISA-95 Signification Exemple Objet du jumeau Segment de topic
Entreprise La société Acme Manufacturing Racine du jumeau acme
Site Un lieu physique Usine d'Izmir Jumeau du site avec carte et KPI izmir
Zone Une zone fonctionnelle d'un site Usinage, Assemblage, Utilités Vue de zone, région du plan machining
Centre de travail / Ligne Ligne de production ou groupe de cellules de procédé Ligne 2 Jumeau de ligne avec topologie des flux line2
Unité de travail / Cellule Machine ou unité individuelle CNC 3, Robot 1 Jumeau d'équipement avec télémétrie cnc3

La norme distingue plusieurs types de centres de travail (lignes de production, cellules de procédé, unités de production, zones de stockage) selon le type de fabrication. Pour les topics MQTT, cette distinction est rarement nécessaire dans le chemin ; stockez-la plutôt comme métadonnée de l'objet du jumeau.

Ne confondez pas la hiérarchie des équipements avec les niveaux fonctionnels ISA-95 (du niveau 0, procédé physique, au niveau 4, planification métier). Les deux apparaissent dans les discussions sur les « niveaux ISA-95 ». La hiérarchie du jumeau décrite ici est celle des équipements.

Faire correspondre la hiérarchie aux topics MQTT

Le modèle Unified Namespace publie toutes les données de l'usine sur un broker, sous une arborescence de topics qui reproduit la hiérarchie des équipements :

<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

Cela confère au jumeau trois propriétés utiles :

  1. La structure à partir des topics. Un service du jumeau peut construire son arborescence d'objets en analysant les chemins de topics, sans configuration séparée pour chaque équipement.
  2. Un périmètre par joker. Un jumeau de ligne s'abonne à acme/izmir/machining/line2/# ; une vue d'ensemble de l'usine s'abonne à acme/izmir/+/+/+/state.
  3. Un adressage stable. Chaque valeur possède une adresse canonique unique, partagée par les tableaux de bord, les historiens et les outils d'analyse.

Pour en savoir plus sur cette approche, lisez MQTT Sparkplug B et le Unified Namespace.

Des règles de nommage qui évitent les ennuis plus tard

  • Minuscules, lettres, chiffres et tirets uniquement. Pas d'espaces, pas de + ni de #.
  • Un concept par niveau ; ne sautez jamais un niveau. Si une machine n'appartient à aucune ligne, utilisez un segment générique comme general.
  • Utilisez des identifiants stables (cnc3) dans les topics et conservez les noms d'affichage (DMG Mori NHX 4000 #3) dans les métadonnées.
  • Gardez le type de données comme dernier segment, avec un petit vocabulaire fixe : telemetry, state, alarm, energy, health, command.
  • Documentez l'arborescence et traitez ses modifications comme des modifications de code, avec relecture.

Comment ConnectMQ prend en charge un jumeau numérique ISA-95

ConnectMQ a été conçu avec cette structure en tête. Il détecte les topics ISA-95 et Unified Namespace, et la vue des appareils du portail organise les appareils par niveaux ISA-95 : vous pouvez ainsi parcourir entreprise, site, zone, ligne et cellule exactement comme le fera le jumeau. L'explorateur de topics en direct montre l'arborescence brute et les messages pour le dépannage.

De nombreux appareils edge utilisent Sparkplug B, dont les topics suivent un autre schéma (spBv1.0/<group>/<message-type>/<edge-node>/<device>) et dont les payloads sont en Protobuf. ConnectMQ décode Sparkplug B (Protobuf ou JSON) et le republie dans des topics ISA-95. Par exemple :

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

Votre jumeau peut s'abonner au côté ISA-95 sans effectuer lui-même le moindre décodage Sparkplug, tandis que les clients SCADA compatibles Sparkplug continuent d'utiliser les topics d'origine. Cela supprime l'un des obstacles d'intégration les plus courants lorsqu'on associe des appareils Sparkplug existants à un nouveau jumeau.

Si vous ne souhaitez pas exploiter vous-même cette colonne vertébrale, un broker MQTT managé gère la disponibilité, TLS et le contrôle d'accès, et laisse votre équipe se concentrer sur la hiérarchie et le jumeau.

Construire le modèle du jumeau à partir des topics

Le modèle du jumeau est un arbre dont les nœuds portent des métadonnées et des valeurs en direct. Une représentation JSON simple :

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

Les valeurs en direct se rattachent aux nœuds de cellule à partir des topics telemetry et state. Les agrégats comme l'état ou le TRS de la ligne sont calculés par un service du jumeau et republiés dans un topic au niveau de la ligne, par exemple acme/izmir/machining/line2/kpi, afin que toutes les visionneuses lisent les mêmes chiffres.

Pratique : valider votre hiérarchie de topics

Avant de construire le jumeau, vérifiez que ce que publient les appareils correspond à la hiérarchie. Ce script s'abonne à un préfixe sur le serveur MQTT public gratuit, réservé aux tests et aux prototypes, et signale les topics qui enfreignent les règles. Utilisez un préfixe unique et des données simulées ; l'espace public est lisible par tous.

import re
import uuid

import paho.mqtt.client as mqtt

PREFIX = "connectmq/demo-isa-3e8f"  # votre préfixe de démo unique
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()

Publiez quelques topics de test pour le voir fonctionner :

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

Le second topic échoue à cause de la casse et du niveau ligne manquant. Le préfixe de démo comporte volontairement deux niveaux : le serveur MQTT public gratuit autorise jusqu'à 8 niveaux de topic, et la hiérarchie à six niveaux plus un préfixe à deux niveaux tient exactement. Sur un broker privé, aucun préfixe n'est nécessaire.

Checklist de mise en œuvre

  1. Convenez des noms d'entreprise, de site et de zone avec l'exploitation et l'informatique.
  2. Inventoriez les lignes et les cellules de chaque zone ; attribuez des identifiants stables.
  3. Fixez le vocabulaire des types de données et les schémas de payload par type.
  4. Configurez les passerelles edge ou la republication Sparkplug pour émettre des topics ISA-95.
  5. Validez les topics avec un script et la vue des appareils ISA-95 avant de construire les visuels.
  6. Construisez l'arbre du jumeau à partir des topics, complété par un fichier de métadonnées pour les noms et les types.
  7. Publiez les agrégats au niveau qu'ils décrivent.
  8. Versionnez le document de hiérarchie et relisez chaque modification.

Cette structure s'applique directement à un jumeau numérique d'usine et aux programmes de jumeau numérique dans l'industrie.

Organisez les données de votre usine avec ConnectMQ

ConnectMQ reconnaît les topics ISA-95 et Unified Namespace, décode Sparkplug B et vous offre une vue des appareils par niveaux ISA-95. Inscrivez-vous sur app.connectmq.com pour le plan Serverless gratuit, sans carte bancaire, et voyez votre hiérarchie prendre forme à mesure que les appareils se connectent.

Questions fréquentes

Qu'est-ce qu'un jumeau numérique ISA-95 ?

C'est un jumeau numérique dont le modèle et les topics de données sont organisés selon la hiérarchie des équipements ISA-95 (entreprise, site, zone, ligne et cellule), de sorte que le jumeau reflète la structure de l'usine.

ISA-95 est-il la même chose que le Unified Namespace ?

Non. ISA-95 est une norme qui définit la hiérarchie ; le Unified Namespace est un modèle d'architecture qui publie toutes les données sur un broker. Un UNS utilise couramment la hiérarchie ISA-95 pour son arborescence de topics.

Des appareils Sparkplug B peuvent-ils alimenter un jumeau ISA-95 ?

Oui. ConnectMQ décode Sparkplug B et republie les données dans des topics ISA-95, si bien que le jumeau peut s'abonner directement à l'arborescence ISA-95.

Et si une machine n'appartient à aucune ligne ?

Utilisez un segment générique comme general au niveau de la ligne, afin que chaque topic conserve la même profondeur et que les abonnements à jokers continuent de fonctionner.

Articles liés

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.