Qo‘llanma · RS-485 · Modbus
RS-485 va Modbus RTU orqali 1200 m naridagi sanoat datchiklarini o‘qing
I²C va oddiy UART bir-ikki metrdan keyin taslim bo‘ladi. Datchikka ombor, qozonxona yoki tsex orqali yetib borish kerak bo‘lganda — o‘nlab tugunlar, yuzlab metrlar, elektr shovqini — javob bu RS-485, uning ustidagi til esa odatda Modbus RTU. Bir dollarlik MAX485 moduli va ESP32 sizni maqsadga yetkazadi.
RS-485 — yangi protokol emas, bu o‘sha UART kadr, faqat eshilgan juftlik orqali differensial darajalarda uzatiladi, xuddi CAN dagidek. Uzoq masofa va shovqinga chidamlilik ham shundan. Agar bu g‘oya yangi bo‘lsa — avval interaktiv shina tahlilining RS-232 / RS-485 bo‘limiga qarang: u yerda ossilogrammada differensial bir simli signaldan nega ustun kelishi ko‘rsatilgan.
Nega UART emas, RS-485
- Differensial juftlik (A/B) — shovqin ikkala simga bir xilda tushadi va o‘zaro yo‘qoladi. Santimetrlar o‘rniga o‘nlab-yuzlab metrlar.
- Ko‘p nuqtali ulanish — bitta juftlikda 32 tagacha tugun (zamonaviy transiverlarda 128 tagacha).
- Yarim dupleks — hamma bitta juftlikni bo‘lishadi va navbat bilan gaplashadi, shuning uchun transiverga qachon uzatish, qachon eshitish kerakligini aniq aytish lozim.
MAX485 ni ulash
MAX485 — bu transiver: bir tomonida UART, ikkinchi tomonida RS-485 shinasining A/B juftligi. Yagona noaniq chiqish — yo‘nalish: DE (driver enable) va RE (receiver enable) birga birlashtiriladi va bitta GPIO bilan boshqariladi — uzatish uchun HIGH, qabul qilish uchun LOW.
MAX485 moduli ESP32
----------- -----
RO (qabul qiluvchi chiqishi) --> RX (masalan GPIO16)
DI (uzatuvchi kirishi) <- TX (masalan GPIO17)
DE + RE (birlashtirilgan) <-- DIR (masalan GPIO4) // HIGH = uzatish, LOW = qabul qilish
VCC --> 5V (modul) / 3V3-mantiq uchun variantlar bor
GND --> GND
A / B --> shinaga eshilgan juftlik (ikki uzoq uchida 120 Ω)
Hammani chalg‘itadigan ikkita apparat qoidasi: shinaning ikki uzoq uchining har biriga 120 Ω terminator qo‘ying (har bir tugunga emas) va butun liniya bo‘ylab A→A, B→B ni saqlang. Uzun yoki “jim” shinalarda liniya bo‘sh turganda aniq darajada tursin uchun siljish rezistorlarini qo‘shing.
Modbus RTU bir ekranda
Modbus — eng oddiy “xo‘jayin-qul” protokoli: xo‘jayin so‘raydi, bitta qul javob beradi, har bir
kadr CRC bilan tugaydi. Asosan ikkita funksiya kerak — 0x03 (holding-registrlarni o‘qish)
va 0x04 (input-registrlarni o‘qish). Mana ESP32 ModbusMaster kutubxonasi bilan
1-quldan ikkita registrni o‘qiyapti, yo‘nalish pinini avtomatik almashtirib:
#include <ModbusMaster.h>
#define DIR 4 // DE+RE yo'nalish pini
ModbusMaster node;
void preTx() { digitalWrite(DIR, HIGH); } // uzatishdan oldin uzatuvchini yoqish
void postTx() { digitalWrite(DIR, LOW); } // keyin qabul qilishga qaytish
void setup() {
pinMode(DIR, OUTPUT); digitalWrite(DIR, LOW);
Serial2.begin(9600, SERIAL_8N1, 16, 17); // RS-485 uchun UART
node.begin(1, Serial2); // qul manzili 1
node.preTransmission(preTx);
node.postTransmission(postTx);
}
void loop() {
// 0x0000 manzilidan boshlab 2 ta holding-registrni o'qish (funksiya 0x03)
if (node.readHoldingRegisters(0x0000, 2) == node.ku8MBSuccess) {
uint16_t temp = node.getResponseBuffer(0);
uint16_t hum = node.getResponseBuffer(1);
Serial.printf("temp=%u hum=%u\n", temp, hum);
}
delay(1000);
} Butun namuna shu: kutubxonaga o‘z UART’ingizni ko‘rsating, unga yo‘nalish pini kolbeklarini bering va
readHoldingRegisters() ni chaqiring. O‘z datchigingizning registr xaritasini uning
datasheetidan qo‘ying.
Ishlamaganda — odatdagi gumondorlar
- A/B almashtirilgan — RS-485 ning 1-raqamli xatosi. Teskari qo‘yilgan juftlik jimlik yoki axlat beradi; shunchaki ikki simni almashtiring.
- Terminatorlar yo‘q — 120 Ω magistralning ikki fizik uchiga qo‘yiladi, har bir tugunga emas. Ularsiz aks-sadolar uzun liniyalarda kadrlarni buzadi.
- Yo‘nalish pini taymingi — DE ni juda erta qo‘yib yuborsangiz, o‘zingizning oxirgi baytingizni kesib qo‘yasiz. Buni kutubxonaga ishonib topshiring yoki oxirgi baytdan keyin arzimas kechikish qo‘shing.
- Tezlik / juftlik mos kelmasligi — barcha tugunlar kelishishi shart:
9600 8N1va8E1— keng tarqalgan jimgina nosozlik. - Umumiy yer / tayanch yo‘q — uzun izolyatsiyalangan liniyalarga baribir transiverlar orasida yer tayanchi kerak.
Juftlik, terminatorlar va yo‘nalish pinini to‘g‘ri qiling — va bitta ESP32 butun bino Modbus datchiklarini so‘rovlab chiqadi: energiya hisoblagichlari, harorat zondlari, PLK’lar — bitta eshilgan juftlik orqali.
Oddiy UART eplab bo‘lmaydigan joyda differensial juftlik baytni qanday olib o‘tishini ko‘ring.