Cov txheej txheem:

ESP32 Modbus Master TCP: 7 Kauj Ruam
ESP32 Modbus Master TCP: 7 Kauj Ruam

Video: ESP32 Modbus Master TCP: 7 Kauj Ruam

Video: ESP32 Modbus Master TCP: 7 Kauj Ruam
Video: Связь Modbus ESP32 | FLProg SCADA 2024, Hlis ntuj nqeg
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Hauv chav kawm no, koj yuav teeb tsa ESP32 tus txheej txheem los ua Modbus TCP Master.

Peb yuav siv ob lub cuab yeej, uas muaj cov txheej txheem no: Moduino ESP32 thiab Pycom. Ob lub cuab yeej tau ua haujlwm hauv MicroPytthon ib puag ncig. Peb Modbus Qhev yuav yog PC khoos phis tawj nrog Modbus simulator software khiav ntawm nws.

Koj yuav xav tau:

  • Moduino ESP32 lossis Moduino Pycom ntaus ntawv (txheeb xyuas lub vev xaib no kom paub ntau ntxiv txog Moduino ESP32 ntaus ntawv thiab qhov no los tshuaj xyuas Pycom ntaus ntawv)
  • PC nrog Linux operating system
  • RS-232/RS-485 chaw nres nkoj hauv koj lub computer lossis USB rau RS-232/RS-485 hloov pauv

Kauj ruam 1: Rub tawm thiab Pib Modbus TCP Slave Simulator

Rub tawm thiab Pib Modbus TCP Qhev Simulator
Rub tawm thiab Pib Modbus TCP Qhev Simulator

Rub tawm Modbus Slave simulator los ntawm

Khiav qhov program los ntawm console nrog -p kev sib cav:

./diagslave -p

yog qhov chaw nres nkoj uas Modbus Slave server yuav ua haujlwm. Rau Modbus raws tu qauv nws yog lub neej ntawd 502, tab sis koj tuaj yeem siv lwm qhov.

Hauv Linux cov chaw nres nkoj qis dua 1024 tsis tuaj yeem siv los ntawm cov haujlwm khiav los ntawm cov neeg siv ib txwm muaj (tsis yog cov cai hauv paus).

Nco ntsoov qhov chaw nres nkoj twg koj siv. Tus nqi no yuav tsim nyog tom qab.

Kauj Ruam 2: Npaj Koj Lub Khoos Phis Tawj los Txuas rau Lub Ntaus Ntawv

Npaj Koj Lub Khoos Phis Tawj los txuas rau lub cuab yeej
Npaj Koj Lub Khoos Phis Tawj los txuas rau lub cuab yeej

Koj yuav xav tau qee cov program los txuas rau lub cuab yeej thiab xa cov ntawv rau nws.

Nruab Python ib puag ncig thiab pip (yog tias koj tsis muaj nws):

apt-tau nruab python3

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

Nruab picocom:

apt-tau nruab picocom

Qhov program no xav tau txuas rau lub cuab yeej thiab ua cov lus txib ntawm nws. Nruab mpfshell:

pip nruab mpfshell

Qhov program no tso cai rau koj xa cov ntawv mus rau lub cuab yeej.

Koj tseem tuaj yeem nruab nws daim ntawv los. Xa mus rau nplooj ntawv no:

Kauj Ruam 3: Npaj Ntaus Ntawv thiab Txuas rau Nws

Npaj Ntaus Ntawv thiab Txuas Rau Nws
Npaj Ntaus Ntawv thiab Txuas Rau Nws
Npaj Ntaus Ntawv thiab Txuas rau Nws
Npaj Ntaus Ntawv thiab Txuas rau Nws
Npaj Ntaus Ntawv thiab Txuas Rau Nws
Npaj Ntaus Ntawv thiab Txuas Rau Nws

Txhawm rau txuas Moduino lossis Pycom ntaus ntawv rau PC koj xav tau chaw nres nkoj RS-232/RS-485 lossis hloov pauv. Txheeb xyuas version ntawm koj lub cuab yeej (hom chaw nres nkoj twg nws siv) thiab nrhiav chaw nres nkoj lossis hloov pauv uas tsim nyog.

  1. Txuas lub cuab yeej rau PC
  2. Tom qab ntawd txuas lub hwj chim rau nws

Txuas lub cuab yeej rau PC thiab txuas lub zog txuas rau nws. Koj tseem tuaj yeem txuas ethernet cable rau Moduino ESP32 (yog tias nws muaj qhov chaw nres nkoj ntawd).

Kev sib txuas yuav tsum zoo li hauv cov duab saum toj no

Nrhiav txoj hauv kev rau chaw nres nkoj, uas yog siv rau kev sib txuas ntaus ntawv nws tuaj yeem piv txwv li: /dev /ttyS1, /dev /ttyUSB0.

Rau usb hloov pauv, txoj hauv kev yuav muaj lo lus USB.

Koj tuaj yeem txuas rau lub cuab yeej nrog picocom program:

picocom /dev /ttyUSB0 -b 115200

Kev hais kom sai ntawm lub cuab yeej zoo ib yam li cov duab hauv qab no.

Moduino ESP32: Saib ntawm no

Moduino Pycom: Saib ntawm no

Kauj Ruam 4: Upload Modbus Master Library

Rub tawm Modbus Master Library
Rub tawm Modbus Master Library

github.com/pycom/pycom-modbus/ Txhawm rau sib tham nrog Modbus Qhev koj xav tau lub tsev qiv ntawv tsim nyog. Cov tsev qiv ntawv rau Pycom tsis sib xws nrog Moduino. Txheeb cov lus qhia uas ua raws koj lub cuab yeej.

Kaw picocom ua ntej xa cov ntaub ntawv: nias Ctrl+A thiab tom qab ntawd Ctrl+X tuav.

uModBus tsev qiv ntawv rau Moduino ESP32 hauv paus ntawm pycom-modbus lub tsev qiv ntawv rau Moduino Pycom. Nws tau hloov kho kom ua haujlwm ntawm ESP32 cov cuab yeej ib txwm muaj. Nws kuj muaj ntxiv kaw () txoj hauv kev rau cov chav kawm txuas.

1) Moduino ESP32

Rub lub tsev qiv ntawv los ntawm https://github.com/techbase123/micropython-modbus. Unpack archive thiab xa tag nrho 4 cov ntaub ntawv mus rau Moduino ntaus ntawv.

Siv mpfshell upload lawv. Khiav qhov program no hauv cov npe nrog cov ntaub ntawv ntawd.

Txuas rau lub cuab yeej los ntawm kev ua tiav: THIS

ttyUSB0 yog lub npe ntawm chaw nres nkoj txuas uas lub cuab yeej txuas nrog.

Hloov cov npe rau /flash /lib nrog hais kom ua:

cd /flash /lib

Muab tag nrho cov ntaub ntawv nrog cov lus txib:

muab uModBusConst.py

muab uModBusFunctions.py tso uModBusTCP.py tso uModBusSerial.py

Piv txwv

Tom qab ntawd tawm console nrog kev hais kom ua tawm thiab rov pib dua lub cuab yeej nrog khawm pib dua.

2) Moduino Pycom

Rub lub tsev qiv ntawv los ntawm https://github.com/pycom/pycom-modbus/. Unpack archive thiab xa cov ntsiab lus ntawm uModbus phau ntawv teev npe mus rau lub cuab yeej siv mpfshell txhawm rau upload lawv. Khiav qhov program no hauv cov npe nrog cov ntaub ntawv ntawd.

Txuas mus rau lub cuab yeej los ntawm kev ua:

qhib ttyUSB0

ttyUSB0 yog lub npe ntawm chaw nres nkoj txuas uas lub cuab yeej txuas nrog.

Hloov cov npe rau /flash /lib, tsim uModbus cov npe thiab sau nws nrog cov lus txib:

cd /flash /libmd uModbus cd uModbus

Muab tag nrho cov ntaub ntawv nrog cov lus txib:

muab const.py

muab functions.py tso tcp.py muab serial.py

Tom qab ntawd tawm console nrog kev hais kom ua tawm thiab rov pib dua lub cuab yeej nrog khawm pib dua.

Piv txwv

Kauj ruam 5: Txuas rau Network

Txuas mus rau Network
Txuas mus rau Network

Cov lus txib los tsim kev sib txuas sib txawv ntawm Moduino thiab Pycom.

Txuas rau lub cuab yeej nrog picocom kom ua tiav cov lus txib tsim nyog. Koj tuaj yeem txuas Moduino ntaus ntawv mus rau network los ntawm xaim lossis wireless. Ua raws cov piv txwv xav tias koj lub network tau ua haujlwm DHCP server.

Hauv lwm qhov xwm txheej, lub cuab yeej yuav tsis tau txais IP chaw nyob. WiFi txhawb nqa muaj nyob hauv txhua Moduino. Ethernet chaw nres nkoj yog qhov kev xaiv thiab tsis yog txhua lub cuab yeej muaj nws.

1) Moduino ESP32

Txuas mus rau WiFi

Ua raws li cov lus txib hauv qab no ntawm lub cuab yeej:

los ntawm netWiFi ntshuam netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()

Hloov ESSID nrog lub npe ntawm koj lub network WiFi, thiab PASS nrog tus password ntawm nws.

Tom qab qee lub sijhawm tom qab pib ua haujlwm () koj yuav tsum tau txais tus IP chaw nyob uas tau muab rau koj lub cuab yeej.

Txuas mus rau Ethernet network

Txuas lub cuab yeej rau wired network nrog ethernet cable.

Tom qab ntawd ua cov lus txib hauv qab no:

los ntawm netETH ntshuam netETHeth = netETH () eth.start ()

Tom qab qee lub sijhawm tom qab pib ua haujlwm () koj yuav tsum tau txais IP chaw nyob uas tau muab rau koj lub cuab yeej.

2) Moduino Pycom

Txuas mus rau WiFi

Ua raws li cov lus txib hauv qab no ntawm lub cuab yeej:

los ntawm network ntshuam WLANwlan = WLAN (hom = WLAN. STA) nets = wlan.scan () rau net hauv nets: yog net.ssid == 'ESSID': print ('Network pom!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) thaum tsis wlan.isconnected (): tshuab.idle () luam tawm ('WLAN kev sib txuas ua tiav!') tawg

Hloov ESSID nrog lub npe ntawm koj lub network WiFi, thiab PASS nrog tus password ntawm nws.

Kauj Ruam 6: Pib Pib Kev Sib Tham Nrog Modbus Qhev

Pib Pib Kev Sib Tham Nrog Modbus Qhev
Pib Pib Kev Sib Tham Nrog Modbus Qhev

Modbus Master cov tsev qiv ntawv zoo sib xws rau ob qho khoom siv

Lawv txawv ntawm qhov pib.

1) Pib uModBus ntawm Moduino ESP32

Ua:

los ntawm uModBusTCP ntshuam uModBusTCP li TCP

2) Pib uModBus ntawm Pycom

Ua:

los ntawm uModbus.tcp ntshuam TCP

Qhib kev twb kev txuas

Tom qab ntawd qhib kev sib txuas nrog:

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

qhov twg:

  • IP - tus IP chaw nyob ntawm koj lub PC nrog Modbus Qhev simulator
  • PORT - chaw nres nkoj ntawm Modbus Qhev
  • 60 yog lub sijhawm tas sijhawm

Yog tias qhov yuam kev hauv qab no tshwm sim thaum ua tiav kev nyeem/sau cov lus txib: EXAMPLE

ua:

rau Moduino ESP32:

modbus.close ()

rau Moduino Pycom:

modbus._sock.close ()

thiab tom qab ntawd rov tsim kev sib txuas:

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

Qhov no yog qhov tseem ceeb kom kaw lub qhov (socket) ua ntej rov txuas dua. Device tau txwv tus nqi ntawm qhov muaj qhov txuas.

Kauj Ruam 7: Nyeem thiab Sau Npe

Nyeem thiab Sau Npe
Nyeem thiab Sau Npe

Modbus txhawb ntau txoj haujlwm los nyeem thiab sau npe.

uModBus tsev qiv ntawv muaj txoj hauv kev rau txhua txoj haujlwm:

  1. read_ cov
  2. read_discrete_inputs
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. sau_single_register

Ua ntej tshaj, cia sau qee qhov txiaj ntsig.

1) Sau coils (func: 5)

Sau 1 tus nqi rau 200 rau npe los ntawm qhev 1:

modbus.write_single_coil (1,200, 0xFF00)

Thawj qhov kev sib cav yog rau tus qhev id, hauv peb rooj plaub 1.

Qhov thib ob yog tus lej sau npe thiab thib peb yog tus nqi. Rau 1 koj yuav tsum tso 0xFF00 ntawm no. Sau 0 rau 201 sau npe los ntawm qhev 1:

modbus.write_single_coil (1, 201, 0)

Txoj hauv kev no tso cai rau kev sau ntawv tsuas yog tus nqi boolean: 0 lossis 1.

2) Sau npe (func: 6)

Tam sim no sau qee qhov tseem ceeb rau ntau qhov sau npe.

Sau kos npe 111 tus nqi rau npe 100 los ntawm qhev 1:

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

Thawj qhov kev sib cav yog tus lej qhev, tus lej thib ob rau npe thiab tus thib peb yog tus nqi tshiab. Kev sib cav zaum kawg yog tias tus nqi yuav tsum tau teeb tsa raws li tus lej kos npe. Default nqi rau nws yog Tseeb. Koj tsis tas yuav teeb nws.

Sau kos npe -457 tus nqi rau 101 sau npe los ntawm qhev 1:

modbus.write_single_register (1, 101, -457)

Sau tsis kos npe 50 tus nqi rau 100 sau npe los ntawm qhev 3:

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

Txoj hauv kev no tso cai rau kev sau cov lej sib npaug rau npe ib leeg.

Sau npe nkaus xwb tuaj yeem muaj 16 ntsis qhov tseem ceeb.

Txoj kev rov los Tseeb yog cov nqi nkag tau siv tau thiab Tsis raug yog tias tsis yog. Tus nqi tau sau txawm tias tsis raug (loj heev rau npe)

3) Nyeem coils/cov tswv yim tsis sib xws

Tam sim no cia nyeem sau qhov tseem ceeb boolean. Txhawm rau nyeem sau npe nrog ua haujlwm 1 nyeem cov ntawv, ua:

modbus.read_coils (qhev ID, sau npe, suav) [0: suav]

Txhawm rau nyeem sau npe nrog ua haujlwm 2 nyeem cov tswv yim tsis sib xws, ua:

modbus.read_discrete_inputs (qhev ID, sau npe, suav) [0: suav]

qhov twg:

  • qhev -id - tus lej ntawm qhev virtual (Qhev simulator lees paub txhua tus lej siv tau)
  • sau npe - tus lej sau rau kev nyeem ntawv
  • suav - tus lej sau npe kom nyeem (muab tus lej xav tau hauv ob qho chaw)

Cov txheej txheem no xa rov qab array nrog boolean qhov tseem ceeb. Txhua tus nqi sib raug rau txhua tus rau npe.

Kev faib ua feem: [0: suav] xav tau, vim tias txoj hauv kev no rov qab muaj txiaj ntsig ntau dua li suav. Nws rov qab los ib txwm muaj nuj nqis uas yog faib los ntawm 8. Cov txiaj ntsig ntxiv yog qhov tsis raug thiab tsis sib xws rau ib qho kev sau npe.

Nyeem peb cov txiaj ntsig boolean nrog ob txoj hauv kev:

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

Cov txiaj ntsig yuav zoo li no: Piv txwv

Qhov tseeb hais txog 1 tus nqi, tsis raug rau 0.

4) Nyeem cov npe

Tam sim no nyeem qhov tseem ceeb los ntawm cov ntawv sau sau nrog 6 ua haujlwm.

Txhawm rau nyeem cov npe nrog ua haujlwm 3 nyeem tuav cov npe, ua:

modbus.read_holding_registers (qhev ID, sau npe, suav, kos npe = Muaj tseeb)

Txhawm rau nyeem cov npe nrog ua haujlwm 4 nyeem cov ntawv sau npe, ua:

modbus.read_input_registers (qhev ID, sau npe, suav, kos npe = Muaj tseeb)

qhov twg:

  • qhev -id - id ntawm qhev virtual
  • sau npe - tus lej sau rau kev nyeem ntawv
  • suav - tus lej ntawm cov ntawv sau los nyeem
  • kos npe - qhia tias yog nyeem qhov tseem ceeb yuav tsum raug kho raws li tus lej kos npe lossis tsis yog. Lub xeev tsis raug: Tseeb

Tus nqi rov qab yog tuple nrog qhov xav tau ntawm cov npe.

Nyeem cov ntawv teev npe teev nyob rau yav dhau los:

modbus.read_holding_registers (1, 100, 2, Tseeb) modbus.read_input_registers (1, 100, 2, Tseeb) modbus.read_holding_registers (3, 100, 1, False) modbus.read_input_registers (3, 100, 1, False)

Cov txiaj ntsig yuav tsum zoo li hauv qhov screenshot no: EXAMPLE

Hauv zaj lus qhia tom ntej no koj yuav kawm paub tsim Modbus RTU Master ntawm ESP32-qhib lub cuab yeej.

Pom zoo: