Files
HundM_Fortna/2_ILSLib/FC/FC_Route.scl
T
2026-06-29 16:29:41 +02:00

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