INHOUDSOPGAWE:
- Stap 1: Laai Modbus TCP Slave Simulator af en begin dit
- Stap 2: Berei u rekenaar voor om aan te sluit op die toestel
- Stap 3: Berei die toestel voor en maak daarby verbinding
- Stap 4: Laai Modbus -hoofbiblioteek op
- Stap 5: Koppel aan die netwerk
- Stap 6: Initialiseer kommunikasie met Modbus Slave
- Stap 7: Lees en skryf registers
Video: ESP32 Modbus Master TCP: 7 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
In hierdie klas sal u die ESP32 -verwerker programmeer om Modbus TCP Master te wees.
Ons gebruik twee toestelle wat hierdie verwerker bevat: Moduino ESP32 en Pycom. Beide toestelle werk in die MicroPytthon -omgewing. Ons Modbus Slave sal 'n rekenaar wees met Modbus -simulatorsagteware daarop.
Jy sal nodig hê:
- Moduino ESP32 of Moduino Pycom -toestel (gaan na hierdie webwerf om meer te wete te kom oor Moduino ESP32 -toestel en dit om die Pycom -toestel na te gaan)
- PC met Linux -bedryfstelsel
- RS-232/RS-485-poort in u rekenaar of USB na RS-232/RS-485-omskakelaar
Stap 1: Laai Modbus TCP Slave Simulator af en begin dit
Laai Modbus Slave -simulator af van https://www.modbusdriver.com/diagslave.html. Maak dan die afgelaaide argief oop en pak die weergawe vir Linux -bedryfstelsel uit.
Begin die program vanaf die konsole met -p -argument:
./diagslave -p
is 'n poort waar die Modbus Slave -bediener sal werk. Vir Modbus -protokol is dit standaard 502, maar u kan nog een gebruik.
In Linux -poorte onder 1024 kan nie gebruik word deur programme wat deur 'n gewone gebruiker uitgevoer word nie (nie wortelvoorregte nie).
Onthou watter poort u gebruik. Hierdie waarde sal later nodig wees.
Stap 2: Berei u rekenaar voor om aan te sluit op die toestel
U benodig 'n paar programme om verbinding met die toestel te maak en lêers daarheen te stuur.
Installeer Python -omgewing en pip (as u dit nie het nie):
apt-get installeer python3
apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py
Installeer picocom:
apt-get installeer picocom
Hierdie program is nodig om aan te sluit op die toestel en opdragte daarop uit te voer. Installeer mpfshell:
pip installeer mpfshell
Met hierdie program kan u lêers na die toestel stuur.
U kan dit ook uit bronne installeer. Verwys na hierdie bladsy:
Stap 3: Berei die toestel voor en maak daarby verbinding
Om 'n Moduino- of Pycom-toestel aan 'n rekenaar te koppel, benodig u 'n RS-232/RS-485-poort of omskakelaar. Kontroleer die weergawe van u toestel (watter poorttipe dit gebruik) en vind die geskikte poort of omskakelaar.
- Koppel die toestel aan 'n rekenaar
- Koppel dan die kragtoevoer daaraan
Koppel die toestel aan 'n rekenaar en koppel dan die kragtoevoer daaraan. U kan ook die ethernetkabel aan die Moduino ESP32 koppel (as dit die poort het).
Die verbinding moet wees soos op die foto's hierbo
Soek die pad vir die poort wat gebruik word vir die verbinding van die toestel, byvoorbeeld: /dev /ttyS1, /dev /ttyUSB0.
Vir usb -omsetters bevat die pad USB -woord.
U kan aan die toestel koppel met die picocom -program:
picocom /dev /ttyUSB0 -b 115200
Die opdragprompt van die toestel lyk soos een van die onderstaande beelde.
Moduino ESP32: Sien hier
Moduino Pycom: Sien hier
Stap 4: Laai Modbus -hoofbiblioteek op
github.com/pycom/pycom-modbus/ Om met Modbus Slave te kommunikeer, benodig u die toepaslike biblioteek. Biblioteke vir Pycom is nie versoenbaar met Moduino nie. Gaan die instruksies na wat aan u toestel voldoen.
Maak picocom toe voordat u lêers stuur: druk Ctrl+A en dan Ctrl+X sleutels.
uModBus-biblioteek vir Moduino ESP32 baseer op pycom-modbus-biblioteek vir Moduino Pycom. Dit is aangepas om op 'n gewone ESP32 -toestel te werk. Dit het ook addisionele naby () metodes vir koppelklasse.
1) Moduino ESP32
Laai die biblioteek af vanaf https://github.com/techbase123/micropython-modbus. Pak die argief uit en stuur al 4 lêers na die Moduino -toestel.
Gebruik mpfshell om dit op te laai. Begin hierdie program in die gids met die lêers.
Koppel aan toestel deur die uitvoering van: DIT
ttyUSB0 is die naam van die seriële poort waar die toestel gekoppel is.
Verander gids na /flash /lib met opdrag:
cd /flits /lib
Plaas alle lêers met opdragte:
plaas uModBusConst.py
sit uModBusFunctions.py sit uModBusTCP.py sit uModBusSerial.py
VOORBEELD
Verlaat dan die konsole met die exit -opdrag en herlaai die toestel met die reset -knoppie.
2) Moduino Pycom
Laai die biblioteek af vanaf https://github.com/pycom/pycom-modbus/. Pak die argief uit en stuur die inhoud van uModbus -gids na die toestel. Gebruik mpfshell om dit op te laai. Begin hierdie program in die gids met die lêers.
Koppel aan die toestel deur die volgende te doen:
maak ttyUSB0 oop
ttyUSB0 is die naam van die seriële poort waar die toestel gekoppel is.
Verander gids na /flash /lib, skep uModbus -gids en voer dit in met opdragte:
cd /flash /libmd uModbus cd uModbus
Plaas alle lêers met opdragte:
sit const.py
sit funksies.py sit tcp.py sit reeks.py
Verlaat dan die konsole met die exit -opdrag en herlaai die toestel met die reset -knoppie.
VOORBEELD
Stap 5: Koppel aan die netwerk
Opdragte om 'n verbinding te bewerkstellig, verskil tussen Moduino en Pycom.
Koppel aan die toestel met picocom om toepaslike opdragte uit te voer. U kan 'n Moduino -toestel via 'n draadlose of draadlose netwerk aan die netwerk koppel. Die volgende voorbeelde veronderstel dat u netwerk 'n werkende DHCP -bediener het.
In ander gevalle kry die toestel geen IP -adres nie. WiFi -ondersteuning is beskikbaar in elke Moduino. Ethernet -poort is 'n opsie, en nie alle toestelle het dit nie.
1) Moduino ESP32
Koppel aan WiFi
Voer die volgende opdragte op die toestel uit:
vanaf netWiFi invoer netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
Vervang ESSID met die naam van u WiFi -netwerk en pas dit met die wagwoord daarvan.
Na 'n geruime tyd na die begin () moet u 'n IP -adres kry wat aan u toestel toegeken is.
Koppel aan Ethernet -netwerk
Koppel die toestel aan 'n bedrade netwerk met 'n ethernet -kabel.
Voer dan die volgende opdragte uit:
vanaf netETH invoer netETHeth = netETH () eth.start ()
Na 'n geruime tyd na die begin () moet u 'n IP -adres kry wat aan u toestel toegeken is.
2) Moduino Pycom
Koppel aan WiFi
Voer die volgende opdragte op die toestel uit:
vanaf netwerkinvoer WLANwlan = WLAN (modus = WLAN. STA) nette = wlan.scan () vir net in nette: as net.ssid == 'ESSID': print ('Netwerk gevind!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), time -out = 5000) terwyl dit nie wlan.isconnected () is: machine.idle () print ('WLAN -verbinding slaag!') breek
Vervang ESSID met die naam van u WiFi -netwerk en pas dit met die wagwoord daarvan.
Stap 6: Initialiseer kommunikasie met Modbus Slave
Modbus Master -biblioteke is op beide toestelle soortgelyk
Hulle wissel in initialisering.
1) Initialiseer uModBus op Moduino ESP32
Voer uit:
invoer uModBusTCP as TCP vanaf uModBusTCP
2) Begin uModBus op Pycom
Voer uit:
vanaf uModbus.tcp invoer TCP
Oop verbinding
Open dan die verbinding met:
modbus = TCP ('IP', PORT, 60)
waar:
- IP - ip -adres van u rekenaar met Modbus Slave -simulator
- PORT - hawe van Modbus Slave
- 60 is 'n time -out
As die volgende fout tydens die uitvoer van lees-/skryfopdragte voorkom: VOORBEELD
uitvoer:
vir Moduino ESP32:
modbus.close ()
vir Moduino Pycom:
modbus._sock.close ()
en herskep dan die verbinding:
modbus = TCP ('IP', PORT, 60)
Dit is belangrik om die aansluiting te sluit voordat die verbinding weer gemaak word.
Stap 7: Lees en skryf registers
Modbus ondersteun verskeie funksies om registers te lees en te skryf.
uModBus -biblioteek het 'n metode vir elke funksie:
- read_ coils
- lees_diskrete_invoer
- lees_hou_registers
- read_input_registers
- skryf_enkel_spoel
- skryf_ enkel_register
Laat ons eerstens 'n paar waardes skryf.
1) Skryf spoele (funksie: 5)
Skryf 1 waarde tot 200 register van slaaf 1:
modbus.write_single_coil (1, 200, 0xFF00)
Die eerste argument is vir slawe -ID, in ons geval 1.
Tweedens is registernommer en thirs is 'n waarde. Vir 1 moet u 0xFF00 hier plaas. Skryf 0 tot 201 register van slaaf 1:
modbus.write_single_coil (1, 201, 0)
Met hierdie metode kan slegs boolese waardes geskryf word: 0 of 1.
2) Skryf registers (funksie: 6)
Skryf nou 'n paar heelgetalwaardes in verskeie registers.
Skryf ondertekende 111 -waarde om 100 van slaaf 1 te registreer:
modbus.write_single_register (1, 100, 111, waar)
Eerste argument is slawe -ID, tweede registernommer en derde is nuwe waarde. Laaste argument definieer of waarde as getekende nommer gestel moet word. Die standaardwaarde daarvoor is True. U hoef dit nie te stel nie.
Skryf ondertekende -457 waarde na 101 register van slaaf 1:
modbus.write_single_register (1, 101, -457)
Skryf nie getekende 50 waarde tot 100 register van slaaf 3:
modbus.write_single_register (3, 100, 50, vals)
Met hierdie metode kan heelgetalwaardes in enkele register geskryf word.
Enkele register kan 16 biswaardes bevat.
Metode gee terug Waar is invoerwaarde geldig en onwaar indien nie. Waarde word geskryf, selfs al is dit ongeldig (te groot vir register)
3) Lees spoele/diskrete insette
Laat ons nou geskrewe Booleaanse waardes lees. Om die register met funksie 1 te lees, voer die spoel uit:
modbus.read_coils (slaveId, register, count) [0: count]
Om die register met funksie 2 te lees, lees die diskrete invoer:
modbus.read_discrete_inputs (slaveId, register, count) [0: count]
waar:
- slave -id - id van virtuele slaaf (Slave -simulator aanvaar alle geldige ID's)
- registreer - registreer nommer vir lees
- telling - aantal registers wat gelees moet word (plaas die gewenste hoeveelheid op beide plekke)
Hierdie metodes gee skikking terug met boolese waardes. Elke waarde stem ooreen met elke register.
Die fragment: [0: telling] is nodig, want hierdie metode gee meer waardes as telling. Dit gee altyd die hoeveelheid waardes terug wat deelbaar is met 8. Bykomende waardes is onwaar en stem nie ooreen met enige register nie.
Lees ons boolese waardes met beide metodes:
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
Die resultaat sal soos volg wees: VOORBEELD
Waar verwys na 1 waarde, onwaar na 0.
4) Lees registers
Lees nou waardes uit registers wat met 6 funksies geskryf is.
Om registers met funksie 3 te lees lees houregisters, voer:
modbus.read_holding_registers (slaveId, register, count, signed = True)
Om registers met funksie 4 leesinvoerregisters te lees, voer die volgende uit:
modbus.read_input_registers (slaveId, register, count, signed = True)
waar:
- slave -id - id van virtuele slaaf
- registreer - registreer nommer vir lees
- tel - hoeveelheid registers wat gelees moet word
- onderteken - dui aan of leeswaardes as getekende getalle behandel moet word of nie. Verstekstaat: Waar
Opbrengswaarde is 'n tupel met die gewenste hoeveelheid registers.
Lees die registers wat in die vorige punt gestel is:
modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, Onwaar) modbus.read_input_registers (3, 100, 1, vals)
Uitslae behoort soos in hierdie skermkiekie te lyk: VOORBEELD
In die volgende les leer u hoe u Modbus RTU Master op 'n ESP32-toestel kan skep.
Aanbeveel:
Industriële HMI en Arduinos in MODBUS RTU: 4 stappe
Industriële HMI en Arduinos in MODBUS RTU: In hierdie instruksies sal ek 'n voorbeeld beskryf van kommunikasie tussen 'n industriële HMI (COOLMAY MT6070H, 150EUROS), 'n Arduino CLONE DIY (10EUROS) en 'n Arduino UNO (10EUROS). Die netwerk werk onder 'n spesiale en robuuste en industriële protokol
Modbus TCP -kommunikasie tussen Arduino en industriële toestelle: 3 stappe
Modbus TCP -kommunikasie tussen Arduino en industriële toestelle: 'n Industriële manier om 'n Arduino -bord met industriële HMI te beheer en dit aan 'n industriële netwerk te koppel met 'n Modbus TCP -kommunikasie
Aan die gang met ESP32 - Die installering van ESP32 -borde in Arduino IDE - ESP32 Knipper -kode: 3 stappe
Aan die gang met ESP32 | Die installering van ESP32 -borde in Arduino IDE | ESP32 Blink -kode: In hierdie instruksies sal ons sien hoe om met esp32 te begin werk en hoe om esp32 -borde in Arduino IDE te installeer, en ons sal esp 32 programmeer om 'n blink kode te gebruik met behulp van arduino ide
TCP/IP -verbinding via GPRS: Hoe om data na die bediener te stuur met behulp van die SIM900A -module: 4 stappe
TCP/IP -verbinding via GPRS: Hoe om data na die bediener te stuur met behulp van die SIM900A -module: In hierdie handleiding gaan ek u vertel hoe u data na die TCP -bediener kan stuur met behulp van die sim900 -module. Ons sal ook sien hoe ons data van bediener na kliënt kan ontvang (GSM -module)
Meter PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: 7 stappe
Meter PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: In hierdie geleentheid sal ons ons aktiewe kragmeter of elektriese verbruik, Pzem-004-Peacefair integreer met die IoT Node-RED integrasieplatform wat in vorige tutoriale gebruik is, ons sal later 'n ESP8266 -module gebruik wat as Modbus TCP / IP -slaaf gekonfigureer is