Modbus Nedir?


Modbus, otomasyon sistemlerinde kullanılan bir seri iletişim protokolüdür. Endüstriyel kontrol sistemlerinde, fabrika otomasyonunda ve bina otomasyonunda sıkça kullanılan bir iletişim standardıdır. Modbus, birçok cihazın birbirleriyle haberleşmesini sağlayan bir iletişim protokolü olarak tasarlanmıştır.

Modbus, bir ana cihazın (Master) bir veya daha fazla yan cihazla (Slave) haberleşmesini sağlar. Ana cihaz, veri alışverişi yapmak istediğinde yan cihazlara talepler gönderir ve yan cihazlar da bu taleplere yanıt verirler. Bu iletişim seri bir iletişim hattı üzerinden gerçekleştirilir ve genellikle RS-485 veya RS-232 gibi fiziksel arabirimler kullanılır.

Modbus, basit, verimli ve yaygın olarak desteklenen bir protokoldür. Veri, 16 bitlik kelime formatında paketlenir ve işaretçi tabanlı bir adresleme kullanılır. Modbus protokolü, veri okuma ve yazma işlemlerini içeren farklı işlev kodlarına sahiptir. Bu işlevler, bir cihazın belirli bir veriye erişimini sağlar veya kontrol komutları göndererek cihazı yönetebilir.

Modbus’un farklı türleri vardır. Modbus RTU (Remote Terminal Unit), seri haberleşme üzerinde kullanılırken, Modbus TCP (Transmission Control Protocol) Ethernet üzerinden kullanılır. Modbus TCP, internet tabanlı iletişim için uygun olup, IP tabanlı ağlarda kullanılabilir.

Modbus, yaygın olarak kullanılan bir endüstri standardı olduğu için birçok otomasyon cihazı ve sistemleri Modbus protokolünü destekler. Bu nedenle, farklı marka ve modellerdeki cihazların birbirleriyle entegrasyonu ve veri paylaşımı için Modbus kullanılabilir.

Temel Kavramlar:

  1. Ana Cihaz (Master): Modbus protokolünü kullanan bir cihaz veya sistemdir. Ana cihaz, diğer cihazlara veri talepleri gönderir, komutlar yürütür ve yanıtları alır. Bir endüstriyel kontrol sisteminde, ana cihaz genellikle bir kontrolör veya bir yazılım aracılığıyla temsil edilir.
  2. Yan Cihaz (Slave): Ana cihaza bağlı olan ve Modbus protokolünü destekleyen diğer cihazlardır. Yan cihazlar, ana cihazın taleplerine yanıt verir ve komutları yerine getirir. Örneğin, sensörler, aktüatörler veya diğer otomasyon cihazları yan cihazlar olabilir.
  3. Adresleme: Modbus protokolünde, her yan cihazın bir benzersiz adresi vardır. Ana cihaz, belirli bir yan cihazla iletişim kurmak için bu adresi kullanır. Adresleme, yan cihazın işlevselliğini tanımlayan veri tutanaklarına (register) veya bobinlere (coil) erişim sağlar.
  4. Veri Tutanağı (Register): Modbus protokolünde, verilerin depolandığı 16 bitlik bellek bölgeleridir. Veri tutanakları, yan cihazlarda ölçüm verileri, parametreler, kontrol değerleri vb. gibi farklı türde verileri içerebilir. İşlev kodları aracılığıyla ana cihaz, veri tutanağının belirli bir adresine okuma veya yazma işlemi gerçekleştirebilir.
  5. Bobinler (Coils): Modbus protokolünde, dijital verileri temsil eden bellek bölgeleridir. Bobinler genellikle açık veya kapalı durumu temsil eder. Ana cihaz, bobinlerin durumunu okuyabilir veya değiştirebilir.
  6. İşlev Kodları: Modbus protokolünde, farklı işlevlere karşılık gelen işlev kodları bulunur. Ana cihaz, yan cihazlara belirli işlemler yapmak için işlev kodlarını kullanır. Örneğin, belirli bir veri tutanağını okuma veya yazma, bobin durumlarını değiştirme, yanıt süresi kontrolü gibi işlemler için işlev kodları kullanılır.

Bu temel kavramlar, Modbus protokolünü anlamak ve kullanmak için önemlidir. Her cihazın Modbus protokolü desteği ve belirli ayarlarla yapılandırılmış olması gerekmektedir.

Daha Fazla Detay:

Ana cihaz (Master), Modbus protokolünü kullanan bir cihaz veya sistemdir. Genellikle bir endüstriyel kontrolör, otomasyon yazılımı veya Modbus protokolünü destekleyen bir cihaz olarak düşünebiliriz. Ana cihaz, diğer cihazlara (yan cihazlar) veri talepleri gönderir ve bu taleplere yanıt alır.

Ana cihazın temel görevleri şunlardır:

  1. Veri Okuma ve Yazma: Ana cihaz, yan cihazlardan veri okuyabilir veya bu cihazlara veri yazabilir. Örneğin, bir endüstriyel kontrol sistemi, bir sensörün ölçüm verilerini okuyabilir veya bir aktüatöre bir kontrol değeri yazabilir.
  2. Komut Gönderme: Ana cihaz, yan cihazlara komutlar gönderebilir. Bu komutlar, bir yan cihazın belirli bir işlemi gerçekleştirmesini veya belirli bir durumu değiştirmesini sağlayabilir. Örneğin, bir anahtarın açık veya kapalı olmasını kontrol etmek için bir komut gönderilebilir.
  3. İşlem Kontrolü: Ana cihaz, yan cihazlarla iletişim kurarken işlem kontrolünü sağlar. Veri taleplerini zamanında gönderme, yanıtları bekleyerek uygun işlem süresini sağlama gibi görevleri yerine getirir.
  4. Veri Yönetimi: Ana cihaz, yan cihazlarla alışveriş edilen verilerin yönetimini yapar. Bu, alınan verileri işleme, analiz etme, kaydetme veya başka bir şekilde kullanma sürecini içerebilir.

Ana cihaz, Modbus protokolünde belirli bir adresleme kullanarak yan cihazlarla iletişim kurar. Yan cihazlar, ana cihazın taleplerine yanıt verir ve komutları yerine getirir. Ana cihaz, belirli bir yan cihaza erişmek için bu yan cihazın benzersiz adresini kullanır.

Özetlemek gerekirse, ana cihaz (Master), Modbus protokolünü kullanan ve diğer yan cihazlarla haberleşme sağlayan bir kontrol veya yönetim cihazıdır. Veri okuma, yazma, komut gönderme ve işlem kontrolü gibi işlevleri yerine getirir.

Yan cihaz (Slave), Modbus protokolünü destekleyen ve ana cihaza (Master) bağlı olan bir cihaz veya sistemdir. Yan cihazlar, ana cihazın taleplerine yanıt verir ve veri alışverişi yapar. Yan cihazlar genellikle sensörler, aktüatörler, kontrol cihazları veya diğer otomasyon cihazları olabilir.

Yan cihazların temel görevleri şunlardır:

  1. Veri Sağlama: Yan cihazlar, ana cihazın veri taleplerine yanıt olarak belirli verileri sağlar. Örneğin, bir sensörün ölçüm değerleri veya bir cihazın durumu gibi veriler yan cihaz tarafından ana cihaza iletilir.
  2. Komut Alma ve Yürütme: Ana cihaz, yan cihazlara komutlar gönderebilir. Yan cihazlar bu komutları alır ve ilgili işlemleri gerçekleştirir. Örneğin, bir aktüatörü belirli bir konuma getirme veya bir cihazı etkinleştirme gibi komutları yerine getirebilir.
  3. İşlem Yanıtı: Yan cihazlar, ana cihazın veri taleplerine uygun yanıtlar gönderir. Bu yanıtlar, talep edilen verilerin yanı sıra işlem sonucunu da içerebilir. Yan cihazlar, taleplere mümkün olan en kısa sürede yanıt vermelidir.
  4. Veri Tutma: Yan cihazlar, Modbus protokolünde kullanılan veri tutanakları (register) veya bobinlerde (coil) veri saklarlar. Bu veri tutanakları, yan cihazın ölçüm verilerini, parametrelerini veya diğer bilgilerini içerebilir. Ana cihaz, belirli bir yan cihazın veri tutanaklarına okuma veya yazma işlemleri yapabilir.

Yan cihazlar, ana cihazla Modbus protokolü üzerinden haberleşirler. Her yan cihazın bir benzersiz adresi vardır ve ana cihaz, belirli bir yan cihaza erişmek için bu adresi kullanır. Yan cihazlar, ana cihazın taleplerini işleyerek veri sağlar, komutları yürütür ve yanıtlarını gönderirler.

Modbus protokolünde birden fazla yan cihaz olabilir ve ana cihaz, bu cihazlar arasında veri alışverişi yapabilir. Her bir yan cihazın adresiyle belirtilen veri tutanaklarına ve bobinlere erişebilir.

Özetlemek gerekirse, yan cihaz (Slave), Modbus protokolünü destekleyen ve ana cihaza bağlı olan bir cihaz veya sistemdir. Ana cihazın taleplerine yanıt verir, veri sağlar, komutları yürütür ve Modbus protokolü üzerinden ana cihazla iletişim kurar.

Adresleme: Modbus protokolünde, her yan cihazın (Slave) bir benzersiz adresi vardır. Bu adres, yan cihazı diğer cihazlardan ayırt etmek ve ana cihazın (Master) iletişim kurmak istediği yan cihazı belirlemek için kullanılır. Adresleme, ana cihazın belirli bir yan cihaza erişim sağlamasını sağlar.

Modbus protokolünde, yan cihazların iki tür adresleme yöntemi vardır:

  1. İşlemci Tabanlı Adresleme: Bu yöntemde, her yan cihazın benzersiz bir sayısal adresi vardır. Adresler genellikle 1 ila 247 arasında değişir. Ana cihaz, iletişim kurmak istediği yan cihazın adresini belirtir ve iletişim taleplerini bu adrese yönlendirir. İşlemci tabanlı adresleme, özellikle Modbus RTU veya Modbus ASCII gibi seri haberleşme modlarında kullanılır.
  2. IP Adresi Tabanlı Adresleme: Bu yöntem, Modbus TCP/IP üzerinde kullanılır. Yan cihazlar, TCP/IP ağ üzerinde benzersiz bir IP adresine sahiptir. Ana cihaz, iletişim kurmak istediği yan cihazın IP adresini kullanır ve TCP/IP üzerinden doğrudan iletişim sağlar.

Ana cihaz, belirli bir yan cihaza erişmek için doğru adresi kullanır. Örneğin, bir veri tutanağına (register) erişmek için belirli bir sayısal adres kullanılır. Bu adresler, veri tutanaklarının bellek bölgelerini belirtir. Her bir veri tutanağına, bir sayısal adresle erişim yapılabilir ve bu tutanağın içeriği okunabilir veya yazılabilir.

Modbus protokolünde, işlev kodları (function codes) kullanılarak belirli işlemler gerçekleştirilir. İşlev kodları, ana cihazın yan cihazlara hangi tür işlemleri gerçekleştirmek istediğini belirtir. Örneğin, bir veri tutanağını okumak veya yazmak, bobin durumunu değiştirmek, diğer cihazlara komut göndermek gibi işlevler için farklı işlev kodları kullanılır.

Adresleme, Modbus protokolünün veri alışverişi ve iletişimini organize etmek için önemli bir bileşendir. Doğru adresleme kullanılarak, ana cihaz belirli bir yan cihazla doğru şekilde iletişim kurabilir ve veri okuma, yazma veya komut gönderme gibi işlemleri gerçekleştirebilir.

Özetlemek gerekirse, Modbus protokolünde yan cihazlar benzersiz adreslere sahiptir. Ana cihaz, iletişim kurmak istediği yan cihaza doğru adresi kullanarak erişir. Adresleme, veri tutanaklarına, bobinlere ve diğer bellek bölgelerine erişim sağlar. İşlev kodları, belirli işlemleri gerçekleştirmek için kullanılır ve yan cihazların taleplere doğru şekilde yanıt vermesini sağlar.

Register: Modbus protokolünde, register (veri tutanağı), 16 bitlik bir bellek alanını temsil eder. Bu bellek alanı, yan cihazlarda verilerin depolandığı veya iletilen özel bir bellek bölgesidir. Registerlar, genellikle ölçüm verileri, parametreler, kontrol değerleri ve diğer türde verileri içerebilir.

Registerlar, sayısal verilerin saklandığı ve işlendiği alanlardır. 16 bitlik iki baytı temsil ederler. Bu, her registerin 0 ile 65535 arasında değerler alabileceği anlamına gelir. Registerlar, tamsayılar, kayan noktalı sayılar veya diğer sayısal formatlarda verileri saklayabilir.

Modbus protokolünde, registerlara erişim için sayısal adresler kullanılır. Her register, bir benzersiz sayısal adresle belirtilir. Bu sayısal adresler, veri tutanaklarının (holding registers) veya giriş tutanaklarının (input registers) adresleme bölgesinde bulunabilir.

  1. Holding Registers (Veri Tutanağı): Holding registerlar, yan cihazlarda verilerin depolandığı alanlardır. Genellikle ölçüm verileri, kontrol parametreleri ve ayarlar gibi verileri içerir. Ana cihaz, holding registerlara okuma veya yazma işlemleri yapabilir. Holding registerları okuyarak yan cihazlardan veri alabilir veya yazarak bu cihazlara veri gönderebilir.
  2. Input Registers (Giriş Tutanağı): Input registerlar, yan cihazların dışarıya doğru veri ilettiği alanlardır. Bu registerlarda genellikle sensörlerin ölçüm verileri veya diğer giriş değerleri saklanır. Ana cihaz, input registerlardan veri okuyarak yan cihazların ölçüm veya durum bilgilerini alabilir.

Registerlar, ana cihazın belirli bir yan cihazın belirli bir veri tutanağına erişmesini sağlar. Ana cihaz, veri okuma veya yazma işlemlerini gerçekleştirmek için ilgili veri tutanağının adresini belirtir ve bu adres üzerinden iletişim kurar. Yan cihaz, taleplere uygun şekilde veri sağlar veya alır.

Modbus protokolünde, farklı işlev kodları kullanılarak registerlara erişim sağlanır. İşlev kodları, belirli bir registerı okuma, yazma veya diğer işlemleri gerçekleştirme amacını belirtir.

Özetlemek gerekirse, registerlar (veri tutanağı), 16 bitlik bellek alanlarıdır ve yan cihazlarda verilerin saklandığı veya iletilen özel bir bellek bölgesidir. Holding registerlar, veri depolama ve kontrol amaçlı kullanılırken, input registerlar yan cihazların veri iletimi için kullanılır. Registerlara sayısal adreslerle erişilir ve ana cihaz, belirli registerlara okuma, yazma ve diğer işlemler yapabilir.

Coil: Modbus protokolünde, coil (bobin), dijital verileri temsil eden bellek bölgeleridir. Coil’ler genellikle açık veya kapalı durumu ifade eder. İki durum arasında geçiş yapabilen veya bir durumu koruyan anahtarlar veya kontrol elemanları olarak düşünülebilir.

Coil’ler, yan cihazlarda belirli bir işlemin durumunu veya kontrolünü sağlamak için kullanılır. Modbus protokolünde iki tür coil vardır: discrete outputs (DO) ve discrete inputs (DI).

  1. Discrete Outputs (DO): Discrete output coil’ler, yan cihazlarda kontrol çıkışlarını temsil eder. DO coil’ler genellikle aktüatörleri, röleleri veya diğer kontrol elemanlarını kontrol etmek için kullanılır. Ana cihaz, DO coil’lerin durumunu değiştirebilir ve bu şekilde yan cihazlardaki ilgili kontrol elemanlarını etkinleştirebilir veya devre dışı bırakabilir.
  2. Discrete Inputs (DI): Discrete input coil’ler, yan cihazlarda dijital giriş durumlarını temsil eder. DI coil’ler genellikle sensörlerin durumunu, anahtarların durumunu veya diğer giriş sinyallerini yansıtır. Ana cihaz, DI coil’lerin durumunu okuyarak yan cihazlardaki dijital giriş durumunu izleyebilir.

