DA EN

MQTT, cRIO og store systemer

LabVIEW · MQTT · cRIO

På NORDLUG-mødet den 11. november 2025 holdt jeg et oplæg om, hvordan MQTT kan bruges som en generisk kommunikationsprotokol i store LabVIEW/cRIO-systemer. Oplægget tog udgangspunkt i et konkret refaktoreringsprojekt og viste, hvordan MQTT kan erstatte en blanding af REST API, netværksdelte shared variables og andre proprietære protokoller.

Udgangspunktet: et stort, heterogent system

Det eksisterende system bestod af en Windows-PC med LabVIEW som central hub, der kommunikerede med en række cRIO'er via Network Published Shared Variables og FPGA-lag, samt med andre PC'er og værktøjer via REST API, SSH og MODBUS. Det virkede – men det var svært at udvide, og kommunikationen var tæt koblet til NI's egne protokoller.

Målet var at erstatte denne blanding med én fælles protokol: MQTT. Med en central broker i midten kan alle enheder – Windows/Linux-PC'er, cRIO'er, Python/C++/C#-programmer og tredjepartsværktøjer – tale med hinanden over det samme publish/subscribe-system. Det giver langt løsere kobling og gør det enkelt at tilføje nye klienter uden at røre ved eksisterende kode.

Hvad er MQTT?

MQTT (Message Queuing Telemetry Transport) er en åben OASIS-standard, der er designet som en ekstremt letvægts publish/subscribe-protokol. Den er oprindeligt udviklet til IoT-enheder med begrænset båndbredde og processorkraft, men bruges i dag i stor skala inden for produktion, telekommunikation, bilindustri og olie & gas.

En MQTT-pakke indeholder et topic (en tekststreng opdelt med / for undertopics, f.eks. system/gruppe1/enhed23/data), et sæt flag (QoS-niveau 0/1/2, DUP og Retain) og en payload på op til 256 MB – typisk JSON-tekst. Klienter abonnerer på topics hos en central broker, og alle beskeder publiceret til et topic sendes videre til alle abonnenter. Det er enkelt, pålideligt og sprogagnostisk.

MQTT i LabVIEW

NI's MQTT-support i LabVIEW gør det relativt ligetil at integrere en broker i et eksisterende system. I demoen viste jeg, hvordan LabVIEW både kan publicere og abonnere på topics, og hvordan en cRIO via NI Scan Engine kan eksponere sine I/O-værdier direkte på MQTT-bussen. Scan Engine kører som standard med 10 ms opdateringsrate (minimum < 1 ms), mens MQTT-laget typisk kører med 100 ms (minimum 10 ms) – et trade-off, der passer til de fleste applikationer.

En vigtig detalje ved MQTT-topics er, at de er versalfølsomme (myTopicmytopic), og at det derfor betaler sig at definere en klar topicstruktur fra starten, f.eks.:

mysystem/json/v1/gruppe1/enhed23/data

Wildcards gør det enkelt at abonnere på hele grupper: mysystem/json/v1/gruppe1/# fanger alle signaler i gruppe1, mens mysystem/+/+/gruppe1/+/data abonnerer på data-feltet i gruppe1 på tværs af alle versioner og enheder.

Hjemmeautomatisering med LabVIEW og MQTT

Som afslutning viste jeg en sjov demo: MQTT og LabVIEW brugt til hjemmeautomatisering. Det illustrerede fint, at protokollen er fuldstændig generisk – den samme broker og de samme LabVIEW-VIs kan bruges til industrielle testsystemer og til at styre lyset derhjemme.

Næste NORDLUG-møde

Næste møde er 24. november 2025 – online – med Jesper Kjær Sørensen fra Gpower om VIPM og Tom McQuillan. Mødet efter det er 20. januar 2026 in-person og online om LabVIEW og versionsstyring. Alle er velkomne – se mere på Community-siden.

/Anders Pedersen Sekanina

Skal vi tage en uforpligtende snak?

Fortæl os om jeres test- eller automatiseringsopgave, og hør hvad vi kan gøre for jer.

Kontakt os