Files
HundM_Fortna/=A01+UH01-KF00/Programmbausteine/FC_BARCODE_SEARCH.scl
T

189 lines
8.2 KiB
Plaintext

FUNCTION "FC_BARCODE_SEARCH" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
nInArea : Int; // Suchort eingrenzen: 0 = alles durchsuchen / xxx00 = nur hier suchen
xInActive : Bool; // Flanke für Starten des Abrufes
END_VAR
VAR_OUTPUT
xOutNewRetrieve : Bool; // Flanke als Ausgang dass neuer Abruf VOM LAGER stattfindet
nOutMissingBarcode : DInt; // Fehlteil
xOutError : Bool; // FALSE: Kein Fehler | TRUE: Während der Bearbeitung ist ein Fehler aufgetreten
nOutStatus : Int; // Fehlercodes
END_VAR
VAR_IN_OUT
InOutTest : Array[*] of "stCarrier"; // Liste mit dem Jambereich des Lagerausgangs
InOutStructRetrieve : Struct // Struktur in der Abruf vorgegeben wird
nBarcode : DInt;
nDestination : USInt;
END_STRUCT;
InOutLocalized : "SearchResult"; // Ergebnis
END_VAR
VAR_TEMP
nBarcode : DInt;
nDestination : Int;
nIdx1 : Int;
nIdx2 : Int;
nIdx3 : Int;
nLine : Int; // Zwischenmerker für Suchergebnis
nPos : Int; // Zwischenmerker für Suchergebnis
nArrTestMax : Int;
xPartFound : Bool; // Zwischenmerker Teil gefunden
END_VAR
VAR CONSTANT
ERR_RETRIEVE_INVALID : Int := 3000; // Ungültige Eingaben jeglicher Art
ERR_RETRIEVE_EMPTY : Int := 3001; // NIU
ERR_RETRIEVE_NOT_FOUND : Int := 3001; // Nicht gefunden
ERR_RETRIEVE_MISCERROR : Int := 3003; // NIU
"Store1.1.1" : Int := 1;
"Store1.1.2" : Int := 2;
END_VAR
BEGIN
(*
************************************************************************************
Sucht in Vorsortierlinie sowie Lager nach dem Teil welches als EXPRESS abgerufen werden soll
************************************************************************************
*)
IF #xInActive THEN
REGION Array-Größen ermitteln
#nArrTestMax := DINT_TO_INT(UPPER_BOUND(ARR := #InOutTest, DIM := 1));
END_REGION
REGION Return Bedingung TO DO
IF #InOutStructRetrieve.nDestination < "cDestLvl1B1" OR #InOutStructRetrieve.nDestination > "cDestExit" OR //kein gültiges Ziel
(#InOutStructRetrieve.nBarcode / 10000000 <> 2) OR //Wenn hier etwas anderes als 2 rauskommt, dann ist der angeforderte Barcode nicht 8-stellig oder beginnt nicht mit 2 für "MiniTrolley"
(((#InOutStructRetrieve.nBarcode / 10) MOD 100) MOD 2 <> 1) //Wenn hier etwas anderes als 1 rauskommt, dann ist die 10er Stelle nicht ungerade
THEN
#xOutError := TRUE;
#nOutStatus := #ERR_RETRIEVE_INVALID;
#nOutMissingBarcode := 0;
RETURN;//Abruf ungültig
ELSE //Wenn Eingaben in Ordnung, dann speichere in Temp
#nBarcode := #InOutStructRetrieve.nBarcode;
#nDestination := #InOutStructRetrieve.nDestination;
END_IF;
END_REGION
REGION Durchsuche TEST
// FOR #nIdx1 := 1 TO #nArrTestMax DO
// IF #nBarcode = #InOutTest[#nIdx1].stLoadData.nProductNo AND
// #InOutTest[#nIdx1].stLoadData.nDestinationNo <> INT_TO_USINT(#nTarget) AND
// #InOutTest[#nIdx1].stLoadData.nDestinationNo <> "cDestQUALITY" (* AND
// #InOutExitArray[#nIdx1].stLoadData.nDestinationNo <> "cDestSEAT" AND
// #InOutExitArray[#nIdx1].stLoadData.nDestinationNo <> "cDestREST" *) THEN
// // #tempPartFound := TRUE;
// REGION Schreibe Daten
// "FC_GetBackFcPart"(stInPart := #InOutTest[#nIdx1],
// xOutput => "DB_RetrieveSearchResult".xGetBackFc);
// #InOutTest[#nIdx1].stLoadData.nDestinationNo := INT_TO_USINT(#nTarget);
// #InOutTest[#nIdx1].stLoadData.nJobNo := #nJobNo;
// END_REGION
// #InOutLocalized.nBarcode := #nBarcode;
// #InOutLocalized.Storage.Line := 0;
// #InOutLocalized.Storage.Pos := 0;
// #InOutLocalized.JamTest := #nIdx1;
// #InOutLocalized.205_1 := 0;
// #InOutLocalized.205_2 := 0;
// // #xOutNewRetrieve := TRUE;
// #xOutError := FALSE;
// #nOutStatus := 0;
// #nOutMissingBarcode[1] := 0;
// #nOutMissingBarcode[2] := 0;
// RETURN; //Suche unterbrechen wenn Teil gefunden wurde
// END_IF;
// END_FOR;
END_REGION
REGION Durchsuche Lager 1.1
IF #nInArea = 0 OR #nInArea = "cDest1100" THEN
FOR #nIdx1 := 1 TO "cNoLines" DO //Lagerlinien
FOR #nIdx2 := 1 TO "cNoPositions" DO //Positionen pro Linie
IF #nBarcode = "DB_JamBuffer101".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
// "DB_Storage2.1.1".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
(#nPos = 0 OR #nPos > #nIdx2) THEN
//***********falls gefunden*********
#nLine := #nIdx1;
#nPos := #nIdx2;
// #tempPartFound := TRUE;
EXIT; //Suche unterbrechen wenn Teil gefunden wurde
END_IF;
IF #nIdx2 = "cNoPositions" THEN
EXIT; //nach letzter Position -> Schleife beenden
END_IF;
END_FOR;
IF #nIdx1 = "cNoLines" THEN
EXIT; //nach letzter Linie -> Schleife beenden
END_IF;
END_FOR;
END_IF;
REGION Schreibe Daten
IF #nPos > 0 THEN
"DB_JamBuffer101".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
#InOutLocalized.nBarcode := #nBarcode;
#InOutLocalized.Storage.Store := #"Store1.1.1";
#InOutLocalized.Storage.Line := #nLine;
#InOutLocalized.Storage.Pos := #nPos;
#InOutLocalized.JamTest := 0;
#xOutNewRetrieve := TRUE;
#xOutError := FALSE;
#nOutStatus := 0;
#nOutMissingBarcode := 0;
RETURN;
END_IF;
END_REGION
END_REGION
REGION Durchsuche Lager 1.2
IF #nInArea = 0 OR #nInArea = "cDest1200" THEN
FOR #nIdx1 := 1 TO "cNoLines" DO //Lagerlinien
FOR #nIdx2 := 1 TO "cNoPositions" DO //Positionen pro Linie
IF #nBarcode = "DB_JamBuffer102".arLine[#nIdx1].arCarrier[#nIdx2].nBarcode AND
// "DB_Storage2.1.2".arLine[#nIdx1].arCarrier[#nIdx2].nTarget <> INT_TO_USINT(#nTarget) AND
(#nPos = 0 OR #nPos > #nIdx2) THEN
//***********falls gefunden*********
#nLine := #nIdx1;
#nPos := #nIdx2;
// #tempPartFound := TRUE;
EXIT; //Suche unterbrechen wenn Teil gefunden wurde
END_IF;
IF #nIdx2 = "cNoPositions" THEN
EXIT; //nach letzter Position -> Schleife beenden
END_IF;
END_FOR;
IF #nIdx1 = "cNoLines" THEN
EXIT; //nach letzter Linie -> Schleife beenden
END_IF;
END_FOR;
END_IF;
REGION Schreibe Daten
IF #nPos > 0 THEN
"DB_JamBuffer102".arLine[#nLine].arCarrier[#nPos].nDestination := INT_TO_USINT(#nDestination);
#InOutLocalized.nBarcode := #nBarcode;
#InOutLocalized.Storage.Store := #"Store1.1.2";
#InOutLocalized.Storage.Line := #nLine;
#InOutLocalized.Storage.Pos := #nPos;
#InOutLocalized.JamTest := 0;
#xOutNewRetrieve := TRUE;
#xOutError := FALSE;
#nOutStatus := 0;
#nOutMissingBarcode := 0;
RETURN;
END_IF;
END_REGION
END_REGION
END_IF;
END_FUNCTION