 CT_FB Contador descendente
CT_FB Contador descendenteCon el bloque de función CT_FB se pueden implementar contadores descendentes. El rango de contaje SV (valor de preselección) está entre 1 y 32767.

Entrada
entrada de contaje (descendente)
en cada flanco de subida de Count, se resta 1 del valor actual EV hasta que alcance el valor cero
entrada de reset
con el flanco de subida de Reset, se inicializa EV y se resetea la salida C; en el flanco de bajada de Reset, el valor de SV se copia en EV.
Valor de preselección
valor de EV después del procedimiento de inicialización
Salida
señal de salida
se activa cuando EV llega a 0
Valor actual
valor actual
El valor se puede cambiar durante la operación de contaje escribiendo en la variable desde el editor de programación.
El bloque de función CT_FB debe ser reseteado cada vez que se utiliza.
El número de contadores disponibles es limitado y depende de la configuración de los registros del sistema 5 y 6. El compilador asigna una dirección NUM* en cada llamada del contador. Las direcciones se asignan de forma consecutiva hacia abajo, comenzando por la dirección más alta.
La función básica CT (contador descendente) utiliza la misma dirección NUM* (entrada Num). Para evitar errores (conflicto entre direcciones), no se deben utilizar en el mismo proyecto las funciones CT y los bloques de funciones CT_FB.
Diagrama de tiempos

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
		copy_name: CT_FB;
		set_value: INT:=10;
		signal_output: BOOL:=FALSE;
		count_contact: BOOL:=FALSE;
		Reset_CT: BOOL:=FALSE;
		machine_error: BOOL:=FALSE;
		number_error: INT:=0;
	END_VAREn este ejemplo se utilizan variables. También se pueden utilizar constantes como variables de entrada. En cada flanco de subida de count_contact se resta 1 del valor de EV. Signal_output pasa a TRUE si el valor actual EV llega a cero.


BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_FB,CT_FB!,copy_name,9,1,15,6,,?BCount?BReset?BSV?AC?AEV);
B(B_VARIN,,count_contact,7,2,9,4,);
B(B_VARIN,,Reset_CT,7,3,9,5,);
B(B_VARIN,,set_value,7,4,9,6,);
B(B_VAROUT,,signal_output,15,2,17,4,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,E_MOVE!,Instance,10,1,16,5,,?DEN?D?AENO?C);
B(B_VARIN,,copy_name.EV,8,3,10,5,);
B(B_VAROUT,,number_error,16,3,18,5,);
B(B_CONTACT,,machine_error,4,2,6,4,);
L(1,3,4,3);
L(6,3,10,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODYPara llamar al bloque de función en lista de instrucciones, introducir:
