Indholdsfortegnelse:

ESP32 Modbus Master TCP: 7 trin
ESP32 Modbus Master TCP: 7 trin

Video: ESP32 Modbus Master TCP: 7 trin

Video: ESP32 Modbus Master TCP: 7 trin
Video: Modbus TCP-RS485| ESP32. Визуализация на Virtuino. 2024, Juni
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

I denne klasse programmerer du ESP32 -processoren til at være Modbus TCP Master.

Vi vil bruge to enheder, der indeholder denne processor: Moduino ESP32 og Pycom. Begge enheder kører i MicroPytthon -miljø. Vores Modbus Slave bliver en pc -computer med Modbus -simulatorsoftware, der kører på den.

Du får brug for:

  • Moduino ESP32 eller Moduino Pycom -enhed (tjek dette websted for at finde ud af mere om Moduino ESP32 -enhed og dette for at kontrollere Pycom -enheden)
  • PC med Linux operativsystem
  • RS-232/RS-485-port i din computer eller USB til RS-232/RS-485-konverter

Trin 1: Download og start Modbus TCP Slave Simulator

Download og start Modbus TCP Slave Simulator
Download og start Modbus TCP Slave Simulator

Download Modbus Slave -simulator fra https://www.modbusdriver.com/diagslave.html. Åbn derefter det downloadede arkiv, og udpak versionen til Linux -operativsystemet.

Kør programmet fra konsol med -p argument:

./diagslave -p

er en port, hvor Modbus Slave -serveren fungerer. For Modbus -protokollen er den som standard 502, men du kan bruge en anden.

I Linux -porte under 1024 kan ikke bruges af programmer, der køres fra almindelig bruger (ikke root -privilegier).

Husk hvilken port du bruger. Denne værdi er nødvendig senere.

Trin 2: Forbered din computer til at oprette forbindelse til enheden

Forbered computeren til at oprette forbindelse til enheden
Forbered computeren til at oprette forbindelse til enheden

Du skal bruge nogle programmer for at oprette forbindelse til enheden og sende filer til den.

Installer Python -miljø 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 program er nødvendigt for at oprette forbindelse til enheden og udføre kommandoer på den. Installer mpfshell:

pip installer mpfshell

Dette program giver dig mulighed for at sende filer til enheden.

Du kan også installere det fra formkilder. Se denne side:

Trin 3: Forbered enheden og opret forbindelse til den

Forbered enheden og opret forbindelse til den
Forbered enheden og opret forbindelse til den
Forbered enheden og opret forbindelse til den
Forbered enheden og opret forbindelse til den
Forbered enheden og opret forbindelse til den
Forbered enheden og opret forbindelse til den

For at forbinde Moduino- eller Pycom-enheden til pc skal du bruge en RS-232/RS-485 port eller en konverter. Kontroller versionen af din enhed (hvilken porttype den bruger), og find den passende port eller konverter.

  1. Tilslut enheden til pc'en
  2. Tilslut derefter strømforsyningen til den

Tilslut enheden til pc'en, og slut derefter strømforsyningen til den. Du kan også slutte ethernetkabel til Moduino ESP32 (hvis den har den port).

Forbindelsen skal være som på billederne ovenfor

Find sti til port, der bruges til enhedsforbindelse. Det kan for eksempel være: /dev /ttyS1, /dev /ttyUSB0.

For usb -omformere vil stien indeholde USB -ord.

Du kan oprette forbindelse til enheden med picocom -program:

picocom /dev /ttyUSB0 -b 115200

Kommandoprompt på enheden ligner et af disse billeder herunder.

Moduino ESP32: Se her

Moduino Pycom: Se her

Trin 4: Upload Modbus Master Library

Upload Modbus Master Library
Upload Modbus Master Library

github.com/pycom/pycom-modbus/ For at kommunikere med Modbus Slave har du brug for et passende bibliotek. Biblioteker til Pycom er ikke kompatible med Moduino. Kontroller instruktioner, der overholder din enhed.

Luk picocom, før du sender filer: tryk på Ctrl+A og derefter på Ctrl+X -tasterne.

uModBus bibliotek til Moduino ESP32 baserer sig på pycom-modbus bibliotek til Moduino Pycom. Det er ændret til at fungere på en almindelig ESP32 -enhed. Det har også yderligere close () metoder til connector klasser.

1) Moduino ESP32

Download bibliotek fra https://github.com/techbase123/micropython-modbus. Pak arkivet ud, og send alle 4 filer til Moduino -enheden.

Brug mpfshell til at uploade dem. Kør dette program i biblioteket med de filer.

Opret forbindelse til enheden ved at udføre: DETTE

ttyUSB0 er et navn på en seriel port, hvor enheden er tilsluttet.

Skift bibliotek til /flash /lib med kommando:

cd /flash /lib

Sæt alle filer med kommandoer:

sætte uModBusConst.py

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

EKSEMPEL

Afslut derefter konsollen med exit -kommando, og genstart enheden med knappen Nulstil.

2) Moduino Pycom

Download bibliotek fra https://github.com/pycom/pycom-modbus/. Pak arkivet ud, og send indholdet af uModbus -biblioteket til enheden. Brug mpfshell til at uploade dem. Kør dette program i biblioteket med de filer.

Opret forbindelse til enheden ved at udføre:

åben ttyUSB0

ttyUSB0 er et navn på en seriel port, hvor enheden er tilsluttet.

Skift bibliotek til /flash /lib, opret uModbus -bibliotek og indtast det med kommandoer:

cd /flash /libmd uModbus cd uModbus

Sæt alle filer med kommandoer:

sætte const.py

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

Afslut derefter konsollen med exit -kommando, og genstart enheden med knappen Nulstil.

EKSEMPEL

Trin 5: Opret forbindelse til netværket

Opret forbindelse til netværket
Opret forbindelse til netværket

Kommandoer for at etablere forbindelse er forskellige mellem Moduino og Pycom.

Opret forbindelse til enheden med picocom for at udføre passende kommandoer. Du kan slutte Moduino -enheden til netværket via tråd eller trådløst. Følgende eksempler forudsætter, at dit netværk har en fungerende DHCP -server.

I andre tilfælde får enheden ikke IP -adresse. Wi -Fi -understøttelse er tilgængelig i alle Moduino. Ethernet -port er en mulighed, og ikke alle enheder har det.

1) Moduino ESP32

Opretter forbindelse til WiFi

Udfør følgende kommandoer på enheden:

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

Erstat ESSID med navnet på dit WiFi -netværk, og PASS med adgangskoden til det.

Efter et stykke tid efter start () skulle du få en IP -adresse, der blev tildelt din enhed.

Opretter forbindelse til Ethernet -netværk

Tilslut enheden til et kablet netværk med ethernet -kabel.

Udfør derefter følgende kommandoer:

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

Efter et stykke tid efter start af start () skulle du få den IP -adresse, der blev tildelt din enhed.

2) Moduino Pycom

Opret forbindelse til WiFi

Udfør følgende kommandoer på enheden:

fra netværksimport WLANwlan = WLAN (mode = WLAN. STA) net = wlan.scan () for net i net: hvis net.ssid == 'ESSID': print ('Netværk fundet!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000), mens den ikke er wlan.isconnected (): machine.idle () print ('WLAN -forbindelse lykkedes!') pause

Erstat ESSID med navnet på dit WiFi -netværk, og PASS med adgangskoden til det.

Trin 6: Initialiser kommunikation med Modbus Slave

Initialiser kommunikation med Modbus Slave
Initialiser kommunikation med Modbus Slave

Modbus Master -biblioteker ligner begge enheder

De varierer i initialisering.

1) Initialiser uModBus på Moduino ESP32

Udfør:

fra uModBusTCP importere uModBusTCP som TCP

2) Initialiser uModBus på Pycom

Udfør:

fra uModbus.tcp importere TCP

Åben forbindelse

Åbn derefter forbindelsen med:

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

hvor:

  • IP - ip -adresse på din pc med Modbus Slave -simulator
  • PORT - havn i Modbus Slave
  • 60 er en timeout

Hvis følgende fejl opstår under udførelse af læse/skrive kommandoer: EKSEMPEL

udføre:

til Moduino ESP32:

modbus.close ()

til Moduino Pycom:

modbus._sock.close ()

og genskab derefter forbindelsen:

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

Dette er vigtigt at lukke stikket, før forbindelsen genskabes. Enheden har begrænset mængden af tilgængelig stikforbindelse.

Trin 7: Læs og skriv registre

Læs og skriv registre
Læs og skriv registre

Modbus understøtter flere funktioner til at læse og skrive registre.

uModBus bibliotek har metode til hver funktion:

  1. læs_spoler
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. write_single_register

Lad os for det første skrive nogle værdier.

1) Skriv spoler (func: 5)

Skriv 1 værdi til 200 register fra slave 1:

modbus.write_single_coil (1, 200, 0xFF00)

Det første argument er for slave -id, i vores tilfælde 1.

For det andet er registreringsnummer, og thirs er en værdi. For 1 skal du sætte 0xFF00 her. Skriv 0 til 201 register fra slave 1:

modbus.write_single_coil (1, 201, 0)

Denne metode tillader kun at skrive boolske værdier: 0 eller 1.

2) Skriv registre (func: 6)

Skriv nu nogle heltalsværdier til flere registre.

Skriv signeret 111 -værdi for at registrere 100 fra slave 1:

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

Første argument er slave -id, andet registernummer og tredje er ny værdi. Sidste argument definerer, om værdien skal angives som et signeret nummer. Standardværdien for den er True. Du behøver ikke at indstille det.

Skriv signeret -457 værdi til 101 register fra slave 1:

modbus.write_single_register (1, 101, -457)

Skriv ikke signeret 50 værdi til 100 register fra slave 3:

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

Denne metode gør det muligt at skrive heltalsværdier til et enkelt register.

Enkelt register kan indeholde 16 bit værdier.

Metode returnerer True er inputværdien gyldig og Falsk hvis ikke. Værdien skrives, selvom den er ugyldig (for stor til registrering)

3) Læs spoler/diskrete indgange

Lad os nu læse skrevne boolske værdier. For at læse register med funktion 1 læsespole, skal du udføre:

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

For at læse register med funktion 2 læs diskret input, udfør:

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

hvor:

  • slave -id - id for virtuel slave (Slave -simulator accepterer alle gyldige id'er)
  • register - registrer nummer til læsning
  • count - mængde registre, der skal læses (sæt ønsket mængde begge steder)

Disse metoder returnerer array med boolske værdier. Hver værdi svarer til hvert register.

Fragmentet: [0: count] er påkrævet, fordi denne metode returnerer flere værdier end count. Den returnerer altid mængden af værdier, som er delelig med 8. Yderligere værdier er False og svarer ikke til noget register.

Læs vores boolske værdier med begge metoder:

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

Resultatet vil være sådan: EKSEMPEL

Sand refererer til 1 værdi, Falsk til 0.

4) Læs registre

Læs nu værdier fra registre skrevet med 6 funktion.

For at læse registre med funktion 3 læse holderegistre skal du udføre:

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

For at læse registre med funktion 4 læse input -registre skal du udføre:

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

hvor:

  • slave -id - id for virtuel slave
  • register - registrer nummer til læsning
  • count - mængden af registre, der skal læses
  • signeret - angiver, om læste værdier skal behandles som underskrevne numre eller ej. Standardtilstand: True

Returværdien er en tuple med den ønskede mængde registre.

Læs registre, der er angivet 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)

Resultaterne skal se ud på dette skærmbillede: EKSEMPEL

I den næste lektion lærer du, hvordan du opretter Modbus RTU Master på ESP32-aktiveret enhed.

Anbefalede: