Modbus 1979'dan beri yaşıyor; endüstrinin "fonksiyonel ama eskimeyen" protokollerinden. RTU mu TCP mi sorusu çoğu zaman mevcut altyapıya bağlı; yeni tasarımda ise PLC ile cihazlarınızın nasıl konuşacağını netleştirmenize bağlı.
Aşağıda iki varyantın farkları, fiziksel katman gereksinimleri, register haritası mantığı ve sahada en sık çıkan problemler var.
Bu yazıda Modbus'ın iki ana varyantı olan RTU ve TCP'yi karşılaştırıyor, register modelini, uygulama örneklerini ve sıkça yapılan hataları ele alıyoruz.
Modbus Mimarisinin Temelleri
Modbus, master-slave (modern terminolojiyle client-server) mimari kullanır. Bir master birden fazla slave ile iletişim kurar; her slave'in benzersiz bir adresi vardır (1-247 arası). Slave'ler kendiliğinden mesaj göndermez; sadece master'ın talebine cevap verir.
Bu basit yapı sistemin tahmin edilebilir olmasını sağlar; yarışmalı (collision) durumlar olmaz. Ancak gerçek zamanlı sistemler için master'ın polling sıklığı dikkatlice ayarlanmalıdır.
Modbus RTU vs Modbus TCP Karşılaştırması
| Özellik | Modbus RTU | Modbus TCP |
|---|---|---|
| Fiziksel Katman | RS-485 (genelde) | Ethernet |
| Veri Hızı | 9600-115200 bps tipik | 10/100 Mbps |
| Mesafe | 1200 m'ye kadar (RS-485) | Ethernet limitleri (100m+ ) |
| Topoloji | Daisy-chain (zincirleme) | Yıldız (switch ile) |
| Maksimum Slave | 247 cihaz | İstemci sınırı pratik |
| Çerçeve Yapısı | Binary, CRC ile | TCP/IP üzerinde MBAP header |
| Latans | 10-100 ms tipik | 1-10 ms tipik |
| Maliyet | Çok düşük | Orta |
| Uygulama | Saha cihazları | PLC ağları, SCADA |
Modbus Veri Modeli
Modbus 4 farklı veri tipini destekler:
| Tip | Boyut | Erişim | Tipik Kullanım |
|---|---|---|---|
| Coils (00001-09999) | 1 bit | Read/Write | Çıkış röleleri, ayar bitleri |
| Discrete Inputs (10001-19999) | 1 bit | Read | Anahtar girişleri, sensör durumu |
| Input Registers (30001-39999) | 16 bit | Read | Sıcaklık, basınç sensör değerleri |
| Holding Registers (40001-49999) | 16 bit | Read/Write | Setpoint'ler, parametre değerleri |
Holding Register en yaygın kullanılan tiptir. 16 bit'i (1 register) tek bir int veya word olarak okuyabilir veya 2 register'ı birleştirip 32-bit float (IEEE 754) saklayabilirsiniz. Bu durumda byte order (big endian / little endian) konusu kritiktir; üreticiler arası farklı yorumlar olabilir.
Yaygın Modbus Function Codes
| Kod | Adı | Görevi |
|---|---|---|
| 0x01 | Read Coils | Coil'leri oku |
| 0x02 | Read Discrete Inputs | Discrete input'ları oku |
| 0x03 | Read Holding Registers | Holding register oku (en yaygın) |
| 0x04 | Read Input Registers | Input register oku |
| 0x05 | Write Single Coil | Tek coil yaz |
| 0x06 | Write Single Register | Tek register yaz |
| 0x0F | Write Multiple Coils | Birden fazla coil yaz |
| 0x10 | Write Multiple Registers | Birden fazla register yaz |
Modbus RTU Çerçeve Yapısı
Bir RTU master istek çerçevesi şöyle yapılanır:
- Slave Address: 1 byte (1-247)
- Function Code: 1 byte (örn. 0x03 holding register oku)
- Data: Function'a göre değişken (başlangıç adresi + sayı)
- CRC: 2 byte (CRC16-Modbus)
Çerçeveler arasında en az 3.5 karakter uzunluğunda silent interval gerekir. Bu süre baudrate'a göre değişir; 9600 bps'de yaklaşık 4 ms'dir.
Modbus TCP Çerçeve Yapısı
TCP varyantında CRC yerine TCP/IP'nin doğal hata kontrolü kullanılır. Çerçeveye MBAP (Modbus Application Protocol) header eklenir:
- Transaction ID: 2 byte (request-response eşleştirme için)
- Protocol ID: 2 byte (Modbus için 0x0000)
- Length: 2 byte
- Unit ID: 1 byte (RTU'daki slave address karşılığı)
- Function Code + Data: RTU ile aynı
Hangisini Tercih Etmeli?
Modbus RTU Tercih Edilmeli
- Ekonomik bir kablolama gerekiyorsa (RS-485 + 2-3 kablo)
- Yüksek elektriksel gürültülü ortamda (fabrika sahası)
- Cihaz başına maliyet kritikse (Ethernet IC'ler daha pahalı)
- Mevcut RS-485 altyapısı varsa
- Düşük veri hacmi ve düşük cihaz sayısı yeterli ise
Modbus TCP Tercih Edilmeli
- Mevcut Ethernet altyapısı kullanılabilir
- Yüksek veri hızı veya çok cihaz gerekiyorsa
- Uzun mesafelerde (Ethernet switch'lerle ölçeklenebilir)
- SCADA ve MES sistemleriyle entegrasyon kolay
- Bulut bağlantısı veya uzaktan erişim hedefleniyorsa
Tipik Mimariler
Saha Seviyesinde RTU, Üst Seviyede TCP
Yaygın bir mimari: saha cihazları (sensörler, sürücüler) RS-485 üzerinden Modbus RTU ile bir gateway'e bağlanır. Gateway, bu verileri Modbus TCP olarak SCADA veya MES sistemine aktarır. Bu yapı hem ekonomiktir hem de modern entegrasyonu kolaylaştırır.
Hibrit IoT Yaklaşımı
Modern IoT projelerinde Modbus tek başına yetmez. Bir gateway, fabrikadaki Modbus cihazlarından veri toplayıp MQTT veya HTTPS üzerinden buluta gönderir. Edge computing yaklaşımıyla, gateway'de basit kurallar veya AI işlemler yapılabilir.
STM32 ile Modbus Implementasyonu
Modbus stack için açık kaynak ve ticari seçenekler vardır:
- FreeModbus: Açık kaynak, BSD lisansı, RTU+TCP destekli
- nanoModbus: Çok hafif, kısıtlı MCU'lar için
- STM32 ile FreeModbus + FreeRTOS kombinasyonu yaygındır
- Ticari: Schneider, ABB, Siemens kendi stack'lerini sağlar
Tipik bir STM32 Modbus RTU slave implementasyonu:
- UART (DMA destekli) ile RS-485 transceiver bağlantısı
- DE/RE pini ile transmit yön kontrolü
- FreeRTOS task'ında Modbus stack çalıştırma
- Application register map'i ile bağlantı
Sıkça Yapılan Hatalar
1. Yanlış Byte Order
32-bit float değerlerini 2 register olarak okurken byte order (ABCD, CDAB, BADC, DCBA) farklı yorumlanabilir. Üreticilerin dokümantasyonu kontrol edilmeli, bazı durumlarda yazılımda swap işlemi yapılmalıdır.
2. Eksik Sonlandırma ve Bias
RS-485 hattında sonlandırma direnci (her iki uç) ve bias direnci (master tarafında 680 ohm tipik) eksikse, hat gürültülü olur ve kararsız iletişim yaşanır.
3. Çok Hızlı Polling
Master, slave'lere yanıt verme süresinden daha hızlı sorgu gönderirse zaman aşımı hataları olur. Slave cevap süresinin (özellikle yavaş cihazlarda) ölçülüp polling aralığı buna göre ayarlanmalıdır.
4. Function Code Yanlış Kullanımı
Discrete input (read-only) yerine coil (read-write) varsayarak yazma yapmaya çalışmak hata döner. Cihazın register map'i dikkatli incelenmelidir.
5. Modbus TCP'de Transaction ID Yönetimi
TCP varyantında transaction ID master tarafından artırılır ve cevapta aynı ID dönmelidir. Birden fazla istek paralel açıldığında ID karışıklığı race condition yaratır.
Modbus Test Araçları
- Modbus Poll / Modbus Slave (Win-Tech): Modbus simülasyonu için klasik araç
- QModMaster: Açık kaynak, çapraz platform
- SimplyModbus: TCP ve RTU master simülasyonu
- python-modbus, pymodbus: Otomatik test scriptleri için
- Wireshark: Modbus TCP trafiğini incelemek için
Sonuç
Modbus, basitliği, açıklığı ve geniş ekosistemi sayesinde endüstriyel haberleşmenin halen baskın protokolü olmaya devam ediyor. RTU varyantı ekonomik saha çözümleri için, TCP varyantı modern Ethernet altyapısı ve IoT entegrasyonu için ideal. Profesyonel bir endüstriyel proje için her iki varyantın bilinmesi ve doğru senaryoda doğrusunun seçilmesi şarttır.
EA ARGE olarak, Modbus tabanlı sensör/aktüatör tasarımı, Modbus gateway geliştirme, IoT entegrasyon ve SCADA bağlantı projelerinde profesyonel hizmet sunuyoruz.
Hata avı
Modbus'ta hatanın yaklaşık %80'i adresleme veya register haritasıdır; geri kalanı zamanlama. Bir Modbus simülatörü açıp önceden test etmek saatler kazandırıyor; sahaya gitmeden önce her register'ı bilgisayardan oku-yaz mutlaka denenmeli.