Sadržaj:

ESP32 Modbus Master TCP: 7 koraka
ESP32 Modbus Master TCP: 7 koraka

Video: ESP32 Modbus Master TCP: 7 koraka

Video: ESP32 Modbus Master TCP: 7 koraka
Video: Руководство для начинающих по переадресации портов 2024, Lipanj
Anonim
ESP32 Modbus glavni TCP
ESP32 Modbus glavni TCP

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 i pokrenite Modbus TCP Slave Simulator
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

Pripremite računalo za povezivanje s uređajem
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

Pripremite uređaj i povežite se s njim
Pripremite uređaj i povežite se s njim
Pripremite uređaj i povežite se s njim
Pripremite uređaj i povežite se s njim
Pripremite uređaj i povežite se s njim
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č.

  1. Spojite uređaj na računalo
  2. 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

Prenesite glavnu biblioteku Modbus
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

Povežite se na mrežu
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

Pokrenite komunikaciju s Modbus Slaveom
Pokrenite 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

Registri za čitanje i pisanje
Registri za čitanje i pisanje

Modbus podržava nekoliko funkcija za čitanje i pisanje registara.

Knjižnica uModBus ima metodu za svaku funkciju:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. napiši_jednu_zavojnicu
  6. 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: