Salida periódica
El bloque de funciones TP proporciona una salida de pulsos donde se puede determinar el periodo.
Entrada
reloj
en el flanco de subida de IN, se genera una salida de señal de reloj con un periodo definido en PT
periodo
dato de 16 bits: 0–327.27s
dato de 32 bits: 0–21,474,836.47s (dato de 32 bits no disponible para FP3, FPC, FP5, FP10/10S)
resolución de 10ms
en el flanco de subida de IN arranca un reloj con un periodo PT. Si dentro del periodo se detecta otro flanco de subida de IN no se genera una nueva salida periódica.
Salida
señal de salida
está a ON durante un periodo PT tan pronto como se detecte el flanco de subida de IN
valor actual
contiene el valor actual del temporizador. Si PT = ET, Q pasa a OFF
El valor se puede cambiar durante la operación de contaje escribiendo en la variable desde el editor de programación.
FP2, FP2SH y FP10SH utiliza un valor de 32 bits para PT.
Independientemente del periodo a ON de la señal IN, se genera un señal de reloj en la salida Q con un periodo definido en PT. El bloque de funciones TP arranca con el flanco de subida detectado en la entrada IN.
Un flanco de subida en la entrada IN no afecta en el procesamiento de PT.
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: TP;
start: BOOL:=FALSE;
set_value: TIME:=T#0s;
signal_output: BOOL:=FALSE;
current_value: TIME:=T#0s;
END_VAR
Si start pasa a ON (TRUE), en signal_output se genera una salida de reloj hasta alcanzar el periodo set_value.
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_CONTACT,,start,3,2,5,4,);
B(B_VARIN,,set_value,7,3,9,5,);
B(B_VAROUT,,current_value,14,3,16,5,);
B(B_COIL,,signal_output,21,2,23,4,);
B(B_FB,TP!,copy_name,9,1,14,5,,?BIN?BPT?AQ?AET);
L(1,3,3,3);
L(1,0,1,6);
L(5,3,9,3);
L(14,3,21,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
copy_name( IN:= start ,
PT:= set_value ,
Q=> signal_output ,
ET=> current_value );
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
TP1: TP;
bIN: BOOL:=FALSE;
tPT: TIME:=T#30s;
tET: TIME:=T#0s;
bQ: BOOL:=FALSE;
bEmergencyStop: BOOL:=FALSE;
END_VAR
Después de un flanco ascendente en IN, el temporizador inicia el contaje y Q pasa a TRUE. Cuando bEmergencyStop pasa a TRUE antes de que haya transcurrido el periodo de reloj, el contaje se detiene y la salida Q se reinicia inmediatamente. En este ejemplo, el temporizador se inicializa con el periodo de reloj PT de 30s.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,E_MOVE!,,16,0,22,4,,?DEN?D?AENO?C);
B(B_VARIN,,tPT,14,2,16,4,);
B(B_VAROUT,,TP1.ET,22,2,24,4,);
B(B_CONTACT,,TP1.Q,12,1,14,3,);
B(B_CONTACT,,bEmergencyStop,7,1,9,3,);
L(14,2,16,2);
L(1,2,7,2);
L(9,2,12,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,tPT,14,3,16,5,);
B(B_VAROUT,,tET,21,3,23,5,);
B(B_CONTACT,,bIN,7,2,9,4,);
B(B_COIL,,bQ,33,2,35,4,);
B(B_FB,TP!,TP1,16,1,21,5,,?BIN?BPT?AQ?AET);
B(B_CONTACT,,bEmergencyStop,27,2,29,4,N);
L(1,3,7,3);
L(9,3,16,3);
L(29,3,33,3);
L(21,3,27,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bEmergencyStop AND TP1.Q) then
TP1.ET:=tPT;
end_if;
TP1(IN := bIN, PT := tPT, ET => tET);
bQ := NOT bEmergencyStop AND TP1.Q;