Mundarija:

ESP32 Modbus Master TCP: 7 qadam
ESP32 Modbus Master TCP: 7 qadam

Video: ESP32 Modbus Master TCP: 7 qadam

Video: ESP32 Modbus Master TCP: 7 qadam
Video: Работа с Modbus RTU/TCP. Примеры проектов. 2024, Iyun
Anonim
ESP32 Modbus Master TCP
ESP32 Modbus Master TCP

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 TCP Slave Simulator -ni yuklab oling va ishga tushiring
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

Kompyuteringizni qurilmaga ulanishga tayyorlang
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

Qurilmani tayyorlang va unga ulaning
Qurilmani tayyorlang va unga ulaning
Qurilmani tayyorlang va unga ulaning
Qurilmani tayyorlang va unga ulaning
Qurilmani tayyorlang va unga ulaning
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.

  1. Qurilmani kompyuterga ulang
  2. 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

Modbus Master kutubxonasini yuklash
Modbus Master kutubxonasini yuklash

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

Tarmoqqa ulanish
Tarmoqqa ulanish

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 Slave bilan aloqani boshlang
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

Registrlarni o'qish va yozish
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:

  1. read_coils
  2. alohida_ kirishlarni o'qish
  3. read_holding_registers
  4. read_input_registers
  5. yozing
  6. 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: