=== FB 100: MImpulsGeber  [STL] ===
INTERFACE:
  Input:
    Ink_DB : Int                                        // DB-Nr des Inkremental-Gebers (Zählerbaugruppe) Neu-Sync-Zähler
    B_Zaehlen : Bool                                    // Sensor zum Zählen
    Antrieb_aktiv : Bool                                // Antrieb ist aktiv
    Quit : Bool
    Zeit_Signal_zu_lang : Time := T#350ms
    Zeit_Kein_Signal : Time := T#500ms
  Output:
    Signal : Bool                                       // Falls kein InkDB
  InOut:
    Err_Kein_Signal : Bool                              // Kein_Signal bei laufenden Antrieb
    Err_Signal_zu_lang : Bool                           // Signal bei laufenden Antrieb zu lang
  Static:
    Sensor_entprellen : Bool
    Timer_1 : TON_TIME
    Timer_2 : TON_TIME
    Timer_3 : TON_TIME
  Temp:
  Constant:

--- NW 1: Initialisierung ---
      SET
      R      Signal


--- NW 2: Störungen ---
// Störung quittieren:
      A      Quit
      R      Err_Signal_zu_lang
      R      Err_Kein_Signal

// Signal zu lang:
      A      B_Zaehlen                                       // Sensor zum Zählen
      A      Antrieb_aktiv                                   // Antrieb ist aktiv
      AN     Quit
      =      "M200.0"

CALL SYS "TON" (IN:="M200.0", PT:=Zeit_Signal_zu_lang, Q:=?, ET:=?)

      A      Timer_2.Q
      S      Err_Signal_zu_lang

// Kein Signal:
      AN     B_Zaehlen                                       // Sensor zum Zählen
      A      Antrieb_aktiv                                   // Antrieb ist aktiv
      AN     Quit
      =      "M200.0"

CALL SYS "TON" (IN:="M200.0", PT:=Zeit_Kein_Signal, Q:=?, ET:=?)

      A      Timer_3.Q
      S      Err_Kein_Signal


--- NW 3: Zählen über Sensor ---
      AN     B_Zaehlen                                       // Sensor zum Zählen
      A      Sensor_entprellen                               // Sperre Auswertung schon erfolgt
      A      Antrieb_aktiv                                   // Antrieb ist aktiv
      =      "M200.0"

CALL SYS "TON" (IN:="M200.0", PT:=t#50ms, Q:=?, ET:=?)

      A      Timer_1.Q
      R      Sensor_entprellen                               // Sperre Auswertung schon erfolgt

      AN     B_Zaehlen                                       // Sensor zum Zählen
      O      Sensor_entprellen
      BEC

      SET
      S      Sensor_entprellen                               // Sperre Auswertung schon erfolgt
      S      Signal                                          // Für Signal-Auswertung ohne InkDB


--- NW 4: Übergabe an Inkrement-Baustein / max.Wert erreicht? ---
      L      Ink_DB
      T      "MW200"

      L      0                                               // Sinnvolle Angabe?
      <=I                                                    // Nein!
      BEC                                                    // Also nur Signal-Auswertung !

      OPN    DB["MW200"]                                     // Zähler-DB öffnen

      L      DBD80
      +      DINT#1                                          // Aktueller Zählerwert +1
      T      DBD80

      L      DBD80                                           // Aktueller Zählerwert
      L      DBD76                                           // Max. Wert erreicht ?
      <=D                                                    // Nein !
      R      DBX74.5                                         // Ohne Flag-Lauf wurde beendet
      R      DBX74.4                                         // Flag-Lauf wurde beendet
      BEC

      -D                                                     // Restwert als Startwert nehmen !
      T      DBD80                                           // Keine Inkrementalgeber verbaut, sondern nur Sensor

      AN     DBX74.3                                         // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
      =      DBX74.5                                         // Ohne Flag-Lauf wurde beendet
      A      DBX74.3                                         // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
      =      DBX74.4                                         // Flag-Lauf wurde beendet

      AN     DBX74.3                                         // Umschaltung Zähl-Lauf ohne-mit-ohne Flag
      =      DBX74.3

// Zähler auf 000 setzen ?:
      AN     DBX74.6                                         // Zähler Zero-Load
      BEC

      SET
      R      DBX74.6

      L      0
      T      DBD80                                           // Zählerwert zum Setzen


--- NW 5: Ende ---
      BE

