// ФАЗА 3: Горизонтальное перемещение к источнику
//----------------------------------------------------------------------------------------------------------
IF aoPhase = 3 THEN
Horizmove(getorput := TRUE);
IF F_trig_xdrivedone.Q OR
(TargetVars.TargetPosition.dintTargetPosition >= Feedbackposition.dintFeedbackPosition - 15 AND
TargetVars.TargetPosition.dintTargetPosition <= Feedbackposition.dintFeedbackPosition + 15) THEN
aoPhase := 4;
horizCmdActive := FALSE;
gvlDriveInterface.xCmdTrigger := FALSE;
END_IF;
END_IF;
// ФАЗА 4: Подъём
//----------------------------------------------------------------------------------------------------------
IF aoPhase = 4 THEN
IF LiftUp() THEN
aoPhase := 5;
horizCmdActive := TRUE;
END_IF
END_IF
// ФАЗА 5: Закрывание поддона
//----------------------------------------------------------------------------------------------------------
IF aoPhase = 5 THEN
IF gvl.aoPosition = 0 OR gvl.aoPosition =1 OR gvl.aoPosition = 16 OR gvl.aoPosition =13 OR gvl.aoPosition =8 OR (gvl.aoPosition >= 101 AND gvl.aoPosition <= 103) THEN aoPhase := 6;
ELSE
IF Trayclose() THEN
trayState := 6;
aoPhase := 6;
horizCmdActive := TRUE;
END_IF
END_IF
END_IF
// ФАЗА 6: Горизонтальное перемещение к приёмнику
//----------------------------------------------------------------------------------------------------------
IF aoPhase = 6 THEN
Horizmove(getorput := FALSE);
IF F_trig_xdrivedone.Q OR
(TargetVars.TargetPosition.dintTargetPosition >= Feedbackposition.dintFeedbackPosition - 15 AND
TargetVars.TargetPosition.dintTargetPosition <= Feedbackposition.dintFeedbackPosition + 15) THEN
aoPhase := 7;
horizCmdActive := FALSE;
gvlDriveInterface.xCmdTrigger := FALSE;
END_IF
END_IF
// ФАЗА 7: Поддон открыть
//----------------------------------------------------------------------------------------------------------
IF aoPhase = 7 THEN
IF Trayopen() THEN
aoPhase := 8;
END_IF
END_IF
// ФАЗА 8: Опускание и завершение
//----------------------------------------------------------------------------------------------------------
IF aoPhase = 8 THEN
IF LiftDown() THEN
gvl.transitTimeMeasured := time_to_real(gvl.sysTime - moveStartTime) / 1000.0; // переводим в секунды
IF gvl.transitTimeMeasured < 60 THEN
UpdateTransitTime(srcPos := gvl.aoJobSource, dstPos := gvl.aoJobDest, measured := gvl.transitTimeMeasured);
END_IF
OnMoveComplete();
gvl.aoBusy := FALSE;
aoPhase := 0;
gvl.candidate := 0;
END_IF
END_IF
END_IF
END_IF