tia portal scl dili yardım

rotsis

Üye
Katılım
7 Ağu 2011
Mesajlar
736
Puanları
6
Yaş
39
CASE "adim_giris" OF
//1
0:
IF ("giris_sensoru" = 1 OR "ekran".BOSALT) AND "onzincir".Position = 0 AND "onzincir".StatusBits.Standstill=0 THEN
"otoGIRIS_1":= 1;
"adim_giris" := 3;
END_IF;

3:
IF "ekran".DEVAM = 1 THEN
"otoGIRIS_1" := 1;
END_IF;

IF "GIRIS_1_OK" = 1 THEN
"otoGIRIS_1" := 0;
"ekran".DEVAM := 0;
"adim_giris" := 5;
END_IF;


//YUKARI
5:
IF ("onzincir".Position = 0 AND "giris_sensoru" = 0 AND "motorGIRIS_rulo" = 0 AND "ekran".ariza_yok=0) OR
("ekran".DEVAM=1 AND "giris_sensoru" = 0 AND "motorGIRIS_rulo" = 0 AND "ekran".ariza_yok=0) THEN
"MC_MoveAbsolute_DB".Execute := 1;
"MC_MoveAbsolute_DB".Position := 500;
END_IF;
IF "onzincir".Position = 500 THEN
"MC_MoveAbsolute_DB".Execute := 0;
"adim_giris" := 10;
END_IF;


//2
10:
IF ("giris_sensoru" = 1 OR "ekran".BOSALT) AND "onzincir".Position = 500 AND "onzincir".StatusBits.Standstill = 0 THEN
"otoGIRIS_2" := 1;
"adim_giris" := 13;
END_IF;

13:
IF "ekran".DEVAM = 1 THEN
"otoGIRIS_2" := 1;
END_IF;

IF "GIRIS_2_OK" = 1 THEN
"otoGIRIS_2" := 0;
"ekran".DEVAM := 0;
"adim_giris" := 15;
END_IF;
.
.
.
.


program bu şekilde gidiyor.
yapmak istediğim :
"adim_giris" degerim 15 olduğunda sadece bir kereliğine 5e dönecek.
15e geldiğinde alt programdan çalışmaya başlayacak.
yani adimlar 0,3,5,10,15,5,10,15,20,25 şeklinde gidecek.
hangi komutla yapabilrim bu işlemi?
 
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.
15 in ci adım da "Adım15Done", BOOL tipinde bir değişkeni true yapın; tekrar sistem adım 15 e geldiğinde aşağıdaki gibi bir kod yeterli tabi her start olduğunda Adım15Done ı FALSE yapmalısınız.

Kod:
15:
IF NOT   Adım15Done
   AND   Diğer Lojik Şartlar
   THEN   (* adim_giris 15'e ilk defa girdiğinde bu kısım *)
    Adım15Done   :=TRUE;
    "adim_giris" := 5;
ELSIF    Adım15Done
   AND   Diğer Lojik Şartlar
   THEN  (* adim_giris 15'e daha önce girmiş ise yani DONE olmuşsa *)
   "adim_giris" := 20;
END_IF;

20:
.......
 
Son düzenleme:
teşekkür ederim.
bu olayı "repeat...until", "continue" ,"exit" vb. komutlarla yapmak istersem nasıl bir yol izlemem lazım ?
 
15 in ci adım da "Adım15Done", BOOL tipinde bir değişkeni true yapın; tekrar sistem adım 15 e geldiğinde aşağıdaki gibi bir kod yeterli tabi her start olduğunda Adım15Done ı FALSE yapmalısınız.

Kod:
15:
IF NOT   Adım15Done
   AND   Diğer Lojik Şartlar
   THEN   (* adim_giris 15'e ilk defa girdiğinde bu kısım *)
    Adım15Done   :=TRUE;
    "adim_giris" := 5;
ELSIF    Adım15Done
   AND   Diğer Lojik Şartlar
   THEN  (* adim_giris 15'e daha önce girmiş ise yani DONE olmuşsa *)
   "adim_giris" := 20;
END_IF;

20:
.......



//GECIS
IF "Adım15Done"=0 THEN
"Adım15Done" := 1;
"adim_giris" := 5;
ELSIF "Adım15Done"=1 THEN
"adim_giris" := 20;
END_IF;
 
20. adımda da "adim15done" bitini sıfıra düşürürsem olacaktır sanırım.
çünkü 100.adım bitince 20.adıma atlatıyorum.
teşekkürler
 
20. adımda da "adim15done" bitini sıfıra düşürürsem olacaktır sanırım.
çünkü 100.adım bitince 20.adıma atlatıyorum.
teşekkürler
Ayrıca Alarm durumunda VEYA manual mod değişimlerinde de sıfır yapmayı unutma.
 
keskinlikle...
ladder is death :)
 
Interger bir sayaç koyup her if içine girişlerde sayac:=sayac+1 le arttırıp sonrada IF sayac=X ile sayacı test edip istediğin yere dallanabilirsin. Sayacı sıfırlamak için sayac:=0 basman yeterli
 
Son düzenleme:

Forum istatistikleri

Konular
128,128
Mesajlar
915,270
Kullanıcılar
449,845
Son üye
burak_duyar

Yeni konular

Geri
Üst