lib/counter.txt
changeset 0 fb772792efd1
child 176 bef3cc16c064
equal deleted inserted replaced
-1:000000000000 0:fb772792efd1
       
     1 (* Following taken directly from the IEC 61131.3 draft standard *)
       
     2 
       
     3 (*
       
     4  * An IEC 61131-3 IL and ST compiler.
       
     5  *
       
     6  * Based on the
       
     7  * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
       
     8  *
       
     9  *)
       
    10 
       
    11 
       
    12 (*
       
    13  * This is part of the library conatining the functions
       
    14  * and function blocks defined in the standard.
       
    15  *
       
    16  * Counter function blocks
       
    17  * -----------------------
       
    18  *)
       
    19 
       
    20 
       
    21 FUNCTION_BLOCK CTU
       
    22   VAR_INPUT
       
    23     CU : BOOL;
       
    24     R : BOOL;
       
    25     PV : INT;
       
    26   END_VAR
       
    27   VAR_OUTPUT
       
    28     Q : BOOL;
       
    29     CV : INT;
       
    30   END_VAR
       
    31   VAR RETAIN
       
    32     PVmax : INT;
       
    33   END_VAR
       
    34   IF R THEN CV := 0 ;
       
    35   ELSIF CU AND (CV < PVmax)
       
    36        THEN CV := CV+1;
       
    37   END_IF ;
       
    38   Q := (CV >= PV) ;
       
    39 END_FUNCTION_BLOCK
       
    40 
       
    41 
       
    42 FUNCTION_BLOCK CTD
       
    43   VAR_INPUT
       
    44     CD : BOOL;
       
    45     LD : BOOL;
       
    46     PV : INT;
       
    47   END_VAR
       
    48   VAR_OUTPUT
       
    49     Q : BOOL;
       
    50     CV : INT;
       
    51   END_VAR
       
    52   VAR RETAIN
       
    53     PVmin : INT;
       
    54   END_VAR
       
    55   IF LD THEN CV := PV ;
       
    56   ELSIF CD AND (CV > PVmin)
       
    57       THEN CV := CV-1;
       
    58   END_IF ;
       
    59   Q := (CV <= 0) ;
       
    60 END_FUNCTION_BLOCK
       
    61 
       
    62 
       
    63 FUNCTION_BLOCK CTUD
       
    64   VAR_INPUT
       
    65     CU : BOOL;
       
    66     CD : BOOL;
       
    67     R  : BOOL;
       
    68     LD : BOOL;
       
    69     PV : INT;
       
    70   END_VAR
       
    71   VAR_OUTPUT
       
    72     QU : BOOL;
       
    73     QD : BOOL;
       
    74     CV : INT;
       
    75   END_VAR
       
    76   VAR RETAIN
       
    77     PVmax : INT;
       
    78     PVmin : INT;
       
    79   END_VAR
       
    80   IF R THEN CV := 0 ;
       
    81   ELSIF LD THEN CV := PV ;
       
    82   ELSE
       
    83     IF NOT (CU AND CD) THEN
       
    84       IF CU AND (CV < PVmax)
       
    85       THEN CV := CV+1;
       
    86       ELSIF CD AND (CV > PVmin)
       
    87       THEN CV := CV-1;
       
    88       END_IF;
       
    89     END_IF;
       
    90   END_IF ;
       
    91   QU := (CV >= PV) ;
       
    92   QD := (CV <= 0) ;
       
    93 END_FUNCTION_BLOCK
       
    94