MODBUS TCP/IP UYGULAMA KILAVUZU

MODBUS Messaging on TCP/IP Implementation Guide V1.0b adlı Modbus TCP/IP haberleşme protokolü dökümânının Türkçe çevirisini sizlerle paylaşıyorum. Belge içerisinde eksik gördüğünüz veya teknik olarak yanlış çevrildiğini düşündüğünüz kısımları belirtirseniz düzeltme yapabilirim. Umarım faydalı bulursunuz.

1.     Giriş

1.1.  Amaçlar (Objectives)

Bu belgenin amacı, yazılım geliştiricilerin bu hizmeti uygulamalarına yardımcı olacak referans bilgileri sağlamak için TCP/IP üzerinden MODBUS mesajlaşma hizmetini sunmaktır. MODBUS fonksiyon kodlarının kodlaması bu belgede açıklanmamıştır, bu bilgi için lütfen MODBUS Uygulama Protokolü Spesifikasyonunu [1] okuyun.

Bu belge, bir MODBUS mesajlaşma hizmeti uygulamasının doğru ve kapsamlı bir tanımını verir. Amacı, MODBUS mesajlaşma servisini kullanan cihazlar arasında birlikte çalışabilirliği kolaylaştırmaktır.

Bu belge temel olarak üç bölümden oluşmaktadır:

  • TCP/IP protokolü üzerinden MODBUS’a genel bakış.
  • Bir MODBUS istemcisi (client), sunucusu (server) ve ağ geçidi uygulamasının fonksiyonel bir açıklaması.
  • Bir MODBUS uygulama örneğinin nesne modelini öneren bir uygulama kılavuzu.

1.2.  İstemci/Sunucu Modeli (Client/Server Modeli)

MODBUS mesajlaşma hizmeti, bir Ethernet TCP/IP ağına bağlı cihazlar arasında bir İstemci/Sunucu (Client/Server) iletişimi sağlar.

Bu istemci sunucu modeli dört tür mesaja dayanmaktadır:

  • MODBUS İsteği(MODBUS Request)
  • MODBUS Onayı (MOSBUS Confirmation)
  • MODBUS Göstergesi (Belirtisi) (MODBUS Indication)
  • MODBUS Yanıt (MODBUS Response)

MODBUS İsteği (Request), İstemci (Client) tarafından bir işlem başlatmak için ağ üzerinde gönderilen mesajdır,

MODBUS Göstergesi (Indication), Sunucu (Server) tarafından alınan İstek (Request Message) mesajıdır.

MODBUS Yanıtı (Response), Sunucu (Server) tarafından gönderilen Yanıt (Response Message) mesajıdır.

MODBUS Onayı (Confirmation), İstemci (Client) tarafından alınan yanıt (Response Message) mesajıdır.

MODBUS mesajlaşma servisleri (İstemci/Sunucu Modeli) gerçek zamanlı bilgi alışverişi için kullanılır:

  • İki cihaz uygulaması arasında,
  • Cihaz uygulaması ile diğer cihaz arasında,
  • HMI/SCADA uygulamaları ve cihazları arasında,
  • Bir bilgisayar ile çevrimiçi hizmetler sağlayan bir cihaz programı arasında.

1.3.  Referans Dökümanlar (Referance Documents)

Bu bölümde, bundan önce okunması tavsiye edilen-ilginizi çekebilecek olan belgelerin bir listesini verir.

[1] MODBUS Uygulama Protokolü Spesifikasyonu v1.1a

[2] RFC 1122 İnternet Ana Bilgisayarları – İletişim Katmanları

2.     Kısaltmalar

ADU         Application Data Unit (Uygulama Veri Birimi)

IETF          Internet Engineering Task Force (İnternet Mühendisliği Görev Gücü)

IP              Internet Protocol

MAC         Medium Access Control (Orta Derece Erişim Kontrolü)

MB            MODBUS

MBAP       MODBUS Application Protocol (MODBUS Uygulama Protokolü)

PDU          Protocol Data Unit (Protokol Veri Birimi)

 PLC          Programmable Logic Controller (Programlanabilir Mantık Denetleyicisi)

TCP           Transport Control Protocol (Taşıma Kontrol Protokolü)

BSD          Berkeley Software Distribution (Berkeley Yazılım Dağıtımı)

MSL          Maximım Segment Lifetime (Maksimum Segment Ömrü)

3.     Bağlam

3.1.  Protokol Açıklaması (PROTOCOL DESCRIPTION)

3.1.1.     Genel İletişim Mimarisi (General Communication Architecture)

 MODBUS TCP/IP üzerinden iletişim kuran bir sistem, farklı cihaz türlerini içerebilir:

  • Bir TCP/IP ağına bağlı MODBUS TCP/IP İstemci ve Sunucu cihazları
  • MODBUS Seri Hat İstemci ve Sunucusu uç cihazlarının bağlantılarına izin veren TCP/IP ağı ile bir seri hat alt ağı arasındaki ara bağlantı için köprü, yönlendirici veya ağ geçidi gibi Ara bağlantı cihazları.

Yukarıdaki şemada MODBUS TCP/IP iletişim mimarisi Görmektesiniz. (Şema 1)

MODBUS protokolü, altta yatan iletişim katmanlarından bağımsız basit bir Protokol Veri Birimi (Protocol Data Unit) tanımlar. MODBUS protokolünün belirli veri yollarında veya ağlarda eşlenmesi, Uygulama Veri Birimi’nde (Application Data Unit) bazı ek alanlar sunabilir.

Genel Modbus Çerçevesi (Şema 2)

Bir MODBUS işlemini başlatan istemci (client), MODBUS Uygulama Veri Birimi’ni (ADU) oluşturur. Fonksiyon kodu, sunucuya (server) hangi tür eylemin gerçekleştirileceğini gösterir.

3.1.2.     TCP/IP Uygulama Veri Birimi Üzerinde MODBUS (MODBUS on TCP/IP ADU)

Bu bölüm, bir MODBUS isteğinin (request) veya yanıtının (response) bir MODBUS TCP/IP ağı üzerinde taşındığında kapsüllenmesini açıklamaktadır.

TCP/IP üzerinden MODBUS isteği/yanıtı (Şema 3)

MODBUS Uygulama Veri Birimi’ni tanımlamak için TCP/IP’de özel bir başlık kullanılır. Bu başlık, MBAP başlığı (MODBUS Uygulama Protokolü başlığı) olarak adlandırılır.

Bu başlık, seri hatta kullanılan MODBUS RTU uygulama veri birimine kıyasla bazı farklılıklar sağlar:

  • MODBUS Seri Hattında genellikle kullanılan MODBUS ‘slave address’ alanı, MBAP Header’da tek baytlık bir ‘Birim Tanımlayıcı’ (Unit Identifier) ile değiştirilir. ‘Birim Tanımlayıcı’ (Unit Identifier), birden çok bağımsız MODBUS uç birimini desteklemek için tek bir IP adresi kullanan köprüler, yönlendiriciler ve ağ geçitleri gibi cihazlar aracılığıyla iletişim kurmak için kullanılır.
  • Tüm MODBUS istekleri ve yanıtları (requests and responses), alıcının bir mesajın bittiğini doğrulayabileceği şekilde tasarlanmıştır. MODBUS Protokol Veri Biriminin (PDU) sabit bir uzunluğa sahip olduğu fonksiyon kodları için fonksiyon kodu tek başına yeterlidir. İstekte ve yanıtta (request and response) değişken miktarda veri taşıyan fonksiyon kodları için, veri alanı bir bayt sayısı içerir.
  • MODBUS TCP üzerinden taşındığında, mesaj iletim için birden fazla pakete bölünmüş olsa bile alıcının mesaj sınırlarını tanımasına izin vermek için MBAP başlığında ek uzunluk bilgisi taşınır. Açık ve örtülü uzunluk kurallarının varlığı ve bir CRC-32 hata kontrol kodunun (Ethernet’te) kullanılması, bir istek veya yanıt (request and response) mesajının algılanamayan bozulma şansının çok düşük olmasınaneden olur.

3.1.3.     MBAP Başlık Açıklaması (MBAP Header Description)

MBAP başlığı aşağıdaki alanları içerir:

Başlık 7 bayt uzunluğundadır:

Transaction Identifier (İşlem Tanımlayıcı): İşlem eşleştirme için kullanılır. MODBUS sunucusu, yanıtta isteğin işlem tanımlayıcısını kopyalar.

Protocol Identifier (Protokol Tanımlayıcı): Sistem içi çoğullama için kullanılır (intra-system multiplexing). MODBUS Protokolü 0 değeriyle tanımanır.

Length (Uzunluk): Uzunluk alanı, Birim Tanımlayıcı (Unit Identifier) ve veri alanları dahil olmak üzere aşağıdaki alanların bayt sayısıdır.

Unit Identifier (Birim Tanımlayıcı): Sistem içi yönlendirme (inta-system rounding) amaçlı kullanılmaktadır. Tipik olarak, bir Ethernet TCP-IP ağı ile bir MODBUS seri hattı arasındaki bir ağ geçidi aracılığıyla bir MODBUS+ veya bir MODBUS seri hat slave’iyle iletişim kurmak için kullanılır. Bu alan, istekte MODBUS İstemcisi tarafından ayarlanır ve sunucu tarafından yanıtta aynı değerle döndürülmelidir.

Tüm MODBUS/TCP Uygulama Veri Birimi (ADU), TCP yoluyla kayıtlı port 502’ye gönderilir.

Açıklama : farklı alanlar Big-endian’da kodlanmıştır.

3.2.  MODBUS FONKSİYONLARI KOD AÇIKLAMA (MODBUS FUNCTIONS CODES DESCRIPTION)

MODBUS uygulama katmanı protokolünde kullanılan standart fonksiyon kodları, MODBUS Uygulama Protokolü Spesifikasyonunda [1] ayrıntılı olarak açıklanmaktadır.

4.    Fonksiyonel Açıklama

Burada sunulan MODBUS Bileşen Mimarisi (MODBUS Componen Architecture), hem MODBUS İstemci (Client) hem de Sunucu (Server) Bileşenlerini içeren ve herhangi bir cihazda kullanılabilen genel bir modeldir.

Bazı cihazlar yalnızca Sunucu veya İstemci bileşenini sağlayabilir.

Bu bölümün ilk kısmında, MODBUS mesajlaşma hizmeti bileşen mimarisine kısa bir genel bakış verilir, ardından mimari modelde sunulan her bir bileşenin açıklaması gelir.

4.1. MODBUS BİLEŞEN MİMARİ MODELİ

MODBUS Mesajlaşma Hizmeti Kavramsal Mimarisi

Haberleşme Uygulama Katmanı

Bir MODBUS cihazı, bir istemci ve/veya bir sunucu MODBUS arayüzü sağlayabilir.

Kullanıcı uygulama nesnelerine dolaylı olarak erişime izin veren bir MODBUS backend arayüzü sağlanabilir.

Dört alan bu arayüzü oluşturabilir: : input discrete, output discrete (coils), input registers and output registers.

Bu arabirim ile kullanıcı uygulama verileri arasında bir ön eşleme yapılmalıdır (yerel sorun).

  • MODBUS İstemci

MODBUS İstemcisi, kullanıcı uygulamasının uzak bir cihazla bilgi alışverişini açıkça kontrol etmesine izin verir. MODBUS İstemcisi, kullanıcı uygulaması tarafından MODBU İstemci Arayüzüne gönderilen bir istekte yer alan parametreden bir MODBUS isteğioluşturur.

MODBUS İstemcisi, yönetimi bir MODBUS onayının beklenmesini ve işlenmesini içeren bir MODBUS işlemi kullanır.

  • MODBUS İstemci Arayüzü

MODBUS İstemci Arayüzü, kullanıcı uygulamasının MODBUS uygulama nesnelerine erişim de dahil olmak üzere çeşitli MODBUS hizmetleri için istekler oluşturmasını sağlayan bir arayüz sağlar. MODBUS İstemci arayüzü (API), uygulama modelinde bir örnek açıklanmasına rağmen, bu Spesifikasyonun bir parçası değildir.

  • MODBUS Sunucu

Bir MODBUS isteğinin alınması üzerine bu modül, okumak, yazmak veya diğer bazı eylemleri gerçekleştirmek için yerel bir eylemi etkinleştirir. Bu eylemlerin işlenmesi, uygulama programcısı için tamamen şeffaf bir şekilde yapılır. Ana MODBUS sunucu fonksiyonaları, 502 TCP bağlantı noktasında bir MODBUS isteğini beklemek, bu isteği işlemek ve ardından cihaz içeriğine bağlı olarak bir MODBUS yanıtı oluşturmaktır.

  • MODBUS Backend Arayüzü

MODBUS Backend Arayüzü, MODBUS Sunucusundan kullanıcı uygulamasına, uygulama nesnelerinin tanımlandığı bir arayüzdür.

  • TCP Yönetim Katmanı

Bilgilendirici Not: Bu Spesifikasyondaki TCP/IP tartışması, kullanıcıya MODBUS Uygulama Protokol Spesifikasyonunu [1] TCP/IP üzerinden uygulamada yardımcı olmak için kısmen referans [2] RFC 1122’ye dayanmaktadır.

Mesajlaşma servisinin ana işlevlerinden biri, iletişim kurma ve bitirmeyi yönetmek ve kurulan TCP bağlantıları üzerindeki veri akışını yönetmektir.

  • Bağlantı Yönetimi

İstemci ve sunucu MODBUS Modülü arasındaki iletişim, bir TCP bağlantı yönetimi modülünün kullanılmasını gerektirir. Küresel mesajlaşma TCP bağlantılarını yönetmekle görevlidir.

