
Բովանդակություն:
- Քայլ 1: Ներբեռնեք և գործարկեք Modbus TCP Slave Simulator- ը
- Քայլ 2: Պատրաստեք ձեր համակարգիչը սարքին միանալու համար
- Քայլ 3: Պատրաստեք սարքը և միացեք դրան
- Քայլ 4: Ներբեռնեք Modbus Master գրադարանը
- Քայլ 5: Միացեք ցանցին
- Քայլ 6. Սկսեք հաղորդակցումը Modbus Slave- ի հետ
- Քայլ 7: Կարդացեք և գրեք գրանցամատյաններ
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48

Այս դասում դուք ծրագրավորելու եք ESP32 պրոցեսորը Modbus TCP Master- ը:
Մենք կօգտագործենք երկու սարք, որոնք պարունակում են այս պրոցեսորը ՝ Moduino ESP32 և Pycom: Երկու սարքերն աշխատում են MicroPytthon միջավայրում: Մեր Modbus Slave- ը կլինի համակարգիչ, որի վրա աշխատում է Modbus simulator ծրագրակազմը:
Ձեզ հարկավոր կլինի.
- Moduino ESP32 կամ Moduino Pycom սարք (ստուգեք այս կայքը ՝ Moduino ESP32 սարքի մասին ավելին իմանալու համար, և սա ՝ Pycom սարքը ստուգելու համար)
- Համակարգիչ Linux օպերացիոն համակարգով
- RS-232/RS-485 պորտ ձեր համակարգչի մեջ կամ USB- ից RS-232/RS-485 փոխարկիչ
Քայլ 1: Ներբեռնեք և գործարկեք Modbus TCP Slave Simulator- ը

Ներբեռնեք Modbus Slave simulator- ը https://www.modbusdriver.com/diagslave.html- ից: Այնուհետև բացեք բեռնված արխիվը և բացեք Linux օպերացիոն համակարգի տարբերակը:
Գործարկեք ծրագիրը վահանակից -p փաստարկով.
./diagslave -p
նավահանգիստ է, որտեղ աշխատելու է Modbus Slave սերվերը: Modbus արձանագրության համար այն լռելյայն 502 է, բայց կարող եք օգտագործել ևս մեկը:
1024 -ից ցածր Linux նավահանգիստներում չեն կարող օգտագործվել սովորական օգտվողից աշխատող ծրագրեր (այլ ոչ թե արմատային իրավունքներ):
Հիշեք, թե որ նավահանգիստն եք օգտագործում: Այս արժեքը հետագայում անհրաժեշտ կլինի:
Քայլ 2: Պատրաստեք ձեր համակարգիչը սարքին միանալու համար

Սարքին միանալու և նրան ֆայլեր ուղարկելու համար ձեզ հարկավոր են որոշ ծրագրեր:
Տեղադրեք Python միջավայրը և pip (եթե այն չունեք).
apt-get տեղադրել python3
apt-get տեղադրել python3-dev curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" python3 get-pip.py
Տեղադրեք picocom:
apt-get տեղադրել picocom
Այս ծրագիրը անհրաժեշտ է սարքին միանալու և դրա վրա հրամաններ կատարելու համար: Տեղադրեք mpfshell:
pip տեղադրել mpfshell
Այս ծրագիրը թույլ է տալիս ֆայլեր ուղարկել սարքին:
Կարող եք նաև այն տեղադրել աղբյուրներից: Տե՛ս այս էջը ՝
Քայլ 3: Պատրաստեք սարքը և միացեք դրան



