Orodha ya maudhui:

ESP32 Modbus Mwalimu TCP: Hatua 7
ESP32 Modbus Mwalimu TCP: Hatua 7

Video: ESP32 Modbus Mwalimu TCP: Hatua 7

Video: ESP32 Modbus Mwalimu TCP: Hatua 7
Video: Шлюз Modbus TCP-RS485| ESP32 Ethernet/wi-fi WEB. 2024, Juni
Anonim
ESP32 Modbus Mwalimu TCP
ESP32 Modbus Mwalimu TCP

Katika darasa hili, utapanga programu ya ESP32 kuwa Modbus TCP Master.

Tutatumia vifaa viwili, ambavyo vina processor hii: Moduino ESP32 na Pycom. Vifaa vyote vinaendesha katika mazingira ya MicroPytthon. Mtumwa wetu wa Modbus atakuwa kompyuta ya PC na programu ya Modbus simulator inayoendesha juu yake.

Utahitaji:

  • Kifaa cha Moduino ESP32 au Moduino Pycom (angalia tovuti hii ili kujua zaidi kuhusu kifaa cha Moduino ESP32 na hii kuangalia kifaa cha Pycom)
  • PC na mfumo wa uendeshaji wa Linux
  • RS-232 / RS-485 bandari kwenye kompyuta yako au USB hadi RS-232 / RS-485 converter

Hatua ya 1: Pakua na Anza Modbus TCP Slave Simulator

Pakua na Anza Modbus TCP Slave Simulator
Pakua na Anza Modbus TCP Slave Simulator

Pakua moduli ya Mtumwa wa Modbus kutoka https://www.modbusdriver.com/diagslave.html. Kisha fungua kumbukumbu na upakue toleo la mfumo wa uendeshaji wa Linux.

Endesha programu kutoka kwa kiweko na hoja ya -p:

./diagslave -p

ni bandari ambapo seva ya Modbus Slave itafanya kazi. Kwa itifaki ya Modbus ni kwa default 502, lakini unaweza kutumia nyingine.

Katika bandari za Linux chini ya 1024 haiwezi kutumiwa na programu zinazoendeshwa kutoka kwa mtumiaji wa kawaida (sio upendeleo wa mizizi).

Kumbuka ni bandari gani unayotumia. Thamani hii itakuwa muhimu baadaye.

Hatua ya 2: Andaa Kompyuta yako Kuunganisha kwenye Kifaa

Andaa Kompyuta yako Kuunganisha kwenye Kifaa
Andaa Kompyuta yako Kuunganisha kwenye Kifaa

Utahitaji programu kadhaa ili kuunganisha kwa kifaa na kutuma faili kwake.

Sakinisha mazingira ya Python na bomba (ikiwa hauna):

pata-apt kufunga python3

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

Sakinisha picocom:

pata-pata picocom

Mpango huu unahitajika kuungana na kifaa na kutekeleza amri juu yake.

bomba funga mpfshell

Programu hii hukuruhusu kutuma faili kwenye kifaa.

Unaweza pia kuiweka vyanzo vya fomu. Rejea ukurasa huu:

Hatua ya 3: Andaa Kifaa na Unganisha kwake

Andaa Kifaa na Unganisha kwake
Andaa Kifaa na Unganisha kwake
Andaa Kifaa na Unganisha kwake
Andaa Kifaa na Unganisha kwake
Andaa Kifaa na Unganisha kwake
Andaa Kifaa na Unganisha kwake

Ili kuunganisha kifaa cha Moduino au Pycom kwenye PC unahitaji RS-232 / RS-485 bandari au kibadilishaji. Angalia toleo la kifaa chako (ni aina gani ya bandari inayotumia) na upate bandari au kibadilishaji kinachofaa.

  1. Unganisha kifaa kwenye PC
  2. Kisha unganisha usambazaji wa umeme kwake

Unganisha kifaa kwenye PC na kisha unganisha usambazaji wa umeme kwake. Unaweza pia kuunganisha kebo ya ethernet kwa Moduino ESP32 (ikiwa ina bandari hiyo).

