Modbus, 1979’dan beri kullanılan ve bugün hâlâ sahada çok sayıda sayaç, sürücü, sensör ve PLC’de bulunan bir protokoldür. Sadeliği sayesinde yaygındır; ama bu sadelik, verinin anlamını taşımadığı anlamına da gelir. Bu rehber, Modbus ile çalışırken bilmeniz gereken temel noktaları toplar.
Veri modeli: dört tablo
| Tablo | Boyut | Erişim | Geleneksel adres |
|---|---|---|---|
| Bobinler (coils) | 1 bit | Okuma/yazma | 0xxxx |
| Ayrık girişler (discrete inputs) | 1 bit | Salt okunur | 1xxxx |
| Giriş yazmaçları (input registers) | 16 bit | Salt okunur | 3xxxx |
| Tutma yazmaçları (holding registers) | 16 bit | Okuma/yazma | 4xxxx |
Sık kullanılan fonksiyon kodları
| Kod | İşlev |
|---|---|
| 01 / 02 | Bobinleri / ayrık girişleri oku |
| 03 / 04 | Tutma / giriş yazmaçlarını oku |
| 05 / 06 | Tek bobin / tek yazmaç yaz |
| 15 (0x0F) / 16 (0x10) | Birden çok bobin / yazmaç yaz |
Tek istekte okunabilecek miktar sınırlıdır: tutma ve giriş yazmaçlarında en fazla 125 yazmaç, bobinlerde en fazla 2000 bit. Çok sayıda etiketi okurken bu sınırları ve cihazın kendi sınırlarını dikkate alarak istekleri gruplamak gerekir.
RTU ve TCP: iki çerçeve
Modbus RTU seri hat (RS-485/RS-232) üzerinde çalışır. Bir çerçeve; 1 bayt cihaz adresi, 1 bayt fonksiyon kodu, veri ve 2 bayt CRC16 değerinden oluşur (CRC önce düşük bayt gönderilir). Çerçeveler arasında sessizlik süresi ile ayrılır, bu yüzden kablolama, sonlandırma direnci ve baud/parite ayarları kritiktir.
Modbus TCP Ethernet üzerinden (varsayılan port 502) çalışır. CRC yoktur; bütünlüğü TCP sağlar. Başında 7 baytlık MBAP başlığı bulunur: işlem kimliği (2 bayt), protokol kimliği (2 bayt, 0), uzunluk (2 bayt) ve birim kimliği (1 bayt). Birim kimliği, bir ağ geçidinin arkasındaki seri cihazları adreslemek için kullanılır.
Çerçeveleri elle oluşturup doğrulamak için Modbus Çerçeve Oluşturucu aracını kullanabilirsiniz.
Sahada en çok zaman kaybettiren üç hata
1. Adres kayması (0 tabanlı mı, 1 tabanlı mı?)
Cihaz belgesi “40001” yazıyorsa, protokol düzeyinde bu genellikle tutma yazmacı, adres 0’dır. Ancak bazı belgeler adresleri 1’den, bazıları 0’dan sayar. Okuduğunuz değer “bir yazmaç kaymış” görünüyorsa önce bunu kontrol edin.
2. 32 bit ve kayan nokta değerler
Yazmaçlar 16 bit’tir; 32 bit tamsayı veya float iki yazmaca yayılır. İki yazmacın kelime sırası (hangisi yüksek kelime) ve her yazmacın bayt sırası üreticiye göre değişir: ABCD, CDAB, BADC, DCBA. Yanlış seçim, anlamsız ama “makul” görünen sayılar üretir. PLC Veri Tipi Dönüştürücü bu kombinasyonları görmek için kullanışlıdır.
3. Ölçekleme ve birim
Modbus birim veya ondalık bilgisi taşımaz. “742” değeri 74,2 °C mi, 742 mi? Bu bilgi cihaz dokümanından gelir ve bir yerde yazılı olmalıdır. Aksi hâlde her tüketici kendi yorumunu yapar.
Polling ve veri kalitesi
Modbus istek-yanıt modelidir; cihaz kendiliğinden veri göndermez. Bu yüzden istemci periyodik olarak sorgular. Tarama aralığını, cihazın yanıt süresine ve hat hızına göre ayarlayın; aşırı sık sorgulama hem hattı hem cihazı yorar. Zaman aşımı ve yeniden deneme davranışını tanımlayın; “son geçerli değer” ile “okuma başarısız” durumunu ayırt eden bir kalite bilgisi tutun.
Güvenlik
Modbus’ın kimlik doğrulaması veya şifrelemesi yoktur; ağa erişebilen herkes okuyabilir ve yazabilir. Bu yüzden Modbus ağları mutlaka segmente edilmeli, yazma erişimi sınırlanmalı ve ağ geçitleri kontrollü noktalarda konumlandırılmalıdır.
Modbus verisini modern mimariye taşımak
Modbus verisini analitik veya bulutla paylaşmadan önce ölçekleme, birim ve anlam eklemek gerekir. HighByte Intelligence Hub’da Modbus TCP cihazlarına OPC UA ağ geçidi üzerinden erişilebilir; veri bir kez modellenip OPC UA, MQTT veya SQL gibi hedeflere tutarlı biçimde yayımlanabilir. Daha geniş bağlantı mimarisi için Endüstriyel IoT ve Bağlantı çözüm sayfamıza bakın.