Sisällysluettelo:

ESP32 Modbus Master TCP: 7 vaihetta
ESP32 Modbus Master TCP: 7 vaihetta

Video: ESP32 Modbus Master TCP: 7 vaihetta

Video: ESP32 Modbus Master TCP: 7 vaihetta
Video: Работа с Modbus RTU/TCP. Примеры проектов. 2024, Marraskuu
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Tällä luokalla ohjelmoit ESP32 -prosessorin Modbus TCP Master -laitteeksi.

Käytämme kahta laitetta, jotka sisältävät tämän prosessorin: Moduino ESP32 ja Pycom. Molemmat laitteet toimivat MicroPytthon -ympäristössä. Modbus -orjamme on PC -tietokone, jossa on käynnissä Modbus -simulaattoriohjelmisto.

Tarvitset:

  • Moduino ESP32- tai Moduino Pycom -laite (tarkista tämä sivusto saadaksesi lisätietoja Moduino ESP32 -laitteesta ja tämä Pycom -laitteen tarkistamisesta)
  • PC Linux -käyttöjärjestelmällä
  • Tietokoneen RS-232/RS-485-portti tai USB-RS-232/RS-485-muunnin

Vaihe 1: Lataa ja käynnistä Modbus TCP Slave Simulator

Lataa ja käynnistä Modbus TCP Slave Simulator
Lataa ja käynnistä Modbus TCP Slave Simulator

Lataa Modbus Slave -simulaattori osoitteesta https://www.modbusdriver.com/diagslave.html. Avaa sitten ladattu arkisto ja pura Linux -käyttöjärjestelmän versio.

Suorita ohjelma konsolista -p -argumentilla:

./diagslave -p

on portti, jossa Modbus Slave -palvelin toimii. Modbus -protokollassa se on oletuksena 502, mutta voit käyttää toista.

Linux -porteissa alle 1024 ei voi käyttää tavallisen käyttäjän suorittamia ohjelmia (ei pääkäyttäjän oikeuksia).

Muista mitä porttia käytät. Tämä arvo on tarpeen myöhemmin.

Vaihe 2: Valmistele tietokone yhdistämään laite

Valmistele tietokone yhdistämään laite
Valmistele tietokone yhdistämään laite

Tarvitset joitain ohjelmia yhteyden muodostamiseen laitteeseen ja tiedostojen lähettämiseen siihen.

Asenna Python -ympäristö ja pip (jos sinulla ei ole sitä):

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

Asenna picocom:

apt-get install picocom

Tätä ohjelmaa tarvitaan yhteyden muodostamiseen laitteeseen ja komentojen suorittamiseen siinä.

pip asenna mpfshell

Tämän ohjelman avulla voit lähettää tiedostoja laitteelle.

Voit asentaa sen myös lähteistä. Katso tämä sivu:

Vaihe 3: Valmistele laite ja muodosta yhteys siihen

Valmistele laite ja muodosta yhteys siihen
Valmistele laite ja muodosta yhteys siihen
Valmistele laite ja muodosta yhteys siihen
Valmistele laite ja muodosta yhteys siihen
Valmistele laite ja muodosta yhteys siihen
Valmistele laite ja muodosta yhteys siihen

Liittääksesi Moduino- tai Pycom-laitteen tietokoneeseen tarvitset RS-232/RS-485-portin tai muuntimen. Tarkista laitteen versio (mitä porttityyppiä se käyttää) ja etsi sopiva portti tai muunnin.

  1. Liitä laite tietokoneeseen
  2. Liitä sitten virtalähde siihen

Liitä laite tietokoneeseen ja kytke sitten virtalähde siihen. Voit myös liittää ethernet -kaapelin Moduino ESP32: een (jos siinä on kyseinen portti).

Yhteyden pitäisi olla kuten yllä olevissa kuvissa

Etsi laiteyhteyttä varten käytettävän portin polku, esimerkiksi: /dev /ttyS1, /dev /ttyUSB0.

USB -muuntimien polku sisältää USB -sanan.

Voit muodostaa yhteyden laitteeseen picocom -ohjelmalla:

picocom /dev /ttyUSB0 -b 115200

Laitteen komentorivi näyttää samanlaiselta kuin yksi alla olevista kuvista.

Moduino ESP32: Katso tästä

Moduino Pycom: Katso tästä

Vaihe 4: Lataa Modbus Master Library

Lataa Modbus Master Library
Lataa Modbus Master Library

github.com/pycom/pycom-modbus/Kommunikoidaksesi Modbus Slaven kanssa tarvitset asianmukaisen kirjaston. Pycom -kirjastot eivät ole yhteensopivia Moduinon kanssa. Tarkista laitteesi mukaiset ohjeet.

Sulje picocom ennen tiedostojen lähettämistä: paina Ctrl+A ja sitten Ctrl+X.

