INHOUDSOPGAWE:

ESP32 Modbus Master TCP: 7 stappe
ESP32 Modbus Master TCP: 7 stappe

Video: ESP32 Modbus Master TCP: 7 stappe

Video: ESP32 Modbus Master TCP: 7 stappe
Video: home assistant dashboard untuk monitoring plts untuk rumah 2024, Junie
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

In hierdie klas sal u die ESP32 -verwerker programmeer om Modbus TCP Master te wees.

Ons gebruik twee toestelle wat hierdie verwerker bevat: Moduino ESP32 en Pycom. Beide toestelle werk in die MicroPytthon -omgewing. Ons Modbus Slave sal 'n rekenaar wees met Modbus -simulatorsagteware daarop.

Jy sal nodig hê:

  • Moduino ESP32 of Moduino Pycom -toestel (gaan na hierdie webwerf om meer te wete te kom oor Moduino ESP32 -toestel en dit om die Pycom -toestel na te gaan)
  • PC met Linux -bedryfstelsel
  • RS-232/RS-485-poort in u rekenaar of USB na RS-232/RS-485-omskakelaar

Stap 1: Laai Modbus TCP Slave Simulator af en begin dit

Laai Modbus TCP Slave Simulator af en begin dit
Laai Modbus TCP Slave Simulator af en begin dit

Laai Modbus Slave -simulator af van https://www.modbusdriver.com/diagslave.html. Maak dan die afgelaaide argief oop en pak die weergawe vir Linux -bedryfstelsel uit.

Begin die program vanaf die konsole met -p -argument:

./diagslave -p

is 'n poort waar die Modbus Slave -bediener sal werk. Vir Modbus -protokol is dit standaard 502, maar u kan nog een gebruik.

In Linux -poorte onder 1024 kan nie gebruik word deur programme wat deur 'n gewone gebruiker uitgevoer word nie (nie wortelvoorregte nie).

Onthou watter poort u gebruik. Hierdie waarde sal later nodig wees.

Stap 2: Berei u rekenaar voor om aan te sluit op die toestel

Berei u rekenaar voor om aan te sluit op die toestel
Berei u rekenaar voor om aan te sluit op die toestel

U benodig 'n paar programme om verbinding met die toestel te maak en lêers daarheen te stuur.

Installeer Python -omgewing en pip (as u dit nie het nie):

apt-get installeer python3

apt-get install python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py

Installeer picocom:

apt-get installeer picocom

Hierdie program is nodig om aan te sluit op die toestel en opdragte daarop uit te voer. Installeer mpfshell:

pip installeer mpfshell

Met hierdie program kan u lêers na die toestel stuur.

U kan dit ook uit bronne installeer. Verwys na hierdie bladsy:

Stap 3: Berei die toestel voor en maak daarby verbinding

Berei die toestel voor en koppel daaraan
Berei die toestel voor en koppel daaraan
Berei die toestel voor en koppel daaraan
Berei die toestel voor en koppel daaraan
Berei die toestel voor en koppel daaraan
Berei die toestel voor en koppel daaraan

Om 'n Moduino- of Pycom-toestel aan 'n rekenaar te koppel, benodig u 'n RS-232/RS-485-poort of omskakelaar. Kontroleer die weergawe van u toestel (watter poorttipe dit gebruik) en vind die geskikte poort of omskakelaar.

  1. Koppel die toestel aan 'n rekenaar
  2. Koppel dan die kragtoevoer daaraan

Koppel die toestel aan 'n rekenaar en koppel dan die kragtoevoer daaraan. U kan ook die ethernetkabel aan die Moduino ESP32 koppel (as dit die poort het).

Die verbinding moet wees soos op die foto's hierbo

Soek die pad vir die poort wat gebruik word vir die verbinding van die toestel, byvoorbeeld: /dev /ttyS1, /dev /ttyUSB0.

Vir usb -omsetters bevat die pad USB -woord.

U kan aan die toestel koppel met die picocom -program:

picocom /dev /ttyUSB0 -b 115200

Die opdragprompt van die toestel lyk soos een van die onderstaande beelde.

Moduino ESP32: Sien hier

Moduino Pycom: Sien hier

Stap 4: Laai Modbus -hoofbiblioteek op

Laai die Modbus -hoofbiblioteek op
Laai die Modbus -hoofbiblioteek op

github.com/pycom/pycom-modbus/ Om met Modbus Slave te kommunikeer, benodig u die toepaslike biblioteek. Biblioteke vir Pycom is nie versoenbaar met Moduino nie. Gaan die instruksies na wat aan u toestel voldoen.

Maak picocom toe voordat u lêers stuur: druk Ctrl+A en dan Ctrl+X sleutels.

uModBus-biblioteek vir Moduino ESP32 baseer op pycom-modbus-biblioteek vir Moduino Pycom. Dit is aangepas om op 'n gewone ESP32 -toestel te werk. Dit het ook addisionele naby () metodes vir koppelklasse.

1) Moduino ESP32

Laai die biblioteek af vanaf https://github.com/techbase123/micropython-modbus. Pak die argief uit en stuur al 4 lêers na die Moduino -toestel.

Gebruik mpfshell om dit op te laai. Begin hierdie program in die gids met die lêers.

Koppel aan toestel deur die uitvoering van: DIT

ttyUSB0 is die naam van die seriële poort waar die toestel gekoppel is.

Verander gids na /flash /lib met opdrag:

cd /flits /lib

Plaas alle lêers met opdragte:

plaas uModBusConst.py

sit uModBusFunctions.py sit uModBusTCP.py sit uModBusSerial.py

VOORBEELD

Verlaat dan die konsole met die exit -opdrag en herlaai die toestel met die reset -knoppie.

2) Moduino Pycom

Laai die biblioteek af vanaf https://github.com/pycom/pycom-modbus/. Pak die argief uit en stuur die inhoud van uModbus -gids na die toestel. Gebruik mpfshell om dit op te laai. Begin hierdie program in die gids met die lêers.

Koppel aan die toestel deur die volgende te doen:

maak ttyUSB0 oop

ttyUSB0 is die naam van die seriële poort waar die toestel gekoppel is.

Verander gids na /flash /lib, skep uModbus -gids en voer dit in met opdragte:

cd /flash /libmd uModbus cd uModbus

Plaas alle lêers met opdragte:

sit const.py

sit funksies.py sit tcp.py sit reeks.py

Verlaat dan die konsole met die exit -opdrag en herlaai die toestel met die reset -knoppie.

VOORBEELD

Stap 5: Koppel aan die netwerk

Koppel aan die netwerk
Koppel aan die netwerk

Opdragte om 'n verbinding te bewerkstellig, verskil tussen Moduino en Pycom.

Koppel aan die toestel met picocom om toepaslike opdragte uit te voer. U kan 'n Moduino -toestel via 'n draadlose of draadlose netwerk aan die netwerk koppel. Die volgende voorbeelde veronderstel dat u netwerk 'n werkende DHCP -bediener het.

In ander gevalle kry die toestel geen IP -adres nie. WiFi -ondersteuning is beskikbaar in elke Moduino. Ethernet -poort is 'n opsie, en nie alle toestelle het dit nie.

1) Moduino ESP32

Koppel aan WiFi

Voer die volgende opdragte op die toestel uit:

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

Vervang ESSID met die naam van u WiFi -netwerk en pas dit met die wagwoord daarvan.

Na 'n geruime tyd na die begin () moet u 'n IP -adres kry wat aan u toestel toegeken is.

Koppel aan Ethernet -netwerk

Koppel die toestel aan 'n bedrade netwerk met 'n ethernet -kabel.

Voer dan die volgende opdragte uit:

vanaf netETH invoer netETHeth = netETH () eth.start ()

Na 'n geruime tyd na die begin () moet u 'n IP -adres kry wat aan u toestel toegeken is.

2) Moduino Pycom

Koppel aan WiFi

Voer die volgende opdragte op die toestel uit:

vanaf netwerkinvoer WLANwlan = WLAN (modus = WLAN. STA) nette = wlan.scan () vir net in nette: as net.ssid == 'ESSID': print ('Netwerk gevind!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), time -out = 5000) terwyl dit nie wlan.isconnected () is: machine.idle () print ('WLAN -verbinding slaag!') breek

Vervang ESSID met die naam van u WiFi -netwerk en pas dit met die wagwoord daarvan.

Stap 6: Initialiseer kommunikasie met Modbus Slave

Initialiseer kommunikasie met Modbus Slave
Initialiseer kommunikasie met Modbus Slave

Modbus Master -biblioteke is op beide toestelle soortgelyk

Hulle wissel in initialisering.

1) Initialiseer uModBus op Moduino ESP32

Voer uit:

invoer uModBusTCP as TCP vanaf uModBusTCP

2) Begin uModBus op Pycom

Voer uit:

vanaf uModbus.tcp invoer TCP

Oop verbinding

Open dan die verbinding met:

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

waar:

  • IP - ip -adres van u rekenaar met Modbus Slave -simulator
  • PORT - hawe van Modbus Slave
  • 60 is 'n time -out

As die volgende fout tydens die uitvoer van lees-/skryfopdragte voorkom: VOORBEELD

uitvoer:

vir Moduino ESP32:

modbus.close ()

vir Moduino Pycom:

modbus._sock.close ()

en herskep dan die verbinding:

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

Dit is belangrik om die aansluiting te sluit voordat die verbinding weer gemaak word.

Stap 7: Lees en skryf registers

Lees en skryf registers
Lees en skryf registers

Modbus ondersteun verskeie funksies om registers te lees en te skryf.

uModBus -biblioteek het 'n metode vir elke funksie:

  1. read_ coils
  2. lees_diskrete_invoer
  3. lees_hou_registers
  4. read_input_registers
  5. skryf_enkel_spoel
  6. skryf_ enkel_register

Laat ons eerstens 'n paar waardes skryf.

1) Skryf spoele (funksie: 5)

Skryf 1 waarde tot 200 register van slaaf 1:

modbus.write_single_coil (1, 200, 0xFF00)

Die eerste argument is vir slawe -ID, in ons geval 1.

Tweedens is registernommer en thirs is 'n waarde. Vir 1 moet u 0xFF00 hier plaas. Skryf 0 tot 201 register van slaaf 1:

modbus.write_single_coil (1, 201, 0)

Met hierdie metode kan slegs boolese waardes geskryf word: 0 of 1.

2) Skryf registers (funksie: 6)

Skryf nou 'n paar heelgetalwaardes in verskeie registers.

Skryf ondertekende 111 -waarde om 100 van slaaf 1 te registreer:

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

Eerste argument is slawe -ID, tweede registernommer en derde is nuwe waarde. Laaste argument definieer of waarde as getekende nommer gestel moet word. Die standaardwaarde daarvoor is True. U hoef dit nie te stel nie.

Skryf ondertekende -457 waarde na 101 register van slaaf 1:

modbus.write_single_register (1, 101, -457)

Skryf nie getekende 50 waarde tot 100 register van slaaf 3:

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

Met hierdie metode kan heelgetalwaardes in enkele register geskryf word.

Enkele register kan 16 biswaardes bevat.

Metode gee terug Waar is invoerwaarde geldig en onwaar indien nie. Waarde word geskryf, selfs al is dit ongeldig (te groot vir register)

3) Lees spoele/diskrete insette

Laat ons nou geskrewe Booleaanse waardes lees. Om die register met funksie 1 te lees, voer die spoel uit:

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

Om die register met funksie 2 te lees, lees die diskrete invoer:

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

waar:

  • slave -id - id van virtuele slaaf (Slave -simulator aanvaar alle geldige ID's)
  • registreer - registreer nommer vir lees
  • telling - aantal registers wat gelees moet word (plaas die gewenste hoeveelheid op beide plekke)

Hierdie metodes gee skikking terug met boolese waardes. Elke waarde stem ooreen met elke register.

Die fragment: [0: telling] is nodig, want hierdie metode gee meer waardes as telling. Dit gee altyd die hoeveelheid waardes terug wat deelbaar is met 8. Bykomende waardes is onwaar en stem nie ooreen met enige register nie.

Lees ons boolese waardes met beide metodes:

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

Die resultaat sal soos volg wees: VOORBEELD

Waar verwys na 1 waarde, onwaar na 0.

4) Lees registers

Lees nou waardes uit registers wat met 6 funksies geskryf is.

Om registers met funksie 3 te lees lees houregisters, voer:

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

Om registers met funksie 4 leesinvoerregisters te lees, voer die volgende uit:

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

waar:

  • slave -id - id van virtuele slaaf
  • registreer - registreer nommer vir lees
  • tel - hoeveelheid registers wat gelees moet word
  • onderteken - dui aan of leeswaardes as getekende getalle behandel moet word of nie. Verstekstaat: Waar

Opbrengswaarde is 'n tupel met die gewenste hoeveelheid registers.

Lees die registers wat in die vorige punt gestel is:

modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, Onwaar) modbus.read_input_registers (3, 100, 1, vals)

Uitslae behoort soos in hierdie skermkiekie te lyk: VOORBEELD

In die volgende les leer u hoe u Modbus RTU Master op 'n ESP32-toestel kan skep.

Aanbeveel: