stl 'yi ladder a çevirmek

PLC hesaplama yaparken ara sonuçları saklamak ve işlem yapmak için ACCU (akümülatör) denen 32 bitlik hafıza alanlarını kullanıyor.

Kod:
L 2.0 //(Hafıza alanına (ACCU1'e) 2.0'ı yüklüyor, önceki ACCU1 değerini ACCU2'ye aktarıyor)
LN   // (2.0'ın doğal logaritmasını alıyor, sonuç ACCU1'de)
/R    //(ACCU2 bölü ACCU1 işlemini yapıyor, sonucu ACCU1'e yazıyor)
RND  //(ACCU1'i tam sayıya çeviriyor)
T MW0  //(ACCU1'in sağdaki 16 bitini MW0'a aktarıyor)
 
arkadaşım benim dedğim gibi doğrudan çevirebiliyor.yuklu bir pcde dene
 
siz denediniz herhalde,direkt çevrilebiliyorsa sorun yok zaten deneyemediğimiz için burda konuştuk.sonucu en kısa zamanda yazıcam.
teşekkürler...
 
Kod:
L PIW256
DTR
LN         // ln[real(piw 256)]= A işlemi yapıldı
L 2.0      // 2.0 sayısını alıyor
LN         //  ln (2.0)  = B işlemi yapıldı
/R         // A/B işlemi yapılıyor
RND        //  bölme sonucu yuvarlanıyor
T MW0      //   MW0 a transfer ediliyor
 
SONUÇ: başta yazmış olduğum stl yi s7 de yazdım ve kendisi otomatik olarak lad'e ceviremedi....
sorun devam ediyor....
 
sayın çakır :
stl yazılımı matematik işlemleri yapmadata daha avantajlı. programın laddere çevrilmiş hali ekete. biraz renkli oldu. :)) iyi çalışmalar.
verdiğiniz stl komutlarında l pıw256 den sonra alttaki satıra ITD komutu gelmeliydi.yani 16 bitlik sayıyı dınt formatına çevirmeliydi. sizin verdiğiniz kodları simulatörde çalıştırdığımda hiç bir hata vermeden işlem yapıldı.
DTR sayıyı "DINT" formatından REEL yani ondalıklı sayı düzenine çevirir.
LN sayının logaritmesını al.
DIV_R REEL olarak bölme işlemi
ROUND reel sayıyı yuvarla dınt formatına getirme komutu.
projede IO.O inputu kullandım siz bunu kullanmayıp netvorklara yazarak programı yazabilirisniz.
saygılar.
 

Ekli dosyalar

  • s7_stl-_lad3.jpg
    s7_stl-_lad3.jpg
    96.7 KB · Görüntüleme: 103
Son düzenleme:
STL dilinde 8 satırda yaptığın matematiksel işlemi görüyorsunuz ladderda bir sürü kutularla uğraşman gerekiyor, 8 satırda fazla aslında SCL dilini öğrenirsende tek satırda aynı programı yazabilirsin.

Sonuc := REAL_TO_INT( ( LN(INT_TO_REAL(piw256) )/ln(2.0) );
 
L PIW 256
DTR
//ile Analog degeri okuyup Accumulatore kaydedersin.
//örnek resim de 1385 okunmuş
//sonra bu accu1 deki degerin Ln logaritması alınarak 9.53 bulunmuş ve accu2 ye yazılmış.
L 2.0 //ile Accu1 e 2 degeri yüklenmiş
LN // ile accu1 in Ln logaritması alınarak 0.69 bulunmuş.
/R // ile accu2 deki 9.53 ile accu1 deki 0.69 bölme işlemine tabi tutulmuş.
RND // yuvarlama yapılmış.

T MW0 // transfer edilimiş mw0 adresine
 
Kodun açıklaması şu şekilde. Ama çalışıp çalışmadığını test etmedim...
Kod:
      L     PIW  256
      DTR   
      LN                                //ile reel sayıya çevirdiği değerin logaritmasını alıyor. (değer ACCU 1 de) 
      L     2.000000e+000               // 2.0 değerini yüklüyor
      LN                                // 2.0 değerinin logaritmasını alıyor. (değer ACCU 2 de)  
      /R                                // ACU 1 değeri ACU 2 değerine bölüyor (sonuç ACCU 1 de)
      RND                               // Çıkan sonucu yuvarlıyor (32 bit double integer)
      T     MW     0                    // MW 0'a transfer ediyor.
 
sayın çakır :
stl yazılımı matematik işlemleri yapmadata daha avantajlı. programın laddere çevrilmiş hali ekete. biraz renkli oldu. :)) iyi çalışmalar.
verdiğiniz stl komutlarında l pıw256 den sonra alttaki satıra ITD komutu gelmeliydi.yani 16 bitlik sayıyı dınt formatına çevirmeliydi. sizin verdiğiniz kodları simulatörde çalıştırdığımda hiç bir hata vermeden işlem yapıldı.
DTR sayıyı "DINT" formatından REEL yani ondalıklı sayı düzenine çevirir.
LN sayının logaritmesını al.
DIV_R REEL olarak bölme işlemi
ROUND reel sayıyı yuvarla dınt formatına getirme komutu.
projede IO.O inputu kullandım siz bunu kullanmayıp netvorklara yazarak programı yazabilirisniz.
saygılar.



ulaş arkadaşım ben denedim buragramı fakat skalalandırmada sorun yasıyorum hangi adresten okursam okuyayım doğru sonucu vermıyor. hatta programdaki MW0'ı da fc 105 girdim. 0 - 100 arası skala yap dedım yıne olmadı.
 

Yeni mesajlar

Forum istatistikleri

Konular
129,802
Mesajlar
930,226
Kullanıcılar
452,605
Son üye
mehmet-azaplar

Yeni konular

Geri
Üst