Innholdsfortegnelse:

ESP32 Modbus Master TCP: 7 trinn
ESP32 Modbus Master TCP: 7 trinn

Video: ESP32 Modbus Master TCP: 7 trinn

Video: ESP32 Modbus Master TCP: 7 trinn
Video: How to Make PLC LCD HMI || FLProg 2024, November
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

I denne klassen vil du programmere ESP32 -prosessoren til å være Modbus TCP Master.

Vi vil bruke to enheter som inneholder denne prosessoren: Moduino ESP32 og Pycom. Begge enhetene kjører i MicroPytthon -miljø. Modbus -slaven vår vil være en PC -datamaskin med Modbus -simulatorprogramvare som kjører på den.

Du vil trenge:

  • Moduino ESP32 eller Moduino Pycom -enhet (sjekk dette nettstedet for å finne ut mer om Moduino ESP32 -enhet og dette for å sjekke Pycom -enheten)
  • PC med Linux operativsystem
  • RS-232/RS-485-port i datamaskinen eller USB til RS-232/RS-485-omformer

Trinn 1: Last ned og start Modbus TCP Slave Simulator

Last ned og start Modbus TCP Slave Simulator
Last ned og start Modbus TCP Slave Simulator

Last ned Modbus Slave -simulator fra https://www.modbusdriver.com/diagslave.html. Åpne deretter det nedlastede arkivet og pakk ut versjonen for Linux -operativsystemet.

Kjør programmet fra konsoll med -p argument:

./diagslave -p

er en port der Modbus Slave -serveren vil fungere. For Modbus -protokollen er den som standard 502, men du kan bruke en annen.

I Linux -porter under 1024 kan ikke brukes av programmer som kjøres fra vanlig bruker (ikke rotrettigheter).

Husk hvilken port du bruker. Denne verdien vil være nødvendig senere.

Trinn 2: Klargjør datamaskinen for å koble til enheten

Klargjør datamaskinen for å koble til enheten
Klargjør datamaskinen for å koble til enheten

Du trenger noen programmer for å koble til enheten og sende filer til den.

Installer Python -miljøet og pip (hvis du ikke har det):

apt-get install python3

apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py

Installer picocom:

apt-get installer picocom

Dette programmet er nødvendig for å koble til enheten og utføre kommandoer på den. Installer mpfshell:

pip installer mpfshell

Dette programmet lar deg sende filer til enheten.

Du kan også installere det fra skjemakilder. Se denne siden:

Trinn 3: Forbered enheten og koble til den

Forbered enheten og koble til den
Forbered enheten og koble til den
Forbered enheten og koble til den
Forbered enheten og koble til den
Forbered enheten og koble til den
Forbered enheten og koble til den

For å koble Moduino eller Pycom enhet til PC trenger du RS-232/RS-485 port eller omformer. Sjekk versjonen av enheten (hvilken porttype den bruker) og finn passende port eller omformer.

  1. Koble enheten til PC
  2. Koble deretter strømforsyningen til den

Koble enheten til PCen, og koble deretter strømforsyningen til den. Du kan også koble ethernetkabelen til Moduino ESP32 (hvis den har den porten).

Tilkoblingen skal være som på bildene ovenfor

Finn banen for port, som brukes for enhetstilkobling. Det kan for eksempel være: /dev /ttyS1, /dev /ttyUSB0.

For usb -omformere vil banen inneholde USB -ord.

Du kan koble til enheten med picocom -programmet:

picocom /dev /ttyUSB0 -b 115200

Kommandoprompt på enheten ligner på et av disse bildene nedenfor.

Moduino ESP32: Se her

Moduino Pycom: Se her

Trinn 4: Last opp Modbus Master Library

Last opp Modbus Master Library
Last opp Modbus Master Library

github.com/pycom/pycom-modbus/ For å kommunisere med Modbus Slave trenger du passende bibliotek. Biblioteker for Pycom er ikke kompatible med Moduino. Sjekk instruksjonene som samsvarer med enheten din.

Lukk picocom før du sender filer: trykk Ctrl+A og deretter Ctrl+X -tastene.

uModBus bibliotek for Moduino ESP32 baserer seg på pycom-modbus bibliotek for Moduino Pycom. Den er modifisert for å fungere på vanlig ESP32 -enhet. Den har også flere close () -metoder for koblingsklasser.

1) Moduino ESP32

Last ned biblioteket fra https://github.com/techbase123/micropython-modbus. Pakk ut arkivet og send alle 4 filene til Moduino -enheten.

Bruk mpfshell for å laste dem opp. Kjør dette programmet i katalogen med de filene.

Koble til enheten ved å utføre: DETTE

ttyUSB0 er navnet på den serielle porten der enheten er tilkoblet.

Endre katalog til /flash /lib med kommando:

cd /flash /lib

Sett alle filer med kommandoer:

sette uModBusConst.py

put uModBusFunctions.py put uModBusTCP.py put uModBusSerial.py

EKSEMPEL

Avslutt deretter konsollen med exit -kommando og start enheten på nytt med Reset -knappen.

2) Moduino Pycom

Last ned biblioteket fra https://github.com/pycom/pycom-modbus/. Pakk ut arkivet og send innholdet i uModbus -katalogen til enheten. Bruk mpfshell for å laste dem opp. Kjør dette programmet i katalogen med de filene.

Koble til enheten ved å utføre:

åpen ttyUSB0

ttyUSB0 er navnet på den serielle porten der enheten er tilkoblet.

Endre katalog til /flash /lib, opprett uModbus -katalog og skriv den inn med kommandoer:

cd /flash /libmd uModbus cd uModbus

Sett alle filer med kommandoer:

sette const.py

put functions.py put tcp.py put serial.py

Avslutt deretter konsollen med exit -kommando og start enheten på nytt med Reset -knappen.

EKSEMPEL

Trinn 5: Koble til nettverket

Koble til nettverket
Koble til nettverket

Kommandoer for å etablere tilkobling er forskjellige mellom Moduino og Pycom.

Koble til enheten med picocom for å utføre passende kommandoer. Du kan koble Moduino -enheten til nettverket via tråd eller trådløst. Følgende eksempler forutsetter at nettverket ditt har en fungerende DHCP -server.

I andre tilfeller vil enheten ikke få IP -adresse. Wi -Fi -støtte er tilgjengelig i hver Moduino. Ethernet -port er et alternativ, og ikke alle enheter har det.

1) Moduino ESP32

Koble til WiFi

Utfør følgende kommandoer på enheten:

fra netWiFi import netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

Erstatt ESSID med navnet på WiFi -nettverket ditt, og PASS med passordet til det.

Etter en stund etter start () bør du få en IP -adresse som ble tilordnet enheten din.

Koble til et Ethernet -nettverk

Koble enheten til et kablet nettverk med ethernet -kabel.

Utfør deretter følgende kommandoer:

fra netETH import netETHeth = netETH () eth.start ()

Etter en stund etter start () burde du få IP -adressen som ble tilordnet enheten din.

2) Moduino Pycom

Koble til WiFi

Utfør følgende kommandoer på enheten:

fra nettverksimport WLANwlan = WLAN (modus = WLAN. STA) nett = wlan.scan () for nett i nett: hvis net.ssid == 'ESSID': print ('Nettverk funnet!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) mens den ikke er wlan.isconnected (): machine.idle () print ('WLAN -tilkobling lyktes!') pause

Erstatt ESSID med navnet på WiFi -nettverket ditt, og PASS med passordet til det.

Trinn 6: Initialiser kommunikasjon med Modbus Slave

Initialiser kommunikasjon med Modbus Slave
Initialiser kommunikasjon med Modbus Slave

Modbus Master -biblioteker er like for begge enhetene

De varierer i initialisering.

1) Initialiser uModBus på Moduino ESP32

Henrette:

fra uModBusTCP importer uModBusTCP som TCP

2) Initialiser uModBus på Pycom

Henrette:

fra uModbus.tcp importere TCP

Åpen tilkobling

Åpne deretter forbindelsen med:

modbus = TCP ('IP', PORT, 60)

hvor:

  • IP - ip -adresse til din PC med Modbus Slave -simulator
  • PORT - porten til Modbus Slave
  • 60 er en timeout

