=== FB 92: MZylinder  [STL] ===
INTERFACE:
  Input:
    Automatik : Bool                                    // Automatikbetrieb ist aktiv
    Handbetrieb : Bool                                  // Handbetrieb ist aktiv
    T_Ast : Int := 5                                    // Zeit bis AST erreicht ist (*100ms)
    T_Gst : Int := 5                                    // Zeit bis GST erreicht ist (*100ms)
  Output:
    ZylAst : Bool                                       // Vorwärts-Ausgang des Antriebs
    ZylGst : Bool                                       // Rückwärts-Ausgang des Antriebs
  InOut:
  Static:
    Stat : "UZylinder"
  Temp:
  Constant:

--- NW 1: Zeitwert löschen ---
      A      ZylAst                                          // Zylinder fährt nach AST
      A(
      O      Stat.B_AST                                      // Hat Endstellung erreicht
      ON     Stat.Old_Ast                                    // Fuhr letzten Zyklus anders
      )
      O
      AN     ZylAst                                          // Zylinder fährt nach GST
      A(
      O      Stat.B_GST                                      // Hat Endstellung erreicht
      O      Stat.Old_Ast                                    // Fuhr letzten Zyklus anders
      )
      JCN    Nw02

tdel: L      0                                               // Zeitwert löschen
      T      Stat.T_Zelle

      A      ZylAst                                          // Zylinder fährt nach AST
      =      Stat.Old_Ast                                    // Fuhr letzten Zyklus nach AST

      JU     Nw05

--- NW 2: AST-Erreichtzeit abgelaufen ? ---
Nw02: L      Stat.T_AST_Akt                                  // Gewollter Zeitwert
      L      9999                                            // angegeben ?
      <>I                                                    // Ja !
      JC     w020

      L      T_Ast                                           // Sollwert übergeben
      T      Stat.T_AST_Akt                                  // Gewollter Zeitwert

w020: A      ZylAst                                          // Zylinder fährt nach AST  ?
      JCN    en02

      SET
      R      Stat.B_GST

      L      Stat.T_Zelle                                    // Aktueller Zeitwert
      L      Stat.T_AST_Akt                                  // Gewollter Zeitwert erreicht ?
      >=I
      S      Stat.B_AST                                      // Zylinder hat AST erreicht
      JC     tdel                                            // Zeit nullen

      JU     Nw03

en02: AN     Stat.Typ5_3                                     // Zylinder hält seine Stellung !
      R      Stat.B_AST


--- NW 3: GST-Erreichtzeit abgelaufen ? ---
Nw03: L      Stat.T_GST_Akt                                  // Gewollter Zeitwert
      L      9999                                            // angegeben ?
      <>I                                                    // Ja !
      JC     w030

      L      T_Gst                                           // Sollwert übergeben
      T      Stat.T_GST_Akt                                  // Gewollter Zeitwert

w030: A(                                                     // Zylinder fährt nach GST ?
      O      Stat.Typ5_2                                     // Zylinder mit 2-facher Ansteuerung
      O      Stat.Typ5_3
      )
      A      ZylGst
      O
      A      Stat.Typ3_2                                     // Zylinder mit 1-facher Ansteuerung
      AN     ZylAst
      JCN    en03

      SET
      R      Stat.B_AST

      L      Stat.T_Zelle                                    // Aktueller Zeitwert
      L      Stat.T_GST_Akt                                  // Gewollter Zeitwert erreicht ?
      >=I
      S      Stat.B_GST                                      // Zylinder hat GST erreicht
      JC     tdel                                            // Zeit nullen

      JU     Nw04

en03: AN     Stat.Typ5_3                                     // Zylinder hält seine Stellung !
      R      Stat.B_GST


--- NW 4: Zeit läuft ---
Nw04: A(                                                     // Zylinder fährt nach GST ?
      O      Stat.Typ5_2                                     // Zylinder mit 2-facher Ansteuerung
      O      Stat.Typ5_3
      )
      AN     ZylGst                                          // Zylinder wird nicht angesteuert
      AN     ZylAst
      ON     "100ms-Impuls"                                  // nur als Impuls
      JC     Nw05

      L      Stat.T_Zelle
      L      "MW2"                                           // 100ms-Takte
      +I
      T      Stat.T_Zelle


--- NW 5: Undefinierte Zustände / Befehle ---
Nw05: A      Automatik                                       // Automatik + Hand aktiv
      A      Handbetrieb
      O
      AN     Automatik                                       // keine Betriebsart
      AN     Handbetrieb
      O
      A      Stat.Ast                                        // Arbeitsstellung- + Grundstellungfahren aktiv
      A      Stat.Gst
      O
      AN     Stat.Typ3_2                                     // Undefinierter Ventil-Typ
      AN     Stat.Typ5_2
      AN     Stat.Typ5_3
      O
      A      Stat.Typ3_2
      A(
      O      Stat.Typ5_2
      O      Stat.Typ5_3
      )
      O
      A      Stat.Typ5_2
      A      Stat.Typ5_3
      JCN    en06                                            // Zylinderstellung bleibt eingefroren

      A      Stat.Typ5_3                                     // Zylinder hält seine Stellung !
      R      Stat.Ast                                        // Bewegungsbits löschen
      R      Stat.Gst

      BEU

en06: NOP 0

--- NW 6: Zylinder auf Arbeitstellung fahren ---
      A      Stat.Ast
      =      ZylAst


--- NW 7: Zylinder auf Grundstellung fahren ---
      A(
      O      Stat.Typ5_2
      O      Stat.Typ5_3
      )
      A      Stat.Gst
      =      ZylGst


--- NW 8: Daten, die zurückgesetzt werden ---
      A      Stat.Typ5_3                                     // Zylinder hält seine Stellung !
      R      Stat.Ast                                        // Bewegungsbits löschen
      R      Stat.Gst
      A      Stat.Typ3_2
      R      Stat.Gst                                        // Es gibt kein GST fahren !


--- NW 9: Ausgänge übergeben an OP übergeben ---
      A      ZylGst
      =      Stat.OP_Out_GST

      A      ZylAst
      =      Stat.OP_Out_AST


--- NW 10: Statistik ---
      A      ZylAst
      Rise   Stat.FP_AST
      JCN    AST2

      L      Stat.Statistik.AST_Schaltungen
      L      DINT#1
      +D
      T      Stat.Statistik.AST_Schaltungen

AST2: A      ZylGst
      A      Stat.Typ5_3
      Rise   Stat.FP_AST2
      JCN    StatEnde

      L      Stat.Statistik.AST2_Schaltungen
      L      DINT#1
      +D
      T      Stat.Statistik.AST2_Schaltungen

StatEnde: NOP 0


--- NW 11: Ende ---
      BE

