Pic ile senkronizasyon rolesi (güvenlik rolesi)

Başlatan Elektronikprojem, 21 Temmuz 2016, 17:58:08

Elektronikprojem

Merhaba herkese iyi akşamlar,
Konu başlığından da anlaşılacağı üzere pic ile senkronizasyon rolesi yapmak istiyorum .
Senkronizasyon rölesi: Çift el buton kullanılan makinelerde birinci butonla ikinci butona basma arasında belirli bir ms den fazla zaman geçerse röle çıkış vermez. Yani bir butona sürekli basarım diğerine bastıkça çalışırım olayını engeller. Yani operatörün tek elle çalışmasını önler. Pic te basit röleli bir sistem yaptım kodları aşağıya yükleyeceğim. Benim yardım istediğim konu;
1-Kodlarda bir sıkıntı görüyorsanız bildirirseniz sevinirim.
2-Bu kodlar haricinde farklı çalışma mantığı düşünen varsa burada fikir bekliyorum.
Şimdiden teşekkürler .

@ __config _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF              
DEFINE OSC 4
TRISA=0                                                       
TRISB=%00000011                                               
TRISC=0                                                       
TRISD=0
trise=0
porta=0
portb=0
portc=0
portd=0
porte=0
pause 250                                                 
;-------------------------------------------------------------------------------         
DEFINE ADC_BITS 8       
DEFINE ADC_CLOCK 3     
DEFINE ADC_SAMPLEUS 50 
ADCON1=7
symbol buton1=portb.0
symbol buton2=portb.1
;-------------------------------------------------------------------------------
basla:
pause 125
porta=0
if buton1=1 and buton2=1 then
gosub calistir
endif
if buton1=1 and buton2=0 then
gosub dur
endif
if buton1=0 and buton2=1 then
gosub dur
endif
goto basla
;-------------------------------------------------------------------------------
calistir:
high porta.1
pause 200
low porta.1
if buton1=1 and buton2=1 then
gosub dur
endif
if buton1=1 and buton2=0 then
gosub dur
endif
if buton1=0 and buton2=1 then
gosub dur
endif 
if buton1=0 and buton1=0 then
return
else
goto calistir
endif
;-------------------------------------------------------------------------------
dur:
high porta.2
if buton1=0 and buton2=0 then
gosub baslA
ELSE
goto dur
endif

               

ete

Bazı gereksiz satırlar var ve birde DUR etiketi altında GOSUB BASLA diye bir komut varki bu stack taşmasına sebep olur. BASLA gosub ile gidilecek bir alt program değil ana başlangıç program etiketidir. Dolayısıyla orada Gosub değil Goto Basla olmalıdır.
Gereksiz satırları silince program aşağıdaki şekle geldi. Düzeltmeyi sadece Basla ve altındaki satırlara uyguladım.
basla:
      pause 125
      porta=0
      if buton1=1 and buton2=1 then  gosub calistir

      goto basla
;-------------------------------------------------------------------------------
calistir:
         high porta.1
         pause 200
         low porta.1
         high porta.2
         while Buton1=1 and Buton2=1:wend
         return

Bu gibi sistemlerde operatörün iki elinide meşgul etmek gerekiyor. Bu nedenle iki butona basmaz ise sistem çalışmaz. Senin sisteminde aynı özellikte ama butonlara basma aralığında bir süre söz konusu değil.
Binary sistemlerde sadece iki alternatif vardır. Bir ve sıfır.
İki adet butonun basılmış olduğu konuma 1 dersek basılmadığı konum sıfır olur.Bu durumda yalnızca basılma durumunu kontrol etmek yeterlidir. Yani,
IF But1=1 and But2=1 THEN GOSUB CALISTIR bu yazılan komut satırı alternatifin bir halidir. Program bu satırı geçiyor ise iki buton birden basılı değildir anlamına gelir ve artık IF BUT1=0 and BUT2=0 THEN şeklinde bir kontrol yapılması gerekmez.
Zaten bu satır yerine IFBUT1=1 AND BUT2=0 THEN ve IF BUT1=0 and BUT2=1 THEN şeklindeki iki satırda sorgulamanın olumsuz haline karşılık gelir.  Bu nedenle programda yalnızca her iki butonun basılı olduğu konum test edilmiştir. Alt satıra geçince otomatikman olumsuz konuma ulaşılmış demek olur. Bu nedenle ayrıca bu konum if komutu ile sorgulanmamıştır.

Ete

Elektronikprojem


Elektronikprojem

Bu kartlardan 23 adet yaptık ve 23 makinaya yerleştirdik. Ancak 2 makinada operatörün söylediğine göre yapıldıktan şu ana kadar pres  makinası  2 kere butona basmadan çalışmış kendi kendine.Bu  sorundan sonra butonları gene eski halinde seri şekilde bağladım. Yakın zaman da da çıkış veren rolenin kontaklarına sayıcı bağlayacağım herhangi bir çıkış verme durumu varmı diye . Bu arada pice gelen butonlara basılma bilgisini pic role ile  plc ye aktarmaktadır. Sizce sorun parazit kaynaklı bir sorun mudur? Açıkçası aklıma başka birşey de gelmiyor. Hem picin bacağına hemde 7805 in bacağına 100 nF kondansatör bağlı 7805'in in ve gnd bacağına 33nF kondansatör bağlı .Devre şeması ektedir. Şimdiden teşekkürler

ete

Neden kendi kendine çalışmış bilemem. Devreyi incelemek gerekir.
Bu gibi işlerde hem seri çift buton hemde belirli bir süre bekleyip hala butonlara basılmışmı bakmak ve hala basılı ise çalıştırma yapmak daha doğru olabilir.

Ete

Elektronikprojem

Alıntı Yaphemde belirli bir süre bekleyip hala butonlara basılmışmı bakmak ve hala basılı ise çalıştırma yapmak daha doğru olabilir.

Hocam bi örnek verebilir misiniz?

ete

Al bakalım örnek;
IF BUTON=0 THEN' butona basıldı ise
PAUSE 100  'bir müddet bekle
IF BUTON=0 THEN  'butona hala basılıyor ise
   Ne yapılacaksa yap
ENDIF
WHILE BUTON=0:WEND 'buton bırakılıncaya kadar bekle
pause 50
ENDIF

Ete


Powered by EzPortal