uModBus-kirjasto Moduino ESP32: lle perustuu pycom-modbus-kirjastoon Moduino Pycomille. Se on muutettu toimimaan tavallisella ESP32 -laitteella. Siinä on myös muita close () -menetelmiä liitinluokille.

1) Moduino ESP32

Lataa kirjasto osoitteesta https://github.com/techbase123/micropython-modbus. Pura arkisto pakkauksesta ja lähetä kaikki 4 tiedostoa Moduino -laitteeseen.

Lataa ne mpfshellillä. Suorita tämä ohjelma hakemistossa kyseisten tiedostojen kanssa.

Yhdistä laitteeseen suorittamalla: TÄMÄ

ttyUSB0 on sarjaportin nimi, johon laite on kytketty.

Vaihda hakemistoon /flash /lib komennolla:

cd /flash /lib

Laita kaikki tiedostot komennoilla:

laita uModBusConst.py

laita uModBusFunctions.py laita uModBusTCP.py laita uModBusSerial.py

ESIMERKKI

Poistu sitten konsolista exit -komennolla ja käynnistä laite uudelleen Reset -painikkeella.

2) Moduino Pycom

Lataa kirjasto osoitteesta https://github.com/pycom/pycom-modbus/. Pura arkisto pakkauksesta ja lähetä laitteeseen uModbus -hakemiston sisältö. Lataa ne käyttämällä mpfshelliä. Suorita tämä ohjelma hakemistossa kyseisten tiedostojen kanssa.

Yhdistä laitteeseen suorittamalla:

avaa ttyUSB0

ttyUSB0 on sarjaportin nimi, johon laite on kytketty.

Vaihda hakemistoon /flash /lib, luo uModbus -hakemisto ja anna se komennoilla:

cd /flash /libmd uModbus cd uModbus

Laita kaikki tiedostot komennoilla:

laita const.py

laita toimintoja.py laita tcp.py laita sarja.py

Poistu sitten konsolista exit -komennolla ja käynnistä laite uudelleen Reset -painikkeella.

ESIMERKKI

Vaihe 5: Muodosta yhteys verkkoon

Yhdistä verkkoon
Yhdistä verkkoon

Yhteydet muodostavat komennot eroavat Moduinon ja Pycomin välillä.

Yhdistä laitteeseen picocomilla suorittaaksesi asianmukaiset komennot. Voit yhdistää Moduino -laitteen verkkoon langallisesti tai langattomasti. Seuraavissa esimerkeissä oletetaan, että verkossa on toimiva DHCP -palvelin.

Muussa tapauksessa laite ei saa IP -osoitetta. Wi -Fi -tuki on saatavana jokaisessa Moduinossa. Ethernet -portti on vaihtoehto, eikä kaikilla laitteilla ole sitä.

1) Moduino ESP32

Yhdistetään WiFi -verkkoon

Suorita seuraavat komennot laitteessa:

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

Korvaa ESSID WiFi -verkon nimellä ja PASS sen salasanalla.

Jonkin ajan kuluttua käynnistyksen () suorittamisesta sinun pitäisi saada laitteellesi määritetty IP -osoite.

Yhteyden muodostaminen Ethernet -verkkoon

Yhdistä laite langalliseen verkkoon ethernet -kaapelilla.

Suorita sitten seuraavat komennot:

netETH -tuonnista netETHeth = netETH () eth.start ()

Jonkin ajan kuluttua käynnistyksen () suorittamisesta sinun pitäisi saada laitteellesi määritetty IP -osoite.

2) Moduino Pycom

Yhdistä WiFi -verkkoon

Suorita seuraavat komennot laitteessa:

verkon tuonnista WLANwlan = WLAN (tila = WLAN. STA) nets = wlan.scan () nettoverkkoon: jos net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) kun ei wlan.isconnected (): machine.idle () print ('WLAN -yhteys onnistui!') tauko

Korvaa ESSID WiFi -verkon nimellä ja PASS sen salasanalla.

Vaihe 6: Alusta tiedonsiirto Modbus Slave -laitteen kanssa

Alusta tiedonsiirto Modbus Slave -laitteen kanssa
Alusta tiedonsiirto Modbus Slave -laitteen kanssa

Modbus Master -kirjastot ovat samanlaisia molemmille laitteille

Ne vaihtelevat alustuksessa.

1) Alusta uModBus Moduino ESP32 -laitteessa

Suorittaa:

uModBusTCP: stä tuo uModBusTCP TCP: nä

2) Alusta uModBus Pycomissa

Suorittaa:

alkaen uModbus.tcp tuonti TCP

Avaa yhteys

Avaa sitten yhteys:

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

missä:

  • PC: n IP -osoite Modbus Slave -simulaattorilla
  • PORT - Modbus Slave -portti
  • 60 on aikakatkaisu