Uunganisho unapaswa kuwa kama kwenye picha hapo juu

Tafuta njia ya bandari, ambayo hutumiwa kwa unganisho la kifaa. Inaweza kuwa kwa mfano: / dev / ttyS1, / dev / ttyUSB0.

Kwa waongofu wa usb, njia itakuwa na neno la USB.

Unaweza kuunganisha kwenye kifaa na programu ya picocom:

picocom / dev / ttyUSB0 -b 115200

Amri ya haraka ya kifaa inaonekana sawa na moja ya picha hizi hapa chini.

Moduino ESP32: Tazama hapa

Moduino Pycom: Tazama hapa

Hatua ya 4: Pakia Maktaba kuu ya Modbus

Pakia Maktaba kuu ya Modbus
Pakia Maktaba kuu ya Modbus

github.com/pycom/pycom-modbus/ Ili kuwasiliana na Modbus Slave unahitaji maktaba inayofaa. Maktaba za Pycom hazioani na Moduino. Angalia maagizo ambayo yanatii kifaa chako.

Funga picocom kabla ya kutuma faili: bonyeza Ctrl + A na kisha funguo za Ctrl + X.

Maktaba ya uModBus ya besi za Moduino ESP32 kwenye maktaba ya pycom-modbus ya Moduino Pycom. Imebadilishwa kufanya kazi kwenye kifaa cha kawaida cha ESP32. Pia ina njia za ziada za karibu () za madarasa ya kiunganishi.

1) Moduino ESP32

Pakua maktaba kutoka https://github.com/techbase123/micropython-modbus. Ondoa kumbukumbu na tuma faili zote 4 kwa kifaa cha Moduino.

Tumia mpfshell kuzipakia. Endesha programu hii katika saraka na faili hizo.

Unganisha kwenye kifaa kwa kutekeleza: HII

ttyUSB0 ni jina la bandari ya serial ambapo kifaa kimeunganishwa.

Badilisha saraka kuwa / flash / lib na amri:

cd / flash / lib

Weka faili zote na amri:

weka uModBusConst.py

kuweka uModBusFunctions.py kuweka uModBusTCP.py kuweka uModBusSerial.py

MFANO

Kisha ondoka kwa koni na amri ya kutoka na uanze tena kifaa na kitufe cha Rudisha.

2) Moduino Pycom

Pakua maktaba kutoka https://github.com/pycom/pycom-modbus/. Ondoa kumbukumbu na tuma yaliyomo kwenye saraka ya uModbus kwenye kifaa Tumia mpfshell kuzipakia. Endesha programu hii katika saraka na faili hizo.

Unganisha kwenye kifaa kwa kutekeleza:

kufungua ttyUSB0

ttyUSB0 ni jina la bandari ya serial ambapo kifaa kimeunganishwa.

Badilisha saraka kuwa / flash / lib, unda saraka ya uModbus na uiingize kwa amri:

cd / flash / libmd uModbus cd uModbus

Weka faili zote na amri:

weka const.py

weka kazi.py weka tcp.py weka serial.py

Kisha ondoa kiweko na amri ya kutoka na uanze tena kifaa na kitufe cha Rudisha.

MFANO

Hatua ya 5: Unganisha kwenye Mtandao

Unganisha kwenye Mtandao
Unganisha kwenye Mtandao

Amri za kuanzisha uhusiano hutofautiana kati ya Moduino na Pycom.

Unganisha kwenye kifaa na picocom kutekeleza amri zinazofaa. Unaweza kuunganisha kifaa cha Moduino kwenye mtandao kwa waya au waya. Kufuatia mifano kudhani kuwa mtandao wako una seva ya DHCP inayofanya kazi.

Kwa hali nyingine, kifaa hakitapata anwani ya IP. Usaidizi wa WiFi unapatikana katika kila Moduino. Bandari ya Ethernet ni chaguo na sio vifaa vyote vinavyo.

1) Moduino ESP32

