Kumanda Sorusu ST diliyle çözüm

Katılım
3 May 2020
Mesajlar
71
Puanları
1
Yaş
29
Merhabalar Scl de timer yapmak isityorum. Evet TON çekebiliyoruz ama o şekilde deği lde geri sayım şeklinde ya da ileri sayım şeklinde bir sayım fonksiyonu yapmak istiyorum bunu nasıl yapabilirim? Rica etsem yardımcı olabilir misiniz? İlk etapta aklıma for döngüsü geldi.
 
Timer ın Elapsed Time özelliğini kullan

(* cyclic program *)
(* call function block *)
TON_01( IN:=input, PT:=T#1s200ms );
(* assign results to variables *)
output := TON_01.Q;
elapsedTime := TON_01.ET;
 
Timer ın Elapsed Time özelliğini kullan

(* cyclic program *)
(* call function block *)
TON_01( IN:=input, PT:=T#1s200ms );
(* assign results to variables *)
output := TON_01.Q;
elapsedTime := TON_01.ET;
Öncelikle cevabınız için teşekkür ederim. Evet bu şekilde de kullanılabiir ama ben timer kullanmak istemiyorum.
Kullanım şeklim şu olmasını istiyorum: Increment, decrement şeklinde saniyede bir artışlı ya da azalışlı sayaç şeklinde bir kullanım yapmak istiyorum. Aynı zamanda istediğim zaman reset yapabilmeliyim. Bu artış değerini okuyabilmeli ve kendim belirleyebilmeliyim.

Blink şeklinde kullandığım bazı uyarı işlemlerini örneğin 10sn , bu fonksiyonu kolayca çekebilmeliyim.
 
Plc'nin kendi özel bitlerinde clock sinyalleri var.Örneğin 1sn clock özel biti ile bir word alanın değerini artırarak kendi timerınızı yapabilirsiniz.
 
Plc'nin kendi özel bitlerinde clock sinyalleri var.Örneğin 1sn clock özel biti ile bir word alanın değerini artırarak kendi timerınızı yapabilirsiniz.
Evet dediğiniz şekilde yapılabiliyor. Teşekkür ederim sanırım benim dediğim şekilde yapmak işi uzatıyor cevaplardan anladığım kadarıyla.
Bu konudan ayrı olarak döngüsel işlemleri SCL DE yapmak daha kolay diye biliyorum.

Şöyle bir senaryoyu nasıl yapabilirim.
Bir motorun 1 dk çalışıp 30 sn beklemesi ve bunu toplamda 10 kez yapması gibi bir işlemi nasıl yapabilirim?
 
Bir motorun 1 dk çalışıp 30 sn beklemesi ve bunu toplamda 10 kez yapması gibi bir işlemi nasıl yapabilirim?

Kod:
CASE DURUM OF
0: (*1DK CALISMA DURUMU*) (* START BUTONUYLA ÇALIŞMA BAŞLAR *)
    IF TEKRAR_SAYISI <= 10 THEN (* Tekrar sayısı 10 a ulaşana dek *)
       IF  START OR SURE30SNBEKLE.Q THEN
           TEKRAR_SAYISI          := TEKRAR_SAYISI+1;
           START                  := FALSE;
           SURE30SNBEKLE.IN       := FALSE;
           CIKIS                  := TRUE;
           SURE1DK.IN             := TRUE;
       END_IF

      IF SURE1DK.Q THEN (* Süre Doldu mu? *)
           SURE1DK.IN     := FALSE;
           CIKIS          := FALSE;
           DURUM          := 10;
      END_IF
    ELSE (* TEKRAR SAYISI 10'u GEÇTİYSE *)
           TEKRAR_SAYISI      := 0;
           START              := FALSE;
           CIKIS              := FALSE;
           SURE1DK.IN         := FALSE;
           SURE30SNBEKLE.IN   := FALSE;
    END_IF

10:  (*30SN BEKLEME DURUMU *)
     SURE30SNBEKLE.IN  := TRUE;
     CIKIS             := FALSE;
     IF SURE30SNBEKLE.Q THEN
              DURUM    :=0;
     END_IF
END_CASE
(* Timerlar(TON) Case in dışında çağrılır *)
SURE1DK.PT:= T#10S;
SURE1DK();

SURE30SNBEKLE.PT :=t#5S;
SURE30SNBEKLE();

Kod:
VAR (* Değişkenleri Tanımlama Kısmı *)
    DURUM: INT;
    START: BOOL;
    CIKIS: BOOL;
    SURE1DK: TON;
    SURE30SNBEKLE :TON;
    TEKRAR_SAYISI: INT;
END_VAR
 
Son düzenleme:
Allah razı olsun bu konuda sizden öğreneceğim çok şey var
Kod:
CASE DURUM OF
0: (*1DK CALISMA DURUMU*) (* START BUTONUYLA ÇALIŞMA BAŞLAR *)
    IF TEKRAR_SAYISI <= 10 THEN
            IF    START OR SURE30SNBEKLE.Q THEN
                TEKRAR_SAYISI        := TEKRAR_SAYISI+1;
                START                    := FALSE;
                SURE30SNBEKLE.IN    := FALSE;
                CIKIS                     := TRUE;
                SURE1DK.IN             := TRUE;
            END_IF

            IF SURE1DK.Q THEN
                SURE1DK.IN     := FALSE;
                CIKIS            := FALSE;
                DURUM        := 10;
            END_IF
    ELSE (* TEKRAR SAYISI 10 GEÇTİYSE *)
            TEKRAR_SAYISI    := 0;
            START                := FALSE;
            CIKIS                 := FALSE;
            SURE1DK.IN         := FALSE;
            SURE30SNBEKLE.IN   := FALSE;

    END_IF

10:  (*30SN BEKLEME DURUMU *)
        SURE30SNBEKLE.IN        :=  TRUE;

        IF SURE30SNBEKLE.Q THEN
                 DURUM    :=0;
        ELSE
                CIKIS        := FALSE;
        END_IF
END_CASE
(* Timerlar(TON) Case in dışında çağrılır *)
SURE1DK.PT:= T#10S;
SURE1DK();

SURE30SNBEKLE.PT :=t#5S;
SURE30SNBEKLE();
Bu arada kodu anlamaya ve uygulamaya çalıyorum. Bu tür döngüler ve hatta daha da karmaşıklarını uygulayabilmek için ne önerirsiniz?
 
Moderatör tarafında düzenlendi:

Forum istatistikleri

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

Yeni konular

Geri
Üst