Satura rādītājs:

ESP32 Modbus Master TCP: 7 soļi
ESP32 Modbus Master TCP: 7 soļi

Video: ESP32 Modbus Master TCP: 7 soļi

Video: ESP32 Modbus Master TCP: 7 soļi
Video: Работа с Modbus RTU/TCP. Примеры проектов. 2024, Jūnijs
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Šajā klasē jūs ieprogrammēsit ESP32 procesoru kā Modbus TCP Master.

Mēs izmantosim divas ierīces, kurās ir šis procesors: Moduino ESP32 un Pycom. Abas ierīces darbojas MicroPytthon vidē. Mūsu Modbus Slave būs dators ar Modbus simulatora programmatūru.

Jums būs nepieciešams:

  • Moduino ESP32 vai Moduino Pycom ierīce (pārbaudiet šo vietni, lai uzzinātu vairāk par Moduino ESP32 ierīci un šo, lai pārbaudītu Pycom ierīci)
  • Dators ar Linux operētājsistēmu
  • RS-232/RS-485 ports datorā vai USB uz RS-232/RS-485 pārveidotājs

1. darbība: lejupielādējiet un palaidiet Modbus TCP vergu simulatoru

Lejupielādējiet un palaidiet Modbus TCP vergu simulatoru
Lejupielādējiet un palaidiet Modbus TCP vergu simulatoru

Lejupielādējiet Modbus Slave simulatoru no https://www.modbusdriver.com/diagslave.html. Pēc tam atveriet lejupielādēto arhīvu un izpakojiet Linux operētājsistēmas versiju.

Palaidiet programmu no konsoles ar argumentu -p:

./diagslave -p

ir ports, kurā darbosies Modbus Slave serveris. Modbus protokolam tas pēc noklusējuma ir 502, bet jūs varat izmantot citu.

Linux portos zem 1024 nevar izmantot programmas, kuras darbojas no parastā lietotāja (nevis saknes privilēģijas).

Atcerieties, kuru portu izmantojat. Šī vērtība būs nepieciešama vēlāk.

2. darbība: sagatavojiet datoru savienošanai ar ierīci

Sagatavojiet datoru savienošanai ar ierīci
Sagatavojiet datoru savienošanai ar ierīci

Lai izveidotu savienojumu ar ierīci un nosūtītu failus, jums būs nepieciešamas dažas programmas.

Instalējiet Python vidi un pip (ja jums tās nav):

apt-get instalēt python3

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

Instalējiet picocom:

apt-get instalēt picocom

Šī programma ir nepieciešama, lai izveidotu savienojumu ar ierīci un izpildītu tajā komandas. Instalējiet mpfshell:

pip instalējiet mpfshell

Šī programma ļauj nosūtīt failus uz ierīci.

Varat to instalēt arī no avotiem. Skatiet šo lapu:

3. darbība: sagatavojiet ierīci un izveidojiet savienojumu ar to

Sagatavojiet ierīci un izveidojiet savienojumu ar to
Sagatavojiet ierīci un izveidojiet savienojumu ar to
Sagatavojiet ierīci un izveidojiet savienojumu ar to
Sagatavojiet ierīci un izveidojiet savienojumu ar to
Sagatavojiet ierīci un izveidojiet savienojumu ar to
Sagatavojiet ierīci un izveidojiet savienojumu ar to

Lai savienotu Moduino vai Pycom ierīci ar datoru, nepieciešams RS-232/RS-485 ports vai pārveidotājs. Pārbaudiet savas ierīces versiju (kāda porta veidu tā izmanto) un atrodiet atbilstošo portu vai pārveidotāju.

  1. Savienojiet ierīci ar datoru
  2. Pēc tam pievienojiet barošanas avotu

Pievienojiet ierīci datoram un pēc tam pievienojiet barošanas avotu. Varat arī pieslēgt Ethernet kabeli Moduino ESP32 (ja tam ir šis ports).

Savienojumam jābūt tādam kā iepriekš redzamajos fotoattēlos

Atrodiet porta ceļu, kas tiek izmantots ierīces savienošanai. Tas var būt, piemēram: /dev /ttyS1, /dev /ttyUSB0.

USB pārveidotājiem ceļš saturēs USB vārdu.

Jūs varat izveidot savienojumu ar ierīci, izmantojot picocom programmu:

picocom /dev /ttyUSB0 -b 115200

Ierīces komandu uzvedne izskatās līdzīga vienam no šiem attēliem zemāk.

Moduino ESP32: skatiet šeit

Moduino Pycom: skatiet šeit

4. darbība: augšupielādējiet Modbus galveno bibliotēku

Augšupielādējiet Modbus galveno bibliotēku
Augšupielādējiet Modbus galveno bibliotēku

Lai sazinātos ar Modbus Slave, jums ir nepieciešama atbilstoša bibliotēka. Pycom bibliotēkas nav saderīgas ar Moduino. Pārbaudiet norādījumus, kas atbilst jūsu ierīcei.

