Sisukord:
- Samm: laadige alla ja käivitage Modbus TCP orjasimulaator
- Samm: valmistage arvuti ette seadmega ühenduse loomiseks
- Samm: valmistage seade ette ja ühendage sellega
- Samm: laadige üles Modbusi põhiteek
- Samm: ühendage võrguga
- 6. samm: lähtestage side Modbus Slave'iga
- Samm: lugege ja kirjutage registreid
Video: ESP32 Modbus Master TCP: 7 sammu
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
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 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
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
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.
- Ühendage seade arvutiga
- 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
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
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
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
Modbus toetab mitut funktsiooni registrite lugemiseks ja kirjutamiseks.
uModBusi raamatukogul on iga funktsiooni jaoks meetod:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- 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.