Jos luku-/kirjoituskomentojen suorittamisen aikana tapahtuu seuraava virhe: EXAMPLE

suorittaa:

Moduino ESP32:

modbus.close ()

Moduino Pycomille:

modbus._sock.close ()

ja luo sitten yhteys uudelleen:

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

Tämä on tärkeää sulkea pistorasia ennen yhteyden luomista uudelleen.

Vaihe 7: Lue ja kirjoita rekisterit

Lue ja kirjoita rekisterit
Lue ja kirjoita rekisterit

Modbus tukee useita toimintoja rekisterien lukemiseen ja kirjoittamiseen.

uModBus -kirjastossa on menetelmä kullekin toiminnolle:

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

Kirjoita ensin arvot.

1) Kirjoita kelat (funktio: 5)

Kirjoita 1 arvo 200 rekisteriin orjasta 1:

modbus.write_single_coil (1, 200, 0xFF00)

Ensimmäinen argumentti koskee orjatunnusta, meidän tapauksessamme 1.

Toinen on rekisterinumero ja thirs on arvo. Jos haluat yhden, sinun on laitettava 0xFF00 tähän. Kirjoita 0 - 201 rekisteri orjasta 1:

modbus.write_single_coil (1, 201, 0)

Tämä menetelmä sallii vain boolen arvojen kirjoittamisen: 0 tai 1.

2) Kirjoita rekisterit (func: 6)

Kirjoita nyt joitakin kokonaislukuarvoja useisiin rekistereihin.

Kirjoita allekirjoitettu 111 -arvo rekisteröidäksesi 100 orjasta 1:

modbus.write_single_register (1, 100, 111, tosi)

Ensimmäinen argumentti on orjatunnus, toinen rekisterinumero ja kolmas on uusi arvo. Viimeinen argumentti määrittää, onko arvo asetettava allekirjoitettuun numeroon. Sen oletusarvo on True. Sinun ei tarvitse asettaa sitä.

Kirjoita allekirjoitettu -457 -arvo 101 rekisteriin orjasta 1:

modbus.write_single_register (1, 101, -457)

Kirjoita ei -allekirjoitettu 50 -arvo 100 -rekisteriin orjasta 3:

modbus.write_single_register (3, 100, 50, epätosi)

Tämä menetelmä mahdollistaa kokonaislukuarvojen kirjoittamisen yhteen rekisteriin.

Yksi rekisteri voi sisältää 16 bitin arvoja.

Menetelmä palauttaa True on, että syöttöarvo on kelvollinen ja epätosi, jos ei. Arvo kirjoitetaan, vaikka se olisi virheellinen (liian suuri rekisterille)

3) Lue kelat/erilliset tulot

Nyt luetaan kirjoitetut boolen arvot. Jos haluat lukea rekisterin toiminnon 1 lukukelalla, suorita:

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

Jos haluat lukea rekisterin toiminnolla 2, lue erillinen tulo, suorita:

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

missä:

  • slave -id - virtuaalisen orjan tunnus (orjasimulaattori hyväksyy kaikki kelvolliset tunnukset)
  • rekisteri - rekisterinumero lukemista varten
  • count - luettavien rekisterien määrä (laita haluttu määrä molempiin paikkoihin)

Nämä menetelmät palauttavat matriisin, jossa on totuusarvot. Jokainen arvo vastaa kutakin rekisteriä.

Fragmentti: [0: count] tarvitaan, koska tämä menetelmä palauttaa enemmän arvoja kuin count. Se palauttaa aina arvojen määrän, joka on jaollinen kahdeksalla. Lisäarvot ovat vääriä eivätkä vastaa mitään rekisteriä.

Lue boolen arvot molemmilla tavoilla:

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

Tulos on seuraavanlainen: ESIMERKKI

Tosi viittaa 1 arvoon, epätosi 0: een.

4) Lue rekistereitä

Lue nyt arvot rekistereistä, jotka on kirjoitettu 6 -funktiolla.

Jos haluat lukea rekistereitä, joilla on toiminto 3 lukutilarekisterit, suorita:

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

Jos haluat lukea rekisterit, joilla on toiminto 4 lukutulorekisterit, suorita:

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

missä:

  • slave -id - virtuaalisen orjan tunnus
  • rekisteri - rekisterinumero lukemista varten
  • count - luettavien rekisterien määrä
  • allekirjoitettu - osoittaa, pitääkö luetut arvot allekirjoitettuina numeroina vai ei. Oletustila: Totta

Palautusarvo on kortti, jossa on haluttu määrä rekistereitä.

Lue edellisessä kohdassa asetetut rekisterit:

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)

Tulosten pitäisi näyttää tältä kuvakaappaukselta: EXAMPLE

Seuraavalla oppitunnilla opit luomaan Modbus RTU Masterin ESP32-yhteensopivalla laitteella.

Suositeltava: