RS485 Modbus

feridun34

Üye
Katılım
12 Nis 2009
Mesajlar
26
Puanları
1
Yaş
37
Merhaba arkadaşlar. Ben RS485 hattı üzerinden iki mikrodenetleyici arasında MODBUS RTU protokolünü uygulamaya çalışıyorum. Daha önce bunu gerçekleştirmiş olan arkadaşlar varsa yardımcı olabilirmi. İşin içinden çıkamadım bir türlü.
 
Epey zaman gecmis ancak sonradan ilgilelenler için ögrendiklerimi anlatmaya calısayım.
işin içine girince çok basit oldugunu göreceksiniz.Mantıgı bir bilgi gönderilecegi zaman alacak cihazın adresi,alacak cihazın ne yapacagı,giden bilginin uzunlugu,giden bilgi ve sonunada bu gonderdıklerının gidecegi yere dogru gittiginin teyidi için crc denen bir kontrol bilgisi gönderiliyor.Karsı cihazda buna benzer sekilde bir cavabı geri gönderiyor.Giden veya gelen bilginin formatlarını MODBUS ile ilgili web sayfalarından bulabilirsiniz.Ancak biraz gıcık olanı CRC denen bilginin hesaplanması.Bununla ilgilide internette epeyce bilgi var.Ben kendi deneylerim için kücük bir program yazdım,gidecek bilginin CRC sini hesaplayıp gönderiyor ve karşıdan gelen bilgiyi alıyor.İşinize yarayabilir düşüncesiyle.www.alarmko.net/download linkinden MODBUS CRC HESAPLAMA adlı programı indirebilirsiniz.
Kolay gelsin.
 
Epey zaman gecmis ancak sonradan ilgilelenler için ögrendiklerimi anlatmaya calısayım.
işin içine girince çok basit oldugunu göreceksiniz.Mantıgı bir bilgi gönderilecegi zaman alacak cihazın adresi,alacak cihazın ne yapacagı,giden bilginin uzunlugu,giden bilgi ve sonunada bu gonderdıklerının gidecegi yere dogru gittiginin teyidi için crc denen bir kontrol bilgisi gönderiliyor.Karsı cihazda buna benzer sekilde bir cavabı geri gönderiyor.Giden veya gelen bilginin formatlarını MODBUS ile ilgili web sayfalarından bulabilirsiniz.Ancak biraz gıcık olanı CRC denen bilginin hesaplanması.Bununla ilgilide internette epeyce bilgi var.Ben kendi deneylerim için kücük bir program yazdım,gidecek bilginin CRC sini hesaplayıp gönderiyor ve karşıdan gelen bilgiyi alıyor.İşinize yarayabilir düşüncesiyle.www.alarmko.net/download linkinden MODBUS CRC HESAPLAMA adlı programı indirebilirsiniz.
Kolay gelsin.
Modbus haberleşmeyi anlatan döküman, not gibi şeyler var mı elinizde. Pek kaynak bulunmuyor.
 
13:14:46.154 [ID: 00283] INIT: Write Multiple Registers (code $10)
13:14:46.170 [-------->] SEND: 01 10 00 00 00 08 10 00 0B 00 16 00 21 00 2C 00 00 00 00 00 00 00 00 06 61
13:14:46.232 [<--------] RECV: 01 10 00 00 00 08 C1 CF
13:14:46.232 [ID: 00283] DONE: Write Multiple Registers (code $10)
13:14:46.248 [ID: 00283] PASS: Normal response
13:14:46.263 8 holding registers were processed.
13:14:46.263 Value of holding register 0 is 11
13:14:46.279 Value of holding register 1 is 22
13:14:46.294 Value of holding register 2 is 33
13:14:46.294 Value of holding register 3 is 44
13:14:46.310 Value of holding register 4 is 0
13:14:46.326 Value of holding register 5 is 0
13:14:46.326 Value of holding register 6 is 0
13:14:46.341 Value of holding register 7 is 0


13:15:26.074 [ID: 00284] INIT: Read Input Registers (code $04)
13:15:26.090 [-------->] SEND: 01 04 00 00 00 08 F1 CC
13:15:26.152 [<--------] RECV: 01 04 10 00 0B 00 16 00 21 00 2C 00 00 00 00 00 00 00 00 4A 80
13:15:26.152 [ID: 00284] DONE: Read Input Registers (code $04)
13:15:26.168 [ID: 00284] PASS: Normal response
13:15:26.184 8 input registers were processed.
13:15:26.184 Value of input register 0 is 11
13:15:26.199 Value of input register 1 is 22
13:15:26.215 Value of input register 2 is 33
13:15:26.215 Value of input register 3 is 44
13:15:26.230 Value of input register 4 is 0
13:15:26.246 Value of input register 5 is 0
13:15:26.246 Value of input register 6 is 0
13:15:26.262 Value of input register 7 is 0


*****************************************************************
13:16:01.565 [ID: 00285] INIT: Write Multiple Coils (code $0F)
13:16:01.580 [-------->] SEND: 01 0F 00 00 00 08 01 3C FE 84
13:16:01.643 [<--------] RECV: 01 0F 00 00 00 08 54 0D
13:16:01.643 [ID: 00285] DONE: Write Multiple Coils (code $0F)
13:16:01.658 [ID: 00285] PASS: Normal response
13:16:01.658 8 coils were processed.
13:16:01.674 Coil 0 is OFF.
13:16:01.689 Coil 1 is OFF.
13:16:01.689 Coil 2 is ON.
13:16:01.705 Coil 3 is ON.
13:16:01.705 Coil 4 is ON.
13:16:01.721 Coil 5 is ON.
13:16:01.736 Coil 6 is OFF.
13:16:01.736 Coil 7 is OFF.

13:16:27.227 [ID: 00286] INIT: Read Discrete Inputs (code $02)
13:16:27.227 [-------->] SEND: 01 02 00 01 00 08 28 0C
13:16:27.305 [<--------] RECV: 01 02 01 2D 61 95
13:16:27.305 [ID: 00286] DONE: Read Discrete Inputs (code $02)
13:16:27.320 [ID: 00286] PASS: Normal response
13:16:27.320 8 discrete inputs were processed.
13:16:27.336 Discrete input 1 is ON.
13:16:27.351 Discrete input 2 is OFF.
13:16:27.351 Discrete input 3 is ON.
13:16:27.367 Discrete input 4 is ON.
13:16:27.383 Discrete input 5 is OFF.
13:16:27.383 Discrete input 6 is ON.
13:16:27.398 Discrete input 7 is OFF.
13:16:27.414 Discrete input 8 is OFF.

burada giden ve gelen verileri incelersen işi çözebilirsin.
mesela giden bilgi için:
13:15:26.090 [-------->] SEND: 01 04 00 00 00 08 F1 CC
register okuma işleminde
01 cihaz id nosunu
04 register okuma işleminin yapılanacagını
00 00 okunacak registerin baslangıc adresini (hıgh kısmı ve low kısmı)
00 08 okunacak word saysını(8 word okunacak yanı 16 byte okunacak)
F1 CC bilgi güvenligini sayglayan crc bilgisidir

gelen bilgi için
13:15:26.152 [<--------] RECV: 01 04 10 00 0B 00 16 00 21 00 2C 00 00 00 00 00 00 00 00 4A 80
01 cihaz id no
04 işlem no(register okuma işlemi yapıldıgını ifade ediyor)
10 00 (low ve high kismı olmak üzere 10hex=16 adet bayt ın gonderildigini
0B 00 ===>birinci gelen bilgi(2 byte)
16 00 ===>ikinci bilgi
21 00 ===> ucuncu bilgi
.
.
.
4A 80 ===>CRC

Kolay gelsin
 

Forum istatistikleri

Konular
129,867
Mesajlar
930,872
Kullanıcılar
452,732
Son üye
erencok

Yeni konular

Geri
Üst