Përmbajtje:
- Hapi 1: Shkarkoni dhe filloni Modbus TCP Slave Simulator
- Hapi 2: Përgatitni kompjuterin tuaj për t'u lidhur me pajisjen
- Hapi 3: Përgatitni pajisjen dhe lidheni me të
- Hapi 4: Ngarko Bibliotekën Modbus Master
- Hapi 5: Lidhuni me Rrjetin
- Hapi 6: Filloni komunikimin me skllavin Modbus
- Hapi 7: Lexoni dhe Shkruani Regjistra
Video: ESP32 Modbus Master TCP: 7 hapa
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Në këtë klasë, ju do të programoni procesorin ESP32 që të jetë Modbus TCP Master.
Ne do të përdorim dy pajisje, të cilat përmbajnë këtë procesor: Moduino ESP32 dhe Pycom. Të dy pajisjet po funksionojnë në mjedisin MicroPytthon. Skllavja jonë Modbus do të jetë kompjuter PC me softuer simulues Modbus që funksionon në të.
Do t'ju duhet:
- Moduino ESP32 ose pajisja Moduino Pycom (kontrolloni këtë faqe në internet për të mësuar më shumë rreth pajisjes Moduino ESP32 dhe kjo për të kontrolluar pajisjen Pycom)
- PC me sistem operativ Linux
- Porta RS-232/RS-485 në kompjuterin tuaj ose konvertuesi USB në RS-232/RS-485
Hapi 1: Shkarkoni dhe filloni Modbus TCP Slave Simulator
Shkarkoni imituesin Modbus Slave nga https://www.modbusdriver.com/diagslave.html. Pastaj hapni arkivin e shkarkuar dhe shpaketoni versionin për sistemin operativ Linux.
Drejtoni programin nga tastiera me argumentin -p:
./diagslave -p
është një port ku do të punojë serveri Modbus Slave. Për protokollin Modbus është parazgjedhur 502, por mund të përdorni një tjetër.
Në portet Linux nën 1024 nuk mund të përdoren nga programe të drejtuara nga përdoruesi i rregullt (jo privilegjet rrënjësore).
Mos harroni se çfarë porti po përdorni. Kjo vlerë do të jetë e nevojshme më vonë.
Hapi 2: Përgatitni kompjuterin tuaj për t'u lidhur me pajisjen
Do t'ju duhen disa programe për t'u lidhur me pajisjen dhe për t'i dërguar skedarë asaj.
Instaloni mjedisin Python dhe pip (nëse nuk e keni):
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
Instaloni picocom:
apt-get install picocom
Ky program është i nevojshëm për t'u lidhur me pajisjen dhe për të ekzekutuar komandat në të. Instaloni mpfshell:
pip instaloni mpfshell
Ky program ju lejon të dërgoni skedarë në pajisje.
Ju gjithashtu mund ta instaloni atë nga burimet. Referojuni kësaj faqe:
Hapi 3: Përgatitni pajisjen dhe lidheni me të
Për të lidhur pajisjen Moduino ose Pycom me PC ju nevojitet porti ose konvertuesi RS-232/RS-485. Kontrolloni versionin e pajisjes tuaj (cilin lloj porti përdor) dhe gjeni portin ose konvertuesin e duhur.
- Lidheni pajisjen me PC
- Pastaj lidhni furnizimin me energji me të
Lidheni pajisjen me PC dhe më pas lidhni furnizimin me energji elektrike në të. Ju gjithashtu mund të lidhni kabllon ethernet me Moduino ESP32 (nëse e ka atë portë).
Lidhja duhet të jetë si në fotot e mësipërme
Gjeni shtegun për portin, i cili përdoret për lidhjen e pajisjes. Mund të jetë për shembull: /dev /ttyS1, /dev /ttyUSB0.
Për konvertuesit usb, rruga do të përmbajë fjalë USB.
Mund të lidheni me pajisjen me programin picocom:
picocom /dev /ttyUSB0 -b 115200
Linja e komandës e pajisjes duket e ngjashme me njërën nga këto imazhe më poshtë.
Moduino ESP32: Shihni këtu
Moduino Pycom: Shih këtu
Hapi 4: Ngarko Bibliotekën Modbus Master
github.com/pycom/pycom-modbus/ Për të komunikuar me Modbus Slave ju nevojitet biblioteka e përshtatshme. Bibliotekat për Pycom nuk janë në përputhje me Moduino. Kontrolloni udhëzimet që përputhen me pajisjen tuaj.
Mbyllni pikon përpara se të dërgoni skedarë: shtypni tastet Ctrl+A dhe pastaj Ctrl+X.
Biblioteka uModBus për Moduino ESP32 bazohet në bibliotekën pycom-modbus për Moduino Pycom. Modifiedshtë modifikuar për të punuar në pajisjen e zakonshme ESP32. Ai gjithashtu ka metoda shtesë të mbylljes () për klasat lidhëse.
1) Moduino ESP32
Shkarkoni bibliotekën nga https://github.com/techbase123/micropython-modbus. Shpaketoni arkivin dhe dërgoni të 4 skedarët në pajisjen Moduino.
Përdorni mpfshell për t'i ngarkuar ato. Drejtoni këtë program në drejtori me ato skedarë.
Lidhu me pajisjen duke ekzekutuar: KJO
ttyUSB0 është një emër i portit serik ku pajisja është e lidhur.
Ndryshoni drejtorinë në /flash /lib me komandën:
cd /flash /lib
Vendosni të gjithë skedarët me komanda:
vendos uModBusConst.py
vendos uModBusFunctions.py vendos uModBusTCP.py vendos uModBusSerial.py
SHEMBULL
Pastaj dilni nga tastiera me komandën exit dhe rinisni pajisjen me butonin Reset.
2) Moduino Pycom
Shkarkoni bibliotekën nga https://github.com/pycom/pycom-modbus/. Shpaketoni arkivin dhe dërgoni përmbajtje të drejtorisë uModbus në pajisje. Përdorni mpfshell për t'i ngarkuar ato. Drejtoni këtë program në drejtori me ato skedarë.
Lidhu me pajisjen duke ekzekutuar:
hapur ttyUSB0
ttyUSB0 është një emër i portit serik ku pajisja është e lidhur.
Ndryshoni drejtorinë në /flash /lib, krijoni drejtorinë uModbus dhe futeni atë me komandat:
cd /flash /libmd uModbus cd uModbus
Vendosni të gjithë skedarët me komanda:
vë konst.py
vënë funksione.py vendos tcp.py vendos serial.py
Pastaj dilni nga tastiera me komandën exit dhe rinisni pajisjen me butonin Reset.
SHEMBULL
Hapi 5: Lidhuni me Rrjetin
Komandat për të krijuar lidhje ndryshojnë midis Moduino dhe Pycom.
Lidhu me pajisjen me picocom për të ekzekutuar komandat e duhura. Mund ta lidhni pajisjen Moduino me rrjetin me tel ose me valë. Shembujt e mëposhtëm supozojnë se rrjeti juaj ka server DHCP që punon.
Në raste të tjera, pajisja nuk do të marrë adresë IP. Mbështetja Wi -Fi është e disponueshme në çdo Moduino. Porta Ethernet është një opsion dhe jo të gjitha pajisjet e kanë atë.
1) Moduino ESP32
Po lidhet me WiFi
Ekzekutoni komandat e mëposhtme në pajisje:
nga importi netWiFi netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
Zëvendësoni ESSID me emrin e rrjetit tuaj WiFi dhe PASS me fjalëkalimin e tij.
Pas ca kohësh pas ekzekutimit të fillimit () duhet të merrni një adresë IP e cila iu caktua pajisjes tuaj.
Lidhja me rrjetin Ethernet
Lidhni pajisjen me rrjetin me tela me kabllo ethernet.
Pastaj ekzekutoni komandat e mëposhtme:
nga netETH import netETHeth = netETH () eth.start ()
Pas ca kohësh pas ekzekutimit të fillimit () duhet të merrni adresën IP e cila iu caktua pajisjes tuaj.
2) Moduino Pycom
Lidhu me WiFi
Ekzekutoni komandat e mëposhtme në pajisje:
nga importi i rrjetit WLANwlan = WLAN (modaliteti = WLAN. STA) rrjeta = wlan.scan () për rrjetë në rrjeta: nëse net.ssid == 'ESSID': print ('Rrjeti u gjet!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) ndërsa nuk wlan.isconnected (): machine.idle () print ('Lidhja WLAN pati sukses!') pushim
Zëvendësoni ESSID me emrin e rrjetit tuaj WiFi dhe PASS me fjalëkalimin e tij.
Hapi 6: Filloni komunikimin me skllavin Modbus
Bibliotekat Modbus Master janë të ngjashme për të dy pajisjet
Ato ndryshojnë në fillimin.
1) Filloni uModBus në Moduino ESP32
Ekzekutoni:
nga uModBusTCP importoni uModBusTCP si TCP
2) Filloni uModBus në Pycom
Ekzekutoni:
nga uModbus.tcp import TCP
Lidhje e hapur
Pastaj hapni lidhjen me:
modbus = TCP ('IP', PORT, 60)
ku:
- IP - adresa IP e kompjuterit tuaj me imituesin Modbus Slave
- PORT - porti i Skllavit Modbus
- 60 është një timeout
Nëse ndodh gabimi i mëposhtëm gjatë ekzekutimit të komandave të leximit/shkrimit: SHEMBULL
ekzekuto:
për Moduino ESP32:
modbus.close ()
për Moduino Pycom:
modbus._sock.close ()
dhe pastaj rikrijoni lidhjen:
modbus = TCP ('IP', PORT, 60)
Kjo është e rëndësishme për të mbyllur prizën para rikrijimit të lidhjes. Pajisja ka kufizuar sasinë e lidhjes së prizës në dispozicion.
Hapi 7: Lexoni dhe Shkruani Regjistra
Modbus mbështet disa funksione për të lexuar dhe shkruar regjistra.
Biblioteka uModBus ka metodë për secilin funksion:
- lexoj_predha
- lexo_diskrete_inpute
- lexuesit_mbajtjes_regjistrues
- lexuesit_input_regjistrues
- shkruaj_dredhjen_e vetme
- shkruaj_regjistrues
Së pari, le të shkruajmë disa vlera.
1) Shkruani spirale (funksion: 5)
Shkruani 1 vlerë në 200 regjistrohuni nga skllavi 1:
modbus.write_single_coil (1, 200, 0xFF00)
Argumenti i parë është për skllav id, në rastin tonë 1.
E dyta është numri i regjistrit dhe thirs është një vlerë. Për 1 ju duhet të vendosni 0xFF00 këtu. Shkruani regjistrimin 0 deri në 201 nga skllavi 1:
modbus.write_single_coil (1, 201, 0)
Kjo metodë ju lejon të shkruani vetëm vlera boolean: 0 ose 1.
2) Shkruani regjistra (func: 6)
Tani shkruani disa vlera të plota në disa regjistra.
Shkruani vlerën e nënshkruar 111 për të regjistruar 100 nga skllavi 1:
modbus.write_single_register (1, 100, 111, E vërtetë)
Argumenti i parë është skllavi, numri i dytë i regjistrit dhe i treti është vlera e re. Argumenti i fundit përcakton nëse vlera duhet të vendoset si numër i nënshkruar. Vlera e paracaktuar për të është e vërtetë. Nuk keni nevojë ta vendosni.
Shkruani vlerën e nënshkruar -457 në 101 regjistrohuni nga skllavi 1:
modbus.write_single_register (1, 101, -457)
Shkruani pa nënshkruar vlerë 50 në 100 regjistër nga skllavi 3:
modbus.write_single_register (3, 100, 50, False)
Kjo metodë lejon shkrimin e vlerave të plota në një regjistër të vetëm.
Regjistri i vetëm mund të përmbajë vlera 16 bit.
Metoda kthen Vërtetë vlera e hyrjes është e vlefshme dhe False nëse jo. Vlera shkruhet edhe nëse është e pavlefshme (shumë e madhe për regjistrim)
3) Lexoni mbështjellje/hyrje diskrete
Tani le të lexojmë vlerat e shkruara boolean. Për të lexuar regjistrin me spiralen e funksionit 1, ekzekutoni:
modbus.read_coils (slaveId, regjistrohuni, numëroni) [0: count]
Për të lexuar regjistrin me funksionin 2 lexoni hyrjen diskrete, ekzekutoni:
modbus.read_discrete_inputs (slaveId, regjistrohuni, numëroni) [0: count]
ku:
- slave -id - id e skllavit virtual (Slave simulator pranon të gjitha ID -të e vlefshme)
- regjistrohu - numri i regjistrit për lexim
- numërimi - sasia e regjistrave që do të lexohen (vendosni sasinë e dëshiruar në të dy vendet)
Këto metoda kthejnë grupin me vlera boolean. Çdo vlerë korrespondon me secilin regjistër.
Fragmenti: [0: count] është i nevojshëm, sepse kjo metodë kthen më shumë vlera, sesa numërim. Kthen gjithnjë sasinë e vlerave e cila ndahet me 8. Vlerat shtesë janë False dhe nuk korrespondojnë me asnjë regjistër.
Lexoni vlerat tona boolean me të dyja metodat:
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
Rezultati do të jetë si këto: SHEMBULL
E vërtetë i referohet 1 vlere, E gabuar 0.
4) Lexoni regjistrat
Tani lexoni vlerat nga regjistrat e shkruar me funksionin 6.
Për të lexuar regjistrat me funksionin 3 lexoni regjistrat mbajtës, ekzekutoni:
modbus.read_holding_registers (slaveId, regjistrohuni, numëroni, nënshkruar = E vërtetë)
Për të lexuar regjistrat me funksionin 4 lexoni regjistrat hyrës, ekzekutoni:
modbus.read_input_registers (slaveId, regjistrohuni, numëroni, nënshkruar = E vërtetë)
ku:
- rob -id - id i skllavit virtual
- regjistrohu - numri i regjistrit për lexim
- numërimi - sasia e regjistrave që duhet lexuar
- nënshkruar - tregon nëse vlerat e lexuara duhet të trajtohen si numra të nënshkruar apo jo. Gjendja e paracaktuar: E vërtetë
Vlera e kthimit është një tuple me sasinë e dëshiruar të regjistrave.
Lexoni regjistrat e vendosur në pikën e mëparshme:
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)
Rezultatet duhet të duken si në këtë pamje të ekranit: SHEMBULL
Në mësimin tjetër do të mësoni se si të krijoni Modbus RTU Master në pajisjen e aktivizuar me ESP32.