Përmbajtje:

ESP32 Modbus Master TCP: 7 hapa
ESP32 Modbus Master TCP: 7 hapa

Video: ESP32 Modbus Master TCP: 7 hapa

Video: ESP32 Modbus Master TCP: 7 hapa
Video: Modbus TCP-RS485| ESP32. Визуализация на Virtuino. 2024, Qershor
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

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 dhe filloni Modbus TCP Slave Simulator
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

Përgatitni kompjuterin tuaj për t'u lidhur me pajisjen
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ërgatitni pajisjen dhe lidheni me të
Përgatitni pajisjen dhe lidheni me të
Përgatitni pajisjen dhe lidheni me të
Përgatitni pajisjen dhe lidheni me të
Përgatitni pajisjen dhe lidheni me të
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.

  1. Lidheni pajisjen me PC
  2. 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

Ngarko Bibliotekën Modbus Master
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

Lidhu me Rrjetin
Lidhu 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

Filloni komunikimin me skllavin Modbus
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

Lexoni dhe Shkruani Regjistra
Lexoni dhe Shkruani Regjistra

Modbus mbështet disa funksione për të lexuar dhe shkruar regjistra.

Biblioteka uModBus ka metodë për secilin funksion:

  1. lexoj_predha
  2. lexo_diskrete_inpute
  3. lexuesit_mbajtjes_regjistrues
  4. lexuesit_input_regjistrues
  5. shkruaj_dredhjen_e vetme
  6. 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.

Recommended: