
Satura rādītājs:
- 1. darbība: lejupielādējiet un palaidiet Modbus TCP vergu simulatoru
- 2. darbība: sagatavojiet datoru savienošanai ar ierīci
- 3. darbība: sagatavojiet ierīci un izveidojiet savienojumu ar to
- 4. darbība: augšupielādējiet Modbus galveno bibliotēku
- 5. darbība: izveidojiet savienojumu ar tīklu
- 6. darbība: inicializējiet saziņu ar Modbus Slave
- 7. darbība: lasiet un rakstiet reģistrus
2025 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2025-01-23 14:59

Š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 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

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



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.
- Savienojiet ierīci ar datoru
- 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

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

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

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

Modbus atbalsta vairākas reģistru lasīšanas un rakstīšanas funkcijas.
uModBus bibliotēkā ir metode katrai funkcijai:
- read_coils
- read_discrete_inputs
- read_holding_registers
- read_input_registers
- write_single_coil
- 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:
Rūpnieciskais HMI un Arduinos MODBUS RTU: 4 soļi

Rūpnieciskais HMI un Arduinos MODBUS RTU: Šajā pamācībā es aprakstīšu saziņas piemēru starp rūpniecisko HMI (COOLMAY MT6070H, 150EUROS), Arduino CLONE DIY (10EUROS) un Arduino UNO (10EUROS). Tīkls darbosies saskaņā ar īpašu un izturīgu un rūpniecisku protokolu
Modbus TCP komunikācija starp Arduino un rūpnieciskajām ierīcēm: 3 soļi

Modbus TCP sakari starp Arduino un rūpnieciskajām ierīcēm: rūpniecisks veids, kā kontrolēt Arduino plāksni ar rūpniecisko HMI un savienot to ar rūpniecisko tīklu, izmantojot Modbus TCP sakarus
Darba sākšana ar ESP32 - ESP32 dēļu instalēšana Arduino IDE - ESP32 mirgojošs kods: 3 soļi

Darba sākšana ar ESP32 | ESP32 dēļu instalēšana Arduino IDE | ESP32 mirgošanas kods: šajā pamācībā mēs redzēsim, kā sākt strādāt ar esp32 un kā instalēt esp32 plates Arduino IDE, un mēs programēsim esp 32, lai palaistu mirgojošu kodu, izmantojot arduino ide
TCP/IP savienojums, izmantojot GPRS: Kā nosūtīt datus uz serveri, izmantojot SIM900A moduli: 4 soļi

TCP/IP savienojums, izmantojot GPRS: Kā nosūtīt datus uz serveri, izmantojot SIM900A moduli: Šajā apmācībā es jums pastāstīšu par to, kā nosūtīt datus uz TCP serveri, izmantojot sim900 moduli. Mēs arī redzēsim, kā mēs varam saņemt datus no servera uz klientu (GSM modulis)
Skaitītājs PZEM-004 + ESP8266 un platformas IoT mezgls-SARKANS un Modbus TCP/IP: 7 soļi

Skaitītājs PZEM-004 + ESP8266 un platformas IoT mezgls-SARKANS un Modbus TCP/IP: šajā izdevumā mēs integrēsim savu aktīvo jaudas mērītāju vai elektroenerģijas patēriņu, Pzem-004-Peacefair ar IoT Node-RED integrācijas platformu, kas izmantota iepriekšējās apmācībās, vēlāk mēs izmantosim moduli ESP8266, kas konfigurēts kā Modbus TCP / IP vergs