# CounterMonitoring

## `CounterMonitoring` (FB)

FUNCTION\_BLOCK CounterMonitoring

### Kurzbeschreibung

> Überwachung eines Zählerstandes und Erzeugung einer Störmeldung\
> \
> Typische Anwendung: Überwachung eines Wasserzählers auf Überschreitung eines Maximalverbrauchs während eines Überwachungs-Intervalls

### Darstellung

<figure><img src="/files/i7BmYc2MYzrGJ7WF40RI" alt=""><figcaption></figcaption></figure>

### Schnittstellen

#### Eingänge

| Name            | Datentyp | Wertebereich | Initialwert | Funktion                                                          |
| --------------- | -------- | ------------ | ----------- | ----------------------------------------------------------------- |
| *xEn*           | BOOL     |              | FALSE       | Freigabe / Sperrung der Zähler-Überwachung (TRUE = Freigabe)      |
| *rCounterValue* | REAL     |              | 0.0         | Aktueller absoluter Zählerstand (z.B. Zähler für die Wassermenge) |
| *xResetAlarm*   | BOOL     |              | FALSE       | Rücksetzung des Ausgangs ‘xAlarm’ (bei jeder ansteigenden Flanke) |

#### Ausgänge

| Name               | Datentyp | Wertebereich | Initialwert | Funktion                                                                      |
| ------------------ | -------- | ------------ | ----------- | ----------------------------------------------------------------------------- |
| *xAlarm*           | BOOL     |              | FALSE       | Störmeldung - Zählerüberwachung (FALSE = Aus, TRUE = Ein)                     |
| *tMonIntervall*    | TIME     |              |             | Zeitdauer eines Überwachungs-Intervalls                                       |
| *tRemainIntervall* | TIME     |              |             | Restzeit im Überwachungs-Intervall                                            |
| *rConsumMax*       | REAL     |              |             | Maximaler Verbrauch im Überwachungsintervall                                  |
| *rConsumIntervall* | REAL     |              |             | Aktueller Verbrauch im Überwachungsintervall                                  |
| *rConsumRemain*    | REAL     |              |             | Verbleibender Verbrauch im Überwachungsintervall vor der Auslösung des Alarms |

#### Sollwerte / Parameter

| Name                | Datentyp | Wertebereich | Initialwert | Funktion                                                  |
| ------------------- | -------- | ------------ | ----------- | --------------------------------------------------------- |
| **udiMonIntervall** | UDINT    |              | 24          | Zeitdauer eines Überwachungs-Intervalls (0 … 4294967295)  |
| **tMinIntervall**   | TIME     |              | T#0s        | Absolute minimale Zeitdauer eines Überwachungs-Intervalls |
| **tMaxIntervall**   | TIME     |              | T#7D        | Absolute maximale Zeitdauer eines Überwachungs-Intervalls |
| **eScaleIntervall** | eTime    |              | eTime.Hour  | Skalierung der Zeitdauer ‘udiMonIntervall’                |
| **rConsumLimit**    | REAL     |              | 10.0        | Grenzwert für den Verbrauch im Überwachungs-Intervall     |

### Funktionsbeschreibung

#### Allgemeines

Dieser Funktionsbaustein dient zur Überwachung eines Medien-Verbrauchs (Wasser, Strom, etc.) (Eingang ‘rCounterValue’)\
während des einstellbaren Überwachungs-Intervalls ‘tMonIntervall’. Überschreitet der Verbrauch den Maximalwert für das\
Überwachungs-Intervall ‘rConsumLimit’, so wird ein Alarm (‘xAlarm’ = TRUE) ausgelöst. Er kann durch eine ansteigende\
Flanke am Eingang ‘xResetAlarm’ zurück gesetzt werden.

#### Überwachung

Das zyklische Überwachungs-Intervall startet, falls alle folgenden Bedingungen gleichzeitig erfüllt sind:

1. ‘xEn’ = TRUE
2. ‘rConsumLimit’ > 0.0
3. ‘tMonIntervall’ >= T#60s

\
Das zyklische Überwachungs-Intervall wird beendet, falls mindestens eine dieser Bedingungen nicht mehr erfüllt ist.\
\
Zu Beginn jedes Überwachungs-Intervalls wird der aktuelle Zählerstand ‘rCounterValue’ als Startwert gespeichert.\
Während des Überwachungs-Intervalls wird permanent die Differenz zwischen dem aktuellen Zählerstand und dem Startwert berechnet (rConsumIntervall).\
Der Ausgang xAlarm wird immer dann aktiviert (= TRUE), falls diese Differenz den Grenzwert rConsumLimit überschreitet.\
Der Ausgang xAlarm wird durch jede ansteigende Flanke am Eingang ‘xResetAlarm’ zurück gesetzt (= FALSE).\
\
Die Festlegung der Zeitdauer ‘tMonIntervall’ erfolgt durch die Sollwerte ‘udiMonIntervall’ (Absoluter Zahlenwert) in Kombination mit ‘eScaleIntervall’ (Skalierung)\
unter Berücksichtigung von ‘tMinIntervall’ (absoluter Minimalwert) und ‘tMaxIntervall’ (Absoluter Maximalwert).

#### Anzeigen

Es stehen folgenden Ausgänge zur Anzeige des aktuellen Betriebszustands zur Verfügung:

1. xAlarm Störmeldung - Zählerüberwachung (FALSE = Aus, TRUE = Ein)
2. tMonIntervall Zeitdauer eines Überwachungs-Intervalls
3. tRemainIntervall Verbleibende Rest-Zeit im Überwachungs-Intervall
4. rConsumMax Maximaler Verbrauch im Überwachungsintervall (identisch mit **rConsumLimit**)
5. rConsumIntervall Aktueller Verbrauch im Überwachungsintervall (es werden nur Verbräuche >= 0.0 angezeigt)
6. rConsumRemain Verbleibender Verbrauch im Überwachungsintervall vor der Auslösung des Alarms (es werden nur Verbräuche >= 0.0 angezeigt)

#### Sperrung des Bausteins (xEn = FALSE)

Dies Ausgänge nehmen folgende, fixe Zustände ein:

1. xAlarm FALSE
2. tMonIntervall T#0s
3. tRemainIntervall T#0s
4. rConsumMax 0.0
5. rConsumIntervall 0.0
6. rConsumRemain 0.0

### CODESYS

InOut:

| Scope       | Name               | Type    | Initial          |
| ----------- | ------------------ | ------- | ---------------- |
| Input       | `xEn`              | `BOOL`  | TRUE             |
| Input       | `rCounterValue`    | `REAL`  | 0.0              |
| Input       | `xResetAlarm`      | `BOOL`  | FALSE            |
| Input Const | `rConsumLimit`     | `REAL`  | 10.0             |
| Input Const | `eScaleIntervall`  | eTime   | eTime.Hour       |
| Input Const | `tMaxIntervall`    | `TIME`  | TIME#10080m0s0ms |
| Input Const | `tMinIntervall`    | `TIME`  | TIME#0ms         |
| Input Const | `udiMonIntervall`  | `UDINT` | 24               |
| Output      | `xAlarm`           | `BOOL`  |                  |
| Output      | `tMonIntervall`    | `TIME`  |                  |
| Output      | `tRemainIntervall` | `TIME`  |                  |
| Output      | `rConsumMax`       | `REAL`  |                  |
| Output      | `rConsumIntervall` | `REAL`  |                  |
| Output      | `rConsumRemain`    | `REAL`  |                  |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.powerio.com/hub/codesys-hvac/hvac-library/functionblocks/monitoring/countermonitoring.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
