Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

PLC PİC denemelerim

Başlatan protezdiyot, 16 Ocak 2015, 15:37:00

protezdiyot

GAraj Bariyeri;
Merhaba.
Garaj bariyeri uygulamasında i00 a basınca  bariyer kapalıysa (i0.1 kapalıysa) bariyer açılsın( q00 aktif olsun.)
bariyer açılıp i02 swicine basınca 10 sn sonra bariyer kapansın(q01)
araya engel girerse (i03) veya bariyer tam kapanırsa (i01)  bariyer dursun. (q01 çıkışı pasif olsun.)
bariyer kapanırken  araya biri girerse bariyer geri açılsın.

Program bu şekilde çalışmıyor. Nerede hata yapıyorum.Bir bakar mısınız.




#include <otomatik_kapi.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOLVP, NOCPD, NOWRT
#define i00 pin_a0
#define i01 pin_a1
#define i02 pin_a2
#define i03 pin_a3
#define q00 pin_b0
#define q01 pin_b1


void main()
{
set_tris_a(0xff);
set_tris_b(0x00);
output_b(0x00);

   while(TRUE)
   {
     if(input(i00) && input(i01) && !input(i02))   //i00 'a start verilince bariyer kapalıysa(i01) ve bariyerin tam açık değilse(i02)
     
{
     output_high(q00);   //bariyer açılsın
     }
 
      if(input(i02))   // bariyer tam açıldığında
      {
      output_low(q00);   // açılma motoru dursun
      delay_ms(1000);   // 10 sn beklesin
         
         if(input(i03) && !input(i01))   // arada cisim yoksa (i03) ve bariyer kapalı değilse (i01)
         
      
         {output_high(q01);   // bariyer kapansın

}
         
         
      }
     if (!input(i02) && input(q01)  && input(i03)  && !input(i01))  //bariyer kapanmaya başlamışsa (i02) ve kapanmaya başlamışsa(q01) ve tam kapalı değilse (i01)
     {output_low(q01); //kapanma işlemi dursun
     output_high(q00); //bariyer tekrar açılsın
     }
       
       if(input(i01)) //bariyer tam kapanırsa
     {
     output_low(q01); //kapatma motoru dursun
         }
   }}


Recep METE

Isis şemasıni da yuklerseniz sorununuzu daha çabuk çözebiliriz.

printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d


Salih

Şu programı denermisin.

#include <16F628A.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOLVP, NOCPD
#Use Delay(clock=4000000)

#define i00 input(pin_a0)
#define i01 input(pin_a1)
#define i02 input(pin_a2)
#define i03 input(pin_a3)
#define q00 pin_b0
#define q01 pin_b1

int16 zaman=1000;
void main()
{
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE); 
output_b(0x00);

   while(TRUE)
   {
     if (i00 && i01) {output_high(q00);output_low(q01);}
     if (i02 && input_state(q00)) {output_low(q00);zaman=1000;}
     if (i02 && !input_state(q00) && zaman && !i03) zaman--;
     if (i02 && !input_state(q00) && !zaman) output_high(q01);
     if (input_state(q01)&& i03) {output_high(q00);output_low(q01);}
     if (input_state(q01)&& i01) output_b(0x00);
     
     delay_ms(10);
   }
}

protezdiyot

Alıntı yapılan: salih - 16 Ocak 2015, 22:42:45
Şu programı denermisin.

#include <16F628A.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOLVP, NOCPD
#Use Delay(clock=4000000)

#define i00 input(pin_a0)
#define i01 input(pin_a1)
#define i02 input(pin_a2)
#define i03 input(pin_a3)
#define q00 pin_b0
#define q01 pin_b1

int16 zaman=1000;
void main()
{
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE); 
output_b(0x00);

   while(TRUE)
   {
     if (i00 && i01) {output_high(q00);output_low(q01);}
     if (i02 && input_state(q00)) {output_low(q00);zaman=1000;}
     if (i02 && !input_state(q00) && zaman && !i03) zaman--;
     if (i02 && !input_state(q00) && !zaman) output_high(q01);
     if (input_state(q01)&& i03) {output_high(q00);output_low(q01);}
     if (input_state(q01)&& i01) output_b(0x00);
     
     delay_ms(10);
   }
}


1.Ustam denedim ama buton çok geç tepki veriyor
2.i03 ün hiçbir fonksiyonu yok şuan programda

Salih

Senin proteus da denetleyici frekansı 1 mHz ayarlanmış. Onu 4 Mhz ayarla.
Ben denedim çalışıyor.
Dikkatli dene.
Ayrıca PLC programında da yanlışlık var.
Aynı çıkışı iki defa kullanmışsın.

serdararikan

ben başlıktaki PLC PIC olayına takıldım.PIC i PLC gibi mi kullanmak istiyorsunuz??

protezdiyot

Alıntı yapılan: salih - 17 Ocak 2015, 20:42:58
Senin proteus da denetleyici frekansı 1 mHz ayarlanmış. Onu 4 Mhz ayarla.
Ben denedim çalışıyor.
Dikkatli dene.
Ayrıca PLC programında da yanlışlık var.
Aynı çıkışı iki defa kullanmışsın.
Hocam maalesef çalışmadı.
Aynı çıkışı iki kere kullandım çünkü bariyer kapsanırken araya araç girerse bariyer tekrar açılmalı ve on sn bekleyip kapanmalı. Bende start 4mhz yapmama rağmen çok geç tepki alıyor(5 6sn basılı tutuyorum) ve ı02 ye bastı bilgisinden sonra kapanma gerçekleşmiyor. Ayrıca araya araç girerse tekrar açılma da olmuyor doğal olarak.
Evet. Plc devrelerini pic ile yapıyorum. Öğrenme için. Plc bilgimle pic i harmanlayacağım. Bunu yapan pic programları var ama ben öğrenmek için beynimi yazılımla yoracağım.

Salih


zerog26

pic'i plc gibi kullanmak istiyorsaniz picladder programini kullanin ben kullaniyorum gayet basarili ladder mantigiyla butun yazilimi haziyliyosun gorsel olarak hex yap dion hazir...  http://cq.cx/ladder.pl#dl  bu adresten LDmicro.exe indir islemcini sec gerisi basit..

protezdiyot

Alıntı yapılan: salih - 18 Ocak 2015, 20:26:04
Dosyaları veriyorum.
Benim gönderdiklerimle bir dene.

http://s3.dosya.tc/server30/Xw3Hdm/Garaj_Kapisi.rar.html
Salih bey muhtemelen bana kızacaksınız :)
Hem çok geç cevap veriyorsun hemde cahilsin diye :S
Ustam proteusta senin verdiğin devre şemasında aynı anda iki girişe nasıl 1 vereceğimi bilmiyorum.Mouse ile hangi tuşu kullanmalıyım aynı anda iki swiche birden basayım?
Birde benim devreyle senin devre arasında ne fark var ki?Bendeki devre  neden çalışmadı?

Sn zerog yardımın için sağol ama ben yazılımla pic i öğrenmek istiyorum.Bu programdan haberim var. Ama ben beyin yakma peşindeyim . Şuan öğrenme amacı taşıyorum.Teşekkürler bilgi için...

Salih

şekillerin üzerinde küçük ok gibi bir yer var oraya basarsan kalıcı olarak değişir.
Bir daha basarsan eski duruma dönüşür.
Şekile direk basarsan buton gibi çalışır.

protezdiyot

#12
Alıntı yapılan: salih - 20 Ocak 2015, 10:22:45
şekillerin üzerinde küçük ok gibi bir yer var oraya basarsan kalıcı olarak değişir.
Bir daha basarsan eski duruma dönüşür.
Şekile direk basarsan buton gibi çalışır.
Salih ustam maalesef senin verdiğin program bende çalışmadı.Sanırım farklı düşünüyoruz bir yerlerde.Ayrıca;
"RB0 çıkışı aktifse rb5 çıkışı aktif olsun " komutunu nasıl yazarım.
kısaca; 1 nolu buton basılıysa ve RB0 ledi yanıyorsa RB5 ledi yansın demek istiyorum. İf komutuna
if(input(pin_a1)&& input(pin_b0)) diyorum ama doğal olarak yanlış oluyor.Ne yapmalıyım?Programı yazdım.Burada kaldım.

Salih

O zaman programı satır anlatıp, öyle anlaşalım.
1) Bariyer kapalı ise ve starta basılmış ise bariyer açılsın.

if (i00 && i01) {output_high(q00);output_low(q01);}

protezdiyot

Hocam Şu kısım bende çalışmıyor?
if (i00 && i01)   Ben kodu bu şekilde yazınca hiçbir işlem olmuyor. Ama Şu şekilde yazınca sistem işliyor;

if(input(i00) && input(i01))


Ayrıca;
"RB0 çıkışı aktifse rb5 çıkışı aktif olsun " komutunu nasıl yazarım.
1 nolu buton basılıysa ve RB0 ledi yanıyorsa RB5 ledi yansın demek istiyorum.