2 Temmuz 2013 Salı

Modbus Hataları ( Modbus Errors )


Resim yazısı ekle

Modbus Errors:

 

 

Modbus Hataları:

 

Bir Modbus mesajı Server tarafından alındığında tüm parametreleri doğrumu diye analiz edilir.Eğer doğru ise Server bir cevap (response) yollar.Bu cevap Data içerebilir
Veya bir mesajın alındığı teyidi olabilir.
Eğer bir hata (error) var ise,Server iki şeyden birini yapabilir.Eğer mesaj hiç bir şekilde çözülemiyorsa (decode)  ( yani bir bad check sum varsa) mesaj doğrudan çöpe atılır.
Eğer mesaj çözülebiliyor ancak bir veya birkaç parametre doğru değilse ( yani olmayan bir adres için okuma girişiminde bulunulmuş ise ) server bir hata kodu (fault code)
İle cevap verecektir.
Hata kodu (fault code) basit olarak fonksiyon koduna (Function Code)128 eklenerek oluşur.
Örneğin eğer Client, function 3( Holding Register’i oku) ile bir talep te ( request ) bulunuyor ise ve bir hata içeriyorsa,server hata kodu  131 (3 + 128 = 131) verecektir.


Modbus Exceptions : Modbus İstisnaları

Hata koduna ek olarak,server neyin yanlış olduğu hakkında daha detaylı bir istisna kodu ( exception code) ile dönüş yapar.İstisna kodları her bir fonksiyon için ayrı ayrı tanımlanmıştır,ancak en yaygın kullanılan istisna fonksiyonları aşağıdakilerdir.

  • 1 = İstenilen fonksiyon kodu (command) desteklenmiyor
  • 2 = Adres doğru değil (varlığı yok).Çoklu adreslerde çalışan bu fonksiyon,requet den etkilen tüm adresler için check’i içerir.
  • 3 = Adres miktarı doğru değil.Miktar parametresi istenen fonksiyon için çok geniş ( yada sıfır)
  •  4 = İsteğin(request) yerine getirilişi esnasında Server da bazı tanımlanamayan hatalar oluştu

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.

Modbus Data Sunumu



   Modbus Data Sunumu

Modbus  Veri Tablosu ( Data Table ) kavramını kullanır.Veri tablosu daha önce PLC kullananların tanışık olduğu kavramdır.
Bir Veri Tablosu veri saklamak için kullanılan Hafıza blok’u yada dizisidir.
Veriler  “Veri tablosu” adresleri kullanılarak referanslanır.
Modbus veri tablosu adresleri dört tipe ayrılır.
….Discrete Inputs  - Bunlar sadece okunan ( read only) boolean değerlerdir.Bunlar tipik olarak sensör giriş değerleri ve diğer boolean değerleri okumak içindir ancak kullanıcı yazamaz ( User read Only but not Write)
….Coils – Bunlar Oku-Yaz boolean değerlerdir.Bunlar tipik olarak çıkışları temsil etmek için kullanılırlar ( mesela Selenoid vanalar) veya Kullanıcı tarafından hem Okunup Hem Yazılabilen iç bitler ( Internal Bits)
…..Input Registers – Bunlar sadece Okunan ( Read Only)  16 bit Tamsayı (Integer) lardır.Bunlar tipik olarak Kullanıcı tarafından okunan ancak yazılamayan analog giriş değerlerini ve diğer tamsayı değerleri temsil etmek için kullanılır
…..Holding Registers – Bunlar Okunur / Yazılır 16 bit Tamsayılardır.Bunlar tipik olarak kullanıc tarafından okunup yazılabilen  Analog Çıkışları veya iç sayıları temsilen kullanılır

Boolean ve Integer data tiplerine ek olarak, “large integer” geniş tamsayıları’da ,kayan noktalı sayıları ( Floating point numbers) ve Modbus data tablosundaki verileri birkaç register a yayarak Modbus stringlerini depolamak mümkündür.Öte yandan Modbus bunu doğrudan destekleyecek hiçbir şey teklif etmez,kullanıcı değerleri ayırıp değişik lokasyonlara kayıt etmektden kendisi sorumludur.