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, Jun
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

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

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

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 porta koristi) i pronađite odgovarajući port ili pretvarač.

  1. Povežite uređaj sa računarom
  2. 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

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

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 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

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

Čitanje i pisanje registara
Čitanje i pisanje registara

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

Biblioteka uModBus ima metodu za svaku funkciju:

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