Coil’ler de registerlar gibi sayısal adresleme kullanır. Her coil, bir benzersiz sayısal adrese sahiptir ve ana cihaz, belirli bir coil’e erişmek için bu adresi kullanır. Ana cihaz, coil’lerin durumunu okuyabilir veya değiştirebilir.

Coil’lerin durumu, açık (ON) veya kapalı (OFF) olabilir. Bu durumlar genellikle “1” ve “0” olarak temsil edilir. Ana cihaz, yan cihazlardaki coil’lerin durumunu okuyarak sistemin kontrolünü sağlayabilir veya yan cihazlara belirli bir durumu uygulayabilir.

Coil’ler, genellikle sinyal veya kontrol işlevleriyle ilişkilendirilir. Örneğin, bir DO coil, bir lambanın açık veya kapalı olmasını kontrol edebilir veya bir DI coil, bir düğmenin basılı olup olmadığını belirleyebilir.

Özetlemek gerekirse, coil’ler (bobinler), Modbus protokolünde dijital verileri temsil eden bellek bölgeleridir. Discrete output coil’ler (DO), kontrol çıkışlarını temsil ederken, discrete input coil’ler (DI), dijital giriş durumlarını temsil eder. Ana cihaz, coil’lerin durumunu okuyabilir veya değiştirebilir, böylece yan cihazlardaki kontrol elemanlarını etkinleştirebilir veya giriş durumunu izleyebilir. Sayısal adresleme kullanılarak belirli coil’lere erişim sağlanır ve durumları açık veya kapalı olarak temsil edilir.

Fonksiyon: Modbus protokolünde, “fonksiyon” veya “işlev” (function) kavramı, ana cihazın (Master) yan cihaza (Slave) gönderdiği bir işlem veya talebi temsil eder. Ana cihaz, belirli bir işlemi gerçekleştirmek veya yan cihazdan belirli bir bilgiyi almak için farklı fonksiyon kodlarını kullanır.

  1. Read Coils (Fonksiyon Kodu: 01): Bu fonksiyon, ana cihazın yan cihazdaki coil’lerin durumunu (ON/OFF) okumasını sağlar. Ana cihaz, belirli bir coil adres aralığındaki durumları yanıt olarak alır. Örneğin, bir anahtarın veya bir cihazın açık/kapalı durumunu kontrol etmek için kullanılır.
  2. Read Discrete Inputs (Fonksiyon Kodu: 02): Bu fonksiyon, ana cihazın yan cihazdaki discrete input coil’lerin durumunu okumasını sağlar. Yan cihaz, belirli bir discrete input coil adres aralığındaki durumları yanıt olarak gönderir. Örneğin, bir sensörün tetikleme durumunu veya bir düğmenin basılı olup olmadığını kontrol etmek için kullanılır.
  3. Read Holding Registers (Fonksiyon Kodu: 03): Bu fonksiyon, ana cihazın yan cihazdaki holding register’ların içeriğini okumasını sağlar. Yan cihaz, belirli bir holding register adres aralığındaki verileri yanıt olarak gönderir. Holding register’lar, ölçüm verileri, parametreler, kontrol değerleri ve diğer türde verileri saklar. Bu fonksiyon, yan cihazlardaki verilere erişim için sıkça kullanılır.
  4. Read Input Registers (Fonksiyon Kodu: 04): Bu fonksiyon, ana cihazın yan cihazdaki input register’ların içeriğini okumasını sağlar. Yan cihaz, belirli bir input register adres aralığındaki verileri yanıt olarak gönderir. Input register’lar genellikle sensör verileri veya diğer giriş değerleri gibi yan cihazlardan alınan bilgileri içerir. Bu fonksiyon, yan cihazların ölçüm veya giriş verilerine erişmek için kullanılır.
  5. Write Single Coil (Fonksiyon Kodu: 05): Bu fonksiyon, ana cihazın belirli bir coil’ün durumunu değiştirmesini sağlar. Ana cihaz, belirli bir coil adresine yazma talebi gönderir ve bu sayede yan cihazdaki kontrol elemanlarının açık veya kapalı durumunu değiştirebilir. Örneğin, bir lambayı açma veya kapama komutu vermek için kullanılır.
  6. Write Single Register (Fonksiyon Kodu: 06): Bu fonksiyon, ana cihazın belirli bir register’ın içeriğini değiştirmesini sağlar. Ana cihaz, belirli bir register adresine yazma talebi gönderir ve bu sayede yan cihazdaki parametreleri, kontrol değerlerini veya diğer verileri güncelleyebilir. Örneğin, bir sıcaklık ayarını değiştirme veya bir motor hızını ayarlama komutu için kullanılır.
  7. Read/Write Multiple Registers (Fonksiyon Kodu: 16): Bu fonksiyon, ana cihazın yan cihazdaki birden çok register’ın içeriğini hem okumasını hem de yazmasını sağlar. Ana cihaz, belirli bir register adres aralığındaki verileri okuyabilir veya bu adres aralığındaki verilere yazma işlemi yapabilir. Bu fonksiyon, birden fazla register üzerinde toplu işlem yapmak için kullanılır.
  8. Mask Write Register (Fonksiyon Kodu: 22): Bu fonksiyon, ana cihazın belirli bir register’ın içeriğini belirli bir maskeyle değiştirmesini sağlar. Ana cihaz, belirli bir register adresine yazma talebi gönderir ve bu register’da sadece belirli bitlerin değiştirilmesine izin verir. Bu fonksiyon, belirli bitlerin güncellenmesi gereken durumlarda kullanılabilir.
  9. Read/Write Multiple Coils (Fonksiyon Kodu: 23): Bu fonksiyon, ana cihazın yan cihazdaki birden çok coil’in durumunu hem okumasını hem de yazmasını sağlar. Ana cihaz, belirli bir coil adres aralığındaki durumları okuyabilir veya bu adres aralığındaki coil’lerin durumunu değiştirebilir. Bu fonksiyon, birden fazla coil üzerinde toplu işlem yapmak için kullanılır.
  10. Report Slave ID (Fonksiyon Kodu: 17): Bu fonksiyon, ana cihazın yan cihazın kimlik bilgisini (Slave ID) almasını sağlar. Yan cihaz, kendi kimlik bilgisini yanıt olarak gönderir. Bu fonksiyon, yan cihazın kimlik doğrulaması veya tanımlama için kullanılabilir.
  11. Diagnostic Functions (Fonksiyon Kodu: 08-11): Bu fonksiyonlar, Modbus protokolündeki hata teşhisi ve sorun giderme işlemleri için kullanılır. Ana cihaz, belirli bir diagnostic fonksiyon kodunu kullanarak yan cihazdan hata kodları veya diğer hata bilgilerini alabilir veya yan cihazdaki hata durumunu sıfırlayabilir. Bu fonksiyonlar, ağ sorunlarını teşhis etmek veya iletişim hatalarını gidermek için kullanılabilir.

