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
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