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 TCP in je netwerk: IP, VLAN, firewall
Modbus TCP en firewall poort 502: wat je netwerk moet toestaan, waarom een VLAN verstandig is en hoeveel gelijktijdige verbindingen een apparaat aankan.
Wat deze les behandelt
- Drie tests die laten zien op welke laag de verbinding sneuvelt
- Poort 502, de richting, en waarom uitgaand meestal genoeg is
- Hoeveel verbindingen een apparaat aankan, en het eigen VLAN
Lees eerst: Poort 502, de MBAP header en de unit id
Op Modbus TCP is je installatie pas klaar als het netwerk meewerkt, en daar komen de meeste storingen vandaan: een firewall die poort 502 stil laat vallen, een apparaat in het verkeerde subnet, of een omvormer die maar een verbinding tegelijk aankan. Na deze les sluit je die lagen een voor een uit voordat je aan de Modbus-instellingen begint, en weet je wat je netwerk moet toestaan.
Kan je client het apparaat uberhaupt bereiken?
Dat test je met drie commando's die elk precies een laag afstrepen, en pas het derde raakt Modbus. Neem een omvormer op 192.168.1.50:
ping 192.168.1.50
nc -vz 192.168.1.50 502
mbpoll -m tcp -a 1 -t 4 -r 1 -c 2 -1 192.168.1.50
Op Windows PowerShell vervang je de tweede regel door Test-NetConnection 192.168.1.50 -Port 502. Wat elke test je oplevert:
| Test | Wat slagen bewijst | Wat falen betekent |
|---|---|---|
ping | IP-adres, subnetmasker, VLAN en kabel kloppen | zoek in het netwerk, Modbus komt nog niet in beeld |
nc -vz | er luistert iets op poort 502 | firewall, afwijkende poort, of de Modbus-server staat uit |
mbpoll | het apparaat antwoordt echt op Modbus | unit id, registeradres of function code |
De regel eronder is simpel: elke geslaagde test haalt een hele laag van je verdachtenlijst af, en dat kost je twee commando's in plaats van een middag. Hoe je die lagen bij een gateway inregelt staat in de handleiding voor het installeren van een Modbus TCP gateway; het transport zelf staat als naslag in de uitleg over Modbus TCP. Wat er in het frame gebeurt, behandelt de les over de MBAP header en de unit id.
Welke poort, en in welke richting
Poort 502 is de bij IANA geregistreerde Modbus TCP-poort, en de standaard verplicht een apparaat daar standaard op te luisteren. Sterker nog: ook als er een tweede poort geconfigureerd is, moet 502 daarnaast beschikbaar blijven. Fabrikanten houden zich daar niet altijd aan, en dat is precies waarom een poorttest sneller antwoord geeft dan de datasheet.
De richting is de tweede helft van het verhaal. De client kiest zelf een bronpoort boven 1024 en verbindt naar poort 502 op het apparaat. Zet een gateway de verbinding naar een cloudplatform op, dan is die gateway de initiatiefnemer en is een uitgaande regel genoeg, want een stateful firewall laat het antwoord op een bestaande sessie automatisch door. Wil een laptop uit een ander VLAN bij het apparaat, dan is dat een nieuwe inkomende sessie en moet die expliciet toegestaan worden.
Vast IP-adres of DHCP?
Een Modbus-client kent geen namen: je typt een IP-adres in en dat adres moet er morgen nog zijn. Een DHCP-lease die verloopt is daarmee een storingsmelding met vertraging. Een DHCP-reservering is de praktische middenweg: het apparaat blijft in het beheer van je DHCP-server, maar krijgt altijd hetzelfde adres. Een vast adres buiten de DHCP-pool werkt ook, mits je het documenteert.
Het subnet is geen vrije keuze. Een NIBE S-serie accepteert alleen verbindingen uit 10.0.0.0/8, 172.16.0.0/12 en 192.168.0.0/16, en weigert dus alles wat daarbuiten valt, ook via een VPN met carrier-grade NAT. Die eis staat in de handleiding, niet in het protocol.
Hoeveel verbindingen kan het apparaat aan?
Minder dan je denkt, en het staat in de datasheet. De standaard laat het aantal expliciet vrij, dus elke fabrikant zet zijn eigen grens in de firmware:
| Apparaat | Max. gelijktijdige Modbus TCP-verbindingen |
|---|---|
| SolarEdge omvormer | 1 |
| Schneider ION 8600 en ION 8800 | 4 |
| Schneider ION 8650 en ION9000 | 8 |
| Schneider ION 7550, ION 7650 en PM8000 | 32 |
Wat de standaard wel voorschrijft, is het gedrag bij een volle pool: de oudste ongebruikte verbinding wordt gesloten. Hoe dat bij een enkele-verbindingsomvormer uitpakt, staat uitgewerkt in het artikel over het uitlezen van een SolarEdge. Je gebouwbeheersysteem, je energiemonitoring, je domoticaserver en je laptop met een testtool zijn samen al vier clients. Vuistregel: vaak 4 tot 8, soms 32, soms maar 1, dus kijk het op.
Wat er gebeurt als je te vaak of te snel vraagt
Dan krijg je exception 06 terug, of helemaal geen verbinding meer. Exception 06 (Server Busy) stuurt een server als zijn transactiepool vol zit; die pool telt volgens de standaard 1 tot 16 gelijktijdig openstaande verzoeken, afhankelijk van het apparaat.
Daarnaast leggen fabrikanten hun eigen tempo op. SMA schrijft minstens 10 seconden tussen twee datatransfers voor en maximaal 5 parameters tegelijk per omvormer. De NIBE S-serie staat 100 registers per seconde toe en 20 registers per query. Wil je 60 registers uit zo'n warmtepomp lezen, dan is elke 2 seconden pollen 30 registers per seconde: ruim binnen de limiet, met ruimte voor een retry.
Die 60 registers zijn door de querylimiet trouwens drie verzoeken en geen enkele. Boven een fabrikantlimiet pollen geeft geen nette foutmelding maar wisselvallige antwoorden, en dat lijkt sprekend op een netwerkprobleem. Reken je pollinterval uit voordat je in de switch gaat kijken. De les over pollen en busbelasting rekent dat helemaal voor.
Waarom veldapparatuur in een eigen VLAN hoort
Omdat kaal Modbus TCP geen authenticatie en geen encryptie kent: wie bij het netwerksegment kan, kan lezen en schrijven. De beveiliging zit dus in de zone-indeling eromheen, niet in het protocol.
Een tweede reden is praktisch: veldapparatuur draait op een kleine netwerkstack en heeft geen boodschap aan broadcast- en discoveryverkeer van kantoorapparatuur. Een apart VLAN houdt dat weg. NIBE is er in de eigen documentatie duidelijk over dat Modbus TCP over het open internet sterk wordt afgeraden. Hoe je zo'n zone verder dichtzet, met poort 802 en TLS, staat in de les over Modbus beveiligen.
De verbinding openhouden of steeds opnieuw opbouwen?
Openhouden. De standaard is expliciet: de verbinding blijft open zolang je communiceert, en de client sluit hem, niet de server. Een nieuwe TCP-verbinding per poll kost tijd en vult de socketteller van het apparaat.
Twee dingen zitten dat in de weg. Idle timeouts: de TCP-server van een SolarEdge sluit de sessie na twee minuten zonder verzoek, dus wie elke vijf minuten pollt bouwt elke keer opnieuw op. En half-open verbindingen: herstart je client, dan probeert die vaak dezelfde bronpoort, en dan loopt de nieuwe verbinding tot 75 seconden aan te kijken tegen de connection-establishment timeout van de TCP-stack. Een andere bronpoort na een herstart lost dat op.
Veelgemaakte fouten
Bij de Modbus-instellingen beginnen terwijl de ping al faalt. Je verandert unit id's en registeradressen terwijl het apparaat niet eens op IP-niveau bereikbaar is. Begin bij de ping en de poorttest, dan weet je binnen twee commando's of het aan het netwerk ligt.
Vergeten dat de Modbus-server op het apparaat aan moet. Bij veel omvormers en meters staat Modbus TCP standaard uit, ook bij SolarEdge. Je krijgt dan connection refused op een adres dat prima pingt. Zet hem aan in het menu, in de app of met een DIP-schakelaar, en controleer meteen op welke poort hij daarna luistert.
Meerdere systemen tegelijk op hetzelfde apparaat laten pollen. Bij een apparaat dat maar een verbinding aankan, verdringen een monitoringplatform en een laptop elkaar om de beurt. Het symptoom is een verbinding die willekeurig wegvalt, zonder foutmelding. Inventariseer wie er allemaal pollt, ook de integrator van vorig jaar.
Sneller pollen dan de fabrikant toestaat. SMA vraagt minstens 10 seconden tussen datatransfers, de NIBE S-serie maximaal 100 registers per seconde. Wie daaroverheen gaat krijgt wisselvallige antwoorden en gaat vervolgens in het netwerk zoeken.
Aan de slag
Je sluit laag voor laag uit en noteert daarna wat je gevonden hebt. Vervang 192.168.1.50 door het adres van je eigen apparaat.
- 1
Ping het apparaat
Draai
ping 192.168.1.50. Geen antwoord betekent IP-adres, subnetmasker, VLAN of kabel. Modbus komt nog niet in beeld. - 2
Test de poort
Draai
nc -vz 192.168.1.50 502op Linux of macOS, ofTest-NetConnection 192.168.1.50 -Port 502in PowerShell. Werkt dat niet terwijl de ping wel lukt, probeer dan ook 1502. - 3
Zet de Modbus-server aan
Lukt de poorttest nog steeds niet, kijk dan in het apparaat zelf. Bij veel omvormers en meters is Modbus TCP een instelling of een schakelaar die je eerst moet omzetten.
- 4
Lees pas nu een register
Draai
mbpoll -m tcp -a 1 -t 4 -r 1 -c 2 -1 192.168.1.50. Mbpoll is gratis te gebruiken, ook zakelijk. Krijg je hier een fout, dan zit het in unit id, adres of function code, niet in het netwerk. - 5
Open een tweede sessie
Start hetzelfde commando nog een keer in een tweede terminal, terwijl de eerste loopt. Zo meet je zelf of het apparaat twee clients accepteert of er een uit gooit.
- 6
Noteer wat je gevonden hebt
Zet IP-adres, poort, unit id, het pollinterval en het aantal toegestane verbindingen in je projectdossier. De volgende monteur hoeft dan niet opnieuw te testen.
Zonder hardware. Draai de pymodbus-simulator (gratis te gebruiken, ook zakelijk) op 127.0.0.1:5020 en doe stap 1, 2, 4 en 5 daartegen, met 5020 in plaats van 502. De simulator accepteert meerdere verbindingen, dus stap 5 laat vooral zien hoe je de test doet. Echte apparaten hebben juist wel een limiet.
Je bent klaar als je drie geslaagde tests op drie lagen hebt en een genoteerd maximum aan verbindingen.
Samenvatting
- Test in de volgorde ping, poort, Modbus: elke geslaagde test streept een hele laag weg en dat scheelt uren zoeken.
- Poort 502 is de geregistreerde Modbus TCP-poort en moet volgens de standaard altijd beschikbaar blijven, maar een SolarEdge met SetApp luistert standaard op 1502.
- Een uitgaande firewallregel volstaat als de gateway zelf de verbinding opzet; een client die van buiten binnenkomt heeft een expliciete inkomende regel nodig.
- Het aantal gelijktijdige verbindingen verschilt per apparaat, van 1 bij SolarEdge tot 32 bij een Schneider PM8000, en bij een volle pool sluit de server de oudste ongebruikte verbinding zonder melding.
- Houd de TCP-verbinding open en laat de client hem sluiten, maar reken op idle timeouts zoals de twee minuten van SolarEdge.
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.