Siemens Simatic S7 SCL Programlama Dili

Güzel bir swap fonksiyonu ;

swap16 (wDeg:word) : word

result := (wDeg div 256) + ((wDeg mod 256)*256);


kolay gelsin.
 
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ü)?

Yardımlarınız için şimdiden çok teşekkürler.
 
Kod:
FUNCTION FC100 : VOID

VAR_INPUT
   SP:REAL;
   PV:REAL;
   Kp:REAL;
   Ti:REAL;
   Ts:REAL;
   LowLimit:REAL;
   UpLimit:REAL;
END_VAR

VAR_OUTPUT
   INTEGER_OUT:INT;
END_VAR
VAR_IN_OUT
  REAL_OUT:REAL;
END_VAR

VAR_TEMP
  e_n:REAL;
  e_n_1:REAL;
  MvDiff:REAL;
END_VAR

BEGIN
   e_n:=SP-PV;
   MvDiff:= ((e_n-e_n_1)+((e_n*Ts)/Ti))*Kp;
   REAL_OUT:=MvDiff+REAL_OUT;
   INTEGER_OUT:=REAL_TO_INT(REAL_OUT);

   IF REAL_OUT<LowLimit THEN
       REAL_OUT:=LowLimit;
   ELSIF REAL_OUT>UpLimit THEN
       REAL_OUT:=UpLimit;
   END_IF;

END_FUNCTION
Buda benden olsun , basit uygulamalar için pratik bir PID bloğu
 
Moderatör tarafında düzenlendi:


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
Fonksiyon Bloğunu her çağırdığınızda ayrı bir datablokla çağırın
 
merhaba arkadaşlar Siemens scl dili pascal tabanlı wincc ise visual basic tabanlı olduğunu duydum bunun hakkında bilgisi olan aydınlatabilir mi ?
 
Merhaba,

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 ?


Syg.
 
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.
 
sn elektronikmuh
oscat library içindeki scl dosyaları sizin tarafınızdan test edildi mi acaba?
bir iki yerde takıldım:

FUNCTION_BLOCK FIFO_16
TITLE = 'FIFO_16'
//
//16 Dword FIFO memory
//
//uses: INC1 [FC53]
//

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?
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…