lib/rtc.txt
author Manuele Conti <conti.ma@alice.it>
Tue, 28 Aug 2012 22:37:26 +0200
changeset 642 2ca07e3b08d6
parent 400 093b72cd2ac3
child 885 b2604fc6d25c
permissions -rw-r--r--
Replace test bison version without bash regular expression.
Tested on OS X 10.8 - Linux Ubuntu 12.4 - MinGW.
(****************************************************************

              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