99 lines
5.0 KiB
Plaintext
99 lines
5.0 KiB
Plaintext
FUNCTION "HWtoVP_Draussen" : Void
|
|
TITLE = Draussen-FC: HW > VP
|
|
{ S7_Optimized_Access := 'FALSE' }
|
|
AUTHOR : AE
|
|
FAMILY : Module
|
|
NAME : Draussen
|
|
//SCL-Portierung des AWL-Bausteins FC182 "HWtoVP_Draussen" (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 globale Merker (MW190 =
|
|
//Schleusen-Nr, MD182 = ShopGroup, M180.6) liest und die Zielbausteine voll
|
|
//qualifiziert aufruft, gibt es keine echte Registerabhaengigkeit -> die Option
|
|
//entfaellt bei der SCL-Fassung, der Baustein ist damit direkt aus SCL aufrufbar
|
|
//(CASE 182 in MHMOmniSchleuse).
|
|
//
|
|
//Der indirekte Dispatch (AWL: je Netzwerk "L MW190 / L <Schleuse> / NE_I / JC")
|
|
//ist als CASE ueber die Schleusen-Nr ausgefuehrt. BEC/BEU je Zweig = nach dem
|
|
//CASE folgt nur noch das Bausteinende; BEC (bedingtes Bausteinende) ist als
|
|
//RETURN, das leere Netzwerkende als Fallthrough des CASE abgebildet. Die
|
|
//Merker-Schnittstelle (MW190/MD182/M180.6 vom Aufrufer) bleibt erhalten.
|
|
//
|
|
//ABWEICHUNGEN ZUM AWL-ORIGINAL (bei Inbetriebnahme pruefen!):
|
|
// - NW3: "L MD182 / L DINT#-1 / EQ_D" ist als DWORD_TO_DINT("MD182") = DINT#-1
|
|
// ausgefuehrt (bit-genau verhaltensgleich zu EQ_D; MD182 ist ein DWORD-Merker
|
|
// und wird andernorts via DINT_TO_DWORD beschrieben).
|
|
// - NW3: "L Weichen_Ziel / BTI / T Puffer_LinienNr" (BCD-Wort -> Int) ist ueber
|
|
// den Projekt-FC "BCD (4stellig)_to_INT" ausgefuehrt. Ergebnis identisch;
|
|
// das Fehlerverhalten bei ungueltiger BCD kann abweichen (BTI setzt BIE).
|
|
// - NW2: EQ_I-Vergleich Weichen_Ziel gegen die Wort-Konstante 16#4224 ist als
|
|
// direkte Wort-Gleichheit (= W#16#4224) abgebildet.
|
|
// - Word-Konstante 0 (Parameter "Endziel") als W#16#0 uebernommen.
|
|
// - Der FB "Daten_in_SendFIFO_speichern" wird ueber seinen globalen Instanz-DB
|
|
// "Daten_für_SendFIFO" aufgerufen; nicht versorgte Parameter behalten (wie im
|
|
// AWL) ihren Instanz-DB-Wert. Puffer_LinienNr wird zuvor direkt im Instanz-DB
|
|
// gesetzt (entspricht dem AWL-Transfer vor dem CALL).
|
|
VAR_TEMP
|
|
"Error.Bit" : Bool;
|
|
END_VAR
|
|
|
|
BEGIN
|
|
// NW1 (Rueckmeldung): Rueckmeldungen erst mal resetten
|
|
"M180.6" := FALSE; // Weiterfahrt von Ziel-FC erlaubt
|
|
|
|
// AWL: UC FC182 dispatcht ueber MW190 (Schleusen-Nr, vom Aufrufer gesetzt)
|
|
CASE WORD_TO_INT("MW190") OF
|
|
|
|
4207: // NW2: Schleuse 4207 (Vor ByPass vom LP): Ausgefahren ? -- Aufruf von Schleuse 4207?
|
|
// Gerade ? Also zum AMR-Bereich? -> dann Bausteinende (AWL: EQ_I / BEC)
|
|
IF "DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Weichen_Ziel = W#16#4224 THEN
|
|
RETURN; // Ja !
|
|
END_IF;
|
|
// Partner-Trolley will zu VP fahren:
|
|
// Bei Partner (Schleuse 4221) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
|
|
"DLPtoHW_OmniFahren".Schleuse_4221.Dyn.Sk.Akt_Schritt := 0;
|
|
|
|
3141: // NW3: Schleuse 3141: (Vor Einfahrt Kontrollplatz) -- Aufruf von Schleuse 3141 ?
|
|
// Bei Partner (Schleuse 3136) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
|
|
"DHWtoVP_OmniFahren".Schleuse_3136.Dyn.Sk.Akt_Schritt := 0;
|
|
// Leerer Trolley vom Leerpuffer? (ShopGroup = Leer-Trolley?) (AWL: L MD182 / L DINT#-1 / EQ_D / BEC)
|
|
IF DWORD_TO_DINT("MD182") = DINT#-1 THEN
|
|
RETURN; // Ja ! -> Kein Telegramm!
|
|
END_IF;
|
|
// GOHDUM an Host senden:
|
|
// AWL: L Weichen_Ziel / BTI / T Puffer_LinienNr (BCD-Wort -> Int)
|
|
"BCD (4stellig)_to_INT"(
|
|
BCD_Wert := "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.Weichen_Ziel,
|
|
Int_Wert => "Daten_für_SendFIFO".Puffer_LinienNr);
|
|
"Daten_für_SendFIFO"(
|
|
TelegrammKennung[1] := 'G',
|
|
TelegrammKennung[2] := 'O',
|
|
TelegrammKennung[3] := 'H',
|
|
TelegrammKennung[4] := 'D',
|
|
TelegrammKennung[5] := 'U',
|
|
TelegrammKennung[6] := 'M',
|
|
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse,
|
|
StationsNr := 3141,
|
|
Port := 2,
|
|
Ret_Val_FIFO_IN => "MB199",
|
|
Error => #"Error.Bit");
|
|
// Endziel wieder nullen:
|
|
"Trolleydaten_ändern"(
|
|
Gesamt_Trolley_DL := 1000,
|
|
TrolleyID := "DHWtoVP_OmniFahren".Schleuse_3141.Dyn.TrolleyID_Schleuse,
|
|
Endziel := W#16#0,
|
|
ShopGroup := DINT#0);
|
|
// AWL: BEU -> Bausteinende (CASE-Zweig endet)
|
|
|
|
3136: // NW4: Schleuse 3136: (Vor Einfahrt Kontrollplatz) -- Aufruf von Schleuse 3136 ?
|
|
// Bei Partner (Schleuse 3141) wieder mit Schritt 0 beginnen (erneuter Ziel-FC-Aufruf)
|
|
"DHWtoVP_OmniFahren".Schleuse_3141.Dyn.Sk.Akt_Schritt := 0;
|
|
// AWL: BEU -> Bausteinende (CASE-Zweig endet)
|
|
|
|
ELSE
|
|
; // unbekannte Schleusen-Nr -> nichts tun (AWL: JC ans Netzwerkende)
|
|
END_CASE;
|
|
// NW5: Ende (AWL: BE)
|
|
END_FUNCTION
|