Mundarija:
- 1 -qadam: Modbus TCP Slave Simulator -ni yuklab oling va ishga tushiring
- 2 -qadam: Kompyuteringizni qurilmaga ulanishga tayyorlang
- 3 -qadam: qurilmani tayyorlang va unga ulaning
- 4 -qadam: Modbus Master kutubxonasini yuklang
- 5 -qadam: Tarmoqqa ulaning
- 6 -qadam: Modbus Slave bilan aloqani boshlang
- 7 -qadam: Registrlarni o'qish va yozish
Video: ESP32 Modbus Master TCP: 7 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
Bu sinfda siz ESP32 protsessorini Modbus TCP Master dasturlashtirasiz.
Biz ikkita protsessorni o'z ichiga olamiz: Moduino ESP32 va Pycom. Ikkala qurilma ham MicroPytthon muhitida ishlaydi. Bizning Modbus Slave - bu kompyuterda Modbus simulyatori bilan ishlaydigan kompyuter bo'ladi.
Sizga kerak bo'ladi:
- Moduino ESP32 yoki Moduino Pycom qurilmasi (Moduino ESP32 qurilmasi va Pycom qurilmasini tekshirish uchun bu veb -saytga qarang)
- Linux operatsion tizimiga ega kompyuter
- Kompyuteringizda RS-232/RS-485 porti yoki USB-dan RS-232/RS-485 konvertori
1 -qadam: Modbus TCP Slave Simulator -ni yuklab oling va ishga tushiring
Modbus Slave simulyatorini https://www.modbusdriver.com/diagslave.html saytidan yuklab oling, so'ngra Linux operatsion tizimi uchun yuklab olingan arxivni oching va oching.
Dasturni konsoldan -p argumenti bilan ishga tushiring:
./diagslave -p
bu Modbus Slave serveri ishlaydigan port. Modbus protokoli uchun bu sukut bo'yicha 502, lekin siz boshqasidan foydalanishingiz mumkin.
Linux -da 1024 -dan past bo'lgan portlarni oddiy foydalanuvchidan ishlaydigan dasturlar ishlata olmaydi (ildiz huquqlari emas).
Qaysi portdan foydalanayotganingizni eslang. Bu qiymat keyinroq kerak bo'ladi.
2 -qadam: Kompyuteringizni qurilmaga ulanishga tayyorlang
Qurilmaga ulanish va unga fayllarni yuborish uchun sizga ba'zi dasturlar kerak bo'ladi.
Python muhitini va pipini o'rnating (agar u bo'lmasa):
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
Picocom -ni o'rnating:
apt-get picocom-ni o'rnating
Bu dastur qurilmaga ulanish va undagi buyruqlarni bajarish uchun kerak.
pip o'rnatish mpfshell
Ushbu dastur fayllarni qurilmaga yuborish imkonini beradi.
Siz uni manbalardan o'rnatishingiz mumkin. Bu sahifaga qarang:
3 -qadam: qurilmani tayyorlang va unga ulaning
Moduino yoki Pycom qurilmasini kompyuterga ulash uchun sizga RS-232/RS-485 porti yoki konvertori kerak. Qurilmangiz versiyasini tekshiring (u qaysi port turidan foydalanadi) va tegishli port yoki konvertorni toping.
- Qurilmani kompyuterga ulang
- Keyin quvvat manbaini unga ulang
Qurilmani kompyuterga ulang va keyin quvvat manbaiga ulang. Siz Ethernet kabelini Moduino ESP32 -ga ulashingiz mumkin (agar u portga ega bo'lsa).
Ulanish yuqoridagi fotosuratlardagidek bo'lishi kerak
Qurilma ulanishi uchun ishlatiladigan port yo'lini toping, masalan: /dev /ttyS1, /dev /ttyUSB0.
USB konvertorlari uchun yo'l USB so'zini o'z ichiga oladi.
Siz qurilmaga picocom dasturi yordamida ulanishingiz mumkin:
picocom /dev /ttyUSB0 -b 115200
Qurilmaning buyruq satri quyidagi rasmlardan biriga o'xshaydi.
Moduino ESP32: Bu yerga qarang
Moduino Pycom: Bu yerga qarang
4 -qadam: Modbus Master kutubxonasini yuklang
github.com/pycom/pycom-modbus/ Modbus Slave bilan muloqot qilish uchun sizga tegishli kutubxona kerak. Pycom kutubxonalari Moduino bilan mos kelmaydi. Qurilmangizga mos keladigan ko'rsatmalarni tekshiring.
Fayllarni yuborishdan oldin picocom -ni yoping: Ctrl+A va keyin Ctrl+X tugmalarini bosing.
Moduino ESP32 uchun uModBus kutubxonasi Moduino Pycom uchun pycom-modbus kutubxonasiga asoslangan. U oddiy ESP32 qurilmasida ishlash uchun o'zgartirilgan. U shuningdek, ulanish sinflari uchun qo'shimcha close () usullariga ega.
1) Moduino ESP32
Kutubxonani https://github.com/techbase123/micropython-modbus saytidan yuklab oling. Arxivni oching va barcha 4 faylni Moduino qurilmasiga yuboring.
Ularni yuklash uchun mpfshell -dan foydalaning. Ushbu dasturni ushbu fayllar bilan katalogda ishga tushiring.
Qurilmaga ulang: BU
ttyUSB0 - bu qurilma ulangan ketma -ket port nomi.
Buyruq bilan katalogni /flash /lib ga o'zgartiring:
cd /flash /lib
Barcha fayllarni buyruqlar bilan joylashtiring:
uModBusConst.py -ni joylashtiring
qo'yish uModBusFunctions.py qo'yish uModBusTCP.py qo'yish uModBusSerial.py
MISOL
Keyin chiqish buyrug'i bilan konsoldan chiqing va Reset tugmasi yordamida qurilmani qayta ishga tushiring.
2) Moduino Pycom
Kutubxonani https://github.com/pycom/pycom-modbus/ saytidan yuklab oling. Arxivni oching va uModbus katalogining tarkibini qurilmaga yuboring, ularni yuklash uchun mpfshell -dan foydalaning. Ushbu dasturni ushbu fayllar bilan katalogda ishga tushiring.
Quyidagi amallarni bajarish orqali qurilmaga ulaning:
ochiq ttyUSB0
ttyUSB0 - bu qurilma ulangan ketma -ket port nomi.
Katalogni /flash /lib ga o'zgartiring, uModbus katalogini yarating va uni buyruqlar bilan kiriting:
CD /flesh /libmd uModbus cd uModbus
Barcha fayllarni buyruqlar bilan joylashtiring:
const.py qo'ying
qo'yish functions.py qo'yish tcp.py qo'yish serial.py
Keyin chiqish buyrug'i bilan konsoldan chiqing va Reset tugmasi yordamida qurilmani qayta ishga tushiring.
MISOL
5 -qadam: Tarmoqqa ulaning
Aloqa o'rnatish buyruqlari Moduino va Pycom o'rtasida farq qiladi.
Tegishli buyruqlarni bajarish uchun qurilmaga pikokom bilan ulaning. Moduino qurilmasini simli yoki simsiz tarmoqqa ulashingiz mumkin. Quyidagi misollar sizning tarmog'ingizda DHCP serveri borligini taxmin qiladi.
Boshqa hollarda, qurilma IP -manzilga ega bo'lmaydi, Wi -Fi -ni qo'llab -quvvatlash har bir Moduino -da mavjud. Ethernet porti - bu barcha qurilmalarda mavjud emas.
1) Moduino ESP32
WiFi tarmog'iga ulanish
Qurilmada quyidagi buyruqlarni bajaring:
netWiFi -dan import netWiFiwifi = netWiFi (netWiFi. WIFI_STA, 'ESSID', 'PASS') wifi.start ()
ESSID -ni Wi -Fi tarmog'ining nomi bilan almashtiring va PASS -ni parol bilan almashtiring.
Start () bajarilgandan keyin biroz vaqt o'tgach, siz qurilmangizga tayinlangan IP -manzilni olishingiz kerak.
Ethernet tarmog'iga ulanish
Ethernet kabeli orqali qurilmani simli tarmoqqa ulang.
Keyin quyidagi buyruqlarni bajaring:
netETH importidan netETHeth = netETH () eth.start ()
Start () tugagandan so'ng bir muncha vaqt o'tgach, siz qurilmangizga tayinlangan IP -manzilni olishingiz kerak.
2) Moduino Pycom
WiFi tarmog'iga ulaning
Qurilmada quyidagi buyruqlarni bajaring:
tarmoq importidan WLANwlan = WLAN (rejim = WLAN. STA) tarmoqlar = wlan.scan () tarmoqdagi tarmoq uchun: agar net.ssid == 'ESSID': chop etish ('Tarmoq topildi!') wlan.connect (net.ssid), auth = (net.sec, 'PASS'), vaqt tugashi = 5000) wlan.isconnected () bo'lmaganida: machine.idle () print ('WLAN ulanishi muvaffaqiyatli bo'ldi!') tanaffus
ESSID -ni Wi -Fi tarmog'ining nomi bilan almashtiring va PASS -ni parol bilan almashtiring.
6 -qadam: Modbus Slave bilan aloqani boshlang
Modbus Master kutubxonalari ikkala qurilma uchun ham o'xshash
Ular ishga tushirishda farq qiladi.
1) Moduino ESP32 -da uModBus -ni ishga tushiring
Ijro etish:
uModBusTCP dan uModBusTCPni TCP sifatida import qilish
2) PyMo'da uModBus -ni ishga tushiring
Ijro etish:
uModbus.tcp dan TCP import qilish
Ochiq ulanish
Keyin ulanishni oching:
modbus = TCP ('IP', PORT, 60)
qayerda:
- Modbus Slave simulyatori yordamida kompyuteringizning IP -IP -manzili
- PORT - Modbus qulining porti
- 60 - bu tanaffus
Agar o'qish/yozish buyruqlarini bajarishda quyidagi xato ro'y bersa: O'RNAK
bajaring:
Moduino ESP32 uchun:
modbus.close ()
Moduino Pycom uchun:
modbus._sock.close ()
va keyin ulanishni qayta yarating:
modbus = TCP ('IP', PORT, 60)
Bu ulanishni qayta tiklashdan oldin rozetkani yopish uchun juda muhim.
7 -qadam: Registrlarni o'qish va yozish
Modbus registrlarni o'qish va yozish uchun bir nechta funktsiyalarni qo'llab -quvvatlaydi.
uModBus kutubxonasida har bir funktsiya uchun usul mavjud:
- read_coils
- alohida_ kirishlarni o'qish
- read_holding_registers
- read_input_registers
- yozing
- yozing_single_register
Birinchidan, ba'zi qiymatlarni yozishga ruxsat bering.
1) rulonlarni yozing (funktsiya: 5)
1 -banddan 200 ta registrga 1 qiymat yozing:
modbus.write_single_coil (1, 200, 0xFF00)
Birinchi dalil qul identifikatori uchun, bizning holatda 1.
Ikkinchisi - ro'yxatga olish raqami va chanqoqlik - bu qiymat. 1 uchun bu erga 0xFF00 qo'yish kerak. 1 -banddan 0 dan 201 gacha ro'yxatdan yozing:
modbus.write_single_coil (1, 201, 0)
Bu usul faqat mantiqiy qiymatlarni yozishga imkon beradi: 0 yoki 1.
2) Registrlarni yozing (vazifa: 6)
Endi bir nechta registrlarga butun sonli qiymatlarni yozing.
1 -banddan 100ni ro'yxatdan o'tkazish uchun imzolangan 111 qiymatini yozing:
modbus.write_single_register (1, 100, 111, To'g'ri)
Birinchi dalil - qul identifikatori, ikkinchi registr raqami, uchinchisi - yangi qiymat. Oxirgi argument qiymat imzolangan raqam sifatida belgilanishi kerakligini aniqlaydi. Buning uchun standart qiymat True. Siz uni sozlashingiz shart emas.
101 -ro'yxatdan 1 -banddan imzolangan -457 qiymatini yozing:
modbus.write_single_register (1, 101, -457)
3 -banddan 100 ta ro'yxatga imzolanmagan 50 qiymatini yozing:
modbus.write_single_register (3, 100, 50, noto'g'ri)
Bu usul butun sonlarni bitta registrga yozishga imkon beradi.
Yagona registr 16 bitli qiymatlarni o'z ichiga olishi mumkin.
"Qaytish" usuli "True" - kirish qiymati to'g'ri, agar "noto'g'ri" bo'lsa. Qiymat noto'g'ri bo'lsa ham yoziladi (ro'yxatdan o'tish uchun juda katta)
3) Bobinlarni/diskret kirishni o'qing
Keling, yozilgan mantiqiy qiymatlarni o'qiymiz. O'qish lasan 1 funktsiyali registrni o'qish uchun quyidagilarni bajaring:
modbus.read_coils (slaveId, ro'yxatdan o'tish, hisoblash) [0: hisoblash]
2 funktsiyali registrni o'qish uchun diskret kirishni o'qing:
modbus.read_discrete_inputs (slaveId, registratsiya, hisoblash) [0: hisoblash]
qayerda:
- slave -id - virtual qulning identifikatori (qul simulyatori barcha amaldagi identifikatorlarni qabul qiladi)
- ro'yxatdan o'tish - o'qish uchun ro'yxatdan o'tish raqami
- hisoblash - o'qilishi kerak bo'lgan registrlar soni (kerakli joyni ikkala joyga qo'ying)
Bu usullar qatorni boolean qiymatlar bilan qaytaradi. Har bir qiymat har bir registrga to'g'ri keladi.
Parcha: [0: count] kerak, chunki bu usul hisoblashdan ko'ra ko'proq qiymatlarni qaytaradi. U har doim 8 ga bo'linadigan qiymatlarni qaytaradi. Qo'shimcha qiymatlar noto'g'ri va hech qanday registrga to'g'ri kelmaydi.
Boolean qiymatlarimizni ikkala usulda o'qing:
modbus.read_coils (1, 200, 2) [0: 2] modbus.read_discrete_inputs (1, 200, 2) [0: 2]
Natija shunday bo'ladi: MISOL
True 1 qiymatga, False 0 ga tegishli.
4) registrlarni o'qish
Endi 6 funktsiyali yozilgan registrlardan qiymatlarni o'qing.
3 funktsiyali registrlarni o'qish uchun registrlarni o'qish uchun quyidagilarni bajaring:
modbus.read_holding_registers (slaveId, registratsiya, hisoblash, imzolangan = To'g'ri)
4 funktsiyali registrlarni o'qish uchun kirish registrlarini o'qing:
modbus.read_input_registers (slaveId, registratsiya, hisoblash, imzolangan = To'g'ri)
qayerda:
- slave -id - virtual qulning identifikatori
- ro'yxatdan o'tish - o'qish uchun ro'yxatdan o'tish raqami
- count - o'qilishi kerak bo'lgan registrlar soni
- imzolangan - o'qilgan qiymatlarni imzolangan raqamlar sifatida ko'rib chiqish kerakmi yoki yo'qligini ko'rsatadi. Standart holat: To'g'ri
Qaytish qiymati - kerakli miqdordagi registrlar to'plami.
Oldingi nuqtada o'rnatilgan registrlarni o'qing:
modbus.read_holding_registers (1, 100, 2, True) modbus.read_input_registers (1, 100, 2, True) modbus.read_holding_registers (3, 100, 1, False)
Natijalar ekran tasviridagi kabi bo'lishi kerak: EXAMPLE
Keyingi darsda siz ESP32 yoqilgan qurilmada Modbus RTU Master ni yaratishni o'rganasiz.
Tavsiya:
MODBUS RTU -dagi sanoat HMI va Arduinos: 4 qadam
MODBUS RTU -dagi sanoat HMI va Arduinos: Bu ko'rsatmada men sanoat HMI (COOLMAY MT6070H, 150EUROS), Arduino CLONE DIY (10EUROS) va Arduino UNO (10EUROS) o'rtasidagi aloqa misolini tasvirlab beraman. Tarmoq maxsus va mustahkam va sanoat prototipi ostida ishlaydi
Arduino va sanoat qurilmalari o'rtasida Modbus TCP aloqasi: 3 qadam
Arduino va sanoat qurilmalari o'rtasida Modbus TCP aloqasi: Arduino kartasini sanoat HMI bilan boshqarish va uni Modbus TCP aloqasi bilan sanoat tarmog'iga ulashning sanoat usuli
ESP32 bilan ishlashni boshlash - Arduino IDE -da ESP32 taxtalarini o'rnatish - ESP32 miltillovchi kod: 3 qadam
ESP32 bilan ishlashni boshlash | Arduino IDEda ESP32 taxtalarini o'rnatish | ESP32 Blink kodi: Ushbu ko'rsatmalarda biz esp32 bilan qanday ishlashni va esp32 platalarini Arduino IDE -ga qanday o'rnatishni ko'rib chiqamiz va biz esp 32 -ni arduino ide yordamida miltillovchi kodni ishga tushirishni dasturlashtiramiz
GPRS orqali TCP/IP ulanishi: SIM900A moduli yordamida serverga ma'lumotlarni qanday yuborish mumkin: 4 qadam
GPRS orqali TCP/IP ulanishi: SIM900A moduli yordamida serverga ma'lumotlarni qanday yuborish kerak: Ushbu qo'llanmada men sizga sim900 moduli yordamida TCP serveriga ma'lumotlarni qanday yuborish haqida aytib beraman. Shuningdek, biz serverdan mijozga ma'lumotlarni qanday qabul qilishni bilib olamiz (GSM moduli)
PZEM-004 + ESP8266 hisoblagichi va platformali IoT tugunli-RED va Modbus TCP/IP: 7 qadam
Hisoblagich PZEM-004 + ESP8266 va platforma IoT tugunli-RED va Modbus TCP/IP: Bu imkoniyatda biz faol quvvat o'lchagichimizni yoki elektr sarfini, Pzem-004-Peacefairni oldingi darsliklarda ishlatilgan IoT Node-RED integratsion platformasi bilan birlashtiramiz. biz keyinchalik Modbus TCP / IP qul sifatida tuzilgan ESP8266 modulidan foydalanamiz