You are on page 1of 34

ST DİLİ (Structured Text)

PROGRAMLAMA
By Derstagram Akademi

HAZIRLAYAN : MUSTAFA AYDIN


OTOMASYON MÜHENDİSİ
www.derstagram.com
İÇİNDEKİLER

1.ÖNSÖZ
2.GİRİŞ
3.IF DÖNGÜSÜ
4.WHILE DÖNGÜSÜ
5.REPEAT DÖNGÜSÜ
6.FOR DÖNGÜSÜ
7.CASE DÖNGÜSÜ
8.EXIT DÖNGÜSÜ
9.RETURN DÖNGÜSÜ
10. ARRAY(DİZİLER)
11.FONKSİYONLAR

syf. 1
ÖNSÖZ

Değerli arkadaşlar ve saygıdeğer büyüklerim ..


Structured Text(ST) Dili ile ilgili tarafımca hazırlanan bu doküman ile umuyorum bu konuda
faydalı bilgiler edinirsiniz.
ST Dili ile ilgili en önemli öğrenme yöntemi , bol bol uygulama yapmaktır.Basitten ileri düzey
uygulamalara yavaş ve sıralı olarak ilerlemelisiniz.
Ladder diyagram ile karşılaştırıldığında bir hayli pratiklik ve kolaylıklar kazandıran ST Dili ,
inanıyorum ki önümüzdeki zaman diliminde hak ettiği ölçüde kullanılmaya başlanacaktır.
Sizlerden ricam ise ;
Dilek , öneri , şikayet , eleştirilerinizi olduğu takdirde tarafıma iletmenizdir.
Saygılarımla
Mustafa
#BilgiGüçtür
#DerstagramAkademi

syf. 2
GİRİŞ
ST Dili ile ilgili teknik bilgilere geçmeden önce CX – Programmer içerisinde ST Dili ile ilgili
alanlara ve nasıl kullanmamız gerektiğine resimler üzerinden bir göz atalım ..
1) Function Block kısmına gelip sağ tıklayarak , ST dili kullanımına izin veren bir CPU için ,
Insert Function Block’a tıklayıp -> Structured Text seçerek , bir ST Fonksiyon bloğu
oluşturabilirsiniz.Ve karşınıza çıkacak olan Function Block Properties kısmından da bu
bloğa isim verebilir , yorum ekleyebilir , fonksiyon bloğunuza şifre koyabilirsiniz.

2) Ardından program bölümü(section) içerisine bu fonksiyon bloğumuzu


eklemeliyiz.Bloğumuzun Enable olabilmesi için yukarıda da göreceğiniz üzere ben
P_On(Always ON) kontağını ekledim.Burada bloğumuzun ismini Test olarak
ayarladık.Fonksiyon bloğunu eklemek için section1 içerisinde herhangi bir program
satırı üzerine gelip ‘F’ tuşuna basarak , fonksiyon bloğunu ekleyebilirsiniz.Burada ‘F’
tuşuna bastığınızda Function Blocks kısmı altında olan tüm bloklar karşınıza gelecek
ve herhangi birisini seçebilirsiniz ancak burada da fonksiyon bloğunuza bir isim
vermeniz gerekiyor.

3) Fonksiyon bloğu içerisine girdiğinizde yukarıda karşınıza gelecek bölüm aşağıdaki


resim gibidir.Burada Internal (FB dahili değişkenleri) , FB giriş/çıkışları/giriş-çıkış/harici
değişkenler ,sabitlerin ayarlandığı alanı göreceksiniz.

syf. 3
4) Externals içerisinde yani harici değişken/sabitler , program içerisinde kullanacağınız
tüm yardımcı kontak yapılarını içerir.

5)Aşağıdaki resimde bu alana sağ tıklayıp -> New variable dediğinizde karşınıza gelecek olan
pencereyi göreceksiniz.Burada bir değişken ekleyebilir , bu değişkene isim verebilir , data
tipi , kullanımı ve kalıcı olup/olmadığını ayarlayarak değişken oluşturabiliriz ki
programlamaya başlamak için mutlaka ilk başta değişkenlerimizi oluşturmamız
gerekmektedir.

6) Advanced butonuna tıkladığınızda ise ,Array değişkenleri ve AT ayarları ile ilgili


düzenlemeleri göreceksiniz ve buradan gerektiğinde ayarlamalarınızı yapabilirsiniz.

syf. 4
Data Dönüşümleri ile ilgili 2 önemli tablo !

syf. 5
IF DÖNGÜSÜ
Structured Text – IF Döngüsü :
IF durum THEN durum-liste1
[ELSIF durum2 THEN durum-liste2]
[ELSE durum-liste3]
END_IF;

Durum1 ve Durum2 ifadeleri bool değer olarak değerlendirilmek zorundadır.Durum-Liste ile


ifade edilen ise basit birkaç durumun listesidir.
Örnek olarak -> a := a+1; b := 3+c gibi
Eğer durum1 doğru(TRUE) ise IF durum-liste1’i çalıştırır.Eğer ELSIF kodu var ise yani
kullandıysanız ve durum1 yanlış(FALSE) ise ve durum2 TRUE ise durum-liste2’yi
çalıştırır.Eğer ELSE’i de kulalndıysanız ve durum1 & durum2 FALSE ise durum-liste3’ü
çalıştırır.Durum-Liste1’in ,durum-liste2 ya da durum-liste3 ‘ün çalıştırılmasının ardından
kontrol END_IF’den sonraki diğer duruma geçer.
IF döngülerinde , durumlarında birden fazla ELSIF durumu olabilir ancak yalnızca bir kez
ELSE durumu kullanılabilir.
Örnek 1 :
IF a>0 THEN
b:=0;
END_IF;
Bu örnekte , değişken olan ‘a’ değeri ‘0’ dan büyükse , ‘b’ değişken değerine ‘0’ atanır yani b
= 0 olur.Eğer ‘a’ 0’dan büyük değilse , b değişkeni ile ilgili herhangi bir değişim ya da sonuç
meydana gelmez.Ve program END_IF ile ardından gelen stepleri kontrol ederek ilerler.

Örnek 2 :
IF a THEN
b:=0;
END_IF;
Eğer değişken ‘a’ TRUE ise b değişkeni ‘0’ değerini alacaktır yani b = 0 olacaktır.Eğer ‘a’
değişkeni FALSE ise , program b ile ilgili bir işlem yapmadan ilerleyecektri.

syf. 6
Örnek 3 :
IF a > 0 THEN
b := TRUE;
ELSE
b := FALSE ;
END_IF;
Bu örnekte ise eğer a değişkeni ‘0’ dan büyükse , b değişkeni değeri ‘TRUE = 1’ olacaktır ve
akış END_IF döngüsüne ve sonrasına ilerler.
Eğer a değişkeni ‘0’ dan büyük değilse , if döngüsünün hemen altında bulunan ilk ‘ b’
değişkeni üzerinde herhangi bir değişim olmaz ve döngü ELSE üzerine gelir.Ardından da b
değerine ‘FALSE = 0’ değeri atanır ve END_IF üzerinden program ilerler.

