using System; namespace SHARP_CLAS_UI { public class UnloaderReverseStage : ReverseStage { #region Enum public enum StageSteps { S0000_WAIT, S1000_PICK_AOI_STAGE_START, S1100_VACUUM_ON, S1110_AOI_STAGE_VACUUM_OFF, S1120_DATA_SET, S9000_SCRAP_START, S9100_VACUUM_OFF, S9110_DATA_SET, S9999_STEP_END, } #endregion #region Property public bool IsPlaceEnable { get { if(IsWorkEnd && IsStayPosition && IsExist == false) { return true; } else { return false; } } } public bool IsPickEnable { get { if (IsExist && Step == UnloaderReverseStageSteps.S2230_PANEL_EXIST_CHECK) { return true; } else { return false; } } } public override Panel_Info Panel1 { get { return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Reverse_Stage_1); } set { Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.ULD_Reverse_Stage_1, value); } } public override Panel_Info Panel2 { get { return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Reverse_Stage_2); } set { Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.ULD_Reverse_Stage_2, value); } } public UnloaderReverseStageSteps Step { get { return _step; } set { _step = value; } } public bool IsPositionZ1Up { get { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_Z_Up_Position, out value); get_position = double.Parse($"{value}"); return MotorZ1.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public bool IsPositionZ1Down { get { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_Z_Down_Position, out value); get_position = double.Parse($"{value}"); return MotorZ1.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public bool IsPositionR1Degree0 { get { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_T_0_Position, out value); get_position = double.Parse($"{value}"); return MotorR1.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public bool IsPositionR1Degree180 { get { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_T_180_Position, out value); get_position = double.Parse($"{value}"); return MotorR1.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public bool IsPositionZ2Up { get { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_Z_Up_Position, out value); get_position = double.Parse($"{value}"); return MotorZ2.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public bool IsPositionZ2Down { get { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_Z_Down_Position, out value); get_position = double.Parse($"{value}"); return MotorZ2.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public bool IsPositionR2Degree0 { get { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_T_0_Position, out value); get_position = double.Parse($"{value}"); return MotorR2.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public bool IsPositionR2Degree180 { get { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_T_180_Position, out value); get_position = double.Parse($"{value}"); return MotorR2.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } } public override bool IsWorkEnd { get { if (Step == UnloaderReverseStageSteps.S0000_WAIT) { return true; } else { return false; } } } public override bool IsStayPosition { get { if (IsPositionR1Degree180 && IsPositionR2Degree180 && IsPositionZ1Down && IsPositionZ2Down) { return true; } else { return false; } } } #endregion #region Field private UnloaderReverseStageSteps _step; private UnloaderReverseStageSteps _oldStep; private ReverseStageHomeSteps _homeStep; public StageSteps _stage1Step; public StageSteps _stage2Step; public Time_Checker Tact_Move = new Time_Checker(); #endregion #region Construct public UnloaderReverseStage(Equipment equipment) : base(equipment, MotorAxis.ULD_Rotation_Unit_Z_1, MotorAxis.ULD_Rotation_Unit_R_1, MotorAxis.ULD_Rotation_Unit_Z_2, MotorAxis.ULD_Rotation_Unit_R_2, "UnloaderReverseStage") { Step = UnloaderReverseStageSteps.S0000_WAIT; _oldStep = UnloaderReverseStageSteps.S0000_WAIT; Stage1.Initialize(OutputData.ULD_Cell_Reverse_1_Vaccum_On_Sol_Valve, OutputData.ULD_Cell_Reverse_1_Blow_On_Sol_Valve, InputData.ULD_Cell_Reverse_1_Vaccum_On_Check, En_Alarm_List.AL_0840_ULD_REVERSE_1_VACUUM_ON_CHECK); Stage2.Initialize(OutputData.ULD_Cell_Reverse_2_Vaccum_On_Sol_Valve, OutputData.ULD_Cell_Reverse_2_Blow_On_Sol_Valve, InputData.ULD_Cell_Reverse_2_Vaccum_On_Check, En_Alarm_List.AL_0841_ULD_REVERSE_2_VACUUM_ON_CHECK); pauseDisableList.Add(UnloaderReverseStageSteps.S1205_Z_POSITION_CHECK); pauseDisableList.Add(UnloaderReverseStageSteps.S1215_R_POSITION_CHECK); pauseDisableList.Add(UnloaderReverseStageSteps.S1225_Z_POSITION_CHECK); pauseDisableList.Add(UnloaderReverseStageSteps.S2205_Z_POSITION_CHECK); pauseDisableList.Add(UnloaderReverseStageSteps.S2215_R_POSITION_CHECK); pauseDisableList.Add(UnloaderReverseStageSteps.S2225_Z_POSITION_CHECK); MotorR1.Check_Jog_Interlock = Jog_Interlock; MotorR1.Check_Move_Interlock = Move_Interlock; MotorZ1.Check_Jog_Interlock = Jog_Interlock; MotorZ1.Check_Move_Interlock = Move_Interlock; MotorR2.Check_Jog_Interlock = Jog_Interlock; MotorR2.Check_Move_Interlock = Move_Interlock; MotorZ2.Check_Jog_Interlock = Jog_Interlock; MotorZ2.Check_Move_Interlock = Move_Interlock; } #endregion #region Function private bool Move_Interlock() { if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { return true; } return false; } private bool Jog_Interlock(bool positive) { if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { return true; } return false; } public void Init_Seq() { Step = UnloaderReverseStageSteps.S0000_WAIT; _homeStep = ReverseStageHomeSteps.S0000_WAIT; Tact_Move.Reset(); } private void ExecuteAuto() { if(Step == UnloaderReverseStageSteps.S0000_WAIT) { if(IsExist) { Step = UnloaderReverseStageSteps.S2000_PANEL_UNLOAD_START; } else { if(equipment.Cur_Main_Recipe.tray_info.Uld_Reverse && equipment.unloader.Handler1.IsStayPosition && equipment.unloader.Handler1.IsExist == false && equipment.after.AoiStage.IsPickEnable) { Step =UnloaderReverseStageSteps.S1000_PICK_AOI_STAGE_START; } } } } public override void MonitoringStatus() { if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual) { if (Stage1.IsWorkEnd && Stage1.VacuumSolOn && Stage1.IsVacuumSensor == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0840_ULD_REVERSE_1_VACUUM_ON_CHECK); } if (Stage2.IsWorkEnd && Stage2.VacuumSolOn && Stage2.IsVacuumSensor == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0841_ULD_REVERSE_2_VACUUM_ON_CHECK); } } if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { if (MotorZ1.MotionComplete == false) { MotorZ1.Move_Stop(); } if (MotorR1.MotionComplete == false) { MotorR1.Move_Stop(); } if (MotorZ2.MotionComplete == false) { MotorZ2.Move_Stop(); } if (MotorR2.MotionComplete == false) { MotorR2.Move_Stop(); } } } public override void ExecuteStep() { if (_oldStep != Step) { sequenceChangedTime.Restart(); _oldStep = Step; WriteSequenceLog(Step.ToString()); } Stage1.ExecuteProcess(); Stage2.ExecuteProcess(); Seq_Stage1Step(); Seq_Stage2Step(); if (UnitMode == En_Equipment_Mode.Stop) { Init_Seq(); isHomeComplete = false; return; } else if (UnitMode == En_Equipment_Mode.Pause) { sequenceChangedTime.Stop(); return; } else if (UnitMode == En_Equipment_Mode.Home) { if (IsHomeComplete == false) { ExecuteHome(); } return; } if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual) { sequenceChangedTime.Start(); if (equipment.equip_mode == En_Equipment_Mode.Pause) { if (pauseDisableList.Contains(Step) == false) { UnitMode = En_Equipment_Mode.Pause; return; } } if (UnitMode == En_Equipment_Mode.Auto) ExecuteAuto(); Seq_PickAoiStage(); Seq_Unload(); } } public void ExecuteHome() { switch (_homeStep) { case ReverseStageHomeSteps.S0000_WAIT: { _homeStep = ReverseStageHomeSteps.S1000_STATUS_CHECK; break; } case ReverseStageHomeSteps.S1000_STATUS_CHECK: { if (MotorR1.ErrorStop || MotorZ1.ErrorStop || MotorR2.ErrorStop || MotorZ2.ErrorStop) { if (MotorR1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0371_ULD_ROTATION_UNIT_R_1_ERROR_STOP); } if (MotorZ1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0381_ULD_ROTATION_UNIT_Z_1_ERROR_STOP); } if (MotorR2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0391_ULD_ROTATION_UNIT_R_2_ERROR_STOP); } if (MotorZ2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0211_LD_ROTATION_UNIT_Z_2_ERROR_STOP); } } else if (!MotorR1.PowerOn || !MotorZ1.PowerOn || !MotorR2.PowerOn || !MotorZ2.PowerOn) { if (MotorR1.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0370_ULD_ROTATION_UNIT_R_1_POWER_OFF); } if (MotorZ1.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0380_ULD_ROTATION_UNIT_Z_1_POWER_OFF); } if (MotorR2.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0390_ULD_ROTATION_UNIT_R_2_POWER_OFF); } if (MotorZ2.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0400_ULD_ROTATION_UNIT_Z_2_POWER_OFF); } } else { if (equipment.unloader.Handler1.IsHomeComplete && equipment.after.Handler2.IsHomeComplete) _homeStep = ReverseStageHomeSteps.S2000_Z_HOME_START; } break; } case ReverseStageHomeSteps.S2000_Z_HOME_START: { if (MotorZ1.Home()) { if (MotorZ2.Home()) { homeCheckedTime.Restart(); _homeStep = ReverseStageHomeSteps.S2100_Z_HOME_CHECK; } } break; } case ReverseStageHomeSteps.S2100_Z_HOME_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (!MotorZ1.IsHomed || !MotorZ2.IsHomed) { if (MotorZ1.Homing == false && MotorZ1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0381_ULD_ROTATION_UNIT_Z_1_ERROR_STOP); } if (MotorZ2.Homing == false && MotorZ2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0401_ULD_ROTATION_UNIT_Z_2_ERROR_STOP); } } else { _homeStep = ReverseStageHomeSteps.S2200_R_HOME_START; } break; } case ReverseStageHomeSteps.S2200_R_HOME_START: { if (MotorR1.Home()) { if (MotorR2.Home()) { homeCheckedTime.Restart(); _homeStep = ReverseStageHomeSteps.S2300_R_HOME_CHECK; } } break; } case ReverseStageHomeSteps.S2300_R_HOME_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (!MotorR1.IsHomed || !MotorR2.IsHomed) { if (MotorR1.Homing == false && MotorR1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0371_ULD_ROTATION_UNIT_R_1_ERROR_STOP); } if (MotorR2.Homing == false && MotorR2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0391_ULD_ROTATION_UNIT_R_2_ERROR_STOP); } } else { _homeStep = ReverseStageHomeSteps.S3000_R_MOVE_180_DEG; } break; } case ReverseStageHomeSteps.S3000_R_MOVE_180_DEG: { if (Move_R_1_Deg_180_Position()) { if (Move_R_2_Deg_180_Position()) { homeCheckedTime.Restart(); _homeStep = ReverseStageHomeSteps.S3100_R_POSITION_CHECK; } } break; } case ReverseStageHomeSteps.S3100_R_POSITION_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (MotorR1.ErrorStop || MotorR2.ErrorStop) { if (MotorR1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0371_ULD_ROTATION_UNIT_R_1_ERROR_STOP); } if (MotorR2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0401_ULD_ROTATION_UNIT_Z_2_ERROR_STOP); } } else if (MotorR1.MotionComplete && MotorR2.MotionComplete) { if (IsPositionR1Degree180 && IsPositionR2Degree180) { _homeStep = ReverseStageHomeSteps.S3200_Z_MOVE_DOWN_POSITION; } else { if (!IsPositionR1Degree180) { Interlock_Manager.Add_Interlock_Msg("ULD Reverse Home can't run.", "Reverse R 1 is not 180 deg."); } if (!IsPositionR2Degree180) { Interlock_Manager.Add_Interlock_Msg("ULD Reverse Home can't run.", "Reverse R 2 is not 180 deg."); } } } break; } case ReverseStageHomeSteps.S3200_Z_MOVE_DOWN_POSITION: { if (Move_Z_1_Down_Position()) { if (Move_Z_2_Down_Position()) { homeCheckedTime.Restart(); _homeStep = ReverseStageHomeSteps.S3300_Z_POSITION_CHECK; } } break; } case ReverseStageHomeSteps.S3300_Z_POSITION_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (MotorZ1.ErrorStop || MotorZ2.ErrorStop) { if (MotorZ1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0381_ULD_ROTATION_UNIT_Z_1_ERROR_STOP); } if (MotorZ2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0211_LD_ROTATION_UNIT_Z_2_ERROR_STOP); } } else if (MotorZ1.MotionComplete && MotorZ2.MotionComplete) { if (IsPositionZ1Down && IsPositionZ2Down) { _homeStep = ReverseStageHomeSteps.S9999_END; } else { if (!IsPositionZ1Down) { Interlock_Manager.Add_Interlock_Msg("ULD Reverse Home can't run.", "Reverse Z 1 is not down position."); } if (!IsPositionZ2Down) { Interlock_Manager.Add_Interlock_Msg("ULD Reverse Home can't run.", "Reverse Z 2 is not down position."); } } } break; } case ReverseStageHomeSteps.S9999_END: { isHomeComplete = true; _homeStep = ReverseStageHomeSteps.S0000_WAIT; break; } } } public void Seq_PickAoiStage() { switch(Step) { case UnloaderReverseStageSteps.S1000_PICK_AOI_STAGE_START: { Tact_Move.Start(); Step = UnloaderReverseStageSteps.S1100_HANDLER_1_POSITION_CHECK; break; } case UnloaderReverseStageSteps.S1100_HANDLER_1_POSITION_CHECK: { double position = equipment.unloader.Handler1.Get_Position_Y_Stay(); if (position >= equipment.unloader.Handler1.MotorY.Position || equipment.unloader.Handler1.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset)) { Step = UnloaderReverseStageSteps.S1110_HANDLER_2_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S1110_HANDLER_2_POSITION_CHECK: { double position = equipment.after.Handler2.Get_Position_Y_Stay(); if (position >= equipment.after.Handler2.MotorY.Position || equipment.after.Handler2.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset)) { Step = UnloaderReverseStageSteps.S1200_MOVE_Z_UP_POSITION; } break; } case UnloaderReverseStageSteps.S1200_MOVE_Z_UP_POSITION: { if(Move_Z_1_Up_Position() && Move_Z_2_Up_Position()) { Step = UnloaderReverseStageSteps.S1205_Z_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S1205_Z_POSITION_CHECK: { if (MotorZ1.MotionComplete && MotorZ2.MotionComplete) { if (IsPositionZ1Up && IsPositionZ2Up) { Step = UnloaderReverseStageSteps.S1210_MOVE_R_DEG_0; } else { Step = UnloaderReverseStageSteps.S1200_MOVE_Z_UP_POSITION; } } break; } case UnloaderReverseStageSteps.S1210_MOVE_R_DEG_0: { if (Move_R_1_Deg_0_Position() && Move_R_2_Deg_0_Position()) { Step = UnloaderReverseStageSteps.S1215_R_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S1215_R_POSITION_CHECK: { if (MotorR1.MotionComplete && MotorR2.MotionComplete) { if (IsPositionR1Degree0 && IsPositionR2Degree0) { Step = UnloaderReverseStageSteps.S1220_MOVE_Z_DOWN; } else { Step = UnloaderReverseStageSteps.S1210_MOVE_R_DEG_0; } } break; } case UnloaderReverseStageSteps.S1220_MOVE_Z_DOWN: { if (Move_Z_1_Down_Position() && Move_Z_2_Down_Position()) { Step = UnloaderReverseStageSteps.S1225_Z_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S1225_Z_POSITION_CHECK: { if (MotorZ1.MotionComplete && MotorZ2.MotionComplete) { if (IsPositionZ1Down && IsPositionZ2Down) { Step = UnloaderReverseStageSteps.S1300_PICK_START; } else { Step = UnloaderReverseStageSteps.S1220_MOVE_Z_DOWN; } } break; } case UnloaderReverseStageSteps.S1300_PICK_START: { if(equipment.after.AoiStage.Stage1.IsExist) { _stage1Step = StageSteps.S1000_PICK_AOI_STAGE_START; } if (equipment.after.AoiStage.Stage2.IsExist) { _stage2Step = StageSteps.S1000_PICK_AOI_STAGE_START; } Step = UnloaderReverseStageSteps.S1310_PICK_WAIT; break; } case UnloaderReverseStageSteps.S1310_PICK_WAIT: { if(_stage1Step == StageSteps.S0000_WAIT && _stage2Step == StageSteps.S0000_WAIT) { Step = UnloaderReverseStageSteps.S1999_PICK_AOI_STAGE_END; } break; } case UnloaderReverseStageSteps.S1999_PICK_AOI_STAGE_END: { Tact_Move.Stop(); Step = UnloaderReverseStageSteps.S0000_WAIT; break; } } } public void Seq_Unload() { switch (Step) { case UnloaderReverseStageSteps.S2000_PANEL_UNLOAD_START: { Tact_Move.Start(); Step = UnloaderReverseStageSteps.S2100_STAY_POSITION_CHECK; break; } case UnloaderReverseStageSteps.S2100_STAY_POSITION_CHECK: { if (IsStayPosition) { Step = UnloaderReverseStageSteps.S2230_PANEL_EXIST_CHECK; } else { equipment.after.AoiStage.Stage1.BlowSolOn = true; equipment.after.AoiStage.Stage2.BlowSolOn = true; Step = UnloaderReverseStageSteps.S2110_HANDLER_1_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S2110_HANDLER_1_POSITION_CHECK: { double position = equipment.unloader.Handler1.Get_Position_Y_Stay(); if (position >= equipment.unloader.Handler1.MotorY.Position || equipment.unloader.Handler1.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset)) { Step = UnloaderReverseStageSteps.S2120_HANDLER_2_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S2120_HANDLER_2_POSITION_CHECK: { double position = equipment.after.Handler2.Get_Position_Y_Stay(); if (position >= equipment.after.Handler2.MotorY.Position || equipment.after.Handler2.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset)) { Step = UnloaderReverseStageSteps.S2200_MOVE_Z_UP_POSITION; } break; } case UnloaderReverseStageSteps.S2200_MOVE_Z_UP_POSITION: { if(sequenceChangedTime.Seconds < 0.5) { return; } if (Move_Z_1_Up_Position() && Move_Z_2_Up_Position()) { Step = UnloaderReverseStageSteps.S2205_Z_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S2205_Z_POSITION_CHECK: { if (MotorZ1.MotionComplete && MotorZ2.MotionComplete) { if (IsPositionZ1Up && IsPositionZ2Up) { Step = UnloaderReverseStageSteps.S2210_MOVE_R_DEG_180; } else { Step = UnloaderReverseStageSteps.S2200_MOVE_Z_UP_POSITION; } } break; } case UnloaderReverseStageSteps.S2210_MOVE_R_DEG_180: { if (Move_R_1_Deg_180_Position() && Move_R_2_Deg_180_Position()) { Step = UnloaderReverseStageSteps.S2215_R_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S2215_R_POSITION_CHECK: { if (MotorR1.MotionComplete && MotorR2.MotionComplete) { if (IsPositionR1Degree180 && IsPositionR2Degree180) { Step = UnloaderReverseStageSteps.S2220_MOVE_Z_DOWN; } else { Step = UnloaderReverseStageSteps.S2210_MOVE_R_DEG_180; } } break; } case UnloaderReverseStageSteps.S2220_MOVE_Z_DOWN: { if (Move_Z_1_Down_Position() && Move_Z_2_Down_Position()) { Step = UnloaderReverseStageSteps.S2225_Z_POSITION_CHECK; } break; } case UnloaderReverseStageSteps.S2225_Z_POSITION_CHECK: { if (MotorZ1.MotionComplete && MotorZ2.MotionComplete) { if (IsPositionZ1Down && IsPositionZ2Down) { equipment.after.AoiStage.Stage1.BlowSolOn = false; equipment.after.AoiStage.Stage2.BlowSolOn = false; Step = UnloaderReverseStageSteps.S2230_PANEL_EXIST_CHECK; } else { Step = UnloaderReverseStageSteps.S2220_MOVE_Z_DOWN; } } break; } case UnloaderReverseStageSteps.S2230_PANEL_EXIST_CHECK: { if(Stage1.IsExist == false && Stage2.IsExist == false) { Step = UnloaderReverseStageSteps.S2999_PANEL_UNLOAD_END; } break; } case UnloaderReverseStageSteps.S2999_PANEL_UNLOAD_END: { Tact_Move.Stop(); Step = UnloaderReverseStageSteps.S0000_WAIT; break; } } } public void Seq_Stage1Step() { switch(_stage1Step) { case StageSteps.S1000_PICK_AOI_STAGE_START: { _stage1Step = StageSteps.S1100_VACUUM_ON; break; } case StageSteps.S1100_VACUUM_ON: { if (Stage1.IsWorkEnd) { if (Stage1.VacuumSolOn) { _stage1Step = StageSteps.S1110_AOI_STAGE_VACUUM_OFF; } else { Stage1.VacuumOn(); } } break; } case StageSteps.S1110_AOI_STAGE_VACUUM_OFF: { if (equipment.after.AoiStage.Stage1.IsWorkEnd) { if (equipment.after.AoiStage.Stage1.VacuumSolOn == false) { _stage1Step = StageSteps.S1120_DATA_SET; } else { equipment.after.AoiStage.Stage1.VacuumOff(); } } break; } case StageSteps.S1120_DATA_SET: { var info = equipment.after.AoiStage.Panel1; info.Uld_Reverse = true; Panel1 = info; equipment.after.AoiStage.Panel1 = new Panel_Info(); _stage1Step = StageSteps.S9999_STEP_END; break; } case StageSteps.S9000_SCRAP_START: { _stage1Step = StageSteps.S9100_VACUUM_OFF; break; } case StageSteps.S9100_VACUUM_OFF: { if (Stage1.IsWorkEnd) { if (Stage1.VacuumSolOn == false) { _stage1Step = StageSteps.S9110_DATA_SET; } else { Stage1.VacuumOff(); } } break; } case StageSteps.S9110_DATA_SET: { Panel1 = new Panel_Info(); _stage1Step = StageSteps.S9999_STEP_END; break; } case StageSteps.S9999_STEP_END: { _stage1Step = StageSteps.S0000_WAIT; break; } } } public void Seq_Stage2Step() { switch (_stage2Step) { case StageSteps.S1000_PICK_AOI_STAGE_START: { _stage2Step = StageSteps.S1100_VACUUM_ON; break; } case StageSteps.S1100_VACUUM_ON: { if (Stage2.IsWorkEnd) { if (Stage2.VacuumSolOn) { _stage2Step = StageSteps.S1110_AOI_STAGE_VACUUM_OFF; } else { Stage2.VacuumOn(); } } break; } case StageSteps.S1110_AOI_STAGE_VACUUM_OFF: { if (equipment.after.AoiStage.Stage2.IsWorkEnd) { if (equipment.after.AoiStage.Stage2.VacuumSolOn == false) { _stage2Step = StageSteps.S1120_DATA_SET; } else { equipment.after.AoiStage.Stage2.VacuumOff(); } } break; } case StageSteps.S1120_DATA_SET: { var info = equipment.after.AoiStage.Panel2; info.Uld_Reverse = true; Panel2 = info; equipment.after.AoiStage.Panel2 = new Panel_Info(); _stage2Step = StageSteps.S9999_STEP_END; break; } case StageSteps.S9000_SCRAP_START: { _stage2Step = StageSteps.S9100_VACUUM_OFF; break; } case StageSteps.S9100_VACUUM_OFF: { if (Stage2.IsWorkEnd) { if (Stage2.VacuumSolOn == false) { _stage2Step = StageSteps.S9110_DATA_SET; } else { Stage2.VacuumOff(); } } break; } case StageSteps.S9110_DATA_SET: { Panel2 = new Panel_Info(); _stage2Step = StageSteps.S9999_STEP_END; break; } case StageSteps.S9999_STEP_END: { _stage2Step = StageSteps.S0000_WAIT; break; } } } public bool Move_Z_1_Down_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_Z_Down_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_Z_Down_Velocity, out value); velocity = double.Parse($"{value}"); return MotorZ1.Move_Absolute_Pos(position, velocity); } public bool Move_Z_1_Up_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_Z_Up_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_Z_Up_Velocity, out value); velocity = double.Parse($"{value}"); return MotorZ1.Move_Absolute_Pos(position, velocity); } public bool Move_R_1_Deg_0_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_T_0_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_T_0_Velocity, out value); velocity = double.Parse($"{value}"); return MotorR1.Move_Absolute_Pos(position, velocity); } public bool Move_R_1_Deg_180_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_T_180_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_1_T_180_Velocity, out value); velocity = double.Parse($"{value}"); return MotorR1.Move_Absolute_Pos(position, velocity); } public bool Move_Z_2_Down_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_Z_Down_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_Z_Down_Velocity, out value); velocity = double.Parse($"{value}"); return MotorZ2.Move_Absolute_Pos(position, velocity); } public bool Move_Z_2_Up_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_Z_Up_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_Z_Up_Velocity, out value); velocity = double.Parse($"{value}"); return MotorZ2.Move_Absolute_Pos(position, velocity); } public bool Move_R_2_Deg_0_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_T_0_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_T_0_Velocity, out value); velocity = double.Parse($"{value}"); return MotorR2.Move_Absolute_Pos(position, velocity); } public bool Move_R_2_Deg_180_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_T_180_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.ULD_Reverse_Unit_2_T_180_Velocity, out value); velocity = double.Parse($"{value}"); return MotorR2.Move_Absolute_Pos(position, velocity); } public bool Picker_1_Scrap() { if (UnitMode == En_Equipment_Mode.Auto || equipment.Auto_Mode) { Interlock_Manager.Add_Interlock_Msg("Pre_Align_Stage_1 Scrap Can't Start", "Equipment mode is Auto."); return false; } _stage1Step = StageSteps.S9000_SCRAP_START; return true; } public bool Picker_2_Scrap() { if (UnitMode == En_Equipment_Mode.Auto || equipment.Auto_Mode) { Interlock_Manager.Add_Interlock_Msg("Pre_Align_Stage_2 Scrap Can't Start", "Equipment mode is Auto."); return false; } _stage2Step = StageSteps.S9000_SCRAP_START; return true; } #endregion } }