TON

Temporizzatore con ritardo all'accensione

Il Function Block TON vi permette di programmare un temporizzatore con ritardo all'accensione.

Parametri

Ingresso

IN (BOOL)

temporizzatore attivo

un temporizzatore interno viene avviato per ciascun fronte di salita rilevato in IN

PT (TIME)

ritardo all'accensione (PT = tempo preimpostato)

valore a 16 bit: 0–327.27s

valore a 32 bit: 0–21,474,836.47s (valore a 32 bit non è disponibile per FP3, FPC, FP5, FP10/10S)

risoluzione 10ms ciascuno

Uscita

Q (BOOL)

uscita segnale

impostata su TRUE se PT = ET

ET (TIME)

tempo trascorso

indica il valore attuale del tempo trascorso

Il valore può essere cambiato durante il conteggio scrivendo sulla variabile dall’editore di programmazione.

Note

  • Q viene impostato in ritardo con il tempo definito in PT. Il reset avviene senza ritardo.

  • Se l'ingresso IN viene impostato solo per il periodo del tempo di ritardo PT o addirittura per un periodo più breve (t3 - t2 < PT), Q non verrà impostato.

Diagramma tempi

Esempio

Intestazione del POU

Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.

	VAR
		copy_name: TON;
		start: BOOL:=FALSE;
		set_value: TIME:=T#0s;
		signal_output: BOOL:=FALSE;
		current_value: TIME:=T#0s;
	END_VAR

Corpo del POU

Se start viene impostato (stato = TRUE), il segnale di ingresso viene trasferito a signal_output con un ritardo pari al periodo di tempo set_value.

Corpo 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,TON!,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

Corpo ST

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

Corpo IL

Se desiderate chiamare il Function Block in una lista istruzioni, inserite quanto segue:

Esempio con stop di emergenza e inizializzazione dell'ora preimpostata

Intestazione del POU

Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU.La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.

	VAR
		TOF1: TOF;
		tPT: TIME:=T#10s;
		tET: TIME:=T#0s;
		bIN: BOOL:=FALSE;
		bQ: BOOL:=FALSE;
		bEmergencyStop: BOOL:=FALSE;
	END_VAR

Corpo del POU

Dopo un fronte di discesa su bIN, il timer inizia a contare e Q viene impostato su TRUE. Quando bEmergencyStop è impostato su TRUE prima che il valore del timer sia trascorso, il conteggio si arresta e l'uscita Q viene reimpostata immediatamente. In questo esempio il timer viene inizializzato con l'ora preimpostata PT di 10 s.

Corpo 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,,TOF1.ET,22,2,24,4,);
B(B_CONTACT,,bIN,11,1,13,3,N);
B(B_CONTACT,,bEmergencyStop,6,1,8,3,);
L(1,2,6,2);
L(13,2,16,2);
L(8,2,11,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_FB,TOF!,TOF1,16,1,21,5,,?BIN?BPT?AQ?AET);
B(B_VARIN,,tPT,14,3,16,5,);
B(B_VAROUT,,tET,21,3,23,5,);
B(B_CONTACT,,bIN,6,2,8,4,);
B(B_COIL,,bQ,34,2,36,4,);
B(B_CONTACT,,bEmergencyStop,27,2,29,4,N);
L(21,3,27,3);
L(29,3,34,3);
L(8,3,16,3);
L(1,3,6,3);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Corpo ST

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

L'ultima revisione: 2021-07-05Feedback su questa paginaPanasonic hotline