Devo gestire una temporizzazione in linguaggio ST. Precedentemente utilizzavo i vostri prodotti Picolog e programmavo in linguaggio "C".
Nelle vostre librerie era disponibile la funzione IsMsecTimeOver() che rendeva l'esecuzione delle temporizzazioni estremamente semplice. Esiste qualcosa di simile su SlimLine ?
La funzione IsMsecTimeOver() si basa sul controllo del tick di sistema che nei sistemi Picolog si incrementa automaticamente ogni 1 mS.
Nei sistemi SlimLine è possibile da linguaggio ST testare la variabile di sistema SysTime di tipo UDINT che si incrementa ad ogni mS raggiunto il valore massimo si reinizializza. In pratica per eseguire la temporizzazione similarmente a quanto facevi in "C" sui sistemi Picolog puoi fare qualcosa simile al programma sottoriportato che esegue l'inversione della uscita Do00M00 ogni secondo. La variabile RefTimeBuf deve essere dichiarata di tipo UDINT.
(* Init the reference time at first program loop. *)
IF SysFirstLoop THEN RefTimeBuf:=SysTime; (* Save the reference time *) END_IF;
(* Check if 1 Sec is passed and invert the logic DoOOM00 state. *)
IF (SysTime > (RefTimeBuf+1000)) THEN RefTimeBuf:=SysTime; (* Save the reference time *) Do00M00:=NOT(Do00M00); END_IF;
Esiste anche la funzione SysGetSysTime() che permette la lettura di un tick di sistema che si incrementa ogni uS, in questo caso il programma precedente può essere modificato nel modo.
(* Init the reference time at first program loop. *)
IF SysFirstLoop THEN RefTimeBuf:=SysGetSysTime(TRUE); (* Save the reference time *) END_IF;
(* Check if 1 Sec is passed and invert the logic DoOOM00 state. *)
IF (SysGetSysTime(TRUE) > (RefTimeBuf+1000000)) THEN RefTimeBuf:=SysGetSysTime(FALSE); (* Save the reference time *) Do00M00:=NOT(Do00M00); END_IF;
Da notare la chiamata a SysGetSysTime() con la flag FALSE per avere lo stesso tempo utilizzato nel confronto e non perdere i uS di tempo necessari alla esecuzione delle istruzioni di confronto.
Esistono comunque anche i blocchi funzione eTOF, Timer Off ed eTON, Timer On che possono essere utilizzati in tutti e 5 i linguaggi della IEC61131. Entrambi i blocchi funzione eseguono temporizzazioni con tempo definibile in mS.