PIC İLE MODBUS

Başlatan EMKE, 04 Aralık 2014, 12:44:20

EMKE

Arkadaşlar ve büyüklerim sizlerden pıc ile modbus haberleşme protokolüyle ilgili bilgi istiyeceğim internette baya araştırma yaptım yalnız çok karmaşık bilgiler var türkçe kaynaklrdada pek yeterli bilgilere ulaşamadım , bu protokolle master ve slavlerle nasıl haberleşebiliriz master olarak pıc ve slavler olarak pıcler ve ve bu protokolü kullananan diğer profesyonel cihazlarla .Plc uygulamalarımızda bu protokolü kullanıyoruz örnek vereyim plc ile ekranda ve hız kontrol sürücülerinde ama orda herşey hazır zaten sadece bir kaç kod ile diğer slavlerle bağlantı kuruluyor  işin alt yapısında neler dönüyor bunları öğrenmek istiyorum  yani bir pıc ile plc sistemlerinde kullanılan dokunmatik ekranlar ile yada hız kontrol sürücüleri ile vs gibi cihazlarla nasıl haberleşebiliriz yardımlarınızı bekliyorum işin mantığını anlamam lazım tam takır bir hazır program yada başka bir isteiğim yok hazırcı oalrak düşünüp azar şeklinde cevaplar almak istemiyorum ,cevaplarınız için teşekkür ederim şimdiden.

ete

Benden Modbus konusunda bir şey beklemeyin hiç çalışmadım kullanmadım denemedim. Araştırmadımda .

Ete

EMKE

Teşekkür ederim cevabınız için .

EMKE

hiçmi ilgilenen olmadı bu modbus konusunda forumda.

a.zorba

tamam layamadıgım konulardan bir tanesidir .işin özeti aşagıda
alıntıdır .
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
[url=http://www.fultek.com.tr]www.fultek.com.tr[/url]

EMKE

#5
Cevabınız için teşşekkür ederim , bu yazıyı okumuştum daha önce.

Powered by EzPortal