FUNCTION "Err_vorhanden" : Void
TITLE = Störung aktiv
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT 
      Check_DB : Int;
      Anfangs_DW : DInt;
      Ende_DW : DInt;
   END_VAR

   VAR_OUTPUT 
      Stoerung : Bool;   // Störung vorhanden
      ErrDW : DInt;
      ErrBits : Int;
   END_VAR

   VAR_TEMP 
      Anzeige_DB : Int;
      Zeiger : DInt;   // Startwert mit Offset 0
      AR1Zeiger : DWord;   // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
   END_VAR


BEGIN
NETWORK
TITLE = Check-DB von "Abfangs_DW" bis "Ende_DW" checken
      SET;//GST
      R #Stoerung;
      L DINT#-1;//Sonst Störung in DBD0 nicht erkennbar
      T #ErrDW;
      L 0;
      T #ErrBits;

      L #Check_DB;
      T #Anzeige_DB;

      L #Anfangs_DW;//Mit diesem DW beginnen
      T #Zeiger;//Zeiger

Loop:      L #Zeiger;//Zeiger
      SLD 3;
      T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)

      AUF DB[ #Anzeige_DB];

      L DBW[ #AR1Zeiger];//Störungsbits
      T #ErrBits;
      L 0;//aktiv ?
      <>I;//Ja !
      SPB Err;

      L #Zeiger;//Startwert mit Offset 0
      L 2;
      +D;
      T #Zeiger;//Zeiger
      L #Ende_DW;//Letztes DW überschritten?
      <=D;//Nein !
      SPB Loop;

      BEA;

Err:      SET;
      S #Stoerung;

      L #Zeiger;//Zeiger
      T #ErrDW;

NETWORK
TITLE = Ende
      BE;

END_FUNCTION

