lib/counter.txt
changeset 276 1679f514f38a
parent 257 90782e241346
child 290 013eab46aebb
equal deleted inserted replaced
275:af3d0e3ac65d 276:1679f514f38a
    16  * Counter function blocks
    16  * Counter function blocks
    17  * -----------------------
    17  * -----------------------
    18  *)
    18  *)
    19 
    19 
    20 
    20 
       
    21 
       
    22 (******************)
       
    23 (*                *)
       
    24 (*    C  T  U     *)
       
    25 (*                *)
       
    26 (******************)
       
    27 
    21 FUNCTION_BLOCK CTU
    28 FUNCTION_BLOCK CTU
    22   VAR_INPUT
    29   VAR_INPUT
    23     CU : BOOL;
    30     CU : BOOL;
    24     R : BOOL;
    31     R : BOOL;
    25     PV : INT;
    32     PV : INT;
    26   END_VAR
    33   END_VAR
    27   VAR_OUTPUT
    34   VAR_OUTPUT
    28     Q : BOOL;
    35     Q : BOOL;
    29     CV : INT;
    36     CV : INT;
    30   END_VAR
    37   END_VAR
    31  
    38   IF R THEN CV := 0 ;
    32   VAR RRR : REAL; END_VAR
    39   ELSIF CU AND (CV < PV)
    33   RRR := 9.9;
    40        THEN CV := CV+1;
    34 
    41   END_IF ;
    35   IF R THEN CV := 0 ;
    42   Q := (CV >= PV) ;
    36   ELSIF CU AND (CV < PV)
    43 END_FUNCTION_BLOCK
    37        THEN CV := CV+1;
    44 
    38   END_IF ;
    45 
    39   Q := (CV >= PV) ;
    46 FUNCTION_BLOCK CTU_DINT
    40 END_FUNCTION_BLOCK
    47   VAR_INPUT
       
    48     CU : BOOL;
       
    49     R : BOOL;
       
    50     PV : DINT;
       
    51   END_VAR
       
    52   VAR_OUTPUT
       
    53     Q : BOOL;
       
    54     CV : DINT;
       
    55   END_VAR
       
    56   IF R THEN CV := 0 ;
       
    57   ELSIF CU AND (CV < PV)
       
    58        THEN CV := CV+1;
       
    59   END_IF ;
       
    60   Q := (CV >= PV) ;
       
    61 END_FUNCTION_BLOCK
       
    62 
       
    63 
       
    64 FUNCTION_BLOCK CTU_LINT
       
    65   VAR_INPUT
       
    66     CU : BOOL;
       
    67     R : BOOL;
       
    68     PV : LINT;
       
    69   END_VAR
       
    70   VAR_OUTPUT
       
    71     Q : BOOL;
       
    72     CV : LINT;
       
    73   END_VAR
       
    74   IF R THEN CV := 0 ;
       
    75   ELSIF CU AND (CV < PV)
       
    76        THEN CV := CV+1;
       
    77   END_IF ;
       
    78   Q := (CV >= PV) ;
       
    79 END_FUNCTION_BLOCK
       
    80 
       
    81 
       
    82 FUNCTION_BLOCK CTU_UDINT
       
    83   VAR_INPUT
       
    84     CU : BOOL;
       
    85     R : BOOL;
       
    86     PV : UDINT;
       
    87   END_VAR
       
    88   VAR_OUTPUT
       
    89     Q : BOOL;
       
    90     CV : UDINT;
       
    91   END_VAR
       
    92   IF R THEN CV := 0 ;
       
    93   ELSIF CU AND (CV < PV)
       
    94        THEN CV := CV+1;
       
    95   END_IF ;
       
    96   Q := (CV >= PV) ;
       
    97 END_FUNCTION_BLOCK
       
    98 
       
    99 
       
   100 FUNCTION_BLOCK CTU_ULINT
       
   101   VAR_INPUT
       
   102     CU : BOOL;
       
   103     R : BOOL;
       
   104     PV : ULINT;
       
   105   END_VAR
       
   106   VAR_OUTPUT
       
   107     Q : BOOL;
       
   108     CV : ULINT;
       
   109   END_VAR
       
   110   IF R THEN CV := 0 ;
       
   111   ELSIF CU AND (CV < PV)
       
   112        THEN CV := CV+1;
       
   113   END_IF ;
       
   114   Q := (CV >= PV) ;
       
   115 END_FUNCTION_BLOCK
       
   116 
       
   117 
       
   118 
       
   119 
       
   120 
       
   121 
       
   122 
       
   123 (******************)
       
   124 (*                *)
       
   125 (*    C  T  D     *)
       
   126 (*                *)
       
   127 (******************)
    41 
   128 
    42 
   129 
    43 FUNCTION_BLOCK CTD
   130 FUNCTION_BLOCK CTD
    44   VAR_INPUT
   131   VAR_INPUT
    45     CD : BOOL;
   132     CD : BOOL;
    56   END_IF ;
   143   END_IF ;
    57   Q := (CV <= 0) ;
   144   Q := (CV <= 0) ;
    58 END_FUNCTION_BLOCK
   145 END_FUNCTION_BLOCK
    59 
   146 
    60 
   147 
       
   148 FUNCTION_BLOCK CTD_DINT
       
   149   VAR_INPUT
       
   150     CD : BOOL;
       
   151     LD : BOOL;
       
   152     PV : DINT;
       
   153   END_VAR
       
   154   VAR_OUTPUT
       
   155     Q : BOOL;
       
   156     CV : DINT;
       
   157   END_VAR
       
   158   IF LD THEN CV := PV ;
       
   159   ELSIF CD AND (CV > 0)
       
   160       THEN CV := CV-1;
       
   161   END_IF ;
       
   162   Q := (CV <= 0) ;
       
   163 END_FUNCTION_BLOCK
       
   164 
       
   165 
       
   166 FUNCTION_BLOCK CTD_LINT
       
   167   VAR_INPUT
       
   168     CD : BOOL;
       
   169     LD : BOOL;
       
   170     PV : LINT;
       
   171   END_VAR
       
   172   VAR_OUTPUT
       
   173     Q : BOOL;
       
   174     CV : LINT;
       
   175   END_VAR
       
   176   IF LD THEN CV := PV ;
       
   177   ELSIF CD AND (CV > 0)
       
   178       THEN CV := CV-1;
       
   179   END_IF ;
       
   180   Q := (CV <= 0) ;
       
   181 END_FUNCTION_BLOCK
       
   182 
       
   183 
       
   184 FUNCTION_BLOCK CTD_UDINT
       
   185   VAR_INPUT
       
   186     CD : BOOL;
       
   187     LD : BOOL;
       
   188     PV : UDINT;
       
   189   END_VAR
       
   190   VAR_OUTPUT
       
   191     Q : BOOL;
       
   192     CV : UDINT;
       
   193   END_VAR
       
   194   IF LD THEN CV := PV ;
       
   195   ELSIF CD AND (CV > 0)
       
   196       THEN CV := CV-1;
       
   197   END_IF ;
       
   198   Q := (CV <= 0) ;
       
   199 END_FUNCTION_BLOCK
       
   200 
       
   201 
       
   202 FUNCTION_BLOCK CTD_ULINT
       
   203   VAR_INPUT
       
   204     CD : BOOL;
       
   205     LD : BOOL;
       
   206     PV : ULINT;
       
   207   END_VAR
       
   208   VAR_OUTPUT
       
   209     Q : BOOL;
       
   210     CV : ULINT;
       
   211   END_VAR
       
   212   IF LD THEN CV := PV ;
       
   213   ELSIF CD AND (CV > 0)
       
   214       THEN CV := CV-1;
       
   215   END_IF ;
       
   216   Q := (CV <= 0) ;
       
   217 END_FUNCTION_BLOCK
       
   218 
       
   219 
       
   220 (********************)
       
   221 (*                  *)
       
   222 (*    C  T  U D     *)
       
   223 (*                  *)
       
   224 (********************)
       
   225 
       
   226 
    61 FUNCTION_BLOCK CTUD
   227 FUNCTION_BLOCK CTUD
    62   VAR_INPUT
   228   VAR_INPUT
    63     CU : BOOL;
   229     CU : BOOL;
    64     CD : BOOL;
   230     CD : BOOL;
    65     R  : BOOL;
   231     R  : BOOL;
    84   END_IF ;
   250   END_IF ;
    85   QU := (CV >= PV) ;
   251   QU := (CV >= PV) ;
    86   QD := (CV <= 0) ;
   252   QD := (CV <= 0) ;
    87 END_FUNCTION_BLOCK
   253 END_FUNCTION_BLOCK
    88 
   254 
       
   255 
       
   256 FUNCTION_BLOCK CTUD_DINT
       
   257   VAR_INPUT
       
   258     CU : BOOL;
       
   259     CD : BOOL;
       
   260     R  : BOOL;
       
   261     LD : BOOL;
       
   262     PV : DINT;
       
   263   END_VAR
       
   264   VAR_OUTPUT
       
   265     QU : BOOL;
       
   266     QD : BOOL;
       
   267     CV : DINT;
       
   268   END_VAR
       
   269   IF R THEN CV := 0 ;
       
   270   ELSIF LD THEN CV := PV ;
       
   271   ELSE
       
   272     IF NOT (CU AND CD) THEN
       
   273       IF CU AND (CV < PV)
       
   274       THEN CV := CV+1;
       
   275       ELSIF CD AND (CV > 0)
       
   276       THEN CV := CV-1;
       
   277       END_IF;
       
   278     END_IF;
       
   279   END_IF ;
       
   280   QU := (CV >= PV) ;
       
   281   QD := (CV <= 0) ;
       
   282 END_FUNCTION_BLOCK
       
   283 
       
   284 
       
   285 FUNCTION_BLOCK CTUD_LINT
       
   286   VAR_INPUT
       
   287     CU : BOOL;
       
   288     CD : BOOL;
       
   289     R  : BOOL;
       
   290     LD : BOOL;
       
   291     PV : LINT;
       
   292   END_VAR
       
   293   VAR_OUTPUT
       
   294     QU : BOOL;
       
   295     QD : BOOL;
       
   296     CV : LINT;
       
   297   END_VAR
       
   298   IF R THEN CV := 0 ;
       
   299   ELSIF LD THEN CV := PV ;
       
   300   ELSE
       
   301     IF NOT (CU AND CD) THEN
       
   302       IF CU AND (CV < PV)
       
   303       THEN CV := CV+1;
       
   304       ELSIF CD AND (CV > 0)
       
   305       THEN CV := CV-1;
       
   306       END_IF;
       
   307     END_IF;
       
   308   END_IF ;
       
   309   QU := (CV >= PV) ;
       
   310   QD := (CV <= 0) ;
       
   311 END_FUNCTION_BLOCK
       
   312 
       
   313 
       
   314 FUNCTION_BLOCK CTUD_UDINT
       
   315   VAR_INPUT
       
   316     CU : BOOL;
       
   317     CD : BOOL;
       
   318     R  : BOOL;
       
   319     LD : BOOL;
       
   320     PV : UDINT;
       
   321   END_VAR
       
   322   VAR_OUTPUT
       
   323     QU : BOOL;
       
   324     QD : BOOL;
       
   325     CV : UDINT;
       
   326   END_VAR
       
   327   IF R THEN CV := 0 ;
       
   328   ELSIF LD THEN CV := PV ;
       
   329   ELSE
       
   330     IF NOT (CU AND CD) THEN
       
   331       IF CU AND (CV < PV)
       
   332       THEN CV := CV+1;
       
   333       ELSIF CD AND (CV > 0)
       
   334       THEN CV := CV-1;
       
   335       END_IF;
       
   336     END_IF;
       
   337   END_IF ;
       
   338   QU := (CV >= PV) ;
       
   339   QD := (CV <= 0) ;
       
   340 END_FUNCTION_BLOCK
       
   341 
       
   342 
       
   343 FUNCTION_BLOCK CTUD_ULINT
       
   344   VAR_INPUT
       
   345     CU : BOOL;
       
   346     CD : BOOL;
       
   347     R  : BOOL;
       
   348     LD : BOOL;
       
   349     PV : ULINT;
       
   350   END_VAR
       
   351   VAR_OUTPUT
       
   352     QU : BOOL;
       
   353     QD : BOOL;
       
   354     CV : ULINT;
       
   355   END_VAR
       
   356   IF R THEN CV := 0 ;
       
   357   ELSIF LD THEN CV := PV ;
       
   358   ELSE
       
   359     IF NOT (CU AND CD) THEN
       
   360       IF CU AND (CV < PV)
       
   361       THEN CV := CV+1;
       
   362       ELSIF CD AND (CV > 0)
       
   363       THEN CV := CV-1;
       
   364       END_IF;
       
   365     END_IF;
       
   366   END_IF ;
       
   367   QU := (CV >= PV) ;
       
   368   QD := (CV <= 0) ;
       
   369 END_FUNCTION_BLOCK