Modbus RTU ve Modbus TCP nedir? Farkları, adresleme ve sık yapılan hatalar
Modbus, 1979'da PLC'ler için geliştirilmiş ve bugün hâlâ en yaygın kullanılan endüstriyel haberleşme protokollerinden biridir. Enerji analizörü, frekans sürücüsü, sıcaklık kontrol cihazı, akıllı sayaç gibi cihazların çoğu Modbus konuşur. Basit, açık ve ücretsiz olması onu bu kadar yaygın yapan şey.
Temel mantık
Modbus'ta bir istemci (eski adıyla master) soru sorar, sunucu (eski adıyla slave) cevap verir. Sunucu kendiliğinden veri göndermez. Yani PLC ya da SCADA sürekli "şu adresteki değer ne?" diye sorar, cihaz da cevaplar.
Modbus RTU ile Modbus TCP farkı
| Modbus RTU | Modbus TCP | |
|---|---|---|
| Fiziksel hat | Seri hat, genellikle RS-485 | Ethernet |
| Cihaz adresi | Slave ID (1-247) | IP adresi (+ unit ID) |
| Hata kontrolü | CRC-16 | TCP katmanı yapar, Modbus'ta CRC yok |
| Port | Yok | TCP 502 |
| Hız | Tipik 9600-115200 bps | Ağ hızında |
| Aynı anda konuşma | Hatta tek istemci | Birden fazla istemci bağlanabilir |
Sahada ikisi bir arada da görülür: Modbus TCP'den RTU'ya çeviren ağ geçitleri (gateway) sayesinde Ethernet'teki SCADA, RS-485 hattındaki eski cihazlarla konuşabilir.
Veri tipleri ve fonksiyon kodları
Modbus'ta dört veri alanı vardır:
| Alan | Boyut | Erişim | Okuma | Yazma |
|---|---|---|---|---|
| Coil | 1 bit | Okuma/yazma | FC 01 | FC 05 (tek), FC 15 (çoklu) |
| Discrete input | 1 bit | Salt okuma | FC 02 | - |
| Input register | 16 bit | Salt okuma | FC 04 | - |
| Holding register | 16 bit | Okuma/yazma | FC 03 | FC 06 (tek), FC 16 (çoklu) |
Pratikte en çok kullanılan FC 03 (holding register okuma) ve FC 06 / FC 16 (yazma) fonksiyonlarıdır. Cihazın kullanım kılavuzundaki "Modbus register tablosu" hangi değerin hangi adreste olduğunu söyler.
En sık yapılan hata: bir kaydırma (off-by-one)
Kılavuzlarda adresler iki farklı biçimde yazılır:
- Geleneksel gösterim:
40001,40002... Baştaki 4 "holding register" alanı demektir ve numaralandırma 1'den başlar. - Protokol adresi: Telgrafın içinde gerçekte giden adres 0'dan başlar.
40001, protokolde holding register 0 demektir.
Bir cihazdan anlamsız değerler okuyorsan ilk kontrol edeceğin şey budur: adresi bir eksik ya da bir fazla girmeyi dene. Bazı yazılımlar 1 tabanlı, bazıları 0 tabanlı adres ister.
32 bit değerler ve "word swap"
Bir register 16 bittir. Akım, güç, enerji gibi değerler çoğunlukla 32 bit tam sayı ya da ondalıklı (float) olduğundan iki ardışık register kullanır. Hangi register'ın önce geleceği (word order) üreticiye göre değişir. Okuduğun değer 1,4E-41 ya da 3,2E+28 gibi saçma görünüyorsa sorun büyük ihtimalle sıralamadadır: yazılımında "word swap" ya da "byte swap" seçeneğini değiştirerek dene.
Ayrıca bazı cihazlar ondalığı ölçekli gönderir: register'da 2304 okuyup kılavuzda "0,1 V" çarpanı görüyorsan gerçek değer 230,4 V'tur.
RS-485 hattında dikkat edilecekler
Modbus RTU arızalarının büyük kısmı yazılımdan değil kablodan çıkar:
- Haberleşme ayarları birebir aynı olmalı: Baud hızı, veri biti, parite ve stop biti (ör. 9600, 8, Even, 1) istemcide ve tüm cihazlarda aynı olmalı. Tek bir cihazın paritesi farklıysa sadece o cihaz cevap vermez.
- Her cihazın slave ID'si farklı olmalı. İki cihaz aynı ID'ye sahipse cevaplar çakışır.
- Hat sonlandırma: Hattın iki ucuna (yalnızca uçlara) 120 Ω sonlandırma direnci konur. Kısa ve yavaş hatlarda olmadan da çalışabilir, uzun hatlarda yansıma hatalara yol açar.
- Topoloji: RS-485 bir hat (daisy chain) topolojisidir. Yıldız bağlantı ve uzun dallanmalar sorun çıkarır.
- A/B karışıklığı: Üreticiler A/B, D+/D-, + / - etiketlerini farklı kullanır. Hiç cevap gelmiyorsa iki ucu ters bağlamayı dene; RS-485 alıcıları buna zarar görmeden dayanır.
- Kablo: Bükümlü çift, ekranlı kablo kullan; enerji kablolarıyla aynı kanala koyma. Ekranı tek noktadan topraklamak genelde önerilen yöntemdir.
Test için araçlar
Sahaya çıkmadan önce bilgisayarından cihazla konuşmayı denemek işini çok kolaylaştırır. Bir USB-RS485 dönüştürücü ve Modbus istemci yazılımı (ör. ModbusPoll, QModMaster ya da Python için pymodbus) ile cihazdan tek bir register okumayı denemek, sorunun kabloda mı PLC programında mı olduğunu hızla gösterir.
Güvenlik notu
Modbus'ta kimlik doğrulama ve şifreleme yoktur. TCP 502 portuna erişebilen herkes register okuyabilir ve yazabilir. Modbus TCP cihazlarını kesinlikle internete açma, ofis ağından ayrı bir OT ağında tut ve uzaktan erişim gerekiyorsa VPN üzerinden yap.
Modbus haberleşmesinde takıldığın bir cihaz varsa, cihazın modelini ve ayarlarını yazarak bu kategoride konu açabilirsin.