FUNCTION "VP_Leser_FC" : Void
TITLE = Leser-FC: Vollpuffer
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
FAMILY : Module
NAME : Leser
//SCL-Portierung des AWL-Bausteins FC1180 "VP_Leser_FC" (verhaltensgleich).
//
//Der Baustein hatte im AWL-Original die Bausteineigenschaft "Parameterversorgung
//ueber Register" (ParameterPassing) aktiv und konnte daher nur per UC/CC aus AWL
//aufgerufen werden. Da der Baustein ausschliesslich die globalen Merker MW190
//(Schleusen-Nr), M180.0/M180.1 (Lese-Status) und MW196 (Zwischenziel-Scratch)
//nutzt und die Zielbausteine voll qualifiziert aufruft, gibt es keine echte
//Registerabhaengigkeit -> die Option entfaellt bei der SCL-Fassung, der Baustein
//ist direkt aus SCL aufrufbar (CASE 1180 in MHMOmniSchleuse).
//
//Der indirekte Dispatch (AWL: je Netzwerk "L MW190 / L <Schleuse> / NE_I / JC")
//ist als CASE ueber die Schleusen-Nr ausgefuehrt. Case-Labels sind die dezimalen
//Int-Konstanten aus dem XML. Die Merker-Schnittstelle bleibt erhalten.
//
//Zweig-Muster (in 3121/3123 identisch geprueft):
//  AN M180.0 / JC Y / BEU     -> bei Lesefehler (M180.0=1): nichts tun
//  Y: AN M180.1 / BEC         -> nur weiter wenn unbekannt in TrolleysDL (M180.1=1)
//  L TrolleyID / L DINT#0 / EQ_D / BEC -> nur weiter wenn TrolleyID <> 0
//  CALL Trolleydaten_neu_anlegen(...)
//  => Aufruf nur wenn:  NOT M180.0  AND  M180.1  AND  TrolleyID <> DINT#0
//
//ABWEICHUNGEN ZUM AWL-ORIGINAL (bei Inbetriebnahme pruefen!):
//  - NW1 "Rueckmeldung" setzt den Scratch-Merker MW196 (evtl. Zwischenziel) auf 0
//    (AWL: L 0 / T MW196; das Original laedt die Int-Literalkonstante 0 und
//    transferiert sie in das Wort-Merkerwort MW196). Hier als "MW196" := W#16#0000;
//    Falls das Symbol "MW196" in der Symboltabelle als Int deklariert ist,
//    statt dessen "MW196" := 0; verwenden.
//  - Schleuse 3244 WEICHT vom Standardmuster ab: sie enthaelt KEINE
//    TrolleyID<>0-Pruefung vor dem Aufruf. Der Aufruf erfolgt dort bereits bei
//    NOT M180.0 AND M180.1 (siehe Zweig 3244). Zusaetzlich enthaelt der
//    Lesefehler-Zweig von 3244 ein wirkungsloses SET und einen auskommentierten
//    Befehl S "DVP_OmniFahren".Schleuse_3244.Dyn.HMI.Abzweig_fahren (nur Kommentar,
//    keine Aktion) vor dem Bausteinende -> ohne Wirkung uebernommen.
//  - Endziel-Parameter war im Original die Wort-Literalkonstante 16#0000 -> hier W#16#0000.
//  - ShopGroup-Parameter: in 3121/3123 getypte Konstante DINT#815, in 3244
//    DInt-Literalkonstante 815 -> in allen Zweigen als DINT#815 uebernommen.
   VAR_TEMP
      Zielebene : Word;
   END_VAR

BEGIN
   // NW1 "Rueckmeldung": Zwischenziel-Scratch (MW196) zuruecksetzen (AWL: L 0 / T MW196)
   "MW196" := W#16#0000;

   // AWL: UC FC1180 dispatcht ueber MW190 (Schleusen-Nr, vom Aufrufer gesetzt)
   CASE WORD_TO_INT("MW190") OF

      3121:   // Schleuse 3121: (Sorter VP A / KontrollPlatz)
         // Daten in Datenbank erzeugen:
         IF NOT "M180.0" AND "M180.1" AND ("DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse <> DINT#0) THEN
            // /In Zukunft Anfrage bei Host!
            "Trolleydaten_neu_anlegen"(
               Gesamt_Trolley_DL := "DVP_OmniFahren".Schleuse_3121.Schleuse.Gesamt_Trolley_DL,
               TrolleyID         := "DVP_OmniFahren".Schleuse_3121.Dyn.TrolleyID_Schleuse,
               Endziel           := W#16#0000,
               ShopGroup         := DINT#815);
         END_IF;

      3123:   // Schleuse 3123: (Sorter VP A / RueckfuehrStecke)
         // Daten in Datenbank erzeugen:
         IF NOT "M180.0" AND "M180.1" AND ("DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse <> DINT#0) THEN
            // /In Zukunft Anfrage bei Host!
            "Trolleydaten_neu_anlegen"(
               Gesamt_Trolley_DL := "DVP_OmniFahren".Schleuse_3123.Schleuse.Gesamt_Trolley_DL,
               TrolleyID         := "DVP_OmniFahren".Schleuse_3123.Dyn.TrolleyID_Schleuse,
               Endziel           := W#16#0000,
               ShopGroup         := DINT#815);
         END_IF;

      3244:   // Schleuse 3244: (nach Puffer-Ausfahrt)
         // ABWEICHUNG: kein TrolleyID<>0-Check; Lesefehler-Zweig enthaelt nur ein
         // wirkungsloses SET + auskommentiertes S "...Schleuse_3244.Dyn.HMI.Abzweig_fahren"
         // /In Zukunft Anfrage bei Host!
         IF NOT "M180.0" AND "M180.1" THEN
            // Erst mal, da kein Host!
            "Trolleydaten_neu_anlegen"(
               Gesamt_Trolley_DL := "DVP_OmniFahren".Schleuse_3244.Schleuse.Gesamt_Trolley_DL,
               TrolleyID         := "DVP_OmniFahren".Schleuse_3244.Dyn.TrolleyID_Schleuse,
               Endziel           := W#16#0000,
               ShopGroup         := DINT#815);
         END_IF;

      ELSE
         ;   // unbekannte Schleusen-Nr -> nichts tun
   END_CASE;
END_FUNCTION