Veri Türleri:

Modbus protokolünde kullanılan standart veri türleri, verilerin doğru şekilde temsil edilmesi ve iletilmesi için belirli formatlarda tanımlanmıştır. İşte Modbus protokolünde yaygın olarak kullanılan standart veri türlerinin bazı örnekleri:

  1. 16-bit İkilik Tamsayı (Integer): 16-bit ikilik tamsayılar, genellikle veri tutanakları (holding registers) veya giriş tutanaklarında (input registers) kullanılır. Bu tür, genellikle ölçüm verileri, sayaç değerleri veya diğer tamsayı verilerini temsil etmek için kullanılır.
  2. 16-bit İkilik Kayan Noktalı (Floating Point): 16-bit ikilik kayan noktalı sayılar, genellikle veri tutanaklarında (holding registers) kullanılır. Bu tür, hassas kayan noktalı sayıları temsil etmek için kullanılır. Özellikle ölçüm verilerinin kesirli veya ondalık değerlerini ifade etmek için kullanışlıdır.
  3. 32-bit İkilik Tamsayı (Long Integer): 32-bit ikilik tamsayılar, genellikle geniş veri tutanaklarında (holding registers) veya giriş tutanaklarında (input registers) kullanılır. Bu tür, daha büyük tamsayı değerlerini veya ölçüm verilerini temsil etmek için kullanılır.
  4. 32-bit İkilik Kayan Noktalı (Long Floating Point): 32-bit ikilik kayan noktalı sayılar, genellikle geniş veri tutanaklarında (holding registers) kullanılır. Bu tür, daha büyük veya hassas kayan noktalı sayıları temsil etmek için kullanılır.
  5. Boolean (Logic): Boolean veri türü, genellikle coil’lerde kullanılır. Bu tür, açık (1) veya kapalı (0) durumları temsil etmek için kullanılır. Boolean veriler, dijital giriş veya çıkış durumlarını ifade etmek için kullanılır.

Float’a Özel Durum:

Float32 (32 bit) değerler bellekte IEEE 754 standardına göre tutulur. IEEE 754, kayan noktalı sayıları temsil etmek için kullanılan bir standarttır ve birçok programlama dilinde kayan noktalı veri tipleri bu standarta uygundur.

Float32 veri tipi bellekte 32 bit (4 byte) alan kaplar. Bu 32 bit, belirli bir düzende (bit sıralaması) aşağıdaki gibi kullanılır:

  • İşaret Biti (1 bit): İşaret biti, pozitif veya negatif değeri temsil eder. 0 pozitif, 1 negatif anlamına gelir.
  • Kuvvet Bölümü (8 bit): 8 bitlik kuvvet bölümü, kayan noktalı sayının üssünü temsil eder. Bu bölüm, iki’li tabanda kaydedilen bir tamsayıdır. Bias değeri olarak adlandırılan bir sabit eklenerek gerçek üs değeri elde edilir.
  • Kesirli Bölüm (23 bit): 23 bitlik kesirli bölüm, kayan noktalı sayının kesirli kısmını temsil eder. Bu bölüm, kayan noktalı sayının kesirli kısmının binary ondalık (binary fractional) formunu ifade eder.
#örnek float32 dönüşümü
import struct
word1 = 0x4145
word2 = 0x70A4
integer_value = (word1 << 16) | word2
float_value = struct.unpack('f', struct.pack('I', integer_value))[0]
print(float_value)

Örnek Python Modbus Haberleşme Kodu:

#server.py
from pymodbus.server.sync import StartTcpServer
from pymodbus.datastore import ModbusSequentialDataBlock
from pymodbus.datastore import ModbusSlaveContext, ModbusServerContext

# Modbus sunucusu ayarları
HOST = '127.0.0.1'  # Sunucunun IP adresi
PORT = 502         # Modbus TCP port numarası

