FUNCTION "LPtoHW_Leser_FC" : Void
TITLE = Leser-FC: LP > HW
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
FAMILY : Module
NAME : Leser
//SCL-Portierung des AWL-Bausteins FC6180 "LPtoHW_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)
//liest bzw. schreibt 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 6180 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 je Schleuse (in JEDEM der 2 Netzwerke 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; die Literalkonstante war im XML als Int 0 deklariert).
//    Hier als "MW196" := W#16#0000; uebernommen (Word-Merker). Falls das Symbol
//    "MW196" in der Symboltabelle als Int deklariert ist, statt dessen
//    "MW196" := 0; verwenden.
//  - Endziel-Parameter ist je Zweig verschieden und war im Original eine Wort-
//    Literalkonstante: Schleuse 3323 -> 16#A000 (Leerpuffer-Bereich) -> W#16#A000;
//    Schleuse 4221 -> 16#AAAA (AMR-Bereich) -> W#16#AAAA.
//  - ShopGroup-Parameter war die getypte Konstante DINT#0 -> 1:1 uebernommen.
//  - Beide Zweige nutzen das identische Muster; nur Schleusen-DB-Pfad und Endziel variieren.
   VAR_TEMP
      Zielebene : Word;
   END_VAR

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

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

      3323:   // Schleuse 3323: (Trolley-Beladung)
         // Daten in Datenbank erzeugen:
         IF NOT "M180.0" AND "M180.1" AND ("DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse <> DINT#0) THEN
            "Trolleydaten_neu_anlegen"(
               Gesamt_Trolley_DL := "DLPtoHW_OmniFahren".Schleuse_3323.Schleuse.Gesamt_Trolley_DL,
               TrolleyID         := "DLPtoHW_OmniFahren".Schleuse_3323.Dyn.TrolleyID_Schleuse,
               Endziel           := W#16#A000,
               ShopGroup         := DINT#0);
         END_IF;

      4221:   // Schleuse 4221: (Vor ByPass zurück zum VP)
         // Daten in Datenbank erzeugen:
         IF NOT "M180.0" AND "M180.1" AND ("DLPtoHW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse <> DINT#0) THEN
            "Trolleydaten_neu_anlegen"(
               Gesamt_Trolley_DL := "DLPtoHW_OmniFahren".Schleuse_4221.Schleuse.Gesamt_Trolley_DL,
               TrolleyID         := "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.TrolleyID_Schleuse,
               Endziel           := W#16#AAAA,
               ShopGroup         := DINT#0);
         END_IF;

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