FUNCTION "Simulation_AMR_Trolley_starten" : Void
TITLE = Simulation zum Starten von Trolleys aus AMRs
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_TEMP 
      Zufallszahl : Int;
      AMR_DB : Int;
      AMR_DW : Int;
      AR1Zeiger : DWord;   // Statt AR1 (ging nur bis DB-Länge <= 8191 Bytes)
      AR1Start : DInt;   // Startwert mit Offset 0
   END_VAR


BEGIN
NETWORK
TITLE = Simulation ist aktiv
      U "T29";
      S "DAMR_Bereich".Simulation.Wartezeit_ok;
      UN "DAMR_Bereich".Simulation.Wartezeit_ok;
      L s5t#20s;
      SE "T29";

      U "DAMR_Bereich".Simulation.aktiv;
      = "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Aktiviert;
      = "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Aktiviert;
      = "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Aktiviert;
      = "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Aktiviert;
      = "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Aktiviert;
      = "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Aktiviert;
      = "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Aktiviert;
      = "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Aktiviert;

      UN "DAMR_Bereich".Simulation.aktiv;
      ON "DAMR_Bereich".Simulation.Wartezeit_ok;
      BEB;

NETWORK
TITLE = Trolley zum Ausfahren vorhanden?
      U "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation."Trolleys bereit";
      O "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation."Trolleys bereit";
      O "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation."Trolleys bereit";
      O "DPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation."Trolleys bereit";
      O "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation."Trolleys bereit";
      O "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation."Trolleys bereit";
      O "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation."Trolleys bereit";
      O "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation."Trolleys bereit";
      SPB Zufall;

      SET;
      S "DPS5_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Neustart;
      S "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Neustart;
      S "DPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Neustart;
      S "DPS4_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Neustart;
      S "DPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Neustart;
      S "DMPS3_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Neustart;
      S "DMPS2_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Neustart;
      S "DMPS1_OmniFahren".Sks_Arbeitsplatz.Dyn.Simulation.Neustart;

      L 0;
      T "DAMR_Bereich".Simulation.AMR;

      BEA;

NETWORK
TITLE = AMR zufällig ermitteln
Zufall:      L "DAMR_Bereich".Simulation.MSekunden;
      SRW 4;
      T #Zufallszahl;

      L #Zufallszahl;
      SPL Ende;
      SPA s000;//Schritt 0
      SPA s001;//Schritt 1
      SPA s002;//Schritt 2
      SPA s003;//Schritt 3
      SPA s004;//Schritt 4
      SPA s005;//Schritt 5
      SPA s006;//Schritt 6
      SPA s007;//Schritt 7
      SPA s008;//Schritt 8
Ende:      BEA;//Kein AMR

s000:      BEA;//Kein AMR

s001:      L 16#A500            ;//PS5
      SPA AMRCheck;
s002:      L 16#A400            ;//PS4
      SPA AMRCheck;
s003:      L 16#A300            ;//PS3
      SPA AMRCheck;
s004:      L 16#A200            ;//PS2
      SPA AMRCheck;
s005:      L 16#A100            ;//PS1
      SPA AMRCheck;
s006:      L 16#B300            ;//MPS3
      SPA AMRCheck;
s007:      L 16#B200            ;//MPS2
      SPA AMRCheck;
s008:      L 16#B100            ;//MPS1
      SPA AMRCheck;

NETWORK
TITLE = AMR bereit ?
AMRCheck:      T "DAMR_Bereich".Simulation.AMR;

      CALL "AMRZeiger_ermitteln"
      (  AMR_X                       := "DAMR_Bereich".Simulation.AMR , 
         AMR_DB                      := #AMR_DB , 
         AMR_DW                      := #AMR_DW , 
         Error                       := "M199.0"
      );

      U "M199.0";
      BEB;

//Ziel-Pointer erzeugen: (PLC-Daten)
      L #AMR_DW;
      ITD;
      T #AR1Start;//Startwert mit Offset 0

//Hat AMR Trolleys zum Ausfahren?:
      L #AR1Start;//Startwert mit Offset 0
      + DINT#184          ;//Offset für Simulation
      SLD 3;
      L 3                  ;//Damit DBX_Bit 3
      OD;
      T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
      AUF DB[ #AMR_DB]        ;//AMR-DB öffnen
      UN DBX[ #AR1Zeiger]     ;//Trolleys bereit für Ausfahrt
      BEB;

//Trolley starten:
      L #AR1Start;//Startwert mit Offset 0
      + DINT#184          ;//Offset für Simulation
      SLD 3;
      L 1                  ;//Damit DBX_Bit 1
      OD;
      T #AR1Zeiger;//Statt Dyn.Bereichsstop (ging nur bis DB-Länge <= 8191 Bytes)
      AUF DB[ #AMR_DB]        ;//AMR-DB öffnen
      SET;
      = DBX[ #AR1Zeiger]      ;//Trolley starten

      SET;
      R "DAMR_Bereich".Simulation.Wartezeit_ok;//Wartezeit neu starten

NETWORK
TITLE = Ende
      BE;

END_FUNCTION

