Bir panodaki enerji analizörünün değerlerini PLC’ye almak, bir frekans konvertörünü haberleşme üzerinden çalıştırmak ya da farklı markalardaki cihazları tek bir operatör panelinde toplamak gerektiğinde ilk akla gelen protokol çoğu zaman Modbus‘tur. Basit, açık ve neredeyse her markanın desteklediği bir protokol olduğu için sanayide hâlâ en yaygın haberleşme yöntemlerinden biridir. Bu yazıda Modbus’un nasıl çalıştığını, RTU ve TCP farkını, register yapısını, kablolamayı ve sahada en sık görülen arızaları anlatıyoruz.
Bu yazıda (11 başlık)
Modbus ne demek?
Modbus, endüstriyel cihazlar arasında veri alışverişi için kullanılan bir haberleşme protokolüdür. 1979’da Modicon (bugün Schneider Electric) tarafından PLC’leri için geliştirilmiştir. Protokol daha sonra açık hale getirilmiş ve bugün bağımsız, kâr amacı gütmeyen Modbus Organization tarafından yönetilmektedir. Spesifikasyonlar ücretsiz yayımlandığı için çok sayıda üretici tarafından desteklenir.
Modbus bir istek-cevap protokolüdür. Seri hatta haberleşmeyi başlatan cihaza master, cevap veren cihazlara slave denir; güncel dokümanlarda bu roller client ve server olarak da adlandırılır. Slave hiçbir zaman kendiliğinden veri göndermez, slave’ler birbiriyle konuşmaz ve master aynı anda yalnızca bir işlem başlatır.
Modbus RTU, ASCII ve TCP
| Modbus RTU | Modbus ASCII | Modbus TCP | |
|---|---|---|---|
| Fiziksel katman | Seri hat, çoğunlukla RS-485 | Seri hat | Ethernet |
| Veri kodlama | İkili (binary), yoğun | ASCII karakterler, daha yavaş | İkili |
| Hata kontrolü | CRC | LRC | TCP/IP katmanı |
| Cihaz adresi | Slave ID (1-247) | Slave ID | IP adresi + Unit ID |
| Yaygınlık | Çok yaygın | Nadir | Çok yaygın |
Modbus RTU seri hatlarda en sık kullanılan moddur. Hattaki tüm cihazlarda baud hızı, parite, veri biti ve stop biti aynı olmalıdır. Spesifikasyon 9600 ve 19200 baud’u zorunlu tutar, varsayılan 19200’dür; sahada 9600 de çok yaygındır. Spesifikasyon varsayılan parite olarak çift (even) pariteyi tanımlar; paritesiz (none) kullanımda karakter çerçevesini tamamlamak için 2 stop biti öngörülür. Pratikte birçok cihaz farklı ayarlarla gelir, bu yüzden her cihazın ayarı tek tek kontrol edilmelidir.
Seri hatta her slave’in 1 ile 247 arasında benzersiz bir adresi olmalıdır. 0 adresi yayın (broadcast) için ayrılmıştır; yayın mesajlarına cevap dönmez ve yalnızca yazma komutları için kullanılır.
Modbus TCP, aynı Modbus mesajını Ethernet üzerinden taşır ve TCP 502 numaralı portu kullanır. Cihaz IP adresiyle bulunur; mesajdaki Unit ID alanı ise özellikle Modbus TCP’den Modbus RTU’ya çeviren gateway‘lerde, arkadaki seri cihazın adresini belirtmek için kullanılır.
Modbus veri modeli: coil ve register
Modbus’ta veriler dört temel tabloda tutulur:
| Tablo | Geleneksel numara | Veri tipi | Erişim | Örnek |
|---|---|---|---|---|
| Coils | 0x (00001…) | 1 bit | Okuma/yazma | Motor çalıştır komutu |
| Discrete Inputs | 1x (10001…) | 1 bit | Sadece okuma | Kapı açık bilgisi |
| Input Registers | 3x (30001…) | 16 bit | Sadece okuma | Ölçülen gerilim |
| Holding Registers | 4x (40001…) | 16 bit | Okuma/yazma | Hız referansı, ayar değeri |
Bu tabloların cihazın belleğinde nasıl karşılık bulduğu tamamen üreticiye bağlıdır; bazı cihazlar aynı veriyi birden fazla tablodan erişilebilir yapar. Hangi verinin hangi adreste olduğu cihazın Modbus register haritasında (register map) yazılıdır.
Sık kullanılan fonksiyon kodları
| Kod | Adı | Ne yapar? |
|---|---|---|
| 01 | Read Coils | Coil durumlarını okur |
| 02 | Read Discrete Inputs | Dijital girişleri okur |
| 03 | Read Holding Registers | Holding register okur |
| 04 | Read Input Registers | Input register okur |
| 05 | Write Single Coil | Tek coil yazar |
| 06 | Write Single Register | Tek register yazar |
| 15 | Write Multiple Coils | Birden fazla coil yazar |
| 16 | Write Multiple Registers | Birden fazla register yazar |
Slave bir isteği işleyemezse, fonksiyon kodunun 0x80 eklenmiş haliyle bir hata (exception) cevabı döner. Bu cevaptaki kod, örneğin geçersiz fonksiyon veya geçersiz adres olduğunu gösterir ve arıza ararken çok işe yarar.
40001 ile 0 arasındaki adres karışıklığı
Modbus’ta en sık yaşanan karışıklık adres kaymasıdır. Spesifikasyona göre veri modelinde elemanlar 1’den numaralanır, mesajın içinde ise adresler 0’dan başlar: modelde X numaralı veri, mesajda X−1 adresiyle istenir. Buna bir de “4x” gibi tablo önekleri eklenince aynı register için üç farklı yazım ortaya çıkar:
- Dokümanda 40001 yazan register,
- bazı yazılımlarda 1 olarak (holding register 1),
- mesajın içinde ise 0 adresi olarak gider.
Okunan değer beklenenin bir register yanındaki değerse, sorun büyük ihtimalle bu 1 kaymasıdır. Cihaz kılavuzunun adresleri hangi şekilde verdiği ve kullandığınız PLC veya HMI yazılımının hangi gösterimi beklediği mutlaka kontrol edilmelidir.
32 bit değerler ve word sırası
Modbus register’ı 16 bittir ve protokol, birden fazla bayttan oluşan değerlerde en anlamlı baytın önce gönderildiği big-endian sırasını kullanır. Ancak 32 bit tam sayı veya float (ondalıklı) değerler iki register’a bölündüğünde, hangi register’ın önce geleceği spesifikasyonda tanımlı değildir ve üreticiye göre değişir. Bu yüzden enerji analizörlerinde ve sürücülerde değerler bazen anlamsız çıkar (ör. 230 V yerine çok büyük veya çok küçük bir sayı). Çözüm, PLC veya HMI’da word swap (register sırasını değiştirme) veya gerekirse byte swap ayarını denemek ve sonucu bilinen bir değerle karşılaştırmaktır.
RS-485 kablolama kuralları
- Bükümlü çift (twisted pair), ekranlı kablo kullanın; sinyal çiftine ek olarak ortak (common) hat da tüm cihazlara taşınmalıdır.
- Cihazları zincir (daisy chain) şeklinde bağlayın: hat bir cihazdan girip diğerine devam etmelidir. Yıldız bağlantı yapmayın; ana hattan ayrılan uzun dallar yansımalara neden olur. Spesifikasyon dal (derivation) uzunluklarını kısa tutmayı şart koşar.
- Hattın iki ucuna, yalnızca iki ucuna sonlandırma direnci takın; pratikte yaygın değer 120 Ω‘dur (spesifikasyon 150 Ω, polarizasyon varsa 1 nF kondansatörle seri 120 Ω önerir). Ara cihazlarda sonlandırma kapalı olmalıdır.
- Hat boştayken sinyal seviyesini belirli tutmak için polarizasyon (bias) dirençleri kullanılır; genellikle master tarafında tek noktada yapılır. Birçok cihazda bu dirençler bir DIP switch ile devreye alınır.
- Spesifikasyon, tekrarlayıcısız (repeater) bir RS-485 hattında en az 32 cihazın desteklenmesini öngörür; daha fazlası cihazların yük değerine bağlıdır. Hat uzunluğu baud hızına ve kablo tipine göre sınırlıdır.
- A ve B uçları: Spesifikasyon hatları D0 ve D1 olarak adlandırır, ancak üreticiler A/B, +/− gibi farklı ve bazen ters etiketler kullanır. Haberleşme hiç yoksa ilk denenecek şeylerden biri A ve B’yi yer değiştirmektir.
Modbus nerede kullanılır?
- Enerji analizörleri ve sayaçlar: Akım, gerilim, güç ve enerji değerlerinin PLC veya SCADA’ya alınması. Ayrıntılar: enerji izleme sistemleri.
- Frekans konvertörleri: Çalıştırma, durdurma, hız referansı ve arıza bilgisi. Ayrıntılar: frekans konvertörü nedir.
- HMI ve SCADA: Farklı markalardaki cihazlardan veri toplama. Ayrıntılar: HMI nedir.
- Sıcaklık kontrol cihazları, debimetreler, gateway’ler: Eski cihazların Ethernet tabanlı sistemlere bağlanması.
PROFINET ve EtherCAT ile karşılaştırma için: PROFINET vs EtherCAT vs Modbus.
Sık görülen Modbus haberleşme arızaları
- Timeout (cevap yok): Slave hiç cevap vermiyor. Kablo kopuk, A/B ters, slave ID yanlış veya seri ayarlar uyuşmuyor olabilir.
- Yanlış slave ID: Master farklı bir adrese soruyor; cihazın ön panelinden veya yazılımından adres kontrol edilmelidir. Aynı hatta iki cihazın aynı adreste olması da aralıklı ve anlamsız hatalar üretir.
- Baud veya parite uyuşmazlığı: Cevap geliyor ama CRC hatası veriyor ya da hiç anlaşılmıyor; hattaki tüm cihazların seri ayarları aynı olmalıdır.
- Eksik veya fazla sonlandırma: Kısa hatta çalışan sistem, hat uzayınca veya cihaz eklenince aralıklı hata vermeye başlar.
- A/B uçları ters: Hiç haberleşme yoktur; uçlar yer değiştirince düzelir.
- Yanlış register adresi: Değer okunuyor ama yanlış; 1 adres kayması, yanlış tablo (3x yerine 4x) veya yanlış fonksiyon kodu söz konusudur.
- Anlamsız float değeri: Word sırası yanlış; word swap ayarı denenmelidir.
Haberleşme sorunlarını ayırmanın en hızlı yolu, bilgisayara bir USB-RS485 dönüştürücü bağlayıp bir Modbus test yazılımıyla cihazı doğrudan sorgulamaktır. Cihaz bilgisayara cevap veriyorsa sorun PLC tarafındaki ayarlardadır. Panel tarafındaki sorunlar için: HMI PLC haberleşme hatası.
Sıkça Sorulan Sorular
Modbus RTU ile Modbus TCP arasındaki fark nedir?
Modbus RTU, RS-485 gibi seri hatlar üzerinden çalışır, cihazlar 1-247 arası slave ID ile adreslenir ve hata kontrolü CRC ile yapılır. Modbus TCP aynı Modbus mesajlarını Ethernet üzerinden, TCP 502 portu ile taşır ve cihazlar IP adresiyle bulunur.
Modbus’ta 40001 adresi ne anlama gelir?
40001, holding register tablosunun ilk elemanını gösteren geleneksel bir numaralandırmadır. Mesajın içinde bu register 0 adresiyle istenir; bu yüzden yazılımda adres girerken cihaz kılavuzunun hangi gösterimi kullandığına dikkat edilmelidir.
Modbus RS-485 hattına sonlandırma direnci takmak gerekir mi?
Evet, hattın iki fiziksel ucuna birer sonlandırma direnci takılmalıdır; pratikte yaygın değer 120 Ω’dur (spesifikasyon 150 Ω önerir). Ara cihazlarda sonlandırma kapalı olmalıdır, aksi halde hat fazla yüklenir ve haberleşme bozulur.
Bir Modbus hattına kaç cihaz bağlanabilir?
Seri hatta adreslenebilecek slave sayısı 247’dir. Ancak tekrarlayıcı olmadan bağlanabilecek cihaz sayısı RS-485 donanımına bağlıdır; spesifikasyon en az 32 cihazı garanti eder, daha fazlası için cihazların yük değerine bakılmalı veya tekrarlayıcı kullanılmalıdır.
Modbus’ta okunan float değer neden anlamsız çıkıyor?
32 bit float değer iki register’a bölünür ve register sırası üreticiden üreticiye değişir. PLC veya HMI’daki word swap ayarı değiştirilerek değer bilinen bir ölçümle karşılaştırılır; gerekirse byte swap da denenir.
Eskişehir’de Modbus ve cihaz haberleşme desteği
AveA Otomasyon olarak Eskişehir ve çevre illerdeki tesislerde Modbus RTU ve Modbus TCP hatlarının kurulumu, enerji analizörü ve sürücü entegrasyonu ile haberleşme arızalarının tespitini yapıyoruz. Ayrıntılar: PLC programlama hizmeti, IIoT gateway ile veri toplama ve makine ve otomasyon arıza servisi. Bize 0533 454 52 32 numarasından ulaşabilirsiniz; mesai dışında da arayabilirsiniz.