Bağlantı yönetimi için iki olasılık önerilmiştir. Ya kullanıcı uygulamasının kendisi TCP bağlantılarını yönetir ya da bağlantı yönetimi tamamen bu modül tarafından yapılır ve bu nedenle kullanıcı uygulaması için şeffaftır. Son çözüm daha az esneklik anlamına gelir.

Dinleyen TCP port 502, MODBUS iletişimleri için ayrılmıştır. Varsayılan olarak o portta dinlemek zorunludur. Bununla birlikte, bazı pazarlar veya uygulamalar, başka bir portun TCP üzerinden MODBUS’a tahsis edilmesini gerektirebilir. Bu nedenle, istemcilerin (client) ve sunucuların (server) kullanıcıya MODBUS over TCP port numarasını parametreleştirme imkanı vermesi önemle tavsiye edilir. Belirli uygulamalarda MODBUS hizmeti için başka bir TCP sunucusu bağlantı noktası (TCP Server Port) yapılandırılsa bile, uygulamaya özel bağlantı noktalarına-portlara ek olarak TCP sunucu bağlantı noktası (TCP Server Port) 502’nin de kullanılabilir olması gerektiğini unutmamak önemlidir.

  • Erişim Kontrol Modülü

Belirli kritik bağlamlarda, istenmeyen ana bilgisayarlar için cihazların dahili verilerine erişim yasaklanmalıdır. Bu nedenle bir güvenlik moduna ihtiyaç duyulur ve gerekirse güvenlik işlemi uygulanabilir.

  • TCP/IP Stack Layer (TCP/IP Yığın Katman)

TCP/IP yığını, veri akışı kontrolünü, adres yönetimini ve bağlantı yönetimini bir ürüne veya sisteme özgü farklı kısıtlamalara uyarlamak için parametrelendirilebilir. TCP bağlantılarını yönetmek için genellikle BSD soket arabirimi kullanılır.

  • Kaynak Yönetimi ve Veri Akış Kontrolü

MODBUS istemcisi ile sunucu arasındaki gelen ve giden mesajlaşma veri akışını dengelemek için, MODBUS mesajlaşma yığınının tüm katmanlarında veri akış kontrol mekanizması sağlanmıştır.

Kaynak yönetimi ve akış kontrol modülü ilk olarak, veri bağlantı katmanında ve ayrıca kullanıcı uygulama seviyesinde bazı veri akış kontrolleriyle birlikte eklenen TCP dahili akış kontrolüne dayalıdır.

4.2 TCP BAĞLANTI YÖNETİMİ

4.2.1 Bağlantı Yönetim Modülü

4.2.1.1 Genel Tanım

Bir MODBUS haberleşmesi, İstemci (Client) ile Sunucu (Server) arasında bir TCP bağlantısının kurulmasını gerektirir.

Bağlantının kurulması, Kullanıcı Uygulama modülü tarafından açıkça veya TCP bağlantı yönetimi modülü tarafından otomatik olarak etkinleştirilebilir. İlk durumda, bağlantıyı tamamen yönetmek için kullanıcı uygulama modülünde bir uygulama programlama arayüzü sağlanmalıdır. Bu çözüm, uygulama programcısı için esneklik sağlar, ancak TCP/IP mekanizması konusunda iyi bir uzmanlık gerektirir.

İkinci durumda, TCP bağlantı yönetimi, yalnızca MODBUS mesajlarını gönderen ve alan kullanıcı uygulamasına tamamen gizlenir. TCP bağlantı yönetimi modülü, gerektiğinde yeni bir TCP bağlantısı kurmakla görevlidir.

Uygulama Kuralları

  1. Açık kullanıcı gereksinimi olmadan, otomatik TCP bağlantı yönetiminin uygulanması önerilir.
  2. Uzak bir cihaz ile TCP bağlantısının açık tutulması ve her MODBUS/TCP işlemi için açılıp kapatılmaması önerilir. Not: Ancak MODBUS client sunucudan gelen kapatma isteğini kabul edip bağlantıyı kapatabilecek kapasitede olmalıdır. Bağlantı gerektiğinde yeniden açılabilir.
  3. Bir MODBUS İstemcisinin uzak bir MODBUS sunucusuyla (aynı IP adresine sahip) minimum TCP bağlantısı açması önerilir. Uygulama başına bir bağlantı iyi bir seçim olabilir.
  4. Aynı TCP Bağlantısı üzerinde aynı anda birkaç MODBUS işlemi etkinleştirilebilir. Not: Bu yapılırsa, eşleşen istekleri ve yanıtları benzersiz bir şekilde tanımlamak için MODBUS işlem tanımlayıcısı kullanılmalıdır.
  1. İki uzak MODBUS varlığı (her biri istemci ve sunucudur) arasında çift yönlü bir iletişim olması durumunda, istemci veri akışı ve sunucu veri akışı için ayrı bağlantılar açmak gerekir.
  2. Bir TCP çerçevesi yalnızca bir MODBUS ADU taşımalıdır. Aynı TCP PDU’da birden fazla MODBUS isteği veya yanıtı gönderilmemesi önerilir.

TCP Bağlantı Yönetim Etkinlik Diyagramı
  1. Açık TCP Bağlantı Yönetimi

Kullanıcı uygulama modülü; aktif-pasif kurulum ve bağlantı sonlandırma vb. tüm TCP bağlantılarını yönetmekten sorumludur. Bu yönetim, bir istemci ile bir sunucu arasındaki tüm MODBUS iletişimleri için yapılır. BSD soket arayüzü, TCP bağlantısını yönetmek için kullanıcı uygulama modülünde kullanılır. Bu çözüm tam bir esneklik sunar ama uygulama programcısının yeterli TCP bilgisine sahip olduğu anlamına gelmez.

Cihaz yetenekleri ve gereksinimleri dikkate alınarak bir istemci ve sunucu bağlantısı sayısı sınırı yapılandırılmalıdır.

  1. Otomatik TCP bağlantı yönetimi

TCP bağlantı yönetimi, kullanıcı uygulama modülü için tamamen şeffaftır. Bağlantı yönetimi modülü, yeterli sayıda istemci ve sunucu bağlantısını kabul edebilir.

Bununla birlikte, izin verilen bağlantı sayısının aşılması durumunda bir mekanizma uygulanmalıdır. Böyle bir durumda kullanılmayan en eski bağlantıyı kapatmanızı öneririz.

Uzak bir istemciden veya yerel kullanıcı uygulamasından alınan ilk pakette uzak bir ortakla (remote partner) bağlantı kurulur. Ağdan bir sonlandırma geldiğinde veya cihazda yerel olarak karar verilirse bu bağlantı kapatılacaktır. Bir bağlantı isteği alındığında, yetkisiz istemcilerin cihaza erişimini yasaklamak için erişim kontrolü seçeneği kullanılabilir.

