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 4TRISA=0                                                       TRISB=%00000011                                               TRISC=0                                                        TRISD=0trise=0porta=0portb=0portc=0portd=0porte=0pause 250                                                  ;-------------------------------------------------------------------------------          DEFINE ADC_BITS 8       DEFINE ADC_CLOCK 3      DEFINE ADC_SAMPLEUS 50  ADCON1=7symbol buton1=portb.0symbol buton2=portb.1;-------------------------------------------------------------------------------basla:pause 125porta=0if buton1=1 and buton2=1 then gosub calistirendifif buton1=1 and buton2=0 then gosub durendifif buton1=0 and buton2=1 then gosub durendifgoto basla;-------------------------------------------------------------------------------calistir:high porta.1pause 200low porta.1if buton1=1 and buton2=1 then gosub durendifif buton1=1 and buton2=0 then gosub durendifif buton1=0 and buton2=1 then gosub durendif  if buton1=0 and buton1=0 then returnelse goto calistirendif;-------------------------------------------------------------------------------dur:high porta.2if buton1=0 and buton2=0 then gosub baslAELSE 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ı isePAUSE 100  'bir müddet bekleIF BUTON=0 THEN  'butona hala basılıyor ise   Ne yapılacaksa yapENDIFWHILE BUTON=0:WEND 'buton bırakılıncaya kadar beklepause 50ENDIF

Ete


Powered by EzPortal