Tiaportalda veri sıralayıp seçemiyorum?

kmlcngnr

Üye
Katılım
6 Eyl 2023
Mesajlar
1
Puanları
1
Yaş
21
merhaba plc ile bir proje üzerinde çalışıyorum. 10 tane jetfan çalıştırıyorum ve bunların çalışma sürelerini hmi üzerinden gözlemliyorum. yapmak istediğim hmidan bir değer girdiğimde bu değer kadar çalışma süresi en az olan fanların çalışması veya çalışma süresi en çok olan fanların durması mesela 4 değeri girdiğimde çalışma süresi en az olan 4 fan çalışıp diğerleri duracak. bunu scl ile denedim ladder ile de denedim ancak bir türlü istediğim gibi yapamadım. yardımcı olur musunuz. siemens s7-1200 kullanıyorum.
 

Ekli dosyalar

  • 1 2 fan.png
    1 2 fan.png
    66 KB · Görüntüleme: 25
  • 1 2 sayma.png
    1 2 sayma.png
    44.1 KB · Görüntüleme: 22
  • hmi.png
    hmi.png
    130 KB · Görüntüleme: 27
KNX Standardı, küçük bir rezidansın içerisindeki aydınlatma, perde panjur, klima kontrolünden, Dünya’nın en büyük havalimanlarındaki aydınlatma otomasyonu gibi çözümler için tercih edilen bir Dünya standardıdır.
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
programda verilen 10 değeri sıralayıp en düşük 3üne(değiştirilebilir) çıkış veriyor v17 de açabilirsiniz
 

Ekli dosyalar

  • testprj.zip
    333.3 KB · Görüntüleme: 4
Sıralama ile ilgili aşağıda daha önce paylaştığım algoritmayı inceleyebilirsiniz.
https://www.kontrolkalemi.com/forum...-scl-programlama-dili.1047/page-6#post-150043

Kod:
JetFan[0].RunTime := 5;  // Test için JetFanların runtime çalışma değerlerine sayılar girdim.
JetFan[1].RunTime := 4;
JetFan[2].RunTime := 7;
JetFan[3].RunTime := 3;
JetFan[4].RunTime := 9;
JetFan[5].RunTime := 10;

Test.CLK := Edge; // Çıkan kenar R_TRIG fb sine parametre gönderimi

IF Test.Q THEN  //Çıkan kenarda işlemlere başlanır. Herhangi bir şarta bağlayabilirsin
    SiralamaNo := Temizle; // SiralamaNo Arraylarının içlerini temizledim
    SiralamaNo := JetFan;  // JetFan değerlerini SiralamaNo Arraylarına attım
    FOR i := 0 TO 8 BY 1 DO
        FOR j:= i+1 TO 9     BY 1     DO     // SiralamaNo ARRAY larını tarıyoruz
            IF (SiralamaNo[i].RunTime > SiralamaNo[j].RunTime)  THEN  // i ve j inci veriler test edilir
                    IF (SiralamaNo[j].RunTime =0) OR (SiralamaNo[i].RunTime =0)  THEN // Sıfır değerlerini işleme almadım.
                        CONTINUE;
                    END_IF
                    Takas.RunTime           := SiralamaNo[j].RunTime; // Yer degiştirme işlemi yapıyoruz
                    Takas.No                := SiralamaNo[j].No;
                    SiralamaNo[j].RunTime   := SiralamaNo[i].RunTime;
                    SiralamaNo[j].No        := SiralamaNo[i].No;
                    SiralamaNo[i].RunTime   := Takas.RunTime;
                    SiralamaNo[i].No        := Takas.No;
            END_IF;
        END_FOR; // j için for sonu
    END_FOR; // i için for sonu

    SortDone := TRUE; // Sıralama Tamam
ELSE
    SortDone := FALSE;
END_IF

// JetFanlar Start Stop İşlemleri
IF (GirilenDeger > 0) AND (GirilenDeger < 10)  THEN
    IF SortDone THEN // Sıralama Tamamsa çıkışları güncelle
        FOR i := 0 TO 9 BY 1 DO
                IF GirilenDeger > (i-1) THEN
                    SiralamaNo[i].Start := TRUE;
                ELSE
                    SiralamaNo[i].Start := FALSE;
                END_IF
        END_FOR
    END_IF
ELSE // Girilen deger istenmeyen aralıktaysa startları kes
    FOR i := 0 TO 9 BY 1 DO
        SiralamaNo[i].Start := FALSE;
    END_FOR
END_IF
Test();   // Çıkan kenar fb sini çağırdım
Kod:
VAR // Değisken Tanımlama kısmı JetFanları Struct haline getirdim.
    // JetFan yapısı ve fan numaraları başlangıç değeri olarak verildi.
    JetFan:ARRAY[0..9] OF JetFan_Type := [(No:=0),(No:=1),(No:=2),(No:=3),(No:=4),(No:=5),(No:=6),(No:=7),(No:=8),(No:=9)];
    SiralamaNo, Temizle:ARRAY[0..9 ] OF JetFan_Type;
    GirilenDeger:INT;
    i,j:INT;
    Takas:JetFan_Type;
    Test:R_TRIG;
    Edge,SortDone:BOOL;
END_VAR
Kod:
TYPE JetFan_Type : // JetFanların type yapısı
   STRUCT
       No:INT; // Jet Fan Numarası
       Start:BOOL;
       Stop : BOOL;
       RunTime : REAL; // Çalışma Zamanı
   END_STRUCT
END_TYPE
 
Son düzenleme:
Yukarıdaki kodda "Baloncuk Sıralama" algoritmasına örnektir. Meraklısına aşağıdaki belgeseli inceleyebilir.
 

Yeni mesajlar

Forum istatistikleri

Konular
128,193
Mesajlar
915,740
Kullanıcılar
449,968
Son üye
ibrahimkalebayir38@gmail.

Yeni konular

Geri
Üst