TCP bağlantı yönetimi modülü, TCP/IP yığınıyla iletişim kurmak için Yığın arabirimini (genellikle BSD Soket arabirimi) kullanır.

Sistem gereksinimleri (system requirements) ve sunucu kaynakları (server resources) arasındaki uyumluluğu sürdürmek için, TCP yönetimi 2 bağlantı havuzunu (connection pool) sürdürecektir.

  • İlk havuz (öncelikli bağlantı havuzu), yerel bir girişimle hiçbir zaman kapatılmayan bağlantılardan oluşur. Bu havuzu kurmak için bir konfigürasyon sağlanmalıdır. Uygulanacak ilke, belirli bir IP adresini bu havuzun olası her bağlantısıyla ilişkilendirmektir. Bu tür IP adreslerine sahip cihazlara “işaretli” (“marked”) denir. İşaretli bir cihaz tarafından istenilen herhangi bir yeni bağlantı kabul edilmeli ve öncelikli bağlantı havuzundan alınacaktır. Aynı cihazın öncelik havuzunun tüm bağlantılarını kullanmasını önlemek için her bir uzak cihaz için izin verilen maksimum bağlantı sayısını yapılandırmak-konfigure etmek de gereklidir.
    • İkinci havuz (öncelikli olmayan bağlantı havuzu), işaretlenmemiş cihazlar için bağlantılar içerir. Burada devreye giren kural, işaretlenmemiş bir cihazdan yeni bir bağlantı isteği geldiğinde ve havuzda bağlantı kalmadığında en eski bağlantıyı kapatmaktır.

Her havuzda bulunan bağlantı sayısını atamak için isteğe bağlı olarak bir yapılandırma sağlanabilir. Ancak (Zorunlu değildir) tasarımcılar gerekirse bağlantı sayısını tasarım zamanında belirleyebilirler.

4.2.1.2. Bağlantı Yönetimi Açıklaması (Connection Management Description)

  • Bağlantı Kurulumu (Connection Establishment):

MODBUS mesajlaşma hizmeti, Port 502’de yeni bağlantı kabul etmeye ve diğer cihazlarla veri alışverişine izin veren bir dinleme soketi sağlamalıdır. Mesajlaşma hizmetinin bir uzak sunucu ile veri alışverişi yapması gerektiğinde, bu uzak sunucuyla veri alışverişi yapabilmek için bir Port 502 ile yeni bir istemci bağlantısı açması gerekir. Yerel bağlantı noktası 1024’ten yüksek ve her istemci bağlantısı için farklı olmalıdır.

Modbus TCP Bağlantı Kurulumu

İstemci ve sunucu bağlantı sayısı yetkili bağlantı sayısından fazla ise kullanılmayan en eski bağlantı kapatılır. Uzak istemcinin IP adresinin yetkilendirilip yetkilendirilmediğini kontrol etmek için erişim kontrol mekanizması etkinleştirilebilir. Değilse, yeni bağlantı reddedilir.

  • MODBUS Veri Transferi

Halihazırda açılmış olan doğru (right) TCP bağlantısı üzerinden bir MODBUS isteği (request) gönderilmelidir. Uzak (remote) IP adresi, TCP bağlantısını bulmak için kullanılır. Aynı uzak bağlantı (remote) ile birden çok TCP bağlantısının açılması durumunda, MODBUS mesajının gönderilebilmesi için bir bağlantı seçilmelidir, en eskisi, ilki gibi farklı seçim kriterleri kullanılabilir. Bağlantı, tüm MODBUS iletişimleri sırasında açık kalmalıdır. Aşağıdaki bölümlerde açıklandığı gibi, bir istemci, bir öncekinin bitmesini beklemeden bir sunucuyla birkaç MODBUS işlemi başlatabilir.

  • Bağlantıyı Kapatma

Bir İstemci ile bir Sunucu arasındaki MODBUS iletişimleri sona erdiğinde, İstemci’nin bu iletişimler için kullanılan bağlantının bağlantısını kapatma işlemini başlatması gerekir.

4.2.2. Çalışma Modlarının TCP Bağlantısına Etkisi (Impact of Operating Modes on the TCP Connection)

Bazı Çalışma Modları (çalışır durumdaki iki Uç Nokta arasındaki iletişim kesintisi, Uç Noktalardan birinde Çökme ve Yeniden Başlatma, …) TCP Bağlantılarını etkileyebilir. Bir bağlantı, diğer tarafın bilgisi olmadan bir tarafta kapalı veya kopmuş olarak görülebilir. Bağlantının “yarı açık” olduğu söyleniyor. Bu bölümde, her bir ana Çalışma Modu için davranış açıklanmaktadır. Canlı Tut TCP mekanizmasının her iki uç noktada da kullanıldığı varsayılmaktadır (Bkz. bölüm 4.3.2)

4.2.2.1 İki operasyonel bitiş noktası arasındaki iletişim kesintisi (Communication break between two operational end points):

İletişim kesintisinin kaynağı, Sunucu (Server) tarafındaki Ethernet kablosunun bağlantısının kesilmesi olabilir. Beklenen davranış:

  • Bağlantıda şu anda hiçbir paket gönderilmemişse:

Keepalive (Canlı Tutma) zamanlayıcı değerinden daha az sürerse iletişim kesintisi görülmeyecektir. İletişim kesintisi Keepalive (Canlı Tutma) zamanlayıcı değerinden daha uzun sürerse, TCP Yönetim katmanına bağlantıyı sıfırlayabilen bir hata döndürülür.

  • Bağlantının kesilmesinden önce ve sonra bazı paketler gönderilirse:

TCP yeniden iletim algoritmaları (Jacobson’s, Karn’s algoritmaları ve üstel geri çekilme. Bkz. bölüm 4.3.2) etkinleştirilir. Bu durum, Keepalive (Canlı Tutma) zamanlayıcısı sona ermeden bir yığın TCP katmanının Bağlantının Sıfırlanmasına yol açabilir.

4.2.2.2. Sunucu uç noktasının Çökmesi ve Yeniden Başlatılması (Crash and Reboot of the Server end point)

Sunucunun çökmesi ve Yeniden Başlatılmasından sonra, İstemci tarafında bağlantı “yarı açık” (“half open”) durumda. Beklenen davranış:

• Yarı açık bağlantıda herhangi bir paket gönderilmezse:

Keepalive (Canlı Tut) zamanlayıcısı bitmediği sürece TCP yarı açık bağlantısının İstemci tarafından açık olduğu görülür. Bundan sonra, bağlantıyı sıfırlayabilen TCP Yönetim katmanına bir hata döndürülür.

•Yarı açık bağlantıda bazı paketler gönderilirse:

Sunucu, artık var olmayan bir bağlantıdan veri alıyor (receives). Yığın TCP katmanı, İstemci tarafındaki yarı açık bağlantıyı kapatmak için bir Sıfırlama (Reset) gönderir.

4.2.2.3. İstemcinin Çökmesi ve Yeniden Başlatılması (Crash and Reboot of the Client)

İstemcinin çökmesi ve Yeniden Başlatılmasından sonra, Sunucu tarafında bağlantı “yarı açık” (“half open”) durumda. Beklenen davranış:

• Yarı açık bağlantıda paket gönderilmez:

Keepalive (Canlı Tutma) zamanlayıcısı bitmediği sürece Sunucu tarafından TCP yarı açık bağlantının açık olduğu görülür. Bundan sonra, bağlantıyı sıfırlayabilen TCP Yönetim katmanına bir hata döndürülür.

• İstemci Keepalive (Canlı Tut) zamanlayıcısı sona ermeden önce yeni bir bağlantı açarsa:

İki vaka incelenmelidir:

  • Bağlantı açma, sunucu tarafındaki yarı-açık (half-open) bağlantı ile aynı özelliklere sahiptir (aynı kaynak ve hedef Portlar, aynı kaynak ve hedef IP Adresleri), bu nedenle bağlantı açma, Bağlantıda Zaman Aşımından sonra TCP yığın düzeyinde başarısız olur. Kuruluş (Berkeley uygulamalarının çoğunda 75’ler). İletişim kurmanın mümkün olmadığı bu uzun Zaman Aşımından kaçınmak için, istemci tarafında yeniden başlatmanın ardından bağlantı açılması için öncekinden farklı kaynak port numaralarının kullanılması önerilir.
  • Bağlantı açma, sunucu tarafında yarı açık bağlantı ile aynı özelliklere sahip değildir (farklı kaynak Portlar, aynı hedef Port, aynı kaynak ve hedef IP Adresi), bu nedenle bağlantı, yığın TCP seviyesinde açılır ve Sunucuya sinyal iletilir. TCP Yönetim katmanı. Sunucu TCP Yönetimi katmanı, uzak bir İstemci IP Adresinden yalnızca bir bağlantıyı destekliyorsa, eski yarı açık bağlantıyı kapatabilir ve yenisini kullanabilir.

Sunucu TCP Yönetim katmanı, uzak bir İstemci IP Adresinden birkaç bağlantıyı destekliyorsa, TCP Yönetim katmanına bir hata döndürecek Canlı Tutma Zamanlayıcısının süresi dolana kadar yeni bağlantı açık kalır ve eski bağlantı da yarı açık kalır. Bundan sonra, TCP Yönetim katmanı eski bağlantıyı sıfırlayabilecektir.

4.2.3. Erişim Kontrol Modülü (Access Control Modülü)

Bu modülün amacı, her yeni bağlantıyı kontrol etmek ve bir yetkili uzak IP adresleri listesi kullanarak modülün bir uzak İstemci TCP bağlantısını yetkilendirebilmesi veya yasaklayabilmesidir.

Kritik bağlamda, uygulama programcısının ağ erişimini güvence altına almak için Erişim Kontrolü modunu seçmesi gerekir. Böyle bir durumda, her uzak @IP için erişimi Yetkilendirmesi/yasaklaması gerekir. Kullanıcının bir IP adresleri listesi sağlaması ve her bir IP adresi için yetkili olup olmadığını belirtmesi gerekir. Varsayılan olarak, güvenlik modunda, kullanıcı tarafından yapılandırılmayan IP adresleri yasaktır. Bu nedenle, erişim kontrol modu ile bilinmeyen bir IP adresinden gelen bir bağlantı kapatılır.

4.3. TCP/IP YIĞINININ KULLANIMI (USE of TCP/IP STACK)

Bir TCP/IP yığını; bağlantıları yönetmek, veri göndermek ve almak (send and receive data) ve ayrıca yığın davranışını (stack behavior) cihaz veya sistem kısıtlamalarına uyarlamak için bazı parametreleştirmeler yapmak için bir arabirim sağlar.

Bu bölümün amacı, Yığın arayüzüne genel bir bakış (Overview) ve ayrıca yığının parametreleştirilmesiyle ilgili bazı bilgiler vermektir. Bu genel bakış, MODBUS Mesajlaşması tarafından kullanılan özelliklere odaklanmaktadır.

Daha fazla bilgi için, İnternet iletişim yazılımı satıcıları ve tasarımcıları için rehberlik sağlayan RFC 1122’yi okumaktır. İnternete bağlı bir ana bilgisayarın kullanması gereken standart protokollerin yanı sıra açık bir dizi gereksinim ve seçeneği sıralar. Yığın arayüzü genellikle bu belgede açıklanan BSD (Berkeley Software Distribution) Arayüzüne dayalıdır.

4.3.1. BSD Soket arabiriminin kullanımı

Not: bazı TCP/IP yığınları, performans sorunları için başka türde arabirimler önerir. Bir MODBUS istemcisi veya sunucusu bu özel arayüzleri kullanabilir, ancak bu kullanım bu şartnamede açıklanmayacaktır.

Soket, iletişimin uç noktasıdır. İletişimin temel yapı taşıdır. Bir MODBUS iletişimi, soketler aracılığıyla veri gönderip alarak gerçekleştirilir. TCP/IP kitaplığı, yalnızca TCP kullanan ve bağlantı tabanlı bir iletişim hizmeti sağlayan akış yuvaları sağlar.

Soketler, socket () fonksiyonu aracılığıyla oluşturulur. Oluşturucu tarafından sokete erişmek için kullanılan bir soket numarası döndürülür. Soketler adressiz (IP adresi ve port numarası) oluşturulur. Bir port bir sokete bağlanana kadar veri almak için kullanılamaz.

bind () işlevi, bir port numarasını bir sokete bağlamak için kullanılır. bind (), soket ile belirtilen bağlantı noktası numarası arasında bir ilişki oluşturur. Bir bağlantı başlatmak için istemcinin, soket numarasını, uzak IP adresini ve uzak dinleme bağlantı noktası numarasını (aktif bağlantı kurulumu) belirten connect () işlevini vermesi gerekir.

Bir bağlantıyı tamamlamak için sunucunun önceki listen() çağrısında (pasif bağlantı kurma) belirtilen soket numarasını belirten accept() işlevini vermesi gerekir. İlki ile aynı özelliklere sahip yeni bir soket oluşturulur. Bu yeni soket istemcinin soketine bağlanır ve numarası sunucuya döndürülür. Böylece ilk soket, sunucuya bağlanmak isteyebilecek diğer istemciler için ücretsizdir.

TCP bağlantısının kurulmasından sonra veriler aktarılabilir. send() ve recv() işlevleri, halihazırda bağlı olan yuvalarla kullanılmak üzere özel olarak tasarlanmıştır.

setsockopt () işlevi, bir soket oluşturucunun seçenekleri bir soketle ilişkilendirmesine olanak tanır. Bu seçenekler soketin davranışını değiştirir. Bu seçeneklerin açıklaması bölüm 4.3.2’de verilmiştir.

Select () işlevi, programcının tüm eventleri olayları test etmesini sağlar

shutdown () işlevi, bir soket kullanıcısının soketteki send () ve/veya receive () fonskiyonlarını devre dışı bırakmasına izin verir.

Bir sokete artık ihtiyaç duyulmadığında, soket tanımlayıcısı close () işlevi kullanılarak atılabilir.

Şekil 39: MODBUS Exchanges, bir istemci ile bir sunucu arasındaki tam bir MODBUS iletişimini tanımlar. İstemci bağlantıyı kurar ve ilkinin yanıtını beklemeden sunucuya 3 MODBUS isteği gönderir. İstemci tüm yanıtları aldıktan sonra bağlantıyı düzgün bir şekilde kapatır.

4.3.2 TCP Katman Parametrelendirmesi

TCP/IP yığınının bazı parametreleri, davranışını ürün veya sistem kısıtlamalarına uyarlamak için ayarlanabilir. Aşağıdaki parametreler TCP katmanında ayarlanabilir:

  • Her bağlantı için parametreler:

SO-RCVBUF, SO-SNDBUF:

Bu parametreler Gönderme ve Alma Soketi için yüksek watermark (veri senkronizasyonu) ayarlanmasına izin verir. Akış kontrol yönetimi için ayarlanabilirler. Alınan arabelleğin boyutu (received buffer), o bağlantı için sunulan pencerenin maksimum boyutudur. Performansı arttırmak için soket arabellek boyutları (socket buffer size) arttırılmalıdır. Bununla birlikte, dahili sürücü kaynaklarını tüketmeden önce TCP penceresini kapatmak için bu değerlerin dahili sürücü kaynaklarından küçük olması gerekir.

Alınan arabellek boyutu (received buffer size), TCP Windows boyutuna, TCP maksimum segment boyutuna ve gelen frameleri absorbe etmek için gereken süreye bağlıdır. Maksimum Segment Boyutu 300 bayt ile (bir MODBUS isteği maksimum 256 bayt + MBAP başlık boyutu gerektirir), 3 frame arabelleğe alma ihtiyacımız varsa, soket arabellek boyutu değeri 900 bayta ayarlanabilir. En büyük ihtiyaçlar ve en iyi ayarlanmış zaman için, TCP penceresinin boyutu arttırılabilir.

TCP-NODELAY:

Küçük paketler (tinygram olarak adlandırılır) LAN’larda (Local Area Network) normalde bir sorun değildir, çünkü çoğu LAN kalabalık değildir, ancak bu küçük paketler geniş alan ağlarında tıkanıklığa yol açabilir. “NAGLE algoritması” adı verilen basit bir çözüm, küçük miktarlarda veri toplamak ve önceki paketlerin TCP onayları geldiğinde bunları tek bir segmentte göndermektir. Daha iyi gerçek zamanlı davranışa sahip olmak için, küçük miktarlardaki verileri tek bir segmentte toplamaya çalışmadan doğrudan göndermeniz önerilir. Bu nedenle, istemci ve sunucu bağlantılarında “NAGLE algoritmasını” devre dışı bırakan TCP-NODELAY seçeneğinin zorlanması önerilir.

SO-REUSEADDR:

 Bir MODBUS sunucusu, uzak bir istemci tarafından başlatılan bir TCP bağlantısını kapattığında, bu bağlantı için kullanılan yerel port numarası (local port number), bu bağlantı “Bekleme Süresi” ”Time-Wait state” durumunda kaldığı sürece (iki MSL süresince: Maksimum Segment Ömrü) yeni bir açılış için tekrar kullanılamaz.

Bu kısıtlamayı atlamak için her istemci ve sunucu bağlantısı için SO-REUSEADDR seçeneğinin belirtilmesi önerilir. Bu seçenek, sürecin kendisine, istemci ve dinleme soketi için 2MSL beklemede bulunan bir bağlantının parçası olan bir bağlantı noktası numarası atamasına izin verir.

SO-KEEPALIVE:

TCP/IP protokolünde varsayılan olarak, boştaki bir TCP bağlantısı üzerinden hiçbir veri gönderilmez. Bu nedenle, bir TCP bağlantısının uçlarındaki hiçbir işlem diğerine veri göndermiyorsa, iki TCP modülü arasında hiçbir şeyin değiş tokuşu yapılmaz. Bu, istemci veya sunucu uygulamasının bir bağlantıyı kapatmak araçlığıyla hareketsizliği algılamak için zamanlayıcılar kullanıldığını varsayar. Uzaktaki cihazın çöküp çökmediğini veya çöküp yeniden başlatılıp başlatılmadığını öğrenmek için diğer ucu yoklamak amacıyla hem istemci hem de sunucu bağlantısında KEEPALIVE seçeneğinin etkinleştirilmesi önerilir. Yine de, KEEPALIVE’ı etkinleştirmenin, geçici arızalar sırasında çok iyi bağlantıların kesilmesine neden olabileceğini, canlı tutma zamanlayıcısı çok kısaysa ağda gereksiz bant genişliğini tüketebileceğini aklımızda tutmalıyız.

  • Tüm TCP katmanı için parametreler:

TCP Bağlantısı kurulurken Zaman Aşımı:

Berkeley’den türetilmiş sistemlerin çoğu, yeni bir bağlantının kurulması için 75 saniyelik bir zaman sınırı belirler, bu varsayılan değer, uygulamanın gerçek zaman kısıtlamasına uyarlanmalıdır.

Keep Alive parametreleri:

Bir bağlantı için varsayılan boşta kalma süresi 2 saattir. Bu değeri aşan boşta kalma süreleri keepalive algılayıcısını tetikler. İlk canlı tutma algılayıcısı sonra, bir algılayıcı yanıtı alınmadığı sürece her 75 saniyede bir maksimum sayıda algılama gönderilir. Boşta kalan bir bağlantıda gönderilen maksimum keepalive algılayıcısı sayısı 8’dir. Maksimum sayıda keepalive algılayıcısı gönderdikten sonra hiçbir araştırma yanıtı alınmazsa, TCP, bağlantıyı kapatmaya karar verebilecek uygulamaya bir hata sinyali verir.

Zaman aşımı ve yeniden iletim parametreleri:

Kayıp algılanırsa, bir TCP paketi yeniden iletilir. Kaybı tespit etmenin bir yolu, uzak taraftan herhangi bir onay alınmadığında sona eren Yeniden İletim Zaman Aşımı’nı (Retransmission Time-Out/RTO) yönetmektir.

TCP, RTO’nun dinamik tahminini yönetir. Bu amaçla, yeniden iletim olmayan her paketin gönderilmesinden sonra bir Gidiş-Dönüş Süresi (Round-Trip Time/RTT) ölçülür. Gidiş-Dönüş Süresi (RTT), bir paketin uzak cihaza ulaşması ve gönderen cihaza geri bildirim alması için geçen süredir. Bir bağlantının RTT’si dinamik olarak hesaplanır, ancak TCP 3 saniye içinde bir tahmin alamazsa, RTT’nin varsayılan değeri 3 saniye olarak ayarlanır.

RTO tahmin edilmişse, bir sonraki paket gönderimi için geçerlidir. Bir sonraki paketin onayı, tahmini RTO sona erme tarihinden önce alınmazsa, Üstel Geri Çekme (Exponential Backoff) etkinleştirilir. Belirli bir süre boyunca aynı paketin maksimum sayıda yeniden iletimine izin verilir (retransmission). Bundan sonra herhangi bir onay alınmadıysa bağlantı iptal edilir. Bazı yığınlarda maksimum yeniden iletim sayısı ve bağlantının iptal edilmesinden önceki maksimum süre (tcp_ip_abort_interval) ayarlanabilir.

Bazı yeniden iletim (retransmission) algoritmaları TCP standartlarında tanımlanmıştır:

  • Jacobson’un RTO tahmin algoritması, Yeniden İletim Zaman Aşımı’nı (RTO) tahmin etmek için kullanılır,
    • Karn’ın algoritması, RTO tahmininin yeniden iletilen bir segment üzerinde yapılmaması gerektiğini söylüyor.
    • Üstel Geri Alma, yeniden iletim zaman aşımının her yeniden iletim için 64 saniyelik bir üst sınırla ikiye katlandığını tanımlar.
    • Hızlı yeniden iletim algoritması, üç yinelenen onayın (three dublicate acknowledgments) alınmasından sonra yeniden iletime izin verir. Bu algoritma tavsiye edilir, çünkü bir LAN’da paket kaybının RTO süresinin dolmasını beklemekten daha hızlı algılanmasına yol açabilir.

Bir MODBUS uygulaması için bu algoritmaların kullanılması önerilir.

4.3.3. IP Katmanı Parametrendirmesi

4.3.3.1. IP Parametreleri

Bir MODBUS uygulamasının IP katmanında aşağıdaki parametreler yapılandırılmalıdır:

• Yerel IP Adresi: IP adresi Sınıf A, B veya C’nin parçası olabilir.

• Alt Ağ Maskesi, : Bir IP Ağını alt ağ oluşturma, çeşitli nedenlerle yapılabilir: farklı fiziksel ortamların kullanımı (Ethernet, WAN vb.), ağ adreslerinin daha verimli kullanımı ve ağ trafiğini kontrol etme yeteneği. Alt Ağ Maskesi, yerel IP adresinin IP adresi sınıfıyla tutarlı olmalıdır.

Açıklama: MODBUS mesajlaşma hizmeti, IP katmanında parçalama fonksiyonu (fragmentation function) gerekgtirmez.

Yerel IP Bitiş Noktası, yerel bir IP Adresi ve bir Alt Ağ Maskesi ve bir Varsayılan Ağ Geçidi (0.0.0’dan farklı) ile yapılandırılmalıdır.

4.4. İLETİŞİM UYGULAMA KATMANI

Modbus İstemci (Client) Birimi

4.4.1.1. MODBUS İstemci Tasarımı

MODBUS/TCP protokolünün tanımı, bir istemcinin basit bir şekilde tasarlanmasına izin verir. Aşağıdaki aktivite diyagramı, bir MODBUS isteği göndermek ve bir MODBUS yanıtı işlemek için kullanıcı tarafından işlenen ana davranışı açıklamaktadır.

MODBUS İstemci Aktivite Diyagramı

Bir MODBUS istemcisi üç olay alabilir:

  • Bir istek göndermek için kullanıcı uygulamasından yeni bir istek (request), bu durumda bir MODBUS isteğinin kodlanması ve TCP yönetim bileşeni hizmeti kullanılarak ağ üzerinde gönderilmesi gerekir. Alt katman (TCP yönetim modülü), bir TCP bağlantı hatası veya diğer bazı hatalar nedeniyle bir hata geri verebilir.
  • TCP yönetiminden bir yanıt, bu durumda istemci yanıtın içeriğini analiz etmeli ve kullanıcı uygulamasına bir onay göndermelidir
  • Yanıt verilmemesi nedeniyle bir Zaman Aşımı süresinin dolması. Ağ üzerinden yeni bir deneme gönderilebilir veya Kullanıcı Uygulamasına olumsuz bir onay gönderilebilir. Açıklama : Bu yeniden denemeler MODBUS istemcisi tarafından başlatılır, diğer bazı yeniden denemeler, TCP onayının olmaması durumunda TCP katmanı tarafından da yapılabilir.

4.4.1.2. Bir MODBUS İsteği Oluşturun

  • İstemcinin, isteğe verilen yanıtı daha sonra bağlamak ve onayı kullanıcı uygulamasına göndermek için gerekli tüm bilgileri hafızaya alınmasını sağlayan bir MODBUS işleminin somutlaştırılması.
  • Kullanıcı uygulamasından bir isteğin alınmasını takiben, istemcinin bir MODBUS isteği oluşturması ve bunu TCP yönetimine göndermesi gerekir. MODBUS isteği oluşturulması birkaç alt göreve bölünebilir: İstemcinin isteğe daha sonra yanıt vermek ve onayı kullanıcı uygulamasına göndermek için gerekli tüm bilgileri hafızaya alınmasını sağlayan bir MODBUS işleminin somutlaştırılması. MODBUS isteğinin kodlanması (PDU + MPAB başlığı). İsteği başlatan kullanıcı uygulaması, Müşterinin isteği kodlamasını sağlayan gerekli tüm bilgileri sağlamalıdır. MODBUS PDU, MODBUS Uygulama Protokol Spesifikasyonuna [1] göre kodlanmıştır. (MB fonksiyon kodu, ilişkili parametreler ve uygulama verileri). MBAP başlığının tüm alanları doldurulur. Ardından, MODBUS isteği ADU’su, PDU’nun önüne MBAP başlığı eklenerek oluşturulur.
  • Uzak Sunucuya doğru TCP soketini bulmakla görevli TCP yönetim modülüne MODBUS isteği ADU’nun gönderilmesi. MODBUS ADU’ya ek olarak Hedef IP adresi de geçilmelidir.

Aşağıdaki aktivite şeması, istek oluşturma aşamasını yukarıdaki MODBUS İstemci Aktivite Şeması’ndakinden daha ayrıntılı olarak açıklamaktadır.

İstek Oluşturma Aktivite Diyagramı

Aşağıdaki örnek, bir uzak sunucudaki kayıt # 5’i okumak için MODBUS isteği ADU kodlamasını açıklar:

MODBUS Request ADU encoding:

Transaction Identifier (İşlem Tanımlayıcı)

İşlem tanımlayıcısı, gelecekteki yanıtı istekle ilişkilendirmek için kullanılır. Bu nedenle, bir seferde, bir TCP bağlantısında, bu tanımlayıcı benzersiz olmalıdır. İşlem tanımlayıcısını kullanmanın birkaç yolu vardır:

  •  Örneğin, her istekte artan bir sayaç ile basit bir “TCP sıra numarası” olarak kullanılabilir.
  • Geçerli uzak sunucuyu ve bekleyen MODBUS isteğini hafızaya almak amacıyla bir işlem bağlamını tanımlamak için smart index veya pointer olarak da kullanılabilir.

Normal olarak, MODBUS seri hattında bir istemci her seferinde bir istek göndermelidir. Bu, istemcinin ikinci bir istek göndermeden önce ilk isteğin yanıtını beklemesi gerektiği anlamına gelir. TCP/MODBUS’ta, aynı sunucuya onay beklemeden birden fazla istek gönderilebilir. MODBUS/TCP’den MODBUS’a seri hat ağ geçidi, bu iki davranış arasında uyumluluğu sağlamaktan sorumludur.

Bir sunucu tarafından kabul edilen isteklerin sayısı, sunucunun kaynak sayısı ve TCP pencerelerinin boyutu açısından kapasitesine bağlıdır. Aynı şekilde, bir müşteri tarafından aynı anda başlatılan işlemlerin sayısı da onun kaynak kapasitesine bağlıdır. Bu uygulama parametresine “NumberMaxOfClientTransaction” adı verilir ve MODBUS istemci özelliklerinden biri olarak tanımlanmalıdır. Cihaz tipine göre bu parametre 1 ile 16 arasında bir değer alabilir.

• Unit Identifier (Birim Tanımlayıcı)

Bu alan, bir MODBUS+ veya MODBUS seri hat alt ağında bir cihaz adreslenirken yönlendirme amacıyla kullanılır. Bu durumda, “Birim Tanımlayıcı”, uzak cihazın MODBUS slave adresini taşır:

MODBUS sunucusu bir MODBUS+ veya MODBUS Seri Hat alt ağına bağlıysa ve bir köprü veya ağ geçidi üzerinden adresleniyorsa, köprü veya ağ geçidinin arkasındaki alt ağa bağlı slave cihazı tanımlamak için MODBUS Ünite tanımlayıcısı gereklidir. Hedef IP adresi köprünün kendisini tanımlar ve köprü, isteği doğru slave cihaza iletmek için MODBUS Birimi tanımlayıcısını kullanır.

Seri hattaki MODBUS slave cihaz adresleri 1’den 247’ye (ondalık) atanır. Adres 0, yayın adresi (broadcast address) olarak kullanılır.

TCP/IP’de MODBUS sunucusu IP adresi kullanılarak adreslenir; bu nedenle, MODBUS Unit Identifier (Birim Tanımlayıcısı) işe yaramaz. 0xFF değeri kullanılmalıdır.

Doğrudan bir TCP/IP ağına bağlı bir MODBUS sunucusunu adreslerken,  “Birim Tanımlayıcısı” alanında önemli bir MODBUS slave adresi kullanılmaması önerilir. IP adreslerinin otomatik bir sistem içinde yeniden tahsis edilmesi durumunda ve daha önce bir MODBUS sunucusuna atanan bir IP adresi daha sonra bir ağ geçidine atanırsa, önemli bir slave adresin kullanılması, ağ geçidi tarafından kötü bir yönlendirme nedeniyle sorunlara neden olabilir. Önemli olmayan (non-significant) bir slave adres kullanarak, ağ geçidi MODBUS PDU’yu sorunsuz bir şekilde atacaktır. “Birim Tanımlayıcı” için önemsiz değer olarak 0xFF önerilir.

Açıklama: 0 değeri ayrıca doğrudan bir MODBUS/TCP cihazıyla iletişim kurmak için kabul edilir.

4.4.1.3. MODBUS Onayı İşlemi

4.4.1.3. MODBUS Onayı İşlemi

Bir TCP bağlantısında bir yanıt çerçevesi (response frame) alındığında, MBAP başlığında taşınan (Transaction Identifier) İşlem Tanımlayıcısı, yanıtı o TCP bağlantısında daha önce gönderilen orijinal istekle ilişkilendirmek için kullanılır:

  • Transaction Identifier (İşlem Tanımlayıcı) herhangi bir MODBUS bekleyen işleme atıfta bulunmuyorsa, yanıt atılmalıdır.
  • Transaction Identifier (İşlem Tanımlayıcı), bekleyen bir MODBUS işlemine atıfta bulunuyorsa, Kullanıcı Uygulamasına bir MODBUS Onayı (olumlu veya olumsuz onay) göndermek için yanıt ayrıştırılmalıdır.

Yanıtın ayrıştırılması, MBAP Başlığının ve MODBUS PDU yanıtının doğrulanmasından oluşur:

  • MBAP Başlığı

0x0000 olması gereken Protocol Identifier (Protokol Tanımlayıcısının) doğrulanmasından sonra, uzunluk MODBUS yanıtının boyutunu verir.

Yanıt, doğrudan TCP/IP ağına bağlı bir MODBUS sunucu cihazından gelirse, TCP bağlantısı tanımlaması, uzak sunucuyu açık bir şekilde tanımlamak için yeterlidir. Bu nedenle, MBAP başlığında taşınan Unit Identifier (Birim Tanımlayıcı) önemli değildir (değer 0Xff) ve atılmalıdır.

Uzak sunucu bir Seri Hat alt ağına bağlıysa ve yanıt bir köprüde, yönlendiriciden veya ağ geçidinden geliyorsa, Unit Identifier (Birim Tanımlayıcı) (değer !=0xFF), yanıtı orijinal olarak göndermiş olan uzak MODBUS sunucusunu tanımlar.

  • MODBUS Response PDU (MODBUS Yanıt PDU)

Function Code (Fonksiyon kodu) doğrulanmalı ve MODBUS yanıt formatı MODBUS Uygulama Protokolüne göre analiz edilmelidir:

• fonksiyon kodu istekte kullanılan ile aynı ise ve cevap formatı doğru ise kullanıcı uygulamasına MODBUS cevabı Olumlu Onay olarak verilir.

• Fonksiyon kodu bir MODBUS istisna kodu ise (Fonksiyon kodu + 80H), MODBUS istisna yanıtı kullanıcı uygulamasına Olumlu Onay olarak verilir.

•  Fonksiyon kodu istekte kullanılandan farklıysa (=beklenmeyen fonksiyon kodu) veya yanıtın biçimi yanlışsa, kullanıcı uygulamasına bir Olumsuz Onay kullanarak bir hata sinyali verilir.

Not: Olumlu bir onay, komutun sunucu tarafından alındığını ve yanıtlandığını gösteren bir onaydır. Sunucunun komut üzerinde başarılı bir şekilde hareket edebildiği anlamına gelmez (komut üzerinde başarılı bir şekilde hareket edememe durumu, MODBUS İstisna yanıtı ile gösterilir).

Aşağıdaki aktivite şeması, doğrulama işleme aşamasını MODBUS İstemci Aktivite Şeması’ndakinden daha ayrıntılı olarak açıklamaktadır.

Bir yanıt yazın

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