Sisukord:

ESP32 Modbus Master TCP: 7 sammu
ESP32 Modbus Master TCP: 7 sammu

Video: ESP32 Modbus Master TCP: 7 sammu

Video: ESP32 Modbus Master TCP: 7 sammu
Video: WinCC 7.5 - Настройка связи Modbus TCP и Modbus RTU c анализатором мощности Janitza 2024, Juuni
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Selles klassis programmeerite ESP32 protsessori Modbus TCP Masteriks.

Kasutame kahte seadet, mis sisaldavad seda protsessorit: Moduino ESP32 ja Pycom. Mõlemad seadmed töötavad MicroPytthoni keskkonnas. Meie Modbus Slave on personaalarvuti, millel töötab Modbus simulaatori tarkvara.

Sa vajad:

  • Moduino ESP32 või Moduino Pycom seade (vaadake seda veebisaiti, et saada rohkem teavet Moduino ESP32 seadme kohta ja seda Pycomi seadme kontrollimiseks)
  • Linuxi operatsioonisüsteemiga arvuti
  • RS-232/RS-485 port arvutis või USB RS-232/RS-485 muundur

Samm: laadige alla ja käivitage Modbus TCP orjasimulaator

Laadige alla ja käivitage Modbus TCP orjasimulaator
Laadige alla ja käivitage Modbus TCP orjasimulaator

Laadige Modbus Slave simulaator alla aadressilt https://www.modbusdriver.com/diagslave.html. Seejärel avage allalaaditud arhiiv ja pakkige Linuxi operatsioonisüsteemi versioon lahti.

Käivitage programm konsoolist argumendiga -p:

./diagslave -p

on port, kus Modbus Slave server töötab. Modbusi protokolli puhul on see vaikimisi 502, kuid saate kasutada teist.

Linuxi pordides alla 1024 ei saa kasutada tavakasutaja käitatavad programmid (mitte juurõigused).

Pidage meeles, millist porti kasutate. See väärtus on vajalik hiljem.

Samm: valmistage arvuti ette seadmega ühenduse loomiseks

Valmistage arvuti ette seadmega ühenduse loomiseks
Valmistage arvuti ette seadmega ühenduse loomiseks

Seadmega ühenduse loomiseks ja sellele failide saatmiseks vajate mõningaid programme.

Installige Pythoni keskkond ja pip (kui teil seda pole):

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

Installige picocom:

apt-get install picocom

See programm on vajalik seadmega ühenduse loomiseks ja sellel käskude täitmiseks. Installige mpfshell:

pip installige mpfshell

See programm võimaldab teil seadmesse faile saata.

Saate selle installida ka allikatest. Vaadake seda lehte:

Samm: valmistage seade ette ja ühendage sellega

Valmistage seade ette ja ühendage sellega
Valmistage seade ette ja ühendage sellega
Valmistage seade ette ja ühendage sellega
Valmistage seade ette ja ühendage sellega
Valmistage seade ette ja ühendage sellega
Valmistage seade ette ja ühendage sellega

Moduino või Pycom seadme arvutiga ühendamiseks vajate RS-232/RS-485 porti või muundurit. Kontrollige oma seadme versiooni (millist porditüüpi see kasutab) ja leidke sobiv port või muundur.

  1. Ühendage seade arvutiga
  2. Seejärel ühendage see toiteallikaga

Ühendage seade arvutiga ja ühendage seejärel toiteallikas. Samuti saate ühendada Etherneti kaabli Moduino ESP32 -ga (kui sellel on see port).

Ühendus peaks olema selline nagu ülaltoodud fotodel

Leidke seadme ühendamiseks kasutatava pordi tee. See võib olla näiteks: /dev /ttyS1, /dev /ttyUSB0.

USB -muundurite jaoks sisaldab tee USB -sõna.

Saate seadmega ühenduse luua picocom -programmi abil:

picocom /dev /ttyUSB0 -b 115200

Seadme käsuviip näeb välja sarnane ühega järgmistest piltidest.

Moduino ESP32: vaata siit

Moduino Pycom: Vaata siit

Samm: laadige üles Modbusi põhiteek

Laadige üles Modbus Master Library
Laadige üles Modbus Master Library

github.com/pycom/pycom-modbus/ Modbus Slave'iga suhtlemiseks vajate sobivat kogu. Pycomi raamatukogud ei ühildu Moduinoga. Kontrollige juhiseid, mis vastavad teie seadmele.

Enne failide saatmist sulgege picocom: vajutage Ctrl+A ja seejärel klahve Ctrl+X.

uModBus raamatukogu Moduino ESP32 jaoks põhineb Moduino Pycomi pücom-modbus raamatukogul. Seda on muudetud nii, et see töötaks tavalise ESP32 seadmega. Sellel on ka täiendavad sulgemismeetodid konnektoriklasside jaoks.

1) Moduino ESP32

Laadige kogu alla aadressilt https://github.com/techbase123/micropython-modbus. Pakkige arhiiv lahti ja saatke kõik 4 faili Moduino seadmesse.

Kasutage nende üleslaadimiseks mpfshelli. Käivitage see programm nende failidega kataloogis.

Ühendage seadmega, käivitades: SEE

ttyUSB0 on jadaporti nimi, kuhu seade on ühendatud.

Muutke kataloogiks /flash /lib käsuga:

cd /flash /lib

Sisestage kõik failid käskudega:

pane uModBusConst.py

pane uModBusFunctions.py pane uModBusTCP.py pane uModBusSerial.py

NÄIDE

Seejärel väljuge konsoolist väljumiskäsuga ja taaskäivitage seade nupuga Lähtesta.

2) Moduino Pycom

Laadige kogu alla aadressilt https://github.com/pycom/pycom-modbus/. Pakkige arhiiv lahti ja saatke seadmesse uModbus kataloogi sisu. Kasutage nende üleslaadimiseks mpfshelli. Käivitage see programm nende failidega kataloogis.

Seadmega ühenduse loomiseks toimige järgmiselt.

avage ttyUSB0

ttyUSB0 on jadaporti nimi, kuhu seade on ühendatud.

Muutke kataloogiks /flash /lib, looge kataloog uModbus ja sisestage see käskudega:

cd /flash /libmd uModbus cd uModbus

Sisestage kõik failid käskudega:

pane const.py

pane funktsioonid.py pane tcp.py pane seriaalne.py

Seejärel väljuge konsoolist väljumiskäsuga ja taaskäivitage seade nupuga Lähtesta.

NÄIDE

Samm: ühendage võrguga

Ühendage võrguga
Ühendage võrguga

Käsud ühenduse loomiseks erinevad Moduino ja Pycomi vahel.

Ühendage seadmega picocomiga, et täita sobivaid käske. Saate Moduino seadme võrku ühendada juhtme või traadita ühenduse kaudu. Järgnevad näited eeldavad, et teie võrgus on töötav DHCP -server.

Muul juhul ei saa seade IP -aadressi. WiFi -tugi on saadaval igas Moduinos. Etherneti port on valik ja mitte kõigil seadmetel pole seda.

1) Moduino ESP32

WiFi -ga ühenduse loomine

Täitke seadmes järgmised käsud:

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

Asendage ESSID oma WiFi -võrgu nimega ja PASS selle parooliga.

Mõne aja pärast pärast käivitamist () peaksite saama teie seadmele määratud IP -aadressi.

Ühendamine Etherneti võrguga

Ühendage seade Etherneti kaabliga traadiga võrku.

Seejärel täitke järgmised käsud:

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

Mõne aja pärast pärast käivitamist () peaksite saama teie seadmele määratud IP -aadressi.

2) Moduino Pycom

Ühendage WiFi -ga

Täitke seadmes järgmised käsud:

võrgu impordist WLANwlan = WLAN (režiim = WLAN. STA), auth = (net.sec, 'PASS'), timeout = 5000) wlan.isconnected (): machine.idle () print ('WLAN -ühendus õnnestus!') katkestus

Asendage ESSID oma WiFi -võrgu nimega ja PASS selle parooliga.

6. samm: lähtestage side Modbus Slave'iga

Initsialiseeri side Modbus Slave'iga
Initsialiseeri side Modbus Slave'iga

Modbus Masteri teegid on mõlema seadme jaoks sarnased

Need erinevad initsialiseerimisel.

1) Initsialiseeri uModBus seadmel Moduino ESP32

Käivita:

uModBusTCP -st importige uModBusTCP TCP -na

2) Initsialiseeri uModBus Pycomis

Käivita:

uModbus.tcp import TCP

Avatud ühendus

Seejärel avage ühendus:

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

kus:

  • Modbus Slave simulaatoriga arvuti IP -aadress
  • PORT - Modbusi orja sadam
  • 60 on aeg

Kui lugemis-/kirjutamiskäskude täitmisel ilmneb järgmine tõrge: EXAMPLE

täitma:

Moduino ESP32 jaoks:

modbus.close ()

Moduino Pycomi jaoks:

modbus._sock.close ()

ja seejärel looge ühendus uuesti:

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

See on oluline pistikupesa sulgemiseks enne ühenduse taastamist. Seadmel on piiratud arv pistikupesaühendusi.

Samm: lugege ja kirjutage registreid

Lugege ja kirjutage registreid
Lugege ja kirjutage registreid

Modbus toetab mitut funktsiooni registrite lugemiseks ja kirjutamiseks.

uModBusi raamatukogul on iga funktsiooni jaoks meetod:

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

Esiteks kirjutame mõned väärtused.

1) Kirjutage mähised (func: 5)

Kirjutage alamast 1 registrisse 1 väärtus 200:

modbus.write_single_coil (1, 200, 0xFF00)

Esimene argument on orja id, meie puhul 1.

Teine on registrinumber ja nende väärtus on väärtus. 1 jaoks peate siia panema 0xFF00. Kirjutage orjast 1 registrit 0 kuni 201:

modbus.write_single_coil (1, 201, 0)

See meetod võimaldab kirjutada ainult loogilisi väärtusi: 0 või 1.

2) Kirjutage registrid (func: 6)

Nüüd kirjutage mõned täisarvud mitmele registrile.

Kirjutage allkirjaga 111 väärtus, et registreerida 100 alamilt 1:

modbus.write_single_register (1, 100, 111, tõene)

Esimene argument on alam -id, teine registrinumber ja kolmas on uus väärtus. Viimane argument määrab, kas väärtus tuleks seada allkirjastatud numbriks. Selle vaikeväärtus on Tõene. Te ei pea seda seadistama.

Kirjutage allkirjast -457 väärtus 101 registrisse orjast 1:

modbus.write_single_register (1, 101, -457)

Kirjutage allkirjastamata 50 väärtust 100 -le orjast 3:

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

See meetod võimaldab täisarvude väärtuste kirjutamist ühte registrisse.

Üks register võib sisaldada 16 -bitiseid väärtusi.

Meetod tagastab tõene, kui sisendväärtus on kehtiv ja vale, kui mitte. Väärtus kirjutatakse isegi siis, kui see on kehtetu (registri jaoks liiga suur)

3) Lugege mähiseid/diskreetseid sisendeid

Nüüd loeme kirjalikke tõeväärtusi. Funktsiooni 1 lugemismähisega registri lugemiseks käivitage:

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

Registri lugemiseks funktsiooni 2 lugemise diskreetse sisendiga toimige järgmiselt.

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

kus:

  • slave -id - virtuaalse orja ID (orjasimulaator aktsepteerib kõiki kehtivaid ID -sid)
  • register - registreerimisnumber lugemiseks
  • count - loetavate registrite arv (pange mõlemasse kohta soovitud summa)

Need meetodid tagastavad tõeväärtustega massiivi. Iga väärtus vastab igale registrile.

Fragment: [0: count] on vajalik, kuna see meetod tagastab rohkem väärtusi kui loend. See tagastab alati väärtuste arvu, mis jagub kaheksaga. Lisaväärtused on valed ja ei vasta ühelegi registrile.

Lugege meie tõeväärtusi mõlema meetodi abil:

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

Tulemus on järgmine: NÄIDE

Tõene viitab 1 väärtusele, vale väärtusele 0.

4) Loe registreid

Nüüd lugege väärtusi 6 funktsiooniga kirjutatud registritest.

Funktsiooniga 3 lugemishoiuregistrite registrite lugemiseks toimige järgmiselt.

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

Funktsiooniga 4 sisendregistrite lugemiseks toimige järgmiselt.

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

kus:

  • slave -id - virtuaalse orja ID
  • register - registreerimisnumber lugemiseks
  • count - loetavate registrite hulk
  • allkirjastatud - näitab, kas loetud väärtusi tuleks käsitleda allkirjastatud numbritena või mitte. Vaikeolek: tõsi

Tagastusväärtus on soovitud koguse registrite kogum.

Lugege eelmises punktis määratud registreid:

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)

Tulemused peaksid välja nägema sellel ekraanipildil: EXAMPLE

Järgmises õppetükis saate teada, kuidas luua Modbus RTU Master ESP32 toega seadmes.

Soovitan: