# ImpulseCounter

## `ImpulseCounter` (FB)

FUNCTION\_BLOCK ImpulseCounter

### Short description

> Counter for input impulses with reset input and adjustable reduction\
> \
> \\

### Representation

<figure><img src="https://2592874069-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR4vCFzt6ixgsqlR3pdR%2Fuploads%2Fgit-blob-99eaad8452c970c6a29f1b96468e60ae9ce7b9ea%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

### Interfaces

#### Inputs

| Name       | Data type | Value range | Initial value | Function      |
| ---------- | --------- | ----------- | ------------- | ------------- |
| *xImpulse* | BOOL      |             |               | Counter input |
| *xReset*   | BOOL      |             | FALSE         | Reset input   |

#### Outputs

| Name                | Data type       | Value range | Initial value | Function                                        |
| ------------------- | --------------- | ----------- | ------------- | ----------------------------------------------- |
| *udiImpulseCounter* | UDINT           |             |               | Impulse counter                                 |
| *udiEnergy*         | UDINT           |             |               | Impulse counter after reduction                 |
| *dtLastImpulse*     | DATE\_AND\_TIME |             |               | Date/time of the end of the last counting pulse |

#### Setpoints / Parameters

| Name                | Data type | Value range | Initial value | Function         |
| ------------------- | --------- | ----------- | ------------- | ---------------- |
| **udiEnergyFactor** | UDINT     |             | 1             | Reduction factor |

### Function description

#### General

This function block is used to count the impulses ( = rising edges ) at the counter input *xImpulse* within the technical limits.\
The counter value is displayed at the output *udiImpulseCounter* \
If the counter value exceeds / reaches *udiImpulseCounter* the threshold value **udiEnergyFactor**, the output *udiEnergy* is incremented.\
Subsequently the output *udiImpulseCounter* is reset to 0.\
\
The outputs *udiImpulseCounter* and **udiEnergy** are reset to 0 as long as a rising edge is detected at the input *xReset* .\
\
At the output *dtLastImpulse* the current date / time is available after each rising edge at the input *xImpulse* .\
At the output *dtLastImpulse* the date / time at the end of the last rising edge is available for all other input states.\
At the output *xImpulse* the initialization value DT#1970-1-1-0.0.0 is output before the first rising edge.\ *dtLastImpulse* Wertebereiche der Ausgänge

> **Valid counter values are within the limits 0 and 4294967295.**\
> **Incrementing the counter value 4294967295 resets the counter value to 0.**\
> **Subsequently the counter value is continuously incremented again.\&#x20;*****udiImpulseCounter*****&#x20;and&#x20;*****udiEnergy***
>
> Reduction factor udiEnergyFactor
>
> **The reduction factor**
>
> is overwritten with the value 1 after each entry of the value 0.\ **udiEnergyFactor** Example - reduction factor
>
> **= 10**\
> \
> **After a rising edge at the input**
>
> *udiImpulseCounter* = 9, **udiEnergy** = 0, **udiEnergyFactor** the counter values change as follows:\
> \
> \&#xNAN; *xImpulse* = 10\\*udiImpulseCounter* = 0, **udiEnergy** = 1, **udiEnergyFactor** DT

### CODESYS

InOut:

| Scope       | Name                | Type    | Initial |
| ----------- | ------------------- | ------- | ------- |
| Input       | `xImpulse`          | `BOOL`  |         |
| Input       | `xReset`            | `BOOL`  | FALSE   |
| Input Const | `udiEnergyFactor`   | `UDINT` |         |
| Output      | `udiImpulseCounter` | `UDINT` |         |
| Output      | `udiEnergy`         | `UDINT` |         |
| Output      | `dtLastImpulse`     | `DT`    |         |
