Temporizzatore per intervalli di 1ms (da 0 a 32.767s)
Questo temporizzatore per unità di 0.001s funziona come un temporizzatore con ritardo all’accensione. Se il contatto start del Function Block è in stato TRUE, il tempo preimpostato SV (valore target) viene avviato. Una volta trascorso questo tempo, il contatto temporizzatore T passa a TRUE.
Ingresso
contatto di avvio
ogni qualvolta viene rilevato un fronte di salita, il valore target SV viene copiato nel valore corrente EV e il temporizzatore viene avviato
valore target
tempo di ritardo accensione definito (da 0 a 32.767s)
Uscita
contatto temporizzatore
viene impostato quando il tempo definito in SV è trascorso, ovvero quando EV diventa 0
valore corrente
valore di conteggio dal quale viene sottratto 1 ogni 0.001s mentre il temporizzatore è in esecuzione
Il valore può essere cambiato durante il conteggio scrivendo sulla variabile dall’editore di programmazione.
Il numero di temporizzatori disponibili è limitato e dipende dalle impostazioni nei registri di sistema 5 e 6.
Per i Function Block del temporizzatore, il compilatore alloca automaticamente un indirizzo NUM* a ciascuna istanza del temporizzatore. Gli indirizzi vengono allocati contando indietro, a partire dall'indirizzo più alto possibile.
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
Alarm_control: TM_1ms_FB;
Start_contact: BOOL:=FALSE;
Alarm_Relay_1: BOOL:=FALSE;
Alarm_Relay_2: BOOL:=FALSE;
END_VAR
In questo esempio vengono utilizzate variabili. Potete anche utilizzare costanti per le variabili di ingresso.
Non appena la variabile Start_contact diventa TRUE, il temporizzatore Alarm_control verrà avviato. La variabile EV del temporizzatore viene impostata sul valore di SV. Finché Start_contact è TRUE, il valore 1 viene sottratto da EV ogni 1ms. Quando EV raggiunge il valore 0 (dopo 1 secondo in quanto SV = 1000 con il tipo di temporizzatore TM_1ms_FB), la variabile Alarm_Relay_2 diventa TRUE.
Non appena il valore della variabile EV del temporizzatore è inferiore o pari a 500 (dopo 0,5s) ed EV è diverso da 0, Alarm_Relay_1 viene impostato su 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*)
Se desiderate chiamare il Function Block in una lista istruzioni, inserite quanto segue:
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 |