Aufwärtszähler
Mit dem Funktionsbaustein CTU (count up) können Sie Zählvorgänge programmieren.
Der Zähler zählt von null bis zum Maximalwert 32767 aufwärts. Bei jeder steigenden Flanke an CU wird der aktuelle Wert CV (current value) um 1 erhöht.
Eingang
Aufwärtszähler
bei jeder steigenden Flanke an CU wird der Wert 1 zu CV addiert, außer R ist gesetzt
Zurücksetzen
Bei einer steigenden Flanke an R wird der aktuelle Wert CV auf null zurückgesetzt und der Zählvorgang beendet. Der Ausgang Q wird auf FALSE gesetzt.
Bei der nächsten fallenden Flanke an R wird der Zählvorgang neu gestartet.
Sollwert
wenn CV größer/gleich PV, wird Q auf TRUE gesetzt
Wenn kein Sollwert eingestellt oder der Sollwert null ist, wird der Ausgang Q unmittelbar nach dem Start des Zählvorgangs auf TRUE gesetzt.
Ausgang
Signalausgang
wird auf TRUE gesetzt, wenn CV größer/gleich PV
wird auf FALSE gesetzt, wenn eine steigende Flanke an R anliegt
Aktueller Wert
enthält das Additionsergebnis
Wenn CV den Sollwert PV erreicht, wird der Ausgang Q auf TRUE gesetzt, der Zähler zählt jedoch weiter, bis der obere Grenzwert von 32767 erreicht ist.
Der Wert kann während des Zählens geändert werden, indem aus dem Programmiereditor heraus in die Variable geschrieben wird.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
CTU1: CTU;
bReset: BOOL:=FALSE;
(*sets CV to zero if TRUE*)
iPresetValue: INT:=3;
(*if CV reaches this value,
output Q is set*)
bUpCounting_PV_reached: BOOL:=FALSE;
(*is set, if CV reaches PV*)
iCurrentValue: INT:=0;
(*contains the current value*)
END_VAR
Wenn bReset gesetzt ist (Status = TRUE) wird iCurrentValue(CV) zurückgesetzt. Wenn an CU eine steigende Flanke erkannt wird, wird der Wert 1 zu iCurrentValue addiert. Vorgang wird bei jeder steigenden Flanke an CU so oft wiederholt, bis iCurrentValue größer/gleich iPresetValue ist. Dann wird bUpCounting_PV_reached auf TRUE gesetzt.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,5,2,7,4,);
B(B_FB,CTU!,CTU1,12,1,17,6,,?BCU?BR?BPV?AQ?ACV);
B(B_COIL,,bUpCounting_PV_reached,23,2,25,4,);
B(B_CONTACT,,bReset,5,4,7,6,);
B(B_VAROUT,,iCurrentValue,18,4,20,6,);
B(B_VARIN,,iPresetValue,7,6,9,8,);
L(1,0,1,8);
L(1,3,5,3);
L(7,3,12,3);
L(17,3,23,3);
L(9,4,12,4);
L(9,4,9,5);
L(17,4,17,5);
L(1,5,5,5);
L(7,5,9,5);
L(10,5,12,5);
L(17,5,18,5);
L(10,5,10,7);
L(9,7,10,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
CTU1(CU := sys_bPulse1s, R := bReset, PV := iPresetValue,
Q => bUpCounting_PV_reached,
CV => iCurrentValue);