# ImpulseCounter

## `ImpulseCounter` (FB)

FUNCTION\_BLOCK ImpulseCounter

### Kurzbeschreibung

> Zähler für Eingangsimpulse mit Rücksetzeingang und einstellbarer Reduktion

### Darstellung

<figure><img src="https://879424349-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>

### Schnittstellen

#### Eingänge

| Name       | Datentyp | Wertebereich | Initialwert | Funktion        |
| ---------- | -------- | ------------ | ----------- | --------------- |
| *xImpulse* | BOOL     |              |             | Zählereingang   |
| *xReset*   | BOOL     |              | FALSE       | Rücksetzeingang |

#### Ausgänge

| Name                | Datentyp        | Wertebereich | Initialwert | Funktion                                           |
| ------------------- | --------------- | ------------ | ----------- | -------------------------------------------------- |
| *udiImpulseCounter* | UDINT           |              |             | Impulszähler                                       |
| *udiEnergy*         | UDINT           |              |             | Impulszähler nach Reduktion                        |
| *dtLastImpulse*     | DATE\_AND\_TIME |              |             | Datum/-zeitpunkt des Ende des letzten Zählimpulses |

#### Sollwerte / Parameter

| Name                | Datentyp | Wertebereich | Initialwert | Funktion         |
| ------------------- | -------- | ------------ | ----------- | ---------------- |
| **udiEnergyFactor** | UDINT    |              | 1           | Reduktionsfaktor |

### Funktionsbeschreibung

#### Allgemeines

Dieser Funktionsbaustein dient zur Zählung der Impulse (= ansteigende Flanken) am Zähler-Eingang *xImpulse* im Rahmen der technischen Grenzen.\
Der Zählerstand wird am Ausgang *udiImpulseCounter* angezeigt.\
\
Überschreitet / erreicht der Zählerstand *udiImpulseCounter* den Grenzwert **udiEnergyFactor**, so wird der der Ausgang *udiEnergy* inkrementiert.\
Anschließend wird der Ausgang *udiImpulseCounter* auf 0 zurück gesetzt.\
\
Die Ausgänge *udiImpulseCounter* und **udiEnergy** werden auf 0 zurück gesetzt, solange am Eingang *xReset* eine ansteigende Flanke erkannt wird.\
\
Am Ausgang *dtLastImpulse* steht nach jeder ansteigenden Flanke am Eingang *xImpulse* das aktuelle Datum / die aktuelle Uhrzeit zur Verfügung.\
Am Ausgang *dtLastImpulse* steht bei allen anderen Zuständen am Eingang *xImpulse* das Datum / die Uhrzeit am Ende der letzten ansteigenden Flanke zur Verfügung.\
Am Ausgang *dtLastImpulse* wird vor der ersten ansteigenden Flanke der Initialisierungswert DT#1970-1-1-0.0.0 ausgegeben.

> **Wertebereiche der Ausgänge&#x20;*****udiImpulseCounter*****&#x20;und&#x20;*****udiEnergy***
>
> Gültige Zählerstände befinden sich innerhalb der Grenzen 0 und 4294967295.\
> Die Inkrementierung des Zählerstandes 4294967295 setzt den Zählerstand auf 0 zurück.\
> Anschliessend wird der Zählerstand wieder fortlaufend inkrementiert.
>
> **Reduktionsfaktor udiEnergyFactor**
>
> Der Reduktionsfaktor **udiEnergyFactor** wird nach jeder Eingabe des Wertes 0 mit dem Wert 1 überschrieben.
>
> **Beispiel - Reduktionsfaktor**
>
> *udiImpulseCounter* = 9, **udiEnergy** = 0, **udiEnergyFactor** = 10\
> \
> Nach einer ansteigenden Flanke am Eingang *xImpulse* verändern sich die Zählerstände wie folgt:\
> \
> \&#xNAN;*udiImpulseCounter* = 0, **udiEnergy** = 1, **udiEnergyFactor** = 10

### 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`    |         |
