Turinys:
- 1 veiksmas: atsisiųskite ir paleiskite „Modbus TCP Slave Simulator“
- 2 žingsnis: Paruoškite kompiuterį prisijungti prie įrenginio
- 3 žingsnis: Paruoškite įrenginį ir prisijunkite prie jo
- 4 veiksmas: įkelkite „Modbus“pagrindinę biblioteką
- 5 veiksmas: prisijunkite prie tinklo
- 6 veiksmas: inicijuokite ryšį su „Modbus Slave“
- 7 žingsnis: skaitykite ir rašykite registrus
Video: ESP32 „Modbus Master TCP“: 7 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Šioje klasėje ESP32 procesorių užprogramuosite kaip „Modbus TCP Master“.
Mes naudosime du įrenginius, kuriuose yra šis procesorius: „Moduino ESP32“ir „Pycom“. Abu įrenginiai veikia „MicroPytthon“aplinkoje. Mūsų „Modbus Slave“bus kompiuteris su „Modbus“simuliatoriaus programine įranga.
Jums reikės:
- „Moduino ESP32“arba „Moduino Pycom“įrenginys (norėdami sužinoti daugiau apie „Moduino ESP32“įrenginį ir norėdami patikrinti „Pycom“įrenginį, apsilankykite šioje svetainėje)
- Kompiuteris su „Linux“operacine sistema
- RS-232/RS-485 kompiuterio prievadą arba USB į RS-232/RS-485 keitiklį
1 veiksmas: atsisiųskite ir paleiskite „Modbus TCP Slave Simulator“
Atsisiųskite „Modbus Slave“simuliatorių iš https://www.modbusdriver.com/diagslave.html. Tada atidarykite atsisiųstą archyvą ir išpakuokite „Linux“operacinės sistemos versiją.
Paleiskite programą iš konsolės naudodami argumentą -p:
./diagslave -p
yra prievadas, kuriame veiks „Modbus Slave“serveris. „Modbus“protokolui jis pagal numatytuosius nustatymus yra 502, tačiau galite naudoti kitą.
„Linux“prievaduose, mažesniuose nei 1024, negali naudoti programos, paleidžiamos iš įprasto vartotojo (ne root teisės).
Prisiminkite, kokį prievadą naudojate. Ši vertė bus reikalinga vėliau.
2 žingsnis: Paruoškite kompiuterį prisijungti prie įrenginio
Jums reikės kai kurių programų, kad galėtumėte prisijungti prie įrenginio ir siųsti failus į jį.
Įdiekite „Python“aplinką ir „pip“(jei jos neturite):
apt-get įdiegti python3
apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py
Įdiekite „picocom“:
apt-get install picocom
Ši programa reikalinga norint prisijungti prie įrenginio ir vykdyti jame esančias komandas. Įdiekite „mpfshell“:
pip įdiegti mpfshell
Ši programa leidžia siųsti failus į įrenginį.
Taip pat galite jį įdiegti iš šaltinių. Žiūrėkite šį puslapį:
3 žingsnis: Paruoškite įrenginį ir prisijunkite prie jo
Norėdami prijungti „Moduino“ar „Pycom“įrenginį prie kompiuterio, jums reikia RS-232/RS-485 prievado arba keitiklio. Patikrinkite savo įrenginio versiją (kokio tipo prievadą jis naudoja) ir raskite tinkamą prievadą arba keitiklį.
- Prijunkite įrenginį prie kompiuterio
- Tada prijunkite prie jo maitinimo šaltinį
Prijunkite įrenginį prie kompiuterio ir tada prijunkite prie jo maitinimo šaltinį. Taip pat galite prijungti eterneto kabelį prie „Moduino ESP32“(jei jis turi tą prievadą).
Ryšys turėtų būti toks, kaip aukščiau esančiose nuotraukose
Raskite prievado, naudojamo įrenginio prijungimui, kelią. Tai gali būti, pavyzdžiui: /dev /ttyS1, /dev /ttyUSB0.
USB keitiklių kelyje bus USB žodis.
Prie įrenginio galite prisijungti naudodami „picocom“programą:
picocom /dev /ttyUSB0 -b 115200
Įrenginio komandų eilutė atrodo panaši į vieną iš toliau pateiktų vaizdų.
„Moduino ESP32“: žiūrėkite čia
„Moduino Pycom“: žiūrėkite čia
4 veiksmas: įkelkite „Modbus“pagrindinę biblioteką
Norėdami bendrauti su „Modbus Slave“, jums reikia atitinkamos bibliotekos. „Pycom“bibliotekos nesuderinamos su „Moduino“. Patikrinkite instrukcijas, kurios atitinka jūsų įrenginį.
Prieš siųsdami failus uždarykite „picocom“: paspauskite Ctrl+A, tada - Ctrl+X klavišus.
„Moduino ESP32“„uModBus“biblioteka yra pagrįsta „Moduino Pycom“skirta „pycom-modbus“biblioteka. Jis modifikuotas taip, kad veiktų įprastame ESP32 įrenginyje. Jis taip pat turi papildomų jungčių klasių uždarymo () metodų.
1) „Moduino ESP32“
Atsisiųskite biblioteką iš https://github.com/techbase123/micropython-modbus. Išpakuokite archyvą ir nusiųskite visus 4 failus į „Moduino“įrenginį.
Norėdami juos įkelti, naudokite „mpfshell“. Paleiskite šią programą kataloge su tais failais.
Prisijunkite prie įrenginio atlikdami: TAI
ttyUSB0 yra serijinio prievado, prie kurio prijungtas įrenginys, pavadinimas.
Pakeiskite katalogą į /flash /lib naudodami komandą:
cd /flash /lib
Įdėkite visus failus su komandomis:
įdėti uModBusConst.py
įdėti uModBusFunctions.py įdėti uModBusTCP.py įdėti uModBusSerial.py
PAVYZDYS
Tada išeikite iš konsolės naudodami komandą exit ir iš naujo paleiskite įrenginį naudodami mygtuką Reset.
2) „Moduino Pycom“
Atsisiųskite biblioteką iš https://github.com/pycom/pycom-modbus/. Išpakuokite archyvą ir nusiųskite „uModbus“katalogo turinį į įrenginį. Norėdami juos įkelti, naudokite „mpfshell“. Paleiskite šią programą kataloge su tais failais.
Prisijunkite prie įrenginio atlikdami šiuos veiksmus:
atidaryti ttyUSB0
ttyUSB0 yra serijinio prievado, prie kurio prijungtas įrenginys, pavadinimas.
Pakeiskite katalogą į /flash /lib, sukurkite uModbus katalogą ir įveskite jį komandomis:
cd /flash /libmd uModbus cd uModbus
Įdėkite visus failus su komandomis:
įdėti const.py
įdėti funkcijos.py įdėti tcp.py įdėti serijos.py
Tada išeikite iš konsolės naudodami komandą exit ir iš naujo paleiskite įrenginį naudodami mygtuką Reset.
PAVYZDYS
5 veiksmas: prisijunkite prie tinklo
Komandos užmegzti ryšį tarp „Moduino“ir „Pycom“skiriasi.
Prisijunkite prie įrenginio naudodami „picocom“, kad atliktumėte atitinkamas komandas. Galite prijungti „Moduino“įrenginį prie tinklo laidiniu arba belaidžiu ryšiu. Toliau pateikti pavyzdžiai reiškia, kad jūsų tinklas turi veikiantį DHCP serverį.
Kitu atveju įrenginys negaus IP adreso. „Wi -Fi“palaikymas yra prieinamas kiekviename „Moduino“. Ethernet prievadas yra galimybė, o ne visi įrenginiai jį turi.
1) „Moduino ESP32“
Prisijungimas prie „WiFi“
Įrenginyje vykdykite šias komandas:
iš „netWiFi“importo netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
Pakeiskite ESSID savo „WiFi“tinklo pavadinimu, o PASS - jo slaptažodžiu.
Praėjus kuriam laikui po pradžios (), turėtumėte gauti IP adresą, priskirtą jūsų įrenginiui.
Prisijungimas prie eterneto tinklo
Prijunkite įrenginį prie laidinio tinklo eterneto kabeliu.
Tada vykdykite šias komandas:
iš netETH importo netETHeth = netETH () eth.start ()
Praėjus kuriam laikui po pradžios (), turėtumėte gauti IP adresą, kuris buvo priskirtas jūsų įrenginiui.
2) „Moduino Pycom“
Prisijunkite prie „WiFi“
Įrenginyje vykdykite šias komandas:
iš tinklo importo WLANwlan = WLAN (režimas = WLAN. STA), auth = (net.sec, 'PASS'), timeout = 5000), o ne wlan.isconnected (): machine.idle () print ('WLAN ryžtas pavyko!') pertrauka
Pakeiskite ESSID savo „WiFi“tinklo pavadinimu, o PASS - jo slaptažodžiu.
6 veiksmas: inicijuokite ryšį su „Modbus Slave“
Abiejų įrenginių „Modbus Master“bibliotekos yra panašios
Jie skiriasi inicializuojant.
1) Inicijuokite „uModBus“naudodami „Moduino ESP32“
Vykdyti:
iš uModBusTCP importuokite uModBusTCP kaip TCP
2) Inicijuokite „uModBus“„Pycom“
Vykdyti:
iš uModbus.tcp importuoti TCP
Atviras ryšys
Tada atidarykite ryšį su:
modbus = TCP ('IP', PORT, 60)
kur:
- Jūsų kompiuterio IP adresas su „Modbus Slave“simuliatoriumi
- Uostas - „Modbus Slave“uostas
- 60 yra skirtasis laikas
Jei vykdant skaitymo/rašymo komandas įvyksta ši klaida: PAVYZDYS
vykdyti:
„Moduino ESP32“:
modbus.close ()
„Moduino Pycom“:
modbus._sock.close ()
ir tada atkurti ryšį:
modbus = TCP ('IP', PORT, 60)
Tai svarbu uždaryti lizdą prieš atkuriant ryšį. Įrenginys turi ribotą turimą lizdo jungties kiekį.
7 žingsnis: skaitykite ir rašykite registrus
„Modbus“palaiko kelias registrų skaitymo ir rašymo funkcijas.
„uModBus“bibliotekoje yra kiekvienos funkcijos metodas:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- write_single_register
Pirma, parašykime keletą vertybių.
1) Rašykite ritinius (funkcija: 5)
Įrašykite 1 reikšmę į 200 registrą iš 1 vergo:
modbus.write_single_coil (1, 200, 0xFF00)
Pirmasis argumentas yra vergo ID, mūsų atveju 1.
Antrasis yra registro numeris, o jūsų - vertė. Norėdami gauti 1, čia turite įdėti 0xFF00. Parašykite nuo 0 iki 201 registrą iš 1 vergo:
modbus.write_single_coil (1, 201, 0)
Šis metodas leidžia rašyti tik logines reikšmes: 0 arba 1.
2) Rašykite registrus (func: 6)
Dabar į keletą registrų įrašykite keletą sveikų skaičių reikšmių.
Parašykite pasirašytą 111 reikšmę, kad užregistruotumėte 100 iš 1 vergo:
modbus.write_single_register (1, 100, 111, tiesa)
Pirmasis argumentas yra vergo ID, antrasis registro numeris, o trečiasis - nauja vertė. Paskutinis argumentas apibrėžia, ar vertė turėtų būti nustatyta kaip pasirašytas skaičius. Numatytoji vertė yra „True“. Jums nereikia jo nustatyti.
Įrašykite pasirašytą reikšmę -457 į 101 registrą iš 1 vergo:
modbus.write_single_register (1, 101, -457)
Įrašykite nepasirašytą 50 reikšmę į 100 registrą iš 3 vergo:
modbus.write_single_register (3, 100, 50, klaidinga)
Šis metodas leidžia surašyti sveikų skaičių reikšmes į vieną registrą.
Viename registre gali būti 16 bitų reikšmių.
Metodas grąžina „True“- įvesties vertė yra teisinga, o jei ne - „False“. Vertė rašoma, net jei ji neteisinga (per didelė registrui)
3) Skaitykite ritinius/atskirus įėjimus
Dabar skaitykime parašytas logines vertes. Norėdami perskaityti registrą naudodami 1 funkcijos skaitymo ritę, vykdykite:
modbus.read_coils (slaveId, register, count) [0: count]
Norėdami perskaityti registrą su 2 funkcija skaityti atskirą įvestį, vykdykite:
modbus.read_discrete_inputs (slaveId, register, count) [0: count]
kur:
- slave -id - virtualaus vergo ID (Slave simulator priima visus galiojančius ID)
- registras - registro numeris skaitymui
- skaičius - registrų skaičius, kurį reikia perskaityti (į abi vietas įdėkite norimą kiekį)
Šie metodai grąžina masyvą su loginėmis reikšmėmis. Kiekviena vertė atitinka kiekvieną registrą.
Fragmentas: [0: count] reikalingas, nes šis metodas grąžina daugiau reikšmių nei skaičius. Jis visada pateikia reikšmių sumą, kuri dalijasi iš 8. Papildomos vertės yra klaidingos ir neatitinka jokio registro.
Skaitykite mūsų logines vertes abiem būdais:
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
Rezultatas bus toks: PAVYZDYS
Tiesa nurodo 1 reikšmę, klaidinga - 0.
4) Skaitykite registrus
Dabar skaitykite reikšmes iš registrų, parašytų naudojant 6 funkciją.
Norėdami skaityti registrus su 3 funkcijos skaitymo registrais, vykdykite:
modbus.read_holding_registers (slaveId, register, count, pasirašytas = tiesa)
Norėdami skaityti registrus su 4 funkcijos skaitymo įvesties registrais, vykdykite:
modbus.read_input_registers (slaveId, register, count, pasirašytas = tiesa)
kur:
- slave -id - virtualiojo vergo ID
- registras - registro numeris skaitymui
- count - registrų, kuriuos reikia perskaityti, kiekis
- pasirašytas - nurodo, ar perskaitytos vertės turėtų būti laikomos pasirašytais skaičiais, ar ne. Numatytoji būsena: tiesa
Grąžinimo vertė yra rinkinys su norimu registrų kiekiu.
Skaitykite ankstesniame punkte nustatytus registrus:
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)
Rezultatai turėtų atrodyti šioje ekrano kopijoje: PAVYZDYS
Kitoje pamokoje sužinosite, kaip sukurti „Modbus RTU Master“įrenginyje, kuriame įjungta ESP32.
Rekomenduojamas:
Pramoninis HMI ir „Arduinos“MODBUS RTU: 4 žingsniai
Pramoninis HMI ir „Arduinos“MODBUS RTU: Šioje instrukcijoje aprašysiu komunikacijos pavyzdį tarp pramoninio HMI (COOLMAY MT6070H, 150EUROS), „Arduino CLONE DIY“(10EUROS) ir „Arduino UNO“(10EUROS). Tinklas veiks pagal specialų ir tvirtą ir pramoninį protokolą
„Modbus TCP“ryšys tarp „Arduino“ir pramoninių įrenginių: 3 žingsniai
„Modbus TCP“ryšys tarp „Arduino“ir pramoninių įrenginių: Pramoninis būdas valdyti „Arduino“plokštę su pramoniniu HMI ir susieti ją su pramoniniu tinklu naudojant „Modbus TCP“ryšį
Darbo su ESP32 pradžia - ESP32 plokščių diegimas „Arduino IDE“- ESP32 mirksėjimo kodas: 3 žingsniai
Darbo su ESP32 pradžia | ESP32 plokščių diegimas „Arduino IDE“| ESP32 mirksėjimo kodas: Šioje instrukcijoje pamatysime, kaip pradėti dirbti su esp32 ir kaip įdiegti esp32 plokštes į „Arduino IDE“, ir užprogramuosime esp 32 paleisti mirksėjimo kodą naudojant „arduino ide“
TCP/IP ryšys per GPRS: Kaip siųsti duomenis į serverį naudojant SIM900A modulį: 4 žingsniai
TCP/IP ryšys per GPRS: Kaip siųsti duomenis į serverį naudojant SIM900A modulį: Šiame vadove aš jums pasakysiu, kaip siųsti duomenis į TCP serverį naudojant sim900 modulį. Taip pat pamatysime, kaip galime gauti duomenis iš serverio į klientą (GSM modulis)
Skaitiklis PZEM-004 + ESP8266 ir platformos IoT mazgas-RED & Modbus TCP/IP: 7 žingsniai
Skaitiklis PZEM-004 + ESP8266 ir platforma „IoT Node-RED“ir „Modbus TCP/IP“: pasinaudodami šia galimybe, mes integruosime savo aktyviosios galios matuoklį arba elektros energijos suvartojimą, „Pzem-004-Peacefair“su ankstesnėse pamokose naudota „IoT Node-RED“integravimo platforma, vėliau naudosime ESP8266 modulį, sukonfigūruotą kaip „Modbus TCP / IP slave“