Pirms failu nosūtīšanas aizveriet picocom: nospiediet Ctrl+A un pēc tam Ctrl+X taustiņus.

uModBus bibliotēka Moduino ESP32 balstās uz pycom-modbus bibliotēku Moduino Pycom. Tas ir pārveidots, lai darbotos parastā ESP32 ierīcē. Tam ir arī papildu aizvēršanas () metodes savienotāju klasēm.

1) Moduino ESP32

Lejupielādējiet bibliotēku no vietnes https://github.com/techbase123/micropython-modbus. Izsaiņojiet arhīvu un nosūtiet visus 4 failus uz Moduino ierīci.

Lai tos augšupielādētu, izmantojiet mpfshell. Palaidiet šo programmu direktorijā ar šiem failiem.

Izveidojiet savienojumu ar ierīci, izpildot: ŠIS

ttyUSB0 ir seriālā porta nosaukums, kurā ierīce ir pievienota.

Mainiet direktoriju uz /flash /lib ar komandu:

cd /flash /lib

Ievietojiet visus failus ar komandām:

ielieciet uModBusConst.py

ielieciet uModBusFunctions.py ielieciet uModBusTCP.py ielieciet uModBusSerial.py

PIEMĒRS

Pēc tam izejiet no konsoles ar komandu exit un restartējiet ierīci ar pogu Reset.

2) Moduino Pycom

Lejupielādējiet bibliotēku no vietnes https://github.com/pycom/pycom-modbus/. Izpakojiet arhīvu un nosūtiet ierīcē uModbus direktorija saturu. Lai tos augšupielādētu, izmantojiet mpfshell. Palaidiet šo programmu direktorijā ar šiem failiem.

Izveidojiet savienojumu ar ierīci, izpildot:

atveriet ttyUSB0

ttyUSB0 ir seriālā porta nosaukums, kurā ierīce ir pievienota.

Mainiet direktoriju uz /flash /lib, izveidojiet uModbus direktoriju un ievadiet to ar komandām:

cd /flash /libmd uModbus cd uModbus

Ievietojiet visus failus ar komandām:

ielieciet const.py

ielieciet funkcijas.py ielieciet tcp.py ielieciet serial.py

Pēc tam izejiet no konsoles ar komandu exit un restartējiet ierīci ar pogu Reset.

PIEMĒRS

5. darbība: izveidojiet savienojumu ar tīklu

Izveidojiet savienojumu ar tīklu
Izveidojiet savienojumu ar tīklu

Komandas, lai izveidotu savienojumu, starp Moduino un Pycom atšķiras.

Izveidojiet savienojumu ar ierīci, izmantojot picocom, lai izpildītu atbilstošās komandas. Moduino ierīci var savienot ar tīklu, izmantojot vadu vai bezvadu. Turpmākajos piemēros tiek pieņemts, ka jūsu tīklā ir strādājošs DHCP serveris.

Citā gadījumā ierīce nesaņems IP adresi. Wi -Fi atbalsts ir pieejams katrā Moduino. Ethernet ports ir iespēja, un ne visās ierīcēs tas ir pieejams.

1) Moduino ESP32

Savienojuma izveide ar WiFi

Ierīcē izpildiet šādas komandas:

no netWiFi importēšana netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

Aizstājiet ESSID ar sava WiFi tīkla nosaukumu un PASS ar tā paroli.

Pēc kāda laika pēc start () izpildes jums vajadzētu iegūt jūsu ierīcei piešķirto IP adresi.

Savienojuma izveide ar Ethernet tīklu

Pievienojiet ierīci vadu tīklam, izmantojot Ethernet kabeli.

Pēc tam izpildiet šādas komandas:

no netETH importa netETHeth = netETH () eth.start ()

Pēc kāda laika pēc start () izpildes jums vajadzētu iegūt jūsu ierīcei piešķirto IP adresi.

2) Moduino Pycom

Izveidojiet savienojumu ar WiFi

Ierīcē izpildiet šādas komandas:

no tīkla importēšanas WLANwlan = WLAN (režīms = WLAN. STA) nets = wlan.scan () tīklam tīklos: ja net.ssid == 'ESSID': drukāt ('Tīkls atrasts!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), taimauts = 5000), kamēr nav wlan.isconnected (): machine.idle () print ('WLAN savienojums izdevies!') pārtraukums

Aizstājiet ESSID ar sava WiFi tīkla nosaukumu un PASS ar tā paroli.

6. darbība: inicializējiet saziņu ar Modbus Slave

Inicializējiet saziņu ar Modbus Slave
Inicializējiet saziņu ar Modbus Slave

Modbus Master bibliotēkas abām ierīcēm ir līdzīgas

Tās atšķiras inicializācijas laikā.

1) Inicializējiet uModBus, izmantojot Moduino ESP32

Izpildīt:

no uModBusTCP importējiet uModBusTCP kā TCP

2) Inicializējiet uModBus vietnē Pycom

Izpildīt:

no uModbus.tcp importēt TCP

Atvērt savienojumu

Pēc tam atveriet savienojumu ar:

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

