Ana içeriğe geç

Modbus Hatalari

Modbus RTU (RS485) iletisiminde karsilasilan hatalarin teshis ve cozum rehberi. Gateway'lerin inverter, enerji analizoru ve diger Modbus cihazlari ile iletisim sorunlarini kapsar.

Sorun Tablosu

SemptomOlasi SebepKontrolCozum
CRC hatasiKablo uzunlugu, EMI, termination eksikHata orani logla, kablo uzunlugu olcKisa kablo, shielded, 120Ω termination
Timeout hatasiCihaz kapali, yanlis slave ID, baud mismatchFarkli slave ID dene, baud rate deneDogru ID ve baud ayarla
Yanlis deger okuyorByte order, register offset, scale factorRaw hex ile karsilastirTemplate'de byte_order ve scale duzelt
Iletisim aralikli kopuyorRS485 bus collision, cok cihazPolling interval artirBus segmentasyonu, cihaz sayisi azalt
Function code hatasiCihaz FC3 desteklemiyorCihaz dokumani kontrolFC4 (Input Register) dene

Detayli Teshis ve Cozumler

1. CRC Hatasi

Semptom: Seri loglarinda Modbus CRC Error tekrarliyor. Bazen dogru yanit gelse de cogunda CRC uyumsuzlugu bildiriliyor.

Olasi Sebepler:

  • RS485 kablo uzunlugu > 100m (shielded degilse)
  • Elektromanyetik girişim (EMI) — guc kablolari yakinindan geciyor
  • Hat sonlandirma (termination) direnci eksik
  • Gevşek terminal baglantilari

Kontrol Adimlari:

# Gateway seri loglarinda CRC hatalarini say
# Beklenen log:
# Modbus RX CRC Error: expected=0xA3B2, got=0xA3B4
# Modbus CRC Error Count: 15/100 (son 100 istekte 15 hata)

# Hata orani %5'in uzerindeyse fiziksel hat sorunludur

Cozum:

  1. Kablo kisaltma: RS485 kablo uzunlugunu mumkun oldugunca kisa tutun (ideal < 50m)
  2. Shielded kablo: Shielded twisted pair (STP) kablo kullanin, shield'i tek noktadan topraklayın
  3. Termination: RS485 hattinin her iki ucuna 120Ω direnc baglayin
  4. Kablo yolu: Guc kablolarindan en az 30cm uzakta doseyin, paralel gecis yapmayin
  5. Baglanti sıkıligi: Terminal vidalı konnektorleri kontrol edin, gevşek temas CRC hatasinin en yaygin sebebidir

2. Timeout Hatasi

Semptom: Modbus Timeout: No response from slave X mesaji tekrarliyor. Cihazdan hic yanit gelmiyor.

Olasi Sebepler:

  • Modbus cihazi kapali veya enerjisiz
  • Yanlis slave ID kullaniliyor
  • Baud rate, parity veya stop bit uyumsuzlugu
  • RS485 A/B kablolari ters baglanmis

Kontrol Adimlari:

# Cihazin fiziksel durumunu kontrol et:
# - Guc LED'i yaniyor mu?
# - RS485 iletisim LED'i var mi, yanip sonuyor mu?

# Farkli slave ID'leri sirayla dene (1-10 arasi tarama)
# Gateway loglarinda:
# Modbus scan: Slave 1 → Timeout
# Modbus scan: Slave 2 → Response OK

# Farkli baud rate dene:
# 9600, 19200, 38400, 115200

Cozum:

  1. Guc kontrolu: Cihazin enerjili ve calisiyor durumda oldugundan emin olun
  2. Slave ID: Cihaz uzerindeki fiziksel ayardan (DIP switch, ekran menusu) gercek slave ID'yi ogrenerek template'e girin
  3. Baud rate: Cihaz fabrika ayarlarini dokumantasyondan kontrol edin. En yaygin: 9600 (enerji analizoru), 9600/19200 (inverter)
  4. A/B ters: A ve B kablolarini ters baglamayi deneyin — bazi ureticiler ters etiketleme yapar
  5. Timeout suresi: Gateway firmware'inde response timeout'u 100ms → 500ms'ye cikararak yeniden deneyin

3. Yanlis Deger Okuyor

Semptom: Modbus'tan deger geliyor ama anlamsiz veya cok buyuk/kucuk. Ornegin inverter gucu 4.294.967.295 W gosteriyor veya gerilim 0.023 V cikiyor.

Olasi Sebepler:

  • Byte order (endianness) hatasi: Cihaz Big Endian, template Little Endian bekliyor veya tam tersi
  • Register offset: Template'de yazilan register adresi 1 eksik veya fazla (0-based vs 1-based)
  • Scale factor: Cihaz degeri 10x veya 100x olcekli gonderiyor, template'de carpan tanimlanmamis
  • Veri tipi uyumsuzlugu: 32-bit float okunmasi gerekirken 16-bit integer okunuyor

Kontrol Adimlari:

