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



 
Denemek için data bloğun array ını 4 e aldım ve rastgele 5 değer gönderdim sonuç:
 
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
 

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.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…