IoT industriel

Ignition MQTT : connecter les modules Transmission et Engine à un broker

Configurez les modules MQTT Transmission et MQTT Engine d'Ignition avec un broker externe, publiez des tags en Sparkplug B, récupérez-les sous forme de tags Ignition et vérifiez les payloads décodés dans un portail de broker.

Passerelles Ignition en périphérie et en salle de contrôle échangeant des tags Sparkplug B via un broker cloud, illustrant Ignition 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

L'intégration Ignition MQTT est l'une des façons les plus populaires de construire une architecture Sparkplug B : une passerelle Ignition Edge publie des tags, une passerelle Ignition centrale les consomme, et un broker MQTT fait le lien entre les deux. Dans ce tutoriel, vous configurerez les modules MQTT Transmission et MQTT Engine avec un broker externe plutôt qu'avec le broker intégré, publierez un dossier de tags en Sparkplug B, les verrez apparaître sous forme de tags côté consommateur et vérifierez les données décodées de manière indépendante. Comptez moins d'une heure pour que tout fonctionne.

Les modules MQTT d'Ignition

Les modules MQTT pour Ignition sont développés par Cirrus Link et distribués par Inductive Automation. Trois d'entre eux nous intéressent ici :

Module Rôle Emplacement typique
MQTT Transmission Publie les tags Ignition en Sparkplug B (edge node) Ignition Edge ou passerelle de site
MQTT Engine S'abonne à Sparkplug B et crée des tags Ignition (primary host) Passerelle centrale ou de salle de contrôle
MQTT Distributor Un broker MQTT exécuté dans Ignition Facultatif ; remplacé ici par un broker externe

Utiliser un broker externe au lieu de MQTT Distributor découple votre couche de messagerie du cycle de vie de la passerelle Ignition. Les redémarrages, mises à niveau et questions de licence de la passerelle ne font plus tomber le broker, et les clients non Ignition, comme des services Python, des historians ou d'autres systèmes SCADA, se connectent au même broker sur un pied d'égalité. Un broker MQTT cloud est particulièrement utile lorsque les sites edge n'ont pas de chemin réseau direct vers la passerelle centrale.

Prérequis

  • Ignition 8.1 ou plus récent : une passerelle pour Transmission (l'edge) et une pour Engine (l'hôte). En laboratoire, les deux modules peuvent tourner sur la même passerelle.
  • Les modules MQTT Transmission et MQTT Engine, installés via Config > System > Modules > Install or Upgrade a Module. Sans licence, ils fonctionnent en mode d'essai, qui peut être réinitialisé.
  • Un broker MQTT. En laboratoire, le serveur MQTT public gratuit broker.connectmq.com, réservé aux tests ; en production, un broker privé avec identifiants.
  • Un accès sortant depuis les deux passerelles vers TCP 1883 (tests) ou 8883 (TLS).

Étape 1 : pointer MQTT Transmission vers le broker

  1. Dans l'interface web de la passerelle Ignition, ouvrez Config > MQTT Transmission > Settings.
  2. Dans l'onglet Servers, modifiez le serveur par défaut ou créez-en un nouveau :
    • Name : connectmq
    • URL : tcp://broker.connectmq.com:1883 pour le laboratoire, ou ssl://YOUR_BROKER_HOST:8883 pour la production
    • Username et Password : vides pour le serveur MQTT public gratuit ; YOUR_USERNAME et YOUR_PASSWORD en production
  3. Supprimez ou désactivez toute entrée de serveur pointant vers un MQTT Distributor local, afin que Transmission ne répartisse pas le trafic entre plusieurs brokers.
  4. Enregistrez. L'état du serveur doit passer à connecté en quelques secondes.

Pour TLS avec un certificat Let's Encrypt, le magasin de confiance Java fourni avec Ignition valide normalement la chaîne : vous n'avez en général pas besoin de téléverser de fichier d'AC. Si votre version du module expose un champ client ID et que votre broker lie les client IDs aux identifiants, saisissez-y le YOUR_CLIENT_ID fourni ; chaque connexion de module a besoin de ses propres identifiants et de son propre client ID.

Étape 2 : créer les tags edge

MQTT Transmission publie les tags situés sous un chemin de tags configuré, par défaut le dossier Edge Nodes du fournisseur de tags par défaut. Les niveaux de dossiers en dessous correspondent aux identifiants Sparkplug :

