Modbus-RTU drayveri tushunchalari va virtual sinov bo‘yicha qo‘llanma

Modbus-RTU drayveri tushunchalari va virtual sinov bo‘yicha qo‘llanma

Modbus-RTU zavodlar va sanoat obyektlarida uzoq vaqtdan beri qo‘llanib kelinayotgan aloqa usuli bo‘lib, u haqida ko‘plab hujjatlar mavjud va amaliyotda tez-tez uchraydi. Biroq liniyalarni bevosita ulash va aloqani kuzatish uchun RS-485 konvertori yoki haqiqiy uskuna kerak bo‘ladi, shu sababli uni amaliy jihatdan tushunish ko‘pincha qiyin bo‘lib qoladi.

Ushbu maqolada avval Modbus tushunchasini qisqacha bayon qilaman, keyin esa haqiqiy uskunalarsiz, com0com (virtual ketma-ket portlar) va ikkita test dasturi — Modbus Poll/Modbus Slave yordamida aloqani to‘liq kompyuter ichida qanday yaratish va sinashni ko‘rib chiqaman.

1. Modbus nima?

Modbus ilk bor 1979-yilda yaratilgan va sanoat muhitida eng ko‘p qo‘llanadigan aloqa protokollaridan biri bo‘lib qolmoqda. PLC, sensorlar, o‘lchash asboblari va invertorlar kabi qurilmalar turli ishlab chiqaruvchilar tomonidan ishlab chiqarilgan bo‘lsa ham, ular ushbu standartga mos kelsa, o‘zaro aloqa qila oladi. Shu sababli Modbus yangi uskunalarda ham qo‘llanilishda davom etmoqda.

Modbus aloqa tuzilmasi har doim “Master” va “Slave” qismlariga bo‘linadi. Slave faqat Master avval so‘rov yuborganidan keyin javob beradi, shuning uchun Slave hech qachon o‘z tashabbusi bilan ma’lumot yubormaydi. Bitta Master ostiga bir nechta Slave ulanishi mumkin va har bir Slave yagona Slave ID (1–247) orqali aniqlanadi.

Ushbu Master–Slave muloqoti amalga oshadigan fizik liniyaga qarab, Modbus keng ma’noda ikki turga bo‘linadi.

Kategoriya

Modbus TCP

Modbus RTU

Fizik qatlam

Ethernet (LAN kabeli)

RS-232 / RS-485 ketma-ket aloqa

Adreslash

IP manzil + port

Slave ID (1–247)

Kadr tuzilmasi

MBAP sarlavhasi + PDU

Slave ID + PDU + CRC16

Xususiyatlari

Tarmoqni sozlash oson va tez

Ulash arzon va uzoq masofalarni qamrab olishi mumkin (RS-485: 1,2 km, 32 tagacha qurilma), shu sababli u dala asboblari va eski uskunalarda hanuz keng qo‘llanadi.

RTU kadri quyida ko‘rsatilganidek, juda sodda tuzilishga ega.

Slave ID (1 bayt)

Function Code (1 bayt)

Ma’lumotlar (o‘zgaruvchan uzunlik)

CRC16 (2 bayt)

So‘rovni qabul qilishi kerak bo‘lgan qurilma raqami

Bajariladigan amal (o‘qish/yozish va hokazo)

Registr manzili, miqdori, qiymati va hokazo

Xatolarni aniqlash uchun nazorat yig‘indisi

Keng qo‘llanadigan bir nechta Function Codeʼni bilish mashqlarning aksariyatini tushunish uchun yetarli.

  • 03 (Read Holding Registers) — registr qiymatlarini o‘qiydi. Mashqlarda eng ko‘p ishlatiladi.

  • 06 (Write Single Register) — bitta registrga qiymat yozadi.

  • 01 (Read Coils) — Yoqilgan/O‘chirilgan qiymatlarni (bitlarni) o‘qiydi.

  • 16 (Write Multiple Registers) — bir vaqtning o‘zida bir nechta registrga qiymatlar yozadi.

RTU aloqasi ishlashi uchun Master va Slave quyidagi to‘rtta aloqa parametrida to‘liq mos kelishi kerak: Baud Rate (uzatish tezligi, masalan, 9600), Parity (odatda None), Data Bits (odatda 8) va Stop Bits (odatda 1). Ulardan bittasi ham farq qilsa, umuman javob bo‘lmasligi yoki qabul qilingan qiymatlar buzilishi mumkin.

Xulosa: RTU “kim (Slave ID) nimani (funksiya kodi), qayerda (manzil) va qancha (miqdor) almashadi” degan ma’noni juda qisqa baytlar ketma-ketligi orqali ifodalaydigan sodda protokol bo‘lib, oxirida CRC yordamida xatolarni tekshiradi.

