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
Kod: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... ;)
Fonksiyon Bloğunu her çağırdığınızda ayrı bir datablokla çağırınmerhaba 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
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.