Obsah:

ESP32 Modbus Master TCP: 7 krokov
ESP32 Modbus Master TCP: 7 krokov

Video: ESP32 Modbus Master TCP: 7 krokov

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

V tejto triede naprogramujete procesor ESP32 ako Modbus TCP Master.

Použijeme dve zariadenia, ktoré obsahujú tento procesor: Moduino ESP32 a Pycom. Obe zariadenia bežia v prostredí MicroPytthon. Náš Modbus Slave bude počítač PC so simulačným softvérom Modbus.

Budete potrebovať:

  • Zariadenie Moduino ESP32 alebo Moduino Pycom (na tejto webovej stránke nájdete ďalšie informácie o zariadení Moduino ESP32 a o kontrole zariadenia Pycom)
  • PC s operačným systémom Linux
  • Port RS-232/RS-485 vo vašom počítači alebo prevodník USB na RS-232/RS-485

Krok 1: Stiahnite si a spustite Simulátor otrokov Modbus TCP

Stiahnite si a spustite Simulátor otrokov Modbus TCP
Stiahnite si a spustite Simulátor otrokov Modbus TCP

Stiahnite si simulátor Modbus Slave z https://www.modbusdriver.com/diagslave.html. Potom otvorte stiahnutý archív a rozbaľte verziu pre operačný systém Linux.

Spustite program z konzoly s argumentom -p:

./diagslave -p

je port, kde bude fungovať server Modbus Slave. Pre protokol Modbus je predvolene 502, ale môžete použiť aj iný.

V systéme Linux porty nižšie ako 1024 nemôžu používať programy spustené od bežného používateľa (nie oprávnenia root).

Pamätajte si, aký port používate. Táto hodnota bude potrebná neskôr.

Krok 2: Pripravte počítač na pripojenie k zariadeniu

Pripravte počítač na pripojenie k zariadeniu
Pripravte počítač na pripojenie k zariadeniu

Na pripojenie k zariadeniu a odosielanie súborov doň budete potrebovať niektoré programy.

Nainštalujte prostredie Python a pip (ak ho nemáte):

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

Nainštalujte picocom:

apt-get nainštalovať picocom

Tento program je potrebný na pripojenie k zariadeniu a spustenie príkazov na ňom. Nainštalujte mpfshell:

pip install mpfshell

Tento program vám umožňuje odosielať súbory do zariadenia.

Môžete si ho tiež nainštalovať zo zdrojov. Pozrite sa na túto stránku:

Krok 3: Pripravte zariadenie a pripojte sa k nemu

Pripravte zariadenie a pripojte sa k nemu
Pripravte zariadenie a pripojte sa k nemu
Pripravte zariadenie a pripojte sa k nemu
Pripravte zariadenie a pripojte sa k nemu
Pripravte zariadenie a pripojte sa k nemu
Pripravte zariadenie a pripojte sa k nemu

Na pripojenie zariadenia Moduino alebo Pycom k počítaču potrebujete port alebo prevodník RS-232/RS-485. Skontrolujte verziu svojho zariadenia (ktorý typ portu používa) a nájdite príslušný port alebo prevodník.

  1. Pripojte zariadenie k počítaču
  2. Potom k nemu pripojte napájanie

Pripojte zariadenie k počítaču a potom k nemu pripojte napájanie. K modulu Moduino ESP32 (ak má tento port) môžete tiež pripojiť ethernetový kábel.

Pripojenie by malo byť ako na fotografiách vyššie

Nájdite cestu k portu, ktorý sa používa na pripojenie zariadenia. Môže to byť napríklad: /dev /ttyS1, /dev /ttyUSB0.

V prípade prevodníkov USB bude cesta obsahovať slovo USB.

K zariadeniu sa môžete pripojiť pomocou programu picocom:

picocom /dev /ttyUSB0 -b 115200

Príkazový riadok zariadenia vyzerá podobne ako na jednom z týchto obrázkov nižšie.

Moduino ESP32: Pozrite sa sem

Moduino Pycom: Pozrite sa sem

Krok 4: Nahrajte hlavnú knižnicu Modbus

Odovzdajte hlavnú knižnicu Modbus
Odovzdajte hlavnú knižnicu Modbus

github.com/pycom/pycom-modbus/ Na komunikáciu s Modbus Slave potrebujete vhodnú knižnicu. Knižnice pre Pycom nie sú kompatibilné s modulom Moduino. Prečítajte si pokyny, ktoré vyhovujú vášmu zariadeniu.

Pred odoslaním súborov zatvorte picocom: stlačte Ctrl+A a potom Ctrl+X.

Knižnica uModBus pre Moduino ESP32 je založená na knižnici pycom-modbus pre Moduino Pycom. Je upravený tak, aby fungoval na bežnom zariadení ESP32. Má tiež ďalšie metódy close () pre triedy konektorov.

1) Moduino ESP32

Stiahnite si knižnicu z https://github.com/techbase123/micropython-modbus. Rozbaľte archív a odošlite všetky 4 súbory do zariadenia Moduino.

Odošlite ich pomocou súboru mpfshell. Spustite tento program v adresári s týmito súbormi.

Pripojte sa k zariadeniu vykonaním: TOTO

ttyUSB0 je názov sériového portu, ku ktorému je zariadenie pripojené.

Zmeňte adresár na /flash /lib pomocou príkazu:

cd /flash /lib

Vložte všetky súbory pomocou príkazov:

vložte uModBusConst.py

vložte uModBusFunctions.py vložte uModBusTCP.py vložte uModBusSerial.py

PRÍKLAD

Potom ukončite konzolu príkazom exit a reštartujte zariadenie tlačidlom Reset.

2) Moduino Pycom

Stiahnite si knižnicu z https://github.com/pycom/pycom-modbus/. Rozbaľte archív a pošlite obsah adresára uModbus do zariadenia. Na ich odoslanie použite súbor mpfshell. Spustite tento program v adresári s týmito súbormi.

Pripojte sa k zariadeniu vykonaním:

otvor ttyUSB0

ttyUSB0 je názov sériového portu, ku ktorému je zariadenie pripojené.

Zmeňte adresár na /flash /lib, vytvorte adresár uModbus a zadajte ho pomocou príkazov:

cd /flash /libmd uModbus cd uModbus

Vložte všetky súbory pomocou príkazov:

vložte const.py

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

Potom ukončite konzolu príkazom exit a reštartujte zariadenie tlačidlom Reset.

PRÍKLAD

Krok 5: Pripojte sa k sieti

Pripojte sa k sieti
Pripojte sa k sieti

Príkazy na nadviazanie spojenia sa medzi modulmi Moduino a Pycom líšia.

Pripojte sa k zariadeniu pomocou picocom a spustite príslušné príkazy. Zariadenie Moduino môžete pripojiť k sieti káblom alebo bezdrôtovo. Nasledujúce príklady predpokladajú, že vo vašej sieti je funkčný server DHCP.

V opačnom prípade zariadenie nedostane IP adresu. Podpora Wi -Fi je k dispozícii v každom Moduino. Ethernetový port je voliteľný a nie všetky zariadenia ho majú.

1) Moduino ESP32

Pripojenie k WiFi

Na zariadení vykonajte nasledujúce príkazy:

from netWiFi import netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

Nahraďte ESSID názvom vašej siete WiFi a PASS heslom.

Po nejakom čase po spustení start () by ste mali dostať IP adresu, ktorá bola priradená vášmu zariadeniu.

Pripojenie k sieti Ethernet

Pripojte zariadenie k káblovej sieti pomocou ethernetového kábla.

Potom spustite nasledujúce príkazy:

z netETH import netETHeth = netETH () eth.start ()

Po nejakom čase po spustení start () by ste mali dostať IP adresu, ktorá bola priradená vášmu zariadeniu.

2) Moduino Pycom

Pripojte sa k WiFi

Na zariadení vykonajte nasledujúce príkazy:

zo sieťového importu WLANwlan = WLAN (režim = WLAN. STA) siete = wlan.scan () pre siete v sieťach: if net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), časový limit = 5000) bez wlan.isconnected (): machine.idle () print ('WLAN connection failed!') break

Nahraďte ESSID názvom vašej siete WiFi a PASS heslom.

Krok 6: Inicializujte komunikáciu s Modbus Slave

Inicializujte komunikáciu s Modbus Slave
Inicializujte komunikáciu s Modbus Slave

Knižnice Modbus Master sú pre obe zariadenia podobné

Líšia sa v inicializácii.

1) Inicializujte uModBus na Moduino ESP32

Vykonať:

z uModBusTCP importujte uModBusTCP ako TCP

2) Inicializujte uModBus na Pycom

Vykonať:

z uModbus.tcp importovať TCP

Otvorené pripojenie

Potom otvorte spojenie s:

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

kde:

  • IP - ip adresa vášho počítača so simulátorom Modbus Slave
  • PORT - prístav Modbus Slave
  • 60 je časový limit

Ak sa pri vykonávaní príkazov na čítanie/zápis vyskytne nasledujúca chyba: PRÍKLAD

vykonať:

pre Moduino ESP32:

modbus.close ()

pre Moduino Pycom:

modbus._sock.close ()

a potom znova vytvorte pripojenie:

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

Je dôležité zatvoriť soket pred obnovením pripojenia. Zariadenie obmedzilo množstvo dostupného pripojenia soketu.

Krok 7: Čítanie a zápis registrov

Čítanie a zápis registrov
Čítanie a zápis registrov

Modbus podporuje niekoľko funkcií na čítanie a zápis registrov.

Knižnica uModBus má pre každú funkciu metódu:

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

Po prvé, napíšeme niekoľko hodnôt.

1) Napíšte cievky (funkcia: 5)

Zapíšte 1 hodnotu do 200 registrov od slave 1:

modbus.write_single_coil (1, 200, 0xFF00)

Prvý argument je pre slave id, v našom prípade 1.

Druhým je číslo registra a tretiny je hodnota. Za 1 tu musíte dať 0xFF00. Napíšte 0 až 201 register od otroka 1:

modbus.write_single_coil (1, 201, 0)

Táto metóda umožňuje zápis iba logických hodnôt: 0 alebo 1.

2) Zápisové registre (funkcia: 6)

Teraz napíšte niekoľko celočíselných hodnôt do niekoľkých registrov.

Napíšte zapísanú hodnotu 111, aby ste zaregistrovali 100 z podriadeného zariadenia 1:

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

Prvý argument je slave id, druhé číslo registra a tretie je nová hodnota. Posledný argument definuje, či má byť hodnota nastavená ako podpísané číslo. Predvolená hodnota je True. Nemusíte to nastavovať.

Zapíšte podpísanú hodnotu -457 do registra 101 z podriadeného zariadenia 1:

modbus.write_single_register (1, 101, -457)

Zapíšte 50 hodnôt bez znamienka do 100 registra od slave 3:

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

Táto metóda umožňuje zápis celočíselných hodnôt do jedného registra.

Jeden register môže obsahovať 16 bitových hodnôt.

Metóda vracia True je vstupná hodnota je platná a nepravdivá, ak nie. Hodnota je zapísaná, aj keď je neplatná (príliš veľká na registráciu)

3) Prečítajte cievky/diskrétne vstupy

Teraz si prečítajme zapísané booleovské hodnoty. Ak chcete čítať register s čítacou cievkou funkcie 1, spustite:

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

Ak chcete čítať register s čítaním diskrétneho vstupu s funkciou 2, spustite:

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

kde:

  • slave -id - id virtuálneho slave (simulátor slave akceptuje všetky platné id)
  • register - registračné číslo na čítanie
  • count - množstvo registrov, ktoré sa majú prečítať (vložte požadované množstvo na obe miesta)

Tieto metódy vracajú pole s booleovskými hodnotami. Každá hodnota zodpovedá každému registru.

Fragment: [0: count] je potrebný, pretože táto metóda vracia viac hodnôt ako počet. Vráti vždy množstvo hodnôt, ktoré je deliteľné 8. Ďalšie hodnoty sú nepravdivé a nezodpovedajú žiadnemu registru.

Prečítajte si naše booleovské hodnoty oboma metódami:

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

Výsledok bude nasledujúci: PRÍKLAD

True odkazuje na 1 hodnotu, False na 0.

4) Čítanie registrov

Teraz prečítajte hodnoty z registrov zapísaných pomocou funkcie 6.

Ak chcete čítať registre s čítacou pamäťou na čítanie 3, vykonajte tieto kroky:

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

Ak chcete čítať registre s čítaním vstupných registrov s funkciou 4, spustite:

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

kde:

  • slave -id - ID virtuálneho otroka
  • register - registračné číslo na čítanie
  • count - množstvo registrov, ktoré sa majú prečítať
  • podpísané - označuje, či sa s prečítanými hodnotami má zaobchádzať ako s číslami so znamienkom alebo nie. Predvolený stav: True

Návratová hodnota je n -tica s požadovaným počtom registrov.

Prečítajte si registre nastavené v predchádzajúcom bode:

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)

Výsledky by mali vyzerať ako na tejto snímke obrazovky: PRÍKLAD

V ďalšej lekcii sa naučíte, ako vytvoriť Modbus RTU Master na zariadení s podporou ESP32.

Odporúča: