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

hasanzincir

Paylaşımcı üye
Katılım
17 Haz 2007
Mesajlar
685
Puanları
133
Yaş
41
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


CodesysV3.x
 

elektronikmuh

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

hasanzincir

Paylaşımcı üye
Katılım
17 Haz 2007
Mesajlar
685
Puanları
133
Yaş
41
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;
 

hasanzincir

Paylaşımcı üye
Katılım
17 Haz 2007
Mesajlar
685
Puanları
133
Yaş
41
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);
 

hasanzincir

Paylaşımcı üye
Katılım
17 Haz 2007
Mesajlar
685
Puanları
133
Yaş
41
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;
 

hasanzincir

Paylaşımcı üye
Katılım
17 Haz 2007
Mesajlar
685
Puanları
133
Yaş
41
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;
 

sina-n

Üye
Katılım
20 Haz 2008
Mesajlar
221
Puanları
3
Yaş
33
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?
 

hasanzincir

Paylaşımcı üye
Katılım
17 Haz 2007
Mesajlar
685
Puanları
133
Yaş
41
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.
 

sina-n

Üye
Katılım
20 Haz 2008
Mesajlar
221
Puanları
3
Yaş
33
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..
 
Katılım
6 Kas 2009
Mesajlar
4
Puanları
1
Yaş
35
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:

Sponsor Bağlantı

Forum istatistikleri

Konular
104,611
Mesajlar
736,029
Kullanıcılar
389,077
Son üye
Soissons

Yeni konular

Üst