Discrete Inputs etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Discrete Inputs etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

2 Temmuz 2013 Salı

Modbus İşlemleri " Functions "



Modbus   “Functions ” nedir.


Modbus işlemleri functions olarak bilinir.Bir function veri tablo adresine oku yada yaz komutudur.Fonksiyonlar 1,2,3,4 vs olarak numaralandırılır.
Örneğin function “1” bir ya da daha fazla “ coil “okur.
Function “15” bir veya daha fazla “coil” e yazar.
Tüm fonsiyon kodları ( Function Codes ) Modbus Standart’ının bir parçası olarak tanımlanmıştır.ancak hangi fonksiyon un bir cihazda gerçeklendiği cihaz tasarımcısına bağlıdır.Örneğin bir Vana bank’ı sadece coil yazma fonksiyonlarını yerine getiriyor olabilir çünkü o cihaz için gerekli olan sadece bu olabilir.

Aşağıda bazı ortak fonksiyonlar ( Common Functions ) listelenmiştir.Modbus protokolünde bir çok fonksiyon vardır ancak en çok karşılaşılan aşağıdakilerdir.
  • 1 -  Read multiple coils.
  • 2 -  Read multiple discrete inputs.
  • 3 -  Read multiple holding registers.
  • 4 -  Read multiple input registers.
  • 5 -  Write single coil.
  • 6 -  Write single holding register.
  • 15 - Write multiple coils.
  • 16 - Write multiple holding registers.

Quantity: ( Miktar )

Çoklu Okuma veya yazma yapan Modbus fonksiyonları için bir miktar parametresi gereklidir.Bu miktar parametresi kaç adet ardışık adresin okunup yazılacağını tayin eder.

Tek Seferde Okunup yazılabilecek Adres sayısı :

Modbus protokolü tek seferde kaç adet adresin okunup yazılabileceğini tanımlamıştır.
Bu tek komut ile transfer edilecek datayı 255 byte ile sınırlandırır.
Oku komutu için limit 2000 coil veya Discrete Input yada 125 Register dır.
Yaz komutu için limit 1968 coil,123 Register ‘dır.

Modbus Adresleri ile ilgili bazı yanlış kavramlar



Modbus Adresleri ile ilgili bazı yanlış kavramlar





Modbus standartlarına göre adresler değişik kapsamda  adreslerden oluşan coils,holding register vs olarak tanımlanan 0 dan 65,535 e kadar tamsayılardır.Buna rağmen bazı imalatçılar donanımlarında Modbus
adreslerinin gerçekte bir parçası olmayan adres ön ekleri kulanmaktadır.Bunun kaynağı Modbus Protokolü kullanan bazı PLC lerde aynı zamanda iç veri tablosunda ön ekler kullanılmasıdır:Bu durum IEC tipi PLC lerde
"I", "Q", "V" vs adres ön eklerinin kullanılması gibidir.

Öte yandan,bu ön ekler dökümantasyon için geçerli olan ancak Modbus Protokolünün gönderdiği mesajların  bir parçası olmayan ön eklerdir (prefix)
Bu ön ekler Modbus standartlarında  bir yerlerde bahsedilmiş şeylerdir.Ancak aşağıdaki örnekler dökümantasyon bazlı eski konvanda tipik kullanımı gösterir
  • 0xxxx - Coils.
  • 1xxxx - Discrete inputs.
  • 3xxxx - Input registers.
  • 4xxxx - Holding registers.
Dikkat edin  2xxxx adres ön eki yoktur.
Sayısal öneklere ek olarak bazı dökümantasyonlarda protokol adreslerine atıfta bulunulur
(0 da başlayan adresler )öte yandan diğer dökümanlar data model adreslerine atıfta bulunur ( 1 de başlayan adresler ). Bu ise ilk Holding Register ‘i 0 ve ya 1 ( 40000 e 40001 ön ek kullanımı ) yapabilir.
Öte yandan bu haberleşme hattı üzerinden Modbus mesajı olarak gideceği anlamını taşımaz.Modbus Protokol mesajı için en düşük adres her zaman “0” dır “1” değildir.
Standart Modbus Protokolünde terimler ve adresler ön ekler ve ofset ler içermez.
Sensör blokları ,vanalar ve diğer cihazlarını imalatçı kendi cihaz kataloğunda farklı şekilde belgelendirmiş olabilir.

Modbus Tablo Adresleri



Modbus Tablo Adresleri

Sistem Veri Tablosu


Modbus data tablo adresleri basit tam sayılardır.Her adres tipi (discrete input,coil,input register,holding register) kendi numaralandırılmış adres setine sahiptir. Örneğin discrete input 42 ile coil 42 ayrı adreslerdir.
Modbus Protokol adresleri ile data model adreslerini birbirinden ayırır.
Protokolde kullanılan adresler 0 dan 65535 e kadar numaralandırılmıştır.Öte yandan imalatçı ( vendor)  dokümantasyonu 1 den başlayıp 65536 ya kadar numaralanmış olabilir.
Bu dokümantasyon protokol adreslerine ( ilk adres 0 olarak ) referans verecektir.
65536 adrese sahip olmak mümkün olmasına rağmen her bir tipe ait adresler gerçekte tek bir özel cihazda gerçeklenir (Sensör bloku,vana bankı,PLC v.s) ve genelde bundan daha azdır.Her bir cihaz tasarımcısının uygulamasını neyin anlamlı kılacağına kendisi karar vermelidir.Bu yüzden bir hafıza haritası “ memory map” sağlayarak yada adres listesi vererek cihazlarındaki adreslerde neyin “gerçeklendiğini” ve her bir birinin ne yaptığını anlatmaları gerekir.

Adres tiplerine bindirme “overlay” yapmakta mümkündür.Yani, aynı fiziki hafıza adresine refere eden birden fazla değişik adres tiplerine sahip cihaz tasarlamak mümkündür.
Örneğin Holding Register 10 ile Input Register 10 ‘u aynı hafıza birimine atamak mümkündür.Bu durumda holding regsiter 10 a yazdığınız değer Input Register 10 da da görünebilecektir.Bu durum Coil ve Discrete Inputs içinde geçerlidir.
Aynı şekilde coils ve discrete inputs register da paket edilebilir.Örneğin coils 0 dan 15 e kadar Holding Register  0’da Coils 16 dan 31 ‘e Holding Register 1 ‘e ve saire.
Bu birden çok coil in  harfler “words” olarak okunması ( veya yazılmasına) müsaade eder.
Data tiplerini ve Coil Paketlerini  register lara  bindirmek mümkün olsada pratikte pek rastlanan bir durum değildir.