Obsah:

ESP32 Modbus Master TCP: 7 kroků
ESP32 Modbus Master TCP: 7 kroků

Video: ESP32 Modbus Master TCP: 7 kroků

Video: ESP32 Modbus Master TCP: 7 kroků
Video: Modbus TCP-RS485| ESP32. Визуализация на Virtuino. 2024, Červen
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

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 a spusťte Simulátor slave Modbus TCP
Stáhněte si a spusťte Simulátor slave Modbus TCP

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í

Připravte počítač k připojení k zařízení
Připravte počítač k 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

Připravte zařízení a připojte se k němu
Připravte zařízení a připojte se k němu
Připravte zařízení a připojte se k němu
Připravte zařízení a připojte se k němu
Připravte zařízení a připojte se k němu
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.

  1. Připojte zařízení k počítači
  2. 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

Nahrajte hlavní knihovnu Modbus
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řipojte se k síti
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

Inicializujte komunikaci pomocí Modbus Slave
Inicializujte komunikaci 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ů

Číst a zapisovat registry
Číst a zapisovat registry

Modbus podporuje několik funkcí pro čtení a zápis registrů.

Knihovna uModBus má metodu pro každou funkci:

  1. read_coils
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. 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: