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.
Arkadaşlar Merhaba,
SCL programlama dili ile ilgili 1 haftadır çözümünü bulamadığım bir problemi sormak istiyorum sizlere.
PLC'den programı uplaoad ettiğimde bir function için compare blocks diyorum ve plc'deki ile yazılımdaki farklılıkları STL dilinde gösteriyor. Fakat STL'e baktığım zaman source SCL'de olmayan değerleri de gösteriyor PLC'deki yazılımdan farklı olarak.
Örneğin basit bir if deyimi kulanılmış olmasına rağmen alakasız sayıları STL'de görmekteyim.
Acaba bir yerlerde hata mı yapıyorum SCL'yi compile ederken veya blockları compare ederken?
Ya da PLC içerisindeki STL dili SCL olarak nasıl çevirebilirim (STL'i anlamakta zorlanıyorum çünkü)?
FUNCTION_BLOCK TOGGLE
TITLE = 'Tek butonla Start-Stop'
VAR_INPUT //Değişken tanımlama kısmı
CLK : BOOL; // Giriş değişkenimiz, Start-Stop butonu olabilir
rst : BOOL := FALSE; // Reset girişimiz
END_VAR
VAR_OUTPUT
Q : BOOL; // Çıkış değişkenimiz
END_VAR
VAR
edge : BOOL; //Buda ara işlemelerde kullanacagımız yardımcı değişken
END_VAR //Değişken tanımlama sonu
BEGIN //Prgmımız burdan başlıyor
IF rst THEN //Reset var mı kontrolü?
q := 0; //Varsa Çıkışı sıfırla
ELSIF clk AND NOT edge THEN // Girişin çıkan kenarını kontrol ediyoz
Q := NOT Q; // Kenar çıkarsa; çıkışın son durumu ne ise NOT layıp tersini çıkışa atıyoz.
END_IF; //IF Şart Sonu
edge := clk; // Kenar algılama değişkenini kilitleme
END_FUNCTION_BLOCK //Bu kadar... ;)
merhaba sn elektronikmuh vermis oldugunuz ornegi basarili bir sekilde uyguladim ancak bu fonksiyonu birden fazla kullanmak istedigimde sorunlarla karsilasiyorum fonksiyon tutarsiz calisiyor bunun onune nasil gecebilirim
merhaba sn elektronikmuh vermis oldugunuz ornegi basarili bir sekilde uyguladim ancak bu fonksiyonu birden fazla kullanmak istedigimde sorunlarla karsilasiyorum fonksiyon tutarsiz calisiyor bunun onune nasil gecebilirim
SCL'yi çok basit işler için çok küçük fonksiyonlarda kullanıyorum sadece pratik kazanmak için. Ama komple bir makineyi bununla yazmayı da hep istedim ama cesaret edemedim olur da tıkanırsam makinem gecikir diyerek.
Sizin kullanımız nasıl, misal makinenin yapacağı belli bir iş için fonksiyonları mı yazıyorsunuz SCL ile, yoksa komple tüm sistemin programını mı SCL'de yazıyorsunuz arkadaşlar ?
Bunun yanı sıra her ne kadar SCL'nin avantajları yüksek seviyeli bir programlama dili olarak kendini belli etse de, siz SCL'yi kullananlar olarak "SCL'ye geçtim ve şundan ötürü çok memnunum" dediğiniz noktalar nelerdir ?
Bana göre Siemenste tüm sistemi SCL dilinde yazmak kullanıcı dostu olmuyor, çünkü Simensin SCL dili bir CodeSys in ST dili gibi kullanıcı dostu ve diagnostik tarafı çok esnek değil, ama her zaman komplex matematik işlemleri veya algoritmelar bu dilde çok rahat yazılabiliyor ve blok olarak programlara eklenebiliyor.
Bana göre Siemenste tüm sistemi SCL dilinde yazmak kullanıcı dostu olmuyor, çünkü Simensin SCL dili bir CodeSys in ST dili gibi kullanıcı dostu ve diagnostik tarafı çok esnek değil, ama her zaman komplex matematik işlemleri veya algoritmelar bu dilde çok rahat yazılabiliyor ve blok olarak programlara eklenebiliyor.
kesinlikle katılıyorum.
özellikle makine otomasyonunda main kısmını graph , eğer desteklemiyorsa st dışındaki diller daha kullanışlı oluyor.
en güzeli scl ile kendi fb.ni oluşturup librarye atmak ve istediğin bloktan çağırmak.
VAR_INPUT
Din : DWORD;
E : BOOL := TRUE;
RD : BOOL;
WD : BOOL;
RST : BOOL;
END_VAR
VAR_OUTPUT
Dout : DWORD;
EMPTY : BOOL := TRUE;
FULL : BOOL;
END_VAR
CONST
n := 16; (* changing this value will chage the number of stored elements in the fifo *)
END_CONST
VAR
fifo : ARRAY[0..n] OF DWORD;
pr : INT;
pw : INT;
END_VAR
BEGIN
IF RST THEN
pw := pr;
FULL := FALSE;
EMPTY := TRUE;
Dout := 0;
ELSIF E THEN
IF NOT EMPTY AND RD THEN
Dout := fifo[pr];
pr := INC1(X:=pr,N:=n);
EMPTY := pr = pw;
FULL := FALSE;
END_IF;
IF NOT FULL AND WD THEN
fifo[pw] := Din;
pw := INC1(X:=pw,N:=n);
FULL := pw = pr;
EMPTY := FALSE;
END_IF;
END_IF;
END_FUNCTION_BLOCK
kırmızı renkte olanları build dediğim zaman kabul etmiyor. direkt olarak sayı mı girmeliyim array içindeki max değere?