CTD

Contador descendente

El bloque de función CTD (contador descendente) permite programar procesos de contaje.

Parámetros

Entrada

CD (BOOL)

contador descendente

el valor de CV se decrementa en 1 en cada flanco de subida de CD, excepto si se activa LD o cuando CV llega a cero.

LD (BOOL)

Carga en el acumulador

si LD pasa a ON, el valor actual se carga con el valor de PV

PV (INT)

Valor de preselección

es el valor a partir del que se empieza a descontar en cada flanco del reloj

Salida

Q (BOOL)

señal de salida

se activa si CV = cero

CV (INT)

Valor actual

  • contiene el valor acumulado del contaje (CV = valor actual)

  • El valor se puede cambiar durante la operación de contaje escribiendo en la variable desde el editor de programación.

Diagrama de tiempos

Ejemplo

Cabecera de la POU

Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.

	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

Cuerpo de la POU

Si se activa set (estado = TRUE), se carga en current_value (CV), el valor de preset_value (PV). En cada flanco de subida de clock se decrementa en 1 el valor de current_value. Este procedimiento se repite hasta que current_value llegue a cero. Después, signal_output pasará a TRUE.

Cuerpo LD

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

Cuerpo en ST

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 *);

Cuerpo IL

Para llamar al bloque de función en Editor en lista de instrucciones (IL), introducir:

Modificado el: 2023-01-25Comentarios sobre esta páginaLínea directa de Panasonic