Kuunganisha kwa WiFi

Tekeleza amri zifuatazo kwenye kifaa:

kutoka kwa netWiFi kuagiza netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi. kuanza ()

Badilisha ESSID na jina la mtandao wako wa WiFi, na PASS na nenosiri lake.

Baada ya muda baada ya kutekeleza start () unapaswa kupata anwani ya IP ambayo ilipewa kifaa chako.

Kuunganisha kwa mtandao wa Ethernet

Unganisha kifaa kwenye mtandao wa waya na kebo ya ethernet.

Kisha fanya amri zifuatazo:

kutoka net net kuagiza netETHeth = netETH () eth.start ()

Baada ya muda baada ya kutekeleza start () unapaswa kupata anwani ya IP ambayo ilipewa kifaa chako.

2) Moduino Pycom

Unganisha na WiFi

Tekeleza amri zifuatazo kwenye kifaa:

kutoka kwa uingizaji wa mtandao WLANwlan = WLAN (mode = WLAN. STA) nyavu = wlan.scan () kwa wavu kwenye nyavu: ikiwa net.ssid == 'ESSID': chapisha ('Mtandao umepatikana!') wlan.connect (net.ssid"

Badilisha ESSID na jina la mtandao wako wa WiFi, na PASS na nenosiri lake.

Hatua ya 6: Anzisha Mawasiliano na Mtumwa wa Modbus

Anzisha Mawasiliano na Mtumwa wa Modbus
Anzisha Mawasiliano na Mtumwa wa Modbus

Maktaba ya Mwalimu wa Modbus ni sawa kwa vifaa vyote viwili

Zinatofautiana katika uanzishaji.

1) Anzisha uModBus kwenye Moduino ESP32

Tekeleza:

kutoka kwa uModBusTCP kuagiza uModBusTCP kama TCP

2) Anzisha uModBus kwenye Pycom

Tekeleza:

kutoka kwa uModbus.tcp kuagiza TCP

Fungua muunganisho

Kisha unganisha uhusiano na:

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

wapi:

  • IP - anwani ya IP ya PC yako na Modbus Slave simulator
  • PORT - bandari ya Mtumwa wa Modbus
  • 60 imekoma

Ikiwa kosa linalofuata linatokea wakati wa kutekeleza amri za kusoma / kuandika: MFANO

kutekeleza:

kwa Moduino ESP32:

modbus karibu ()

kwa Moduino Pycom:

modbus._sock.close ()

na kisha urudie unganisho:

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

Hii ni muhimu kufunga tundu kabla ya kurudisha unganisho. Device imezuia kiwango cha unganisho linalopatikana la tundu.

Hatua ya 7: Soma na Andika Sajili

Soma na Andika Sajili
Soma na Andika Sajili

Modbus inasaidia kazi kadhaa kusoma na kuandika rejista.

Maktaba ya uModBus ina njia ya kila kazi:

  1. soma_vikoo
  2. soma_punguzo_za_pungufu
  3. kusoma_kushikilia_sajili
  4. soma_daha_sajili
  5. andika_silasi_ya moja
  6. andika_sajili_sawisi

Kwanza, wacha tuandike maadili.

1) Andika koili (func: 5)

Andika thamani 1 kwa rejista 200 kutoka kwa mtumwa 1:

modbus.andika_single_coil (1, 200, 0xFF00)

Hoja ya kwanza ni id ya mtumwa, kwa upande wetu 1.

Pili ni nambari ya usajili na theluthi ni thamani. Kwa 1 lazima uweke 0xFF00 hapa. Andika rejista 0 hadi 201 kutoka kwa mtumwa 1:

modbus.andika_single_coil (1, 201, 0)

Njia hii inaruhusu kufunika maadili ya boolean tu: 0 au 1.

2) Andika rejista (func: 6)

Sasa andika nambari kadhaa kwa rejista kadhaa.

Andika alama 111 iliyosainiwa kusajili 100 kutoka kwa mtumwa 1:

kuandika. sajili_sale_sajili (1, 100, 111, Kweli)

Hoja ya kwanza ni kitambulisho cha mtumwa, nambari ya pili ya usajili na ya tatu ni thamani mpya. Hoja ya mwisho inafafanua ikiwa thamani inapaswa kuwekwa kama nambari iliyosainiwa. Thamani chaguo-msingi kwake ni Kweli. Huna haja ya kuiweka.

Andika thamani -457 iliyosainiwa kwa sajili ya 101 kutoka kwa mtumwa 1:

modbus.andika_single_sajili (1, 101, -457)

Andika usisaini thamani ya 50 kwa rejista 100 kutoka kwa mtumwa 3:

modbus.andika_single_sajili (3, 100, 50, Uongo)

Njia hii inaruhusu kukokotoa nambari kamili kujiandikisha.

Rejista moja inaweza kuwa na maadili 16 kidogo.

Njia inarudi Kweli thamani ya pembejeo ni halali na sio ya kweli ikiwa sio hivyo. Thamani imeandikwa hata ikiwa ni batili (kubwa sana kwa rejista)

3) Soma pembejeo za coil / discrete

Sasa hebu soma maadili yaliyoandikwa ya boolean. Kusoma rejista na coil ya kusoma 1 ya kazi, fanya:

modbus.read_coils (slaveId, rejista, hesabu) [0: hesabu]

Kusoma rejista na kazi 2 soma pembejeo tofauti, fanya:

modbus.read_discrete_ pembejeo (SlaveId, rejista, hesabu) [0: hesabu]

wapi:

  • id-slave - id ya mtumwa halisi (simulator ya mtumwa inakubali vitambulisho vyote halali)
  • rejista - nambari ya usajili kwa kusoma
  • hesabu - kiasi cha sajili za kusomwa (weka kiwango unachotaka katika sehemu zote mbili)

Njia hizi zinarudisha safu na maadili ya boolean. Kila thamani inalingana na kila rejista.

Kipande: [0: hesabu] inahitajika, kwa sababu njia hii inarudisha maadili zaidi, kuliko hesabu. Inarudisha kila wakati idadi ya maadili ambayo inaweza kugawanywa na 8. Thamani za nyongeza ni za uwongo na hazilingani na rejista yoyote.

Soma maadili yetu ya boolean na njia zote mbili:

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

Matokeo yatakuwa kama haya: MFANO

Kweli inahusu thamani 1, Uongo kwa 0.

4) Soma rejista

Sasa soma maadili kutoka kwa rejista zilizoandikwa na kazi 6.

Kusoma rejista zilizo na rejista ya kufanya kazi ya kusoma 3, fanya:

modbus.read_holding_sajili (slaveId, rejista, hesabu, saini = Kweli)

Kusoma rejista zilizo na rejista ya kusoma ya kazi ya kusoma 4, fanya:

modbus.read_input_registers (slaveId, rejista, hesabu, saini = Kweli)

wapi:

  • mtumwa-id - id ya mtumwa halisi
  • rejista - nambari ya usajili kwa kusoma
  • hesabu - kiasi cha sajili za kusomwa
  • iliyosainiwa - inaonyesha ikiwa maadili ya kusoma yanapaswa kutibiwa kama nambari zilizosainiwa au la. Hali chaguomsingi: Kweli

Thamani ya kurudisha ni Tuple na kiwango cha taka cha sajili.

Soma rejista zilizowekwa katika nukta iliyopita:

modbus.read_holding_sajili (1, 100, 2, Kweli) modbus.read_input_sajili (1, 100, 2, Kweli) modbus. kusoma_kusajili_sajili (3, 100, 1, Uongo) modbus. kusoma_kuingiza_sajili (3, 100, 1, Uongo)

Matokeo yanapaswa kuonekana kama kwenye picha hii ya skrini: MFANO

Katika somo linalofuata utajifunza jinsi ya kuunda Modbus RTU Master kwenye kifaa kinachowezeshwa na ESP32.

Ilipendekeza: