Innholdsfortegnelse:
- Trinn 1: Last ned og start Modbus TCP Slave Simulator
- Trinn 2: Klargjør datamaskinen for å koble til enheten
- Trinn 3: Forbered enheten og koble til den
- Trinn 4: Last opp Modbus Master Library
- Trinn 5: Koble til nettverket
- Trinn 6: Initialiser kommunikasjon med Modbus Slave
- Trinn 7: Les og skriv registre
Video: ESP32 Modbus Master TCP: 7 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
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 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
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
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.
- Koble enheten til PC
- 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
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
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
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
Modbus støtter flere funksjoner for å lese og skrive registre.
uModBus -biblioteket har metode for hver funksjon:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- 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:
Industriell HMI og Arduinos i MODBUS RTU: 4 trinn
Industrial HMI og Arduinos i MODBUS RTU: I denne instruksjonsbilen vil jeg beskrive et eksempel på kommunikasjon mellom en industriell HMI (COOLMAY MT6070H, 150EUROS), en Arduino CLONE DIY (10EUROS) og en Arduino UNO (10EUROS). Nettverket vil kjøre under en spesiell og robust og industriell protose
Modbus TCP -kommunikasjon mellom Arduino og industrielle enheter: 3 trinn
Modbus TCP -kommunikasjon mellom Arduino og industrielle enheter: En industriell måte å kontrollere et Arduino -kort med industriell HMI og koble det til et industrielt nettverk med en Modbus TCP -kommunikasjon
Komme i gang med ESP32 - Installere ESP32 -kort i Arduino IDE - ESP32 Blink -kode: 3 trinn
Komme i gang med ESP32 | Installere ESP32 -kort i Arduino IDE | ESP32 Blink -kode: I denne instruksjonsboken vil vi se hvordan du begynner å jobbe med esp32 og hvordan du installerer esp32 -kort i Arduino IDE, og vi vil programmere esp 32 for å kjøre blinkkode ved hjelp av arduino ide
TCP/IP -tilkobling via GPRS: Slik sender du data til server ved hjelp av SIM900A -modul: 4 trinn
TCP/IP -tilkobling via GPRS: Slik sender du data til server ved hjelp av SIM900A -modul: I denne opplæringen skal jeg fortelle deg hvordan du sender data til TCP -server ved hjelp av sim900 -modul. Vi vil også se hvordan vi kan motta data fra server til klient (GSM -modul)
Meter PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: 7 trinn
Meter PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: I denne muligheten vil vi integrere vår aktive effektmåler eller elektrisk forbruk, Pzem-004-Peacefair med IoT Node-RED integrasjonsplattform som ble brukt i tidligere opplæringsprogrammer, vi vil bruke en ESP8266 -modul konfigurert som Modbus TCP / IP -slave, senere