Sadržaj:
- Korak 1: Preuzmite i pokrenite Modbus TCP Slave Simulator
- Korak 2: Pripremite računar za povezivanje sa uređajem
- Korak 3: Pripremite uređaj i povežite se s njim
- Korak 4: Postavite Modbus glavnu biblioteku
- Korak 5: Povežite se na mrežu
- Korak 6: Inicirajte komunikaciju s Modbus Slaveom
- Korak 7: Čitanje i pisanje registara
Video: ESP32 Modbus Master TCP: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
U ovoj klasi ćete programirati ESP32 procesor za Modbus TCP Master.
Koristit ćemo dva uređaja koji sadrže ovaj procesor: Moduino ESP32 i Pycom. Oba uređaja rade u MicroPytthon okruženju. Naš Modbus Slave bit će PC računar sa softverom Modbus simulatora koji radi na njemu.
Trebat će vam:
- Moduino ESP32 ili Moduino Pycom uređaj (provjerite ovu web stranicu da saznate više o Moduino ESP32 uređaju i ovo za provjeru Pycom uređaja)
- PC sa operativnim sistemom Linux
- RS-232/RS-485 port na vašem računaru ili USB na RS-232/RS-485 pretvarač
Korak 1: Preuzmite i pokrenite Modbus TCP Slave Simulator
Preuzmite Modbus Slave simulator sa https://www.modbusdriver.com/diagslave.html. Zatim otvorite preuzetu arhivu i raspakujte verziju za Linux operativni sistem.
Pokrenite program sa konzole sa -p argumentom:
./diagslave -p
je port na kojem će raditi Modbus Slave poslužitelj. Za Modbus protokol to je standardno 502, ali možete koristiti drugi.
U Linuxu portove ispod 1024 ne mogu koristiti programi koje pokreću obični korisnici (a ne root ovlaštenja).
Upamtite koji port koristite. Ova vrijednost će biti potrebna kasnije.
Korak 2: Pripremite računar za povezivanje sa uređajem
Za povezivanje s uređajem i slanje datoteka na njega trebat će vam neki programi.
Instalirajte Python okruženje i pip (ako ga nemate):
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
Instalirajte picocom:
apt-get install picocom
Ovaj program je potreban za povezivanje s uređajem i izvršavanje naredbi na njemu. Instalirajte mpfshell:
pip install mpfshell
Ovaj program vam omogućuje slanje datoteka na uređaj.
Možete ga instalirati i iz izvora. Pogledajte ovu stranicu:
Korak 3: Pripremite uređaj i povežite se s njim
Za povezivanje Moduino ili Pycom uređaja s računalom potreban vam je RS-232/RS-485 port ili pretvarač. Provjerite verziju svog uređaja (koju vrstu porta koristi) i pronađite odgovarajući port ili pretvarač.
- Povežite uređaj sa računarom
- Zatim na njega priključite napajanje
Povežite uređaj sa računarom, a zatim na njega priključite napajanje. Također možete spojiti ethernet kabel na Moduino ESP32 (ako ima taj priključak).
Veza bi trebala biti kao na gornjim fotografijama
Pronađite putanju za port koji se koristi za povezivanje uređaja. To može biti na primjer: /dev /ttyS1, /dev /ttyUSB0.
Za USB pretvarače put će sadržavati USB riječ.
Na uređaj se možete povezati pomoću programa picocom:
picocom /dev /ttyUSB0 -b 115200
Komandna linija uređaja izgleda slično jednoj od ovih slika u nastavku.
Moduino ESP32: Pogledajte ovdje
Moduino Pycom: Pogledajte ovdje
Korak 4: Postavite Modbus glavnu biblioteku
github.com/pycom/pycom-modbus/ Za komunikaciju sa Modbus Slaveom potrebna vam je odgovarajuća biblioteka. Knjižnice za Pycom nisu kompatibilne s Moduinom. Provjerite upute koje odgovaraju vašem uređaju.
Zatvorite picocom prije slanja datoteka: pritisnite Ctrl+A, a zatim Ctrl+X.
uModBus biblioteka za Moduino ESP32 temelji se na biblioteci pycom-modbus za Moduino Pycom. Izmijenjen je za rad na redovnom ESP32 uređaju. Takođe ima dodatne metode close () za klase konektora.
1) Moduino ESP32
Preuzmite biblioteku sa https://github.com/techbase123/micropython-modbus. Raspakirajte arhivu i pošaljite sve 4 datoteke na Moduino uređaj.
Za učitavanje koristite mpfshell. Pokrenite ovaj program u direktoriju s tim datotekama.
Povežite se s uređajem izvršavanjem: OVO
ttyUSB0 je naziv serijskog porta na koji je uređaj povezan.
Promijenite direktorij u /flash /lib naredbom:
cd /flash /lib
Stavite sve datoteke naredbama:
put uModBusConst.py
stavi uModBusFunctions.py stavi uModBusTCP.py stavi uModBusSerial.py
PRIMER
Zatim izađite s konzole naredbom exit i ponovo pokrenite uređaj tipkom Reset.
2) Moduino Pycom
Preuzmite biblioteku sa https://github.com/pycom/pycom-modbus/. Raspakirajte arhivu i pošaljite sadržaj uModbus direktorija na uređaj. Upotrijebite mpfshell da biste ih učitali. Pokrenite ovaj program u direktoriju s tim datotekama.
Povežite se s uređajem izvršavanjem:
otvorite ttyUSB0
ttyUSB0 je naziv serijskog porta na koji je uređaj povezan.
Promijenite direktorij u /flash /lib, kreirajte uModbus direktorij i unesite ga naredbama:
cd /flash /libmd uModbus cd uModbus
Stavite sve datoteke naredbama:
put const.py
put functions.py put tcp.py put serial.py
Zatim izađite s konzole naredbom exit i ponovo pokrenite uređaj tipkom Reset.
PRIMER
Korak 5: Povežite se na mrežu
Naredbe za uspostavljanje veze razlikuju se između Moduina i Pycoma.
Povežite se s uređajem pomoću picocoma za izvršavanje odgovarajućih naredbi. Moduino uređaj možete spojiti na mrežu žičnim ili bežičnim putem. Sljedeći primjeri pretpostavljaju da vaša mreža ima DHCP poslužitelj.
U drugom slučaju, uređaj neće dobiti IP adresu. Podrška za WiFi dostupna je u svakom Moduinu. Ethernet port je opcija i nemaju ga svi uređaji.
1) Moduino ESP32
Povezivanje na WiFi
Izvršite sljedeće naredbe na uređaju:
iz netWiFi uvoza netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
Zamijenite ESSID imenom svoje WiFi mreže, a PASS lozinkom.
Nakon nekog vremena nakon izvršavanja start () trebali biste dobiti IP adresu koja je dodijeljena vašem uređaju.
Povezivanje na Ethernet mrežu
Povežite uređaj s ožičenom mrežom pomoću Ethernet kabela.
Zatim izvršite sljedeće naredbe:
iz netETH uvoza netETHeth = netETH () eth.start ()
Nakon nekog vremena nakon izvršavanja start () trebali biste dobiti IP adresu koja je dodijeljena vašem uređaju.
2) Moduino Pycom
Povežite se na WiFi
Izvršite sljedeće naredbe na uređaju:
iz uvoza mreže WLANwlan = WLAN (mode = WLAN. STA) mreže = wlan.scan () za mrežu u mrežama: if net.ssid == 'ESSID': print ('Mreža pronađena!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) dok nije wlan.isconnected (): machine.idle () print ('WLAN veza uspjela!') prekid
Zamijenite ESSID imenom svoje WiFi mreže, a PASS lozinkom.
Korak 6: Inicirajte komunikaciju s Modbus Slaveom
Modbus Master biblioteke su slične za oba uređaja
Razlikuju se u inicijalizaciji.
1) Pokrenite uModBus na Moduino ESP32
Izvršite:
iz uModBusTCP uvezite uModBusTCP kao TCP
2) Inicijalizirajte uModBus na Pycomu
Izvršite:
iz uModbus.tcp uvezi TCP
Otvorena veza
Zatim otvorite vezu sa:
modbus = TCP ('IP', PORT, 60)
gdje:
- IP - ip adresa vašeg računara sa Modbus Slave simulatorom
- LUKA - luka Modbus Slave
- 60 je vremensko ograničenje
Ako se tokom izvršavanja naredbi za čitanje/pisanje pojavi sljedeća greška: EXAMPLE
izvrši:
za Moduino ESP32:
modbus.close ()
za Moduino Pycom:
modbus._sock.close ()
a zatim ponovo stvorite vezu:
modbus = TCP ('IP', PORT, 60)
Ovo je važno da zatvorite utičnicu prije ponovnog stvaranja veze. Uređaj ima ograničenu količinu dostupne utičničke veze.
Korak 7: Čitanje i pisanje registara
Modbus podržava nekoliko funkcija za čitanje i pisanje registara.
Biblioteka uModBus ima metodu za svaku funkciju:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- write_single_register
Prvo, napišimo neke vrijednosti.
1) Napišite zavojnice (funkcija: 5)
Upišite 1 vrijednost u 200 registar iz slave 1:
modbus.write_single_coil (1, 200, 0xFF00)
Prvi argument je za slave ID, u našem slučaju 1.
Drugo je broj registra, a treće vrijednost. Za 1 morate staviti 0xFF00 ovdje. Upišite 0 do 201 registar sa slave 1:
modbus.write_single_coil (1, 201, 0)
Ova metoda dopušta pisanje samo logičkih vrijednosti: 0 ili 1.
2) Zapišite registre (func: 6)
Sada zapišite neke cijele vrijednosti u nekoliko registara.
Upišite vrijednost 111 sa potpisom da biste registrirali 100 sa slave 1:
modbus.write_single_register (1, 100, 111, Tačno)
Prvi argument je slave ID, drugi registarski broj i treći je nova vrijednost. Zadnji argument definira treba li vrijednost postaviti kao potpisan broj. Zadana vrijednost za to je True. Ne morate ga postavljati.
Napišite potpisanu vrijednost -457 u 101 registar iz slave 1:
modbus.write_single_register (1, 101, -457)
Upišite nepotpisanu vrijednost 50 u 100 registrirajte sa slave 3:
modbus.write_single_register (3, 100, 50, Netačno)
Ova metoda omogućava pisanje cijelih brojeva u jedinstveni registar.
Pojedinačni registar može sadržavati 16 bitne vrijednosti.
Metoda vraća True je ulazna vrijednost važeća, a False ako nije. Vrijednost se upisuje čak i ako je neispravna (prevelika za registraciju)
3) Očitajte zavojnice/diskretne ulaze
Sada čitajmo zapisane logičke vrijednosti. Za čitanje registra s funkcijom 1 zavojnice za čitanje, izvedite:
modbus.read_coils (slaveId, register, count) [0: count]
Za čitanje registra s funkcijom 2 čitanje diskretnog unosa izvršite:
modbus.read_discrete_inputs (slaveId, register, count) [0: count]
gdje:
- slave -id - id virtualnog slave -a (Slave simulator prihvaća sve važeće ID -ove)
- register - registarski broj za čitanje
- count - količina registara za čitanje (stavite željeni iznos na oba mjesta)
Ove metode vraćaju niz s logičkim vrijednostima. Svaka vrijednost odgovara svakom registru.
Fragment: [0: count] je potreban jer ova metoda vraća više vrijednosti nego count. Uvijek vraća vrijednost vrijednosti koja je djeljiva sa 8. Dodatne vrijednosti su False i ne odgovaraju nijednom registru.
Pročitajte naše logičke vrijednosti s obje metode:
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
Rezultat će biti sljedeći: PRIMJER
Tačno se odnosi na 1 vrijednost, Netačno na 0.
4) Čitanje registara
Sada čitajte vrijednosti iz registara napisanih sa 6 funkcija.
Za čitanje registara s funkcijom 3 čitanje registara držanja, izvedite:
modbus.read_holding_registers (slaveId, register, count, signature = True)
Za čitanje registara sa funkcijom 4 čitanje ulaznih registara izvršite:
modbus.read_input_registers (slaveId, register, count, signature = True)
gdje:
- slave -id - ID virtualnog roba
- register - registarski broj za čitanje
- count - količina registara za čitanje
- potpisano - označava treba li vrijednosti čitanja tretirati kao potpisane brojeve ili ne. Zadano stanje: Tačno
Povratna vrijednost je tuple sa željenom količinom registara.
Pročitajte registre postavljene u prethodnoj tački:
modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, Netačno) modbus.read_input_registers (3, 100, 1, Netačno)
Rezultati bi trebali izgledati ovako na ovoj slici: PRIMJER
U sljedećoj lekciji naučit ćete kako stvoriti Modbus RTU Master na uređaju s omogućenim ESP32.
Preporučuje se:
Industrijski HMI i Arduinos u MODBUS RTU: 4 koraka
Industrijski HMI i Arduinos u MODBUS RTU -u: U ovom uputstvu opisat ću primjer komunikacije između industrijskog HMI -a (COOLMAY MT6070H, 150EUROS), Arduino CLONE DIY (10EUROS) i Arduino UNO (10EUROS). Mreža će raditi po posebnom, robusnom i industrijskom protokolu
Modbus TCP komunikacija između Arduina i industrijskih uređaja: 3 koraka
Modbus TCP komunikacija između Arduina i industrijskih uređaja: Industrijski način upravljanja Arduino pločom s industrijskim HMI -jem i povezivanje s industrijskom mrežom s Modbus TCP komunikacijom
Prvi koraci sa ESP32 - Instaliranje ESP32 ploča u Arduino IDE - ESP32 Blink Code: 3 koraka
Prvi koraci sa ESP32 | Instaliranje ESP32 ploča u Arduino IDE | ESP32 Blink Code: U ovom uputstvu vidjet ćemo kako započeti rad s esp32 i kako instalirati esp32 ploče u Arduino IDE i programirat ćemo esp 32 da pokrene blink kod pomoću arduino ide
TCP/IP veza preko GPRS -a: Kako poslati podatke na server pomoću modula SIM900A: 4 koraka
TCP/IP veza preko GPRS -a: Kako poslati podatke na server pomoću SIM900A modula: U ovom vodiču ću vam reći kako poslati podatke na TCP server pomoću sim900 modula. Također ćemo vidjeti kako možemo primati podatke od servera do klijenta (GSM modul)
Mjerač PZEM-004 + ESP8266 i IoT čvor platforme-CRVENI i Modbus TCP/IP: 7 koraka
Mjerač PZEM-004 + ESP8266 i platforma IoT čvor-CRVENI i Modbus TCP/IP: Ovom prilikom integrirat ćemo naš mjerač aktivne snage ili potrošnju električne energije, Pzem-004-Peacefair s integracijskom platformom IoT Node-RED korištenom u prethodnim vodičima, kasnije ćemo koristiti modul ESP8266 konfiguriran kao Modbus TCP / IP slave