diff -r 8c6823fee086 -r fa43fed1084c lib/rtc.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/rtc.txt Sat Mar 31 15:34:33 2012 +0100 @@ -0,0 +1,51 @@ +(**************************************************************** + + RTC - Real-time clock + +Q is a copy of IN. + +When IN = FALSE, CDT is the current date and time as set by the +PLC driver. + +When IN changes from FALSE to TRUE, PDT is stored. As long as IN is +TRUE, CDT is equal to PDT + the amount of time since PDT was loaded. + +****************************************************************) + +FUNCTION_BLOCK RTC + VAR_INPUT + IN : BOOL; (* 0 - current time, 1 - load time from +PDT *) + PDT : DT; (* Preset datetime *) + END_VAR + VAR_OUTPUT + Q : BOOL := FALSE; (* Copy of IN *) + CDT : DT; (* Datetime, current or relative to PDT *) + END_VAR + + VAR + PREV_IN : BOOL := FALSE; + OFFSET : TIME; + CURRENT_TIME : DT; + END_VAR + + {__SET_VAR(data__->,CURRENT_TIME,__CURRENT_TIME)} + + IF IN + THEN + IF NOT PREV_IN + THEN + OFFSET := PDT - CURRENT_TIME; + END_IF; + + (* PDT + time since PDT was loaded *) + CDT := CURRENT_TIME + OFFSET; + ELSE + CDT := CURRENT_TIME; + END_IF; + + Q := IN; + PREV_IN := IN; + +END_FUNCTION_BLOCK +