Vai all indice del manuale di programmazione
Dalla versione 5.20.x.xx LogicLab supporta operatori gestione data ed ora che possono essere utilizzati sia per estrarre informazioni che per eseguire operazioni.
Tipo | Descrizione | Esempio |
---|---|---|
DATE o D# | 32 bit senza segno (YYYY-MM-DD), range da 1970-01-01 a 2038-01-19. | D#1980-01-05 |
LDATE o LD# | 64 bit senza segno (YYYY-MM-DD), range da 1970-01-01 a 2262-04-11. | LD#1980-01-05 |
DATE_AND_TIME o DT# | 32 bit senza segno (YYYY-MM-DD-hh:mm:ss), range da 1970-01-01-00:00:00 a 2038-01-19-03:14:07. | DT#1980-01-05-00:05:10 |
LDATE_AND_TIME o LDT# | 64 bit senza segno (YYYY-MM-DD-hh:mm:ss.ns), range da 1970-01-01-00:00:00 a 2262-04-11-23:47:16.854. | LDT#1980-01-05-00:05:10.123456 |
TIME o T# | 32 bit con segno, range da -24d_20h_31m_23s_648ms a 24d_20h_31m_23s_647ms | T#20d5h4m7s20ms |
LTIME o LT# | 64 bit con segno, range da -106751d_23h_47m_16s_854ms_775us_808ns a 106751d_23h_47m_16s_854ms_775us_807ns. | LT#105d5h4m7s20ms50us30ns |
TIME_OF_DAY o TOD# | 32 bit senza segno (hh:mm:ss.(ms)), range da 00:00:00.000 a 23:59:59.999. | TOD#13:40:55.123 |
LTIME_OF_DAY o LTOD# | 64 bit senza segno (hh:mm:ss.(ns)), range da 00:00:00.000000000 a 23:59:59.999999999. | LTOD#13:40:55.123456789 |
Funzioni divisione Data/Ora
Apposite funzioni di divisione permettono di suddividere gli operatori Data/Ora in variabili. Tutte le variabili ritornate sono di tipo INT, devono essere passati alla funzione gli indirizzi di allocazione. La struttura dati LDATETIMESTRUCT permette di aggregare tutte le variabili di Data/Ora.
Funzione | Descrizione |
---|---|
SPLIT_DATE | Divide operatore DATE o LDATE nelle variabili anno, mese, giorno. La funzione restituisce FALSE in caso di errori. |
SPLIT_DT | Divide operatore DATE_AND_TIME nelle variabili anno, mese, giorno, ora, minuti, secondi. La funzione restituisce FALSE in caso di errori. |
SPLIT_LDT | Divide operatore LDATE_AND_TIME nelle variabili anno, mese, giorno, ora, minuti, secondi, millisecondi. La funzione restituisce FALSE in caso di errori. |
SPLIT_TOD | Divide operatore TIME_OF_DAY nelle variabili ora, minuti, secondi, millisecondi. La funzione restituisce FALSE in caso di errori. |
SPLIT_LTOD | Divide operatore LTIME_OF_DAY nelle variabili ora, minuti, secondi, millisecondi, microsecondi, nanosecondi. La funzione restituisce FALSE in caso di errori. |
Funzioni concatenazione Data/Ora
Apposite funzioni di concatenazione permettono di unire le variabili in operatori Data/Ora.
Funzione | Descrizione |
---|---|
CONCAT_DATE | Concatena variabili anno, mese, giorno nell’operatore DATE. |
CONCAT_LDATE | Concatena variabili anno, mese, giorno nell’operatore LDATE. |
CONCAT_DT | Concatena variabili anno, mese, giorno, ora, minuti, secondi nell’operatore DATE_AND_TIME. |
CONCAT_LDT | Concatena variabili anno, mese, giorno, ora, minuti, secondi, millisecondi, microsecondi, nanosecondi nell’operatore LDATE_AND_TIME. |
CONCAT_TOD | Concatena variabili ora, minuti, secondi, millisecondi, nell’operatore TIME_OF_DAY. |
CONCAT_LTOD | Concatena variabili ora, minuti, secondi, millisecondi, microsecondi, nanosecondi nell’operatore LTIME_OF_DAY. |
CONCAT_DATE_TOD | Concatena variabili DATE e TIME_OF_DAY, nell’operatore DATE_AND_TIME. |
CONCAT_DATE_LTOD | Concatena variabili DATE e LTIME_OF_DAY, nell’operatore LDATE_AND_TIME. |
Esempi
Come utilizzare gli esempi.
Nel seguente esempio sono eseguite alcune operazioni su Data/Ora.
LogicLab (Ptp116, ST_DateTimeOperators)
PROGRAM ST_DateTimeOperators
VAR
i : UDINT; (* Auxiliary variable *)
DayOfWeek : SINT; (* Day of week *)
BDTime : ARRAY[0..1] OF DATE_AND_TIME; (* Date and time buffer *)
BDate : ARRAY[0..2] OF DATE; (* Date buffer *)
LBDTime : ARRAY[0..1] OF LDATE_AND_TIME; (* Long date and time buffer *)
LBDate : ARRAY[0..2] OF LDATE; (* Long date buffer *)
LDTime : ARRAY[0..3] OF LDATETIMESTRUCT; (* Date/Time struct *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_DateTimeOperators"
// *****************************************************************************
// Use of date operators.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// 32 BITS DATE OPERATORS
// -------------------------------------------------------------------------
// Range from 1970-01-01 to 2038-01-19
// Some operations on DATE variables.
BDTime[0]:=TO_DATE_AND_TIME(SysDateGetS()); //Date and time buffer
BDate[0]:=TO_DATE(BDTime[0]); //Date buffer
BDate[1]:=CONCAT_DATE(2020, 6, 17); //Define date
// Split and concat DATE to year, month and day.
i:=SPLIT_DATE(BDate[0], ADR(LDTime[0].Year), ADR(LDTime[0].Month), ADR(LDTime[0].Day));
BDate[2]:=CONCAT_DATE(LDTime[0].Year, LDTime[0].Month, LDTime[0].Day);
// Split and concat DATETIME to year, month, day, hours, minutes and seconds.
i:=SPLIT_DT(BDTime[0], ADR(LDTime[1].Year), ADR(LDTime[1].Month), ADR(LDTime[1].Day), ADR(LDTime[1].Hours), ADR(LDTime[1].Minutes), ADR(LDTime[1].Seconds));
BDTime[1]:=CONCAT_DT(LDTime[1].Year, LDTime[1].Month, LDTime[1].Day, LDTime[1].Hours, LDTime[1].Minutes, LDTime[1].Seconds);
// Get the day of week in a range from 0 (Sunday) to 6 (Saturday).
DayOfWeek:=DAY_OF_WEEK(BDate[0]);
// -------------------------------------------------------------------------
// 64 BITS DATE OPERATORS
// -------------------------------------------------------------------------
// Range from 1970-01-01-00:00:00 to 2262-04-11-23:47:16.854
// Some operations on DATE variables.
LBDTime[0]:=TO_LDATE_AND_TIME(SysDateGetNs()); //Long date and time buffer
LBDate[0]:=TO_LDATE(LBDTime[0]); //Long date buffer
LBDate[1]:=CONCAT_LDATE(2020, 6, 17); //Define date
// Split and concat LDATE to year, month and day.
i:=SPLIT_DATE(LBDate[0], ADR(LDTime[2].Year), ADR(LDTime[2].Month), ADR(LDTime[2].Day));
LBDate[2]:=CONCAT_LDATE(LDTime[2].Year, LDTime[2].Month, LDTime[2].Day);
// Split and concat DATETIME to year, month, day, hours, minutes and seconds.
i:=SPLIT_LDT(LBDTime[0], ADR(LDTime[3].Year), ADR(LDTime[3].Month), ADR(LDTime[3].Day), ADR(LDTime[3].Hours), ADR(LDTime[3].Minutes), ADR(LDTime[3].Seconds), ADR(LDTime[3].Milliseconds), ADR(LDTime[3].Microseconds), ADR(LDTime[3].Nanoseconds));
LBDTime[1]:=CONCAT_LDT(LDTime[3].Year, LDTime[3].Month, LDTime[3].Day, LDTime[3].Hours, LDTime[3].Minutes, LDTime[3].Seconds, LDTime[3].Milliseconds, LDTime[3].Microseconds, LDTime[3].Nanoseconds);
// Get the day of week in a range from 0 (Sunday) to 6 (Saturday).
DayOfWeek:=DAY_OF_WEEK(LBDate[0]);
// [End of file]