VAR_INPUT
    biLSoben        : BOOL ; // LichtSchranke "oben"  (Low-Signal, wenn unterbochen)
    biLSunten       : BOOL ; // LichtSchranke "unten" (Low-Signal, wenn unterbochen)
    biResetFlach    : BOOL ; // SchnittstellenBit zum Rücksezen des "Flach"ZählWertes
    biResetHoch     : BOOL ; // SchnittstellenBit zum Rücksezen des "Hoch"ZählWertes
END_VAR
VAR_OUTPUT
    boFehlerLSunten : BOOL ; // Fehler: LS "unten" hat nicht gemeldet (optional!)
END_VAR
VAR                          // statisch !!! Falls in FC, dann stattdessen VAR_IN_OUT !
    bsFehlerLSunten : BOOL ; // Fehler: LS "unten" hat nicht gemeldet
                             //   wird rückgesetzt, sobald Flanke an 'biLSunten' auftritt
    bsHochGesp      : BOOL ; // Speicher für Zustand "hoch"
                             //   wird rückgesetzt durch High-Signal an 'biLSunten'
    bsLSobenZuvor   : BOOL ; // FlankenMerker für LichtSchranke "oben"
    bsLSuntenZuvor  : BOOL ; // FlankenMerker für LichtSchranke "unten"
END_VAR
//  wsFlachZählBCD  : WORD ; // DatenWort für "Flach"ZählWert
//  wsHochZählBCD   : WORD ; // DatenWort für "Hoch"ZählWert
//  Z_univ          : WORD ; // S7-Zähler
      L    0
      U    biResetHoch       // BCD-ZählWert hohe Pakete rücksetzen
      SPBN SKRH
      T    wsHochZählBCD     // BCD-ZählWert hohe Pakete
SKRH: U    biResetFlach      // BCD-ZählWert flache Pakete rücksetzen
      SPBN SKRF
      T    wsFlachZählBCD    // BCD-ZählWert flache Pakete
SKRF: UN   biLSunten         // beide LS unterbrochen
      UN   biLSoben
      S    bsHochGesp
      X    biLSunten         // beliebige Flanke von biLSunten
      X    bsLSuntenZuvor
      R    bsFehlerLSunten
      L    wsHochZählBCD
      U    biLSoben          // neg Flanke biLSoben
      UN   bsLSobenZuvor
      UN   bsHochGesp
      S    bsFehlerLSunten
      SPB  CNT
      ON   biLSunten     
      O    bsLSuntenZuvor
      SPB  ALWY
      U    bsHochGesp        // neg Flanke biLSunten
      SPB  CNT
      L    wsFlachZählBCD
CNT:  CLR                    // S7-Zähler
      S    Z_univ
      ZV   Z_univ
      SET                    // pos Flanke bilden
      S    Z_univ
      ZV   Z_univ
      LC   Z_univ            // S7-Zähler in BCD auslesen
      O    bsHochGesp
      O    bsFehlerLSunten
      SPB  HIGH
      T    wsFlachZählBCD
      SPA  ALWY
HIGH: T    wsHochZählBCD
ALWY: U    biLSunten         // FlankenMerker bilden
      =    bsLSuntenZuvor
      U    biLSoben
      =    bsLSobenZuvor
      U    biLSunten         // Zustand hoch rücksetzen
      R    bsHochGesp
// optional:
      U    bsFehlerLSunten   // Fehler: LS "unten" hat nicht gemeldet
      =    boFehlerLSunten   // --> Ausgang