def run_modbus_server():
    # Veri depolama alanını oluşturun
    store = ModbusSlaveContext(
        di=ModbusSequentialDataBlock(0, [0]*100),   # Discrete Inputs
        co=ModbusSequentialDataBlock(0, [0]*100),   # Coils
        hr=ModbusSequentialDataBlock(0, [0]*100),   # Holding Registers
        ir=ModbusSequentialDataBlock(0, [0]*100))   # Input Registers

    # Sunucu bağlamasını oluşturun
    context = ModbusServerContext(slaves=store, single=True)

    # Modbus TCP sunucusunu başlatın
    server = StartTcpServer(context, address=(HOST, PORT))
    server.serve_forever()

# Modbus sunucusunu çalıştırın
run_modbus_server()

#client.py
from pymodbus.client.sync import ModbusTcpClient

# Modbus sunucusu ayarları
HOST = '127.0.0.1'  # Sunucunun IP adresi
PORT = 502         # Modbus TCP port numarası

def read_modbus_data():
    # Modbus TCP istemcisini oluşturun
    client = ModbusTcpClient(HOST, PORT)

    try:
        # Sunucuya bağlanın
        client.connect()

        # Holding Register adresinden başlayarak 10 adet veri okuyun
        response = client.read_holding_registers(address=0, count=10, unit=0x01)
        
        # Okunan verileri yazdırın
        if response.isError():
            print("Hata:", response)
        else:
            print("Okunan Veriler:", response.registers)

    except Exception as e:
        print("Hata:", str(e))

    finally:
        # İstemci bağlantısını kapatın
        client.close()

# Modbus verilerini okuyun
read_modbus_data()

PDU Adresi

PDU (Protocol Data Unit), Modbus protokolünde veri alışverişinin gerçekleştiği iletişim katmanının bir parçasıdır. Modbus protokolünde, PDU adresi, iletişimde yer alan yan cihazların tanımlanması için kullanılır.

Modbus protokolünde, PDU adresi iki farklı durumda kullanılır:

  1. Modbus RTU ve Modbus ASCII Modları: Modbus RTU ve Modbus ASCII modlarında, PDU adresi genellikle 1’den başlar ve 247’ye kadar olan değerleri alabilir. Adres 0, genellikle broadcast adresi olarak kullanılır ve tüm yan cihazlara yönelik yayın iletişimini ifade eder. Adres 1’den 247’ye kadar olan aralık, yan cihazların benzersiz adreslerini temsil eder.
  2. Modbus TCP Modu: Modbus TCP modunda, PDU adresi kullanılmaz. Modbus TCP, IP adresi ve port numarası üzerinden iletişim kurar. Her bir yan cihaz, IP adresi ve Modbus TCP port numarasıyla tanımlanır. Bu nedenle, Modbus TCP modunda PDU adresi 0 olarak kabul edilir.

Yani, PDU adresinin 0’dan başlaması, Modbus RTU ve Modbus ASCII modlarındaki broadcast adresini temsil ederken, PDU adresinin 1’den başlaması, Modbus RTU ve Modbus ASCII modlarında yan cihazların benzersiz adreslerini temsil eder.

Modbus protokolünde, kullanılan PDU adresleri yan cihazların yapılandırmasına ve sistem gereksinimlerine bağlı olarak değişebilir. Örneğin, bazı yan cihazlar özel olarak yapılandırılabilir ve farklı PDU adreslerini destekleyebilir. Bu nedenle, belirli bir uygulama veya cihaz için kullanılan PDU adreslerini belirlemek için ilgili dokümantasyona başvurmanız önemlidir.

Paket Yapıları

Modbus protokolünde, gelen ve giden paketlerin yapıları farklıdır. Modbus RTU, Modbus ASCII ve Modbus TCP olmak üzere üç farklı iletişim modu bulunmaktadır ve her birinin kendi paket yapısı vardır. İşte bu üç iletişim modu için gelen ve giden paket yapılarının detayları:

  1. Modbus RTU Paket Yapısı: Modbus RTU, seri haberleşme protokolüdür ve genellikle RS-485 gibi fiziksel hatlarda kullanılır. Gelen ve giden paket yapısı aşağıdaki gibidir:
  • Giden Paket:
    • Başlangıç İşareti (Start Bit): 1 bit
    • Adres: 8 bit (yan cihazın adresi)
    • Fonksiyon Kodu: 8 bit
    • Veri: Değişken uzunlukta (16-bit veya 32-bit)
    • CRC (Döngüsel Redundansi Kontrolü): 16 bit
    • Bit Bitiş İşareti (Stop Bit): 1 bit
  • Gelen Paket:
    • Başlangıç İşareti (Start Bit): 1 bit
    • Adres: 8 bit (yan cihazın adresi)
    • Veri: Değişken uzunlukta (16-bit veya 32-bit)
    • CRC (Döngüsel Redundansi Kontrolü): 16 bit
    • Bit Bitiş İşareti (Stop Bit): 1 bit
  1. Modbus ASCII Paket Yapısı: Modbus ASCII, seri haberleşme protokolüdür ve karakter tabanlıdır. Gelen ve giden paket yapısı aşağıdaki gibidir:
  • Giden Paket:
    • İşaret Karakteri: 1 karakter (:)
    • Adres: 2 karakter (yan cihazın adresi)
    • Fonksiyon Kodu: 2 karakter
    • Veri: Değişken uzunlukta (16-bit veya 32-bit)
    • LRC (Longitudinal Redundancy Check): 2 karakter
    • Karakter Bitiş İşareti (End of Transmission): 2 karakter (CR-LF)
  • Gelen Paket:
    • İşaret Karakteri: 1 karakter (:)
    • Adres: 2 karakter (yan cihazın adresi)
    • Veri: Değişken uzunlukta (16-bit veya 32-bit)
    • LRC (Longitudinal Redundancy Check): 2 karakter
    • Karakter Bitiş İşareti (End of Transmission): 2 karakter (CR-LF)
  1. Modbus TCP Paket Yapısı: Modbus TCP, Ethernet üzerinde kullanılan TCP/IP tabanlı protokoldür. Gelen ve giden paket yapısı aşağıdaki gibidir:
  • Giden Paket:
    • Başlık (Header): TCP/IP başlığı (IP adresleri, port numarası vb.)
    • Transaction Identifier: 2 byte
    • Protocol Identifier: 2 byte
    • Length: 2 byte
    • Unit Identifier: 1 byte (yan cihazın adresi)
    • Fonksiyon Kodu: 1 byte
    • Veri: Değişken uzunlukta (16-bit veya 32-bit)
  • Gelen Paket:
    • Başlık (Header): TCP/IP başlığı (IP adresleri, port numarası vb.)
    • Transaction Identifier: 2 byte
    • Protocol Identifier: 2 byte
    • Length: 2 byte
    • Unit Identifier: 1 byte (yan cihazın adresi)
    • Fonksiyon Kodu: 1 byte
    • Veri: Değişken uzunlukta (16-bit veya 32-bit)

Bu paket yapıları, Modbus RTU, Modbus ASCII ve Modbus TCP iletişim modlarına göre gelen ve giden paketlerin nasıl yapılandırıldığını göstermektedir. Her bir iletişim modunun kendi paket yapısı olduğu için, uygun paket yapısını kullanmanız ve protokolün gereksinimlerine uygun şekilde iletişim sağlamanız önemlidir.

CRC

CRC (Cyclic Redundancy Check), veri bütünlüğünün kontrol edilmesi için kullanılan bir hata algılama yöntemidir. Modbus protokolü de CRC yöntemini kullanarak paketlerin doğruluğunu kontrol eder.

CRC, verilerin üzerine eklenen bir kontrol toplamıdır. Verinin tüm bitleri üzerinde matematiksel işlemler uygulanarak bir kontrol değeri hesaplanır. Alıcı taraf, veriyi alırken aynı matematiksel işlemleri uygulayarak kontrol değerini hesaplar ve gönderilen kontrol değeri ile karşılaştırır. Eğer hesaplanan kontrol değeri ile gönderilen kontrol değeri uyuşmuyorsa, veride hata olduğu anlaşılır.

CRC işlemi, veri bitlerini bir polinom üzerinde işleyerek gerçekleştirilir. Modbus protokolünde kullanılan CRC-16 yöntemi, 16-bit bir polinom kullanır. Verinin üzerine eklenen CRC, verinin ve polinomun özel bir şekilde işlenmesi sonucu elde edilir.

Modbus RTU ve Modbus ASCII modlarındaki paketlerde CRC, paketin sonunda yer alır ve gönderen cihaz tarafından hesaplanarak eklenir. Alıcı cihaz, CRC kontrolünü yaparken paketin sonundaki CRC değerini kullanır. CRC değeri ile paket içerisindeki veri uyuşmazsa, hata algılanmış olur.

Modbus TCP modunda ise CRC kullanılmaz. TCP/IP protokolü zaten veri bütünlüğünü sağlamak için kendi hata kontrol mekanizmalarını kullanır.

CRC, hata algılama için etkili bir yöntemdir. Ancak, CRC yalnızca hataları algılar ve düzeltmez. Hata tespiti için kullanılır ve hataların tespit edildiği durumda gerekli önlemlerin alınması sağlanır.

CRC, Modbus protokolünde veri bütünlüğünü sağlamak ve güvenilir iletişim sağlamak için önemli bir bileşendir.

def calculate_crc(data):
    crc = 0xFFFF
    for byte in data:
        crc ^= byte
        for _ in range(8):
            if crc & 0x0001:
                crc = (crc >> 1) ^ 0xA001
            else:
                crc >>= 1
    return crc.to_bytes(2, byteorder='little')

# Örnek veri
data = b'\x01\x04\x00\x13\x00\x02'

# CRC hesaplamasını yap
crc = calculate_crc(data)

# CRC değerini yazdır
print("CRC: ", crc.hex())

LRC

LRC (Longitudinal Redundancy Check), verilerin hatalarını algılamak için kullanılan basit bir hata tespit yöntemidir. LRC, verinin her bir byte’ını toplar ve sonucun modunu alır. Elde edilen bu değer, verinin sonuna eklenir veya ayrı bir alanda saklanır.

LRC hesaplaması için her bir byte üzerinde bitwise XOR işlemi uygulanır. Örneğin, verideki tüm byte’ları XOR’lamak için aşağıdaki adımlar izlenir:

  1. LRC değeri başlangıçta 0 olarak ayarlanır.
  2. Verinin her bir byte’ı için LRC değeri ile byte arasında bitwise XOR işlemi uygulanır.
  3. LRC değeri, her bir byte için XOR işlemi sonucu ile güncellenir.
  4. Sonuç olarak elde edilen LRC değeri, verinin sonuna eklenir veya ayrı bir alanda saklanır.

LRC, verinin hatalarını algılamak için kullanılır. Veri iletilirken veya depolanırken meydana gelebilecek tek hata, LRC hesaplamasını etkileyebilir. Veri alıcısı, LRC değerini hesaplar ve alınan verinin sonunda bulunan LRC değeri ile hesapladığı LRC değerini karşılaştırır. Eğer iki LRC değeri eşleşmiyorsa, bir hata olduğu ve verinin bozulduğu anlaşılır.

