Obsah:
- Krok 1: Stáhněte a spusťte Modbus TCP Slave Simulator
- Krok 2: Připravte počítač na připojení k zařízení
- Krok 3: Připravte zařízení a připojte se k němu
- Krok 4: Nahrajte hlavní knihovnu Modbus
- Krok 5: Připojte se k síti
- Krok 6: Inicializace komunikace pomocí Modbus Slave
- Krok 7: Čtení a zápis registrů
Video: ESP32 Modbus Master TCP: 7 kroků
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
V této třídě naprogramujete procesor ESP32 jako Modbus TCP Master.
Použijeme dvě zařízení, která obsahují tento procesor: Moduino ESP32 a Pycom. Obě zařízení běží v prostředí MicroPytthon. Náš Modbus Slave bude počítač PC se spuštěným softwarem simulátoru Modbus.
Budete potřebovat:
- Zařízení Moduino ESP32 nebo Moduino Pycom (na tomto webu se dozvíte více o zařízení Moduino ESP32 a o kontrole zařízení Pycom)
- PC s operačním systémem Linux
- Port RS-232/RS-485 ve vašem počítači nebo převodník USB na RS-232/RS-485
Krok 1: Stáhněte a spusťte Modbus TCP Slave Simulator
Stáhněte si simulátor Modbus Slave z https://www.modbusdriver.com/diagslave.html. Poté otevřete stažený archiv a rozbalte verzi pro operační systém Linux.
Spusťte program z konzoly s argumentem -p:
./diagslave -p
je port, kde bude fungovat server Modbus Slave. Pro protokol Modbus je standardně 502, ale můžete použít jiný.
V Linuxu porty nižší než 1024 nemohou používat programy spuštěné od běžného uživatele (nikoli oprávnění root).
Pamatujte si, jaký port používáte. Tato hodnota bude nutná později.
Krok 2: Připravte počítač na připojení k zařízení
K navázání připojení k zařízení a odeslání souborů do něj budete potřebovat nějaké programy.
Nainstalujte prostředí Python a pip (pokud jej 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
Nainstalujte picocom:
apt-get install picocom
Tento program je potřeba k připojení k zařízení a provádění příkazů na něm. Nainstalujte mpfshell:
pip install mpfshell
Tento program vám umožňuje odesílat soubory do zařízení.
Můžete jej také nainstalovat ze zdrojů. Viz tato stránka:
Krok 3: Připravte zařízení a připojte se k němu
K připojení zařízení Moduino nebo Pycom k PC potřebujete port nebo převodník RS-232/RS-485. Zkontrolujte verzi svého zařízení (jaký typ portu používá) a najděte příslušný port nebo převodník.
- Připojte zařízení k počítači
- Poté k němu připojte napájecí zdroj
Připojte zařízení k počítači a poté k němu připojte napájení. K modulu Moduino ESP32 (pokud má tento port) můžete také připojit ethernetový kabel.
Připojení by mělo být jako na fotografiích výše
Najděte cestu k portu, který se používá pro připojení zařízení. Může to být například: /dev /ttyS1, /dev /ttyUSB0.
U převodníků USB bude cesta obsahovat slovo USB.
K zařízení se můžete připojit pomocí programu picocom:
picocom /dev /ttyUSB0 -b 115200
Příkazový řádek zařízení vypadá podobně jako jeden z těchto obrázků níže.
Moduino ESP32: Viz zde
Moduino Pycom: Podívejte se zde
Krok 4: Nahrajte hlavní knihovnu Modbus
github.com/pycom/pycom-modbus/ Ke komunikaci s Modbus Slave potřebujete příslušnou knihovnu. Knihovny pro Pycom nejsou kompatibilní s Moduino. Zkontrolujte pokyny, které odpovídají vašemu zařízení.
Před odesláním souborů zavřete picocom: stiskněte Ctrl+A a poté Ctrl+X klávesy.
Knihovna uModBus pro Moduino ESP32 vychází z knihovny pycom-modbus pro Moduino Pycom. Je upraven tak, aby fungoval na běžném zařízení ESP32. Má také další metody close () pro třídy konektorů.
1) Moduino ESP32
Stáhněte si knihovnu z https://github.com/techbase123/micropython-modbus. Rozbalte archiv a odešlete všechny 4 soubory do zařízení Moduino.
Nahrajte je pomocí mpfshell. Spusťte tento program v adresáři s těmito soubory.
Připojte se k zařízení spuštěním: TOTO
ttyUSB0 je název sériového portu, ke kterému je připojeno zařízení.
Změňte adresář na /flash /lib pomocí příkazu:
cd /flash /lib
Vložte všechny soubory pomocí příkazů:
vložte uModBusConst.py
vložte uModBusFunctions.py vložte uModBusTCP.py vložte uModBusSerial.py
PŘÍKLAD
Poté ukončete konzolu příkazem exit a restartujte zařízení tlačítkem Reset.
2) Moduino Pycom
Stáhněte si knihovnu z https://github.com/pycom/pycom-modbus/. Rozbalte archiv a odešlete obsah adresáře uModbus do zařízení. Nahrajte je pomocí mpfshell. Spusťte tento program v adresáři s těmito soubory.
Připojte se k zařízení spuštěním:
otevřete ttyUSB0
ttyUSB0 je název sériového portu, ke kterému je připojeno zařízení.
Změňte adresář na /flash /lib, vytvořte adresář uModbus a zadejte jej příkazy:
cd /flash /libmd uModbus cd uModbus
Vložte všechny soubory pomocí příkazů:
vložte const.py
vložte functions.py vložte tcp.py vložte serial.py
Poté ukončete konzolu příkazem exit a restartujte zařízení tlačítkem Reset.
PŘÍKLAD
Krok 5: Připojte se k síti
Příkazy k navázání spojení se u modulů Moduino a Pycom liší.
Připojte se k zařízení pomocí picocom a proveďte příslušné příkazy. Zařízení Moduino můžete připojit k síti pomocí kabelu nebo bezdrátově. Následující příklady předpokládají, že vaše síť má funkční server DHCP.
V opačném případě zařízení nezíská IP adresu. Podpora Wi -Fi je k dispozici v každém Moduino. Ethernetový port je volitelný a ne všechna zařízení jej mají.
1) Moduino ESP32
Připojení k WiFi
Na zařízení proveďte následující příkazy:
from netWiFi import netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
Nahraďte ESSID názvem vaší WiFi sítě a PASS heslem.
Po nějaké době po spuštění start () byste měli získat IP adresu, která byla přiřazena vašemu zařízení.
Připojení k ethernetové síti
Připojte zařízení ke kabelové síti pomocí ethernetového kabelu.
Poté spusťte následující příkazy:
z netETH import netETHeth = netETH () eth.start ()
Po nějaké době po spuštění start () byste měli získat IP adresu, která byla přiřazena vašemu zařízení.
2) Moduino Pycom
Připojte se k WiFi
Na zařízení proveďte následující příkazy:
ze síťového importu WLANwlan = WLAN (režim = WLAN. STA) sítě = wlan.scan () pro síť v sítích: if net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000), když není wlan.isconnected (): machine.idle () print ('WLAN connection failed!') break
Nahraďte ESSID názvem vaší WiFi sítě a PASS heslem.
Krok 6: Inicializace komunikace pomocí Modbus Slave
Knihovny Modbus Master jsou pro obě zařízení podobné
Liší se inicializací.
1) Inicializujte uModBus na Moduino ESP32
Vykonat:
z uModBusTCP importujte uModBusTCP jako TCP
2) Inicializujte uModBus na Pycomu
Vykonat:
z uModbus.tcp importovat TCP
Otevřené připojení
Poté otevřete spojení s:
modbus = TCP ('IP', PORT, 60)
kde:
- IP - ip adresa vašeho PC se simulátorem Modbus Slave
- PORT - port Modbus Slave
- 60 je časový limit
Pokud během provádění příkazů ke čtení/zápisu dojde k následující chybě: PŘÍKLAD
vykonat:
pro Moduino ESP32:
modbus.close ()
pro Moduino Pycom:
modbus._sock.close ()
a poté znovu vytvořte připojení:
modbus = TCP ('IP', PORT, 60)
Je důležité zavřít soket před obnovením připojení. Zařízení omezilo množství dostupného připojení soketu.
Krok 7: Čtení a zápis registrů
Modbus podporuje několik funkcí pro čtení a zápis registrů.
Knihovna uModBus má metodu pro každou funkci:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- write_single_register
Nejprve si napíšeme nějaké hodnoty.
1) Zapisujte cívky (funkce: 5)
Zapište 1 hodnotu do 200 registrů od slave 1:
modbus.write_single_coil (1, 200, 0xFF00)
První argument je pro slave id, v našem případě 1.
Za druhé je číslo registru a žízeň je hodnota. Za 1 zde musíte vložit 0xFF00. Zapište 0 až 201 registr od slave 1:
modbus.write_single_coil (1, 201, 0)
Tato metoda umožňuje zápis pouze logických hodnot: 0 nebo 1.
2) Zápis registrů (funkce: 6)
Nyní zapište některé celočíselné hodnoty do několika registrů.
Zapište podepsanou hodnotu 111 k registraci 100 z podřízené jednotky 1:
modbus.write_single_register (1, 100, 111, True)
První argument je slave id, druhý číslo registru a třetí je nová hodnota. Poslední argument definuje, zda má být hodnota nastavena jako podepsané číslo. Výchozí hodnota je True. Není třeba to nastavovat.
Zapište podepsanou hodnotu -457 do registru 101 z podřízené jednotky 1:
modbus.write_single_register (1, 101, -457)
Zapište nepodepsanou hodnotu 50 do registru 100 ze slave 3:
modbus.write_single_register (3, 100, 50, False)
Tato metoda umožňuje zápis celočíselných hodnot do jednoho registru.
Jeden registr může obsahovat 16 bitových hodnot.
Metoda vrací True je vstupní hodnota je platná a False, pokud ne. Hodnota je zapsána, i když je neplatná (příliš velká pro registr)
3) Přečtěte cívky/diskrétní vstupy
Nyní si přečteme zapsané booleovské hodnoty. Chcete -li číst registr s čtecí cívkou funkce 1, spusťte:
modbus.read_coils (slaveId, register, count) [0: count]
Chcete -li přečíst registr s funkcí 2 číst diskrétní vstup, spusťte:
modbus.read_discrete_inputs (slaveId, register, count) [0: count]
kde:
- slave -id - id virtuálního slave (simulátor slave přijímá všechna platná ID)
- registr - registrační číslo pro čtení
- count - množství registrů, které se mají přečíst (vložte požadované množství na obě místa)
Tyto metody vrací pole s booleovskými hodnotami. Každá hodnota odpovídá každému registru.
Fragment: [0: count] je potřebný, protože tato metoda vrací více hodnot než count. Vrací vždy množství hodnot, které je dělitelné 8. Další hodnoty jsou Falešné a neodpovídají žádnému registru.
Přečtěte si naše booleovské hodnoty oběma metodami:
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
Výsledek bude vypadat takto: PŘÍKLAD
True odkazuje na 1 hodnotu, False na 0.
4) Číst registry
Nyní načtěte hodnoty z registrů zapsaných pomocí funkce 6.
Chcete -li číst registry s funkcí 3, podržte registry, spusťte:
modbus.read_holding_registers (slaveId, register, count, signed = True)
Chcete -li číst registry s funkcí 4 číst vstupní registry, spusťte:
modbus.read_input_registers (slaveId, register, count, signed = True)
kde:
- slave -id - id virtuálního slave
- registr - registrační číslo pro čtení
- count - množství registrů, které se mají přečíst
- podepsané - označuje, zda by se s načtenými hodnotami mělo zacházet jako s čísly se znaménkem, nebo ne. Výchozí stav: True
Návratová hodnota je n -tice s požadovaným počtem registrů.
Číst registry nastavené v předchozím bodě:
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 měly vypadat jako na tomto snímku obrazovky: PŘÍKLAD
V další lekci se naučíte, jak vytvořit Modbus RTU Master na zařízení s podporou ESP32.