diff -r 7f052bd3508a -r ffa2afab2806 lib/rtc.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/rtc.txt Tue Feb 07 20:20:19 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 +