LRC, basit bir hata tespit yöntemi olduğu için daha güçlü hata tespit algoritmaları, örneğin CRC veya daha karmaşık hash fonksiyonları tercih edilebilir. Ancak, LRC, bazı uygulamalarda hızlı ve basit bir hata tespit mekanizması olarak kullanılabilir.

def calculate_lrc(data):
    lrc = 0
    for byte in data:
        lrc ^= byte
    return lrc

# Örnek veri
data = b'\x01\x02\x03\x04'

# LRC hesaplamasını yap
lrc = calculate_lrc(data)

# LRC değerini yazdır
print("LRC: ", hex(lrc))

Endian

Endian, bellekte veya veri akışında çok byte’lık veri öğelerinin sıralanma düzenini belirleyen bir kavramdır. İki farklı endian türü vardır: Big-Endian ve Little-Endian.

  • Big-Endian: Big-Endian, en yüksek anlamlı byte’ın (MSB – Most Significant Byte) en düşük bellek adresinde olduğu sıralama düzenidir. Örneğin, 32 bit bir veri 0x12345678 olarak temsil edildiğinde, bellekte sıralama şu şekilde olur:
Adres:   0     1     2     3
Bellek:  12    34    56    78

Little-Endian: Little-Endian, en düşük anlamlı byte’ın (LSB – Least Significant Byte) en düşük bellek adresinde olduğu sıralama düzenidir. Yine 32 bit bir veri 0x12345678 olarak temsil edildiğinde, bellekte sıralama şu şekilde olur:

Adres:   0     1     2     3
Bellek:  78    56    34    12

Endian farkı, verilerin bellekte veya veri akışında doğru şekilde yorumlanabilmesi için önemlidir. Eğer iki farklı sistem veya protokol arasında veri paylaşılıyorsa, doğru endian formatına dikkat etmek gerekmektedir. Aksi takdirde, veri yanlış yorumlanabilir ve hatalı sonuçlar elde edilebilir.

Özellikle network iletişimi gibi durumlarda, protokollerin belirlediği endian formatına uymak önemlidir. Örneğin, TCP/IP protokolü network byte order olarak Big-Endian’ı kullanır. Bu nedenle, network üzerindeki verileri doğru şekilde yorumlamak için uygun endian formatı kullanılmalıdır.

Endian formatıyla ilgili dikkat edilmesi gereken bir diğer nokta ise veri dönüşümü yaparken uygun endian formatına dikkat etmektir. Veriyi okurken veya yazarken doğru endian formatını kullanarak veri dönüşümü gerçekleştirmek önemlidir.

Genel Özet

  1. Modbus TCP ve Modbus RTU: Modbus protokolü, Modbus TCP ve Modbus RTU olmak üzere iki farklı taşıma mekanizması kullanır. Modbus TCP, TCP/IP üzerinden Ethernet ağı üzerinde çalışırken, Modbus RTU seri haberleşme protokollerinden biridir.
  2. Bağlantı Türleri: Modbus protokolü, master-slave (istemci-sunucu) modeline dayanır. Modbus TCP’de, TCP/IP bağlantısı kullanılarak istemci-sunucu modeli gerçekleştirilir. Modbus RTU’da ise seri haberleşme protokolü üzerinden master-slave bağlantısı kurulur.
  3. Veri Yapıları: Modbus, birçok veri tipini destekler. Bunlar arasında bit (coil), register, input register, holding register gibi veri yapıları bulunur. Bu veri yapıları farklı tipteki veri öğelerini temsil eder ve Modbus cihazlarında okunabilir veya yazılabilir.
  4. Adresleme: Modbus protokolünde, veri erişimi için adresleme kullanılır. Modbus RTU’da cihazlara 1’den 247’ye kadar benzersiz bir adres atanırken, Modbus TCP’de IP adresleri ve port numaraları kullanılır.
  5. Modbus İletişim Hızları: Modbus, farklı iletişim hızlarına izin verir. Modbus RTU’da genellikle 9600 bps, 19200 bps, 38400 bps gibi hızlar kullanılırken, Modbus TCP’de genellikle Ethernet’in desteklediği hızlar kullanılır.
  6. Veri Paketi Yapısı: Modbus veri paketleri, başlık (header), fonksiyon kodu, veri alanı ve CRC gibi bölümlerden oluşur. Başlık bölümünde cihaz adresi, fonksiyon kodu belirtilirken, veri alanı bölümünde okunacak veya yazılacak veriler bulunur. CRC, veri bütünlüğünün kontrol edilmesi için kullanılır.
  7. Modbus Hata Kodları: Modbus protokolü, iletişim sırasında hataları belirtmek için hata kodları kullanır. Örneğin, “Illegal Function” (Geçersiz Fonksiyon) veya “Slave Device Failure” (Slave Cihaz Hatası) gibi hata kodları, hataların tespit edilmesine yardımcı olur.

Bu detaylar, Modbus protokolünün genel yapılarına ve özelliklerine yönelik bazı bilgilerdir. Her Modbus uygulaması veya cihazı belirli bir Modbus standardına ve cihazın spesifikasyonlarına uymaktadır. Dolayısıyla, gerçek bir uygulama veya cihazla çalışırken, ilgili belgelere ve spesifikasyonlara başvurmanız önemlidir.

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Scroll to Top