Moduino կամ Pycom սարքը համակարգչին միացնելու համար անհրաժեշտ է RS-232/RS-485 նավահանգիստ կամ փոխարկիչ: Ստուգեք ձեր սարքի տարբերակը (որ նավահանգստի տեսակն է այն օգտագործում) և գտեք համապատասխան նավահանգիստ կամ փոխարկիչ:
- Միացրեք սարքը համակարգչին
- Այնուհետև միացրեք էլեկտրամատակարարումը դրան
Միացրեք սարքը համակարգչին, ապա միացրեք էլեկտրամատակարարումը դրան: Կարող եք նաև Ethernet մալուխը միացնել Moduino ESP32- ին (եթե այն ունի այդ պորտը):
Միացումը պետք է լինի այնպես, ինչպես վերևի լուսանկարներում:
Գտեք նավահանգստի ուղին, որն օգտագործվում է սարքի միացման համար: Դա կարող է լինել օրինակ ՝ /dev /ttyS1, /dev /ttyUSB0:
USB փոխարկիչների համար ուղին կպարունակի USB բառ:
Դուք կարող եք միանալ սարքին picocom ծրագրով.
picocom /dev /ttyUSB0 -b 115200
Սարքի հրամանի տողը նման է ստորև ներկայացված այս պատկերներից մեկին:
Moduino ESP32. Տես այստեղ
Moduino Pycom. Տես այստեղ
Քայլ 4: Ներբեռնեք Modbus Master գրադարանը

github.com/pycom/pycom-modbus/ Modbus Slave- ի հետ շփվելու համար անհրաժեշտ է համապատասխան գրադարան: Pycom- ի գրադարանները համատեղելի չեն Moduino- ի հետ: Ստուգեք հրահանգները, որոնք համապատասխանում են ձեր սարքին:
Փակել ֆայլը նախքան ֆայլերը ուղարկելը. Սեղմեք Ctrl+A և այնուհետև Ctrl+X ստեղները:
uModBus գրադարան Moduino- ի համար ESP32 հիմնված է pycom-modbus գրադարանի վրա Moduino Pycom- ի համար: Այն փոփոխված է սովորական ESP32 սարքի վրա աշխատելու համար: Այն ունի նաև լրացուցիչ փակման () մեթոդներ միակցիչների դասերի համար:
1) Moduino ESP32
Ներբեռնեք գրադարանը https://github.com/techbase123/micropython-modbus կայքից: Բացեք արխիվը և ուղարկեք բոլոր 4 ֆայլերը Moduino սարքին:
Օգտագործեք mpfshell դրանք վերբեռնելու համար: Գործարկեք այս ծրագիրը գրացուցակում այդ ֆայլերով:
Միացեք սարքին ՝ կատարելով ՝ THIS
ttyUSB0- ը սերիական նավահանգստի անուն է, որտեղ սարքը միացված է:
Փոխել գրացուցակը /flash /lib հրամանով.
cd /flash /lib
Տեղադրեք բոլոր ֆայլերը հրամաններով.
տեղադրել uModBusConst.py
տեղադրել uModBusFunctions.py տեղադրել uModBusTCP.py տեղադրել uModBusSerial.py
ՕՐԻՆԱԿ
Այնուհետև դուրս եկեք վահանակից ՝ ելքի հրամանով և սարքը վերագործարկեք «Վերականգնել» կոճակով:
2) Moduino Pycom
Ներբեռնեք գրադարանը https://github.com/pycom/pycom-modbus/ կայքից: Բացեք արխիվը և ուղարկեք uModbus գրացուցակի բովանդակությունը սարքին: Օգտագործեք mpfshell ՝ դրանք վերբեռնելու համար: Գործարկեք այս ծրագիրը գրացուցակում այդ ֆայլերով:
Միացեք սարքին ՝ կատարելով.
բաց ttyUSB0
ttyUSB0- ը սերիական նավահանգստի անուն է, որտեղ սարքը միացված է:
Փոխեք գրացուցակը /flash /lib, ստեղծեք uModbus գրացուցակը և մուտքագրեք այն հրամաններով.
cd /flash /libmd uModbus cd uModbus
Տեղադրեք բոլոր ֆայլերը հրամաններով.
տեղադրել const.py
տեղադրել գործառույթներ. py տեղադրել tcp.py տեղադրել serial.py
Այնուհետև դուրս եկեք վահանակից ՝ ելքի հրամանով և սարքը վերագործարկեք «Վերականգնել» կոճակով:
ՕՐԻՆԱԿ
Քայլ 5: Միացեք ցանցին

Moduino- ի և Pycom- ի միջև կապ հաստատելու հրամանները տարբերվում են:
Միացեք սարքին picocom- ով `համապատասխան հրամաններ կատարելու համար: Դուք կարող եք Moduino սարքը ցանցին միացնել մետաղալարով կամ անլար: Հետևյալ օրինակները ենթադրում են, որ ձեր ցանցն ունի աշխատող DHCP սերվեր:
Այլ դեպքում, սարքը չի ստանա IP հասցե: Wi -Fi աջակցությունը հասանելի է յուրաքանչյուր Moduino- ում: Ethernet նավահանգիստը տարբերակ է և ոչ բոլոր սարքերն ունեն այն:
1) Moduino ESP32
Միացում WiFi- ին
Կատարեք սարքի հետևյալ հրամանները.
netWiFi- ից ներմուծում netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
ESSID- ը փոխարինեք ձեր WiFi ցանցի անունով, իսկ PASS- ը ՝ դրա գաղտնաբառով:
Սկսելուց հետո () գործարկելուց որոշ ժամանակ անց դուք պետք է ստանաք ձեր սարքին տրված IP հասցե:
Միացում Ethernet ցանցին
Միացրեք սարքը լարային ցանցին ethernet մալուխով:
Այնուհետև կատարեք հետևյալ հրամանները.
netETH- ից ներմուծել netETHeth = netETH () eth.start ()
Start () գործարկումից որոշ ժամանակ անց դուք պետք է ստանաք ձեր սարքին վերագրված IP հասցեն:
2) Moduino Pycom
Միացեք WiFi- ին
Կատարեք սարքի հետևյալ հրամանները.
ցանցի ներմուծումից WLANwlan = WLAN (ռեժիմ = WLAN. STA) ցանցեր = wlan.scan () ցանցերում ցանցերի համար. եթե net.ssid == 'ESSID': print ('Network found!') wlan.connect (net.ssid, auth = (net.sec, 'PASS'), timeout = 5000) մինչդեռ wlan.isconnected (): machine.idle () print ('WLAN կապը հաջողվեց!') ընդմիջում
ESSID- ը փոխարինեք ձեր WiFi ցանցի անունով, իսկ PASS- ը ՝ դրա գաղտնաբառով:
Քայլ 6. Սկսեք հաղորդակցումը Modbus Slave- ի հետ

Modbus Master գրադարանները նման են երկու սարքերի համար
Նրանք տարբերվում են սկզբնավորման մեջ:
1) Նախաստորագրեք uModBus- ը Moduino ESP32- ում
Կատարել:
uModBusTCP- ից uModBusTCP ներմուծել որպես TCP
2) Գործարկել uModBus- ը Pycom- ում
Կատարել:
uModbus.tcp ներմուծման TCP- ից
Բաց կապ
Այնուհետև բացեք կապը հետևյալի հետ.
modbus = TCP («IP», PORT, 60)
որտեղ:
- IP - ձեր համակարգչի IP հասցեն Modbus Slave սիմուլյատորով
- PORT - Modbus Slave նավահանգիստ
- 60 -ը թայմաութ է
Եթե ընթերցման/գրելու հրամանները կատարելիս տեղի է ունենում հետևյալ սխալը. ՕՐԻՆԱԿ
կատարել:
Moduino ESP32- ի համար
modbus.close ()
Moduino Pycom- ի համար
modbus._sock.close ()
և այնուհետև վերստեղծեք կապը.
modbus = TCP («IP», PORT, 60)
Սա կարևոր է փակել վարդակը կապը վերստեղծելուց առաջ: Սարքը սահմանափակել է առկա վարդակից միացման քանակը:
Քայլ 7: Կարդացեք և գրեք գրանցամատյաններ

Modbus- ն ապահովում է գրանցամատյաններ կարդալու և գրելու մի քանի գործառույթ:
uModBus գրադարանն ունի յուրաքանչյուր գործառույթի մեթոդ.
- read_coils
- կարդալ_դիսկրետ_ մուտքագրումներ
- read_holding_registers
- read_input_registers
- write_single_coil
- գրել_միայն_գրանցել
Նախ, եկեք գրենք որոշ արժեքներ:
1) Գրեք կծիկներ (ֆունկցիա ՝ 5)
Ստրուկ 1 -ից 200 գրանցման համար գրեք 1 արժեք.
modbus.write_single_coil (1, 200, 0xFF00)
Առաջին փաստարկը ստրուկի id- ի համար է, մեր դեպքում 1.
Երկրորդը գրանցման համարն է, իսկ thirs- ը `արժեք: 1 -ի համար այստեղ պետք է տեղադրել 0xFF00: Ստրուկ 1 -ից գրեք 0 -ից 201 գրանցում.
modbus.write_single_coil (1, 201, 0)
Այս մեթոդը թույլ է տալիս գրել միայն բուլյան արժեքներ `0 կամ 1:
2) գրել գրանցամատյաններ (ֆունկցիա ՝ 6)
Այժմ գրեք մի քանի ամբողջ արժեք մի քանի գրանցամատյանում:
Ստրուկ 1 -ից 100 -ը գրանցելու համար գրեք ստորագրված 111 արժեքը.
modbus.write_single_register (1, 100, 111, True)
Առաջին փաստարկը ստրուկի ID է, երկրորդ գրանցամատյան, երրորդը `նոր արժեք: Վերջին փաստարկը սահմանում է, թե արդյոք արժեքը պետք է սահմանվի որպես ստորագրված թիվ: Դրա կանխադրված արժեքը True է: Անհրաժեշտ չէ այն սահմանել:
Ստրուկ 1 -ից 101 գրանցման համար գրեք ստորագրված -457 արժեքը:
modbus.write_single_register (1, 101, -457)
3 -րդ ստրուկից գրեք չստորագրված 50 արժեք 100 -ի գրանցման համար.
modbus.write_single_register (3, 100, 50, Կեղծ)
Այս մեթոդը թույլ է տալիս ամբողջ արժեքներ գրել մեկ գրանցամատյանում:
Մեկ գրանցամատյանը կարող է պարունակել 16 բիթանոց արժեքներ:
Մեթոդը վերադարձնում է isշմարիտ է, մուտքագրված արժեքը վավեր է, իսկ եթե ոչ, սխալ է: Արժեքը գրված է նույնիսկ եթե այն անվավեր է (գրանցման համար չափազանց մեծ)
3) Կարդալ ոլորուններ/դիսկրետ մուտքագրումներ
Այժմ եկեք կարդանք գրված բուլյան արժեքները: 1 գործառույթով գրանցամատյան կարդալու համար կարդացեք կծիկ, կատարեք.
modbus.read_coils (slaveId, գրանցել, հաշվել) [0: count]
2 ֆունկցիայով գրանցամատյանը կարդալու համար դիսկրետ մուտքագրում կարդալու համար կատարեք.
modbus.read_discrete_inputs (slaveId, գրանցել, հաշվել) [0: count]
որտեղ:
- slave -id - վիրտուալ ստրուկի id (Slave simulator- ն ընդունում է բոլոր վավեր ID- ները)
- գրանցամատյան - գրանցման համար `կարդալու համար
- հաշվարկ - կարդալու գրանցամատյանների քանակը (ցանկալի գումարը տեղադրեք երկու տեղում)
Այս մեթոդները վերադարձնում են զանգված բուլյան արժեքներով: Յուրաքանչյուր արժեք համապատասխանում է յուրաքանչյուր գրանցամատյանին:
[0: count] հատվածը անհրաժեշտ է, քանի որ այս մեթոդը վերադարձնում է ավելի շատ արժեքներ, քան հաշվելը: Այն վերադարձնում է միշտ արժեքների այն գումարը, որը բաժանվում է 8 -ի: Լրացուցիչ արժեքները False են և չեն համապատասխանում որևէ գրանցամատյանի:
Կարդացեք մեր բուլյան արժեքները երկու մեթոդներով.
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
Արդյունքը կլինի այսպիսին ՝ ՕՐԻՆԱԿ
Trueշմարիտը վերաբերում է 1 արժեքին, Սխալը `0 -ին:
4) կարդալ մատյաններ
Այժմ կարդացեք 6 գործառույթով գրված գրանցամատյանների արժեքները:
3 ֆունկցիայի գրանցամատյանները կարդալու համար պահող գրանցամատյանները կատարեք.
modbus.read_holding_registers (slaveId, գրանցել, հաշվել, ստորագրել = True)
4 ֆունկցիայի գրանցամատյանները կարդալու համար կարդացեք մուտքային գրանցամատյանները, կատարեք.
modbus.read_input_registers (slaveId, գրանցել, հաշվել, ստորագրել = True)
որտեղ:
- slave -id - վիրտուալ ստրուկի id
- գրանցամատյան - գրանցման համար `կարդալու համար
- հաշվարկ - ընթերցվող գրանցամատյանների քանակը
- ստորագրված - ցույց է տալիս, արդյոք ընթերցված արժեքները պետք է դիտվեն որպես ստորագրված թվեր, թե ոչ: Կանխադրված վիճակ. Ճշմարիտ
Վերադարձի արժեքը եռյակ է `գրանցիչների ցանկալի քանակությամբ:
Կարդացեք նախորդ կետում տեղադրված գրանցամատյանները.
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)
Արդյունքները պետք է նման լինեն այս սքրինշոթին ՝ ՕՐԻՆԱԿ
Հաջորդ դասում դուք կսովորեք, թե ինչպես ստեղծել Modbus RTU Master ESP32- ով միացված սարքի վրա:
Խորհուրդ ենք տալիս:
Արդյունաբերական HMI և Arduinos MODBUS RTU- ում ՝ 4 քայլ

Արդյունաբերական HMI- ն և Arduinos- ը MODBUS RTU- ում. Այս ձեռնարկում ես նկարագրելու եմ արդյունաբերական HMI (COOLMAY MT6070H, 150EUROS), Arduino CLONE DIY (10EUROS) և Arduino UNO (10EUROS) միջև հաղորդակցության օրինակ: Theանցը գործելու է հատուկ և հզոր և արդյունաբերական նախատիպի ներքո
Modbus TCP հաղորդակցություն Arduino- ի և արդյունաբերական սարքերի միջև. 3 քայլ

Modbus TCP հաղորդակցություն Arduino- ի և արդյունաբերական սարքերի միջև. Արդյունաբերական միջոց ՝ արդյունաբերական HMI- ով Arduino տախտակը կառավարելու և այն Modbus TCP հաղորդակցությամբ արդյունաբերական ցանցին կապելու համար:
Սկսելով ESP32 - - ով ESP32 տախտակների տեղադրում Arduino IDE- ում - ESP32 Blink կոդ ՝ 3 քայլ

Սկսելով ESP32 | - ով ESP32 տախտակների տեղադրում Arduino IDE- ում | ESP32 Blink Code: Այս հրահանգների մեջ մենք կտեսնենք, թե ինչպես սկսել աշխատել esp32- ի հետ և ինչպես տեղադրել esp32 տախտակները Arduino IDE- ում, և մենք ծրագրելու ենք esp 32 -ին `թարթելու ծածկագիրը գործարկելով arduino ide- ի միջոցով:
TCP/IP միացում GPRS- ի միջոցով. Ինչպես ուղարկել տվյալներ սերվերին `օգտագործելով SIM900A մոդուլը. 4 քայլ

TCP/IP միացում GPRS- ի միջոցով. Ինչպես ուղարկել տվյալներ սերվերին `օգտագործելով SIM900A մոդուլը. Այս ձեռնարկում ես ձեզ կասեմ, թե ինչպես կարելի է տվյալներ ուղարկել TCP սերվերին` օգտագործելով sim900 մոդուլը: Նաև կտեսնենք, թե ինչպես կարող ենք տվյալներ ստանալ սերվերից հաճախորդին (GSM մոդուլ)
Հաշվիչ PZEM-004 + ESP8266 և հարթակ IoT հանգույց-RED և Modbus TCP/IP: 7 քայլ

Հաշվիչ PZEM-004 + ESP8266 և հարթակ IoT Node-RED & Modbus TCP/IP. Այս հնարավորության դեպքում մենք կմիավորենք մեր ակտիվ էներգիայի հաշվիչը կամ էլեկտրական սպառումը, Pzem-004-Peacefair ՝ նախորդ ձեռնարկներում օգտագործված IoT Node-RED ինտեգրման հարթակով, մենք կօգտագործենք ESP8266 մոդուլը, որը կազմաձևված է որպես Modbus TCP / IP ստրուկ, հետագայում