lib/counter.txt
changeset 290 013eab46aebb
parent 276 1679f514f38a
equal deleted inserted replaced
289:02d0c5844a82 290:013eab46aebb
    23 (*                *)
    23 (*                *)
    24 (*    C  T  U     *)
    24 (*    C  T  U     *)
    25 (*                *)
    25 (*                *)
    26 (******************)
    26 (******************)
    27 
    27 
       
    28 
    28 FUNCTION_BLOCK CTU
    29 FUNCTION_BLOCK CTU
    29   VAR_INPUT
    30   VAR_INPUT
    30     CU : BOOL;
    31     CU : BOOL;
    31     R : BOOL;
    32     R : BOOL;
    32     PV : INT;
    33     PV : INT;
    33   END_VAR
    34   END_VAR
    34   VAR_OUTPUT
    35   VAR_OUTPUT
    35     Q : BOOL;
    36     Q : BOOL;
    36     CV : INT;
    37     CV : INT;
    37   END_VAR
    38   END_VAR
    38   IF R THEN CV := 0 ;
    39   VAR
    39   ELSIF CU AND (CV < PV)
    40     CU_T: R_TRIG;
       
    41   END_VAR
       
    42 
       
    43   CU_T(CU);
       
    44   IF R THEN CV := 0 ;
       
    45   ELSIF CU_T.Q AND (CV < PV)
    40        THEN CV := CV+1;
    46        THEN CV := CV+1;
    41   END_IF ;
    47   END_IF ;
    42   Q := (CV >= PV) ;
    48   Q := (CV >= PV) ;
    43 END_FUNCTION_BLOCK
    49 END_FUNCTION_BLOCK
    44 
    50 
    51   END_VAR
    57   END_VAR
    52   VAR_OUTPUT
    58   VAR_OUTPUT
    53     Q : BOOL;
    59     Q : BOOL;
    54     CV : DINT;
    60     CV : DINT;
    55   END_VAR
    61   END_VAR
    56   IF R THEN CV := 0 ;
    62   VAR
    57   ELSIF CU AND (CV < PV)
    63     CU_T: R_TRIG;
       
    64   END_VAR
       
    65 
       
    66   CU_T(CU);
       
    67   IF R THEN CV := 0 ;
       
    68   ELSIF CU_T.Q AND (CV < PV)
    58        THEN CV := CV+1;
    69        THEN CV := CV+1;
    59   END_IF ;
    70   END_IF ;
    60   Q := (CV >= PV) ;
    71   Q := (CV >= PV) ;
    61 END_FUNCTION_BLOCK
    72 END_FUNCTION_BLOCK
    62 
    73 
    69   END_VAR
    80   END_VAR
    70   VAR_OUTPUT
    81   VAR_OUTPUT
    71     Q : BOOL;
    82     Q : BOOL;
    72     CV : LINT;
    83     CV : LINT;
    73   END_VAR
    84   END_VAR
    74   IF R THEN CV := 0 ;
    85   VAR
    75   ELSIF CU AND (CV < PV)
    86     CU_T: R_TRIG;
       
    87   END_VAR
       
    88 
       
    89   CU_T(CU);
       
    90   IF R THEN CV := 0 ;
       
    91   ELSIF CU_T.Q AND (CV < PV)
    76        THEN CV := CV+1;
    92        THEN CV := CV+1;
    77   END_IF ;
    93   END_IF ;
    78   Q := (CV >= PV) ;
    94   Q := (CV >= PV) ;
    79 END_FUNCTION_BLOCK
    95 END_FUNCTION_BLOCK
    80 
    96 
    87   END_VAR
   103   END_VAR
    88   VAR_OUTPUT
   104   VAR_OUTPUT
    89     Q : BOOL;
   105     Q : BOOL;
    90     CV : UDINT;
   106     CV : UDINT;
    91   END_VAR
   107   END_VAR
    92   IF R THEN CV := 0 ;
   108   VAR
    93   ELSIF CU AND (CV < PV)
   109     CU_T: R_TRIG;
       
   110   END_VAR
       
   111 
       
   112   CU_T(CU);
       
   113   IF R THEN CV := 0 ;
       
   114   ELSIF CU_T.Q AND (CV < PV)
    94        THEN CV := CV+1;
   115        THEN CV := CV+1;
    95   END_IF ;
   116   END_IF ;
    96   Q := (CV >= PV) ;
   117   Q := (CV >= PV) ;
    97 END_FUNCTION_BLOCK
   118 END_FUNCTION_BLOCK
    98 
   119 
   105   END_VAR
   126   END_VAR
   106   VAR_OUTPUT
   127   VAR_OUTPUT
   107     Q : BOOL;
   128     Q : BOOL;
   108     CV : ULINT;
   129     CV : ULINT;
   109   END_VAR
   130   END_VAR
   110   IF R THEN CV := 0 ;
   131   VAR
   111   ELSIF CU AND (CV < PV)
   132     CU_T: R_TRIG;
       
   133   END_VAR
       
   134 
       
   135   CU_T(CU);
       
   136   IF R THEN CV := 0 ;
       
   137   ELSIF CU_T.Q AND (CV < PV)
   112        THEN CV := CV+1;
   138        THEN CV := CV+1;
   113   END_IF ;
   139   END_IF ;
   114   Q := (CV >= PV) ;
   140   Q := (CV >= PV) ;
   115 END_FUNCTION_BLOCK
   141 END_FUNCTION_BLOCK
   116 
   142 
   135   END_VAR
   161   END_VAR
   136   VAR_OUTPUT
   162   VAR_OUTPUT
   137     Q : BOOL;
   163     Q : BOOL;
   138     CV : INT;
   164     CV : INT;
   139   END_VAR
   165   END_VAR
       
   166   VAR
       
   167     CD_T: R_TRIG;
       
   168   END_VAR
       
   169 
       
   170   CD_T(CD);
   140   IF LD THEN CV := PV ;
   171   IF LD THEN CV := PV ;
   141   ELSIF CD AND (CV > 0)
   172   ELSIF CD_T.Q AND (CV > 0)
   142       THEN CV := CV-1;
   173       THEN CV := CV-1;
   143   END_IF ;
   174   END_IF ;
   144   Q := (CV <= 0) ;
   175   Q := (CV <= 0) ;
   145 END_FUNCTION_BLOCK
   176 END_FUNCTION_BLOCK
   146 
   177 
   153   END_VAR
   184   END_VAR
   154   VAR_OUTPUT
   185   VAR_OUTPUT
   155     Q : BOOL;
   186     Q : BOOL;
   156     CV : DINT;
   187     CV : DINT;
   157   END_VAR
   188   END_VAR
       
   189   VAR
       
   190     CD_T: R_TRIG;
       
   191   END_VAR
       
   192 
       
   193   CD_T(CD);
   158   IF LD THEN CV := PV ;
   194   IF LD THEN CV := PV ;
   159   ELSIF CD AND (CV > 0)
   195   ELSIF CD_T.Q AND (CV > 0)
   160       THEN CV := CV-1;
   196       THEN CV := CV-1;
   161   END_IF ;
   197   END_IF ;
   162   Q := (CV <= 0) ;
   198   Q := (CV <= 0) ;
   163 END_FUNCTION_BLOCK
   199 END_FUNCTION_BLOCK
   164 
   200 
   171   END_VAR
   207   END_VAR
   172   VAR_OUTPUT
   208   VAR_OUTPUT
   173     Q : BOOL;
   209     Q : BOOL;
   174     CV : LINT;
   210     CV : LINT;
   175   END_VAR
   211   END_VAR
       
   212   VAR
       
   213     CD_T: R_TRIG;
       
   214   END_VAR
       
   215 
       
   216   CD_T(CD);
   176   IF LD THEN CV := PV ;
   217   IF LD THEN CV := PV ;
   177   ELSIF CD AND (CV > 0)
   218   ELSIF CD_T.Q AND (CV > 0)
   178       THEN CV := CV-1;
   219       THEN CV := CV-1;
   179   END_IF ;
   220   END_IF ;
   180   Q := (CV <= 0) ;
   221   Q := (CV <= 0) ;
   181 END_FUNCTION_BLOCK
   222 END_FUNCTION_BLOCK
   182 
   223 
   189   END_VAR
   230   END_VAR
   190   VAR_OUTPUT
   231   VAR_OUTPUT
   191     Q : BOOL;
   232     Q : BOOL;
   192     CV : UDINT;
   233     CV : UDINT;
   193   END_VAR
   234   END_VAR
       
   235   VAR
       
   236     CD_T: R_TRIG;
       
   237   END_VAR
       
   238 
       
   239   CD_T(CD);
   194   IF LD THEN CV := PV ;
   240   IF LD THEN CV := PV ;
   195   ELSIF CD AND (CV > 0)
   241   ELSIF CD_T.Q AND (CV > 0)
   196       THEN CV := CV-1;
   242       THEN CV := CV-1;
   197   END_IF ;
   243   END_IF ;
   198   Q := (CV <= 0) ;
   244   Q := (CV <= 0) ;
   199 END_FUNCTION_BLOCK
   245 END_FUNCTION_BLOCK
   200 
   246 
   207   END_VAR
   253   END_VAR
   208   VAR_OUTPUT
   254   VAR_OUTPUT
   209     Q : BOOL;
   255     Q : BOOL;
   210     CV : ULINT;
   256     CV : ULINT;
   211   END_VAR
   257   END_VAR
       
   258   VAR
       
   259     CD_T: R_TRIG;
       
   260   END_VAR
       
   261 
       
   262   CD_T(CD);
   212   IF LD THEN CV := PV ;
   263   IF LD THEN CV := PV ;
   213   ELSIF CD AND (CV > 0)
   264   ELSIF CD_T.Q AND (CV > 0)
   214       THEN CV := CV-1;
   265       THEN CV := CV-1;
   215   END_IF ;
   266   END_IF ;
   216   Q := (CV <= 0) ;
   267   Q := (CV <= 0) ;
   217 END_FUNCTION_BLOCK
   268 END_FUNCTION_BLOCK
   218 
   269 
   235   VAR_OUTPUT
   286   VAR_OUTPUT
   236     QU : BOOL;
   287     QU : BOOL;
   237     QD : BOOL;
   288     QD : BOOL;
   238     CV : INT;
   289     CV : INT;
   239   END_VAR
   290   END_VAR
       
   291   VAR
       
   292     CD_T: R_TRIG;
       
   293     CU_T: R_TRIG;
       
   294   END_VAR
       
   295 
       
   296   CD_T(CD);
       
   297   CU_T(CU);
       
   298 
   240   IF R THEN CV := 0 ;
   299   IF R THEN CV := 0 ;
   241   ELSIF LD THEN CV := PV ;
   300   ELSIF LD THEN CV := PV ;
   242   ELSE
   301   ELSE
   243     IF NOT (CU AND CD) THEN
   302     IF NOT (CU_T.Q AND CD_T.Q) THEN
   244       IF CU AND (CV < PV)
   303       IF CU_T.Q AND (CV < PV)
   245       THEN CV := CV+1;
   304       THEN CV := CV+1;
   246       ELSIF CD AND (CV > 0)
   305       ELSIF CD_T.Q AND (CV > 0)
   247       THEN CV := CV-1;
   306       THEN CV := CV-1;
   248       END_IF;
   307       END_IF;
   249     END_IF;
   308     END_IF;
   250   END_IF ;
   309   END_IF ;
   251   QU := (CV >= PV) ;
   310   QU := (CV >= PV) ;
   264   VAR_OUTPUT
   323   VAR_OUTPUT
   265     QU : BOOL;
   324     QU : BOOL;
   266     QD : BOOL;
   325     QD : BOOL;
   267     CV : DINT;
   326     CV : DINT;
   268   END_VAR
   327   END_VAR
       
   328   VAR
       
   329     CD_T: R_TRIG;
       
   330     CU_T: R_TRIG;
       
   331   END_VAR
       
   332 
       
   333   CD_T(CD);
       
   334   CU_T(CU);
       
   335 
   269   IF R THEN CV := 0 ;
   336   IF R THEN CV := 0 ;
   270   ELSIF LD THEN CV := PV ;
   337   ELSIF LD THEN CV := PV ;
   271   ELSE
   338   ELSE
   272     IF NOT (CU AND CD) THEN
   339     IF NOT (CU_T.Q AND CD_T.Q) THEN
   273       IF CU AND (CV < PV)
   340       IF CU_T.Q AND (CV < PV)
   274       THEN CV := CV+1;
   341       THEN CV := CV+1;
   275       ELSIF CD AND (CV > 0)
   342       ELSIF CD_T.Q AND (CV > 0)
   276       THEN CV := CV-1;
   343       THEN CV := CV-1;
   277       END_IF;
   344       END_IF;
   278     END_IF;
   345     END_IF;
   279   END_IF ;
   346   END_IF ;
   280   QU := (CV >= PV) ;
   347   QU := (CV >= PV) ;
   293   VAR_OUTPUT
   360   VAR_OUTPUT
   294     QU : BOOL;
   361     QU : BOOL;
   295     QD : BOOL;
   362     QD : BOOL;
   296     CV : LINT;
   363     CV : LINT;
   297   END_VAR
   364   END_VAR
       
   365   VAR
       
   366     CD_T: R_TRIG;
       
   367     CU_T: R_TRIG;
       
   368   END_VAR
       
   369 
       
   370   CD_T(CD);
       
   371   CU_T(CU);
       
   372 
   298   IF R THEN CV := 0 ;
   373   IF R THEN CV := 0 ;
   299   ELSIF LD THEN CV := PV ;
   374   ELSIF LD THEN CV := PV ;
   300   ELSE
   375   ELSE
   301     IF NOT (CU AND CD) THEN
   376     IF NOT (CU_T.Q AND CD_T.Q) THEN
   302       IF CU AND (CV < PV)
   377       IF CU_T.Q AND (CV < PV)
   303       THEN CV := CV+1;
   378       THEN CV := CV+1;
   304       ELSIF CD AND (CV > 0)
   379       ELSIF CD_T.Q AND (CV > 0)
   305       THEN CV := CV-1;
   380       THEN CV := CV-1;
   306       END_IF;
   381       END_IF;
   307     END_IF;
   382     END_IF;
   308   END_IF ;
   383   END_IF ;
   309   QU := (CV >= PV) ;
   384   QU := (CV >= PV) ;
   322   VAR_OUTPUT
   397   VAR_OUTPUT
   323     QU : BOOL;
   398     QU : BOOL;
   324     QD : BOOL;
   399     QD : BOOL;
   325     CV : UDINT;
   400     CV : UDINT;
   326   END_VAR
   401   END_VAR
       
   402   VAR
       
   403     CD_T: R_TRIG;
       
   404     CU_T: R_TRIG;
       
   405   END_VAR
       
   406 
       
   407   CD_T(CD);
       
   408   CU_T(CU);
       
   409 
   327   IF R THEN CV := 0 ;
   410   IF R THEN CV := 0 ;
   328   ELSIF LD THEN CV := PV ;
   411   ELSIF LD THEN CV := PV ;
   329   ELSE
   412   ELSE
   330     IF NOT (CU AND CD) THEN
   413     IF NOT (CU_T.Q AND CD_T.Q) THEN
   331       IF CU AND (CV < PV)
   414       IF CU_T.Q AND (CV < PV)
   332       THEN CV := CV+1;
   415       THEN CV := CV+1;
   333       ELSIF CD AND (CV > 0)
   416       ELSIF CD_T.Q AND (CV > 0)
   334       THEN CV := CV-1;
   417       THEN CV := CV-1;
   335       END_IF;
   418       END_IF;
   336     END_IF;
   419     END_IF;
   337   END_IF ;
   420   END_IF ;
   338   QU := (CV >= PV) ;
   421   QU := (CV >= PV) ;
   351   VAR_OUTPUT
   434   VAR_OUTPUT
   352     QU : BOOL;
   435     QU : BOOL;
   353     QD : BOOL;
   436     QD : BOOL;
   354     CV : ULINT;
   437     CV : ULINT;
   355   END_VAR
   438   END_VAR
       
   439   VAR
       
   440     CD_T: R_TRIG;
       
   441     CU_T: R_TRIG;
       
   442   END_VAR
       
   443 
       
   444   CD_T(CD);
       
   445   CU_T(CU);
       
   446 
   356   IF R THEN CV := 0 ;
   447   IF R THEN CV := 0 ;
   357   ELSIF LD THEN CV := PV ;
   448   ELSIF LD THEN CV := PV ;
   358   ELSE
   449   ELSE
   359     IF NOT (CU AND CD) THEN
   450     IF NOT (CU_T.Q AND CD_T.Q) THEN
   360       IF CU AND (CV < PV)
   451       IF CU_T.Q AND (CV < PV)
   361       THEN CV := CV+1;
   452       THEN CV := CV+1;
   362       ELSIF CD AND (CV > 0)
   453       ELSIF CD_T.Q AND (CV > 0)
   363       THEN CV := CV-1;
   454       THEN CV := CV-1;
   364       END_IF;
   455       END_IF;
   365     END_IF;
   456     END_IF;
   366   END_IF ;
   457   END_IF ;
   367   QU := (CV >= PV) ;
   458   QU := (CV >= PV) ;