kur:

  • Jūsu datora IP adrese ar Modbus Slave simulatoru
  • Osta - Modbus Slave osta
  • 60 ir taimauts

Ja, izpildot lasīšanas/rakstīšanas komandas, rodas šāda kļūda: PIEMĒRS

izpildīt:

Moduino ESP32:

modbus.close ()

Moduino Pycom:

modbus._sock.close ()

un pēc tam atjaunojiet savienojumu:

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

Tas ir svarīgi, lai slēgtu kontaktligzdu pirms savienojuma atjaunošanas. Ierīcei ir ierobežots pieejamais ligzdas savienojuma daudzums.

7. darbība: lasiet un rakstiet reģistrus

Lasīt un rakstīt reģistrus
Lasīt un rakstīt reģistrus

Modbus atbalsta vairākas reģistru lasīšanas un rakstīšanas funkcijas.

uModBus bibliotēkā ir metode katrai funkcijai:

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

Pirmkārt, uzrakstīsim dažas vērtības.

1) Rakstiet spoles (func: 5)

Ierakstiet 1 vērtību 200 reģistrā no verga 1:

modbus.write_single_coil (1, 200, 0xFF00)

Pirmais arguments ir par vergu id, mūsu gadījumā 1.

Otrais ir reģistra numurs, bet jūsu - vērtība. Par 1 jums šeit jāievieto 0xFF00. Uzrakstiet no 0 līdz 201 reģistru no verga 1:

modbus.write_single_coil (1, 201, 0)

Šī metode ļauj rakstīt tikai Būla vērtības: 0 vai 1.

2) Rakstiet reģistrus (func: 6)

Tagad ierakstiet dažas veselu skaitļu vērtības vairākos reģistros.

Ierakstiet parakstītu 111 vērtību, lai reģistrētu 100 no 1. verga:

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

Pirmais arguments ir verga ID, otrais reģistra numurs un trešais ir jauna vērtība. Pēdējais arguments nosaka, vai vērtība ir jāiestata kā parakstīts numurs. Noklusējuma vērtība ir True. Jums tas nav jāiestata.

Ierakstiet parakstītu vērtību -457 uz 101 reģistru no verga 1:

modbus.write_single_register (1, 101, -457)

Rakstiet neparakstītu 50 vērtību uz 100 reģistru no verga 3:

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

Šī metode ļauj veselu skaitļu vērtības ierakstīt vienā reģistrā.

Vienā reģistrā var būt 16 bitu vērtības.

Metode atgriež patiesu, ja ievades vērtība ir derīga, un, ja nē, tā ir nepatiesa. Vērtība tiek rakstīta pat tad, ja tā nav derīga (pārāk liela reģistram)

3) Lasiet spoles/diskrētās ievades

Tagad lasīsim rakstiskās Būla vērtības. Lai lasītu reģistru ar 1. funkcijas lasīšanas spoli, izpildiet:

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

Lai lasītu reģistru ar 2. funkciju, lasiet diskrēto ievadi, izpildiet:

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

kur:

  • slave -id - virtuālā verga ID (vergu simulators pieņem visus derīgos ID)
  • reģistrs - reģistra numurs lasīšanai
  • skaits - lasāmo reģistru skaits (ievietojiet vēlamo summu abās vietās)

Šīs metodes atgriež masīvu ar Būla vērtībām. Katra vērtība atbilst katram reģistram.

Fragments: [0: count] ir nepieciešams, jo šī metode atgriež vairāk vērtību nekā skaits. Tas vienmēr atgriež vērtību daudzumu, kas dalās ar 8. Papildvērtības ir nepatiesas un neatbilst nevienam reģistram.

Izlasiet mūsu Būla vērtības ar abām metodēm:

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

Rezultāts būs šāds: PIEMĒRS

Patiess attiecas uz 1 vērtību, nepareizs uz 0.

4) Lasīt reģistrus

Tagad nolasiet vērtības no reģistriem, kas rakstīti ar 6 funkciju.

Lai lasītu reģistrus ar 3. funkciju nolasīšanas turēšanas reģistri, izpildiet:

modbus.read_holding_registers (slaveId, register, count, parakstīts = True)

Lai lasītu reģistrus ar 4. funkciju nolasīšanas ievades reģistrus, izpildiet:

modbus.read_input_registers (slaveId, register, count, parakstīts = True)

kur:

  • slave -id - virtuālā verga ID
  • reģistrs - reģistra numurs lasīšanai
  • skaits - lasāmo reģistru skaits
  • parakstīts - norāda, vai nolasītās vērtības jāuzskata par parakstītiem skaitļiem vai nē. Noklusējuma stāvoklis: True

Atgriešanās vērtība ir karte ar vēlamo reģistru daudzumu.

Izlasiet iepriekšējā punktā iestatītos reģistrus:

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)

Rezultātiem vajadzētu izskatīties šajā ekrānuzņēmumā: EXAMPLE

Nākamajā nodarbībā jūs uzzināsit, kā izveidot Modbus RTU Master ierīcē, kas atbalsta ESP32.

Ieteicams: