Codesys Yazılımı V2.x-V3.x ST Dili

hasanzincir

Paylaşımcı üye
Katılım
17 Haz 2007
Mesajlar
684
Puanları
131
Yaş
46
Siemenste SCL olarak bilinen programlama dilini codesys platformu üzerindeki ismi ST dir. Hareket kabiliyeti en güçlü dildir.Standart yazılım
dillerinde delphi codlama yöntemi ile birebir örtüşür asagıda verdiğim
resimler oscat libraylerinin ST dilinde acılmış halleridir.

Bu konu altında code türettikçe kod paylaşımı yapacağım arkadaşlar
sizlerinde ST dilinde kodlarınız varsa bu konu altında paylaşmanız
hepimize bir şeyler katıcaktır.

CodesysV2.x
codesysv23.jpg


CodesysV3.x
codesysv3.jpg
 
KNX Standardı, küçük bir rezidansın içerisindeki aydınlatma, perde panjur, klima kontrolünden, Dünya’nın en büyük havalimanlarındaki aydınlatma otomasyonu gibi çözümler için tercih edilen bir Dünya standardıdır.
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
Daha önce Siemens SCL dilinde yapmıştım şimdide CodeSys i deneyelim bakalım, en sevdiğim özelliği bir degişken koyunca otomatik tanımlamasını sorması yani hemen değişken tipini soruyo ve tipini seçiyosunuz ve unutuyorsunuz :)

y=ax+b fonksiyonunda

a=1
x=5
b=10 için y=x+10 fonksiyon bloğu sonucu y=15 tir :)
Yukarıda yazdığım scale fonk. bloğunu aşağıda parametreleriyle PLC_PRG içinde çağırıyorum ve simule ediyorum
 
Basit Puls Ureteci

Kod:
PROGRAM puls

VAR_INPUT
 HighBitFC3      :BOOL; 
 PulsHighTVFC3:TIME;
 PulsLowTVFC3:TIME;
    
END_VAR

VAR_OUTPUT
 Puls_OutFC3:BOOL;   
END_VAR
        
VAR
    PulsHigh_TimeFC3:TON;
    PulsLow_TimeFC3 :TON;
    PulsHighBitFC3  :BOOL; 
    PulsLowBitFC3   :BOOL;
END_VAR

(******Puls High Zamanı*******)
 PulsHigh_TimeFC3(IN:=(HighBitFC3 = 1) AND (PulsLowBitFC3 = 0),
                                        PT:= PulsHighTVFC3 ,
                                        Q=> PulsHighBitFC3);

(******Puls Low Zamanı*******)
 PulsLow_TimeFC3( IN:=(Puls_OutFC3=1),
                                          PT:= PulsLowTVFC3 ,
                                          Q=> PulsLowBitFC3);

(*****Puls cıkısı************)
IF (PulsHighBitFC3=1) THEN
    Puls_OutFC3:=1;
ELSIF PulsLowBitFC3=1 THEN
    Puls_OutFC3:=0;
END_IF;
 
Sıralı(Sequender) İşlem

Trans Geciş sartlarıdır step işlem yapılan alan intial baslangıc step! Data kalıcı seçilirse kaldığı yeri unutmaz.Program genişletildiğinde cok kullanışlı olur.
Kod:
PROGRAM trans
VAR
	trans00: BOOL;
	trans01: BOOL;
	trans02: BOOL;
	data: BYTE;
	I01: BOOL;
	I02: BOOL;
	I03: BOOL;
	intial: BOOL;
	Step1: BOOL;
	Step2: BOOL;
	
END_VAR

trans00:=(data=0) AND( I01=1);
trans01:=(data=1) AND( I02=1);
trans02:=(data=2) AND( I03 =1);


IF (trans00=1) THEN data:=1;
ELSIF  (trans01=1) THEN data:=2;
ELSIF  (trans02=1) THEN data:=0;
END_IF;

intial:=(data=0);
Step1:=(data=1);
Step2:=(data=2);
 
Basit sensor filitresi Hem girme zamanına hemde cıkma zamanını bakar.

Kod:
PROGRAM Basit Sensor Filitresi

VAR_INPUT
       Input:BOOL;
	InTime:TIME;
	OutTime:TIME;
END_VAR

VAR_OUTPUT
	Output:BOOL;
      InTimeAct:TIME;
	OutTimeAct:TIME;
END_VAR

VAR
	TON_IN: TON;
	TON_OUT: TON;
END_VAR

(**************Program Baslangıcı*****************)

TON_IN(IN:=( Input=1) ,
                PT:=InTime ,
                ET=>InTimeAct );

TON_OUT(IN:=( Input=0) ,
                    PT:=OutTime ,
                    ET=>OutTimeAct );

IF TON_IN.Q=1 THEN
Output:=1;
ELSIF TON_OUT.Q=1 THEN
Output:=0;
END_IF;
 
Codesys platformunda Marker hafızanın Retain(Kalıcı) olarak kullanılması başa bela olmuştur.Tabi her marka için gecerli değil bazı markalar bunu direk tanımlı sunabiliyor.Benim kullandığım moeller markasındaki X200 lerde ise tanımlı değildi; değişik bir yöntemle sağlanıyordu. Tabi onu keşif edene kadar bende basit kendi yöntemimi uyguladım.Basit bir kod parçası ama o zaman günü kurtarmıştı.Bu arada Adressiz alanları retain içine yazıp kullanmıştım.

Global Variable Listesi kodu
Kod:
VAR_GLOBAL
    Mark_Retain_PRG AT %MW0 :ARRAY[0..20] OF INT;
END_VAR
VAR_GLOBAL RETAIN
    Sanal_Retain_PRG: ARRAY[0..20] OF INT;
END_VAR


Fonksiyon Blok Kodu
Kod:
FUNCTION_BLOCK Retain_Memory
VAR_IN_OUT
    Sanal_Retain: ARRAY[0..20] OF INT;
    Mark_Retain: ARRAY[0..20] OF INT;
END_VAR

VAR
    TP_Retain: TP;
    TON_Retain: TON;
END_VAR

(*Retain hafizadaki degerleri ilk 50ms boyunca marker hafizaya move lar*)

TP_Retain (IN:=TRUE , PT:=T#50MS );
IF TP_Retain.Q THEN
 Sanal_Retain:= Mark_Retain;
 END_IF;

(*80 ms sonra ve sürekli degisen dedgerleri marker hafizadan retain hafizaya atar*)

TON_Retain (IN:=TRUE , PT:=T#80MS );
IF TON_Retain.Q THEN
  Mark_Retain:=Sanal_Retain;
 END_IF;
 
hasan hocam ben size bir şey sormak istiyorum ...
mesele yazdık programı codesys st(scl(delphi)):)ile bunu ladder haline convert edebilirmiyiz acaba .... şöylek ben bir firmada çalışıyorum illada lad olacak programlar...benim buna ayak uydurmam lazım ...öğrendim ki schneıder plc ler codesys ile programlanıyor bende sıemensden scl öğrenmek için çok çaba harcadım ....
var mıdır (st to lad ) fonksiyonu bu programın hocam?
 
Yok kodu lad ceviremessiniz.Siemensler de STL koduna cevirebiliyor.Lad isteniyorsa direk ladderde yazmakta fayda var. Bende projelerimde SCL yada ST Kullanıyorum backup verdiğim firmalar bu ne falan diyor.Bende bilmediğin şeyi kurcalama o zaman diyorum.
 
Lad öğreneceğiz o zaman .... Yada bizim firmanın akıllanmasını bekleyeceğiz daha fonksiyonel ve kabiliyeti yüksek bir dilde yazma kararı almasını bekleyeceğiz :) cevabınız için teşekkür ederim ....
iyi çalışmalar hasan bey..
 
hasan hocam yanlisiniz var st dilinden diger bütun dillere ceviri yapabilirsiniz fakat diger dillerden st ye ceviri yapamazsiniz.

xsoft ta sol tarafta acik duran plc prg a gelip sag tikliyoruz convert object secenegine tiklayip istedigimiz dile convert yapiyoruz.
 
Moderatör tarafında düzenlendi:

Forum istatistikleri

Konular
127,950
Mesajlar
913,857
Kullanıcılar
449,598
Son üye
kadir12366

Yeni konular

Geri
Üst