SCL ile DataBlock daki sayıları küçükten büyüğe doğru sıralama

dodo41

Üye
Katılım
25 Şub 2018
Mesajlar
122
Puanları
1
Merhaba arkadaşlar. Daha önce bu forumda böyle bir konu açılmış, daha önce hiç SCL kullanmadım ancak orada verilen kodları derleyip çalıştırdığı da hata vermedi. Ama sayıları sıralama işlemini de yapmadı. Nerede hata yaptığımı anlayamadım yardımcı olur musunuz lütfen. Aşağıda proje resimlerini paylaşıyorum.
Başlangıç değerine 0 ve bitiş değerine 31 yazdım. Data block a HMI' dan ve Vat tablosundan değer gönderdim. Değerleri data block a yazdı, ancak sıralama işlemini yapmıyor.
Daha önce paylaşılan kodları aşağıda paylaşıyorum.
Konu içindeki mesaj 'Siemens Simatic S7 SCL Programlama Dili' https://www.kontrolkalemi.com/forum/konu/siemens-simatic-s7-scl-programlama-dili.1047/post-150043
Ekran Alıntısı_1_024238.JPG

Ekran Alıntısı-2_024257.JPG

Ekran Alıntısı-3_024313.JPG

Ekran Alıntısı-4_024327.JPG
 
Denemek için data bloğun array ını 4 e aldım ve rastgele 5 değer gönderdim sonuç:
1662108075075.png
 
Son düzenleme:
Denemek için data bloğun array ını 5 e aldım ve rastgele 5 değer gönderdim sonuç:
Ekli dosyayı görüntüle 90375
Problemin nerede olduğunu anlayamadım açıkçası, Set lemem gereken bir komut falan var mı? Yoksa SCL Kodundaki [0..31] komutunu [0..4] yapınca çözülecek mi problem? SCL Konusunda çok yeniyim o yüzden nasıl yapmam gerektiğini bilmiyorum, FB 100 ü OB1 de çağırdığımda yapmam gereken başka bir şey var mı? Bir de rica etsem eğer imkânınız varsa projeyi buraya yükleyebilir misiniz? Teşekkür ederim. İyi çalışmalar.
 
Denediğim dosya EKte. Sirala komutuda ekledim, Sirala(M0.0) komutunu true yapınca sıralar
Simülasyon için PLC Sim i MPI a çekin
1662107131434.png
1662108104504.png
 

Ekli dosyalar

  • Scl_sort.zip
    136 KB · Görüntüleme: 10
Son düzenleme:
Bugün deneyeceğim. Çok teşekkür ederim. Kolay gelsin.
 
Yazdığınız kodda if bloğunda data[j] değerini swap değişkenine atamışsınız.
data değerini değiştirmişsiniz ama data[j] için bir değişiklik yapmamışsınız. Orjinal postta dikkat ederseniz o kısım da yapılmış.

Kod:
IF DB101.Data[i]> DB101.Data[j] THEN  // i ve j inci veriler test edilir
        Swap          := DB101.Data[j];    // Yer degiştirme işlemi yapıyoruz
        DB101.Data[j] := DB101.Data[i];
        DB101.Data[i] := Swap;
END_IF;
 
Merhaba @elektronikmuh paylaştığınız proje çalıştı, desteğiniz için teşekkür ederim. Size bir sorum daha olucak, FB100 'ü açtığımda STL Olarak açılıyor ama siz projeyi SCL Olarak yazmıştınız bunun neden STL Olarak açıldığını anlayamadım. Bir de DB101.DBD0 değerinin Sıfırdan büyük olması koşulunu nasıl ekleyebiliriz? Yani Array daki herhangi bir değer sıfırdan büyük ise o değer yazılsın. Sadece Array daki değerlerin hepsi sıfır ise
DB101.DBD0 değeri "0" olsun. Şeklinde bir komut eklenebilir mi? Teşekkür ederim.
 
Çünkü SCL programı sizde yüklü değil, yüklüyse açması gerekirdi.
 

Forum istatistikleri

Konular
129,867
Mesajlar
930,872
Kullanıcılar
452,732
Son üye
erencok

Yeni konular

Geri
Üst