Obsah:
- Krok 1: Stiahnite si a spustite Simulátor otrokov Modbus TCP
- Krok 2: Pripravte počítač na pripojenie k zariadeniu
- Krok 3: Pripravte zariadenie a pripojte sa k nemu
- Krok 4: Nahrajte hlavnú knižnicu Modbus
- Krok 5: Pripojte sa k sieti
- Krok 6: Inicializujte komunikáciu s Modbus Slave
- Krok 7: Čítanie a zápis registrov
Video: ESP32 Modbus Master TCP: 7 krokov
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
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 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
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
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.
- Pripojte zariadenie k počítaču
- 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
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
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
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
Modbus podporuje niekoľko funkcií na čítanie a zápis registrov.
Knižnica uModBus má pre každú funkciu metódu:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- 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.