Siemens Simatic S7 SCL Programlama Dili

SCL dilinde yazılmış bir bloğu debug fonksiyonu
ile nasıl izleme yapabiliriz.
 
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
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.
Basit Olarak Anlatirsak...

Debug fonksiyonu ile izleme icin oncelikle "Create Debug Info" bilgisini onaylamak gerekir.

Bunun icin SCL programi acik iken ust menulerden "Options -> Customize" tiklanarak acilan menuden "Compiler" tabına gecilip "Create Debug Info" yazan yerin basindaki kutucuk check edilir.

Sonraki adimda "Debug" tabi altinda "Operation" sekmesinde "Test Operation" secilir. Bunun sebebi butun debug fonksiyonlarinin herhangi bir kısıtlama olmadan kullanilabilmesi.

Daha sonra program kaydedilir. Compile edilir ve CPU ya yuklenir.

Daha sonra breakpoint birakacagimiz noktaya mouse ile tıklayarak Debug adimindan veya debug arac cubugundaki set breakpoint ikonunu tiklayarak veya Ctrl+H tus kombinasyonuyla breakpoint birakilir. Mor pembemsi bir nokta olusur burda ...

Daha sonra yine Debug tabi altinda breakpoint aktive tiklanarak veya F4 tusuna basilarak breakpoint aktive edilir. Burda dikkat edilecek nokta eger CPU muz uzerinde Run-P konumu varsa bu konumda olmasi gerekiyor.veya simulasyon yaparken yine Run-P konumunda olmasi gerekiyor.

Bu asamada debug modu aktif olmus olur ... Daha sonra debug islemine devam etmek icin debug sekmesi altinda veya debug arac cubugu uzerindeki next intsruction butonu tiklanir veya klavyeden CTRL + F9 a basilarak islem devam ettirilir.

Islemi sona erdirmek icin debug tabi altindaki Breakpoints Active tiklanir.
Delete All Breakpoints ve son olarakta Finish Debugging e tiklanarak debug islemi sona erdirilir.
-------------
Basit olarak boyle ... :)
 
ustalar size bir sorum olacak anladığım kadarı ile bu scl dili bize fc fb db larda cok yardımcı oluyor ;
şöyle bişi yapmak istesek nasıl yaparız direk ob1 de iki değişkeni(i124.0=1,i124.1=1) kontrol edip çıkışa(q124.7=1) bideğer atıyan program nasıl yazılır?

örneklerinizi dikkatle okudum ama hep bu işi yapan bir blok tanımlayıp bu bloğu ob1 de cagırmayı secmıssınız bunun sebebı nedır ? bu iş direk ob1 de yapılmıyor mu ? yapılabiliyor ise neden bu yöntemden uzak durulmuş???

şimdiden sağolun ....
 
Tabi direk Organizasyon Block icerisindede islemler yapilabilir... Bunun icin SCL programi icerisinde OB olusturmak lazim.. "Insert > Block template > OB" tiklayip baslangic sarti icin gerekli bilgiler olusturulur.

Sizin Istediginiz ornek program ektedir.. Kaydedip ,compile edip PLC ye yukleyip test edebilirsiniz...

Kod:
ORGANIZATION_BLOCK OB1

VAR_TEMP
    
    info : ARRAY[0..19] OF BYTE;
    // Temporary Variables

END_VAR

BEGIN
IF i124.0= 1 AND i124.1=1  THEN q124.7:=1; ELSE q124.7:=0; END_IF;
    
END_ORGANIZATION_BLOCK

Neden bu yontemden uzak durulmus derken bana gore butun programi OB1 de yazmak var ki buda buyuk programlarda isin karmasiklasmasina sebep olur..

Oysa programi fonksiyonlara bolerek cok daha rahat bir sekilde program yazilmis olur... En azindan benim bakis acim bu...

Kolay Gelsin...
 
yardımın için gerçekten teşekkurler ladder programlama yı baya öğrendim sayıyorum kendii bahsettiğinin yapısal programlama olduğunu biliyorum sadece dikkatimi çekti onun için sordum cevabın için teşekkurler ....
scl ile program yazmaya yeni başladım iki gündür uğraşıyorumda çok hoşuma gitti programa cok hakim oluyoruz ama sizden bir şey rica edebilirim umarım bu dili sizler gibi rahat öğrenebileceğim bi kaynak önerebilir misiniz ;) (tabi bol örnek ve geceleerimi harcamak şartıyla):):):):)

arkadaşlar anlaşıldı bol bol gelecem size heralde.. nese ;)

bu for dongusu nasıl yazıldıgını anlaadım ama nasıl calıstıgını ve plc de ne gormem gerektıgını anlamıyorum yanı zaten dongu olan plc ıcınde dongü yapmak ne kadar mantıklı veyahut ne için kullanılır ? mesela ben şöle bişi yapmak istedim bir dizi oluşturup bu diziyi döngüye sokarak 1 byte'ın her bitini sıra ile setlemek istedim ama yapamadım bunun için for kullandım ama içime sinmeden :) çünki pascal programlamada program satır satır işler bu şey zaten sürekli bir döngü içinde .....

