FUNCTION_BLOCK "MSensoren"
TITLE = Ein-/Ausschaltverzögerung für Entprellung der Sensoren
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : EAN
VERSION : 0.1
   VAR_INPUT 
      ESensor { ExternalWritable := 'False'} : Bool;   // Eingang des zu überwachenden Sensors
      T_Ein { ExternalWritable := 'False'} : Int := 1;   // Einschaltzeitverzögerung (*100ms)
      T_Aus { ExternalWritable := 'False'} : Int := 5;   // Ausschaltzeitverzögerung  (*100ms)
      tein_aktiv { ExternalWritable := 'False'} : Bool := TRUE;   // Einschaltzeit aktivieren
      taus_aktiv { ExternalWritable := 'False'} : Bool := TRUE;   // Ausschaltzeit aktivieren
   END_VAR

   VAR 
      Stat { ExternalWritable := 'False'} : "USensor_Ein_Aus";   // Status des Endschalters
   END_VAR


BEGIN
NETWORK
TITLE = Zeitwert löschen
      U #ESensor;
      U #Stat.B_Akt;
      O;
      UN #ESensor;
      UN #Stat.B_Akt;
      SPBN Nw02;


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

      BEA;
NETWORK
TITLE = Einschaltzeit abgelaufen ?
Nw02:      L #Stat.T_Ein_Akt;//Gewollter Zeitwert
      L 9999;//angegeben ?
      <>I;//Ja !
      SPB w020;

      L #T_Ein;//Sollwert übergeben
      T #Stat.T_Ein_Akt;//Gewollter Zeitwert

w020:      U #Stat.B_Akt;
      SPB Nw03;

      L #Stat.T_Zelle;//Aktueller Zeitwert
      L #Stat.T_Ein_Akt;//Gewollter Zeitwert erreicht ?
      >=I;
      S #Stat.B_Akt;//Sensor ist nach Einschaltzeit aktiv
      SPB tdel;//Zeit löschen

      SPA Nw04;
NETWORK
TITLE = Ausschaltzeit abgelaufen ?
Nw03:      L #Stat.T_Aus_Akt;//Gewollter Zeitwert
      L 9999;//angegeben ?
      <>I;//Ja !
      SPB w030;

      L #T_Aus;//Sollwert übergeben
      T #Stat.T_Aus_Akt;//Gewollter Zeitwert

w030:      UN #Stat.B_Akt;
      SPB Nw04;

      L #Stat.T_Zelle;//Aktueller Zeitwert
      L #Stat.T_Aus_Akt;//Gewollter Zeitwert erreicht ?
      >=I;
      R #Stat.B_Akt;//Sensor ist nach Ausschaltzeit nicht mehr aktiv
      SPB tdel;//Zeit löschen

NETWORK
TITLE = Zeit läuft
Nw04:      UN "100ms-Impuls";//nur als Impuls
      O;
      UN #Stat.B_Akt;//Einschaltzeit läuft
      UN #tein_aktiv;//aber Zeit einfrieren
      O;
      U #Stat.B_Akt;//Ausschaltzeit läuft
      UN #taus_aktiv;//aber Zeit einfrieren
      BEB;

      L #Stat.T_Zelle;
      L "MW2";
      +I;
      T #Stat.T_Zelle;

NETWORK
TITLE = Ende
      BE;

END_FUNCTION_BLOCK