[default]Edge Nodes/
  cmqdemo-4kz9/            <- Sparkplug Group ID (unique sur le broker public)
    Line1/                 <- Edge Node ID
      Filler/              <- Device ID
        Temperature        (Float, tag mémoire ou OPC)
        Speed              (Int4)
        Running            (Boolean)
        Count              (Int8)

Sur le serveur MQTT public gratuit, chaque topic Sparkplug commence par spBv1.0 : choisissez donc un Group ID aléatoire comme cmqdemo-4kz9 pour éviter les collisions avec d'autres utilisateurs, et utilisez des tags mémoire ou de simulation plutôt que de vraies valeurs process, car tout ce qui y est publié est lisible par tout le monde.

Dans l'onglet Transmitters, vérifiez que le transmitter par défaut utilise le fournisseur de tags default et le chemin Edge Nodes, et que Primary Host ID est renseigné, par exemple IgnitionHost. Avec un primary host ID défini, l'edge node attend le message STATE de l'hôte avant de publier et republie ses births lorsque l'hôte revient en ligne.

Étape 3 : configurer MQTT Engine comme primary host

  1. Ouvrez Config > MQTT Engine > Settings.
  2. Dans l'onglet General, définissez Primary Host ID sur la même valeur, IgnitionHost. Engine publiera son message STATE en tant que message retenu, ce qui indique aux edge nodes qu'un hôte est à l'écoute.
  3. Dans l'onglet Servers, ajoutez le même broker. En production, utilisez un jeu d'identifiants distinct de celui de Transmission : deux modules sur deux passerelles sont deux clients MQTT distincts.
  4. Dans l'onglet Namespaces, laissez l'espace de noms Sparkplug B par défaut activé.

Enregistrez et ouvrez le Designer. Sous le fournisseur de tags MQTT Engine, vous trouverez Edge Nodes/cmqdemo-4kz9/Line1/Filler avec les quatre tags et leurs valeurs. Modifiez Temperature côté edge : le tag Engine suit en un instant.

Étape 4 : vérifier le trafic Ignition MQTT de manière indépendante

Quand quelque chose ne va pas, vous voulez voir le point de vue du broker, pas seulement celui d'Ignition. Les payloads Sparkplug B sont encodés en Protobuf, si bien qu'un abonné brut affiche des données binaires, mais les topics à eux seuls en disent long :

mosquitto_sub -h broker.connectmq.com -p 1883 -i ign-watch-4kz9 \
  -t 'spBv1.0/cmqdemo-4kz9/#' -t 'spBv1.0/STATE/#' -v

Vous devriez voir, dans l'ordre : le message STATE de l'hôte, NBIRTH pour Line1, DBIRTH pour Filler, puis des messages DDATA à chaque changement de valeur de tag. Si vous voyez des births répétés sans données, l'edge node se reconnecte en boucle, généralement à cause d'un conflit de client ID.

Pour décoder les payloads dans votre propre code, suivez le tutoriel décoder Sparkplug B avec Python. Sur un broker ConnectMQ privé, le portail s'en charge pour vous : l'explorateur de topics en direct décode Sparkplug B en métriques lisibles, et le broker peut republier les données Sparkplug dans des topics de style ISA-95. Par exemple, spBv1.0/factory1/DDATA/line1/cnc1 est republié sous connectmq/factory1/production/line1/cnc1/telemetry, de sorte que les tableaux de bord et les scripts qui ne parlent pas Sparkplug peuvent s'abonner à des topics simples.

Le flux de messages Sparkplug en un coup d'œil

Message Publié par Rôle Retenu
STATE MQTT Engine (primary host) Hôte en ligne ou hors ligne Oui
NBIRTH / DBIRTH MQTT Transmission Liste complète des métriques avec types et valeurs courantes Non
NDATA / DDATA MQTT Transmission Valeurs modifiées uniquement Non
NDEATH Le broker, en tant que Last Will de l'edge node Edge node hors ligne Non
DDEATH MQTT Transmission Équipement hors ligne Non
NCMD / DCMD MQTT Engine Écritures et demandes de rebirth Non

