Counter function blocks
Counters accumulate rising edges on their count inputs. The base types count
with INT; typed variants (_INT, _DINT, _LINT, _UDINT, _ULINT) widen
the preset PV and current value CV to the named integer type.
CTU — count up
Section titled “CTU — count up”Counts rising edges on CU. Q is TRUE when the count reaches the preset
PV. R resets the count to zero. Typed variants: CTU_INT, CTU_DINT,
CTU_LINT, CTU_UDINT, CTU_ULINT.
| Direction | Name | Type | Meaning |
|---|---|---|---|
| Input | CU | BOOL | Count-up trigger (rising edge) |
| Input | R | BOOL | Reset |
| Input | PV | INT¹ | Preset value |
| Output | Q | BOOL | TRUE when CV ≥ PV |
| Output | CV | INT¹ | Current count |
¹ PV/CV follow the typed variant: DINT for CTU_DINT, LINT for
CTU_LINT, UDINT for CTU_UDINT, ULINT for CTU_ULINT.
FUNCTION_BLOCK CTUVAR_INPUT CU : BOOL; R : BOOL; PV : INT;END_VARVAR_OUTPUT Q : BOOL; CV : INT;END_VAREND_FUNCTION_BLOCKVAR counter : CTU;END_VAR
counter(CU := partDetected, R := resetBtn, PV := 10);batchFull := counter.Q; // TRUE once 10 parts countedcount := counter.CV;CTD — count down
Section titled “CTD — count down”Counts rising edges on CD downward from the preset value. LD loads PV into
CV. Q is TRUE when CV reaches zero. Typed variants: CTD_INT,
CTD_DINT, CTD_LINT, CTD_UDINT, CTD_ULINT.
| Direction | Name | Type | Meaning |
|---|---|---|---|
| Input | CD | BOOL | Count-down trigger (rising edge) |
| Input | LD | BOOL | Load preset into CV |
| Input | PV | INT¹ | Preset value |
| Output | Q | BOOL | TRUE when CV ≤ 0 |
| Output | CV | INT¹ | Current count |
¹ Width follows the typed variant, as for CTU.
FUNCTION_BLOCK CTDVAR_INPUT CD : BOOL; LD : BOOL; PV : INT;END_VARVAR_OUTPUT Q : BOOL; CV : INT;END_VAREND_FUNCTION_BLOCKVAR remaining : CTD;END_VAR
remaining(CD := itemShipped, LD := reload, PV := 20);empty := remaining.Q; // TRUE once CV counts down to 0left := remaining.CV;CTUD — count up/down
Section titled “CTUD — count up/down”Combined up/down counter. Typed variants: CTUD_INT, CTUD_DINT, CTUD_LINT,
CTUD_UDINT, CTUD_ULINT.
| Direction | Name | Type | Meaning |
|---|---|---|---|
| Input | CU | BOOL | Count-up trigger (rising edge) |
| Input | CD | BOOL | Count-down trigger (rising edge) |
| Input | R | BOOL | Reset CV to 0 |
| Input | LD | BOOL | Load PV into CV |
| Input | PV | INT¹ | Preset value |
| Output | QU | BOOL | TRUE when CV ≥ PV |
| Output | QD | BOOL | TRUE when CV ≤ 0 |
| Output | CV | INT¹ | Current count |
¹ Width follows the typed variant, as for CTU.
FUNCTION_BLOCK CTUDVAR_INPUT CU : BOOL; CD : BOOL; R : BOOL; LD : BOOL; PV : INT;END_VARVAR_OUTPUT QU : BOOL; QD : BOOL; CV : INT;END_VAREND_FUNCTION_BLOCKVAR stock : CTUD;END_VAR
stock(CU := incoming, CD := outgoing, R := FALSE, LD := FALSE, PV := 100);level := stock.CV;