Modbus Nedir? RTU-TCP Farkı, Register Adresleme ve 247 Slave
Modbus'un 1979'dan beri neden sökmeye çalıştığımız her hatta durduğunu, RTU ile TCP'nin kafa kafaya farkını, 'neden 247 slave?' sorusunu ve 0x/1x/3x/4x register dünyasını kendi hat vakalarımla anlatıyorum.

Kısa Cevap (Özet): Modbus, Modicon (bugünkü Schneider Electric) tarafından 1979’da geliştirilen, açık ve telif ücreti gerektirmeyen endüstriyel seri haberleşme standardıdır. İki yaygın ucu vardır: Modbus RTU (RS-485 üzerinde, 2 telli ekranlı kablo, CRC16 ile hata kontrolü) ve Modbus TCP/IP (Ethernet üzerinde, port 502, MBAP başlığı). Bir ağda en fazla 1 master + 247 slave yaşar; her slave 1–247 arasında 1 baytlık bir adres taşır. Veriler dört tabloda tutulur: ayrık girişler (0x), bobinler (1x), giriş register’ları (3x) ve holding register’ları (4x).
Gece, bir deşarj tankının basınç sensörüne yeni bir transmitter takmıştım. Kurulum temiz, kablo doğru, adresi de boştu — ama terminalde slave 37’nin karşılığı gelmiyordu. Baud aynıydı, parity aynıydı; on beş dakikalık sessizlikten sonra hatırladım: cihaz 8N1’di, terminalim 8E1’di. Bir bitlik fark, bir saatlik sessizlik. Modbus’un sahadaki karakteri budur: protokolü bilen hata vermez, aynı şeyi iki yerde farklı yazan hata verir. Bu yazı o bir biti ve 1979’dan beri biriken her şeyi anlatıyor.
1979’dan Beri Neden Hâlâ Orada?
Modbus, o dönemin ilk ve en güçlü PLC üreticilerinden Modicon tarafından geliştirildi; şirket bugün Schneider Electric’in parçası. Protokolün bugün hâlâ ayakta kalmasının sebebi teknik bir mucize değil, üç sade karar:
- Açık: spesifikasyonu ücretsiz; hiçbir üretici telif ödemiyor.
- Basit: bir baytlık adres, dört tablo, birkaç fonksiyon kodu — bir mikrodenetleyici bile kaldırır.
- Her yerde: PLC’den inverter’a, transformatordan binanın klima santraline kadar milyonlarca cihaz Modbus konuşuyor.
Yeni bir hat kuruyorsan PROFINET ya da EtherCAT’ı tercih edersin; ama mevcut sahayı açacaksan karşına Modbus çıkacak — çıkıyor da. Benim sahayı anlamamı en çok zorlayan protokol de o.
RTU mu, TCP mi, ASCII mi?
Aynı protokolün üç taşıma biçimi var:
| Modbus RTU | Modbus TCP/IP | Modbus ASCII | |
|---|---|---|---|
| Ortam | RS-485 (2 telli) | Ethernet | RS-232/485 |
| Paket | frame + CRC16 | MBAP başlığı + PDU | hex karakterler + LRC |
| Hata kontrolü | CRC16 | TCP’nin kendisi | LRC |
| Port | — | 502 | — |
| Sahada | yaygın | yeni hatlarda yaygın | neredeyse hiç |
RTU’da paketin sonundaki CRC16, hattın gürültüsünü yakalar; bozuk frame atılır, master tekrar sorar. TCP’de bu işi kendi hata kontrolü üstlendiği için CRC yoktur; paketin önüne eklenen MBAP başlığı (transaction ID, protocol ID, length, unit ID) “bu frame kimden, kaçta, ne kadar” sorularını taşır. Pratik sonuç: RTU’nun bir slave adresi, TCP’de unit ID’ye kayar — aynı fiziksel ağda birden fazla RTU hattı köprüyle birleştirilirse işte o zaman ayırt edici olur.

