Merhaba bunal55 ,
Kullanıdığınız CTU fonksiyon bloğunda PV (Counter Limit) girişini kalıcı olarak ayarlayıp CV(Current Counter Value ) değerini ayarlayamamanızın sebebi, fonksiyon blok yapısının çıkışlarına müdahale edememenizden kaynaklanmaktadır.
Bu uygulamayı yapabilmek için CTU fonksiyon bloğunu kendiniz yazarsanız istediğiniz değişkeni istediğiniz şekilde ayarlayabilirsiniz.
Örnek vermek gerekirse, sizin istediğniz gibi çalışan bir sayıcı bloğu ve program içerisindeki kullanımı aşağıdaki gibidir.
// FB //
(* FB Degisken Tanımlama Alanı *)
FUNCTION_BLOCK CTU_Manual
VAR_INPUT
CU : BOOL;
RESET : BOOL;
PV : WORD;
INIT_CV : WORD;
END_VAR
VAR_OUTPUT
Q : BOOL;
CV : WORD;
END_VAR
VAR
bInit : BOOL;
rTrig_CU :R_TRIG;
END_VAR
(*FB Lojik Alani*)
IF NOT bInit THEN (*PLC Kapandigi Andaki Degeri Baslangicta CV ' ye Yazdirma *)
CV := INIT_CV;
bInit := TRUE;
END_IF
rTrig_CU(CLK:= CU , Q=> ); (* Yukselen Kenar Ile Anlik Sayici Degeri 1 Arttirma *)
IF rTrig_CU.Q THEN
CV := CV + 1;
END_IF
IF PV > CV THEN (* Sayicinin Anlik Degeri Limit Degerine Ulastiginda Cikis Verme *)
Q := FALSE;
ELSE
Q := TRUE;
END_IF
IF RESET THEN (* Anlik Sayilan Degeri Resetleme *)
CV := 0;
END_IF
// FB' yi Programda Kullanma//
(*Programda Degisken Tanimlama alanı*)
PROGRAM MAIN
VAR
TestCounter : CTU_Manual;
bCU : BOOL;
bReset : BOOL;
bQ : BOOL;
END_VAR
VAR PERSISTENT
wPv : WORD;
wLastCv : WORD;
END_VAR
(*Program Lojik Alanı*)
TestCounter(
CU := bCU,
RESET := bReset,
PV := wPV,
INIT_CV := wLastCv,
Q => bQ,
CV => wLastCv);
Umarım uygulamanızda faydalı olur.