Modbus parazit

Başlatan yasargunaydin, 09 Nisan 2014, 13:01:53

yasargunaydin

Arkadaşlar Merhaba;
Pic16f877 ile rs485ten bilgisayara delta IFD8500(rs485-rs232 ) ile bilgi göndermeyi başardık.Ne varki picin beslemesi ile IFD8500 beslemesi aynı olursa düzgün veri gönderip alabiliyorum,ne zaman IFD8500 besleme fişini başka prize takıyorum pic çıldırıyor.Saçma sapan veri gönderiyor hemde sürekli.
Bilgisayar ile veri alacağımız yer farklı.Kazan dairesinde buhar kazanından alacağız.Aynı fişe takmam mümkün değil.Bu problemi nasıl çözebilirim.

Kabil ATICI

Muhtemelen farklı fazlardan kaynaklanan bir durum.
Opto isolatör özellikli bir sistem derdinize çare olabilir.
Yada ethernet sistemindeki gibi galvanik olarak yalıtılmış bir yapı...
ambar7

Salih

Pic ile IFD8500 cihazının beslemelerinin sadece eksi uçlarını bağlayarak denermisin.

yasargunaydin

Arkadaşlar cevaplar için teşekkürler ama entegrenin pic16f877 1. ayaktaki kondansatörün eksi ayağını 2.röle çektirmek için ayrı güç kaynağı kullanmıştım.Onun eksi ayağına bağlamışım.Problemi buldum sorun yok.Sorunsuz veri alabiliyorum.Parazit yok.


interrupter

Modbus baglanti semani ve algoritmani bizlerle de paylasirmisiniz yada koşaca bu konu ile ilgili bilgilendirebilir misiniz bizleri de

yasargunaydin

Tabiki paylaşırım ama dosya nasıl yükleniyor bulamadım.Ama proğram aşağıda.Biliyorum proğramda ve projede birçok hata var,modbus sisteminde bilgisayar sürekli sorar pic cevap verir,benimkinde kazan dairesinde şuan yalnız buhar kazanındaki brülör pompa su seviye değişikliklerinde 13 adet sistemin verdiği 24 volt çıkıştan pici algılattım ve  bilgisayara veri gönderdim.Bilgisayardan yalnızca korna susturma,brülör resetleme vb için butona basınca veri gönderiyorum.

TRISA=%00000000    'portA çıkış yapıldı
TRISB=%11111111     'portB giriş yapıldı
TRISC=%10011111
TRISD=%00000000
'-----------------------------------------------------------------
'-----------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON               
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-----------------------------------------------------------------
DEFINE OSC 4
'ADCON1=7 '7. bit 1 yapıldı 10 bit sonuç almak için.
'OPTION_REG.7=0 'pull-up dirençleri aktif
'-------------------------------------------------------------------------
INTCON=%11000000
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

SYMBOL GIE  =INTCON.7   'genel interruptları açıyor
SYMBOL PEIE =INTCON.6   'peripheralinterruptları açıyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART Receive interrupt flag bit

I VAR BYTE
RCIE=1
PEIE=1
GIE=1



SYMBOL SW1=PORTB.0  'BRULOR1 ARIZA
SYMBOL SW2=PORTB.1  'SU SEVİYE DÜŞÜK /TAMAM
SYMBOL SW3=PORTB.2  'SU SEVİYE YÜKSEK /NORMAL
SYMBOL SW4=PORTB.3  'POMPA1 ARIZA/ARIZATAMAM
SYMBOL SW5=PORTB.4  'POMPA2 ARIZA/ARIZATAMAM
SYMBOL SW6=PORTB.5  'POMPA1 ÇALIŞTI/DURDU
SYMBOL SW7=PORTB.6  'POMPA2 ÇALIŞTI/DURDU

SYMBOL SW8=PORTB.7  'KAZAN BASINÇ YÜKSEK/NORMAL
SYMBOL SW9=PORTC.0  'BACA GAZI YÜKSEK SICAKLIK/NORMAL SICAKLIK
SYMBOL SW10=PORTC.1  'BACA LİMİT BASINÇ OFF/NORMAL
SYMBOL SW11=PORTC.2  'BRULOR SICAKSU KAZAN ARIZA/TAMAM
SYMBOL SW12=PORTC.3  'BUHAR KAZAN BRÜLÖR ÇALIŞTI/DURDU
SYMBOL SW13=PORTC.4  'SICAKSU KAZAN BRÜLÖR ÇALIŞTI/DURDU
SAY VAR WORD
TEMP VAR BYTE
B0 VAR WORD

  A VAR BYTE 'BUHAR BRULOR 1  arıza
  B VAR BYTE 'BUHAR BRULOR 1 tamam
  C VAR BYTE 'su seviye düşük
  D VAR BYTE 'su seviye tamam
  E VAR BYTE 'SU SEVİYE YÜKSEK
  F VAR BYTE 'SU SEVİYE NORMAL
  G VAR BYTE 'POMPA1 ARIZALI
  H VAR BYTE 'POMPA1 ARIZA TAMAM
  K VAR BYTE 'POMPA2 ARIZA
  L VAR BYTE 'POMPA2 ARIZA TAMAM
  M VAR BYTE'POMPA1 ÇALIŞTI
  N VAR BYTE'POMPA1 DURDU
  O VAR BYTE'POMPA2 ÇALIŞTI
  P VAR BYTE'POMPA2 DURDU
  Q VAR BYTE'KAZAN BASINÇ YÜKSEK
  R VAR BYTE'KAZAN BASINÇ NORMAL
  S VAR BYTE'BACA GAZI YÜKSEK SICAKLIK
  T VAR BYTE'BACA GAZI SICAKLIK NORMAL
  U VAR BYTE'KAZAN LİMİT BASINÇ OFF
  V VAR BYTE'KAZAN LİMİT BASINÇ NORMAL
  Y VAR BYTE'SICAKSU KAZAN BRÜLÖR ARIZA
  Z VAR BYTE'SICAK SU KAZAN BRÜLÖR TAMAM
  AB VAR BYTE'BUHAR KAZAN BRÜLÖR ÇALIŞTI
  CD VAR BYTE'BUHAR KAZAN BRÜLÖR DURDU
 
  EF VAR BYTE'SICAKSU KAZAN BRÜLÖR ÇALIŞTI
  GH VAR BYTE'SICAKSU KAZAN BRÜLÖR DURDU

  SAY=0
PORTA=%00000000
B0=0:A=0:B=0:C=0:D=0:E=0:F=0:G=0:H=0:K=0:L=0:M=0:N=0:O=0:P=0:Q=0:R=0:S=0:T=0:U=0:V=0:Y=0:Z=0:AB=0:CD=0:EF=0:GH=0
ON INTERRUPT GOTO KESME
 


BASLA:
IF ((A=0) AND (SW1=0)) THEN B=0:GOSUB BRULOR1ARIZA
IF ((B=0) AND (SW1=1)) THEN A=0:GOSUB BRULOR1TAMAM
IF ((C=0) AND (SW2=0)) THEN D=0:GOSUB SUSEVIYEDUSUK
IF ((D=0) AND (SW2=1)) THEN C=0:GOSUB SUSEVIYENORMAL
IF ((E=0) AND (SW3=0)) THEN F=0:GOSUB SUSEVIYEYUKSEK
IF ((F=0) AND (SW3=1)) THEN E=0:GOSUB SUSEVIYETAMAM
IF ((G=0) AND (SW4=0)) THEN H=0:GOSUB POMPA1ARIZA
IF ((H=0) AND (SW4=1)) THEN G=0:GOSUB POMPA1TAMAM
IF ((K=0) AND (SW5=0)) THEN L=0:GOSUB POMPA2ARIZA               
IF ((L=0) AND (SW5=1)) THEN K=0:GOSUB POMPA2TAMAM
IF ((M=0) AND (SW6=0)) THEN N=0:GOSUB POMPA1CALISTI
IF ((N=0) AND (SW6=1)) THEN M=0:GOSUB POMPA1DURDU
IF ((O=0) AND (SW7=0)) THEN P=0:GOSUB POMPA2CALISTI
IF ((P=0) AND (SW7=1)) THEN O=0:GOSUB POMPA2DURDU
IF ((Q=0) AND (SW8=0)) THEN R=0:GOSUB KAZANBASINCYUKSEK
IF ((R=0) AND (SW8=1)) THEN Q=0:GOSUB KAZANBASINCNORMAL
IF ((S=0) AND (SW9=0)) THEN T=0:GOSUB BACAGAZYUKSEK
IF ((T=0) AND (SW9=1)) THEN S=0:GOSUB BACAGAZNORMAL
IF ((U=0) AND (SW10=0)) THEN V=0:GOSUB KAZANLIMITOFF
IF ((V=0) AND (SW10=1)) THEN U=0:GOSUB KAZANLIMITON
IF ((Y=0) AND (SW11=0)) THEN Z=0:GOSUB SICAKSUBRULORARIZA
IF ((Z=0) AND (SW11=1)) THEN Y=0:GOSUB SICAKSUBRULORTAMAM
IF ((AB=0) AND (SW12=0)) THEN CD=0:GOSUB BUHARBRULORCALIS
IF ((CD=0) AND (SW12=1)) THEN AB=0:GOSUB BUHARBRULORDUR
IF ((EF=0) AND (SW13=0)) THEN GH=0:GOSUB SICAKSUBRULORCALIS
IF ((GH=0) AND (SW13=1)) THEN EF=0:GOSUB SICAKSUBRULORDUR


IF B0=31 THEN PORTA=%00000001:PAUSE 500:PORTA=%00000000:B0=0
IF B0=32 THEN PORTA=%00000010:PAUSE 500:PORTA=%00000000:B0=0
IF B0=33 THEN PORTA=%00000100:PAUSE 500:PORTA=%00000000:B0=0
IF B0=34 THEN PORTA=%00001000:PAUSE 500:PORTA=%00000000:B0=0
 
  PORTC=%10011111
  SAY=SAY+1
  IF SAY=10 THEN SAY=5
  PAUSE 50

GOTO BASLA 
                         
DISABLE

BRULOR1ARIZA:A=1:PORTC=%11111111:HSEROUT ["B",#125,"A"]:PAUSE 500:PORTC=%10011111:RETURN
BRULOR1TAMAM:B=1:PORTC=%11111111:HSEROUT ["B",#126,"T"]:PAUSE 500:PORTC=%10011111:RETURN
SUSEVIYEDUSUK:C=1:PORTC=%11111111:HSEROUT ["S",#127,"D"]:PAUSE 500:PORTC=%10011111:RETURN
SUSEVIYENORMAL:D=1:PORTC=%11111111:HSEROUT ["S",#128,"N"]:PAUSE 500:PORTC=%10011111:RETURN
SUSEVIYEYUKSEK:E=1:PORTC=%11111111:HSEROUT ["S",#129,"Y"]:PAUSE 500:PORTC=%10011111:RETURN
SUSEVIYETAMAM:F=1:PORTC=%11111111:HSEROUT ["S",#130,"T"]:PAUSE 500:PORTC=%10011111:RETURN
POMPA1ARIZA:G=1:PORTC=%11111111:HSEROUT ["P",#131,"A"]:PAUSE 500:PORTC=%10011111:RETURN
POMPA1TAMAM:H=1:PORTC=%11111111:HSEROUT ["P",#132,"T"]:PAUSE 500:PORTC=%10011111:RETURN
POMPA2ARIZA:K=1:PORTC=%11111111:HSEROUT ["P",#133,"A"]:PAUSE 500:PORTC=%10011111:RETURN
POMPA2TAMAM:L=1:PORTC=%11111111:HSEROUT ["P",#134,"T"]:PAUSE 500:PORTC=%10011111:RETURN
POMPA1CALISTI:M=1:PORTC=%11111111:HSEROUT ["P",#135,"C"]:PAUSE 500:PORTC=%10011111:RETURN
POMPA1DURDU:N=1:PORTC=%11111111:HSEROUT ["P",#136,"D"]:PAUSE 500:PORTC=%10011111:RETURN
POMPA2CALISTI:O=1:PORTC=%11111111:HSEROUT ["P",#137,"C"]:PAUSE 500:PORTC=%10011111:RETURN
POMPA2DURDU:P=1:PORTC=%11111111:HSEROUT ["P",#138,"D"]:PAUSE 500:PORTC=%10011111:RETURN
KAZANBASINCYUKSEK:Q=1:PORTC=%11111111:HSEROUT ["K",#139,"Y"]:PAUSE 500:PORTC=%10011111:RETURN
KAZANBASINCNORMAL:R=1:PORTC=%11111111:HSEROUT ["K",#140,"N"]:PAUSE 500:PORTC=%10011111:RETURN
BACAGAZYUKSEK:S=1:PORTC=%11111111:HSEROUT ["B",#141,"Y"]:PAUSE 500:PORTC=%10011111:RETURN
BACAGAZNORMAL:T=1:PORTC=%11111111:HSEROUT ["B",#142,"N"]:PAUSE 500:PORTC=%10011111:RETURN
KAZANLIMITOFF:U=1:PORTC=%11111111:HSEROUT ["K",#143,"F"]:PAUSE 500:PORTC=%10011111:RETURN
KAZANLIMITON:V=1:PORTC=%11111111:HSEROUT ["K",#144,"O"]:PAUSE 500:PORTC=%10011111:RETURN
SICAKSUBRULORARIZA:Y=1:PORTC=%11111111:HSEROUT ["B",#145,"A"]:PAUSE 500:PORTC=%10011111:RETURN
SICAKSUBRULORTAMAM:Z=1:PORTC=%11111111:HSEROUT ["B",#146,"T"]:PAUSE 500:PORTC=%10011111:RETURN
BUHARBRULORCALIS:AB=1:PORTC=%11111111:HSEROUT ["B",#147,"C"]:PAUSE 500:PORTC=%10011111:RETURN
BUHARBRULORDUR:CD=1:PORTC=%11111111:HSEROUT ["B",#148,"D"]:PAUSE 500:PORTC=%10011111:RETURN
SICAKSUBRULORCALIS:EF=1:PORTC=%11111111:HSEROUT ["S",#149,"C"]:PAUSE 500:PORTC=%10011111:RETURN
SICAKSUBRULORDUR:GH=1:PORTC=%11111111:HSEROUT ["S",#150,"D"]:PAUSE 500:PORTC=%10011111:RETURN

KESME:
GIE=0
HSERIN 50,ATLA,[B0]

ATLA:
   TEMP=RCREG
   GIE=1
   Resume
   enable
end
             

esensoy

Modbus neresindeki bu kodun?
En tehlikeli an "zafer" anıdır.

frederic

RS485 ile modbus'ı çoğu insan aynı zannediyor, sanıyorum bu da öyle bir durum.

yasargunaydin

#8
Haklısınız yanlış biliyormuşum,bişey daha öğrendik ama şöyle söyliyim adının ne olduğu çok önemli değil benim için, amacım bilgi almaktı ve bunuda sağlıklı bir şekilde yapabiliyorum.Yinede teşekkürler