CCS C Modbus Hatalı çalışıyor.

Başlatan forsa1975, 11 Ağustos 2016, 09:06:42

forsa1975

CCS C  ModbusRTU Slave örneği ile yapılmış bir cihaz ile HMI normal çalışırken, aynı hatta PLC bağladığımda benim cihazın haberleşmesi çok yavaşlıyor, hatta kesiliyor diyebiliriz. PLC normal haberleşmeye devam ediyor. PLC hattan ayrılınca Cihazımın çalışması tekrar normal hızında devam ediyor.   Forumu taradım benzer sorunla karşılaşan birine rastlamadım.  Şöyle sormak istiyorum bu kodu bu haliyle normal çalıştıran arkadaşlar varmı.
İyi çalışmalar diliyorum.

Edit:  Modbus Poll  ile bakınca timeout hatası veriyor. Lojik analizör ile baktığımda benim cihaz 40-60ms arası gecikme ile cevap verirken , PLC sabit 25 ms sonra cevap veriyor. 


ecunnu

Merhaba sonlandırma direnci ile ilgili bir sorun olabilir. Birden fazla solandırma direnci kullaniliyormu kontrol edebilirmisiniz?

forsa1975

120 ohm sonlandırma direncini 2 uçta da kullandım. Sonuç değişmedi.

ylmz

ccs nın modbus kutuphanesı sorunlu fazladan bır suru gereksız şey var timer kesmelerinden 2 tanesını kullanıyor sana gerı bısey bırakmıyor kendın yazman gerekecek
Regülatör Dns Trafo | Regülatör | Redresör | Ups

ctn1905

Merhaba Hocam,
Modbus RTU ile çalışıyorsanız kolaylıkla kendiniz hazırlayabilirsiniz.
http://www.simplymodbus.ca/index.html
Bu sayfada fonksiyonlar ve paket yapıları mevcut, basit bir yapısı var,
Temel mantık her sorguya bir yanıt dönmek,
İyi günler.

Okan AKÇA

tımeoutdan hataya düsüyor. ccs ornek kodu  sadece çalısır uygulama yapılamaz kendiniz yazmanız gerekli.

forsa1975

#6
Cevaplar için teşekkür ederim. 
Son gözlemlerimde şunu fark ettim: Modbus Poll ilk pencere benim cihaz problemsiz çalışıyor. 2.pencere PLC açılınca , benim cihaz kopuyor. (time out hatası her mesajda) ,fakat 3. pencerede tekrar benim cihazdan register okuyorum. 3.pencere Timeout olurken benim cihazdan bilgi okuduğum ilk pencerem hatasız çalışmaya başlıyor. 

Benim cihazı HMI den okurken , HMI programda ,timer içerisine gereksiz bir bilgi okuma görevi yazıyorum. Böylelikle daha önce okunamayan registerleri okuyabiliyorum. 

Programı derlerken  #USE TIMER(TIMER=2,TICK=.1ms,BITS=16, ISR) satırı hata veriyordu.
#USE TIMER(TIMER=2,TICK=1ms,BITS=16, ISR) olarak değiştirdim.  Noktayı  kaldırınca hata vermedi fakat aynı satırda aşağıdaki uyarı var.
--- Info 300 ".....\modbus_phy_layer_rtu.c" Line 31(1,1): More info:   Timer 2 tick time is 1,02 ms

Timer2 nin tick süresi 100usn olması gerekirken ,1.02 ms olduğunu anlıyorum.  Bunları düzeltmekle zaman harcamak yerine kolları sıvayıp kendi basit sadece amaca yönelik kütüphanemi yazmak daha mantıklı.
İlerde farklı uygulamalarda da kullanabilirim.

İyi çalışmalar diliyorum.

Son Edit: Hatalar zamandan kaynaklanıyormuş.

PROTECH_

@forsa1975
Aslında yeni kütüphane yazmana gerek de yok
Modbus ile çok uzun süredir çalışıyorum. Yıllar süren tecrübe ve testlerle kaliteli bir haberleşme alt yapısı oluşturdum.
Profesyonel bir ürün oldu.

HMI, SCADA ve PLC hepsi ile problemsiz ve temiz bir haberleşme sağlayabiliyor.
Yarım saatte istediğin işlemci ile interface yaptırabiliyoruz.

Piyasada şuanda kullanılmakta. İhtiyacın olursa iletişime geçebilirsin.
e-mail'im:
techno.arge@gmail.com
Multi-Core ,RTX,ThreadX, FreeRTOS, MODBUS  RTOS - Electronic-Hardware -- BERLIN

forsa1975

Karşılıklı registerleri okuma yazma gibi işlerde problem yok. Fakat Slave Pic ilk açıldığında çalışmıyor. MCLR pininden  resetledikten sonra çalışıyor. Master de böyle bir sıkıntı yok.  Sigorta ayarlarından olabileceğini düşünüyorum.  Değişik denemeler yaptım fakat sonuç yok henüz.

burak54


forsa1975

Mod bus , tek master.   Master pic sorunsuz çalışıyor. Slave pic enerji verince mastere cevap göndermiyor. Mclr ile resetlendiğinde cevap vermeye başlıyor.

Normal başlama ile reset ile başlama arasında bir fark var demek ki. Yarın çalışmaya devam.

Tagli

İletişimde ilgili sorunlarda logic analyser kullanmanın çok faydasını gördüm. Yapabiliyorsan araya gir, kayıttayken hem ilk enerji verme işlemini hem de resetlemeyi uygula, bu iki işlem arasındaki farkı hat üzerinde gözlemlemeye çalış.
Gökçe Tağlıoğlu

forsa1975

Alıntı yapılan: Tagli - 18 Ağustos 2016, 00:13:59
İletişimde ilgili sorunlarda logic analyser kullanmanın çok faydasını gördüm. Yapabiliyorsan araya gir, kayıttayken hem ilk enerji verme işlemini hem de resetlemeyi uygula, bu iki işlem arasındaki farkı hat üzerinde gözlemlemeye çalış.

Hocam projede logic analyser kullanmadığım aşama yoktu. Bu problem için hiç aklıma gelmemişti. Şimdi baktım sadece master istek (1sn aralıklarla)  paketleri var hatta. Resetten sonra istek sonrası 16ms cevap paketini görebiliyorum.

Reset atmadan Slave hiç cevap vermiyor.

#fuses INTRC_IO,PLLEN,PUT,NOPROTECT,NOLVP,NOWDT,NOPBADEN
#use delay(internal=64000000)

ilk enerji verdiğimde program ana döngüsü 260 ms civarında iken reset sonrası, yani normal çalışırken 90ms olduğunu gördüm.  Acaba osilatör ?  ???

ErsinErce


forsa1975

#14
 
Alıntı yapılan: ErsinErce - 18 Ağustos 2016, 09:55:01
BOR 'u aktif edin
BOR aktif edildi değişen birşey yok.
eeprom=read_eeprom(0);

if(eeprom!=1) //0
{
write_eeprom(0,1);
reset_cpu();
}

else//1
{
write_eeprom(0,0);
}


 while(TRUE)


Problemin etrafından dolaştım. 
Problem devam ediyor. Çok zaman kaybettiğim bu problemin çözümünü araştırmaya sonra devam edeceğim.
Cevaplarınız  için çok teşekkürler.  İyi çalışmalar diliyorum.