Con 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_VAR
En 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_BODY
Para llamar al bloque de función en lista de instrucciones, introducir: