Bekijk alle lessen
Deel 1
Basis
Deel 2
Modbus RTU
- Les 5RS485 uitgelegd: A, B, common en terminatie20 min
- Les 6Baudrate en pariteit: waarom 8E1 de default is16 min
- Les 7Het Modbus RTU frame byte voor byte, plus CRC18 min
- Les 8Meerdere Modbus apparaten op een bus zetten16 min
- Les 9Je eerste Modbus apparaat uitlezen met mbpoll22 min
- Les 10Modbus RTU storing zoeken: symptoom en oorzaak20 min
Deel 3
Modbus TCP
Deel 4
Gevorderd
- Les 16Veilig naar een Modbus apparaat schrijven18 min
- Les 17Word order en float: dezelfde bytes, andere waarde22 min
- Les 18Pollinterval en busbelasting zelf berekenen18 min
- Les 19Modbus beveiligen: het protocol doet het niet16 min
- Les 20Modbus integreren: PLC, Home Assistant of cloud20 min
- Les 21Modbus checklist voor oplevering en overdracht18 min
Modbus leren: waarom dit protocol blijft werken
Modbus leren begint hier. Je ziet wie vraagt en wie antwoordt, waarom een protocol uit 1979 nog overal draait en hoe deze cursus van 21 lessen is opgebouwd.
Wat deze les behandelt
- Wie de vraag stelt en wie antwoordt in jouw installatie
- Waarom register 40001 bij twee merken iets anders betekent
- De woorden die de rest van de cursus gebruikt: client, server, PDU, register, function code
Modbus is een vraag-antwoordprotocol: een apparaat stelt een vraag, een ander stuurt een getal terug, en nergens in het bericht staat wat dat getal betekent. Precies die soberheid verklaart allebei de kanten van Modbus: waarom het al sinds 1979 draait op plekken waar nieuwere protocollen sneuvelen, en waarom je er soms onzin uit leest. Na deze les weet je wie in jouw installatie de vraag stelt, wie antwoordt, en wat je zelf nog moet opzoeken.
Wat gebeurt er als een gateway een meter uitleest?
Er gaat een korte vraag over de lijn en er komt een kort antwoord terug, en daar houdt het op. Een gateway wil drie waarden van een kWh-meter op serveradres 1, dus de vraag bevat vier dingen:
| Wat de gateway invult | Waarde hier |
|---|---|
| Welk apparaat op de bus | serveradres 1 |
| Wat voor toegang | FC03, holding registers lezen |
| Vanaf welk adres | PDU-adres 107, in de datasheet 40108 |
| Hoeveel registers | 3 |
De meter antwoordt met dezelfde function code, een byte count en drie getallen van 16 bits. Dat is 8 bytes heen en 11 bytes terug:
Vraag: 01 03 00 6B 00 03 74 17
Antwoord: 01 03 06 02 2B 00 00 00 64 05 7A
Die bytes hoef je nu nog niet te kunnen ontleden, dat doet de les over het Modbus RTU-frame en de CRC. Waar het om gaat is wat er terugkomt: 555, 0 en 100, zonder eenheid, zonder komma en zonder naam. Pas de registerkaart van dit apparaat maakt er iets van:
| Register | Ruwe waarde | Wat de registerkaart van dit apparaat zegt |
|---|---|---|
| PDU-adres 107 | 555 | stroom L1, stap 0,1 A, dus 55,5 A |
| PDU-adres 108 | 0 | geen storing actief |
| PDU-adres 109 | 100 | powerfactor, stap 0,01, dus 1,00 |
Modbus is een applicatielaagprotocol op niveau 7 van het OSI-model, en deze uitwisseling is alles wat het doet. Wil je eerst de volledige naslag over het protocol, lees dan het overzichtsartikel wat Modbus is en waar je het tegenkomt.
Waarom een protocol uit 1979 nog overal draait
Omdat het klein genoeg is om overal in te passen en open genoeg om na te bouwen. Modicon, tegenwoordig Schneider Electric, bracht Modbus in 1979 op de markt en droeg het in april 2004 over aan de Modbus Organization, een stap die de organisatie zelf omschrijft als een keuze voor openheid. De specificatie van het applicatieprotocol staat sindsdien openbaar, op dit moment als versie V1.1b3 van 26 april 2012.
Die soberheid zit in de getallen. Een Modbus-PDU is nooit langer dan 253 bytes, een limiet die het protocol overhield aan zijn eerste seriële implementatie, en het leesverzoek hierboven past op RS485 in acht bytes inclusief de foutcontrole. Een apparaat dat niet meer dan dat hoeft te verwerken heeft geen zware processor nodig en geen onderhandeling bij het opzetten van een verbinding. Daarom kom je het nog tegen op vrijwel elke omvormer, kWh-meter en warmtepompregelaar.
Wie vraagt, wie antwoordt, en hoe je ze herkent
Het apparaat dat het gesprek begint is de client, alles wat wacht is een server. In de praktijk is de client je gateway, PLC, SCADA-systeem, energiemanagementsysteem of een Home Assistant die Modbus praat. De servers zijn de meters, omvormers, sensoren, drives en I/O-modules. Herkennen doe je ze aan het gedrag: wie uit zichzelf begint te praten is de client, en op een bus hoort er precies één van te zijn.
Je komt dezelfde twee rollen in datasheets en configuratieschermen nog overal tegen als master en slave. De specificatie voor de seriële lijn koppelt ze letterlijk aan elkaar: op een seriële Modbus-lijn vervult de master van de bus de clientrol en gedragen de slaves zich als servers. De Modbus Organization verving die woorden op 9 juli 2020 door client en server, maar veldnamen veranderen niet mee. Een scherm met "Modbus master" en "slave ID" gaat dus over precies wat deze cursus client en serveradres noemt.
Wat een register is, en vooral wat het niet is
Een register is 16 bits. Geen eenheid, geen datatype, geen schaalfactor, geen naam. In het antwoord hierboven is 555 gewoon 555. Of dat 55,5 A, 555 W of de helft van een serienummer is, heeft de fabrikant in een datasheet opgeschreven.
De standaard kent vier datablokken, staat er tot 65536 items per blok in toe, legt vast hoe je die adresseert en of je ze mag schrijven, en houdt daar op. De specificatie zegt met zoveel woorden dat de koppeling tussen het Modbus-datamodel en de toepassing in het apparaat volledig fabrikantspecifiek is. Eén registernummer mag dus bij drie merken drie dingen betekenen.
Daarom bestaat er geen tool die automatisch ontdekt wat een apparaat te bieden heeft, en is de registerkaart van de fabrikant geen papierwerk maar het halve werk. Hoe zo'n kaart is opgebouwd staat in het artikel over Modbus-registers en hun adresbereiken, en de les over een registerkaart lezen maakt er routine van.
RTU en TCP: dezelfde vraag, een andere envelop
De vraag in het midden is identiek, alleen de verpakking verschilt. Dat middenstuk is de PDU (protocol data unit): de function code plus de data, samen maximaal 253 bytes. Modbus RTU zet er een adresbyte voor en twee CRC-bytes achter en komt zo op maximaal 256 bytes per bericht. Modbus TCP verpakt diezelfde PDU in een MBAP-header van 7 bytes, laat de CRC helemaal weg omdat Ethernet en TCP die controle al doen, en komt op maximaal 260 bytes, standaard op poort 502.
Hetzelfde leesverzoek ziet er daardoor zo uit: 01 03 00 6B 00 03 74 17 op RS485, acht bytes, en 00 01 00 00 00 06 FF 03 00 6B 00 03 op TCP, twaalf bytes. In allebei zit dezelfde PDU 03 00 6B 00 03.
Dat is het hele verschil op protocolniveau. Hoofdstuk 2 behandelt RTU, hoofdstuk 3 behandelt TCP, en het artikel over Modbus RTU en Modbus TCP naast elkaar weegt ze tegen elkaar af.
De twaalf woorden die je de rest van de cursus nodig hebt
Deze twaalf termen komen in elke volgende les terug, en ze staan precies zo in de datasheets.
| Term | Wat het is | Voorbeeld |
|---|---|---|
| client | stelt de vraag, neemt het initiatief | gateway, PLC, Home Assistant |
| server | antwoordt op zijn eigen adres | meter, omvormer, I/O-module |
| coil | bit dat je mag lezen en schrijven | een relaisuitgang |
| discrete input | bit dat je alleen mag lezen | een alarmcontact |
| input register | 16 bits, alleen lezen | een meetwaarde |
| holding register | 16 bits, lezen en schrijven | een instelling of een meetwaarde |
| PDU | function code plus data, maximaal 253 bytes | 03 00 6B 00 03 |
| ADU | de PDU plus de envelop van het transport | 256 bytes op RTU, 260 op TCP |
| serveradres | het adresbyte op RS485, 1 tot 247, 0 is broadcast | het veld slave ID |
| unit id | datzelfde byte in Modbus TCP, 0xFF op een native TCP-apparaat | naast het IP-adres |
| function code | wat je wilt doen | FC03 leest holding registers |
| exception | het foutantwoord van de server | 83 02, adres bestaat niet |
Twee van deze twaalf misleiden: serveradres en unit id lijken uitwisselbaar en zijn dat niet, en het datasheetnummer scheelt één van het adres dat over de lijn gaat. Dat is precies het onderwerp van de volgende les, over Modbus adressering van 40001 naar de draad.
Hoe je deze cursus gebruikt
De cursus telt 21 lessen in vier hoofdstukken: basis, Modbus RTU, Modbus TCP en gevorderde onderwerpen. Werk ze op volgorde door als je bij nul begint, of spring naar de les die past bij het probleem op je bureau. Elke les herhaalt in twee zinnen wat hij uit eerdere lessen nodig heeft, dus geen enkele deur zit op slot. Onder elke les staat een quiz van vier vragen waarmee je zelf toetst of het blijft hangen.
Veelgemaakte fouten
Een waarde lezen alsof er een eenheid bij zat. Je leest 555 uit een register en noteert 555 A. Het bericht bevatte een getal van 16 bits en verder niets. De stapgrootte, de komma en de eenheid staan in de datasheet. Een waarde die je niet kunt terugvoeren op een regel in een datasheet heb je dus nog niet gelezen.
Aannemen dat "het apparaat heeft Modbus" genoeg is. Modbus RTU en Modbus TCP zijn twee verschillende fysieke werelden. Een apparaat met alleen RS485-klemmen zet je niet met een patchkabel op je netwerk, en een apparaat met alleen een RJ45-poort hang je niet aan een bestaande bus. Vraag door welk van de twee erin zit voordat je iets bestelt.
Master en slave als iets anders zien dan client en server. Het zijn dezelfde rollen met oudere namen, op 9 juli 2020 vervangen door de Modbus Organization. Configuratieschermen zeggen nog steeds "Modbus master" en "slave ID", en wie daar een derde begrip in ziet, zet uiteindelijk twee clients op één bus.
Aan de slag
Geen installatie deze keer. Je maakt de inventarisatie die een monteur op dag een van een project maakt, en die werkt net zo goed aan een bureau.
- 1
Kies een apparaat waar je echt mee te maken hebt
Een kWh-meter, een omvormer, een warmtepomp of een laadpaal. Iets dat je hebt geïnstalleerd of gaat installeren.
- 2
Zoek de Modbus-documentatie bij de fabrikant
Zoek een registerkaart, een Modbus-protocolhandleiding of een communicatiebijlage, niet een forumbericht. Noteer de documentversie, want registerkaarten wijzigen tussen firmwaregeneraties.
- 3
Beantwoord vijf vragen op papier
Praat het apparaat RTU of TCP? Wat is het fabrieksadres? Welke baudrate staat er af fabriek? In welke notatie staan de registers, 40001-stijl of vanaf 0? En staat er ergens iets over byte- of woordvolgorde (word order)?
- 4
Vul deze kaart in voor jouw apparaat
Neem de vijf regels hieronder over en maak ze af. Elk hokje dat je niet kunt invullen is een vraag voor de leverancier, geen aanname voor later.
- 5
Noteer waar je gezocht hebt als een vraag openblijft
Schrijf het paginanummer of de zoekterm op. Dat is het echte resultaat van deze oefening: je weet nu precies wat je moet vragen.
Apparaat: ______________________ firmware/documentversie: __________
Transport: RTU over RS485 / Modbus TCP
Adres: serveradres ____ of unit id ____
Notatie: datasheetnummers vanaf 1 (40001-stijl) / adressen vanaf 0
Woordvolgorde: ____________________ (of: niet gedocumenteerd)
Zonder apparaat. Pak de openbare protocoldocumentatie van de Eastron SDM630 en beantwoord dezelfde vijf vragen. Ter controle: die meter praat Modbus RTU over RS485, het adresbereik loopt van 1 tot 247 met 1 als fabrieksinstelling, de meetwaarden staan in input registers die je met FC04 leest, en het document vermeldt dat het meest significante register vooropgaat.
Verwacht resultaat: vijf antwoorden op papier, plus het inzicht dat een datasheet ze bijna nooit alle vijf beantwoordt.
Samenvatting
- Modbus is een vraag-antwoordprotocol op OSI-niveau 7: de client vraagt, de server antwoordt op zijn eigen adres, en een server begint nooit uit zichzelf te praten.
- Een register is 16 bits zonder eenheid en zonder datatype, dus de betekenis komt uit de registerkaart van de fabrikant en niet uit het protocol.
- Client en server zijn sinds 9 juli 2020 de officiële namen voor de rollen die in datasheets nog master en slave heten.
- Modbus RTU en Modbus TCP versturen dezelfde PDU van maximaal 253 bytes en verschillen alleen in de envelop: 256 bytes met adresbyte en CRC, 260 bytes met een MBAP-header van 7 bytes.
- Voor je een apparaat uitleest wil je vijf dingen weten: transport, adres, baudrate, adresnotatie en woordvolgorde.
Controleer jezelf
Vier vragen over deze les. Je krijgt bij elk antwoord uitleg.
Vraag 1 van 4
Zelf zien hoe het werkt?
De ModbusCloud Gateway leest de apparaten uit deze cursus uit zonder dat je registers hoeft te programmeren.