neden döngü kullanılır bir plc de ???? inşallah derdimi anlata bilmişimdir ;) kolay gelsin
 
Moderatör tarafında düzenlendi:
Merhaba;

Anlayamadıgım tek birsey var:) delphiyi gayetiyi biliyorum...ama SCL bilmyiorum :) daha dogrusu örnek vereyim

var
a:bool;
i:integer;
begin
if a=true then
i=0 else
i=1;
end; dedim..

ben eger a acıkcsa i yi 0 yap kapalı ise 1 yap...bunnlardan bir dügmeyi a diyelim herhangi bir dişleyede 1 diyelim.. PLC a nın düğme oldugunu nasıl anlıyor? ben a yerine b de yazabilirim?.. veya i nin dişli oldugunu plc nasıl anlıyor..bunun adreslemesi nasıl? veya nasıl yapılır? benim bir dişliye veya bir düümeye isim veya değişken nasıl atarım..daha dogrusu bu sekildemi kodlanıyor bunlar..kodlanıyorsa nasıl? umarum anlatabilmişimdir..
Bu başlığın ilk başından itibaren okursanız bu soruyu sormazdınız. 2 gün önce aynı soruyu başka bir başlıkta ben de sormuştum. Orada arkadaşım güzel cevaplamıştı. Bu gün S7 300 başlangıç eğitim notunu (bu forumdan indirmiştim) okudum (118 sayfa) ve orada anlatıldığını da gördüm.

Bu başlık altında KEGS_DOK_GKLVZ_SCLEgitimDokumani_011.doc dosyası da iki yerde verilmiş. Demek önceki mesajlar okunmuyor :)
 
SCL siemensin taktıgı bir isimdir codesys de ST der! .Her marka kafasına göre isim takar netice olarak bunlar bildigimiz pascal dır.
Hem SCL siemens Step7 sofware icinde kullanılan yazım dilini ifade eden tanımdır.
Bundan kastım siemenste 'LD=Ladder FBD=kapı Yontemi' gibi toplamda 6 degisik dilde yazılım yapabilirsiniz hepsinide kendine göre kolaylıklar ve avantajları vardır.
Ama SCL veya ST, PLC lerde en yüksek hareket kabileyetine sahip dildir.


plclerin hemsinde sembol tabloların tanımlandıgı kısımlar vardır.Farklı marka plc ler farklı isimde giriş cıkıs kullanır.Benim önerim plc leri önce donanım olarak incelemesi. O zaman eksik seyler yerine oturacaktır.

-Önce bir PLC markası secin
-Yapı olarak kullandıgı giris cıkıs isimlerini ögrenin
-Daha sonra buları giris cıkısları istediginiz isimde sembol tablosunda tanımlayabilirsiniz
yani delphide VAR icindeki gibi

Örnek

zincir AT %QX0.0 :Bool Gibi
zincir tanımlamasını plc icerisinde hangi görevi atarsanız %QX0.0 cıkısında o görevi
icra edecektir.
 
Moderatör tarafında düzenlendi:
Kod:
ORGANIZATION_BLOCK OB1

VAR_TEMP
a:INT;
b:ARRAY [0..7] OF BOOL ; 
Info: ARRAY[0..19] OF BYTE;
END_VAR

BEGIN 

FOR a:=0 TO 7 BY 1 DO
b[a]:=1;
END_FOR;    

END_ORGANIZATION_BLOCK





arkadaşlar yukardaki programda çalışması veya benim plc de görmem için eksik olanlar ne örnekler hep bu şekilde. b dizisini plc de nasıl kullanabilirim nasıl görebilrim ?
 
Moderatör tarafında düzenlendi:
ORGANIZATION_BLOCK OB1

VAR_TEMP
a:INT;
b:ARRAY [0..7] OF BOOL ;
Info: ARRAY[0..19] OF BYTE;
END_VAR

BEGIN

FOR a:=0 TO 7 BY 1 DO
b[a]:=1;
END_FOR;

END_ORGANIZATION_BLOCK





arkadaşlar yukardaki programda çalışması veya benim plc de görmem için eksik olanlar ne örnekler hep bu şekilde. b dizisini plc de nasıl kullanabilirim nasıl görebilrim ?

siz tam olarak ne yapmak istiyorsunuz
 
for döngüsünü anlamaya çalışıyorum aslına bakarsanız döngüyü yazım şeklini anladım fakat niye plc de kullanılır onu kavrayamıyorum elinizde anlamama yardımcı olacak bir örneğiniz varsa paylaşabilirmisiniz ...

yukarda for döngüsü ile qb124'ün her bir bitini set'lemek istemiştim ama yapamadım anlayamıyorum bir türlü...yardım ederseniz çok sevinirim
 

Forum istatistikleri

Konular
129,067
Mesajlar
922,966
Kullanıcılar
451,347
Son üye
mrosleon

Yeni konular

Geri
Üst