6 Kasım 2017 Pazartesi

Tia Portal S7-1200 Ladder ve SCL örnek Yürüyen Işık Örneği

Tia Portal SCL Kullanımı Örnek Uygulama:


Örnekte Yürüyen ışık programını Tia Portal da SCL ile deneme yaptım.
Programda deneme olarak sadece 3 adet çıkış ile bu projeyi yaptım.
Program çıkışları sırasıyla 1-2-3 aktif eder 3-2-1 sırasıyla pasif eder.

(Proje Dosyası En altta)



Projeyi açınca Main dışında FC (Ladder) ve FB (SCL yazım dili) açtım
FC de yardımcı kontakları çıkışlara verdim.



FB de SCL ile programı yazdım
Main de yazdığım FC ve FB’yi çağırdım.
Mainde genel ayarlamaları yaptım (Timer süreleri ayarı gibi.)

Burada da Sadece iki çıkışı kullanarak deneme yaptım daha sonra SCL kodlarına geçtim




SCL kodları bu şekilde açıklama yazdım.
Timer sürekli döngüde olması için kendimce yardımcı bitlerle bir tarama boyunca Timer girişini pasif ettim.

PLC çıkışlarını da yardımcı bitlerle kontrol ediyorum bu şekilde istediğim kadar kullanabiliyorum.
Direk çıkışları bir kez kullanabiliyoruz.


Program Kodları:


IF "yardımcı_2"=0 THEN //*** *** *** *** Adım 1 *** *** ***
    "döngü_başla":=1;   // *** *** ileri giden döngü
END_IF;

"led_soft_1":=1;"Led_1":="led_soft_1";//*** *** led1 yan

"IEC_Timer_0_DB_5".TON(IN:="döngü_başla",   //*** *** led1 yanma süresi
     PT:=T#800mS, Q=>"led_soft_2",ET=>"timer_geçen süre_1");

"Led_2":="led_soft_2";//*** *** led2 yan

"IEC_Timer_0_DB_7".TON(IN:="led_soft_2",    //*** *** led2 yanma süresi
      PT:=T#800ms, Q=>"led_soft_3",ET=>"timer_geçen süre_2");

"Led_3":="led_soft_3";//*** *** led3 yan

"IEC_Timer_0_DB_2".TON(IN:="led_soft_3",    //*** *** led3 yanma süresi
      PT:=T#800ms, Q=>"led_sön_3",ET=>"timer_geçen süre_3");

//*** *** *** *** Adım 2 *** *** *** *** *** Geri Giden döngü

IF "led_sön_3"=1 THEN
    "led_soft_3":=0;    "Led_3":=0;    "led_sön_3":=1;
END_IF;

"IEC_Timer_0_DB_8".TON(IN:="led_sön_3",//*** *** *** ***led3 sön süre
      PT:=T#800ms,Q=>"led_sön_2",ET=>"timer?led?sön_geçen_süre_3");

IF "led_sön_2"=1 THEN
    "led_soft_2":=0;    "Led_2":=0;    "led_sön_2":=1;
END_IF;

"IEC_Timer_0_DB_9".TON(IN:="led_sön_2",//*** *** *** ***led2 sön süre
      PT:=T#800ms,Q=>"led_sön_1",ET=>"timer?led?sön_geçen_süre_2");

IF "led_sön_1"=1 THEN
    "led_soft_1":=0;    "Led_1":=0;    "led_sön_1":=1;
    "led sönük bekle":=1;
END_IF;

"IEC_Timer_0_DB_11".TON(IN:="led sönük bekle", //*** *** *** ***led1 sön süre
       PT:=T#800ms,Q=>"yardımcı_3", ET=>"timer?led?sön_geçen_süre_1");


"R_TRIG_DB"(CLK:="IEC_Timer_0_DB_11".Q, Q=>"yardımcı_2"); /// yükselen kenar
                                                          // bir döngü boyunca "Yardımcı_2" pasif et
IF "yardımcı_2"=1 THEN
    "döngü_başla":=0;
    "led sönük bekle":=0;
END_IF;




Program işleyişi:

Yardımcı_2 yoksa döngü başlat aktif olur.
Led_soft_1 aktif olur ardından timer_1 saymaya başlar. Süre bitiminde
Led_soft_2 aktif olur. timer_2 saymaya başlar. Süre bitiminde
Led_soft_3 aktif olur. timer_3 saymaya başlar. Süre bitiminde Led_sön aktif olur.
Timer_4  aktif olur süre sonunda Led_3 pasif olur
Timer_5 aktif olur süre sonunda Led_2 pasif olur
Timer_6 aktif olur süre sonunda Led_1 pasif olur Led_1 Sönük_bekle aktif olur
Timer_7 aktif olur süre sonunda timer_7 çıkışı aktif olduğunda yükselen kenar yardımcı_2 aktif olur
1 döngü boyunca da döngü başka pasif olur.
Bir döngü bittiğinde yardımcı_2 pasif olur ve program başında yazdığım IF komutu içinde yardımcı_2 pasif olduğu için döngü_başla aktif olur tekrardan timer döngüsü başlar.


SCL Timer kullanımı:


"IEC_Timer_0_DB".TON(IN:=_bool_in_,
                     PT:=_time_in_,
                     Q=>_bool_out_,
                     ET=>_time_out_);

ET=> timer geçen süreyi bir data alanına yazmamız gerekiyor, boş bırakmamıza izin vermiyor.
Q=> timer süresi dolduğunda verdiği çıkış
PT=> Sayacağı süreyi giriyoruz. Dword girmezsek T#2s şeklinde girmemiz gerekiyor bunun dışındakileri kabul etmiyor.

TON Timer Çalışma Grafiği:




SCL Yükselen Kenar ve Düşen Kenar Kullanımı:





"R_TRIG_DB"(CLK:=false,
            Q=>_bool_out_);

CLK=> girdiğimiz bit aktif olduğunda Q çıkışındaki bit bir döngü boyunca aktif olur.

"F_TRIG_DB"(CLK:=false,
            Q=>_bool_out_);

CLK=> girdiğimiz bit aktif olup pasif konuma geçtiğinde (yani düşen kenarı olduğunda) Q çıkışındaki bit bir döngü boyunca aktif olur.




Proje Dosyasını

Buradan İndirebilirsiniz


Diğer yazılarım:

Sinamics V20 Modbus RTU Modbus RTU ile kontrol edilmesi ile ilgili paylaşımımda da PLC den Modbus kontrolü ile sürücünün açıp kapama, frekans değişimini anlatıyorum.

Dop-B HMI ile S7-1200 plc Modbus RTU Kontrolü, HMI master PLC slave olarak örnek uygulama yapıyorum.

HMI kullanarak RS485 alt yapısını üzerinden plc kontrol edilmesi uygulamasını anlattım.

S7-1200 PLC ve Delta DVP14ss2 PLC iki plcyi Modbus RTU üzerinden haberleştirdim.

Arduino MPU6050 Gyroscope ve Accelerometer kullanımı ve örnek kodlar bulunuyor.

Delta DVP14ss2 PLC ve Dop-B HMI Modbus ASCII üzerinden iki kablo ile haberleşmesi örneği
Anlattım.

Delta PLC DVP14ss2 plc Step motor kontrol ve sürümü işlemini anlattım.
(Leadshine Microstep Driver M542 Modelli sürücü ile)

Delta PLC DVP14ss2 PLC bağlantı şeması Bağlantı kablolarını anlattım.

S7-1200 Encoder Kullanımı







Hiç yorum yok:

Yorum Gönder