ESP32 - Modbus

Deze tutorial legt uit hoe u de ESP32 gebruikt met het Modbus-protocol.

Over Modbus

Modbus is een protocol dat communicatie mogelijk maakt tussen apparaat en apparaat, apparaat en software/applicatie, en apparaten en HMI (Human Machine Interface). Het wordt veel gebruikt in industriële apparaten.

We kunnen Modbus zien als een communicatietaal tussen apparaten, software/apps en HMI.

Er zijn drie veelgebruikte Modbus-typen: Modbus RTU, Modbus ASCII en Modbus TCP:

  • Modbus RTU en Modbus ASCII worden gebruikt via een seriële lijn (RS-232/RS-422/RS-485)
  • Modbus TCP wordt gebruikt via Ethernet of WiFi

Waarom Modbus gebruiken?

Laten we een specifiek voorbeeld nemen:

  • Een ESP32 #1 verbonden met een schakelaar
  • Een ESP32 #2 verbonden met een LED
  • ESP32 #1 en ESP32 #2 bevinden zich ver van elkaar
  • Wanneer de schakelaar op ON wordt gezet, gaat de LED aan.
  • Wanneer de schakelaar op OFF wordt gezet, gaat de LED uit.
button control led via Modbus

De makkelijkste manier om het bovenstaande voorbeeld te realiseren is door zelf een eenvoudig protocol te definiëren:

  • ESP32 #1 verstuurt één byte data om aan ESP32 #2 te melden dat de status van de schakelaar veranderd is. De waarde van deze databyt is:
    • 1: Wanneer de schakelaar op ON staat
    • 0: Wanneer de schakelaar op OFF staat
  • Wanneer ESP32 #2 een byte data ontvangt van ESP32 #1, doet het volgende:
    • 1: Zet de LED aan
    • 0: Zet de LED uit

    Door bovenstaande definitie kan de schakelaar op ESP32 #1 de LED op ESP32 #2 aansturen. Echter, stel u de volgende situaties voor:

    • ESP32 #1 wil een bevestiging dat het commando correct is ontvangen en uitgevoerd door ESP32 #2
    • ESP32 #1 wil meerdere LEDs op ESP32 #2 aansturen
    • ESP32 #2 wil actief de status van schakelaars op ESP32 #1 uitlezen
    • ESP32 #2 wil een schakelaar gebruiken om een LED op ESP32 #1 te besturen
    • En nog veel meer situaties.

    Het is niet eenvoudig om al deze gevallen zelf te ondersteunen.

    Een ander probleem bij het gebruik van een zelfgemaakt protocol is dat de ESP32 niet met andere apparaten kan communiceren die een ander protocol gebruiken.

    ⇒ We hebben een standaardprotocol nodig dat al deze problemen oplost ⇒ het Modbus-protocol is zo’n standaardprotocol dat we kunnen gebruiken.

    De voordelen van het Modbus-protocol ten opzichte van een zelfgemaakt protocol zijn:

    • We hoeven de commando’s niet zelf te definiëren, Modbus definieert ze voor alle gebruikssituaties.
    • De ESP32 kan met ieder apparaat/software werken die Modbus gebruiken.

Wanneer wel en niet Modbus gebruiken

Omdat het Modbus-protocol niet eenvoudig te begrijpen en toe te passen is, zelfs al is er een Modbus-bibliotheek beschikbaar, kunt u een eenvoudig zelfgemaakt protocol gebruiken zoals hierboven beschreven als:

  • Het systeem eenvoudig is, bijvoorbeeld een schakelaar op ESP32 #1 bestuurt een LED op ESP32 #2
  • De ESP32 geen verbinding hoeft te maken met andere apparaten/software

We raden Modbus aan wanneer:

  • Het systeem complex is
  • Het systeem hoge betrouwbaarheid vereist
  • De ESP32 met andere apparaten/software moet samenwerken

Hoe werkt het Modbus-protocol

Concepten

Er zijn zes belangrijke concepten in Modbus:

  • Master en Slave
  • Request en Response
  • Function Code (FC) en Address

Wanneer twee ESP32's met elkaar communiceren via Modbus:

  • Werkt één ESP32 als Master
  • Werkt de andere ESP32 als Slave

De Master stuurt een request naar de Slave, en de Slave stuurt een response terug naar de Master.

modbus Master Slave

Een request van een Master naar een Slave bevat de volgende informatie:

  • Function Code (FC): 1 byte, is de opdracht die de Slave vertelt wat te doen. Bijvoorbeeld het uitlezen van de status van een digitale ingangspin, digitale uitgangspin of analoge ingangspin, of het aansturen van een digitale uitgangspin.
  • Address: 2 bytes, is het adres dat de Slave vertelt waar deze actie moet worden uitgevoerd. Bijvoorbeeld elke digitale in-/uitgangspin en analoge ingangspin heeft een uniek adres.
  • Data (bijv. stuursignalen)

Bij ontvangst van een request van een Master voert de Slave de bijbehorende actie uit en stuurt het resultaat terug in een response.

Function Code

De Modbus-standaard definieert veel Function Codes. Om het voor beginners overzichtelijk te houden, behandelen we enkele essentiële Function Codes:

  • FC 01 (Read Coils): leest de status van digitale outputpinnen
  • FC 02 (Read Discrete Inputs): leest de status van digitale inputpinnen
  • FC 05 (Write Single Coil): bestuurt (schrijft naar) de status van digitale outputpinnen

FC 01 betekent dat de Function Code de waarde 0x01 heeft.

Bij gebruik van de ESP32 Modbus-bibliotheek moet u bepalen:

  • Welke Function Code u gaat gebruiken
  • Welk adres u gaat gebruiken

Laten we het voorbeeld van het begin realiseren:

  • ESP32 Master is aangesloten op LED #M en SWITCH #M
  • ESP32 Slave is aangesloten op LED #S en SWITCH #S
  • Laten we SWITCH #M de LED #S laten bedienen, en SWITCH #S de LED #M laten bedienen
ESP32 modbus led switch

Hoe werkt het:

  • ESP32 Master leest de status van SWITCH #M → stuurt een request naar Slave om LED #S te bedienen ⇒ Slave bestuurt LED #S en stuurt een response terug
  • ESP32 Master stuurt een request naar Slave om de status van SWITCH #S uit te lezen ⇒ Slave reageert met de status van SWITCH #S → Master bestuurt LED #M

Modbus RTU/ASCII en Modbus TCP

Zoals eerder genoemd, zijn er drie veelgebruikte Modbus-types: Modbus RTU, Modbus ASCII en Modbus TCP.

  • Systeemdiagram
modbus tcp vs modbus rtu/ascii
  • Protocolstack
modbus tcp vs modbus rtu/ascii

Er is een Modbus-bibliotheek beschikbaar voor de ESP32. De gedetailleerde instructies voor het gebruik van deze Modbus-bibliotheek worden in een andere tutorial behandeld. Volg onze Facebookpagina voor updates.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!