141 lines
6.2 KiB
Plaintext
141 lines
6.2 KiB
Plaintext
FUNCTION "FC_Route" : Void
|
|
{ S7_Optimized_Access := 'TRUE' }
|
|
VERSION : 0.1
|
|
VAR_INPUT
|
|
xInSingle : Bool; // true = einzelner Carrier wird losgeschickt, false = Array
|
|
xInSeparate : Bool; // Carrier und Ladung trennen
|
|
xInSepEdge : Bool; // Flanke vom Separator
|
|
xInSensor : Bool; // Sensor Eingang falls dieser verwendet wird
|
|
xInDelay : Bool; // true = Car werden auf den Weg geschickt bis Sensor kommt
|
|
stInCarrier : "stCarrier"; // Einzelner Carrier für den Eingang
|
|
END_VAR
|
|
|
|
VAR_OUTPUT
|
|
stOutBookingInfo : "stEventBookingInfo"; // Infos für Logging
|
|
END_VAR
|
|
|
|
VAR_IN_OUT
|
|
arJamEntr : Array[*] of "stCarrier"; // Jam am Eingang (Platzhalter verwenden falls kein Jam vorhanden)
|
|
arOnTheWay : Array[*] of "stCarrier"; // Carrier die für die Travel-Time unterwegs sind
|
|
arJamExit : Array[*] of "stCarrier"; // Jam am Ausgang (Platzhalter verwenden falls kein Jam vorhanden)
|
|
END_VAR
|
|
|
|
VAR_TEMP
|
|
stCarrier : "stCarrier"; // Merker vom Eingang
|
|
stLoadOnly : "stCarrier"; // Nur Ladung am Ende
|
|
stCarrierOnly : "stCarrier";
|
|
nCounter1 : DInt; // Temp für TSHR
|
|
nCounter2 : DInt; // Temp für TSHR
|
|
xResult1 : Bool; // Temp für TSHR
|
|
xResult2 : Bool; // Temp für TSHR
|
|
END_VAR
|
|
|
|
|
|
BEGIN
|
|
REGION Abfrage ob Singlecarrier oder Array
|
|
IF #xInSingle THEN
|
|
#stCarrier := #stInCarrier; //falls kein Array vorhanden, wird hier ein einzlener Carrier verwendet
|
|
ELSE
|
|
#stCarrier := #arJamEntr[1]; //erster Carrier des Eingangs-Staubereichs
|
|
END_IF;
|
|
END_REGION
|
|
REGION Weiterbuchen
|
|
IF NOT #xInDelay THEN //Shift zum Ziel-Bereich sofort
|
|
IF #xInSepEdge AND NOT #xInSeparate THEN
|
|
REGION Carrier normal weiterschieben
|
|
"FC_TSHR_AddAtEnd"(stInTrolley := #stCarrier,
|
|
nOutCounter => #nCounter1,
|
|
xOutResult => #xResult1,
|
|
arTSHR := #arJamExit);
|
|
|
|
"FC_TSHR_Shift"(xInShiftBack := TRUE,
|
|
arTSHR := #arJamEntr);
|
|
|
|
REGION Event Log
|
|
// Info rausgeben an Log-Baustein
|
|
#stOutBookingInfo.sBarcode := DELETE(IN := DINT_TO_STRING(#stCarrier.nBarcode), L := 1, P := 1);
|
|
#stOutBookingInfo.sDest := DELETE(IN := INT_TO_STRING(#stCarrier.nDestination), L := 1, P := 1);
|
|
// #stOutBookingInfo.sJobNo := DELETE(IN := DINT_TO_STRING(#stCarrier.stLoadData.nJobNo), L := 1, P := 1);
|
|
// #stOutBookingInfo.sProductNo := DELETE(IN := DINT_TO_STRING(#stCarrier.stLoadData.nProductNo), L := 1, P := 1);
|
|
|
|
END_REGION
|
|
|
|
|
|
END_REGION
|
|
ELSIF #xInSepEdge AND #xInSeparate THEN
|
|
REGION Carrier/Ladung getrennt weiterschieben
|
|
|
|
#stCarrierOnly := #stCarrier;
|
|
#stCarrierOnly.bStatus.%X1 := FALSE;
|
|
#stLoadOnly := #stCarrier;
|
|
|
|
REGION Carrier
|
|
|
|
"FC_TSHR_AddAtEnd"(stInTrolley := #stCarrierOnly,
|
|
nOutCounter => #nCounter1,
|
|
xOutResult => #xResult1,
|
|
arTSHR := #arJamExit);
|
|
|
|
END_REGION
|
|
|
|
REGION Ladung
|
|
"FC_TSHR_AddAtEnd"(stInTrolley := #stLoadOnly,
|
|
nOutCounter => #nCounter1,
|
|
xOutResult => #xResult1,
|
|
arTSHR := #arOnTheWay);
|
|
|
|
END_REGION
|
|
|
|
"FC_TSHR_Shift"(xInShiftBack := TRUE,
|
|
arTSHR := #arJamEntr);
|
|
|
|
REGION Event Log
|
|
// Info rausgeben an Log-Baustein
|
|
#stOutBookingInfo.sBarcode := DELETE(IN := DINT_TO_STRING(#stCarrier.nBarcode), L := 1, P := 1);
|
|
#stOutBookingInfo.sDest := DELETE(IN := INT_TO_STRING(#stCarrier.nDestination), L := 1, P := 1);
|
|
END_REGION
|
|
|
|
END_REGION
|
|
END_IF;
|
|
ELSE //Shift zum Ziel-Bereich über Verzögerung
|
|
IF #xInSepEdge THEN
|
|
REGION Carrier auf den Weg schieben
|
|
"FC_TSHR_AddAtEnd"(stInTrolley := #stCarrier,
|
|
nOutCounter => #nCounter1,
|
|
xOutResult => #xResult1,
|
|
arTSHR := #arOnTheWay);
|
|
|
|
"FC_TSHR_Shift"(xInShiftBack := TRUE,
|
|
arTSHR := #arJamEntr);
|
|
END_REGION
|
|
|
|
REGION Event Log
|
|
// Info rausgeben an Log-Baustein
|
|
#stOutBookingInfo.sBarcode := DELETE(IN := DINT_TO_STRING(#stCarrier.nBarcode), L := 1, P := 1);
|
|
#stOutBookingInfo.sDest := DELETE(IN := INT_TO_STRING(#stCarrier.nDestination), L := 1, P := 1);
|
|
END_REGION
|
|
|
|
END_IF;
|
|
IF #xInSensor THEN
|
|
REGION Carrier unterwegs wird durch Sensor quittiert
|
|
"FC_TSHR_AddAtEnd"(stInTrolley := #arOnTheWay[1],
|
|
nOutCounter => #nCounter2,
|
|
xOutResult => #xResult2,
|
|
arTSHR := #arJamExit);
|
|
|
|
"FC_TSHR_Shift"(xInShiftBack := TRUE,
|
|
arTSHR := #arOnTheWay);
|
|
END_REGION
|
|
|
|
REGION Event Log
|
|
// Info rausgeben an Log-Baustein
|
|
#stOutBookingInfo.sBarcode := DELETE(IN := DINT_TO_STRING(#stCarrier.nBarcode), L := 1, P := 1);
|
|
#stOutBookingInfo.sDest := DELETE(IN := INT_TO_STRING(#stCarrier.nDestination), L := 1, P := 1);
|
|
END_REGION
|
|
|
|
END_IF;
|
|
END_IF;
|
|
END_REGION
|
|
END_FUNCTION
|
|
|