# TrigGen

## `TrigGen` (FB)

FUNCTION\_BLOCK TrigGen

### Kurzbeschreibung

> Impulserzeugung mit einstellbarem Zeitintervall.

### Darstellung

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

### Schnittstellen

#### Eingänge

| Name        | Datentyp | Wertebereich | Initialwert | Funktion                    |
| ----------- | -------- | ------------ | ----------- | --------------------------- |
| *xEn*       | BOOL     |              |             | Freigabeeingang             |
| *wInterval* | WORD     |              |             | Zeitwert für Zeitintervall  |
| *eTimeBase* | eTimeMS  |              |             | Zeitbasis für Zeitintervall |
| *xEnImp*    | BOOL     |              |             | Option Freigabe 1. Impuls   |

#### Ausgänge

| Name       | Datentyp | Wertebereich | Initialwert | Funktion                         |
| ---------- | -------- | ------------ | ----------- | -------------------------------- |
| *xTrig*    | BOOL     |              |             | Impulsausgang                    |
| *tNextImp* | TIME     |              |             | Restzeit bis zum nächsten Impuls |

### Funktionsbeschreibung

#### Allgemeines

Am Impulsausgang *xTrig* werden zyklisch Impulse mit einer Zeitdauer von einem Programmzyklus und einem Zeitintervall von (*wInterval* multipliziert mit *eTimeBase*) erzeugt, falls der Freigabeeingang *xEn* aktiv ist.

> **Beschränkung des maximalen Zeitintervalls**
>
> Das Zeitintervall ist dabei auf maximal 48 Tage beschränkt, um einen internen Werteüberlauf zu vermeiden.
>
> **Beispiel zur Berechnung des Zeitintervalls**
>
> *wIntervall* = 1000, *eTimeBase* = Millisecond, es werden Impulse in einem Zeitintervall von 1000ms erzeugt.

#### Freigabe 1.Impuls *xEnImp*

Bei aktiver Option (*xEnImp* = TRUE) wird der 1. Impuls direkt nach der Freigabe *xEn* erzeugt.\
Bei nicht aktiver Option (*xEnImp* = FALSE) wird der 1. Impuls nach der Freigabe *xEn* nach Ablauf eines Zeitintervalls erzeugt.

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

#### Restzeit bis zum nächsten Impuls *tNextImp*

An diesem Ausgang wird die Restzeit bis zum nächsten Impuls dargestellt, falls der Freigabeeingang aktiv (\*xEn = TRUE) ist.\
In allen übrigen Situationen wird die Konstante 0.0 dargestellt.

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

### Codesys

InOut:

| Scope  | Name        | Type    |
| ------ | ----------- | ------- |
| Input  | `xEn`       | `BOOL`  |
| Input  | `wInterval` | `WORD`  |
| Input  | `eTimeBase` | eTimeMS |
| Input  | `xEnImp`    | `BOOL`  |
| Output | `xTrig`     | `BOOL`  |
| Output | `tNextImp`  | `TIME`  |
