Files
HundM_Fortna/=A01+UH01-KF00/Programmbausteine/200_MFR/FC_PutToHj.scl
T

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