Sayma yönünü tespit etmek

Katılım
8 Haz 2017
Mesajlar
51
Puanları
1
Merhabalar.
Bir sayıcının sayma yönünü ST yazılımda nasıl tespit edebilirim?
Sayıcının saymasının artan yöndemi eksilen yöndemi olduğunu tespit etmeyi ST ile yapmaya çalışıyorum ama başaramadım.
Teşekkürler.
 
Merhabalar.
Bir sayıcının sayma yönünü ST yazılımda nasıl tespit edebilirim?
Sayıcının saymasının artan yöndemi eksilen yöndemi olduğunu tespit etmeyi ST ile yapmaya çalışıyorum ama başaramadım.
Teşekkürler.
Genelde aşağı yada yukarı sayma işlemini biz kendimiz yapıyoruz kastettiğiniz encoderin iki yönü ise bunlar için iki ayrı puls var, Hangi plc ve sayıcı ne tür bir sayıcı acaba?
 
Burada okuyacağım değerler sahadan gelecek olan verilerden oluşuyor.
Değerin artma yada azalma durumuna göre çeşitli işlemler yapacağım.
Herhangi bir sayıcı veya timer değeri değiller firmaya ait sahadaki özel bir cihazdan verileri çekiyorum.
O nedenle gelen veriyi kendim işlemeliyim.
Saniyede yaklaşık 350-400 arasında değer geliyor ve bende değerin bir öncekine göre artıp azaldığını karşılaştırmayla her 50ms'de bir karşılaştırmayla okumaya çalıştım ama okumakta zorlanıyorum.
PLC modeli = Delta AS320 serisi
 
O hızlarda ilave karşılaştırma yapmak program çevrim zamanı ilavesiyle zor olur tabiki. Bahsettiğiniz veri anladığım kadarı ile haberleşme üzerinden geliyor ve her 50msn de bir bir önceki değeri ile karşilaştırıyorsunuz. Böyle bir uygulama yapmadım fakat dahili interrupt(yazılım kesmesi) yapabilirsiniz diye düşünüyorum
 
Kod:
PROGRAM PLC_PRG
VAR  // Değişkenler tanımlanır
    EnkoderCikisi       : DINT;
    Eski_EnkoderCikisi  : DINT;
    outYukariSayiyor    : BOOL;
    outAsagiSayiyor     : BOOL;
END_VAR

Kod:
    IF EnkoderCikisi > Eski_EnkoderCikisi THEN // IF sonundaki değerle gelen değer karşılaştırılır
        outYukariSayiyor := TRUE;
        outAsagiSayiyor  := FALSE;
    ELSIF EnkoderCikisi < Eski_EnkoderCikisi THEN
        outYukariSayiyor := FALSE;
        outAsagiSayiyor  := TRUE;
    ELSE  // Hareket yok
        outYukariSayiyor := FALSE;
        outAsagiSayiyor  := FALSE;
    END_IF
    Eski_EnkoderCikisi := EnkoderCikisi; // Program sonunda eski değer, yeni değere sürekli güncellenir
 
Son düzenleme:
Kod:
PROGRAM PLC_PRG
VAR  // Değişkenler tanımlanır
    EnkoderCikisi       : DINT;
    Eski_EnkoderCikisi  : DINT;
    outYukariSayiyor    : BOOL;
    outAsagiSayiyor     : BOOL;
END_VAR

Kod:
    IF EnkoderCikisi > Eski_EnkoderCikisi THEN // IF sonundaki değerle gelen değer karşılaştırılır
        outYukariSayiyor := TRUE;
        outAsagiSayiyor  := FALSE;
    ELSIF EnkoderCikisi < Eski_EnkoderCikisi THEN
        outYukariSayiyor := FALSE;
        outAsagiSayiyor  := TRUE;
    ELSE  // Hareket yok
        outYukariSayiyor := FALSE;
        outAsagiSayiyor  := FALSE;
    END_IF
    Eski_EnkoderCikisi := EnkoderCikisi; // Program sonunda eski değer, yeni değere sürekli güncellenir
Yazdığınız programda veri anlık olarak değişmediği taktirde anlıktan kastım tarama süresinden önce değişmediği taktirde hep hareket yok çıkışına dallanmaz mı ?
 
Tarama süresinin başında yeni veri alınır, sonra IF --- END_IF bloğuna kadar yeni veri ile eski veri(güncellenmemiş) karşılaştırılır, program sonunda( eski veri güncellenir), diğer taramada tekrar yeni veri ile işlem başlar.
Enkoderin en ufak değişiminde hareket varmış gibi algılayabilir dolayısıyla prg ı hareketin aktif olduğunu anlayan bir feedbackle(geri bildirim) daha stabil hale getirmek gerekebilir.
Bu program, enkoder çevrim süresinden daha hızlı bir taskta çalıştırılırsa sürekli true-false gibi göz kırpar. Dolayısıyla enkoderle aynı taskta veya daha yavaş bir taskta çalıştırmak gerekir.
 
Son düzenleme:

Forum istatistikleri

Konular
130,115
Mesajlar
933,271
Kullanıcılar
453,179
Son üye
canerakdeniiz

Yeni konular

Geri
Üst