s7-SCL-scripts/Times-scripts/FC_GetSetLocalTime.txt

67 lines
2.2 KiB
Plaintext
Raw Permalink Normal View History

FUNCTION "FC_GetSetLocalTime" : Int
TITLE = 'Read / Write / Set Local Time (DTL)'
VERSION : 1.1
// ────────────────────────────────────────────────────────────────
// Purpose:
// - Read current local time (RD_LOC_T)
// - Write new local date/time (WR_LOC_T)
// Call examples:
// Read: xWrite := FALSE; RET_VAL := FC_GetSetLocalTime(xWrite:=FALSE, dtLocal=>CurrentTime);
// Write: xWrite := TRUE; RET_VAL := FC_GetSetLocalTime(xWrite:=TRUE, dtLocal:=NewTime);
// ────────────────────────────────────────────────────────────────
VAR_INPUT
xWrite : BOOL; // FALSE = read only TRUE = write new time
dtLocal : DTL; // IN: new local time when xWrite=TRUE
// OUT: current local time when xWrite=FALSE
END_VAR
VAR_OUTPUT
xDone : BOOL; // TRUE = operation finished (no error)
xError : BOOL; // TRUE = failed
wStatus : WORD; // Detailed status / error code
END_VAR
VAR_TEMP
ret : Int;
END_VAR
BEGIN
xDone := FALSE;
xError := FALSE;
wStatus := 16#0000;
ret := 0;
IF xWrite THEN
// ─── WRITE new local time ─────────────────────────────────────
WR_LOC_T(
LOCTIME := dtLocal, // Desired local date/time
RET_VAL => ret,
STATUS => wStatus
);
IF ret = 0 THEN
xDone := TRUE;
ELSE
xError := TRUE;
END_IF;
ELSE
// ─── READ current local time ──────────────────────────────────
RD_LOC_T(
RET_VAL => ret,
STATUS => wStatus,
LOCTIME => dtLocal // Current local time returned here
);
IF ret = 0 THEN
xDone := TRUE;
ELSE
xError := TRUE;
END_IF;
END_IF;
"FC_GetSetLocalTime" := ret; // Usually 0 = OK, positive = warning, negative = error
END_FUNCTION