Hvis følgende feil oppstår under utførelse av lese/skrive kommandoer: EKSEMPEL

henrette:

for Moduino ESP32:

modbus.close ()

for Moduino Pycom:

modbus._sock.close ()

og gjenopprett deretter tilkoblingen:

modbus = TCP ('IP', PORT, 60)

Dette er viktig for å lukke kontakten før du gjenoppretter tilkoblingen. Enheten har begrenset mengden tilgjengelig stikkontakt.

Trinn 7: Les og skriv registre

Les og skriv registre
Les og skriv registre

Modbus støtter flere funksjoner for å lese og skrive registre.

uModBus -biblioteket har metode for hver funksjon:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. write_single_register

For det første, la oss skrive noen verdier.

1) Skriv spoler (funksjon: 5)

Skriv 1 verdi til 200 register fra slave 1:

modbus.write_single_coil (1, 200, 0xFF00)

Det første argumentet er for slave -ID, i vårt tilfelle 1.

For det andre er registernummer og thirs er en verdi. For 1 må du sette 0xFF00 her. Skriv 0 til 201 register fra slave 1:

modbus.write_single_coil (1, 201, 0)

Denne metoden tillater bare å skrive boolske verdier: 0 eller 1.

2) Skriv registre (funksjon: 6)

Skriv nå noen heltallsverdier til flere registre.

Skriv signert 111 -verdi for å registrere 100 fra slave 1:

modbus.write_single_register (1, 100, 111, True)

Første argument er slave -ID, andre registernummer og tredje er ny verdi. Siste argument definerer om verdien skal settes som signert nummer. Standardverdien for den er True. Du trenger ikke å sette den.

Skriv signert -457 verdi til 101 register fra slave 1:

modbus.write_single_register (1, 101, -457)

Skriv ikke signert 50 verdi til 100 register fra slave 3:

modbus.write_single_register (3, 100, 50, False)

Denne metoden tillater å skrive heltallverdier til enkeltregister.

Enkelt register kan inneholde 16 bitverdier.

Metode returnerer True er inndataværdi er gyldig og False hvis ikke. Verdien skrives selv om den er ugyldig (for stor for register)

3) Les spoler/diskrete innganger

La oss nå lese skrevne boolske verdier. For å lese register med funksjon 1 lesespole, utfør:

modbus.read_coils (slaveId, register, count) [0: count]

For å lese register med funksjon 2 les diskret inngang, utfør:

modbus.read_discrete_inputs (slaveId, register, count) [0: count]

hvor:

  • slave -id - id for virtuell slave (Slave -simulator godtar alle gyldige ID -er)
  • register - registrer nummer for lesing
  • count - antall registre som skal leses (legg ønsket mengde begge steder)

Disse metodene returnerer matrisen med boolske verdier. Hver verdi tilsvarer hvert register.

Fragmentet: [0: count] er nødvendig, fordi denne metoden returnerer flere verdier enn count. Den returnerer alltid mengden verdier som er delelig med 8. Tilleggsverdier er Falske og tilsvarer ikke noe register.

Les våre boolske verdier med begge metodene:

modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]

Resultatet blir slik: EKSEMPEL

True refererer til 1 verdi, Falsk til 0.

4) Les registre

Les nå verdier fra registre skrevet med 6 funksjoner.

For å lese registre med funksjon 3 lese holdingsregistre, utfør:

modbus.read_holding_registers (slaveId, register, count, signed = True)

For å lese registre med funksjon 4 lese inngangsregistre, utfør:

modbus.read_input_registers (slaveId, register, count, signed = True)

hvor:

  • slave -id - id for virtuell slave
  • register - registrer nummer for lesing
  • count - antall registre som skal leses
  • signert - indikerer om leseverdier skal behandles som signerte tall eller ikke. Standardtilstand: True

Returverdi er en tupel med ønsket mengde registre.

Les registre satt i forrige punkt:

modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, False) modbus.read_input_registers (3, 100, 1, False)

Resultatene skal se ut på dette skjermbildet: EKSEMPEL

I den neste leksjonen lærer du hvordan du lager Modbus RTU Master på ESP32-aktivert enhet.

Anbefalt: