4 Nisan 2012 Çarşamba

Modbus Nasıl Çalışır ?

Modbus cihazlar arası seri bağlantı üzerinden iletişim kurar.En basit kurgu cihaz seri portlarını bir seri bağlantı kablosu ile Master ve Slave olarak bağlamaktır.

                  >
Veri bit ler olarak adlandırılan sıfır ve birler olarak gönderilir.Her bir bit volt eşiği olarak gönderilir.Sıfırlar poizitf değerli birler ise negatif değerli voltajlar olarak gönderilir.Bit iletim hızı 9600 baud (bits saniyede)dir.
Hexadesimal Nedir?
Problemleri çözerken, iletilen ham verinin ne  olduğunu görmek yardımcı olabilir.Uzun bir ve sıfırlardan oluşan dizileri okumak zordur.Bu yüzden bit'ler birleşrerek hexadesimak olarak gösterilir.Her bir 4 bitden oluşan blok 0 dan F ye kadar Hexadesimal gösterim ile ifade olunur.
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
8 bitden oluşan blok ( byte olarak anılır) ve 256 karakter çifti ile 00 dan FF kadar tanımlanır.
Standart Modbus da Veri Nasıl Saklanır?
Slave cihazda veri dört tabloda saklanır
İki tablo on/off durum değerlerini saklar bunlar "coils" olarak adlandırılır,diğer iki tablo ise sayısal değerleri saklar bunlar ise "register" olarak adlandırılır.
"Coil " ler ve " register " ların her biri   ayrı ayrı " read-only "tablosu ile " read-write " tablosuna sahiptir.
Her tablo 9999 değerliğe sahiptir.
Her "coil" veya "contact"  1 bit olup  0000 ve  270E arasında bir adrese sahiptir.
Her ""register "  1 kelime = 16 bits = 2 bytes olup  0000 ve  270E arasında bir adrese sahiptir.
Coil/Register Sayıları
Data Addresleri
Tip Tablo Adı
1-9999
0000 den 270E
Read-Write Discrete Output Coils
10001-19999
0000 iden 270E
Read-Only Discrete Input Contacts
30001-39999
0000 den 270E Read-Only Analog Input Registers
40001-49999
0000 den 270E Read-Write Analog Output Holding Registers
Coil/Register sayıları yerleşke adları olarak düşünülebilir bu sebeple gerçek mesajlarda yer almazlar.Data (Veri) adresleri mesajlarda yer alır.
Örneğin, ilk "Holding Register," sayı  40001 in, Data Addressi 0000 dir.
Bu değerler arasındaki fark  offset.dir.
Her tablonun farklı bir offseti vardır. 1, 10001, 30001 and 40001.
Slave ID Nedir ?
Her slave network üzerinde kendine ait olan ve 1 ile 247 arasında değişen adres numarasına sahiptir.Master data(veri) talebinde bulununca, ilk gönderilen "byte"  Slave 'in addres bilgisidir. bu şekilde her slave ilk byte dan sonra  mesajı gözardı edip etmeyeceğini anlar.
Function code nedir ?
 Master tarafından gönderilen ikinci byte "Function code " dur. Bu sayı " slave" e hangi tabloya erişip ondan okuyacağı (Read) veya yazacağı (Write) bilgisini verir.
Function Code Action Tablo Adı
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 Nedir ?
CRC açılımı Cyclic Redundancy Check dir.  İki byte dan oluşur ve her Modbus mesajının ardına bir hata algılayıcı (Error Detection) olarak eklenir.Mesajdaki her byte CRC yi hesplamak için kullanılır. Alıcı cihaz da CRC  yi hesaplar ve gönderici cihazdan gelen CRC ile kıyaslar. Eğer alınan mesajdaki bir bit bile yanlış alınmış ise CRC ler farklı olacağından HATA oluşur.
Modbus yönergelerinin biçimleri ve yanıtlar nelerdir? Talep ve yanıtları ( Request and responses )
Data Addresses 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
Data tipleri nelerdir?
FC03 örneği  register 40108 in  AE41 i içerdiğini gösterir
16 bit e çevrimi ise  1010 1110 0100 0001
Tamam ama anlamı ne bunun bir kaç anlamı olabilir
Register 40108  aşağıdaki  16-bit data tiplerinden birini ifade edebilir.
      16-bit unsigned integer ( 0 ve  65535  arası bir tam sayı)
                    register 40108  in içeriği AE41 = 44,609 (hex den decimal e çevrim)
     16-bit signed integer ( -32768 ve 32767 arası bir tam sayı)
                                                        AE41 = -20,927
              (hex den decimal e çevrim çuvallar, eğer 32767 inde ise  65536 yi çıkar)
  ASCII string  2 karakteri (2 harf )
                                                        AE41 = ® A
  discrete on/off değer (16-bit integer gibi değerliği 0 yada 1 gibi çalışır).
                                              Hex data  0000 veya 0001 olur
Register 40108  40109 ile birleşip aşağıdaki 32-bit data tipinden birini oluşturur.
       32-bit unsigned integer ( 0 ve  4,294,967,295 arasında bir tam sayı)
                             40108,40109 = AE41 5652 =  2,923,517,522
     32-bit signed integer ( -2,147,483,648 ve 2,147,483,647 arasında tam bir sayı)
                                                       AE41 5652 = -1,371,449,774
     32-bit double precision IEEE floating point number.
      Bu bir matematik formül olup herhangi bir gerçek sayının (ondalık noktalı sayı) 7 hane duyarlıklı 32 bit
 ifadesini sağlar.
                                                       AE41 5652 = -4.395978 E-11
      Size excel sayfası olarak 4 byte 2 harfden oluşan Input lar için bir tablo IEEE float calculator sağ tıklayıp kayıt edebilirsiniz...
     dört karacter ASCII string (4 harf)
                                                         AE41 5652 = ® A V R
Daha uzun ASCII strings leri için daha çok register birleştirilebilir. Her register iki ASCII Karakterden(2 bayt'dan oluşur).
Bayt (byte) ve (Harf) word sıralaması (ordering) nedir?
Modbus spesifikasyonları data'nın registerlarda nasıl saklandığını tam olarak açıklamaz.Bu yüzden kimi imalatçılar cihazlarında Modbus'ın en önce yüksek Bayt'ı önce düşük bayt'ı sonra kayıt edip iletmesini gerçekleştirdiler (AE sonra 41).
Alternatif olarak, diğerleri ise önce düşük Bayt'ı sonra yüksek Bayt'ı kayıt edip ilettiler (41sonra AE).
Benzeri olarak,  registerlarda 32-bit data tiplerini birleştirmek istendiğinde ortaya çıktı,Bazı cihazlar yüksek 16 bitleri (yüksek harf) i ilk reg  register'da ve geri kalan düşük harfi ikinci registerda kayıt ederken (AE41 sonra  5652) diğerleri tam tersini yaptı (5652 sonra AE41)
Eğer Alıcı Cihaz hangi şekilde kabul edeceğini biliyorsa ne şekilde bitlerin ya da harflerin gönderilmiş olmasının bir önemi yoktur.I
Örneğin  29,235,175,522 sayısı 32 bit unsigned integer olarak gönderilecek ise aşağıdaki dört 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 Slave (Esir) cihazların listesi olup aşağıdaki şeyleri tanımlar
            - Data nedir (Ör. basınç veya sıcaklık okumaları)
            - Data nın nerede kayıt edildiği  (hangi tablo ve data adresleri)
            - Data'nın nasıl kayıt edildiği (data tipleri, bayt ve harf sıralaması)
Bazı cihazlar imalatçı tarafından sabit map cihaz üzerinde yerleşik olarak imal edilmiştir.Diğer cihazlar ise kullanıcı tarafından atanacak şekilde imal edilirler.
Extended register address Nedir?
Analog output tutan registerlar 40001 den 49999 a kadar olduğundan,9999 registerdan fazlası olamaz demektir. Bu çoğu uygulama için yeterli olsada bazı durumlarda daha fazla register olması faydalıdır.
Registerlar 40001 den  49999 e kadar  0000 den 270E e kadar adress tanımlar. kalan adresler olan 270F den FFFF kadar kısmı verimli kılarsak, altı katdan daha fazla  register kullanılabilir olur, toplamda 65536  adet. Bu ise register sayısını 40001 den 105536'ya kadar genişletir.
Çoğu Modbus software driverları (Master PC ler için)  40001 den 49999 kadar sınırlandırılmış olarak sunar bu durumda slave cihazlardaki extended registerlara erişim yapılamaz. Ve çoğu slave cihazda extended regsiterlar kullanan map leri desteklemez. Öte yandan bazı slave cihazlar bu registerları destekler iken bazı master software lerde eğer özel yazılmış ise erişim sağlar.
2-bayt slave adresleme nasıl çalışır?

Tek bayt slave address ini tanımlamak ve her slave için tek ve geçerli addresi atamak için kullanıldığından Network üzerindeki slave adeti 256 ile sınırlanmıştır.Modbus spesifikasyonunda bu sayıs daha düşük olarak 247 adet olarak tanımlanmıştır.
Bu sınırlamayı aşmak için address için iki bayt kullanacak şekilde protokolde modifikasyon yapılabilir.
Master ve slave lerin hepsinin bu modifikasyonu desteklemesi gerekir.2 bayt adresleme network üzerindeki Slave sayısının limitini 65535 adete çıkarır.

Hiç yorum yok:

Yorum Gönder