_stRobotStatus, stAdmin => _stRobotAdmin, xReady=> , xError=> ); IF _stRobotCmd.xCmdChangeRequest THEN _stRobotCmd.xCmdChangeRequest := FALSE; END_IF _fbHVTester(xOpenChambers:= GVL_SCADA.xOpenAllChambers); _fbEtcher1( xOpenDoor:= GVL_SCADA.xOpenAllChambers, xOpenChuckClamp := GVL_SCADA.xOpenChuckClampEtcher1, xConfirmAlarms := GVL_SCADA.xErrAck); _fbEtcher2( xOpenDoor:= GVL_SCADA.xOpenAllChambers, xOpenChuckClamp := GVL_SCADA.xOpenChuckClampEtcher2, xConfirmAlarms := GVL_SCADA.xErrAck); _fbTrayFeederInput( stCommand:= , xConfirmAlarms := GVL_SCADA.xErrAck, stStatus=> GVL_SCADA.stTrayFeederInputState, stAdmin=> GVL_SCADA.stTRayFeederInputAdmin); _fbHeatCoolPlates(xConfirmAlarms:= GVL_SCADA.xErrAck); _fbAligner(stCommand:= , stStatus=> , stAdmin=> , xConfirmAlarms:= GVL_SCADA.xErrAck); // Call safety program PRG_Safety( xConfirmAlarms := GVL_SCADA.xErrAck, xRobotStopped := (_stRobotStatus.eStateCurrent <> E_PackMLState.EXECUTE)); // Handle robot cmds M_HandleRobotCmd(); // Main state machine CASE _iState OF 0: // Idle IF _xStartCycle THEN _xStartCycle := FALSE; // Only start with robot in idle IF _stRobotStatus.eStateCurrent = E_PackMLState.IDLE THEN _iState := 10; END_IF END_IF // Grab from position 1 10: // Prepare robot command _stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.GET_FROM_INPUT; _stRobotJobParams.rPosX := 88.0; _stRobotJobParams.rPosY := 79.0; _stRobotJobParams.byGripperSide := 3; _stRobotCmd.eCntrlCmd := E_PackMLCmd.START; _stRobotCmd.xCmdChangeRequest := TRUE; _iState := 20; // Wait for Robot to be done 20: IF (_stRobotStatus.eStateCurrent = E_PackMLState.IDLE) THEN _iState := 30; END_IF // Job aborted IF (_stRobotStatus.eStateCurrent = E_PackMLState.ABORTED) OR (_stRobotStatus.eStateCurrent = E_PackMLState.STOPPED) THEN _iState := 900; END_IF // Put part onto aligner 30: _stRobotJobParams.eJob := E_KukaRobot_JobNumberRobot.PUT_INTO_ALIGNER; _stRobotCmd.eCntrlCmd := E_PackMLCmd.START; _stRobotCmd.xCmdChangeRequest := TRUE; _iState := 40; // Align blank 40: END_CASE // ===== // DEBUG // ===== _tofTriggerTime(IN := _xStartTrigger); IF _xStartTrigger THEN _xStartTrigger := FALSE; END_IF _xTriggerCamera := _tofTriggerTime.Q; // Reset alarm reset request GVL_SCADA.xErrAck := FALSE; IF _xConfirmAlarms THEN _xConfirmAlarms := FALSE; END_IF]]>