Ağ

Modbus RTU ile Modbus TCP arasındaki fark nedir?

Kısa yanıt

Modbus RTU seri hat (genellikle RS-485) üzerinde çalışır ve her çerçevenin sonunda CRC-16 taşır. Modbus TCP aynı register modelini ve fonksiyon kodlarını Ethernet üzerinden, çoğunlukla 502 numaralı portta taşır. TCP çerçevesinde CRC yoktur; bunun yerine MBAP başlığı bulunur. Veri anlamı aynıdır; yalnızca cihaz tek protokolü konuşuyorsa ağ geçidi (gateway) ile köprülenir.

Değişmeyenler ve değişenler

Modbus, bir cihazın verilerini 16 bitlik register'lar üzerinden sunan istemci-sunucu bir protokoldür. RTU ve TCP aynı register modelini ve aynı fonksiyon kodlarını kullanır; örneğin 03 kodu holding register okumak demektir. Değişen şey, çerçevenin nasıl taşındığı ve doğrulandığıdır.

RTU, RS-485 gibi seri bir hat üzerinden çalışır. Çerçeveler arasındaki sessizlik süresi, bir çerçevenin nerede başlayıp bittiğini belirler. Her çerçevenin sonunda CRC-16 bulunur. Tipik bir hatta tek master ve birden fazla slave vardır; slave adresleri 1 ile 247 arasındadır.

TCP ise Ethernet üzerinde standart bir TCP bağlantısıyla çalışır ve genellikle 502 numaralı portu kullanır. Her isteğin başında transaction id, protocol id, uzunluk ve unit id alanlarını taşıyan 7 baytlık MBAP başlığı bulunur.

Örnek: iki register okuma isteği

Hipotetik bir istek: 17 numaralı (0x11) slave cihazdan, başlangıç adresi 0 olan 2 holding register okunacak. Fonksiyon kodu 03'tür. Protokol veri birimi (PDU) fonksiyon kodu (1 bayt), başlangıç adresi (2 bayt) ve register sayısından (2 bayt) oluşur; toplam 5 bayt eder.

RTU çerçevesi: slave adresi (1) + PDU (5) + CRC (2) = 8 bayt. 9600 baud ve 8N1 ayarında her bayt 10 bit tutar: başlangıç biti, 8 veri biti ve durdurma biti. İletim süresi yaklaşık 8 × 10 / 9600 ≈ 8,3 ms'dir; sessizlik aralıkları bu süreye dahil değildir.

TCP çerçevesi: MBAP (2 + 2 + 2 + 1 = 7) + PDU (5) = 12 bayt. MBAP'taki uzunluk alanı, unit id ile PDU'nun toplamını, yani 1 + 5 = 6 değerini taşır. Veri içeriği iki sürümde de aynıdır; değişen yalnızca zarftır.

Sık yapılan hatalar

En sık hata, RTU ayarlarını TCP'ye aynen taşımaktır. Baud hızı, parite ve stop biti (örneğin 9600 8E1) Ethernet tarafında anlam taşımaz; orada belirleyici olanlar IP adresi, port ve unit id'dir. Ters yönde de hata olur: ağ geçidinin arkasındaki cihazın unit id'si yanlış girilirse istek başka bir seri cihaza gidebilir.

İkinci hata, CRC'nin olmamasını 'hatasız iletim' sanmaktır. TCP ve Ethernet kendi bütünlük denetimlerini yapar; yine de değerlerin proses açısından makul olup olmadığı uygulama düzeyinde kontrol edilmelidir. Beklenmeyen bir değer, çoğu zaman yanlış register haritasının ilk işaretidir.

Üçüncü hata, RTU'daki tek master varsayımını TCP'ye taşımaktır. Birden fazla istemci aynı cihazı sorguluyorsa cihazın bağlantı sınırı ve yanıt davranışı kılavuzdan kontrol edilmelidir.

Sık sorulanlar

Aynı cihaz hem RTU hem TCP ile konuşabilir mi?

Bazı cihazlar iki arayüzü birden sunar. Bu durumda register haritası aynıdır, ama her bağlantı ayrı ayarlanır. Yalnızca seri portu olan bir cihaz Ethernet ağına bağlanacaksa çoğu zaman bir ağ geçidi gerekir. Cihaz belgesinde desteklenen arayüzleri ve unit id kurallarını kontrol edin.

Modbus TCP'de CRC yoksa bozulan veri ne olur?

Ethernet çerçevesindeki FCS alanı bozuk kareleri genellikle reddeder; TCP de bozulan segmenti yeniden ister. İletim hataları bu nedenle çoğunlukla sessizce geçmez. Yine de zaman aşımı, eksik yanıt ve beklenmeyen değerleri uygulama tarafında izlemek gerekir.

Kaynaklar

Örnek sayılar varsayımsaldır; sahada doğrulanmış sonuç iddiası değildir.

Benzer sorular

Tüm sorular