Siemens Simatic S7 SCL Programlama Dili

Fluke

Yönetici
Yönetici
Yönetici
Katılım
19 Ocak 2007
Mesajlar
971
Puanları
158
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

elektronikmuh

Yönetici
Yönetici
Yönetici
Katılım
13 Ocak 2007
Mesajlar
1,842
Puanları
1,768
Yaş
42
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

  • 1.4 MB Görüntüleme: 987
  • Beğen
Tepkiler: huh

elektronikmuh

Yönetici
Yönetici
Yönetici
Katılım
13 Ocak 2007
Mesajlar
1,842
Puanları
1,768
Yaş
42
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 progr*****) 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:

elektronikmuh

Yönetici
Yönetici
Yönetici
Katılım
13 Ocak 2007
Mesajlar
1,842
Puanları
1,768
Yaş
42
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:

janizary

Üye
Katılım
11 May 2007
Mesajlar
26
Puanları
3
Yaş
35
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:

elektronikmuh

Yönetici
Yönetici
Yönetici
Katılım
13 Ocak 2007
Mesajlar
1,842
Puanları
1,768
Yaş
42
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
Katılım
1 Ağu 2007
Mesajlar
8
Puanları
3
Yaş
32
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
 

passwordc

Üye
Katılım
16 Tem 2006
Mesajlar
3
Puanları
1
Yaş
34
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?
 

janizary

Üye
Katılım
11 May 2007
Mesajlar
26
Puanları
3
Yaş
35
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.
 

sutlac

Üye
Katılım
6 Mar 2008
Mesajlar
12
Puanları
1
Yaş
34
Peki her scl dilini kullandığımızda OB kullanmak zorunda mıyız?Yoksa FC ler yeterli olabilir mi programı compile etmek için?
 

Benzer konular


Sponsor Bağlantı

Forum istatistikleri

Konular
104,193
Mesajlar
732,908
Kullanıcılar
387,566
Son üye
elprotector

Yeni konular

Üst