FUNCTION_BLOCK "MHMÜbergang_ohne_Schleuse_AMR"
TITLE = Übergang ohne Schleuse zu anderem Antrieb 
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
//COPYRIGHT by Ingenieurbüro A.Emmert
//Ortsstr.33, D-869925 Fuchstal (Germany)
//Tel.: 0049(0)8243-960629
//
//Version: HM-Omniflow 2100 / 11.2025
//
   VAR_INPUT 
      ErrQuit : Bool;
      B_Anfang : Bool;
      B_Am_Übergang : Bool;
      B_Stau_Antrieb_plus : Bool;
      Antrieb_aktiv : Bool;
      Antrieb_plus_aktiv : Bool;
   END_VAR

   VAR_IN_OUT 
      Antrieb_vor : Bool;
      Antrieb_start : Bool;
      Antrieb_stop : Bool;
      Antrieb_plus_vor : Bool;
      Antrieb_plus_start : Bool;
   END_VAR

   VAR 
      Am_Übergang { S7_SetPoint := 'False'} : "MSensoren";
      Stau_Antrieb_plus : "MSensoren";
      Stau_B_Anfang : "MSensoren";
   END_VAR

   VAR_TEMP 
      Antrieb : Bool;
      Antrieb_gestoppt : Bool;
   END_VAR


BEGIN
NETWORK
TITLE = Antrieb ansteuern
      SET;
      R #Antrieb_gestoppt;//Falls bei Aufruf nicht gestoppt wird!

//Antrieb starten:
      U #B_Anfang;
      O #ErrQuit;
      S #Antrieb_start;

      U #B_Anfang;
      UN #Stau_B_Anfang.Stat.B_Akt;
      O #ErrQuit;
      S #Antrieb_vor;

//Trolley am Übergang:
      UN #Am_Übergang.Stat.B_Akt;
      SPB Nix;

//Antrieb stoppen:
      U #Stau_Antrieb_plus.Stat.B_Akt;
      S #Antrieb_stop;//Trolley stoppen
      S #Antrieb_gestoppt;//Falls bei Aufruf nicht gestoppt wird!
      SPB Nix;

      UN #Stau_Antrieb_plus.Stat.B_Akt;
      S #Antrieb_plus_vor  ;//Antrieb plus einschalten

      SET;
      S #Antrieb_plus_start;//Antrieb plus zeitlang starten

      UN #Antrieb_plus_aktiv;
      S #Antrieb_stop;//Trolley stoppen
      S #Antrieb_gestoppt;//Falls bei Aufruf nicht gestoppt wird!
      SPB Nix;

//Antrieb einschalten:
      SET;
      S #Antrieb_vor;//Trolley weiterfahren

Nix:      NOP 0;

NETWORK
TITLE = Antrieb plus zusätzlich ansteuern

//Antrieb plus starten:
      U #B_Stau_Antrieb_plus;//Sensor
      O #ErrQuit;
      S #Antrieb_plus_start;//Antrieb plus zeitlang starten

//Antrieb plus einschalten:
      U #B_Stau_Antrieb_plus;
      UN #Stau_Antrieb_plus.Stat.B_Akt;
      CLR;//Nicht mehr!
      S #Antrieb_plus_vor  ;//Antrieb plus einschalten

NETWORK
TITLE = Stau B_Anfang
      CALL #Stau_B_Anfang
      (  ESensor                     := #B_Anfang , 
         T_Ein                       := 1 , 
         T_Aus                       := 100 , 
         tein_aktiv                  := #Antrieb_aktiv , 
         taus_aktiv                  := 1
      );

NETWORK
TITLE = Trolley ist am Übergang
      U #Antrieb_aktiv;
      U #Antrieb_plus_aktiv;
      UN #Antrieb_gestoppt  ;//Falls bei Aufruf nicht gestoppt wird!
      = #Antrieb;

      CALL #Am_Übergang
      (  ESensor                     := #B_Am_Übergang , 
         T_Ein                       := 1 , 
         T_Aus                       := 100 , 
         tein_aktiv                  := 1 , 
         taus_aktiv                  := #Antrieb
      );

NETWORK
TITLE = Stau im Förderer plus
      CALL #Stau_Antrieb_plus
      (  ESensor                     := #B_Stau_Antrieb_plus , 
         T_Ein                       := 100 , 
         T_Aus                       := 50 , 
         tein_aktiv                  := 1 , 
         taus_aktiv                  := 1
      );

NETWORK
TITLE = Ende
      BE;

END_FUNCTION_BLOCK

