CTD

Abwärtszähler

Mit dem Funktionsbaustein CTD (count down) können Sie Zählvorgänge programmieren.

Parameter

Eingang

CD (BOOL)

Abwärtszähler

bei jeder steigenden Flanke an CD wird der Wert 1 vom aktuellen Wert in CV abgezogen, außer LD ist gesetzt oder CV hat den Wert Null erreicht

LD (BOOL)

Lade Akkumulator

mit LD wird der Zählerstand auf PV zurückgesetzt

PV (INT)

Sollwert

ist der Wert, von dem beim ersten Zählvorgang abgezogen wird

Ausgang

Q (BOOL)

Signalausgang

wird gesetzt, wenn CV = Null

CV (INT)

Aktueller Wert

  • enthält das aktuelle Subtraktionsergebnis (CV = current value)

  • Der Wert kann während des Zählens geändert werden, indem aus dem Programmiereditor heraus in die Variable geschrieben wird.

Zeitdiagramm

Beispiel

POE-Kopf

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
		initialize_count: BOOL:=TRUE;
			(*for setting the current value
to starting value*)
		count: BOOL:=FALSE;
			(*1 is subtracted from the current
value for each leading edge
detected at count*)
		load: BOOL:=FALSE;
			(*sets the curr_value back to 
set_value, if TRUE*)
		set_value: INT:=2;
			(*the starting value*)
		output_value: BOOL:=FALSE;
			(*is set, if the current value is
zero*)
		curr_value: INT:=0;
			(*the current_value*)
		ctd_1: CTD;
			(*instance of the counter*)
	END_VAR

POE-Rumpf

Wenn set gesetzt ist (Status = TRUE), wird preset_value (PV) in den current_value (CV) geladen. Jedesmal, wenn an clock eine steigende Flanke anliegt, wird von current_value der Wert 1 abgezogen. Dieser Vorgang wird so oft wiederholt, bis current_value kleiner/gleich Null ist. Dann wird signal_output gesetzt.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_FB,CTD!,copy_name,8,2,13,7,,?BCD?BLD?BPV?AQ?ACV);
B(B_VARIN,,output_value,6,5,8,7,);
B(B_VAROUT,,current_value,13,4,15,6,);
B(B_CONTACT,,set,3,4,5,6,);
B(B_CONTACT,,clock,3,2,5,4,);
B(B_COIL,,signal_output,20,3,22,5,);
L(7,4,8,4);
L(1,5,3,5);
L(5,5,8,5);
L(1,3,3,3);
L(5,3,7,3);
L(7,3,7,4);
L(13,4,20,4);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

IF set THEN      (* first cycle *)
    load:=TRUE;        (* load has to be TRUE,
                        to set current_value to output_value *)
    clock:=FALSE;
END_IF;
copy_name(CD:= clock, LOAD:= set, PV:= output_value, Q=> signal_output, CV=> current_value);
load:=FALSE;    (* now current_value got the right value, load doesn't need to be *)
                (* TRUE any longer *);

AWL-Rumpf

Wenn Sie den Funktionsbaustein in einer Anweisungsliste (AWL-Editor) aufrufen möchten, geben Sie folgendes ein:

Letzte Änderung am: 2021-09-27Feedback zu dieser SeitePanasonic Hotline