Modbus Rtu Örnek Protokol?

fultek_salih

Fultek Temsilcisi
Katılım
2 Nis 2008
Mesajlar
315
Puanları
6
Yaş
53
Konumuz git gide daha komplike hale geliyor. Bu noktadan itibaren bir çok dala ayrılması gerekiyor. Plc’de nasıl yapılır,Bilgisayarda nasıl yapılır, Chip ile nasıl yapılır konunun ana başlıklarıdır. Biz örnek bir modbus stringi oluşturma ve sitemin genel işleyişi hakkında bilgi vermekle yetineceğiz. Sistem bir master ve isteğe bağlı bir veya daha çok slave modülden oluşur. Master slave modüllere sorgu gönderir ve sorguyu alan modüllerden adresi uyan(sadece bir modüldür.) modül sorgunun gereği olan işi yapar ve cevabı master’a gönderir. Master sırayla tüm slave modülleri tarar ve benzer operasyonlar yürütür. Örnek bir strink oluşturalım. 10 adet slave ve bir masterdan oluşan networkümüz olduğunu varsayalım. İlk olarak registers adresleri hakkında bilgi verelim. Her slave cihaz masterın sorgusuna karşı eylem gerçekleştireceği hafıza alanına sahiptir. Örneğin elektrik sayacımız registers 40001 adresinde anlık akım,40002 adresinde anlık güç,40003 adresinde toplam güç olsun. Master bu cihaza erişip 40001 registers’ındaki bilgiyi gönder diyecek cihazda bunu göndericek, başka bir sorguda farklı bir registers’dan bilgi okumak isteyebilir veya yazmak isteyebilir. Tüm bunları örneğimizde anlatacağız.

Master bilgi okumak için oluşturduğu string:

Slave cihaz adresi…………………..01 1.byte Her cihazın farklı bir adresi vardır ve master’ın adresi olmaz.

Fonksiyon kodu……………………..03 Bilgi okumak için 03. Sonraki bölümlerde daha fazla bilgi bulabilirsiniz.

Registers başlangıç adresi……..0000 2.byte (Registers adresi “30001” + ofset”-30001” = 0)

Okunacak registers sayısı………0001 2.byte

Crc 16…………………………….FA4E 2.byte Gönderilen tüm datalar belli bir formülden geçirilir ve sonucu string’e eklenir. Slave cihaz aldığı stringi aynı formülden geçirir ve sonuç aynı olursa bilgiyi işler aksi taktirde işlemez.Böylece hatalı bilgi gönderilmesinin önüne geçilmiş olur.teroik olarak %100 olmasada pratikte %100 etkilidir.

Yukarıdaki sorguyu alan adresi 1 olan cihaz aşağıdaki cevabı verecektir. Networkdeki diğer cihazlar ise bekleyecektir.

Slave’in gönderdiği cevap:

Slave cihaz adresi…………………….01 1 byte

Fonksiyon kodu……………………….03 1 byte

Gönderdiği byte sayısı……………….02 1 byte

Data………………………………...0000 2 byte ilk byte yüksek değerli 2.byte düşük değerli sonuç = (1.byte x 256) + 2.byte

Crc 16……………………………...B844



En çok kullanılan fonksiyon kodları:

3 = bilgileri okuma

6 = 1 registers(word) bilgi yazma. Master Slave yazıyor.

16 = 1’den fazla registers(word) bilgi yazma. Master Slave yazıyor.



Genelde tüm cihazlar bu kodları destekler ancak fonksiyon kodları aslında daha çoktur. Fakat çok gerekli olmadığından bir çok cihaz bunları desteklemez.



Crc 16 hesaplama:

Crc hesaplama başlı başına bir iştir. ASCII ve RTU’da farklı formüller kullanıldığı gibi 8 bit ,16 bit ve 32 bit hesaplamada kullanılır. En yaygın olanı RTU ve 16 bit’tir. Sistem gönderdiği tüm byteları CRC 16 formülünden geçirir ve sonucunda 2 byte’lık hex bir değer üretir. Bu değeride gönderdiği stringin sonunda alıcı cihaza gönderiri alıcı cihaz aldığı tüm byteları aynı formülden geçirir ve kendi crc’sini oluşturur. Her iki crc’yi karşılaştırır ve sonuç aynı ise bilgiyi doğru şekilde aldığını anlar ve gerekeni yapar. Endüstriye ortamda elektrik gürültüleri sebebiyle seri haberleşme hattında bilgi bozulmaları sık sık olur bu yöntem bu hatadan dolayı sistemde istenmeyen durumlar oluşmasını önler. Yinede basit uygulamalarda sabit crc kullanabilirsiniz. Örneğin belli cihazlara hep aynı sorguyu gönderiyorsanız her cihaz için bir crc oluşturup her seferinde aynı crc’yi gönderirsiniz. Bilgi aldığınızdada son iki byte bakmayıp crc fonksiyonunu devre dışı bırakabilirsiniz. Bunu yaptığınızda bilgi bozulmalarından dolayı çıkacak sorunlarada hazır olmalısınız.



High level(yüksek düzey) programcı iseniz crc hesaplama ile uğraşmanıza gerek yok zaten yazdığınız arayüzde modbus wizard mevcuttur ve crc’yi kendisi oluşturacaktır. High level programlama aslında düşük seviyedir. Yani low level Assembly’dır , bir üstü proton,picC,Hitech,Microcode ve benzeri chip programları ve C,VB gibi bilgisayar programlarıdır, Daha üstü(high level) Plc softwareları, Scada şeklinde gitmektedir. Fultek Modbus Rtu Server ile bunların hiçbiriyle uğraşmadan tüm Modbus Rtu cihazlardan bilgi toplayıp yaza bilirsiniz. Yapmanız gereken sadece registers adreslerini girmektir.

Salih Küçükbayrak
Fultek Kontrol Sistemleri
www.fultek.com.tr
 
vermiş olduğunuz bilgiler için tşk ederim. CRC-16 hesaplamasınıda bize anlatırsan çok memnun olacam
 
CCS C derleyicisinin örnekleri arasında CRC8, CRC16 ve CRC32 hesaplama kodları var. Detayını bilmeniz size çok fazla bir şey kazandırmaz. Bilmek isterseniz de örneklerden faydalanabilrsiniz.

Hocam size bir iki soru sorayım:

CRC 16 yı gönderirken de mi MSB önce gönderiliyor?
-3001 ofset değeri bütün fonksiyon kodları için geçerli mi?
IP modbus ta aynı protokol geçerli midir? Örneğin IP adresi node adres olarak kullanılabilir.
 
siz galiba kopyala yapıştır olanlardansınız .İçeriği bilinmeyen işi ne kadar ilerletebilirsinizki crc bir matematiksel denklem tabiki bunun bir formulü mevcut siz !!!kopyala yapıştıra devam edin!!!
 
anil43 ' Alıntı:
siz galiba kopyala yapıştır olanlardansınız .İçeriği bilinmeyen işi ne kadar ilerletebilirsinizki crc bir matematiksel denklem tabiki bunun bir formulü mevcut siz !!!kopyala yapıştıra devam edin!!!
CRC8, 16 ve 32 nin nasıl hesaplandığı bellirdir. Yazılmış bir kod varken yeniden kod yazmak bana ters gelir. Ben kopyala yapıştırcılardanım. Ama iyi kopyala, yapıştır, düzelt, kendine uyarlacılardanım. Kopyalayacağım kodu önce test ederim, kaldı ki ticari bir programın örneği de test edilmeden verilmez. Emin olduktan sonra kopyalarım. !!! Kopyalamamızı istemeseydi kopya vermezdi !!!

Not: Kamuda görevli ve mesleği elektrik veya Elektronik olmayan biriyim. Elektronik ile hobi olarak ilgileniyorum. Öğrenmenin en güzel yolu da kopyalamaktan geçer. 50 yıl önce Japonya ve Şimdi Çin'in yaptığı gibi...
 
Karşınızda ki şahsın teknik seviyesine değer biçebilmeniz için, sizin en az o şahıs kadar konuya vakıf olmanız gerekir.


Mütevazilik erdemdir Z.E. Üstadım, lakin sizin ki biraz fazla olmamış mı hobi deyince. Sonra böyle oluyor... ( Erdal haklı olarak kızmaya başladı bize ARM için, onuda hatırlatayım abi. :-[)
 
Katana Hocam, biliyorsunuz fazla zaman ayıramıyorum ayırdığım zaman da uğraşım ancak hobi seviyesinde kalıyor. Ayırabilsem bizim Arm9 projemize katkı sağlayacağım. Erdal tek başına bir ordu gibi ama yine de haklı olarak tek başına herşeyi çözmek onu da sıkıntıya sokuyor. O proje için taze bir kan buldum, inşaallah çok güzel uygulamalar ortaya çıkacak. İnşaallah bütün protokolleri gömeceğiz powarm içerisine.
 
Selamlar,
Arkadaşlar copy-paste bir sanattır fakat eğer copy paste yapılan şeyin içeriğine hakim değilsek o zaman herşeyin karışma ihtimali yüksektir. CRC hesabının belli bir formülü var. ama gerçetken öğrenmeye uğraşmaya değmez. eğer görmek istersenizbir excel tablosunda oluşturup gönderebilirim. ama bazı şeyleri ana hatları ile neye yaradığı bilip devam etmekte fayda var yoksa bi bakmışsınız çok zaman kaybetmişsiniz gereksiz yere. benim gibi :)

kolay gelsin,
 
Alt tarafı bir crc ne kadar büyüttünüz.
Karşılıklı iki ajan anlaşıyor. Bir birlerine telgraf ile mesaj gönderiyorlar. Mesajların doğru kişiden ve araya bir şey eklenmeden geldiğini anlamak için mesajdaki her harfin alfabedeki sırasını bir birleri ile çarpıyor. Tabii rakam çok büyük bununda son iki bytını mesajın sonuna yazıyorlar. Mesajı alan aynı hesabı yapıyor, sonuç aynı ise mesaj güvenilir farklı ise postacı da ajan demektir.

Ajanlar tek olmadığı gibi protokoller de tek değildir. Dolayısıyla 16 bit crc için bir çok formul olduğu gibi 8,16,32 bitlik formatlarıda var. Örneğin Modbus rtu ile Modbus ascii formulu farklı olabilir. Her protokolün crc formulu bir şekilde kopyalanıp projenize yapıştırılmalıdır. Bazılarıda crc formulünü en detayına kadar öğrenmeli. Zira insanlar farklılıkları ile zenginleşirler.


Crc hakkında daha fazla bilgi isteyenler için.
On-line CRC calculation and free library
 
salih bey noktayı koymuş gerçekten, yani ihtiyacımız olursa tabi ki bilmekte fayda var ama sadece bi ayrıntı olarak kalacaksa...
zaman kaybından başka bişey değil...
Adam haklı beyler
 

Forum istatistikleri

Konular
130,050
Mesajlar
932,530
Kullanıcılar
453,028
Son üye
burakacer

Yeni konular

Geri
Üst