PIC PLC Haberleşmesi

Başlatan Dogukannn, 21 Mart 2017, 12:10:44

Dogukannn

Öncelikle herkese merhabalar. 16f886 ile Delta PLC SS2'nin MODBUS protokolü ile haberleşmesini istiyorum ama başarılı olamadım. İlk önce PC ile RS485 modulü ile iletişim kurmaya çalıştım bu aşamada kullandığım modul "CH340", kullandığım terminal programı "RealTerm:Serial Capture Program". Yanlış bir bilgiye sahipsem lütfen uyarın, gönderdiğim veriyi RS232 standartı ile gönderme ile RS485 standartı ile gönderme arasındaki fark donanımsal olarak MAX232 ve MAX485 seviye ayarlama entegreleri, yazılımsal olarak da max485 te gönderi yapmak istediğimizde DE pinini lojik1 seviyeye yükseltmek. Ben gayet güzel bir şekilde RS232 ile haberleşirken, RS485 de veri gönderdiğimde standart ascii dışında karakterler gönderiyor. Yazılım dosyalarım (header ve main), de devre çizimim ve de terminal çıktılarım ekte mevcuttur. İlginiz için teşekkürler.

NOT: Çizime baktığınızda butonları yanlış pinlere koyduğumu farkedeceksinizdir, kartı tekrardan düzenleyeceğim, 16f886da sadece B portunda dahili pull-up dirençleri varmış bende bu proje ile öğrenmiş oldum.


Elzemefe

#1
_?

Dogukannn

Hocam RS komutundan kastınızı anlayamadım, şuan ama kısa vadede yapmak istediğim pic'i pc ile rs485 standartında haberleştirmek daha sonra plc kısmına yükleneceğim. Şuan MAX485 entegresini kullanıyorum ve de terminalde gönderdiğim verilere kıyasla çok farklı veriler alıyorum.

magic_gun

Alıntı yapılan: magic_gun - 08 Şubat 2017, 22:00:00

http://www.simplymodbus.ca/faq.htm#Modbus

https://en.wikipedia.org/wiki/Modbus


17 nolu slave cihazın 8 nolu yani Modbus için #30009 nolu registerin durumunu istek yapan Modbus RTU komutunu yazalım.


serout  >  0x11,4,8,1,crc

slave cihazdan gelmesi gereken yanıt ,,

serin   <  0x11,4,2,x,crc

x= okumak istediğimiz değer :

saygılarımla



crc hesap :)




Movlw 8
Movwf CRC_C
CRC_Loop:
Movf CRC,W
Xorwf CRC_B,W
Clrc
Rrf CRCH,1
Rrf CRC,1
Andlw 1
Bz CRC_Skip
Movlw 0xA0
Xorwf CRCH
Movlw 0x01
Xorwf CRC
CRC_Skip:
Rrf CRC_B,1
Decfsz CRC_C
Jump CRC_Loop


hayal etemeden basaramazsınız
u cnt achieve w/out dreamin

Elzemefe

#4
_?

Dogukannn

Cevap için teşekkürler yalnız ben koda henüz modbus için gerekli fonksiyonları ve komutları eklemedim. Modbus için gerekli CRC ve bitiş için 0D 0A komutları da var farkındayım. Benim kısa vadede sıkıntım RS485 standartıyla PC ye veri göndermek.
Aslında biraz belki kolaya kaçmak belki ne yapmam gerektiğini öğrenmek için bir adım olacak ama

3a 30 31 30 35 30 35 30 31 30 30 30 30 46 34 0d 0a
:01 05 05 01 00 00 F4 ..        (RST)

3a 30 31 30 35 30 35 30 31 46 46 30 30 46 35 0d 0a
:01 05 0501 FF00 F5..            (SET)

Elimde 2 adet plc var ve de birbirleri ile modbus protokolü ile haberleşiyorlar ve de birinde X1 kontağına basıldığında diğerinde Y1 çıkışı aktif oluyor. 2 plc den slave olanı çıkartıp benim kartımı taktıktan sonra sadece set rst ile işe başlamak istiyorum, oradaki çıkışı aktif edebildikten sonra yoluma daha emin adımlarla ve de ezbere değil kuralına göre devam etmek istiyorum.

Bu sebeple ilk amacım görsel olarak daha iyi anlayabileceğim için önce rs485 ile pc yle anlaşabilmek ve malesef bunu başaramadım.



Dogukannn

#7
Alıntı yapılan: Elzemefe - 22 Mart 2017, 00:06:49
max485 haberleşme  prtokolu değildir fiziksel bir durum .. plc sektöründe haberleşme protokolleri var slave,ID,MASTER,slave durumları söz konusu
yani şöyle diyeyim  plc ye diyeceksin ki ;
plc kardeş bana d100 adresindeki  veriyi gönderirmisin
oda al kardeşim  diyecek ..

bu işlem sürecinde bir çeşit ve en çok kullanılan  protokol  modbus  ki sende  mecbur   bunu  kullanacaksın
kolay gelsin
lütfen araştır !!!

Hocam ben nerede max485'e haberleşme protokolü demişim? Ben araştırmamı yaptım onun bir chip olduğunun farkındayım, modbus fonksiyonlarının var oloduğunun crc'nin nasıl hesaplandığının /r/n' nin hex olarak 0D 0A ya tekavül ettiğinin hepsini okudum gördüm, daha da okuyacağım öğreneceğim bunun bilincindeyim, sorunum kısa vadede sadece RS485 standartıyla PIC ile PC'ye veri gönderebilmek.

Çok genel kapsamlı bir başlık atmışım şuan anladım, ilk kez konu açtığımdan acemilik dolu olmuş resmen.

Elzemefe

#8
_?

Dogukannn

#9
Yukarıda "önce araştır" yazmışsın ya, bence sen de önce bir "oku".
Şu cevabı hak edecek bir söz sarf etmedim, en son acemilik yapıp konuya bütün her şeyi dahil ettiğimi de belirtip hatanın kendimde olduğunu söyledim, yine de böyle itham edeceksen zaten bilgin sende kalsın. 

Burak

Elzem Efe hal ve tutumların hiç hoşuma gitmiyor , uslübun katı ve sert , yardım bekleyen insanlara karşı anlam veremediğim bir yaklaşımın var . Yazdıklarını kafana göre değiştirip dalga geçer bir noktalama ile yerini anlamsızlığa bırakamazsın , burası egoların tatmin edildiği müsait bir mekan değil . Bundan sonra dikkatli ol !!! SENİ UYARIYORUM , TEKRAR DA UYARMAYACAĞIM.

Burak
Ω Gens Una Sumus Ω

Powered by EzPortal