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

63 lines
2.6 KiB
Plaintext

FUNCTION "FC_SHR_CheckStationPin" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
nInStation : Int;
xInTargetStation : Bool;
nInConvStations : Int; // neu hinzugefügt, statt Konstante
nInStationsMax : Int; // neu hinzugefügt, statt Konstante
END_VAR
VAR_OUTPUT
xOutStationHi : Bool;
xOutStationNHi : Bool;
xOutStationHiBefore : Bool;
nOutBarcode : DInt;
sOutBarcode : String;
END_VAR
VAR_IN_OUT
stInOutConveyorStations : "stConveyorStations";
END_VAR
VAR_TEMP
nCounter : Int;
xStationHi : Bool;
END_VAR
BEGIN
// *************************************************************
// Prüft ob Hanger aus dem Online-Register Station erreicht hat
// *************************************************************
IF #stInOutConveyorStations.stData.nTrolleysOnline = 0 OR
(#nInStation > #nInStationsMax) THEN
RETURN;
END_IF;
FOR #nCounter := 1 TO #nInConvStations DO
IF #stInOutConveyorStations.arTrolleysOnline[#nCounter].stCarrier.bStatus.%X0 AND // Teil vorhanden
((#stInOutConveyorStations.arTrolleysOnline[#nCounter].stPinValues.nTarget = #nInStation) OR NOT #xInTargetStation) AND // Zielstation GLEICH der eigenen Station
(#stInOutConveyorStations.arTrolleysOnline[#nCounter].stPinValues.nPosAct >= #stInOutConveyorStations.arStationsPos[#nInStation].nPosIncr) THEN
#xStationHi := 1; //sagt Abwurf abbiegen
IF #xStationHi THEN
#nOutBarcode := #stInOutConveyorStations.arTrolleysOnline[#nCounter].stCarrier.nBarcode;
END_IF;
EXIT;
ELSIF
#stInOutConveyorStations.arTrolleysOnline[#nCounter].stCarrier.bStatus.%X0 AND // Teil vorhanden
((#stInOutConveyorStations.arTrolleysOnline[#nCounter].stPinValues.nTarget > #nInStation) OR NOT #xInTargetStation) AND // Zielstation GRÖßER der eigenen Station
(#stInOutConveyorStations.arTrolleysOnline[#nCounter].stPinValues.nPosAct >= #stInOutConveyorStations.arStationsPos[#nInStation].nPosIncr) AND
(#stInOutConveyorStations.arTrolleysOnline[#nCounter].stPinValues.nPosAct < #stInOutConveyorStations.arStationsPos[#nInStation].nPosIncr + 150) THEN
#xOutStationNHi := 1; //sagt Abwurf geradeaus
EXIT;
END_IF;
END_FOR;
#xOutStationHi := #xStationHi;
END_FUNCTION