Modbus Nedir?
Modbus, programlanabilir mantık denetleyicileri (PLC) ile kullanılmak için 1979 yılında Modicon® tarafından yayımlanan Modicon tarafından geliştirilen seri iletişim protokolüdür. Basit bir deyişle, elektronik cihazlar arasındaki seri hatlar üzerinden bilgi iletimi için kullanılan bir yöntemdir. Bilgi talebinde bulunan cihaz, Modbus Master ve bilgi sağlayan cihazlar ise Modbus Slaves olarak adlandırılmaktadır. Standart bir Modbus internet ağında, bir Master ve herbiri 1’den 247’ye kadar farklı Slave Adresine sahip, sayısı 247’ye kadar ulaşan Slave olabilir. Master aynı zamanda Slave’lere bilgi gönderebilir.
Resmi Modbus tanıtımları www.modbus.org/specs.php adresinde yer almaktadır.
Ne İçin Kullanılır?
Modbus açık bir protokoldür, diğer bir deyişle, üreticilerin kendi donanımlarına telif hakkı ödemelerine gerek kalmadan Modbus’ı inşa etmeleri ücretsizdir. Modbus endüstride standart bir iletişim protokolü haline geldi ve şimdi de oldukça yaygın olarak kullanılan endüstriyel elektrikli cihazların bağlantı noktasıdır. Birçok endüstri alanında çoğu üretici tarafından kullanılır. Modbus cihazlandırma ve denetim aygıtlarından ana denetleyici ya da veri toplama sistemlerine sinyal iletiminde kullanılır. Örneğin, bir sistem sıcaklığı ve nemi ölçer ardından sonuçları bilgisayara gönderir. Modbus, genel olarak merkezi denetim ve veri toplamada merkezi bilgisayarı, Uzaktan Bağlantı Ünitesi’ne (RTU) bağlar. Modbus protokol sürümleri seri hatlar (Modbus RTU ve Modbus ASCII) ve Ethernet (Modbus TCP) için mevcuttur.
Nasıl Çalışır?
Modbus cihazlar arasındaki seri hatlar üzerinden iletilmektedir. En kolay kurulum, iki cihaz, bir Master bir Slave, üzerindeki seri bağlantı noktalarını tek bir kabloyla bağlamaktadır.
Bu veri, bit olarak adlandırılan bir ve sıfır serileri halinde gönderilmektedir. Her bir bit voltaj olarak gönderilmektedir. Sıfırlar pozitif voltaj, birler ise negatif voltaj olarak gönderilmektedirler. Bitler çok hızlı bir şekilde gönderilirler. İletim hızı genel olarak 960 baud’dur (saniyedeki bit miktarı).
Hexadesimal Nedir?
Problemleri çözerken, ham verinin iletildiğini görmek yardımcı olabilir. Uzun bir ve sıfır dizesini okumak zor olduğundan bitler birleşek hexadesimal (16’lı dizeler) olarak gösterilir. Her 4 bit blok 0’dan F‘ye kadar olan 16 karakterden biriyle gösterilmektedir
0000 = 0 | 0100 = 4 | 1000 = 8 | 1100 = C |
0001 = 1 | 0101 = 5 | 1001 = 9 | 1101 = D |
0010 = 2 | 0110 = 6 | 1010 = A | 1110 = E |
0011 = 3 | 0111 = 7 | 1011 = B | 1111 = F |
Her bir 8’lik bit bloğu (byte olarak adlandırılır) 00’dan FF’e kadar olan 256 karakterden biriyle çiftler halinde gösterilmektedir.
Standart Modbus’ta Veri Nasıl Saklanır?
Bilgi, Slave cihazında dört farklı çizelge halinde saklanır.
İki çizelge on/off durum değerlerini (coils), diğer ikisi de sayısal değerleri (register) saklar.
Coil ve register’ların her biri read-only ve read-write çizelgelerine sahiptir.
Her bir çizelge 9999 değere sahiptir.
Her bir coil ya da contact 1 bittir ve 0000 ile 270E arasında bir veri adresi tahsis edilmiştir.
Her bir Register 1 kelime= 16 bit=2 byte’dır, ve ayrıca 0000 ile 270E arasında yer alan bir veri adresine sahiptir.
Coil/Register Numaraları | Veri Adresleri | Tür | Çizelge Numarası |
1-9999 | 0000 to270E | Read-Write | Discrete Output Coils |
10001-19999 | 0000 to270E | Read-Only | Discrete Input Contacts |
30001-39999 | 0000 to270E | Read-Only | Analog Input Registers |
40001-49999 | 0000 to270E | Read-Write | Analog Output Holding Registers |
Coil/Register Numaraları mesajlarda gerçekten gözükmedikleri için sistem adı olarak düşünülebilir. Veri adresleri ise mesajlarda kullanılırlar.
Örneğin; ilk Holding Register, 40001 numara, 0000 veri adresine sahiptir.
Bu iki değer arasındaki fark ise offset(sapma)’tir.
Her bir çizelge farklı bir offset’e sahiptir. 1, 10001, 30001 ve 40001.
Slave ID Nedir?
Bir network’deki her bir Slave kendine ait, 1 ile 247 arasında değişen adres numarasına sahiptir. Master veri talebinde bulunduğunda, Slave’in adres bilgisi gönderilen ilk byte’dır. Böylece, her bir Slave ilk byte’dan sonra mesajı gözardı edip etmeyeceğini anlar.
Function Code Nedir?
Master tarafından gönderilen ikinci byte function code olarak adlandırılır. Bu numaralar Slave’e erişeceği çizelgeyi ve onu okuyacağı (Read) ya da ona yazıp (Write) yazmayacağı bilgisini verir.
Function Code | Action | Table Name |
01 (01 hex) | Read | Discrete Output Coils |
05 (05 hex) | Write single | Discrete Output Coil |
15 (0F hex) | Write multiple | Discrete Output Coils |
02 (02 hex) | Read | Discrete Input Contacts |
04 (04 hex) | Read | Analog Input Registers |
03 (03 hex) | Read | Analog Output Holding Registers |
06 (06 hex) | Write single | Analog Output Holding Register |
16 (10 hex) | Write multiple | Analog Output Holding Registers |
CRC çevrimsel hata denetimi (Cyclic Reduncany check) manasına gelmektedir. CRC, hata denetimi için her modbus mesajının sonuna eklenen iki byte’dır. Mesajdaki her byte CRC’yi hesaplamak için gönderilmektedir. Ayrıca alıcı cihaz da CRC’yi hesaplar ve onu gönderici cihazdan gelen CRC ile karşılaştırır. Eğer mesajdaki bir bit bile yanlış alınmışsa, CRC’ler farklı olacaktır ve bir hata oluşacaktır.
CRC calculator adresindeki elektronik tabloda 16 byte’a kadar olan mesajları bulabilirsiniz.
İndirmek için, linke tıklayınız ve Save Target As seçeneğiyle kaydedebilirsiniz.
Modbus Komut ve Yanıtlarının Biçimleri Nelerdir?
Aşağıdaki tabloda istek ve yanıtların örneklerini bulabilirsiniz.
Veri Adresleri | Read | Write Single | Write Multiple |
Discrete Output Coils 0xxxx | FC01 | FC05 | FC15 |
Discrete Input Contacts 1xxxx | FC02 | NA | NA |
Analog Input Registers 3xxxx | FC04 | NA | NA |
Analog Output Holding Registers 4xxxx | FC03 | FC06 | FC16 |
Veri Türleri Nelerdir?
FC03 örneği, register 40108’in 16 bit’e çevrimi 1010 1110 0100 0001 olan AE41’i içerdiğini göstermektedir.
Tamam ama bu ne anlama geliyor? Bunun birkaç anlamı olabilir.
Register 40108 16 bitlik (16-bit) bu verilerden herhangi biri olarak tanımlanabilir.
Bir 16-bit unsigned integer (0 ile 65535 arasında bir tam sayı)
register 40108’in içeriği AE41= 44,609 (hex’den decimal’a çevrimi)
Bir 16-bit unsigned integer (-32768 ile 32767 arasında bir tam sayı)
AE41= -20,927 (hex’den decimal’a çevrimi, bittiğinde -32767 sonra 65536 çıkar)
Bir iki karakterli ASCII string (2 harf)
AE41 = ® A
Bir discrete on/off value (16 bit’lik integer gibi değerliği 0 ya da 1 olarak çalışır.
Burda hax verisi 0000 ya da 0001 olur)
Ayrıca, Register 40108 40109 ile birleşerek, aşağıdaki 32 bit’lik verilerden herhangi birini oluşturabilir:
Bir 32-bit unsigned integer (0 ile 4,294,967,295 arasında bir sayı)
40108,40109 = AE41 5652 = 2,923,517,522
Bir 32-bit unsigned integer (-2,147,483,648 ile 2,147,483,647 arasında bir sayı)
AE41 5652 = -1,371,449,774
Bir 32-bit single precision IEEE floating number.
Bu bir matematik formülü olup herhangi bir gerçek sayıya (ondalık noktalı sayı) 7 haneli 32 bit’lik işlevi sağlar.
AE41 5652 = -4.395978 E-11
IEEE float calculator adresinde 4 byte 2 harften oluşan Input’lar bulabilirsiniz.
İndirmek için, linke tıklayınız ve Save Target As seçeneğiyle kaydedebilirsiniz.
Bir 4 karakterli ASCII string (4 harf)
AE41 5652 = ® A V R
Daha uzun ASCII string oluşturabilmek için daha fazla register birleştirilebilir. Her bir register iki ASCII karakter’den (2 byte) oluşur.
Byte ve Harf Sıralaması (word ordering) Ne Demektir?
Modbus tanıtımları verinin register içerisinde nasıl saklandığını tam olarak açıklamaz. Bu nedenle üreticiler, önce yüksek byte’ı sonra düşük byte’ı saklamak ve iletmek için donanımlarına Modbus uyguladılar. (41’den önce AE)
Alternatif olarak diğerleri de önce düşük sonra da yüksek byte olanı saklar ve iletir. (AE’den önce 41)
Benzer şekilde, register’lar 32 bit’lik veri tipi olarak birleştiğinde bazı cihazlar daha yüksek olan 16 bit’lik veriyi (yüksek kelime) önce daha sonra da kalan düşük veriyi saklarken (AE41’dan sonra 5652)diğerleri tam tersini yapmaktadır (5652’dan sonra AE41)
Alıcı cihaz hangi şekilde olacağını biliyorsa, Byte veya kelimelerin hangi sırayla gönderildiği önemli değildir.
Örneğin; eğer 2,923,517,522 numarası 32 bit’lik unsigned integer olarak gönderilmişse, bu aşağıdaki 4 farklı kombinasyondan birisi olarak gönderilebilir.
AE41 5652 high byte first high word first
5652 AE41 high byte first low word first
41AE 5256 low byte first high word first
5256 41AE low byte first low word first
Modbus Haritası (Map) Nedir?
Modbus map bireysel slave cihazlarının listesi olup aşağıdakileri tamımlar;
– Verinin ne olduğu (Ör. basınç veya sıcaklık okumaları)
– Veri’nin nerede kayıt edildiği (hangi çizelge ve veri adresleri)
– Veri’nin nasıl kayıt edildiği (data tipleri, byte ve harf sıralaması)
Bazı cihazlar imalatçı tarafından tanımlanmış sabit cihaz üzerine kurulur, diğerleri ise müşterinin kendi ihtiyaçlarını karşılayacak şekilde, cihazı yapılandırmasına ya da programlamasına izin verirler
Modbus ASCII ile Modbus RTU Arasındaki Fark Nedir?
İkisi arasındaki farkı burada (here) bulabilirsiniz.
Extended Register Adres Nedir?
Analog output registerlar 40001’den 49999’a kadar olduğundan, 9999 register’dan fazlası olamaz demektir. Bu çoğu uygulama için yeterli olsa da bazen daha fazla register olması faydalıdır.
Kalan adreslere 270F’den FFFF’e kadar olan kısmı verimli kılarsak, toplamda 65536 adet yani altı kattan daha fazla register kullanılabilir olur. Bu ise register sayısını 40001 den 105536’ya kadar genişletir.
Çoğu Modbus software driver’ları (Master PC ler için) 40001’den 49999’a kadar sınırlandırılmış olarak sunar ve bu durumda slave cihazlardaki extended register’lara erişim yapılamaz. Ve çoğu slave cihaz extended regsiter’lar kullanan map’leri desteklemez. Öte yandan bazı slave cihazlar bu registerları destekler iken bazı master software’ler de eğer özel yazılmış ise erişim sağlar.
2-byte Slave Adresleme Nasıl Çalışıyor?
Tek byte slave adres’ini tanımlamak ve her slave için tek ve geçerli adresi atamak için kullanıldığından Network üzerindeki slave adeti 256 ile sınırlanmıştır. Modbus verilerinde bu sayı daha düşük olarak 247 adet olarak tanımlanmıştır.
Bu sınırlamayı aşmak için adreste iki byte kullanılacak şekilde protokolde değişiklik yapılabilir.
Master ve slave’lerin hepsinin bu değişikliği desteklemesi gerekir. 2 byte adresleme, network üzerindeki Slave sayısının limitini 65535 adete çıkarır.
Yorumlarınız bizim için çok önemli. Lütfen yorumlarınızı yazın….
Bunlar da ilginizi çekebilir:
Merhaba , emeğiniz için teşekkürler. Yeni öğrenmeye başlayan arkadaşlar için daha fazla örnek ekleyebilir misiniz verdiğiniz örnekleri tam anlayamadım.
İyi çalışmalar.