Bu makalede8 bölüm
- Teknoloji
- Modbus RTU, Modbus TCP, RS-485, mbpoll, Wireshark
- Konu
- Seri Modbus cihazlarının Ethernet’e taşınması
- Seviye
- Orta
- Ön koşullar
- Modbus register ve fonksiyon kodu kavramları
- RS-485 kablolama temelleri
RS-485 üzerinden Modbus RTU konuşan enerji analizörünü, sürücüyü ya da eski PLC’yi SCADA’ya bağlamak için araya bir gateway koyarsınız; ilk gün okunur, bir hafta sonra aralıklı “timeout” ve eksik veri şikâyeti başlar. Neden çoğu zaman cihazda değil, kurguda: yanlış gateway modu, kaymış Unit ID eşlemesi, seri hattın kapasitesini aşan poll süreleri ya da aynı hatta birden fazla istemcinin yüklenmesi. Aşağıda gateway mimarisini, zamanlama hesabını ve exception kodlarıyla adım adım sorun gidermeyi anlatıyoruz.
Modbus RTU ve Modbus TCP çerçeve farkları
İki protokolün uygulama verisi (PDU: fonksiyon kodu ve veri) aynıdır. Fark, bu verinin nasıl paketlendiğindedir.
| Alan | Modbus RTU | Modbus TCP |
|---|---|---|
| Adresleme | Slave adresi (1 bayt, 1–247) | IP adresi + Unit ID (1 bayt) |
| Başlık | Yok | MBAP başlığı (7 bayt) |
| Hata kontrolü | CRC-16 (2 bayt) | Yok (TCP sağlar) |
| Çerçeve sınırı | En az 3,5 karakterlik sessizlik | MBAP uzunluk alanı |
| Eşzamanlılık | Hatta tek master, tek bekleyen istek | Birden fazla istemci ve bağlantı |
| Port | RS-485/RS-232 | TCP 502 |
MBAP başlığı; işlem kimliği (Transaction ID, 2 bayt), protokol kimliği (2 bayt, Modbus için 0), uzunluk (2 bayt) ve Unit ID (1 bayt) alanlarından oluşur. İşlem kimliği, TCP istemcisinin aynı bağlantı üzerinden birden fazla isteği eşleştirmesini sağlar. RTU’da böyle bir alan yoktur, çünkü seri hatta aynı anda yalnız bir istek beklemede olabilir. Gateway’in bir kuyruk yönetmek zorunda olmasının nedeni budur. Spesifikasyonların resmi kaynağı Modbus Organization sitesidir.
Gateway mimarileri ve çalışma modları
Piyasadaki seri–Ethernet dönüştürücüler üç farklı modda çalışabilir ve bu modlar sahada sürekli karıştırılır:
| Mod | Ne yapar | Ne zaman |
|---|---|---|
| Modbus TCP ↔ RTU dönüşümü | MBAP’ı kaldırır, CRC ekler; yanıtı tersine çevirir | Standart Modbus TCP istemcileri için doğru seçim |
| RTU over TCP | RTU çerçevesini (CRC dahil) olduğu gibi TCP içinde taşır | Yalnız istemci yazılımı bu modu açıkça destekliyorsa |
| Transparan (seri tünel) | Baytları protokol bilmeden iletir; sanal COM portu | Eski seri yazılımlar, Modbus dışı protokoller |
Sahada en sık gördüğümüz kurulum hatası: standart bir Modbus TCP istemcisini “RTU over TCP” ya da transparan modda çalışan bir gateway’e bağlamak. Bağlantı kurulur, ping gider, port açık görünür; ama yanıtlar çözümlenemez ve istemci yalnız zaman aşımı raporlar. Ağ sağlam, mod yanlış. RTU over TCP, Modbus spesifikasyonunda tanımlı bir taşıma biçimi değildir; birlikte çalışabilirlik üreticiye bağlıdır. Transparan modda zaman aşımı ve çerçeve sınırı yönetimi tamamen istemci yazılımına kalır ve ağ gecikmesi RTU’nun 3,5 karakter kuralını bozabilir.
Gateway seçerken mod desteğinin yanında eşzamanlı TCP bağlantı sayısına, istek kuyruğu davranışına, seri port başına ayarlanabilir zaman aşımına ve teşhis sayaçlarına (zaman aşımı, CRC hatası, exception sayısı) bakın. Teşhis sayacı olmayan gateway, arızada size hiçbir şey söylemez. Protokol dönüşümü veri toplama mimarisinin parçasıysa edge gateway seçim kriterleri yazısı daha geniş bir çerçeve sunar.
Unit ID ve slave adresi eşlemesi
Gateway’in arkasında tek bir RS-485 hattı ve bu hatta birden fazla cihaz vardır. TCP istemcisi bütün cihazlara aynı IP adresi üzerinden ulaşır; isteğin hangi cihaza gideceğini MBAP’taki Unit ID belirler. Standart dönüşüm modunda gateway Unit ID’yi doğrudan seri hattaki slave adresi olarak kullanır: Unit ID 5 ile gelen istek, RTU hattında adres 5’e gider.
Eşlemede takıldığımız noktalar:
- Unit ID 0: Seri hatta yayın (broadcast) adresidir; yayın isteklerine yanıt dönmez. Bazı gateway’ler 0’ı kendi iç kayıtlarına ayırır. Okuma isteklerinde kullanmayın.
- Unit ID 255: Modbus TCP uygulama kılavuzu, gateway arkasında olmayan doğrudan TCP cihazları için 0xFF kullanılmasını önerir. Bazı TCP cihazları ise Unit ID’yi yok sayar veya yalnız belirli bir değeri kabul eder; cihaz dokümanını kontrol edin.
- Adres çakışması: Aynı RS-485 hattında iki cihaz aynı adrese sahipse yanıtlar çakışır ve CRC hataları oluşur. Geçişten önce her hattın adres listesini çıkarın.
- Birden fazla seri port: İki portlu gateway’lerde hangi Unit ID aralığının hangi porta yönleneceği bir eşleme tablosuyla tanımlanır; aynı adresin iki portta bulunması bu tablo olmadan sorun çıkarır.
Bir diğer kafa karışıklığı register adreslemesidir. Dokümanlarda “40001” diye gösterilen holding register, protokolde 0 adresine karşılık gelir. Tek bir kaydırma hatası veriyi bir register kaymış okutur; değerler makul göründüğü için aylarca fark edilmeyebilir. Devreye almada bilinen bir değeri (örneğin cihazın seri numarası veya sabit bir parametre) okuyarak eşlemeyi doğrulayın. Tahmin etmeyin, okuyun.
Zamanlama: poll süresi, timeout ve RS-485 hat hızı
RTU’da bir karakter 11 bitten oluşur (1 başlangıç, 8 veri, 1 parite ve 1 durma biti; parite kullanılmıyorsa 2 durma biti). Seri hat süresi bu yüzden doğrudan hesaplanabilir. Aşağıdaki değerler varsayımlara dayalı bir örnek hesaptır:
Hat hızı : 9600 bit/s
1 karakter : 11 / 9600 ≈ 1,15 ms
Çerçeveler arası boşluk: 3,5 karakter ≈ 4 ms
FC03 ile 10 holding register okuma:
İstek : 8 bayt → 8 × 1,15 ≈ 9,2 ms
Yanıt : 25 bayt → 25 × 1,15 ≈ 28,8 ms
Boşluklar (2 × 4 ms) ≈ 8 ms
Cihaz yanıt süresi (varsayım) ≈ 20 ms
Toplam ≈ 66 ms
10 cihazlık hatta tek tur ≈ 660 ms
Aynı hat 19200 bit/s’de ≈ 430 ms (cihaz yanıt süresi değişmez)
Bu hesaptan üç pratik sonuç çıkar. Birincisi, seri hattın kapasitesi sınırlıdır; istemcinin poll süresi hattın bir turu tamamlayabileceği süreden kısa ayarlanırsa istekler gateway kuyruğunda birikir ve gecikme sürekli artar. Kuyruk kendi kendine boşalmaz. İkincisi, hat hızını artırmak yalnız iletim süresini kısaltır; cihazın kendi yanıt süresi sabit kalır. Üçüncüsü, art arda register’ları tek istekte okumak birçok küçük istek göndermekten çok daha verimlidir: tek bir FC03 en fazla 125 register okuyabilir.
Zaman aşımlarını katmanlı ayarlayın. Gateway’in seri taraftaki zaman aşımı en yavaş cihazın yanıt süresini karşılamalı; TCP istemcisinin zaman aşımı ise gateway zaman aşımı × yeniden deneme sayısı artı kuyrukta bekleme süresinden uzun olmalıdır. İstemci zaman aşımı gateway’inkinden kısa olursa istemci isteği iptal edip yenisini gönderirken eski yanıt geri gelir; Transaction ID eşleştirmesini doğru yapmayan istemcilerde yanıtlar karışır, doğru yapanlarda ise gereksiz yeniden denemeler seri hattı daha da yükler. 19200 bit/s’nin üzerindeki hızlarda spesifikasyon 3,5 karakterlik boşluk için 1,75 ms sabit değer önerir.
RS-485 fiziksel katmanı da zamanlamayı etkiler: hattın iki ucunda 120 Ω sonlandırma, tek bir noktada polarlama (bias), yıldız değil hat (bus) topolojisi ve standart birim yükte segment başına 32 cihaz sınırı. Sonlandırması eksik uzun hatlarda yansımalar CRC hatası olarak görünür ve gateway’in teşhis sayaçlarını artırır. Yazılımda aranan arızanın kaynağı bazen bir eksik dirençtir.
Eşzamanlı bağlantı limitleri ve çoklu master sorunu
Modbus TCP tarafında SCADA, historian, enerji yönetim yazılımı ve bir mühendislik aracı aynı anda aynı gateway’e bağlanabilir. Seri taraf ise tek master ile çalışır: gateway bütün istekleri sıraya koyup tek tek gönderir. İki sonucu var:
- Gateway’in eşzamanlı TCP bağlantı sınırı aşıldığında yeni bağlantılar reddedilir veya eski bağlantılar kapatılır. Bu sınır cihazdan cihaza değişir ve veri sayfasında yazar; kapanmayan “yarım” bağlantılar sınırı doldurabilir, bu yüzden istemcilerde bağlantıyı açık tutma ve yeniden bağlanma davranışını kontrol edin.
- Her yeni istemci seri hat kapasitesini paylaşır. Üç istemci aynı cihazları 1 saniyede bir okuyorsa hat üç kat yük taşır. Kalıcı çözüm, seri hattı tek bir veri toplayıcının okuması ve diğer sistemlerin veriyi bu toplayıcıdan (örneğin OPC UA veya MQTT üzerinden) alması, ya da her istemci için ayrı poll sürelerinin bilinçli belirlenmesidir.
Aynı RS-485 hattında gateway’in yanında eski bir HMI veya PLC’nin de master olarak bağlı unutulması, iki master’ın birbirinin çerçevelerini bozmasına yol açar. Belirti rastgele CRC hatası ve aralıklı timeout’tur. Ethernet tabanlı endüstriyel ağ altyapısına geçişte hattın tek master’ı gateway olmalıdır. Eski master sökülür.
Exception kodları ile sorun giderme
Cihaz isteği anlayıp yerine getiremediğinde fonksiyon kodunun en yüksek bitini 1 yaparak (örneğin 0x03 yerine 0x83) bir exception kodu döner. Gateway’e özgü iki kod, sorunun seri tarafta mı TCP tarafında mı olduğunu ayırmak için özellikle değerlidir:
| Kod | Anlam | Tipik neden |
|---|---|---|
| 01 | Illegal Function | Cihaz bu fonksiyon kodunu desteklemiyor |
| 02 | Illegal Data Address | Register adresi yok veya bir kaydırma hatası |
| 03 | Illegal Data Value | Register sayısı veya değer aralık dışında |
| 04 | Slave Device Failure | Cihaz içi hata |
| 06 | Slave Device Busy | Cihaz başka bir işlemi sürdürüyor |
| 0A | Gateway Path Unavailable | Unit ID için yönlendirme tanımlı değil |
| 0B | Gateway Target Failed to Respond | Seri cihaz yanıt vermedi: adres, kablo, hız, parite |
Hiç yanıt gelmemesi (TCP tarafında zaman aşımı) ile 0B exception’ı farklı şeylerdir: ilki istemci–gateway yolunu veya gateway modunu, ikincisi seri tarafı işaret eder. Kontrol sırası buradan çıkar. Sahada hızlı test için açık kaynak mbpoll aracını kullanıyoruz:
# Gateway üzerinden Unit ID 5’ten 10 holding register oku (tek sorgu)
mbpoll -m tcp -a 5 -r 1 -c 10 -t 4 -1 192.168.10.50
# Aynı cihazı seri hattan doğrudan oku (9600, çift parite)
mbpoll -m rtu -a 5 -b 9600 -P even -r 1 -c 10 -t 4 -1 /dev/ttyUSB0
İki komut aynı değerleri döndürüyorsa cihaz ve adresleme doğrudur; sorun gateway yapılandırmasında veya istemcidedir. Seri okuma da başarısızsa gateway’i bırakın, kabloya ve cihaz ayarlarına dönün. Wireshark’ta mbtcp filtresi Modbus TCP trafiğini, mbtcp.unit_id == 5 belirli bir cihaza giden istekleri gösterir.
Geçiş kontrol listesi
- Her RS-485 hattının cihaz listesi, adresleri, hız, parite ve durma biti ayarları belgelendi; adres çakışması yok.
- Hat sonlandırması ve polarlama doğrulandı, hat topolojisi yıldız değil.
- Gateway modu “Modbus TCP ↔ RTU dönüşümü” olarak ayarlandı.
- Unit ID–port eşleme tablosu hazırlandı; Unit ID 0 okuma için kullanılmıyor.
- Örnek hesapla hat turu süresi bulundu; poll süreleri bunun üzerinde.
- Seri ve TCP zaman aşımları katmanlı ayarlandı.
- Seri hattın tek master’ı gateway; eski master’lar sökülmüş.
- Gateway’e bağlanacak istemciler ve bağlantı sayısı belirlendi.
- Bilinen bir register değeri ile adres kayması kontrol edildi.
- Gateway yönetim arayüzü OT yönetim ağında; Modbus TCP 502 erişimi yalnız yetkili istemcilerle sınırlandı.
Modbus verisini üst sistemlere aktarmak bir sonraki adımsa Siemens S7 PLC’den veri okuma yöntemleri yazısı farklı okuma yaklaşımlarını karşılaştırır. Modbus TCP erişimini firewall’da protokol düzeyinde sınırlamak için Modbus ve S7 derin paket inceleme kuralları yazısına bakabilirsiniz; Modbus’ın kendisinde kimlik doğrulama yoktur. Gateway seçimi ve protokol dönüşümü projeleri için edge gateway ve protokol dönüşümü, PLC tarafındaki entegrasyon için PLC–PLC ve PLC–sunucu entegrasyonu sayfalarımıza göz atabilirsiniz.
Sık sorulan sorular
Modbus TCP’de Unit ID hangi değere ayarlanmalı?
Gateway arkasındaki seri cihazlar için Unit ID, cihazın RS-485 hattındaki slave adresine eşit olmalıdır. Doğrudan Ethernet bağlı cihazlarda genellikle 255 veya cihaz dokümanında belirtilen değer kullanılır; 0 seri hatta yayın adresidir.
Gateway’e bağlanıyorum ama sürekli timeout alıyorum; ilk neye bakmalıyım?
İlk bakılacak yer gateway modudur: Modbus TCP ile RTU arasında dönüşüm yapacak şekilde ayarlı olmalı. Ardından seri hızı, pariteyi, slave adresini ve istemci zaman aşımının gateway zaman aşımından uzun olduğunu kontrol edin.
Exception 0B ne anlama gelir?
0B, gateway’in isteği seri hatta ilettiğini ama hedef cihazdan yanıt alamadığını gösterir. Sorun seri taraftadır: yanlış adres, kablo veya sonlandırma hatası, hız ya da parite uyuşmazlığı en sık nedenlerdir.
Aynı gateway’e birden fazla SCADA bağlanabilir mi?
Bağlanabilir, ama bütün istekler aynı seri hattı paylaşır ve gateway’in eşzamanlı bağlantı sınırı vardır. Hat kapasitesini hesaplayın; mümkünse seri hattı tek bir veri toplayıcı okusun, diğer sistemler veriyi oradan alsın.
- Teknoloji
- Modbus RTU, Modbus TCP, RS-485, mbpoll, Wireshark
- Konu
- Seri Modbus cihazlarının Ethernet’e taşınması
- Seviye
- Orta
- Ön koşullar
- Modbus register ve fonksiyon kodu kavramları
- RS-485 kablolama temelleri
Endüstriyel Ethernet