93 lines
3.7 KiB
Plaintext
93 lines
3.7 KiB
Plaintext
FUNCTION "FC_PutToHj" : Void
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
xInLocked : Bool;
|
|
END_VAR
|
|
|
|
VAR_IN_OUT
|
|
arInOutJam : Array[*] of "stCarrier";
|
|
xInOutStart : Bool;
|
|
nInOutPos : Int;
|
|
END_VAR
|
|
|
|
VAR_TEMP
|
|
tmpEmptyCarr : "stCarrier";
|
|
nCounter : DInt;
|
|
nArrayMax : Int;
|
|
nIdx : Int;
|
|
nStatus : Int;
|
|
xResult : Bool;
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
(*
|
|
!!! PRÜFEN OB DAS ALLES NOCH SO PASST! ÜBERNOMMEN VON MUBEA!!!
|
|
- Andere Jam Struktur (z.B. bStatus)
|
|
- HyperJam
|
|
|
|
FC fügt Teil in Staubereich an gewünschter Stelle dem Hyperjam hinzu und rückt den Rest nach
|
|
*)
|
|
|
|
#nArrayMax := DINT_TO_INT(UPPER_BOUND(ARR := #arInOutJam, DIM := 1));
|
|
|
|
REGION Returnbedingung
|
|
IF #nInOutPos < 1 OR #nInOutPos > #nArrayMax OR NOT #arInOutJam[1].bStatus.%X0 OR NOT #xInLocked THEN
|
|
//Wenn Positionsangabe zu klein oder zu groß ist, oder in Jam ist gar kein Carrier online, dann beende
|
|
#nInOutPos := 1;
|
|
#xInOutStart := FALSE;
|
|
RETURN;
|
|
END_IF;
|
|
END_REGION
|
|
|
|
REGION Funktion ausführen
|
|
IF #xInOutStart THEN
|
|
IF #arInOutJam[#nInOutPos].nBarcode > 2 THEN
|
|
REGION normale Barcodes
|
|
//Füge Carrier am Ende des Hyperjams ein nur wenn nicht Dummy oder BadRead, also nur bei normalem Code
|
|
"FC_TSHR_AddAtEnd"(stInTrolley := #arInOutJam[#nInOutPos],
|
|
nOutCounter => #nCounter,
|
|
xOutResult => #xResult,
|
|
arTSHR := "DB_HyperJam".stHyperJam.arCarrier);
|
|
//lösche den ausgewählten
|
|
#arInOutJam[#nInOutPos] := #tmpEmptyCarr;
|
|
IF #nInOutPos < #nArrayMax THEN
|
|
//Rücke danach auf um Lücke zu beseitigen aber nur wenn es nicht die letzte Stelle war
|
|
#nStatus := MOVE_BLK_VARIANT(SRC := #arInOutJam,
|
|
COUNT := INT_TO_UDINT(#nArrayMax - #nInOutPos),
|
|
SRC_INDEX := #nInOutPos,
|
|
DEST_INDEX := #nInOutPos - 1,
|
|
DEST => #arInOutJam);
|
|
//letztes löschen damit dort nichts doppeltes drinsteht
|
|
#arInOutJam[#nArrayMax] := #tmpEmptyCarr;
|
|
END_IF;
|
|
//fertig, setze Startbefehl zurück und Position auf Default
|
|
#nInOutPos := 1;
|
|
#xInOutStart := FALSE;
|
|
END_REGION
|
|
ELSE
|
|
REGION Dummy oder unbekannt
|
|
//Falls doch Dummy oder unbekannter Barcode, lösche nur
|
|
#arInOutJam[#nInOutPos] := #tmpEmptyCarr;
|
|
IF #nInOutPos < #nArrayMax THEN
|
|
//Rücke danach auf um Lücke zu beseitigen aber nur wenn es nicht die letzte Stelle war
|
|
#nStatus := MOVE_BLK_VARIANT(SRC := #arInOutJam,
|
|
COUNT := INT_TO_UDINT(#nArrayMax - #nInOutPos),
|
|
SRC_INDEX := #nInOutPos,
|
|
DEST_INDEX := #nInOutPos - 1,
|
|
DEST => #arInOutJam);
|
|
//letztes löschen damit dort nichts doppeltes drinsteht
|
|
#arInOutJam[#nArrayMax] := #tmpEmptyCarr;
|
|
END_IF;
|
|
//fertig, setze Startbefehl zurück und Position auf Default
|
|
#nInOutPos := 1;
|
|
#xInOutStart := FALSE;
|
|
END_REGION
|
|
END_IF;
|
|
END_IF;
|
|
END_REGION
|
|
|
|
END_FUNCTION
|
|
|