Örnek 4 :
IF a < 10 THEN
b := TRUE ;
c := 100;
ELSIF a > 20 THEN
b := TRUE ;
c := 200 ;

syf. 7
ELSE
b := FALSE ;
c := 300;
END_IF;
Burada eğer a değişkeni 10’dan küçükse , b değişkenine ‘TRUE = 1’ değeri atanır ve c
değişkenine de 100 değeri atanır ve program END_IF; üzerinden döngüden çıkar.
Eğer a değişkeni 10’a eşit ya da 10’dan büyükse , program ELSIF satırına atlar.Burada eğer a
değişkeni 20’den büyükse b değişkenine ‘TRUE = 1’ değeri atanır ve c değişkenine 200
değeri atanır.Ardından program END_IF; üzerinden döngüden çıkar.
Eğer a değişkeni 10 ile 20 arasında bir değer ise , o zaman IF ve ELSIF satırlarını atlayarak
program ELSE satırına gelir.Burada b değişkeni ‘FALSE = 0’ değerini alır ve c değişkenine 300
değeri atanır.Ardından program END_IF; döngüsü üzerinden ilerleyerek sonlanır.

Örnek 5 :
IF a THEN
b := TRUE ;
ELSE
IF c > 0 THEN
d := 100;
END_IF;
d :=400;
END_IF;
Eğer a değişkeni ‘1 yani TRUE’ ise b değişkenine TRUE değeri atanır , d değişkenine 400
değeri atanır ve program END_IF satırına ilerleyerek sonlanır.
Eğer a değişkenş ‘0 yani FALSE’ ise b değişkenine herhangi bir işlem yapılmadan program
ELSE satırına gider ve ardından eğer c değişkeni 0 dan büyükse d değişkenine 0 değeri
atanır.c değişkeni ‘0’ değerinden küçükse ya da eşitse program ikinci if döngüsü içerisindeki
ELSE satırına ilerleyerek d değişkenine 100 değeri atanır ve program END_IF döngüsüne
ilerleyerek sonlanır.

syf. 8
WHILE DÖNGÜSÜ
Structured Text – WHILE Döngüsü :
WHILE durum DO
durum-liste;
END_WHILE;
WHILE durumu bool bir değer almak zorundadır.Durum-liste olarak ifade edilen kısım ise
birden fazla durumdan oluşabilir.Durum ‘TRUE <-> 1’ olduğu sürece while döngüsü durum-
list’i sürekli olarak çalıştırır.Durum ne zaman FALSE (yanlış, 0) olursa o zaman döngü
END_WHILE üzerinden sonlanır.
Örnek 1 :
WHILE a < 10 DO
a := a +1 ;
b := b * 2,0;
END_WHILE;
Bu örnekte eğer a değişkeni 10 değerinden küçükse durum-list ( a := a+1 / b := b*2,0;)
çalıştırılır ve kontrol döngüsü tekrar başa döner ve kontrol eder.Eğer a değişkeni hala 10
değerinden küçükse , tekrar çalışır.Eğer a değişkeni 10 a eşit ya da 10’dan büyükse durum-
list çalışmaz ve program END_WHILE üzerinden ilerleyerek sonlanır.
Örnek 2 :
WHILE a DO
b := b+1;
IF b > 10 THEN
a := FALSE;
END_IF;
END_WHILE;
Bu örnekte eğer a değişkeni TRUE ise yani 1 ise , durum list (b := b+1 ve if döngüsü)
çalışır.Ardından tekrar while döngüsü başa döner ve a değişkenini kontrol eder.Eğer a
değeri TRUE ise tekrar durum list çalışır.Eğer a değişkeni FALSE <-> 0 ise döngü END_WHILE
üzerinen sonlanır.

syf. 9
Örnek 3 :
WHILE (a+1) >= (b*2) DO
a := a+1;
b := b/c;
END_WHILE;
Bu örnekte eğer (a+1) >= (b*2) denklemi TRUE <-> 1 ise bu durumda durum list olan (a :=
a+1 / b := b/c) çalışır ve ardından WHILE döngüsü başa döner.Bu durum WHILE döngüsü
içerisinde bulunan ve DO ifadesinden önce bulunan koşulun TRUE olduğu sürece sürmesine
sebep olur ki bu denklem FALSE <-> 0 olduğunda , program döngüsü END_WHILE üzerinden
sonlanır.
Örnek 4 :
WHILE (a-b) <= (b+c) DO
a := a+1;
b := b*a;
END_WHILE
Bu örnekte (a-b) <= (b+c) denklemi TRUE olduğu sürece durum list olan (a := a+1 / b := b*a;)
denklemleri çalışır ve program WHILE satırındaki denklem TRUE olduğu sürece çalışır.Bu
denklem FALSE olduğu zaman döngü END_WHILE; satırına atlar ve sonlanır.

syf. 10
REPEAT DÖNGÜSÜ
Structured Text – REPEAT Döngüsü :
REPEAT
durum-list;
UNTIL ifade
END_REPEAT;
REPEAT tabiri bool bir değer almak zorundadır.Durum-list ise farklı durumları alabilir ve
kullanabilir.
UNTIL satırındaki ifade FALSE <-> 0 <-> Yanlış olduğu sürece REPEAT sürekli olarak durum-
list ile verilen ifadeyi çalıştırır.
İfade doğru olduğunda ise , kontrol döngüsü sıradaki durum olan END_REPEAT; üzerinden
ilerleyerek durum sonlanır
Örnek 1 :
REPEAT
a := a + 1;
b := b * 2,0;
UNTIL a > 10
END_REPEAT;
Bu örnekte (a := a+1 ; b := b * 2,0;) durum-listesi çalışır.Ardından UNTIL satırında bulunan a
değerinin 10’dan büyük olup olmadığını kontrol eder.Eğer a değeri 10’dan büyük değilse
tekrar başa döner ve tekrar durum-liste çalışır.Ardından a değeri 10’dan büyük olur olmaz
kontrol döngüsü END_REPEAT üzerinden sonlanır.
Örnek 2 :
REPEAT
b := b + 1 ;
IF b > 10 THEN
a := FALSE;
END_IF;
UNTIL a
END_REPEAT;

syf. 11
Bu örnekte durum-listesi (b := b+1; ve IF .. THEN döngüsü ) çalışır.Çalıştırılmasının ardından
a değeri kontrol edilir.Eğer IF döngüsünün ardından a değeri FALSE ise kontrol tekrar başa
döner ve tekrar çalışır.Eğer a değeri TRUE ise kontrol döngüsü END_REPEAT üzerinden
sonlanır.

Örnek 3 :
REPEAT
a := a + 1 ;
b := b / c ;
UNTIL (a+1) >= (b*2)
END_REPEAT;
Bu örnekte durum-listesi (a := a+1; b := b/c) çalışır ve ardından UNTIL satırındaki ifade
kontrol edilir.Burada eğer (a+1) daha küçükse ki bu denklemin FALSE yani yanlış olduğunu
ifade eder kontrol döngüsü başa döner.Ardından tekrar durum-liste çalışır ve UNTIL
satırındaki ifade doğru olana kadar devam eder bu işlem.UNTIL satırındaki denklem TRUE
olduğunda ise END_REPEAT; üzerinden döngü sonlanır.
Örnek 4 :
REPEAT
a := a + 1;
b := b * a;
UNTIL (a – b) <= (b + c)
END_REPEAT;

syf. 12
Bu örnekte durum-listesi (a := a+1; b := b*a;) çalışacaktır ve ardından UNTIL satırı kontrol
edilir.Eğer UNTIL satırında bulunan denklem FALSE ise kontrol döngüsü tekrar başa döner ve
durum-liste tekrar çalışır.Ardından UNTIL satırında bulunan ifade TRUE olur olmaz program
END_REPEAT; üzerinden ilerleyerek sonlanır.

FOR DÖNGÜSÜ

STRUCTURED TEXT – FOR DÖNGÜSÜ :


FOR kontrol_değişkeni := integer ifade1 TO integer ifade2 [BY integer ifade3] DO
durum-liste;
END_FOR
FOR kontrol değişkeni bool değişken tipinde olmak zorundadır.FOR integer ifadeleri ise aynı
integer değişken tipinde kontrol değişkeni olarak çalışmalıdır.Durum-liste ise birden farklı
durumda olabilir.
FOR döngüsünde kontrol değişkeni integer ifade1 ile integer ifade2 arasında olduğu sürece
durum-liste çalışır.Eğer [BY integer ifade3] kısmı FOR döngüsü içerisinde kullanıldıysa ,
kontrol değişkeni integer ifade3 kadar her seferinde arttırılacaktır ki aksi durumda
varsayılan değer olan 1 kadar her seferinde arttırılacaktır.Her bir durum-listenin
çalışmasının ardından kontrol değişkenininde değeri artacaktır.Kontrol değişkeni integer
ifade1 ile integer ifade2 aralığından çıktıktan sonra kontrol döngüsü END_FOR satırına
ilerleyerek sonlanacaktır.
FOR döngüsü içerisinde FOR döngüsü kullanılabilir.
Örnek 1 :
FOR a := 1 TO 10 DO
b := b + a ;
END_FOR;
Burada a değeri 1 olarak başlatılacaktır ve her seferinde FOR satırında a değeri 10 ile
karşılaştırılacaktır.Eğer a değeri 10 değerine eşit ya da daha küçükse , durum-list olan b := b
+ a ; ifadesi bir kez çalıştırılacaktır ve döngü başa dönecektir.Burada a değeri 10 değerinden
büyük olana kadar döngü devam edecektir ve a değeri 10’dan büyük olur olmaz , kontrol
END_FOR; satırı üzerinden sonlanacaktır.

syf. 13
Örnek 2 :
FOR a := 1 TO 10 BY 2 DO
b := b + a;
c := c + 1,0;
END_FOR;
Burada a değeri 1 değerinden başlatılacaktır ve 10 değerinden küçük ya da eşit olduğu
müddetçe durum-liste çalıştırılacaktır.Ancak burada dikkat etmemiz gereken konu BY 2 ile
ifade edilen her seferinde a değerinin +2 arttırılacak olmasıdır. a değeri bu örnekte birer
birer değil de ikişer ikişer arttırılır.Döngü a değerinin 10 dan büyük olması durumunda
END_FOR üzerinden sonlanacaktır.

Örnek 3 :
FOR a := 10 TO 1 BY -1 DO
b := b + a ;
c := c + 1,0;
END_FOR;
Bu örnekte a değeri 10 değerini alarak başlar.Dikkat etmemiz gereken nokta ise BY -1
ifadesidir.Burada her bir döngüde a değeri bir azaltılacaktır.Bu durum a değerinin 10 ile 1
değerleri aralığından çıkması durumunda döngünün END_FOR; üzerinden ilerleyerek son
bulması ile sonlanır.

syf. 14
Örnek 4 :
FOR a := b + 1 TO c + 2 DO
d := d + a ;
e := e + 1 ;
END_FOR;
Burada a değeri b+1 değeri ne ise o değerden başlar ve döngü a değerinin b+1 ile c+2
değerleri arasında olduğu sürece durum-listenin çalışması ile devam eder.Her seferinde ise
BY ile verilen bir değer olmadığı için varsayılan değer kadar yani +1 kadar a değeri
arttırılır.En sonunda a değerinin bu aralığın dışına çıkması durumunda END_FOR üzerinden
program döngüsü sonlanır.
Örnek 5 :
FOR a := b + c TO d – e BY f DO
g := g + a ;
h := h + 1,0;
END_FOR;
Burada a değeri ilk olarak b+c değeri ne ise onunla döngüye girer.Ve eğer b+c ile d-e
değerleri arasında ise durum-liste bir kere çalışır ve burada BY f ile ifade edilen f değeri
kadar a değeri arttırılır her bir döngüde.a değeri aralık içerisinde olduğu sürece FOR
döngüsü çalışır ve f değeri kadar a değeri arttırılır.Tabi burada f değeri eğer ‘-‘ negatif bir
değer ise a değeri arttırılmayacak , azaltılacaktır her seferinde.Aralık dışında bir a değeri
olduğu anda FOR döngüsü END_FOR satırı üzerinden sonlanır.

CASE DÖNGÜSÜ

STRUCTURED TEXT – CASE DÖNGÜSÜ :


CASE ifade OF
case etiket1 [. case etiket2] [.. case etiket3] : durum-list1;
[ELSE
durum-liste2]
END_CASE;

syf. 15
CASE ifadesi integer bir değer almak zorundadır.Durum-liste ise birkaç farklı değer
alabilir.Case etiketleri ise 0 , 1 , +100 , -2 gibi geçerli tam bir integer değer almak zorundadır.
CASE anahtar kelimesinde ifade döndürülür ve çalışır ki ardından bağlantılı case etiket
değeri ki bu etiket değeri case döngüsü ile eşleşiyorsa çalışır ve ardından END_CASE; satırı
üzerinden bir sonraki adıma geçer.
Eğer herhangi bir eşitlik yok ise ve ELSE , CASE içerisinde kullanılmışsa o zaman ilgili durum-
liste çalışır ve ardından END_CASE üzerinden döngü sonlanır.ELSE kullanılmamışsa ,
END_CASE; üzerinden döngü sonlanır.
CASE döngülerinde farklı case etiket durumları mevcuttur.Fakat ELSE için bu durum söz
konusu değildir.
Virgül ‘,’ çoklu case etiketlerinin aynı durum-liste içerisinde kullanıldığında kullanılır.
İki nokta yan yana ‘..’ operatörü ise case etiketinin aralığını belirtir.Eğer CASE ifadesi o aralık
içinde ise ilgili durum-liste çalışır.(Ör : case etiketi . 1..10 : a := a+1;).Burada CASE ifadesi 1’e
eşit ya da daha büyükse ve 10’dan daha küçükse a := a+1; çalışacaktır.
Örnek 1 :
CASE a OF
2 : b := 1;
5 : c := 1.0;
END_CASE;
Burada CASE döngüsü çalışacak ve karşılaştırma yapacaktır.Eğer a değişkeni 2’ye eşitse
durum-liste b := 1; çalışacaktır ve ardından program END_CASE; üzerinden ilerleyerek bir
sonraki satıra atlar.
Eğer a değişkeni 5’e eşitse durum-liste c := 1.0; çalışacak ve program END_CASE; üzerinden
ilerleyerek bir sonraki satıra atlar.
Eğer a değişkeni 2 veya 5’e eşit değilse ki aslında CASE satırındaki ifade eğer case
etiketlerinden birine eşit değilse program END_CASE; üzerinden ilerler ve bir sonraki satıra
atlar.
Örnek 2 :
CASE a + 2 OF
-2 : b := 1;
5: c := 1.0;
ELSE
d := 1.0;
syf. 16
END_CASE;
Burada CASE satırındaki a+2 değeri eğer -2 ise b := 1; durum-listesi çalışır.Eğer a+2 değeri
eğer 5 ise c := 1.0; durum-listesi çalışır.Her iki durumda da durum-liste çalıştıktan sonra
program END_CASE; satırı üzerinden bir sonraki satıra atlar.
Eğer a+2 değeri -2 veya 5 değilse program ELSE satırına geçer ve ELSE şartı olan d := 1.0;
durum-listesi çalışır ve END_CASE; üzerinden program sonraki satıra ilerler.

Örnek 3 :
CASE a + 3 * b OF
1,3 : b := 2;
7,11: c := 3.0;
ELSE
d := 4.0;
END_CASE;
Burada a değikeni 3 değeri ile toplanıp b ile çarpılır ve kontrol döngüsü başlar.Eğer 1 veya 3
değerine eşit ise b:=2; durum-listesi çalışır.Eğer 7 veya 11 değerine eşit ise c := 3.0; durum-
listesi çalışır.Eğer 1 , 3 , 7 , 11 değerlerinden herhangi birine a +3 *b değeri eşit değilse ELSE
satırına geçer ve d := 4.0; durum-listesi çalışır.Yukarıdaki değerlerden herhangi birine eşit
olup çalışırsa END_CASE; üzerinden sonlanır ya da ELSE döngüsünden sonra END_CASE;
üzerinden program ilerleyerek sonlanır.

Örnek 4 :
CASE a OF
-2 , 2 , 4 : b := 2;
c := 1.0;
6..11,13 : c := 2.0;
1, 3, 5 : c := 3.0;
ELSE
b := 1;
c := 4.0;
END_CASE;

syf. 17
Burada a değeri (-2,2,4) değerlerinden herhangi birisine eşitse b:=2; ve c:=1.0; durum-liste
çalışır.
Eğer a değeri 6,7,8,9,10,11 veya 13 değerlerinden birisine eşitse c := 2.0; durum-liste çalışır.
Eğer a değeri 1 , 3 , 5 değerlerinden birisine eşitse c := 3.0; durum-liste çalışır.
Eğer a değeri bunlardan herhangi birisine eşit değilse program ELSE satırına geçer ve b:=1;
// c :=4.0; durum-liste çalışarak END_CASE; üzerinden bir sonraki adıma geçer.

EXIT & RETURN DÖNGÜSÜ

STRUCTURED TEXT – EXIT DÖNGÜSÜ :


WHILE ifade DO
durum-liste1;
EXIT;
END_WHILE;
durum-liste2;

REPEAT
durum-liste1;
EXIT;
UNTIL ifade
END_REPEAT;
durum-liste2;

FOR kontrol_değişkeni := integer ifade1 TO integer ifade2 [BY integer ifade3] DO


durum-liste1;
EXIT;
END_FOR;
durum-liste2;

syf. 18
Durum-listeleri farklı durum listelerinden oluşabilir.EXIT anahtar kelimesi tekrarlı döngü
çalışmalarında sıradaki duruma geçmeyi engeller ve sadece tekrarlı durumlar olan
(WHILE,REPEAT,FOR) durumları için kullanılabilir.Tekrarlayan döngüde Durum-liste1’in
ardından EXIT çalıştığında , kontrol aniden durum-liste2’ye atlar.
Örnek 1 :
WHILE a DO
IF c = TRUE THEN
b := 0 ; EXIT ;
END_IF;
IF b > 10 THEN
a := FALSE;
END_IF;
END_WHILE;
d := 1;
Eğer ilk ifade olan IF döngüsü içerisindeki ‘c’ TRUE ise durum-liste olan b := 0 çalışır ve EXIT
çalışır.EXIT anahtar kelimesinin ardından kontrol döngüsü END_WHILE; döngüsünün
ardından gelen d : = 1; satırına atlar ve bu durum-liste çalışarak devam eder.
Eğer ‘c’ TRUE değilse ki bu durumda ikinci IF döngüsüne atlayarak ilerleyiş devam eder.
Örnek 2 :
a := FALSE;
FOR i := 1 TO 20 DO
FOR j := 0 TO 9 DO
IF i >= 10 THEN
n := i * 10 + j;
a := TRUE; EXIT;
END_IF;
END_FOR;
IF a THEN EXIT; END_IF;
END_FOR;

syf. 19
d := 1;

Eğer FOR döngüsü içerisindeki ilk IF ifadesi (i >=10) TRUE ise durum-liste (n := i * 10+j ve a:=
TRUE ve EXIT;) çalışır ve kontrol döngüsü ilk END_FOR; satırından sonraki IF satırına (IF a
THEN EXIT; END_IF;) atlar.Eğer bu satırda da ‘a’ TRUE ise EXIT; anahtar kelimesi çalışır ve
FOR döngüsü yine burada da atlanarak ikinci END_FOR; satırından sonra bulunan d:=1;
durum-liste çalışır ve döngü sonlanır.

STRUCTURED TEXT – RETURN DÖNGÜSÜ

durum-liste1;
RETURN;
durum-liste2;
Durum-listeler birden farklı durum alabilir.RETURN anahtar kelimesi durum-liste1’in
ardından fonksiyon bloğunun içerisindeki çalışma döngüsünü kırar ve ardından durum-liste2
çalışmadan fonksiyon blok programı tekrardan çağrılır ve çalıştırılır.