Neden 247 Slave?
Bir Modbus ağında 1 master + en fazla 247 slave yaşar. Neden 247? Çünkü slave adresi 1 bayttır: 0–255 aralığından 0 broadcast’e (herkesi dinle) ayrılmış, kalan 1–255 içinde standardın sınırladığı üst sınır 247’dir. Yani adres genişletmek istersen yeni bir ağ, yeni bir port — “248. slave” diye bir şey yok.
Bu sınır sahada iki kez yakaladı beni: birinde 30 cihazlık bir hat, diğeri 247’nin eşiğinde “bir tane daha sığar mı” inatlaşması. İkisinde de cevap aynıydı: sığdırma, segmente böl.
Kablo ve Sonlandırma: 2 Telli Ekranlı, 120 ohm
RTU hattı iki şey ister: 2 telli ekranlı (shielded) bükmlü çift kablo ve hattın her iki ucuna 120 ohm sonlandırma direnci. Standart Modicon kablosu 0.25 mm² × 2’lik ekranlıdır; öz direnci düşük, iletkenliği iyi. Ekranı tek noktada toprakla — iki noktadan topraklarsan ekran üzerinden toprak gerilimi akar, veri bozulur.
Baud hızı esnektir (9.6 kbit/s’in klasik değeriyle başlar, 115.2 kbit/s’e kadar çıkar); ama hızı yükseltirken kablo uzunluğu ve gürültü payı daralır — tıpkı PROFIBUS’taki gibi.
Register Dünyası: 0x, 1x, 3x, 4x
Modbus verileri dört tabloda tutar; her tablo en fazla 9999 kayıtta, adresler 0000–270E (hex) aralığındadır:
| Tablo | Adresleme (klasik) | İçerik | OKU | YAZ |
|---|---|---|---|---|
| 1x Coils (bobin) | 00001–09999 | ON/OFF çıkışlar | ✓ | ✓ |
| 0x Ayrık girişler | 00001–09999 | ON/OFF sensörler | ✓ | — |
| 4x Holding register | 40001–49999 | sayısal değerler (16 bit) | ✓ | ✓ |
| 3x Giriş register | 30001–39999 | sayısal ölçümler (16 bit) | ✓ | — |

İki ayrım hatırlanmalı: OKUNAN tablolar (0x girişler, 3x register) slave’den gelir, PLC onları değiştirmez; YAZILAN tablolar (1x bobin, 4x holding) PLC’nin kontrol eder. Bobin 1 bit’tir; register 16 bit (2 bayt). Klasik numaralandırma offset taşır: 40001 no’lu holding register’ın paketteki gerçek adresi 0x0000’dır — offset 40001’dir. 1x’ın offset’i 1, 0x’ın 10001, 3x’ün 30001. Bu offset tuzağına düşen çoktur: “40001’i okuyorum ama 40002’deki değeri alıyorum” şikâyetinin neredeyse tamamı buradan doğar.
Sahada Ne Zaman Modbus?
- Eski cihaz, yeni PLC: Modbus köprüsü en ucuz ve en hızlı çözüm — PROFINET’e geçirmek maliyetin altında kalır.
- Uzak, izole bir proses noktası: RTU hattı 1 km’yi rahat aşar; Ethernet çekmek pahalıysa 2 telli kablo iş görür.
- Yeni hat, yüksek döngü: Modbus’un master-soru/slave-cevap modeli döngüyü sınırlar; o zaman PROFINET ya da EtherCAT tarafına bak.
- Yazılım tarafı test: PC’de Modbus Poll (master simülatörü) ve Modbus Slave (slave simülatörü) ile önce masada, sonra sahada doğrula — “masada 5 dakikada yakalanır, sahada 5 saat yorar” kuralı burada da geçerli.
O geceki bir bitlik parity farkı, bana Modbus’un asıl dersini verdi: protokolü değil, iki ucundaki ayarı tanı. Adres, baud, parity, sonlandırma — dört küçük ayar, dört büyük sessizlik. Dördünü de elinle doğruladın mı, Modbus 47 yıldır verdiği gibi cevap verir.