Comprendre ce tableau résout la plupart des énigmes Ignition MQTT. Les tags d'Engine deviennent obsolètes sur NDEATH, et une demande de rebirth émise par Engine rafraîchit tout après une interruption. Le guide sur le payload Sparkplug B détaille la structure des métriques.

Passer en production

Avant de connecter un vrai site :

  1. Utilisez un broker privé avec TLS. Passez les URL en ssl://...:8883 et utilisez des identifiants fournis pour chaque instance de module.
  2. Choisissez des Group et Edge Node IDs parlants. Ils deviennent l'ossature de votre espace de noms ; alignez-les sur les noms de sites et de lignes.
  3. Réglez Transmission. Utilisez des bandes mortes sur les tags dans Ignition pour que les DDATA portent de vrais changements, et envisagez les options de store-and-forward de Transmission pour les liaisons peu fiables.
  4. Confrontez les limites du broker à votre conception. Sparkplug utilise la QoS 0 pour les données et la QoS 1 pour STATE et les messages de mort, plus un STATE retenu. Planifiez le nombre de connexions : chaque instance de module sur chaque passerelle est un client.
  5. Verrouillez les écritures. Engine peut écrire dans les tags edge via DCMD. Décidez si c'est autorisé et restreignez les tags accessibles en écriture côté edge.
  6. Supervisez l'hôte et les edges. Déclenchez des alertes sur NDEATH et sur le passage de STATE hors ligne, pas seulement sur les valeurs process.

Si vous préférez ne pas exploiter de brokers dans chaque salle de contrôle, ConnectMQ en tant que broker MQTT managé gère pour vous les certificats, les mises à jour et la protection contre les inondations de messages. Pour les questions plus larges de conception SCADA, consultez MQTT dans les systèmes SCADA et le guide de l'IoT industriel avec MQTT.

Dépannage

  • Le serveur apparaît déconnecté. Mauvais schéma d'URL (tcp:// contre ssl://), pare-feu sur le port, ou identifiants erronés.
  • Edge connecté mais aucun birth. Primary Host ID défini sur Transmission alors qu'Engine n'est pas connecté ou utilise un autre ID : l'edge attend le STATE.
  • Les births se répètent toutes les quelques secondes. Deux clients partagent un client ID, ou deux instances de Transmission publient les mêmes Group et Edge Node IDs.
  • Les tags Engine affichent une mauvaise qualité. L'edge a envoyé un NDEATH, ou l'hôte a demandé un rebirth qui n'est jamais arrivé. Consultez les journaux de la passerelle edge.
  • Rien sur le serveur public. Vérifiez que les limites du serveur MQTT public gratuit conviennent à votre test : 10 messages par seconde et par client, et 64 Ko par message.

Connectez Ignition à ConnectMQ

Donnez à vos passerelles Ignition un broker partagé, toujours disponible, qui décode Sparkplug B pour vous. Créez un broker Serverless gratuit sur app.connectmq.com, sans carte bancaire, collez l'URL et les identifiants dans MQTT Transmission et Engine, et regardez vos tags apparaître dans l'explorateur de topics. Vous préférez d'abord expérimenter ? Le serveur MQTT public gratuit fonctionne avec la configuration de laboratoire ci-dessus.

Questions fréquentes

Ai-je besoin de MQTT Distributor si j'utilise un broker externe ?

Non. Pointez MQTT Transmission et MQTT Engine vers le broker externe et désactivez ou supprimez les entrées de serveur Distributor.

Ignition peut-il publier du JSON simple au lieu de Sparkplug B ?

MQTT Transmission est conçu autour de Sparkplug B. Pour des topics JSON personnalisés, Cirrus Link propose un module distinct, ou vous pouvez publier depuis des scripts de passerelle avec un client MQTT standard.

Pourquoi mes tags MQTT Engine deviennent-ils obsolètes ?

Généralement parce que l'edge node s'est déconnecté et que son NDEATH a été publié, ou parce que l'hôte et l'edge utilisent des Primary Host IDs différents. Vérifiez l'état du serveur des deux côtés.

Le plan gratuit prend-il en charge Sparkplug B ?

Oui. Sparkplug nécessite les QoS 0 et 1 et les messages retenus, que le plan gratuit Serverless prend en charge, dans la limite de ses quotas de connexions et de taille de message.

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.