2. Nima uchun virtual ketma-ket portlar yordamida sinash kerak?

RTU aloqasini bevosita kuzatish uchun odatda RS-485 konvertori, kabellar va javob bera oladigan haqiqiy Slave qurilmasi kerak bo‘ladi. Biroq faqat “aloqaning o‘zi to‘g‘ri ishlayotganini” tekshirmoqchi bo‘lsangiz, buni ushbu uskunalarsiz kompyuter ichida takrorlash mumkin. com0com — Windows uchun bepul, ochiq kodli virtual null-modem drayveridir. O‘rnatilgandan so‘ng u ichki tarzda ulangan COM portlar juftligini yaratadi. Bir portga yozilgan baytlar ikkinchi portning qabul qilish buferiga o‘zgarmagan holda yetib borgani sababli, bu haqiqiy kabel bilan ikkita qurilmani ulashdagi kabi holatni yaratadi.

Ushbu virtual portlar juftligining har bir uchiga bittadan dastur ulab, ularga mos ravishda Master va Slave rollarini berishingiz mumkin.

  • Modbus Slave — simulyatsiya qilingan dala qurilmasi sifatida ishlaydi. U muayyan manzillarda qiymatlarni saqlaydi va so‘rov kelganda javob beradi.

  • Modbus Poll — Master sifatida ishlaydi. U Slaveʼdan qiymatlarni davriy ravishda o‘qiydi yoki unga yozadi.

Ikkala dastur ham Witte Software (modbustools.com) tomonidan tarqatiladigan Windows uchun juft yordamchi dasturlardir va hatto bepul sinov versiyasi ham asosiy sinovlar uchun yetarlidir.

3. com0comʼni sozlash

  1. com0comʼni yuklab oling va uni administrator huquqlari bilan o‘rnating.

  2. Odatiy holatda o‘rnatish CNCA0 ↔ CNCB0 nomli bitta portlar juftligini yaratadi. Sozlamalar oynasida nomlarni xohlagan COM raqamlariga o‘zgartirishingiz mumkin — ushbu maqolada ular COM7 (Slave tomoni) va COM8 (Master tomoni) qilib o‘zgartirilgan deb hisoblaymiz.

  3. Port parametrlarida “Baudrate emulyatsiyasi”ni yoqish tavsiya etiladi. U o‘chirilganida, haqiqiy ketma-ket liniyadan farqli ravishda, ma’lumotlar uzatish tezligidan qat’i nazar darhol yetkaziladi. Ayrim dasturlar kadr tugaganini “belgilar orasidagi kutish vaqti” asosida aniqlaydi, shuning uchun vaqt ketma-ketligini haqiqiy uskunadagiga yaqinroq qilish sinovlar uchun xavfsizroqdir.

  4. Sozlamalarni saqlagandan so‘ng, Windows Device Managerʼdagi “Ports (COM & LPT)” ro‘yxatida COM7 va COM8 ko‘rinayotganini tekshiring.

image1.png

com0com sozlamalari oynasiga misol — COM7 ↔ COM8 portlar juftligi va parametrlar (haqiqiy ekran versiyaga qarab farq qilishi mumkin)

image2.png

Device Manager oynasiga misol — COM7 va COM8 portlarining mavjudligini tekshirish

4. Modbus Slave yordamida soxta qurilma yaratish

Modbus Slave dasturini ishga tushiring, uni COM7 portiga ulang va aloqa parametrlarini ko‘rsatilgan qiymatlarga o‘rnating.

  • Port: COM7

  • Baud tezligi / Paritet / Ma’lumot bitlari / To‘xtash bitlari: 9600 / None / 8 / 1

  • Slave ID: 1

Ulangandan so‘ng registr qiymatlarini tahrirlash jadvali ham paydo bo‘ladi. Sozlamalar menyusida funksiyani 03 Holding Registers ga o‘rnating, boshlang‘ich manzilni 40001 qilib belgilang, mos registrlar sonini ko‘rsating, so‘ng jadvaldagi qiymat ustiga ikki marta bosib, istalgan test qiymatini kiriting (masalan, 40001 manziliga 1234 ni kiriting).

image3.png

Modbus Slave ekraniga misol — chapda: ulanish sozlamalari (COM7, 9600-N-8-1, Slave ID 1) / o‘ngda: registr qiymati (40001=1234)

5. Modbus Poll yordamida qiymatlarni o‘qish

Bu safar Modbus Poll dasturini ishga tushiring va uni qarama-qarshi port — COM8 ga ulang. Aloqa parametrlarini Modbus Slave uchun ishlatilgan qiymatlar bilan aynan bir xil qilib o‘rnating.

  • Port: COM8

  • Baud tezligi / Paritet / Ma’lumot bitlari / To‘xtash bitlari: 9600 / None / 8 / 1 (Slave bilan bir xil)

  • Slave ID: 1 (Slave bilan bir xil)

Sozlamalar menyusidan Read/Write Definition bo‘limini oching, funksiyani 03 Holding Registers ga o‘rnating, boshlang‘ich manzilni 40001 qilib belgilang va registrlar sonini Modbus Slave dagi qiymatga moslang. Shundan so‘ng Modbus Poll vaqti-vaqti bilan COM8 → (com0com) → COM7 → Modbus Slave ketma-ketligida so‘rovlar yuboradi, javobni qabul qiladi va uni ekranda ko‘rsatadi. Agar avval Slave tomonida kiritilgan qiymat (1234) o‘zgarmagan holda ko‘rinsa, aloqa to‘g‘ri ishlayotgan bo‘ladi.

image4.png

Modbus Poll ekraniga misol — chapda: ulanish/o‘qish sozlamalari (COM8) / o‘ngda: javob natijasi (40001=1234, Slave bilan mos)

Agar Modbus Slave ekranidagi qiymatni yana o‘zgartirsangiz, keyingi so‘rov siklida Modbus Poll ekranidagi qiymat yangilanganini ko‘rishingiz mumkin. Ikki tomon qiymatlarni hech qanday tafovutsiz almashayotganini tasdiqlaganingizdan so‘ng, hech qanday haqiqiy uskunasiz RTU kadrlarini yuborish va qabul qilishdan tortib aloqa parametrlarini moslashtirishgacha bo‘lgan tekshiruvni deyarli yakunlagan bo‘lasiz.

6. Muammo yuzaga kelganda tekshiriladigan jihatlar

  • Javob bo‘lmaganda (vaqt tugaganda): Modbus Poll va Modbus Slave dasturlaridagi Baud tezligi, Paritet, Ma’lumot bitlari va To‘xtash bitlari sozlamalari aynan bir xil ekanini tekshiring hamda Slave ID mos kelishini tasdiqlang.

  • Portni ochib bo‘lmaganda: xuddi shu COM portdan boshqa dastur foydalanayotgan-foydalanmayotganini tekshiring. (Bir vaqtning o‘zida portni faqat bitta dastur ochishi mumkin.)

  • Qiymatlar noto‘g‘ri ko‘ringanda (masalan, CRC xatosi): com0com dasturidagi baud tezligini emulyatsiya qilish opsiyasini tekshiring va ikkala tomondagi boshlang‘ich manzil hamda registrlar soni sozlamalari bir xil registrlarga yo‘naltirilganini tasdiqlang.

7. Xulosa

Xulosa qilib aytganda, RTU aslida oldindan belgilangan aloqa parametrlaridan foydalangan holda “Slave ID + funksiya kodi + ma’lumotlar + CRC” kabi qisqa baytlar ketma-ketligini almashishdan iborat. Jismoniy simlarsiz ham com0com yordamida virtual COM portlar juftligini yaratib, bir uchiga Modbus Slave (soxta qurilma)ni, ikkinchi uchiga esa Modbus Poll (master)ni ulashingiz mumkin. Bu RS-485 simlari yoki haqiqiy dala uskunalarisiz butun Modbus-RTU aloqa jarayonini — so‘rov kadrini yaratish, ketma-ket uzatish, javob olish, CRC tekshiruvi va qiymatni ko‘rsatish bosqichlarini — ekranda tekshirish imkonini beradi. Agar so‘rov kadrining yaratilishi va ketma-ket uzatilishidan boshlab, javobning kelishi hamda qiymatning ekranda ko‘rsatilishigacha bo‘lgan jarayonni to‘liq kuzatgan bo‘lsangiz, RTU aloqasining barcha asosiy jihatlarini allaqachon tekshirgan bo‘lasiz.

Shu paytgacha Modbus drayveri yordamida virtual portlar orqali test o‘tkazishni mashq qildingiz. Haqiqiy RS-485 uskunasi tayyor bo‘lgach, qilinadigan ishlar unchalik ko‘p qolmaydi. Shunchaki com0com o‘rniga COM portga ulangan haqiqiy RS-485 konvertorini qo‘ying, Modbus Poll o‘rniga foydalanadigan haqiqiy master qurilma yoki dasturini ulang va aloqa parametrlarini, masalan, Baud tezligi, Paritet va Slave ID ni uskuna spetsifikatsiyalariga moslab qayta sozlang.

Manbalar

Luna

Site footer