Örnek 1 :
IF a_1 * b > 100 THEN
c := TRUE ; RETURN ;
END_IF;
IF a_2 * (b+10) > 100 THEN
c := TRUE ; RETURN;
END_IF;
IF a_3 * (b+20) >100 THEN
c := TRUE;
END_IF;
Eğer ilk ya da ikinci IF döngüsü TRUE ise (a_1*b > 100 ise ya da a_2*(b+10) > 100 ) ise
c:=TRUE; ve RETURN; satırı çalışacaktır.RETURN anahtar kelimesinin çalışmasının ardından
fonksiyon bloğu içerisindeki ilerleme döngüsü kırılır ve fonksiyon blok programı tekrar
çağrılır ve çalıştırılır.

syf. 20
DİZİLER (ARRAYS)
Array – Diziler :
Değişken_Adı [alt dizin]
Array yani diziler benzer değişkenlerin bir koleksiyonu , birarada olmasıdır.Bir dizinin boyutu
fonksiyon blok değişken tablosu ile belirlenebilir.
Array dizin operatörü -> [] kullanılarak her bir değişkene erişilebilir.
Dizin indeksi , bir dizideki belirli değişkenin yada değişkenlerin erişimine izin verir.Alt dizin
indeksi , pozitif ve değişmez bir değer , bir tamsayı veya bir tamsayı değişkeni olmalıdır.
Dizin indeks değeri ilk önce sıfırıncı yani ilk değere ve ardından dizideki birinci eleman olan
ikinci değere erişir ve bu şekilde ilerler.
Not :
Eğer dizin indeksi integer bir ifade ya da integer bir değişkense, dizin indeks değerlerinin
sonuçlarınında dizi için geçerli indeks aralığında olması gereklidir.
Dizilere erişmek için geçerli bir indeks değeri kullanmalıyız aksi takdirde diziye erişim
mümkün olmaz.
Örnek 1 :
a[0] := 1;
a[1] := -2;
a[2] := 1+2;
a[3] := b,
a[4] := b+1;
Bu örnekte ‘a’ değişkeni 5 elementten oluşan bir dizidir ve data tipi ise integer(INT)’dir.
Burada değişken ‘b’ de aynı şekilde INT data tipine sahiptir.Döngü çalıştırıldığında , dizinin
ilk elemanının değeri 1 , ikinci elemanın değeri -2 , üçüncü elemanın değeri 3 , dördüncü
elemanının değeri b ve beşinci elemanının değeri b+1 olacaktır.
a = [1 ,-2 ,3 , b , b+1] gibi.

syf. 21
Örnek 2 :
c[0] := FALSE;
c[1] := 2>3;
Bu örnekte ‘c’ değişkeni iki elementten oluşan bir dizidir ve bool data tipine
sahiptir.Çalıştırıldığında , dizi içerisindeki ilk element FALSE değerine set edilecektir ve ikinci
değerde FALSE değerine set edilecektir(2>3 = FALSE)

Örnek 3 :
d[9] := 2.0;
Bu örnekte d değişkeni 10 elementli yani 10 değerli bir dizidir ve data tipi ise
REAL’dir.Çalıştırıldığında ise son element olan 10. element 2.0’a set edilir.

Örnek 4 :
a[1] := b[2];
Bu örnekte a değişkeni ile b değişkeni aynı data tipine sahip birer dizilerdir.Çalıştırıldığında
bu satır , b değişkeninin üçüncü değeri , a dizisindeki ikinci değere set edilir.

Örnek 5 :
a[b[1]] := c;
a[b[2] +3] :=c;
Bu örnekte ise nasıl dizi element ifadesinin diğer bir dizi element ifadesi içerisinde
kullanılacağı örneği gösterilmiştir.

syf. 22
FONKSİYONLAR
STANDART FONKSİYONLAR
Fonksiyonlara genel olarak bakacak olursak ;
Sayısal fonksiyonlar : Mutlak değerler , trigonometrik fonksiyonlar vb.
Aritmetik fonksiyonlar : Üstel (EXPT)
Data Tip Dönüşüm Fonksiyonları : Kaynak_data_tipi _TO_Yeni_data_tipi (Değişken_adı)
Sayı – Dizi(String) Dönüşüm Fonksiyonları :
Kaynak_data_tipi _TO_Dizi (Değişken_adı)
Dizi_TO_Yeni_Data_Tipi(Değişken_adı)
Data Kaydırma Fonksiyonları : Bit kayması (SHL ve SHR) , bit yönünde döndürme (ROL ve
ROR) vb.
Data Kontrol Fonksiyonları : Üst/Alt limit kontrol (LIMIT) vb.
Data Seçim Fonksiyonları : Data seçim(SEL) , maksimum değer (MAX) ve minimum
değer(MIN) ve çoklayıcı(MUX) vb.

SAYISAL FONKSİYONLAR
ABS (ifade) : Mutlak değer (ifade) -> a := ABS(b) : b değişkeninin mutlak değeri a
değişkenine atanır.
Kullanılabilir Data Tipi (ifade için): INT,DINT,LINT,UINT,UDINT,ULINT,REAL,LREAL
SQRT(ifade) : Karekök (√ifade) -> a := SQRT(b) : b değişkeninin karekökü a değişkenine
atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL
LN (ifade) : Doğal algoritma (LOGe ifade) -> a:= LN(b) : b değişkenin doğal algoritması alınır
a değişkenine atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL
LOG (ifade) : Genel , bilinen algoritma (LOG10 ifade) -> a := LOG (b) : b değişkeninin normal
algoritması a değişkenine atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL

syf. 23
EXP (ifade) : Üstel ifade (eifade) -> a := EXP(b) : b değişkenin e üzeri üstel sonucu b
değişkenine atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL

SIN (ifade) : Sine : SIN <-> sinüs kullanımı – > a := SIN(b) : b değişkenin sinüs değeri a
değişkenine atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL
COS (ifade) : Cosine : Kosinüs ifadesi -> a := COS(B) : b değişkeninin sinüs değeri a
değişkenine atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL
TAN (ifade) : Tanjant ifadesi – > a := TAN(b) : b değişkeninin tanjant değeri a değişkenine
atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL
ASIN (ifade) : Arc sin : SIN-1 -> a := ASIN(b) : b değişkeninin arc sin değeri a değişkenine
atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL
ACOS (ifade) : Arc cosine : COS-1 -> a := ACOS(b) : b değişkeninin arc cos değeri a
değişkenine atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL
ATAN (ifade) : Arc tanjant : TAN-1 -> a := ATAN(b) : b değişkeninin arc tan değeri a
değişkenine atanır.
Kullanılabilir Data Tipi (ifade için): REAL,LREAL
EXPT (taban,exponent) : Üstel : tabanexponent -> a := EXPT (b,c) : b taban olup c değeri ise
exponent üst olarak alınır ve işlemin sonucu da a değişkenine atanır.
Kullanılabilir Data Tipi (taban için): REAL,LREAL
Kullanılabilir Data Tipi (exponent):INT,DINT,LINT,UINT,UDINT,ULINT,REAL,LREAL

syf. 24
MOD (bölünen data , bölen) : Geri kalan kısım , mod alma -> a : = MOD(b,c) : b değerinin c
değerine bölümünden kalan yani mod alma işleminin sonucu a değişkenine atanır.
Kullanılabilir Data Tipi (Bölünen): INT,DINT,LINT,UINT,UDINT,ULINT
Kullanılabilir Data Tipi (Bölen): INT,DINT,LINT,UINT,UDINT,ULINT

STRING FONKSİYONLARI

Kullanabilmek için CS/CJ serisi olmalı bir plc olmalı ve versiyonu da 4.0 veya üstü olmalı ya
da CJ2 serisi CPU olmalıdır.
LEN Fonksiyonu : Data tipi Stringdir ve INT değer döndürür.Yazı dizisinin uzunluğunu bulur.
a := LEN (b) -> b dizisindeki karakterlerin sayısı a değişkenine atanır.
Kullanılabilir Data Tipi (b) : String
LEFT(<Source_String> , <Number_of_characters>) Fonksiyonu :
Eğer kaynak_dizi(source_string) ise String data tipine , karakter_adedi ise INT,UINT data
tipine sahip olup STRING değer döndürür.Kullanım amacı ise soldan itibaren yazı dizisinden
karakterleri dışarı çıkarır.
a := LEFT (b,c) -> b dizisinden c kadar karakter soldan itibaren çıkarılır ve a değişkenine
atanır.
Kullanılabilir Data Tipi = (STRING <-> INT,UINT)
RIGHT(<Source_String> , <Number_of_characters>) Fonksiyonu :
Eğer kaynak_dizi(source_string) ise String data tipine , karakter_adedi ise INT,UINT data
tipine sahip olup STRING değer döndürür.Kullanım amacı ise sağdan itibaren yazı dizisinden
karakterleri dışarı çıkarır.
a := RIGHT (b,c) -> b dizisinden c kadar karakter sağdan itibaren çıkarılır ve a değişkenine
atanır.
Kullanılabilir Data Tipi = (STRING <-> INT,UINT)
MID(<Source_string>,<Number_of_characters>,<Position>) Fonksiyonu :
Eğer Source_string ise STRING, number_of_characters ise INT,UINT ve Position ise INT,UINT
data tipine sahip olur STRING değer döndürür.Burada da karakterleri yazı dizisinden dışarı
çıkarır.

syf. 25
a := MID (b,c,d) -> çıkarılacak karakter sayısı c değişkeni ile belirlenir ve d değişkeni ile
belirlenen nokta , başlangıç noktası olup bu dizi b değişkeninden çıkarılır.Ardından a
değişkenine atanır.
Kullanılabilir Data Tipi = (STRING <-> INT,UINT <-> INT,UINT)
CONCAT(<Source_string_1>,<Source_string_2>….. 32 string kaynağına kadar) Fonksiyonu:
Burada kaynak dizisi STRING data tipine sahiptir ve STRING değer döndürür.Fonksiyonun
görevi ise dizileri birbirine bağlamak için kullanılır.
a := CONCAT (b,c,…) -> Burada b ,c … değişkenleri a değişkenine eklenir ve burada tutulur.
Kullanılabilir Data Tipi = STRING
INSERT (<Source_String>,<Insert_String>,<Position>) Fonksiyonu :
Eğer source_string ise STRING , Insert_String ise STRING ve Position ise INT,UINT data tipi
kullanılır ve sonuçlar açısından hep STRING değer döndürür.Bu fonksiyon bir yazı dizisini
diğerinin içerisine ekler.
a := INSERT (b,c,d) -> Burada c yazı dizisi d ile belirtilen başlangıç pozisyonundan başlamak
üzere b değişkenine eklenir.Ki b değişkeni de a değişkenine atanır , eşittir.
Kullanılabilir Data Tipi = (STRING <-> STRING <-> UINT,INT)
DELETE (<Source_String>,<Number_of_characters>,<Position>) Fonksiyonu :
Source_string ise STRING , Number_of_characters ise INT,UINT , Position ise de yine
INT,UINT data tipine sahip olup hep STRING değer döndürür.
Görevi ise yazı dizisinden karakter/karakterler silmektir.
a := DELETE (b,c,d) -> c ile belirlenen karakter sayısı kadar dizi d ile belirlenen başlangıç
pozisyonundan itibaren b değişkeninden silinir ve ardından a değişkenine bu değer atanır.
Kullanılabilir Data Tipi = (STRING <-> INT,UINT <-> INT,UINT)
REPLACE (<Source_string>,<Replace_string>,<Number_of_characters>,<Position>)
Fonksiyonu :
Source_string ise STRING , Replace_string ise STRING , Number_of_characters ise INT,UINT
ve Position ise yine INT,UINT data tipi kullanılması gerekmektedir ki her zaman STRING data
tipi döndürür bu fonksiyon.
Görevi ise text string yani yazı dizisi içerisinde ki karakterlerin yer değiştirmesidir.
a := REPLACE (b,c,d,e) -> b değişkeni içerisindeki dizinin d değişkeni ile verilen değer kadar
karakterlerinin , e değişkeni ile belirlenen başlangıç pozisyonundan itibaren c yazı dizisi
içerisindeki karakterler ile yer değiştirmesi işlemidir.
Kullanılabilir Data Tipi = (STRING <-> STRING <-> INT,UINT <-> INT,UINT)
syf. 26
FIND (<Source_String>,<Find_String>) Fonksiyonu :
Source_string ise STRING ve Find_String ise STRING data tipine sahip olup , INT değer
döndürür.Text dizisi içerisindeki karakterleri bulur.
a := FIND (b,c) -> Burada c karakter/yazı dizisinin , b yazı dizisi içerisindeki ilk bulunduğu
konum, yer , pozisyon a değişkeni içerisine atanır.Eğer c bulunamadıysa , 0 (sıfır) değeri a
değişkenine atanır.
Kullanılabilir Data Tipi = (STRING <-> STRING)

DÖNÜŞÜM FONKSİYONLARI -1
Syntax yapısı :
Kaynak_data_tip_TO_yeni_data_tip (Değişken adı)
Örnek : REAL_TO_INT(C) : Burada C değişkeni için data tipi REAL’den Integer’a dönecektir.
Burada değerlerin yuvarlanması durumu vardır.
Eğer değer dönüşümün ardından ; nokta(.)’dan sonraki rakamlar için ;
Değer 0.5’ten daha düşük ise değer kesilir.
Örnek ; 1.49 -> 1’e , -1.49 -> -1’e tamamlanır.
Değer 0.5 ise ; Burada noktadan önceki rakamın tek ya da çift olması kontrol edilir.Eğer tek
ise bir üste , çift ise o rakama denklenir.
Örnek : 0.5 -> 0’a , 1.5 -> 2’ye , 2.5 -> 2’ye ve 3.5 ->4’e tamamlanır.
Değer 0.5’ten büyükse ; Noktadan sonrası bir üste yuvarlanır.
Örnek : 1.51 -> 2’ye yuvarlanır.

Number-String (Rakam-Dizi) Dönüşüm Fonksiyonları :


