Temporizador con resolución de 1ms (de 0 a 32,767s)
El temporizador con resolución de 0,001s funciona con retardo a la conexión. Si el contacto start del bloque de función está en estado ON, arranca el temporizador SV. Cuando el valor actual (EV) alcanza el valor de preselección (SV), el contacto T pasa a ON.
Entrada
arranca el temporizador
cada vez que se detecta el flanco de subida, el valor de preselección SV se copia en EV, valor actual y arranca el temporizador
valor de preselección
valor de preselección del temporizador (de 0 a 32.767s)
Salida
contacto del temporizador
se activa cuando se alcanza el valor de preselección SV, es decir, cuando EV llega a 0
valor actual
valor que se decrementa en 1 cada 0,001s mientras esté funcionando el temporizador
El valor se puede cambiar durante la operación de contaje escribiendo en la variable desde el editor de programación.
El número de temporizadores disponibles es limitado y depende de la configuración de los registros del sistema 5 y 6.
En el caso de los bloques de función el compilador asigna automáticamente una dirección NUM* diferente a cada instancia de temporizador. Las direcciones se asignan de forma consecutiva hacia abajo, comenzando por la dirección más alta.
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
Alarm_control: TM_1ms_FB;
Start_contact: BOOL:=FALSE;
Alarm_Relay_1: BOOL:=FALSE;
Alarm_Relay_2: BOOL:=FALSE;
END_VAR
En este ejemplo se utilizan variables. También se pueden utilizar constantes como variables de entrada.
Cuando la variable Start_contact pasa a TRUE, arranca el temporizador Alarm_control. En la variable EV se copia el valor de SV. Siempre que el contacto Start_contact esté a TRUE, se resta 1 del valor EV cada 1ms. Cuando EV alcanza el valor 0 (después de 1 segundo, puesto que SV = 1000 con el temporizador de tipo TM_1ms_FB), la variable Alarm_Relay_2 pasa a TRUE.
Tan pronto como el valor de la variable EV es menor o igual a 500 (después de 0.5s) y EV es distinto de 0, Alarm_Relay_1 pasa a TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,Start_Contact,7,2,9,4,);
B(B_VARIN,,1000,7,3,9,5,);
B(B_VAROUT,,Alarm_Relay_2,16,2,18,4,);
B(B_FB,TM_1ms_FB!,Alarm_control,9,1,16,5,,?Bstart?BSV?AT?AEV);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_F,@LE-2!,Instance,11,0,16,3,,?D?D?C);
B(B_VARIN,,Alarm_control.EV,9,0,11,2,);
B(B_VARIN,,500,9,1,11,3,);
B(B_F,@NE!,Instance,11,5,16,8,,?D?D?C);
B(B_VARIN,,0,9,6,11,8,);
B(B_VARIN,,Alarm_control.EV,9,5,11,7,);
B(B_F,@AND-2!,Instance,20,2,25,5,,?D?D?C);
B(B_VAROUT,,Alarm_Relay_1,25,2,27,4,);
L(16,1,17,1);
L(17,1,17,3);
L(17,3,20,3);
L(17,4,20,4);
L(17,4,17,6);
L(16,6,17,6);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
Alarm_Control( start:= Start_Contact ,
SV:= 1000,
T=> Alarm_Relay_2 ,
EV=> Alarm_Control.EV );
(*The ON-delay time is 1000ms*)
Alarm_Relay_1:= Alarm_Control.EV <= 500 & Alarm_Control.EV <> 0;
(*Alarm_Relay_1 is set to TRUE after 500ms*)
Para llamar al bloque de función en lista de instrucciones, introducir:
CAL |
Alarm_control (start:=Start_contact, SV:= 1000 , T:= Alarm_Relay_2) |
LD |
Alarm_control.EV |
LE |
500 |
AND( |
Alarm_control.EV |
NE |
0 |
) |
|
ST |
Alarm_Relay_1 |