FUNCTION "HWtoAMRZielFC" : Void
TITLE = Ziel-FC: HW>AMR
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : AE
FAMILY : Module
NAME : Ziel
VERSION : 0.1
//SCL-Portierung des AWL-Bausteins FC181 "HWtoAMRZielFC" (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 den globalen Merker MW190
//(Schleusen-Nr) liest und nur den Merker M180.6 (Freigabe Weiterfahrt) setzt,
//gibt es keine echte Registerabhaengigkeit -> die Option entfaellt bei der
//SCL-Fassung, der Baustein ist damit direkt aus SCL aufrufbar (CASE 181 in
//MHMOmniSchleuse).
//
//Der indirekte Dispatch (AWL: je Netzwerk "L MW190 / L <Schleuse> / NE_I / JC")
//ist als CASE ueber die Schleusen-Nr ausgefuehrt. Im Original wird nach einem
//Treffer die Weiterfahrt freigegeben und der Baustein sofort verlassen (BEU);
//da MW190 nur einen Wert hat, ist der CASE dazu aequivalent. Die Merker-
//Schnittstelle (MW190 vom Aufrufer gesetzt, M180.6 Rueckmeldung) bleibt erhalten.
//
//ABWEICHUNGEN ZUM AWL-ORIGINAL (bei Inbetriebnahme pruefen!):
//  - Der TIA-Bausteinname enthaelt kein '>' (XML <Name>=HWtoAMRZielFC), obwohl der
//    Bausteintitel "Ziel-FC: HW>AMR" lautet. Der Aufruf in MHMOmniSchleuse.scl ist
//    "HWtoAMRZielFC"() -> die Funktion heisst hier ebenso HWtoAMRZielFC (kein '>').
//  - MW190 wird als WORD_TO_INT(MW190) gegen die dezimalen Schleusen-Nrn verglichen
//    (im AWL "L MW190 / L <n> / NE_I", n als Int-Konstante 3004 bzw. 3565).
   VAR_TEMP 
      Ziel_hex : Word;
      Ziel_int : Int;
      Zielebene : Word;
      Error : Byte;
      Position : Int;
      Lager_DB : Int;
      Lager_DW : Int;
      AR1Zeiger : DWord;   // Statt AR1 (ging nur bis DB-Laenge <= 8191 Bytes)
      AR1Start : DInt;   // Startwert mit Offset 0
      SSDW : Int;
      EndZiel : Word;
      Variante : Int;
      AbrufID : DInt;
      Fahrlisten_TrolleyID : DInt;
      Fahrlisten_AbrufID : DInt;
      Fahrlisten_Lager : Int;
      Trolley_unbekannt : Bool;   // Trolley ist nicht in DL
      Express_Abruf : Bool;
   END_VAR


BEGIN
	
	   // NW1 "Rueckmeldung": Rueckmeldungen erst mal resetten
	   "M180.6" := FALSE;   // Weiterfahrt von Ziel-FC (noch nicht erlaubt)
	
	   // AWL: UC FC181 dispatcht ueber MW190 (Schleusen-Nr, vom Aufrufer gesetzt).
	   // Je Treffer wird die Weiterfahrt freigegeben (S M180.6) und der Baustein
	   // im Original per BEU verlassen.
	   CASE WORD_TO_INT("MW190") OF
	
	      3004:   // NW2 - Schleuse 3004: (BST 3)
	         "M180.6" := TRUE;   // Weiterfahrt ist erlaubt
	
	      3565:   // NW3 - Schleuse 3565: (BST 4)
	         "M180.6" := TRUE;   // Weiterfahrt ist erlaubt
	
	      ELSE
	         ;   // unbekannte Schleusen-Nr -> keine Weiterfahrt-Freigabe
	   END_CASE;
	
END_FUNCTION

