Kazalo:

ESP32 Modbus Master TCP: 7 korakov
ESP32 Modbus Master TCP: 7 korakov

Video: ESP32 Modbus Master TCP: 7 korakov

Video: ESP32 Modbus Master TCP: 7 korakov
Video: Работа с Modbus RTU/TCP. Примеры проектов. 2024, Junij
Anonim
ESP32 Modbus glavni TCP
ESP32 Modbus glavni TCP

V tem razredu boste procesor ESP32 programirali za Modbus TCP Master.

Uporabljali bomo dve napravi, ki vsebujeta ta procesor: Moduino ESP32 in Pycom. Obe napravi delujeta v okolju MicroPytthon. Naš Modbus Slave bo osebni računalnik s programsko opremo simulatorja Modbus.

Boste potrebovali:

  • Naprava Moduino ESP32 ali Moduino Pycom (na tem spletnem mestu boste izvedeli več o napravi Moduino ESP32 in to za preverjanje naprave Pycom)
  • Računalnik z operacijskim sistemom Linux
  • Vrata RS-232/RS-485 v računalniku ali pretvornik USB v RS-232/RS-485

Korak: Prenesite in zaženite Modbus TCP Slave Simulator

Prenesite in zaženite Modbus TCP Slave Simulator
Prenesite in zaženite Modbus TCP Slave Simulator

Prenesite simulator Modbus Slave s spletnega mesta https://www.modbusdriver.com/diagslave.html, nato odprite preneseni arhiv in razpakirajte različico operacijskega sistema Linux.

Zaženite program iz konzole z argumentom -p:

./diagslave -p

je vrata, kjer bo deloval strežnik Modbus Slave. Za protokol Modbus je privzeto 502, lahko pa uporabite drugega.

V vratih Linux pod 1024 programi, ki jih izvajajo običajni uporabniki, ne morejo uporabljati (ne korenskih pravic).

Zapomnite si, katera vrata uporabljate. Ta vrednost bo potrebna kasneje.

2. korak: Pripravite računalnik na povezavo z napravo

Pripravite računalnik na povezavo z napravo
Pripravite računalnik na povezavo z napravo

Za vzpostavitev povezave z napravo in pošiljanje datotek nanjo potrebujete nekaj programov.

Namestite okolje Python in pip (če ga nimate):

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

Namestite picocom:

apt-get install picocom

Ta program je potreben za povezavo z napravo in izvajanje ukazov na njej. Namestite mpfshell:

pip install mpfshell

Ta program vam omogoča pošiljanje datotek v napravo.

Namestite ga lahko tudi iz virov virov. Oglejte si to stran:

3. korak: Pripravite napravo in se povežite z njo

Pripravite napravo in se povežite z njo
Pripravite napravo in se povežite z njo
Pripravite napravo in se povežite z njo
Pripravite napravo in se povežite z njo
Pripravite napravo in se povežite z njo
Pripravite napravo in se povežite z njo

Za povezavo naprave Moduino ali Pycom z osebnim računalnikom potrebujete vrata ali pretvornik RS-232/RS-485. Preverite različico vaše naprave (katero vrsto vrat uporablja) in poiščite ustrezna vrata ali pretvornik.

  1. Napravo povežite z računalnikom
  2. Nato nanj priključite napajalnik

Napravo priključite na računalnik in nato nanjo priključite napajanje. Ethernetni kabel lahko priključite tudi na Moduino ESP32 (če ima ta vrata).

Povezava mora biti takšna kot na zgornjih fotografijah

Poiščite pot za vrata, ki se uporabljajo za povezavo naprave. Lahko je na primer: /dev /ttyS1, /dev /ttyUSB0.

Za pretvornike USB bo pot vsebovala besedo USB.

Na napravo se lahko povežete s programom picocom:

picocom /dev /ttyUSB0 -b 115200

Ukazni poziv naprave je podoben eni od teh spodnjih slik.

Moduino ESP32: poglejte tukaj

Moduino Pycom: Poglejte tukaj

4. korak: Naložite glavno knjižnico Modbus

Naložite glavno knjižnico Modbus
Naložite glavno knjižnico Modbus

github.com/pycom/pycom-modbus/ Za komunikacijo z Modbus Slave potrebujete ustrezno knjižnico. Knjižnice za Pycom niso združljive z Moduinom. Preverite navodila, ki ustrezajo vaši napravi.

Pred pošiljanjem datotek zaprite picocom: pritisnite Ctrl+A in nato Ctrl+X.

Knjižnica uModBus za Moduino ESP32 temelji na knjižnici pycom-modbus za Moduino Pycom. Prilagojen je za delo na običajni napravi ESP32. Prav tako ima dodatne metode close () za razrede konektorjev.

1) Moduino ESP32

Prenesite knjižnico s spletnega mesta https://github.com/techbase123/micropython-modbus. Razpakirajte arhiv in pošljite vse 4 datoteke v napravo Moduino.

Za nalaganje uporabite mpfshell. Zaženite ta program v imeniku s temi datotekami.

Povežite se z napravo tako, da izvedete: THIS

ttyUSB0 je ime serijskih vrat, kjer je naprava priključena.

Spremenite imenik v /flash /lib z ukazom:

cd /flash /lib

Vnesite vse datoteke z ukazi:

daj uModBusConst.py

put uModBusFunctions.py put uModBusTCP.py daj uModBusSerial.py

PRIMER

Nato zapustite konzolo z ukazom za izhod in znova zaženite napravo s tipko Ponastavi.

2) Moduino Pycom

Prenesite knjižnico s spletnega mesta https://github.com/pycom/pycom-modbus/. Razpakirajte arhiv in pošljite vsebino imenika uModbus v napravo. Za nalaganje uporabite mpfshell. Zaženite ta program v imeniku s temi datotekami.

Povežite se z napravo tako, da izvedete:

odprite ttyUSB0

ttyUSB0 je ime serijskih vrat, kjer je naprava priključena.

Spremenite imenik v /flash /lib, ustvarite imenik uModbus in ga vnesite z ukazi:

cd /flash /libmd uModbus cd uModbus

Vnesite vse datoteke z ukazi:

daj const.py

put functions.py put tcp.py put serial.py

Nato zapustite konzolo z ukazom za izhod in znova zaženite napravo s tipko Ponastavi.

PRIMER

5. korak: Povežite se z omrežjem

Povežite se z omrežjem
Povežite se z omrežjem

Ukazi za vzpostavitev povezave se med Moduino in Pycom razlikujejo.

Za izvedbo ustreznih ukazov se povežite z napravo s picocom. Napravo Moduino lahko povežete v omrežje po žici ali brezžično. Naslednji primeri predpostavlja, da ima vaše omrežje delujoč strežnik DHCP.

V nasprotnem primeru naprava ne bo dobila naslova IP. ViFi podpora je na voljo v vsakem Moduinu. Vrata Ethernet so možnost in jih nimajo vse naprave.

1) Moduino ESP32

Povezovanje z WiFi

Na napravi izvedite naslednje ukaze:

iz netWiFi uvoz netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

Zamenjajte ESSID z imenom vašega omrežja WiFi in PASS z geslom.

Po določenem času po izvedbi start () bi morali dobiti naslov IP, ki je bil dodeljen vaši napravi.

Povezava z ethernetnim omrežjem

Napravo povežite z žičnim omrežjem s kablom Ethernet.

Nato izvedite naslednje ukaze:

iz netETH uvoz netETHeth = netETH () eth.start ()

Po določenem času po izvedbi start () bi morali dobiti naslov IP, ki je bil dodeljen vaši napravi.

2) Moduino Pycom

Povežite se z WiFi

Na napravi izvedite naslednje ukaze:

iz uvoza omrežja WLANwlan = WLAN (način = WLAN. STA) mreže = wlan.scan () za mrežo v omrežjih: če je net.ssid == 'ESSID': print ('Omrežje najdeno!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), časovna omejitev = 5000), medtem ko ni wlan.isconnected (): machine.idle () print ('Povezava WLAN je uspela!') prekinitev

Zamenjajte ESSID z imenom vašega omrežja WiFi in PASS z geslom.

6. korak: Inicializirajte komunikacijo s pomožnim modulom Modbus

Inicializirajte komunikacijo s pomožnim modulom Modbus
Inicializirajte komunikacijo s pomožnim modulom Modbus

Knjižnice Modbus Master so za obe napravi podobne

Pri inicializaciji se razlikujejo.

1) Inicializirajte uModBus na Moduino ESP32

Izvedite:

iz uModBusTCP uvozite uModBusTCP kot TCP

2) Inicializirajte uModBus na Pycomu

Izvedite:

iz uModbus.tcp uvozi TCP

Odprta povezava

Nato odprite povezavo z:

modbus = TCP ('IP', PORT, 60)

kje:

  • IP - ip naslov vašega računalnika s simulatorjem Modbus Slave
  • PORT - pristanišče Modbus Slave
  • 60 je časovna omejitev

Če se med izvajanjem ukazov za branje/pisanje pojavi naslednja napaka: PRIMER

izvrši:

za Moduino ESP32:

modbus.close ()

za Moduino Pycom:

modbus._sock.close ()

in nato znova ustvarite povezavo:

modbus = TCP ('IP', PORT, 60)

To je pomembno, da zaprete vtičnico, preden ponovno ustvarite povezavo. Naprava ima omejeno količino razpoložljive povezave vtičnice.

7. korak: Branje in pisanje registrov

Branje in pisanje registrov
Branje in pisanje registrov

Modbus podpira več funkcij za branje in pisanje registrov.

Knjižnica uModBus ima za vsako funkcijo metodo:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. write_single_register

Najprej zapišemo nekaj vrednosti.

1) Napišite tuljave (func: 5)

Zapišite 1 vrednost v register 200 iz pomožnega 1:

modbus.write_single_coil (1, 200, 0xFF00)

Prvi argument je za slave slave, v našem primeru 1.

Drugi je registrska številka, tretja pa vrednost. Za 1 morate tukaj vnesti 0xFF00. Napišite 0 do 201 register iz pomožnega 1:

modbus.write_single_coil (1, 201, 0)

Ta metoda omogoča zapisovanje samo logičnih vrednosti: 0 ali 1.

2) Zapišite registre (funkc: 6)

Sedaj zapišite nekaj celoštevilčnih vrednosti v več registrov.

Vnesite podpisano vrednost 111, da registrirate 100 iz podrejenega 1:

modbus.write_single_register (1, 100, 111, True)

Prvi argument je pomožni ID, drugi registrski številki in tretji je nova vrednost. Zadnji argument določa, ali je treba vrednost nastaviti kot podpisano številko. Privzeta vrednost zanj je True. Ni vam ga treba nastaviti.

Vpišite 101 -podpisano vrednost -457 v podrejeni register 1:

modbus.write_single_register (1, 101, -457)

Napišite nepodpisano vrednost 50 v register 100 iz podrejenega 3:

modbus.write_single_register (3, 100, 50, False)

Ta metoda omogoča zapisovanje celih števil v en sam register.

Enojni register lahko vsebuje 16 -bitne vrednosti.

Metoda vrne True je vnosna vrednost veljavna in False, če ne. Vrednost je zapisana, tudi če je neveljavna (prevelika za register)

3) Odčitajte tuljave/diskretne vhode

Zdaj pa preberemo zapisane logične vrednosti. Če želite prebrati register s funkcijo 1 branja tuljave, izvedite:

modbus.read_coils (slaveId, register, count) [0: count]

Če želite prebrati register s funkcijo 2, preberite diskretni vnos, izvedite:

modbus.read_discrete_inputs (slaveId, register, count) [0: count]

kje:

  • slave -id - ID navideznega podrejenega (simulator pomožnika sprejema vse veljavne ID -je)
  • register - registrska številka za branje
  • count - količina registrov za branje (na obeh mestih vnesite želeno količino)

Te metode vrnejo niz z logičnimi vrednostmi. Vsaka vrednost ustreza vsakemu registru.

Fragment: [0: count] je potreben, ker ta metoda vrne več vrednosti kot count. Vedno vrne količino vrednosti, ki je deljiva z 8. Dodatne vrednosti so False in ne ustrezajo nobenemu registru.

Preberite naše logične vrednosti z obema metodama:

modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]

Rezultat bo takšen: PRIMER

True se nanaša na 1 vrednost, False na 0.

4) Preberite registre

Zdaj preberite vrednosti iz registrov, napisanih s funkcijo 6.

Če želite brati registre s funkcijo 3, preberite registre zadrževanja, izvedite:

modbus.read_holding_registers (slaveId, register, count, sign = True)

Če želite prebrati registre s funkcijo 4, preberite vhodne registre, izvedite:

modbus.read_input_registers (slaveId, register, count, sign = True)

kje:

  • slave -id - ID navideznega sužnja
  • register - registrska številka za branje
  • count - količina registrov za branje
  • podpisano - označuje, ali je treba vrednosti branja obravnavati kot podpisane številke ali ne. Privzeto stanje: True

Vrnjena vrednost je parček z želeno količino registrov.

Preberite registre, nastavljene v prejšnji 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, False)

Rezultati bi morali izgledati kot na tem posnetku zaslona: EXAMPLE

V naslednji lekciji se boste naučili ustvariti Modbus RTU Master na napravi, ki podpira ESP32.

Priporočena: