Siemens Simatic S7 SCL Programlama Dili

M.Ozkan

Yönetici
Yönetici
Yönetici
Katılım
19 Ocak 2007
Mesajlar
978
Puanları
156
Simatic SCL Nedir?


Simatic SCL Siemensin S7 serisi PLC lerinde kullandığı yüksek seviyeli programlama dilidir. Structured Control Language anlamına gelir. Bu yazılım dili bir çoğumuzun aşina olduğu Delphi gibi editörlerin ana dili olan Pascal yazılım diline dayanır. Yazılım içerisinde tıpkı Ladder, Graph, STL ve FBD gibi HMI (Human Machinery Interface) temeline dayanan genel yazılımların tüm fonksiyonlarını yapabilir ve bilgisayar gibi hafızada değişkenler oluşturabilir bunları Data Blocklara atayabilir onlardan alabilir. Ayrıca Pascal dili yardımıyla Counter, Timer, Set,Reset, Clock, Interrupt, System Function gibi işlemlerede üst düzeyde izin verir. Birçok PLC yazılımcı firma bu dili çok komplike ve uzman seviyesinde bilgi gerektirdiğinden kullanmakta zorlanır ama genel olarak Dilin becerisi PLC üzerinde çok fazladır. Örnek kodu şu biçimde özetlenebilir:

S_CUD (C_NO:=C12,
CD:=I0.0,
CU:=I0.1,
S:=I0.2 & I0.3,
PV:=120,
R:=FALSE,
CV:=binVal,
Q:=actFlag);

FUNCTION_BLOCK COUNT
VAR_INPUT
Count: ARRAY [1..4] of STRUCT
C_NO: INT;
PV : WORD;
END_STRUCT;
.
.
END_VAR
.
.
FOR I:= 1 TO 4 DO
S_CD(C_NO:=Count.C_NO, S:=true, PV:= Count.PV);
END_FOR;
FUNCTION_BLOCK COUNTER
VAR_INPUT
MYCounter:COUNTER;
END_VAR
.
.
CurrVal:=S_CD (C_NO:=MyCounter,.....);


Bu örnek kodlar sayesinde SCUD tipinde yukarı aşağı sayıcının gerektirdiği aktif olma sinyali, Counter parametreleri ve sayıcı içeriğinin nerelerle ilişkilendirildiği gibi faktörler oluşturduk. Orta ve temel düzey kullanıcılar için öğrenilmesi tavsiye edilmese bile ileri düzey kullanıcılar için oldukça spesifik işlemler yaptırabilmektedir. SCL Editörünün çalıştırılması için Simatic Manager ve Simatic SCL V5.3 bilgisayarınızda yüklü olmalıdır.
 

Ekli dosyalar

  • KEGS_DOK_GKLVZ_SCLEgitimDokumani_011.rar
    697.1 KB · Görüntüleme: 2,790
Evet fluke kardeş SCL güçlü bir dil, bu gücü daha çok komplex algoritmaların oluşturulması, Data Bloklarla ilgili sıralama, veya matemetiksel işlemler, indeksli değişkenler oluşturularak bilgilerin taranması vs gibi işlemlerde bizlere çok kolaylık getiren Pascal tabanlı bir dil...
For Next , While End, Do While, Repat Until gibi döngüleri PLC prglarken kullanabiliyorsunuz ve bu size diğer dillerde yazılmış algoritmaların PLC tarafına adapte edilmesinde baya kolaylık sağlıyor.(Tabi SCL dilini compile ettiğinizde STL olarak karşımıza çıkıyor.)
3 SCL AVANTAJLARI NELERDİR?
Scl yüksek seviyeli bir programlamanın bütün avantajlarını sunmaktadır.

SCL bu esnekliği ile PLC programcılığı için oldukça kolaylaştırıcı rol oynamaktadır. Programcı SCL ile istediği yapıları istediği programlama tekniğini (STATE metodu,İLİŞKİSEL metodu. vs.) kullanarak ortaya koyabilir. SCL STEP 7 için kullanılan blok yapılarını destekler. Dolayısıyla SCL içerisinde STL’ de ya da Ladder ’da oluşturulan bloklar çağırılabilir ve aynı şekilde SCL programlama dili kullanılarak oluşturulan bloklar STL’de ve Ladder ‘da çağırılabilir.


S7-SCL V5.3 for S7-300/400 manuali:
 

Ekli dosyalar

  • SCL_e.pdf.zip
    1.4 MB · Görüntüleme: 1,533
  • Beğen
Tepkiler: huh
Giriş degerini(analog bir deger olabilir) alt ve üst limitler arasında sınırlayan( max değerden büyükse maksimum, minumum değerden küçükse minumum, arasında ise direkt çıkaşa aktaran program SCL programlama kodu


Kod:
FUNCTION FC50:VOID  //FC50 yi kullandık

VAR_INPUT     //Değişkenleri tanımladıgımız kısım
  MX : INT;    //Upper limit
  IN : INT;    //Input value
  MN : INT;    //Lower limit
END_VAR

VAR_OUTPUT
  OUT:INT;
END_VAR  // Degişken tanımlama sonu,


BEGIN     //Programımız buradan başlıyor

IF IN > MX THEN 
   OUT := MX;        //Giris degeri IN, maksimum degerden büyükse çıkışımıza MX atanır
ELSIF IN < MN THEN 
   OUT := MN;    //Giriş degeri IN, minumumdan küçükse çıkışımıza MN degeri atanır
ELSE 
   OUT := IN;             // Giriş degerimiz iki deger arasındaysa OUT=IN, yani çıkış=giriş   
END_IF;                     // Şart sonu

END_FUNCTION
 
Son düzenleme:
Kod:
// SCL dilide çıkan kenar algılama ve yapılacak işlemler ile ilgili örnektir.

FUNCTION FC10:VOID
VAR_INPUT
   Manual : BOOL;
END_VAR

VAR
  Manual_FM   : BOOL;
END_VAR

//Edge evalaution (rising edge)
IF Manual AND NOT Manual_FM
  THEN 
        (*rising edge*);
END_IF;
Manual_FM := Manual;  //Correct edge memory bit
END_FUNCTION
 
Son düzenleme:
selamlar

acaba kandi yaptığınız örnekler varsa yayınlayabilir misiniz?

PLC dünyasına direk bu dille daldım. fakat bazı fonksiyonları ve kullanımları anlayabilmem için daha basit ve daha fazla örnege ihtiyacım var.

ben yaptığım basit bir otomasyonu gönderiyorum. inşallah buradan birbirimize yardım ederek bu dille siemens plc programlamayı gelişterebiliriz.

Aşağıdaki program baraj kontrolü, bütün kodların açıklamaları yanlarında yazılı, CPU 315, 24DC'lik dijital giriş çıkış var.

Lütfen birbirimize yardımcı olalım. bu işe yeni başlayan arkadaşların tecrübeli arkadaşlardan öğreneceği çok şey var







Kod:
FUNCTION FC1:VOID

//Giriş deklarasyonları yapıldı
//-----------------------------------------------------------------------------------------------
VAR_INPUT
  basla:BOOL;
  bitir:BOOL;
  uyari1:BOOL;
  uyari2:BOOL;
  uyari3:BOOL;
END_VAR
//-----------------------------------------------------------------------------------------------


//çıkış deklarasyonları yapıldı
//-----------------------------------------------------------------------------------------------
VAR_OUTPUT
  normal_calisma:BOOL;
  uyari_lambasi:BOOL;
  sesli_uyari:BOOL;
  baraj_kapaklari:BOOL;
END_VAR
//-----------------------------------------------------------------------------------------------


//yanıp sönme için gerekli döngünün deklarasyonu yapıldı
//-----------------------------------------------------------------------------------------------
VAR
  i:INT;
END_VAR
//-----------------------------------------------------------------------------------------------

BEGIN

IF basla=1 AND bitir=0 THEN //başla ve bitir butonlarına göre baraj sistemi kontrolü başlangıcı
  i:=i+1; // yanıp sönme işlemi için sayıcı
  IF uyari1=1 THEN //eğer uyarı1 gelirse yapılacakların kodlandığı alan
  
//yanıp sönme için yazılan kod uyarı lambası 2 sn aralıklarla yanıp sönecek
//-----------------------------------------------------------------------------------------------         
    IF i>0 AND i<100 THEN
      uyari_lambasi:=1; 
    END_IF;
    IF i>100 AND i<200 THEN
      uyari_lambasi:=0;
    END_IF;
    IF i>200 THEN
      i:=0;
    END_IF;
//-----------------------------------------------------------------------------------------------


//uyarı1 gelmezse normal çalışma lambası yanacak ve uyarı1 lambası sönecektir
//-----------------------------------------------------------------------------------------------  
  ELSIF uyari1=0 THEN
    normal_calisma:=1;
    uyari_lambasi:=0;
  END_IF;  
//-----------------------------------------------------------------------------------------------


//uyarı1 ve uyarı2 geldiğinde ve gelmediğinde uyarı1 ile olusacak uyarılar yanında sesli uyarı
//da aktif olacak veya sesli uyarı pasif yapılacaktır. bu arada eğer uyarı1 ve uyarı2 gelmezse 
//normal çalışma ışığı yanacaktır.
//-----------------------------------------------------------------------------------------------    
  IF uyari2=1 AND uyari1=1 THEN
    sesli_uyari:=1;
  ELSE 
    normal_calisma:=1;
    sesli_uyari:=0;
  END_IF;
//-----------------------------------------------------------------------------------------------


//uyarı1, uyarı2 ve uyarı3 geldiğinde ve gelmediğinde uyarı1 ve uyarı2 ile olusacak uyarılar 
//yanında baraj kapakları da aktif olacak veya baraj kapakları pasif yapılacaktır. bu arada 
//eğer uyarı1, uyarı2 ve uyarı3 gelmezse normal çalışma ışığı yanacaktır.
//-----------------------------------------------------------------------------------------------  
  IF uyari3=1 AND uyari2=1 AND uyari1=1 THEN
    baraj_kapaklari:=1;
  ELSE 
    normal_calisma:=1;
    baraj_kapaklari:=0;
  END_IF;
//-----------------------------------------------------------------------------------------------  


//eğer başla butonuna basılmazsa ve bitir butonuna basılırsa yapılacaklar
//-----------------------------------------------------------------------------------------------
ELSE 
  normal_calisma:=0;
  uyari_lambasi:=0;
  sesli_uyari:=0;
  baraj_kapaklari:=0; 
//-----------------------------------------------------------------------------------------------  

  
END_IF; 
END_FUNCTION 


ORGANIZATION_BLOCK OB1 
BEGIN

//FC1 fonksiyonunun deklare edilen giriş ve çıkışlara göre çağırılması
//-----------------------------------------------------------------------------------------------  
FC1(basla:=I0.0,bitir:=I0.1,uyari1:=I0.2,uyari2:=I0.3,uyari3:=I0.4,normal_calisma:=Q0.0,uyari_lambasi:=Q0.1,sesli_uyari:=Q0.2,baraj_kapaklari:=Q0.3); 
//-----------------------------------------------------------------------------------------------  

END_ORGANIZATION_BLOCK
 
Moderatör tarafında düzenlendi:
Kod:
Function f_lin : real
title ='f_lin'


var_input
  x : real;
  a : real;
  b : real;
end_var
var
end_var


f_lin := a * x + b;


end_function
 
Son düzenleme:
  • Beğen
Tepkiler: RLc
bu dili öğrenecek arkadaşlara tavsiye pascal dilini iyi öğrensinler.Mühendislik hesaplamalarında hala geçerliliğini korumaktadır çünkü yüksek seviyesi(anlaşılabilirlik) karmaşık gibi görünen problemleri çözmeyi kolaylaştırmaktadır saygılarımla
 
Merhaba. SCL dilinde yazdığımız program FOR döngüsü sırasında programı Loop'a mı sokuyor yoksa OB döngüsünü tamamlatıyor mu?? Eğer Loop içerisinde kalıyorsa programın döngü süresinin uzaması ve diğer yapılacak işlemlerin gecikmesi söz konusu olacaktır. Görüşleriniz nelerdir acaba arkadaşlar?
 
OB1 fonksiyonunun döngüsel özelliği vardır. onun için uzun zaman alan döngüler yerine OB1 fonksiyonun bu özelliği kullanılabilir.
 
Peki her scl dilini kullandığımızda OB kullanmak zorunda mıyız?Yoksa FC ler yeterli olabilir mi programı compile etmek için?
 

Forum istatistikleri

Konular
130,133
Mesajlar
933,438
Kullanıcılar
453,209
Son üye
felonika

Yeni konular

Geri
Üst