TP

Salida periódica

El bloque de funciones TP proporciona una salida de pulsos donde se puede determinar el periodo.

Parámetros

Entrada

IN (BOOL)

reloj

en el flanco de subida de IN, se genera una salida de señal de reloj con un periodo definido en PT

PT (TIME)

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

Q (BOOL)

señal de salida

está a ON durante un periodo PT tan pronto como se detecte el flanco de subida de IN

ET (TIME)

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.

Observaciones

  • 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.

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
		copy_name: TP;
		start: BOOL:=FALSE;
		set_value: TIME:=T#0s;
		signal_output: BOOL:=FALSE;
		current_value: TIME:=T#0s;
	END_VAR

Cuerpo de la POU

Si start pasa a ON (TRUE), en signal_output se genera una salida de reloj hasta alcanzar el periodo set_value.

Cuerpo LD

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

Cuerpo en ST

copy_name( IN:= start ,
        PT:= set_value ,
        Q=> signal_output ,
        ET=> current_value );

Cuerpo IL

Ejemplo con parada de emergencia e inicialización del temporizador

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
		TP1: TP;
		bIN: BOOL:=FALSE;
		tPT: TIME:=T#30s;
		tET: TIME:=T#0s;
		bQ: BOOL:=FALSE;
		bEmergencyStop: BOOL:=FALSE;
	END_VAR

Cuerpo de la POU

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.

Cuerpo LD

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

Cuerpo en ST

if (bEmergencyStop AND TP1.Q) then
    TP1.ET:=tPT;
end_if;
TP1(IN := bIN, PT := tPT, ET => tET);
bQ := NOT bEmergencyStop AND TP1.Q;

Modificado el: 2021-09-27Comentarios sobre esta páginaLínea directa de Panasonic