1. GÝRÝÞ ENDA MODBUS PROTOKOLÜ Modbus protokolü istemci/sunucu mimarisine dayalý bir endüstriyel iletiþim protokolüdür. Ýlk kez Modicon firmasý tarafýndan geliþtirilmiþ bir standart olup sahadaki cihazlar ile RS485 standardýný kullanarak veri alýnýp gönderilmesi iþlevini görür. Ayrýntýlý bilgi için Modicon Modbus Protokolü Referans Rehberine bakýlabilir (PI-MBUS-300 Rev.J). Enda firmasýnýnýn Modbus Protokolünü destekleyen cihazlarý için desteklenen iletiþim özellikleri aþaðýdaki tabloda verilmiþtir. Arabirim Standardý Ýletiþim Sistemi RS-485 Yarý Çift Senkronizasyon Sistemi Start Stop Senkronizasyonu Veri Uzunluðu 8 Bit Parite NONE Hata Kontrol Sistemi CRC Baud Rate 1200,2400,4800,9600,19200 bps Baðlanabilecek Maksimum Cihaz Adedi 128 Maksimum hat uzunluðu 1200 m Yöneten (Master) A B COM. Yönetilen (Slave) Yönetilen (Slave) Yönetilen (Slave) A B COM. A B COM. A B COM. 120 Ohm 120 Ohm Baðlantý þekli olarak yukarýdaki konfigürasyon kullanýlmalýdýr. Yýldýz ya da aðaç þeklindeki baðlantýlar veri kayýplarýna sebep olabileceði için tavsiye edilmez. Maksimum kablo uzunluðu haberleþme hýzýna (baud rate), kablo özelliðine (kapasite, karakteristik empedans vb.) ve hattaki cihaz sayýsýna göre deðiþir. Örneðin 9600 baud rate ve AWG26 kablo kullanýldýðýnda maksimum uzunluk 1000 m olmalýdýr. Hattýn baþýnda ve sonunda 120 Ohm sonlandýrma direnci kullanýlmalýdýr. 2. MODBUS PROTOKOLÜ 2.1 Genel Tanýmlama Modbus protokolü bilgi gönderip alýrken Yöneten (Master) / Yönetilen (Slave) yöntemini kullanýr. Bir Modbus aðýnda 1 Yöneten (Master) cihaz ve maksimum 247 Yönetilen (Slave) cihaz bulunabilmektedir. Yönetilen sürekli Yönetenden gelen mesajlarý dinlemede kalmalýdýr. Sürekli gelen mesajlarý dinler ve gönderilen adres bilgisini kontrol eder. Eðer adres kendisinin adresi ise gelen mesaja cevap gönderir. Bir mesaj için kullanýlan çerçeve aþaðýdaki gibi 4 bloðun peþpeþe gönderilmesiyle oluþturulmaktadýr. i Veri Hata Kontrol Modbus Mesajý 1/9 MODBUS-T-01
Ýlk olarak adres bilgisi ile, mesajýn hangi Yönetilen'e gönderildiði belirtilir. Daha sonra hangi fonksiyonun uygulanacaðý belirtilir. Ardýndan veri gönderilir. En son olarak da verinin doðru gönderilip gönderilmediðini kontrol etmek için CRC veya LRC kodu gönderilir. Cevap veren Yönetilen ise yine ayný formatta cevap verir. Master tarafýndan Gönderilen Sorgu Mesajý Sorgu Verisi Cevap Verisi Hata Kontrol (LRC ya da CRC) Hata Kontrol (LRC ya da CRC) Slave tarafýndan Gönderilen Cevap Mesajý 2.2 Modbus Mesaj Çerçevelemesi ASCII Çerçevelemesi Ascii çerçevelemesinde mesajlar iki nokta (:) karakteriyle baþlar ve (CR-LF) Ascii karakterleriyle bitirilir( Hex karþýlýklarý 0x0D ve 0x0A) BAÞLANGIÇ ADRES FONKSÝYON VERÝ LRC KONTROL SON 1 KARAKTER 2 KARAKTER 2 KARAKTER N KARAKTER 2 KARAKTER 2 KARAKTER (CRLF) RTU Çerçevelemesi RTU çerçevelemesinde mesajlar en az 3.5 karakter süresi kadar boþluk gönderilerek baþlatýlýr. Daha sonra sýrasýyla Adres, Fonksiyon, Veri ve CRC kontrol ile bitirilir. Çoðunlukla daha hýzlý olduðu için RTU çerçevelemesi kullanýlmaktadýr. Veri gönderimi aþaðýdaki þekilde görüldüðü gibi yapýlmaktadýr. BAÞLANGIÇ ADRES FONKSÝYON VERÝ CRC KONTROL SON T1-T2-T3-T4 8 BÝT 8 BÝT N * 8 BÝT 16 BÝT T1-T2-T3-T4 Adres Bölümü : Bu kýsýmda veriyi alacak olan slave'in adresi belirtilir. Geçerli slave adres numaralarý 1-247 arasýndadýr. Yöneten (Master) sahadaki hangi Yönetilen'e (Slave'e) bilgi gönderecekse onun adresini yazar. Cevap veren Yönetilen (Slave) ise ayný bölüme kendi adresini tekrar yazarak cevap verir. Bu sayede Yöneten (Master) doðru adresten bilgi geldiðini anlar. Fonksiyon Bölümü : Geçerli fonksiyon kodlarý 1-255 arasýndadýr. Yönetenden (Masterdan) Yönetilene (Slave'e) bir mesaj gönderildiðinde Fonksiyon koduna göre o cihazýn hangi çeþit iþlem yapacaðý belirtilir. Yönetilen cevap verdiðinde fonksiyon kodu bölümüne bakarak Yönetilen'in (slave in) uygun cevap verip vermediði anlaþýlýr. Yönetilen (Slave) eðer herhangi bir uygunsuzluk sebebiyle hata kodu gönderecek ise Fonksiyon kodunun en deðerlikli bitini lojik 1 yaparak geri gönderir. Bu durumda Yöneten (Master) hangi çeþit hatanýn oluþtuðunu anlar. Hata kodlarýndan ileride ayrýntýlý olarak bahsedilecektir. Veri Bölümü : Veri bölümündeki bilgi fonksiyon kodu ile tanýmlanan fonksiyona göre hangi verinin kullanýlmasý gerektiðini belirtir. Veri bölümünün uzunluðu 1-244 byte arasýnda olabilmektedir. 2/9 MODBUS-T-01
Hata Kontrol Bölümü : ASCII ve RTU çerçevelemelerinde iki deðiþik hata kontrol yöntemi kullanýlmaktadýr. RTU çerçevelemesinde CRC yöntemi kullanýlmaktadýr. ASCII çerçevelemesinde ise LRC yöntemi kullanýlmaktadýr.ancak Enda cihazlarýnda sadece Modbus RTU protokolü uygulandýðý için burada sadece CRC kontrolü yönteminden bahsedilecektir. CRC Kontrolü RTU modunda gönderilen ve alýnan her mesajýn içerisinde CRC kodu bulunmalýdýr. Bunun amacý gelen bilginin hat üzerinde bütünlüðünün bozulmadan geldiðini anlayabilmektir. Çerçevedeki tüm veriler kullanýlarak CRC-16 algoritmasýna göre 2 Byte uzunluðunda CRC kodu oluþturulur. Algoritmanýn detaylarýna burada girilmeyecektir. 2.3 Modbus Veri Modeli MODBUS veri modeli dört guruba ayrýlýr.deðiþik fonksiyonlar için deðiþik veri gruplarý tahsis edilmiþtir. Veri Tipi Nesne Tipi Eriþim Þekli Adres Aralýðý Discretes Input 1 bit Sadece Okunabilir 0 FFFFh Coils 1 bit Okunabilir ve Yazýlabilir 0 FFFFh Input Registers 16-bit word Sadece Okunabilir 0 FFFFh Holding Registers 16-bit word Okunabilir ve Yazýlabilir 0 FFFFh Görüldüðü gibi Modbus aðýna baðlý her cihazda verilerin okunup yazýlmasý için belli bellek bölgeleri tahsis edilmesi gerekmektedir. Veri tipine göre deðiþik 4 ayrý bellek bölgesi tahsis edilmelidir. Modbus protokolünde 4 deðiþik veri formatý kullanýlmaktadýr. Adres aralýklarý ayný fakat fiziksel olarak bellek bölgeleri farklýdýr. Her fonksiyon kendisi ile ilgili bellek bölgesine veri yazar yada okur. Coils Coiller 1 bit ile temsil edilebilen sistem deðiþkenlerinin deðiþtirilebilmesini yada gözlemlenmesini saðlar. Örneðin bir rölenin açýk yada kapalý oluþu,bir fonksiyonun aktif olup olmayýþý gibi. 0-FFFFh adres bölgesinde adreslenebilmektedir. Discretes Input Dijital giriþlerin ON / OFF olma konumlarýný okumak için kullanýlýr. Bu bellek bölgesinden sadece okuma yapýlabilmektedir. Örneðin bir PLC de dijital giriþlerin hangi konumda bulunduðunu okumak için kullanýlabilmektedir. Adres bölgesi 0-FFFFh aralýðýndadýr. Input Registers Bu bellek bölgesi cihazlardan analog giriþleri okumak için yada cihazlardan bilgi toplamak için kullanýlabilir. Bu registerlar 16 bit uzunluðunda olup sadece verileri okuma amacýyla kullanýlmaktadýr. Adres bölgesi 0-FFFFh aralýðýndadýr. Holding Registers Bu bellek bölgesi sahadaki cihazdan eðer varsa analog çýkýþlarýn deðerlerini yada cihazlara herhangi bir bilgi yollamak amacýyla kullanýlabilmektedir. Adres bölgesi 0-FFFFh aralýðýndadýr. EUC442 UNIVERSAL CONTROLLER için maksimum veri sayýlarý: Anlamý Bir Mesaj Ýçindeki Maksimum Veri Sayýsý Mesajýn Maksimum Uzunluðu(Byte) (01) h Coilleri oku 16 bit (02) h Discrete inputlarý oku 16 bit (03) h Holding Registerlarý Oku 33 Word 72 Byte (04) h Input Registerlarý Oku 1 Word (06) h Tek Holding Registerý Oku 1 Word (0F) h Coillere Yaz 16 bit (10) h Holding Registerlara Yaz 33 Word 72 Byte 3/9 MODBUS-T-01
2.4 Modbus Fonksiyon Kodlarý ve Tanýmlamalarý 2.4.1 Read Coil Status (01h) Bu fonksiyon kodu (0000 FFFFh) adresleri arasýnda bit düzeyindeki verileri okumak için kullanýlmaktadýr. Eðer 8 bitin katlarýndan az ise geriye kalan bitler için 0 koyulur. 2.4.2 Read Discrete Inputs (02h) Bir mesajda okunabilecek maksimum bit sayýsý 2000 (07D0h) Bu fonksiyon kodu (0000 FFFFh) adresleri arasýnda bit düzeyindeki kontrol çýkýþlarýný okumak için kullanýlmaktadýr. Mesajýn yapýsý Read Coil Status fonksiyonundaki gibidir. Bir mesajda okunabilecek maksimum bit sayýsý 2000 (07D0h) Okunacak Coillerin Okunacak Coil Sayýsý(N) Toplam ( INTEGER{(N+7)/8}) Ýlk 8 bitin konumu Sonraki 8 bitin konumu Son 8 bitin konumu Gönderilen Verinin Yapýsý (Baþlangýç adresi +7) adresinde belirtilen Coilin bilgisi Ýlk 8 bitin konumu Sonraki 8 bitin konumu Baþlangýç adresinde belirtilen Coilin bilgisi (Baþlangýç adresi +8) adresinde belirtilen Coilin bilgisi Son 8 bitin konumu Burada (00000) adresinde bulunan Coilin bilgisi istenmektedir. Okunacak Coillerin Ýlk 8 bitin konumu Okunacak Coil Sayýsý(N) (51)h (88)h (FD)h (CA)h Alýnan verinin anlamý: (0) (0) (0) (0) (0) (0) (0) (0) 1 no lu Coil in Deðeri =0 4/9 MODBUS-T-01
2.4.3 Read Holding Registers (03h) Baþlangýç adresi ve miktar belirterek Holding Registerlarýn peþ peþe okunmasýný saðlar. Gelen veriler önce en aðýrlýklý byte() sonra düþük deðerlikli byte() olarak gelir. (03)h Bir mesajda okunabilecek maksimum word sayýsý 125 (7D0h) Word Okunacak Registerlarýn Okunacak Register Sayýsý(N) 1 125 Toplam Okunacak Ýstenen ilk verinin içeriði Ýstenen ikinci verinin Ýstenen son verinin Aþaðýdaki mesaj örneðinde adresine sahip olan cihazdan (0015)h göreli adresinden baþlayarak 2 adet Holding Register okunmaktadýr. Bu adreslerden sýcaklýk set deðerinin maksimum ve minimum deðerleri okunmaktadýr. (03)h (03)h Okunacak Registerlarýn Okunacak Register Sayýsý (18)h Okunacak ilk Holding Register ýn içeriði Okunacak ikinci Holding Register ýn içeriði (58)h (0)h (0)h (49)h (58)h Alýnan verinin anlamý: Sýcaklýk set deðerinin maksimum deðeri : (0258)h = (600) Sýcaklýk set deðerinin minimum deðeri : (0000)h = (0) 5/9 MODBUS-T-01
2.4.4 Read Input Registers (04h) Baþlangýç adresi ve miktar belirterek Input Registerlarýn peþ peþe okunmasýný saðlar. Gelen veriler önce en aðýrlýklý byte() sonra düþük deðerlikli byte() olarak gelir. Bir mesajda okunabilecek maksimum word sayýsý 125 (7D0h) Word Mesaj Yapýsý : Okunacak Registerlarýn Okunacak Register Sayýsý(N) 1 125 Toplam Okunacak Ýstenen ilk verinin içeriði Ýstenen ikinci verinin Ýstenen son verinin Aþaðýdaki mesaj örneðinde sahada bulunan (05)h adresine sahip olan cihazdan (0000)h adresinden baþlayarak 1 adet Input Register okunmaktadýr. Adres tablosuna bakýldýðýnda bu adreste ölçülen sýcaklýk deðerinin olduðu görülebilir. (05)h (05)h Okunacak Registerlarýn Okunacak Register Sayýsý Okunacak ilk Input Register ýn içeriði (55)h (88)h (CF)h Alýnan verinin anlamý: Ölçülen Sýcaklýk Deðeri : (0055)h = (85) 6/9 MODBUS-T-01
2.4.5 Write Single Register (06h) Tek bir Holding Register ýn adres belirterek okunmasýný saðlar. Gelen veriler önce en aðýrlýklý byte () sonra düþük deðerlikli byte () olarak gelir. Bir mesajda yazýlabilecek maksimum word sayýsý 1Word Yazýlacak Register ýn Yazýlan Registerýn Yazýlacak verinin içeriði Yazýlacak verinin içeriði Aþaðýdaki mesaj örneðinde sahada bulunan adresine sahip olan cihazdan (0002)h adresinden baþlayarak 1 adet Holding Registere veri yazýlmaktadýr. Adres tablosuna bakýldýðýnda bu adreste Alarm 2 histeresiz parametresinin bulunduðu görülebilir. Yazýlacak Registerýn Yazýlan Registerýn Yazýlacak verinin içeriði (11)h Yazýlacak verinin içeriði (11)h (E9)h (B1)h (E9)h (B1)h Gönderilen verinin anlamý: Alarm2 histeresiz parametresini (11)h = 17 yap 7/9 MODBUS-T-01
2.4.6 Write Multiple Coils (0Fh) Baþlangýç adresi ve miktar belirterek Coillerin On yada Off yapýlmasýný saðlar. Eðer set edilecek coillerin sayýsý 8'in katlarýndan az ise geri kalan bitler için Off yani '0' gönderilir. Bir mesajda yazýlabilecek maksimum coil sayýsý (0F)h 7B0h bit Yazýlacak Coillerin Yazýlacak Coillerin Yazýlacak Coil Sayýsý(N) Yazýlacak Coil Sayýsý(N) Toplam ( INTEGER{(N+7)/8}) Ýlk 8 bitin bilgisi Sonraki 8 bitin bilgisi Son 8 bitin bilgisi (Baþlangýç adresi +7) adresinde belirtilen Coilin verisi Gönderilen Verinin Yapýsý Ýlk 8 bitin verisi Sonraki 8 bitin verisi Baþlangýç adresinde belirtilen Coilin verisi (Baþlangýç adresi +8) adresinde belirtilen Coilin verisi Son 8 bitin verisi (0F)h (0F)h Yazýlacak Coillerin Yazýlacak Coillerin Yazýlacak Coil Sayýsý(N) Yazýlacak Coil Sayýsý(N) Toplam Ýlk 8 bitin bilgisi (03)h (95)h (CB)h (AE)h (96)h (0005) adresli Coili Lojik 1 yap Gönderilen verinin anlamý : (0) (0) (0) (0) (0) (0) (1) (1) (0004) adresli Coili Lojik 1 yap 8/9 MODBUS-T-01
2.4.7 Write Multiple Holding Registers (10h) Baþlangýç adresi ve miktar belirterek Holding Registerlara peþ peþe veri yazmak için kullanýlýr. Gönderilen veriler önce en aðýrlýklý byte() sonra düþük deðerlikli byte() olarak gönderilmelidir. Bir mesajda yazýlabilecek maksimum word sayýsý (10)h 123 (7Bh) word Yazýlacak Registerlarýn Yazýlacak Register Sayýsý(N) Yazýlacak ilk verinin içeriði 1 123 N * 2 Yazýlacak Registerlarýn Yazýlacak Register Sayýsý(N) Yazýlacak ikinci verinin Yazýlacak son verinin (10)h (10)h Yazýlacak Registerlarýn (16)h Yazýlacak Registerlarýn (16)h Yazýlacak Register Sayýsý Yazýlacak Register Sayýsý Yazýlacak ilk verinin (7E)h Yazýlacak ikinci verinin (26)h Gönderilen verinin anlamý: (0016)h adresinde bulunan Ti_set paramatresi = (0x7E) = 12.6 dakika yap (0017)h adresinde bulunan Td_set parametresi = (0x126) = 2.94 dakika yap 9/9 MODBUS-T-01