Turinys:

ESP32 „Modbus Master TCP“: 7 žingsniai
ESP32 „Modbus Master TCP“: 7 žingsniai

Video: ESP32 „Modbus Master TCP“: 7 žingsniai

Video: ESP32 „Modbus Master TCP“: 7 žingsniai
Video: Download Strategy Modbus TCP IP Master in PAC Project Basic Opto22 : PDAControl 2024, Birželis
Anonim
ESP32 „Modbus Master TCP“
ESP32 „Modbus Master TCP“

Š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 ir paleiskite „Modbus TCP Slave Simulator“
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

Paruoškite kompiuterį prisijungti prie įrenginio
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

Paruoškite įrenginį ir prisijunkite prie jo
Paruoškite įrenginį ir prisijunkite prie jo
Paruoškite įrenginį ir prisijunkite prie jo
Paruoškite įrenginį ir prisijunkite prie jo
Paruoškite įrenginį ir prisijunkite prie jo
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į.

  1. Prijunkite įrenginį prie kompiuterio
  2. 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ą

Įkelkite „Modbus“pagrindinę biblioteką
Į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

Prisijunkite prie tinklo
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“

Inicijuokite ryšį su „Modbus Slave“
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

Skaitykite ir rašykite registrus
Skaitykite ir rašykite registrus

„Modbus“palaiko kelias registrų skaitymo ir rašymo funkcijas.

„uModBus“bibliotekoje yra kiekvienos funkcijos metodas:

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