Modbus: Asl sanoat fieldbus protokoli
Modbus remains widely deployed because its data model is simple, not because every implementation is simple. This guide explains frames, register mapping, ti...
Fieldbus — dala qurilmalarini sanoat kontrollerlariga ulash uchun sanoat tarmoqlarida ishlatiladigan aloqa protokoli. Fieldbus kontrollerlar va qurilmalar o‘rtasida zarur simlar miqdorini kamaytiradi, chunki bir nechta qurilma bir xil juft simga ulanishi mumkin.
Dunyoda Modbus, Profibus, Foundation Fieldbus, ControlNet, DeviceNet va boshqa ko‘plab mashhur fieldbus texnologiyalari mavjud.
1979-yilda Modicon o‘z PLC’lari bilan foydalanish uchun maxsus OSI modelining amaliyot qatlamidan foydalanadigan yangi protokolni taqdim etdi. Bu protokol Modbus deb ataldi va avtomatlashtirish tarixida keng qo‘llanilgan birinchi fieldbusga aylandi.

1-rasm. Dala qurilmalariga ulangan PLC
Modbusga kirish
Modbus dala qurilmalarini sanoat kontrollerlariga ulash uchun ishlab chiqilgan. U ixtiro qilingan paytda aksariyat qurilmalar qurilma holatini uzatish vositasi sifatida kuchlanish yoki tok ko‘rinishlaridan foydalangan. Modbus sensorlar va aktuatorlarning yuqori/past holatlarini aks ettiruvchi diskret bitlarni, shuningdek analog jarayon qiymatlariga mos keladigan butun sonlarni saqlovchi registrlarni samarali boshqara oladi.
Fieldbus texnologiyalariga o‘tish jarayonining sekin kechgani Modbusning eng sodda protokollardan biriga aylanishiga olib keldi; yillar davomida uning yangi versiyalari ham qo‘shildi.
Dastlab Modbus ketma-ket aloqa liniyasi, ya’ni RS-232/RS-485 orqali joriy etilgan. Bu variantlar hozir ham Modbus RTU va ASCII nomlari ostida keng qo‘llanadi. Keyinchalik protokol TCP/IP va Ethernet orqali foydalanish uchun moslashtirildi. Bu odatda Modbus TCP deb ataladi va zamonaviy o‘rnatishlarda Modbus’ning eng keng tarqalgan joriy etilishidir.
Aloqa modeli
Modbus aloqa uchun master/slave modelidan foydalanadi (Modbus TCP’da mijoz/server modeli). Modbus masteri Modbus slave’iga so‘rov yuboradi; slave amallarni bajarib, masterga javob qaytaradi. Bu holatda master ko‘pincha PLC bo‘ladi, dala qurilmalari esa slave sifatida ishlaydi.
Modbusdagi xabar freymi amaliyot ma’lumotlar birligi (ADU) va protokol ma’lumotlar birligidan (PDU) tashkil topadi. ADU ishlatilayotgan Modbus turiga qarab farq qiladi, PDU esa aloqa usuliga bog‘liq emas.
PDU odatda funksiya kodi va ayrim ma’lumotlardan tashkil topadi. Bu ADU tarkibida manzil va xatolarni tekshirish kodi bilan inkapsulyatsiya qilinadi. Modbus TCP ADU tarkibida MBAP (Modbus amaliyot protokoli) sarlavhasidan foydalanadi.

2-rasm. Modbus ASCII/RTU (yuqorida) va Modbus TCP (pastda) uchun Modbus ADU va PDU. Rasm Modbus.org materiallari asosida moslashtirilgan
PDU asosiy aloqa qatlamidan mustaqil bo‘lib qolishi uchun u dastlabki ketma-ket aloqa spetsifikatsiyasining hajm cheklovlariga mos kelishi kerak. RS-485 orqali uzatiladigan ADU uchun bu hajm 256 bayt edi. Shunday qilib, ADUdagi 1 ta manzil bayti va xatolarni tekshirish uchun 2 ta baytni hisobga olishimiz kerak, ya’ni PDU jami 253 bayt bilan cheklanadi. E’tibor bering, ADUdagi manzil aslida Modbus tarmog‘idagi slave qurilmaning identifikatori hisoblanadi.
PDUning ma’lumotlar qismida funksiya kodiga xos maydonlar hamda uzatilayotgan haqiqiy ma’lumotlar bo‘ladi. Ushbu maydonlar maqolaning keyingi qismida batafsil muhokama qilinadi.
Ma’lumotlarni ifodalash
Klassik Modbus ikkita uzatish rejimiga ega: ASCII va RTU.
ASCII rejimida ma’lumotlar 0–9 va A–F ASCII belgilaridan foydalanib yuboriladi, RTU rejimida esa ma’lumotlar 8 bitli ikkilik ko‘rinishda ifodalanadi. Ma’lumotlar va manzillar katta endian tartibida kodlanadi, natijada eng muhim bayt birinchi bo‘lib uzatiladi.
Modbus ma’lumotlari to‘rt asosiy turga bo‘linadi:
- Diskret kirishlar
- G‘altaklar (chiqishlar)
- Kirish registrlari
- Ushlab turuvchi registrlar
Diskret kirishlar ma’lumotlarning bitta bitini ifodalaydi va faqat o‘qish uchun mo‘ljallangan. G‘altaklar ham bitta bitni ifodalaydi, ammo ularni o‘qish ham, yozish ham mumkin. Kirish registrlari 16 bitli faqat o‘qiladigan ma’lumotlarni, ushlab turuvchi registrlar esa 16 bitli o‘qish-yozish ma’lumotlarini ifodalaydi.

3-rasm. Modbus protokoli spetsifikatsiyasidan olingan
Har bir tur uchun qurilma xotirasida maksimal 2^16 (65536) ta ma’lumotlar elementi joylashishi mumkin. Turli ma’lumotlar turlarining har biriga kirish uchun maxsus funksiya kodlari mavjud bo‘lib, ko‘pincha har bir tur xotiraning o‘ziga xos ajratilgan blokiga ega bo‘ladi.
Ma’lumotlar elementiga murojaat qilish uchun master 0 dan 65535 gacha bo‘lgan diapazondan foydalanadi. 1-ma’lumotlar elementi 0x0000 manzilida joylashadi. 2-ma’lumotlar elementi 0x0001 manzilida bo‘ladi. 65536-ma’lumotlar elementi 0xFFFF manzilida joylashadi. Qurilmalar barcha 65536 ta ma’lumotlar elementiga ega bo‘lishi shart emasligini yodda tuting; aslida Modbusdan foydalanadigan masofaviy I/O terminallarining aksariyatida bu maksimal chegaradan ancha kam element mavjud.
Modbus tranzaksiyalari
Ma’lumotlar Modbusda qanday ifodalanishini tushunib olgach, endi tranzaksiyalarni batafsil ko‘rib chiqishimiz mumkin. Bu PDU nuqtayi nazaridan amalga oshiriladi, chunki PDU aloqa qatlamiga bog‘liq emas.
Modbus tranzaksiyalarida o‘n oltilik belgilar ko‘rsatmalari qo‘llanadi, bunda bitta 8 bitli bayt 0x00 formatida bo‘ladi va har bir belgi uchun diapazon 0 dan F gacha. Shunday qilib, 16 bitli registr ikki baytga teng bo‘lib, 0x0000 formatida ifodalanadi.
Modbus spetsifikatsiyasi PDUlarning uch turini belgilaydi:
- Modbus so‘rovi
- Modbus javobi
- Modbus istisno javobi
Master funksiya kodidan foydalanib so‘rovni boshlaydi, qul esa ushbu so‘rovga javoban javob yuboradi. Muvaffaqiyatli javob master yuborgan funksiya kodini takrorlaydi. Istisno javobida ham xuddi shu funksiya kodi yuboriladi, biroq biror xatolik yuz berganini ko‘rsatish uchun msb (eng katta qiymatli bit) yuqori holatga o‘rnatiladi.
Modbus spetsifikatsiyasida bir qator funksiya kodlari belgilangan. 0x01 funksiya kodi katushkalarni o‘qish funksiyasidir.
4-rasmda katushkalarni o‘qish so‘rovi va javobi qanday ko‘rinishi mumkinligi misol tariqasida ko‘rsatilgan. Modbus masteri 0x01 funksiya kodi (Read Coils) bilan birinchi ma’lumot elementidan (0x0000 manzili) boshlab atigi bitta katushkani o‘qish uchun so‘rov yuboradi. Katushkalarni o‘qish funksiyasidan bir vaqtning o‘zida 2000 tagacha (0x7D0) katushkani o‘qish uchun foydalanish mumkin.

4-rasm. Katushkalarni o‘qish tranzaksiyasi
Agar amal muvaffaqiyatli bajarilsa, qul bir xil funksiya kodi va javob berilayotgan katushkalar sonini yuboradi. Katushka holati n bayt uzunlikda bo‘ladi, bunda har bir bit tegishli katushkaning ON (1) yoki OFF (0) holatdaligini bildiradi.
Bu holatda 0x0000 manzilidagi katushka ON holatida. Agar so‘rov muvaffaqiyatli bajarilmaganida, istisno javobida msb yuqori holatga o‘rnatilgan funksiya kodi (0x81) va nima xato yuz berganini tushuntiruvchi istisno kodi bo‘lardi. 0x02 istisno kodi noto‘g‘ri ma’lumot manzili ishlatilganini, ya’ni ushbu qul xotirasida 0x0000 manzilida katushka yo‘qligini anglatadi.
Keyingi misolda bitta registrga yozish tranzaksiyasi (0x06 funksiya kodi) ko‘rsatilgan. Bu yerda master 0x00FF manziliga 0xA0A0 ma’lumotini yozishni so‘raydi. Qulning javobi shunchaki so‘rovning aks-sadosidan iborat.
Bu yerdagi istisno javobi misolida msb yuqori holatga o‘rnatilgan funksiya kodi va 0x04 istisno kodi ko‘rsatilgan. Bu kod qul so‘rovni bajarishga urinayotganda tiklab bo‘lmaydigan xatolik yuz berganini anglatadi.

5-rasm. Bitta registrga yozish tranzaksiyasi
Barcha Modbus funksiya kodlari yuqorida ko‘rsatilgan ikki misoldagiga o‘xshash tartibda ishlaydi.
6-rasmda istisno javoblari uchun keng tarqalgan funksiya kodlari hamda istisno kodlari ro‘yxati ko‘rsatilgan. Qo‘shimcha ma’lumot olish uchun Modbus spetsifikatsiyasiga murojaat qiling.

6-rasm. Funksiya kodlari va istisno kodlari
Xulosa
Modbus PLC qurilmalariga barcha turdagi masofaviy qurilmalar, jumladan, I/O banklari, terminal qurilmalari va boshqa kontrollerlar bilan aloqa qilish imkonini beradi. Buning uchun u diskret va butun sonli ma’lumotlarni o‘qish hamda yozishning standart usulidan foydalanadi va raqamli ma’lumotlarni uzatish bilan bog‘liq deyarli barcha holatlarni qamrab oladi.
Modbus bugungi kunda sanoatdagi standart bo‘lib, zamonaviy boshqaruv tizimlarining aksariyatidan oldin paydo bo‘lganiga qaramay, hozirgacha eng keng tarqalgan royaltisiz sanoat protokoli hisoblanadi. Uni butun dunyodagi zavod va fabrikalarda uchratish mumkin va uzoq vaqtdan beri qo‘llanib kelinayotganiga qaramay, u hali ko‘p yillar davomida dolzarb sanoat protokoli bo‘lib qolishi aniq.