Sadržaj:
- Korak 1: Preuzmite i pokrenite Modbus TCP Slave Simulator
- Korak 2: Pripremite računalo za povezivanje s uređajem
- Korak 3: Pripremite uređaj i povežite se s njim
- Korak 4: Prenesite glavnu biblioteku Modbus
- 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 promjena: 2024-01-30 09:35
U ovoj klasi programirat ćete ESP32 procesor za Modbus TCP Master.
Koristit ćemo dva uređaja koja sadrže ovaj procesor: Moduino ESP32 i Pycom. Oba uređaja rade u MicroPytthon okruženju. Naš Modbus Slave bit će PC računalo sa softverom Modbus simulatora koji radi na njemu.
Trebat će vam:
- Moduino ESP32 ili Moduino Pycom uređaj (provjerite ovu web stranicu kako biste saznali više o Moduino ESP32 uređaju i ovo za provjeru Pycom uređaja)
- PC s Linux operativnim sustavom
- RS-232/RS-485 port na vašem računalu ili USB na RS-232/RS-485 pretvarač
Korak 1: Preuzmite i pokrenite Modbus TCP Slave Simulator
Preuzmite Modbus Slave simulator s https://www.modbusdriver.com/diagslave.html. Zatim otvorite preuzetu arhivu i raspakirajte verziju za operacijski sustav Linux.
Pokrenite program s konzole s -p argumentom:
./diagslave -p
je port na kojem će raditi Modbus Slave poslužitelj. Za Modbus protokol zadano je 502, ali možete koristiti drugi.
U Linuxu portove ispod 1024 ne mogu koristiti programi koji se izvode od običnih korisnika (a ne root ovlaštenja).
Upamtite koji port koristite. Ta će vrijednost kasnije biti potrebna.
Korak 2: Pripremite računalo za povezivanje s 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 je program potreban za povezivanje s uređajem i izvršavanje naredbi na njemu. Instalirajte mpfshell:
pip install mpfshell
Ovaj program omogućuje slanje datoteka na uređaj.
Također ga možete instalirati 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 priključka koristi) i pronađite odgovarajući port ili pretvarač.
- Spojite uređaj na računalo
- Zatim na njega priključite napajanje
Spojite uređaj na računalo, 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 put za priključak 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
Naredbeni redak uređaja izgleda slično jednoj od ovih slika u nastavku.
Moduino ESP32: Pogledajte ovdje
Moduino Pycom: Pogledajte ovdje
Korak 4: Prenesite glavnu biblioteku Modbus
github.com/pycom/pycom-modbus/ Za komunikaciju s Modbus Slaveom potrebna vam je odgovarajuća knjižnica. 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 tipke Ctrl+X.
uModBus knjižnica za Moduino ESP32 temelji se na knjižnici pycom-modbus za Moduino Pycom. Modificiran je za rad na običnom ESP32 uređaju. Također ima dodatne metode close () za klase konektora.
1) Moduino ESP32
Biblioteku preuzmite s https://github.com/techbase123/micropython-modbus. Raspakirajte arhivu i pošaljite sve 4 datoteke na Moduino uređaj.
Za učitavanje upotrijebite 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 spojen.
Promijenite direktorij u /flash /lib naredbom:
cd /flash /lib
Stavite sve datoteke naredbama:
stavite uModBusConst.py
put uModBusFunctions.py stavi uModBusTCP.py stavi uModBusSerial.py
PRIMJER
Zatim izađite s konzole naredbom exit i ponovo pokrenite uređaj tipkom Reset.
2) Moduino Pycom
Biblioteku preuzmite s https://github.com/pycom/pycom-modbus/. Raspakirajte arhivu i pošaljite sadržaj direktorija uModbus na uređaj. Upotrijebite mpfshell da biste ih prenijeli. 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 spojen.
Promijenite direktorij u /flash /lib, stvorite uModbus imenik i unesite ga naredbama:
cd /flash /libmd uModbus cd uModbus
Stavite sve datoteke naredbama:
staviti const.py
put functions.py stavi tcp.py stavi serial.py
Zatim izađite s konzole naredbom exit i ponovo pokrenite uređaj tipkom Reset.
PRIMJER
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 ispravni DHCP poslužitelj.
U drugom slučaju, uređaj neće dobiti IP adresu. Podrška za WiFi dostupna je u svakom Moduinu. Ethernet priključak 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.
Spajanje 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 uvoz 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 (način = WLAN. STA) mreže = wlan.scan () za mrežu u mrežama: if net.ssid == 'ESSID': print ('Network found!') 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
Knjižnice Modbus Master slične su za oba uređaja
Razlikuju se u inicijalizaciji.
1) Inicijalizirajte uModBus na Moduino ESP32
Izvršiti:
iz uModBusTCP unesite uModBusTCP kao TCP
2) Inicijalizirajte uModBus na Pycomu
Izvršiti:
iz uModbus.tcp uvezi TCP
Otvorena veza
Zatim otvorite vezu sa:
modbus = TCP ('IP', PORT, 60)
gdje:
- IP - ip adresa vašeg računala s Modbus Slave simulatorom
- LUKA - luka Modbus Slave
- 60 je vremensko ograničenje
Ako se tijekom izvršavanja naredbi za čitanje/pisanje pojavi sljedeća pogreška: PRIMJER
izvršiti:
za Moduino ESP32:
modbus.close ()
za Moduino Pycom:
modbus._sock.close ()
a zatim ponovno stvorite vezu:
modbus = TCP ('IP', PORT, 60)
Ovo je važno da biste zatvorili utičnicu prije ponovnog stvaranja veze. Uređaj ima ograničenu količinu dostupne utičnice.
Korak 7: Čitanje i pisanje registara
Modbus podržava nekoliko funkcija za čitanje i pisanje registara.
Knjižnica uModBus ima metodu za svaku funkciju:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- napiši_jednu_zavojnicu
- write_single_register
Prvo, napišimo neke vrijednosti.
1) Napišite zavojnice (func: 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.
Drugi je broj registra, a treći je vrijednost. Za 1 morate staviti 0xFF00 ovdje. Upišite 0 do 201 registar iz 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.
Napišite potpisanu vrijednost 111 da biste registrirali 100 sa slave 1:
modbus.write_single_register (1, 100, 111, Istina)
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 postaviti.
Zapiš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ćuje pisanje cijelih brojeva u jedinstveni registar.
Pojedinačni registar može sadržavati 16 bitnih vrijednosti.
Metoda vraća True je ulazna vrijednost valjana, a False ako nije. Vrijednost se upisuje čak i ako je neispravna (prevelika za registar)
3) Očitajte zavojnice/diskretne ulaze
Sada čitajmo zapisane booleove 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 (simulator slave 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.
Ulomak: [0: count] je potreban jer ova metoda vraća više vrijednosti nego count. Uvijek vraća iznos vrijednosti djeljiv sa 8. Dodatne vrijednosti su False i ne odgovaraju nijednom registru.
Pročitajte naše logičke vrijednosti s obje metode:
modbus.čitani_zavojnici (1, 200, 2) [0: 2] modbus.čitani_diskretni_ulazi (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 pročitajte vrijednosti iz registara napisanih s funkcijom 6.
Za čitanje registara s funkcijom 3 čitanje registara držanja, izvedite:
modbus.read_holding_registers (slaveId, register, count, signature = True)
Za čitanje registara s 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 čitati vrijednosti s potpisanim brojevima ili ne. Zadano stanje: Tačno
Povratna vrijednost je tuple s željenom količinom registara.
Čitanje registara postavljenih u prethodnoj točki:
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, Netačno)
Rezultati bi trebali izgledati ovako na ovoj snimci zaslona: PRIMJER
U sljedećoj lekciji naučit ćete kako stvoriti Modbus RTU Master na uređaju s omogućenim ESP32.
Preporučeni:
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 pod posebnim, robusnim i industrijskim protokolom
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
Početak rada s ESP32 - Instaliranje ESP32 ploča u Arduino IDE - ESP32 Blink Code: 3 koraka
Početak rada s 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 putem GPRS -a: Kako poslati podatke na poslužitelj pomoću modula SIM900A: 4 koraka
TCP/IP veza putem GPRS -a: Kako poslati podatke na poslužitelj pomoću modula SIM900A: U ovom vodiču ću vam reći kako poslati podatke na TCP poslužitelj pomoću modula sim900. Također ćemo vidjeti kako možemo primati podatke od poslužitelja do klijenta (GSM modul)
Mjerač PZEM-004 + ESP8266 i čvor za IoT platforme IoT-RED i Modbus TCP/IP: 7 koraka
Mjerač PZEM-004 + ESP8266 & Platforma IoT Node-RED & 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 koja se koristila u prethodnim vodičima, kasnije ćemo koristiti ESP8266 modul konfiguriran kao Modbus TCP / IP slave