Modbus — Protocol voor industriële communicatie

Definitie en geschiedenis

Modbus is een industrieel communicatieprotocol dat in 1979 door Modicon (tegenwoordig Schneider Electric) werd geïntroduceerd om communicatie mogelijk te maken tussen zijn programmeerbare logische controller (PLC) en veldapparatuur. Modbus werd in 2002 een open en royaltyvrije standaard en is vandaag de dag het meest gebruikte protocol in de industrie, dat wereldwijd op honderden miljoenen apparaten wordt gebruikt.

De populariteit ervan berust op drie fundamentele eigenschappen: eenvoud (gemakkelijk te implementeren, goed gedocumenteerd), robuustheid (werkt ook bij verbindingen van slechte kwaliteit) en interoperabiliteit (open standaard, ondersteund door vrijwel alle industriële apparatuur — PLC's, frequentieregelaars, energiemeters, sensoren, regelaars).

Ondanks zijn leeftijd blijft Modbus onmisbaar, met name in bestaande installaties (brownfield) en voor goedkope apparatuur. Het grootste nadeel is het ontbreken van ingebouwde beveiliging (geen authenticatie, geen versleuteling), waardoor het achter een VPN moet worden beschermd wanneer het via een niet-beheerd netwerk wordt verzonden.

Modbus RTU versus Modbus TCP

Er zijn twee belangrijke varianten van het Modbus-protocol:

Modbus RTU (serieel)

  • Fysieke laag: RS-232 (punt-tot-punt) of RS-485 (multi-drop-bus met maximaal 32 apparaten, maximale afstand 1 200 m bij 9 600 baud).
  • Overdracht: binair, compact. Elk bericht bevat het adres van de slave, de functiecode, de gegevens en een CRC-16-integriteitscontrole.
  • Topologie: master-slave (één master, maximaal 247 slave-apparaten, adresseerbaar van 1 tot 247).
  • Toepassingen: energiemeters, frequentieregelaars, industriële sensoren met RS-485-uitgang, oudere PLC’s.

Modbus TCP (Ethernet)

  • Fysieke laag: Ethernet (10/100/1000 Mbps), IP-protocol, TCP-poort 502.
  • Inkapseling: het Modbus RTU-frame wordt ingekapseld in een MBAP-header (Modbus Application Protocol) van 7 bytes die de CRC vervangt (Ethernet zorgt zelf voor de integriteit).
  • Topologie: client-server (de client, voorheen ‘master’, vraagt informatie op bij de server, voorheen ‘slave’). Meerdere clients kunnen tegelijkertijd informatie opvragen bij dezelfde server.
  • Toepassing: PLC’s met Ethernet-poort (Siemens S7, Schneider M340/M580, Allen-Bradley), HMI/SCADA, cloud-gateways.
CriteriumModbus RTUModbus TCP
Fysieke laagRS-232 / RS-485Ethernet / TCP-IP
Typische snelheid9.600 tot 115.200 baud10/100 Mbps
AfstandTot 1.200 m (RS-485)Standaard Ethernet-netwerk
Aantal slaves1 tot 247Onbeperkt (IP-adressering)
IntegriteitscontroleCRC-16TCP-checksum
Ingebouwde beveiligingGeenGeen (gebruik VPN)

Opbouw van een Modbus-bericht

Modbus RTU — Frame

| Slave-adres (1 byte) | Functiecode (1 byte) | Gegevens (N bytes) | CRC-16 (2 bytes) |

Voorbeeld van een FC03-opdracht waarmee 2 registers vanaf adres 0x0000 op slave 1 worden uitgelezen:

01 03 00 00 00 02 C4 0B

Modbus TCP — Frame (met MBAP-header)

| Transactie-ID (2 bytes) | Protocol-ID (2 bytes, = 0x0000) | Lengte (2 bytes) | Eenheid-ID (1 byte) | Functiecode | Gegevens |

Modbus-registers

Modbus verdeelt de gegevens over vier soorten registers, die worden aangeduid met hun referentieadres:

TypeAdresToegangBeschrijving
Coils (spoelen)0x0001–0xFFFF (basis 1)Lezen / SchrijvenDigitale digitaal-analoge uitgangen (bit) — status van een klep, een relais
Discrete Inputs0x1001–0xFFFFAlleen lezenDigitale digitaal-of-digitaal-ingangen (bit) — status van een digitaal-of-digitaal-sensor
Holding Registers0x4001–0xFFFFLezen / Schrijven16-bits registers voor lezen/schrijven — setpoints, parameters, meetwaarden
Input Registers0x3001–0xFFFFAlleen-lezen16-bits registers (alleen-lezen) — sensormetingen, proceswaarden

Opmerking: de daadwerkelijke adressering in de frames begint bij 0 (een offset van -1 ten opzichte van de gedocumenteerde referenties). Het Holding Register met referentie 40001 wordt dus in het frame geadresseerd als 0x0000.

Veelgebruikte functiecodes (Function Codes)

CodeHexNaamBeschrijving
FC010x01Read CoilsDe status van N spoelen (digitale uitgangen) lezen
FC020x02Read Discrete InputsDe status van N digitale ingangen lezen
FC030x03Read Holding RegistersN 16-bits registers lezen en schrijven — meest gebruikt
FC040x04Read Input RegistersN 16-bits registers lezen (alleen-lezen)
FC050x05Write Single CoilEén digitale uitgang schrijven (0x0000 = UIT, 0xFF00 = AAN)
FC060x06Write Single RegisterEén enkel 16-bits holdingregister schrijven
FC160x10Write Multiple RegistersMeerdere opeenvolgende registers in één transactie schrijven

FC03 is veruit de meest gebruikte code voor monitoring: hiermee kunnen de meetwaarden, statussen en tellerstanden van een apparaat worden uitgelezen.

Slave-adressering (Unit ID)

In Modbus RTU heeft elk apparaat op de RS-485-bus een uniek adres tussen 1 en 247. Adres 0 is gereserveerd voor broadcast — alleen schrijfopdrachten kunnen via broadcast worden verzonden.

In Modbus TCP wordt het veld Unit ID (voorheen Slave ID genoemd) in de MBAP-header bewaard. Dit veld is doorgaans ingesteld op 1 of 255 voor PLC's met één entiteit, maar kan worden gebruikt om verschillende RS-485-bussen achter één en dezelfde Modbus TCP/RTU-gateway te adresseren.

Modbus-configuratie op de Eziwan-gateway

De Eziwan-gateway ondersteunt standaard Modbus RTU (via RS-485) en Modbus TCP (via Ethernet). De configuratie gebeurt via de webinterface van de gateway:

  1. Het protocol selecteren: kies "Modbus RTU" of "Modbus TCP" in het menu "Gegevensbron".
  2. Seriële instellingen (alleen RTU): baudrate (9.600, 19.200, 38.400, 57.600 of 115.200), pariteit (Geen/Even/Oneven), stopbits (1 of 2).
  3. Slave-adres: voer het adres van het apparaat in (1 tot 247).
  4. Gegevenspunten definiëren: geef voor elke uit te lezen waarde de functiecode (FC01 tot FC04), het registeradres en het gegevenstype (INT16, UINT16, INT32, FLOAT32, BOOL) op.
  5. Verzamelinterval: pollingfrequentie (van 1 seconde tot meerdere minuten, afhankelijk van de behoefte).
  6. De verbinding testen: gebruik de functie „Leestest“ om te controleren of de gegevens correct worden gelezen voordat u de gegevensoverdracht naar de cloud activeert.

Gerelateerde bronnen

Veelgestelde vragen

Wat is het verschil tussen Modbus RTU en Modbus TCP?

Modbus RTU wordt verzonden via een seriële RS-485-verbinding (multi-slave-bus, tot 1 200 m); Modbus TCP verpakt dezelfde verzoeken in een Ethernet/IP-frame op poort 502. Een gateway vormt de brug tussen beide systemen.

Wat is een Modbus-register?

Een 16-bits geheugencel die door een adres wordt aangeduid. De holdingregisters (FC03/FC06/FC16) bevatten de proceswaarden; de 32-bits grootheden (drijvende-kommagetallen, tellers) nemen twee opeenvolgende registers in beslag.

Is Modbus veilig?

Nee: het protocol biedt geen authenticatie of versleuteling. Het mag nooit op het internet worden blootgesteld — de regel is om het binnen het lokale netwerk te houden en de gegevens via een versleutelde VPN-tunnel naar de cloud te verzenden.

Hoeveel apparaten kunnen er op een Modbus RTU-bus worden aangesloten?

Maximaal 32 slaves zonder repeater (247 mogelijke logische adressen). Bij meer dan dat, of om verschillende pollingfrequenties te combineren, wordt het systeem opgesplitst in meerdere bussen via afzonderlijke RS-485-poorten.

Gerelateerde bronnen