Molti clienti hanno l’esigenza di visualizzare e/o impostare la data e l’ora in un sistema SlimLine tramite il pannello operatore Weintek, in questo topic avevamo già trattato l’argomento utilizzando delle macro di conversione sul pannello. In questo topic invece vediamo come sia possibile realizzare una semplice gestione Data/ora da pannello (Screenshot) gestendo tutto da programma LogicLab. In LogicLab in una task Back eseguiamo il programma:
VAR
i : UDINT; (* Auxiliary variable *)
ClockTime : UDINT; (* Clock time *)
ClockDate : UDINT; (* Clock date *)
DateTime : UDINT; (* Clock Date/Time *)
LDTime : LDATETIMESTRUCT; (* Date/Time struct *)
END_VAR
// Check if new date has been set by HMI.
IF ((HMIClockDate <> ClockDate) OR (HMIClockTime <> ClockTime)) THEN
SysDateTime:=TO_UDINT(CONCAT_DT(
TO_INT(MOD(HMIClockDate, 10000)), //Year
TO_INT(MOD((HMIClockDate/10000), 100)), //Month
TO_INT(MOD((HMIClockDate/1000000), 100)), //Day
TO_INT(HMIClockTime/10000), //Hour
TO_INT(MOD((HMIClockTime/100), 100)), //Minute
TO_INT(MOD(HMIClockTime, 100)))); //Second
END_IF;
// If system Date/Time changes set HMI values.
IF (SysDateTime <> DateTime) THEN
DateTime:=SysDateTime; //Clock Date/Time
i:=SPLIT_DT(TO_DATE_AND_TIME(SysDateTime), ADR(LDTime.Year), ADR(LDTime.Month), ADR(LDTime.Day), ADR(LDTime.Hours), ADR(LDTime.Minutes), ADR(LDTime.Seconds));
ClockDate:=LDTime.Day*1000000; //Clock date
ClockDate:=ClockDate+TO_UDINT(LDTime.Month*10000); //Clock date
ClockDate:=ClockDate+TO_UDINT(LDTime.Year); //Clock date
HMIClockDate:=ClockDate;
ClockTime:=LDTime.Seconds; //Clock time
ClockTime:=ClockTime+TO_UDINT(LDTime.Minutes*100); //Clock time
ClockTime:=ClockTime+TO_UDINT(LDTime.Hours*10000); //Clock time
HMIClockTime:=ClockTime;
END_IF;
Le variabili HMIClockDate e HMIClockTime sono variabili a UDINT allocate in DB100 collegate all’oggetto di visualizzazione sul display. Il loro valore ad ogni secondo viene calcolato dal programma. Se vi è una variazione del loro valore rispetto al valore calcolato vi è stata una impostazione di un nuovo valore sul terminale quindi occorre impostare la variabile SysDateTime che aggiorna automaticamente il real time clock del sistema.