Բովանդակություն:

ESP32 Modbus Master TCP: 7 քայլ
ESP32 Modbus Master TCP: 7 քայլ

Video: ESP32 Modbus Master TCP: 7 քայլ

Video: ESP32 Modbus Master TCP: 7 քայլ
Video: How to Make PLC LCD HMI || FLProg 2024, Հունիսի
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

Այս դասում դուք ծրագրավորելու եք 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 TCP Slave Simulator- ը
Ներբեռնեք և գործարկեք 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 նավահանգիստ կամ փոխարկիչ: Ստուգեք ձեր սարքի տարբերակը (որ նավահանգստի տեսակն է այն օգտագործում) և գտեք համապատասխան նավահանգիստ կամ փոխարկիչ:

  1. Միացրեք սարքը համակարգչին
  2. Այնուհետև միացրեք էլեկտրամատակարարումը դրան

Միացրեք սարքը համակարգչին, ապա միացրեք էլեկտրամատակարարումը դրան: Կարող եք նաև Ethernet մալուխը միացնել Moduino ESP32- ին (եթե այն ունի այդ պորտը):

Միացումը պետք է լինի այնպես, ինչպես վերևի լուսանկարներում:

Գտեք նավահանգստի ուղին, որն օգտագործվում է սարքի միացման համար: Դա կարող է լինել օրինակ ՝ /dev /ttyS1, /dev /ttyUSB0:

USB փոխարկիչների համար ուղին կպարունակի USB բառ:

Դուք կարող եք միանալ սարքին picocom ծրագրով.

picocom /dev /ttyUSB0 -b 115200

Սարքի հրամանի տողը նման է ստորև ներկայացված այս պատկերներից մեկին:

Moduino ESP32. Տես այստեղ

Moduino Pycom. Տես այստեղ

Քայլ 4: Ներբեռնեք Modbus Master գրադարանը

Վերբեռնեք Modbus Master գրադարանը
Վերբեռնեք 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 Slave- ի հետ
Սկսեք հաղորդակցումը 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 գրադարանն ունի յուրաքանչյուր գործառույթի մեթոդ.

  1. read_coils
  2. կարդալ_դիսկրետ_ մուտքագրումներ
  3. read_holding_registers
  4. read_input_registers
  5. write_single_coil
  6. գրել_միայն_գրանցել

Նախ, եկեք գրենք որոշ արժեքներ:

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- ով միացված սարքի վրա:

Խորհուրդ ենք տալիս: