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ů
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
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.
Doporučuje:
Digistump a Modbus RTU: 6 kroků
Digistump a Modbus RTU: Ti, kteří viděli můj návod na komunikaci mezi Modbus RTU a Raspberry Pi, vědí, že plánuji projekt na automatizaci skleníku. Vytvořil jsem 2 malé PCB, které lze vložit do projektového boxu. Odkaz na DPS vč
Simulace Transmisor De Temperatura Modbus (Labview + Raspberry Pi 3): 8 kroků
Simulace transmisoru de temperatura Modbus (Labview + Raspberry Pi 3): POST ESCRITO EN ESPAÑOLSe simuló uncuitto transmisor de temperatura, el elemento primario (Sensor) fue implementado mediante un potenciometro el cual varia el voltaje de entrada. Para enviar la información del sensor (Elemento Secundario), si imp
Komunikace Modbus TCP mezi Arduinem a průmyslovými zařízeními: 3 kroky
Komunikace Modbus TCP mezi Arduino a průmyslovými zařízeními: Průmyslový způsob ovládání desky Arduino pomocí průmyslového rozhraní HMI a propojení s průmyslovou sítí pomocí komunikace Modbus TCP
Dotykový termostat ESP8266 Modbus: 5 kroků
ESP8266 Modbus termostat s dotykem: V tomto návodu vám ukážu, jak vytvořit dobře vypadající dotykový termostat s volitelnou podporou Modbus přes RS485 s ArduiTouch ESP a ESP8266 (NodeMCU nebo Wemos D1 Mini)
Měřič PZEM-004 + ESP8266 & Platform IoT Node-RED & Modbus TCP/IP: 7 kroků
Měřič PZEM-004 + ESP8266 a platforma IoT Node-RED a Modbus TCP/IP: Při této příležitosti integrujeme náš aktivní měřič výkonu nebo spotřebu elektrické energie, Pzem-004-Peacefair s integrační platformou IoT Node-RED použitou v předchozích tutoriálech, použijeme modul ESP8266 nakonfigurovaný jako Modbus TCP / IP slave, později