Syntax yapısı :
Kaynak_data_tip_TO_String (Değişken_Adı)
Örnek : INT_TO_STRING(C) : Bu örnekte C integer değeri string olarak dönüştürülür ve C
değerine atanır.
STRING_TO_Yeni_Data_Tip(Değişken_Adı)
Örnek : STRING_TO_INT(C) : Burada C string değişkeni Integer olarak dönüştürülüp C
değişkenine atanır.

syf. 27
DATA SHIFT(DATA KAYDIRMA) FONKSİYONLARI

SHL(<Shift_target_data>,<Number_of_bits>) : n bit sayısı kadar sola a bit dizisi


kaydırılır.Kaydırıldığında sıfırlar sağ taraftaki bit dizisinin yerini alır.Burada kaydırılan yere 0
değerleri atanır.
Örnek -> a := SHL(b,c) : c bit kadar b bit dizisi sola kaydırılır ve a değişkeni içerisine
kaydedilir.
Kullanılabilir Data Tipi = (BOOL,WORD,DWORD,LWORD <-> INT,UINT,UDINT,ULINT,DINT,LINT)
SHR(<Shift_target_data>,<Number_of_bits>) : n bit sayısı kadar sağa a bit dizisi
kaydırılır.Kaydırıldıktan sonra sol tarafta oluşacak boşluk 0 değerleri ile doldurulur.
Örnek -> a := SHR(b,c ) : c bit kadar b bit dizisi sağa kaydırılır ve a değişkeni içerisine
kaydedilir.
Kullanılabilir Data Tipi = (BOOL,WORD,DWORD,LWORD <-> INT,UINT,UDINT,ULINT,DINT,LINT)
ROL(<Rotation_target_data>,<Number_of_bits>) : n bit kadar bit dizisi sola döndürülür.
Örnek -> a := ROL(b,c) : c bit kadar sola döndürülen b bit dizisi , a değişkeni içerisine
kaydedilir.
Kullanılabilir Data Tipi = (BOOL,WORD,DWORD,LWORD <-> INT,UINT,UDINT,ULINT,DINT,LINT)
ROR(<Rotation_target_data>,<Number_of_bits>) : n bit kadar bit dizisi sağa döndürülür.
Örnek -> a := ROR (b,c) : c bit kadar sağa döndürülen b bit dizisi , a değişkeni içerisine
kaydedilir.
Kullanılabilir Data Tipi = (BOOL,WORD,DWORD,LWORD <-> INT,UINT,UDINT,ULINT,DINT,LINT)

syf. 28
DATA KONTROL ve HABERLEŞME FONKSİYONLARI

Data Kontrol Fonksiyonları :


LIMIT (<Alt_limit_data>,<Giriş_data>,<Üst_limit_data>) : Çıkış datasını, giriş datasının alt
ve üst limitler arasında olup olmadığına bakarak , kontrol eder.
Örnek – > a := LIMIT (b,c,d)
[c<b olduğunda , b -> a değişkeni içerisine atanır.]
[b≤c≤d olduğunda , c -> a değişkeni içerisine atanır]
[d < c olduğunda ise , d -> a değişkenine atanır]
Kullanılabilir Data Tipi = (BOOL,WORD,DWORD,LWORD,REAL,LREAL,INT,UINT,UDINT,ULINT,DINT,LINT
<-> BOOL,WORD,DWORD,LWORD,REAL,LREAL,INT,UINT,UDINT,ULINT,DINT,LINT <->
BOOL,WORD,DWORD,LWORD,REAL,LREAL,INT,UINT,UDINT,ULINT,DINT,LINT )

Data Seçim Fonksiyonları :


SEL (<seçim_koşulu>,<seçim_hedef_data1>,<seçim_hedef_data2>) : Seçim koşuluna göre
iki datadan birisini seçer.
Örnek -> a := SEL (b,c,d)
[b FALSE/0/Yanlış olduğunda , c değeri a değişkenine atanır.]
[b TRUE/1/Doğru olduğunda , d değeri a değişkenine atanır.]
Kullanılabilir Data Tipi =(BOOL <-> BOOL,WORD,DWORD,LWORD,REAL,LREAL,INT,UINT,UDINT,ULINT,DINT,LINT)

MUX (<Çıkarım_Şartı>,<Çıkarım_hedef_data1>,<Çıkarım_hedef_data2>) : Çıkarma


koşuluna göre maksimum 30 datadan belirli bir data seçer.
Örnek -> a := MUX (b,c,d,…)
[B+1. Data a değişkeni içerisine atanır.]
Kullanılabilir Data Tipi =( INT,UINT,UDINT,ULINT,DINT,LINT <->
BOOL,WORD,DWORD,LWORD,REAL,LREAL,INT,UINT,UDINT,ULINT,DINT,LINT)

MAX (<Hedef_data1>,<Hedef_data2>,<Hedef_data3>,…..) : En fazla 31 data içerisinden


maksimum değer seçimi yapılır.
Örnek -> a := MAX (b,c,d,…..)
[c, d, … arasından maksimum değer a değişkenine atanır]
syf. 29
Kullanılabilir Data Tipi = (BOOL,INT,UINT,UDINT,ULINT,DINT,LINT,WORD,DWORD,LWORD,REAL,LREAL
<-> BOOL,INT,UINT,UDINT,ULINT,DINT,LINT,WORD,DWORD,LWORD,REAL,LREAL )

MIN (<Hedef_data1>,<Hedef_data2>,<Hedef_data3>,…..) : En fazla 31 data içerisinden


minimum değer seçimi yapılır.
Örnek -> a := MIN (b,c,d,……)
[c,d,…..] değerlerinden minimum değere sahip olan a değişkenine atanır.
Kullanılabilir Data Tipi = (BOOL,INT,UINT,UDINT,ULINT,DINT,LINT,WORD,DWORD,LWORD,REAL,LREAL
<-> BOOL,INT,UINT,UDINT,ULINT,DINT,LINT,WORD,DWORD,LWORD,REAL,LREAL )

Haberleşme Fonksiyonları :
TXD_CPU(<Send_String>) : CPU üzerindeki RS-232C port ile Text Dizeleri yollar .
Örnek : TXD_CPU(a)
[Text dizesi CPU üzerindeki RS-232C port üzerinden gönderilir]
Kullanılabilir Data Tipi : STRING
TXD_SCB (<Send_String>,<Serial_Port>) : Seri haberleşme kartı ile serial port üzerinden
text dizesi gönderilir.
Örnek : TXD_SCB (a,b)
[Seri haberleşme kartı üzerinde b değişkeni tarafından serial port üzerinden text dizesi
gönderilir.]
Kullanılabilir Data Tipi : STRING <-> INT,UINT,WORD
TXD_SCU(<Send_String>,<SCU_Birim_Numarası>,<Seri_Port>,<Dahili_lojik_port>) : Seri
haberleşme birimi üzerinden seri porta text dizesi yollanır.
Örnek : TXD_SCU (a,b,c,d)
[Değişken d dahili lojik port numarasıdır.D değişkeni ile belirlenen dahili lojik port üzerinden
seri haberleşme birimi b değişkeni üzerinden ve serial port c değişkeni ile belirlenirken a
text dizesi gönderilir.]
Kullanılabilir Data Tipi : STRING <-> INT,UINT,WORD <->INT,UINT,WORD <->
INT,UINT,WORD
RXD_CPU(<Depolama_konumu>,<Karakter_sayısı>) : CPU üzerindeki RS-232C port
üzerinden text dizesi alır.
Örnek : RXD_CPU(a,b)
[ b değişkeni tarafından belirlenen karakter sayısı , RS-232C port üzerinden alınır ve a
değişkenine atanır.]

syf. 30
Kullanılabilir Data Tipi : STRING <-> INT,UINT,WORD
RXD_SCB (<Depolama_konumu>,<Karakter_sayısı>,<Seri_port>) : Seri haberleşme kartı
üzerinden seri port ile text dizesi alır
Örnek : RXD_SCB (a,b,c) :
[b değişkeni ile belirlenen karakter sayısı kadar veri c değişkeni ile belirlenen seri port ile
alınır ve a değişkeni ile belirlenen alana atanır.]
Kullanılabilir Data Tipi : STRING <-> INT,UINT,WORD <-> INT,UINT,WORD
RXD_SCU(<Depolama_konumu>,<Karakter_sayısı>,<SCU_Birim_Sayısı>,<Seri_port>,<Dahi
li_lojik_port>) : Seri haberleşme birimi ile seri port üzerinden text dizesini alır.
Örnek : RXD_SCU(a,b,c,d,e)
[b değişkeni ile belirlenen sayı kadar veri d değişkeni ile belirlenen seri port üzerinden e
değişkeni ile belirlenen port ile text dizesini alır.e değişkeni dahili lojik port numarasını
içerir.]
Kullanılabilir Data Tipi : STRING <-> INT,UINT,WORD <-> INT,UINT,WORD <->
INT,UINT,WORD <-> INT,UINT,WORD

TIMER VE COUNTER KULLANIMI


TIMER :
1.TIMX (<Çalıştırma_Koşulu>,<Timer_Adres>,<Timer_Set_Değeri>) :
TIMX (Bool, Timer,UINT) : 100-ms timer.
Ör : TIMX (a,b,c) -> a koşulu gerçekleştiğinde , b timerı , c değeri kadar sayar.
Kullanılabilir Data Tipi : BOOL <-> TIMER <-> UINT
2.TIMHX (<Çalıştırma_Koşulu>,<Timer_Adres>,<Timer_Set_Değeri>) :
TIMHX (Bool, Timer,UINT) : 10-ms timer.
Ör : TIMHX (a,b,c) -> a koşulu gerçekleştiğinde , b timerı , c değeri kadar sayar.
Kullanılabilir Data Tipi : BOOL <-> TIMER <-> UINT
3.TIMHHX (<Çalıştırma_Koşulu>,<Timer_Adres>,<Timer_Set_Değeri>) :
TIMHHX (Bool, Timer,UINT) : 1-ms timer.
Ör : TIMHHX (a,b,c) -> a koşulu gerçekleştiğinde , b timerı , c değeri kadar sayar.
Kullanılabilir Data Tipi : BOOL <-> TIMER <-> UINT

syf. 31
4.TIMUX (<Çalıştırma_Koşulu>,<Timer_Adres>,<Timer_Set_Değeri>) :
TIMUX (Bool, Timer,UINT) : 10-ms timer. (Timer değeri 10-ms değer birimleri olarak azalır.)
Ör : TIMUX (a,b,c) -> a koşulu gerçekleştiğinde , b timerı , c değeri kadar sayar.
Kullanılabilir Data Tipi : BOOL <-> TIMER <-> UINT
5.TMUHX (<Çalıştırma_Koşulu>,<Timer_Adres>,<Timer_Set_Değeri>) :
TMUHX (Bool, Timer,UINT) : 100-ms timer.(Timer değeri 100-ms değer birimleri olarak azalır.)
Ör : TMUHX (a,b,c) -> a koşulu gerçekleştiğinde , b timerı , c değeri kadar sayar.
6.TTIMX (<Çalıştırma_Koşulu>,<Reset_Girişi>,<Timer_Adres>,<Timer_Set_Değeri>) :
TTIMX (Bool,Bool, Timer,UNIT) : Accumulative(Toplayan) timer.
Ör : TTIMX (a,b,c,d) -> a koşulu gerçekleştiğinde , c timerı , d değeri kadar sayar.Eğer b girişi ON
olursa zamanlayıcının anlık değeri ve tamamlandı bayrağı resetlenir.
Kullanılabilir Data Tipi : BOOL <->BOOL<-> TIMER <-> UINT
7.TRSET (<Çalıştırma_koşulu>,<Timer_Adres>) :
TRSET (Bool , Timer) : Zamanlayıcı reset , belirli zamanlayıcı resetlenir.
Ör : TRSET (a,b) : a koşulu çalıştırıldığında , b timer adresli timer resetlenir .
Kullanılabilir Data Tipi : BOOL <-> TIMER
COUNTER :
1.CNTX (<Sayıcı_Girişi>,<Reset_girişi>,<Sayıcı_Adresi>,<Sayıcı_set_değeri>) :
CNTX (Bool,bool,counter,UINT) : Aşağı sayan sayıcı
Ör : CNTX (a,b,c,d) -> Her bir sayıcı girişi ON olduğunda d içerisindeki set değeri kadar c adresli
sayıcı çalışır ve sayar.Eğer reset girişi b gelirse , sayıcı set değeri ve tamamlandı bayrağı
resetlenir.
Kullanılabilir Data Tipi : BOOL <-> BOOL <-> COUNTER <-> UINT
2.CNTRX (<Artan_Sayaç>,<Azalan_Sayaç>,<Reset_Girişi>,<Sayıcı_Adresi>,<Sayıcı_set_değeri>)
CNTRX(Bool , bool, bool,counter,UINT) : Çift taraflı artan/azalan sayıcı
CNTRX (a,b,c,d,e) : e içerisindeki set değeri d sayıcısında çalışır ve sayıcı girişi her geldiğinde ,
artan ya da azalan girişe göre sayıcı artar ya da azalır.Reset girişi geldiğinde o anki değer ve
tamamlandı bayrağı sıfırlanır.
Kullanılabilir Data Tipi : BOOL <-> BOOL <-> BOOL <-> COUNTER <-> UINT

syf. 32
SONUÇ :

Umuyorum ki bu bilgiler sizlere faydalı olmuştur..


Farklı bir konuda yepyeni bir dökümanda buluşmak üzere ..

İyi Çalışmalar
Saygılarımla
Mustafa
#derstagramakademi
www.derstagram.com

syf. 33

You might also like