Molte volte per eseguire tests su apparecchiature occorre disporre di un comando di On/Off con tempi di ciclo variabili e casuali, utilizzando le funzioni SysGetSysTime e SysGetRandom nei sistemi Sline è possibile realizzare un semplice blocco funzione che realizza tale funzione.
Ecco il codice in linguaggio ST.
TimePsd:=SysGetSysTime(TRUE)-TimeBf; (* Time passed (uS) *)
TimeBf:=SysGetSysTime(FALSE); (* Time buffer (uS) *)
IF (DelayTm > TimePsd) THEN
DelayTm:=DelayTm-TimePsd; (* Delay time (uS) *)
ELSE
(* Eseguo inversione uscita e calcolo il relativo tempo di ritardo. *)
Out:=Out XOR TRUE; (* Output status *)
IF (NOT(Out)) THEN (* Calcolo tempo di off. *)
DelayTm:=(MinOffTime*1000)+((MaxOffTime-MinOffTime)*TO_UDINT(SysGetRandom(TRUE)*1000));
ELSE (* Calcolo tempo di on. *)
DelayTm:=(MinOnTime*1000)+((MaxOnTime-MinOnTime)*TO_UDINT(SysGetRandom(TRUE)*1000));
END_IF;
END_IF;
Allego per il download l’estratto del manuale supporto programmazione IEC con le note relative, ed il progetto LogicLab.