# Raw hex degeri logla ve el ile hesapla
# Ornek: Register 0x0000'den 2 register okundu
# Raw: [43 48 00 00]
# Big Endian Float32: 200.0 (dogru)
# Little Endian Float32: 1.54e-41 (yanlis!)

# Template'deki tanimlama:
# register: 0x0000
# data_type: float32
# byte_order: big_endian ← bu dogru mu?
# scale: 1.0 ← carpan dogru mu?

Cozum:

  1. Byte order duzeltme: Cihaz dokumantasyonundaki byte order bilgisine gore template'i guncelleyin:
    • big_endian (AB CD) — en yaygin
    • little_endian (CD AB)
    • big_endian_word_swap (CD AB) — bazi Sofar inverterler
    • little_endian_word_swap (AB CD) — nadir
  2. Register offset: Modbus dokumantasyonlarinda 1-based (40001) olabilir — 0-based'e cevirirken 1 cikartin (40001 → 0)
  3. Scale factor: Dokumantasyonda "unit: 0.1 kW" yaziyorsa template'de scale: 0.1 ekleyin
  4. Veri tipi: uint16, int16, uint32, int32, float32 seceneklerini dokumantasyona gore ayarlayin

4. Iletisim Aralikli Kopuyor

Semptom: Modbus iletisimi bazi zamanlarda calisiyor, bazi zamanlarda timeout veriyor. Duzensiz kesintiler yaşanıyor.

Olasi Sebepler:

  • RS485 bus uzerinde cok fazla cihaz → bus collision
  • Polling intervali cok kisa → cihazlar yanit vermeye yetisemiyor
  • EMI kaynaklari belirli saatlerde aktif (motor, kompressor vb.)
  • Gevşek kablo baglantisi

Kontrol Adimlari:

# Basarili/basarisiz okuma oranini logla
# Son 1 saat: 850/1000 basarili (%85)
# ← %95'in altinda fiziksel sorun var

# Ayni bus'taki cihaz sayisini kontrol et
# RS485 standardi: max 32 cihaz (bazi driver'lar 128)

# Polling interval: her cihaz icin minimum 100ms bekleme
# 10 cihaz x 5 register x 100ms = 5 saniye minimum tur suresi

Cozum:

  1. Polling interval artirma: Her okuma arasinda en az 100ms bekleme suresi birakin
  2. Bus segmentasyonu: 10'dan fazla cihaz varsa ayrı RS485 bus segmentleri olusturun
  3. Oncelik sirasi: Kritik cihazlari (inverter) daha sik, az kritik cihazlari daha seyrek poll edin
  4. Kablo kontrolu: Terminal vidalari sıkın, gevşek baglanti aralikli kesintinin en yaygin sebebidir
  5. EMI izolasyonu: Optik izolasyonlu RS485 donusturucu kullanin

5. Function Code Hatasi

Semptom: Modbus Exception: Illegal Function (01) hatasi donuyor. Cihaz istegi reddediyor.

Olasi Sebepler:

  • Cihaz istenen function code'u desteklemiyor
  • Holding Register (FC3) yerine Input Register (FC4) gerekiyor veya tam tersi
  • Write isleminde (FC6/FC16) cihaz sadece read-only destekliyor

Kontrol Adimlari:

# Modbus function code'lari:
# FC3 = Read Holding Registers (en yaygin)
# FC4 = Read Input Registers
# FC6 = Write Single Register
# FC16 = Write Multiple Registers

# Gateway loglarinda:
# Modbus TX: [01 03 00 00 00 02 ...] ← FC3 ile istek
# Modbus RX: [01 83 01 ...] ← Exception 01 (Illegal Function)
# ↑ 0x83 = 0x80 + 0x03 → FC3 exception

# Cihaz dokumantasyonundan desteklenen FC'leri kontrol et

Cozum:

  1. FC4 deneyin: FC3 (Holding Register) hata veriyorsa FC4 (Input Register) ile okuma deneyin — bircok enerji analizoru sadece FC4 destekler
  2. Dokumantasyon kontrolu: Cihazin Modbus register haritasini inceleyerek hangi register grubunun hangi FC ile okunacagini belirleyin
  3. Template guncelleme: Raw template dosyasinda function_code alanini dogru deger ile guncelleyin
  4. Write koruması: Bazi register'lar read-only'dir — write denemesi exception uretir, template'de read_only: true isaretleyin

Modbus Teshis Kontrol Listesi

Bir Modbus sorunu ile karsilastiginizda su adimlari sirasiyla uygulayın:

  1. Fiziksel katman: Kablo, terminal, guc kaynagi kontrol
  2. Iletisim parametreleri: Baud rate, parity, stop bit
  3. Adresleme: Slave ID ve register adresleri
  4. Veri yorumlama: Byte order, veri tipi, scale factor
  5. Zamanlama: Polling interval, timeout suresi
Hizli Test

Sorunun gateway'de mi yoksa cihazda mi oldugunu anlamak icin bagimsiz bir Modbus aracı (ornegin bilgisayara USB-RS485 donusturucu + ModbusPoll/QModMaster) ile dogrudan cihazi okumayı deneyin. Bu test basariliysa sorun gateway firmware/config'indedir.