using System; namespace SHARP_CLAS_UI { public class AoiStage : AoiStageUnit { #region Enum private enum StageSteps { S0000_WAIT, S9000_SCRAP_START, S9100_VACUUM_OFF, S9110_DATA_SET, S9999_SCRAP_END, } #endregion #region Property public bool IsPlaceEnable { get { if(IsExist == false && Step == AoiStageSteps.S1200_PANEL_EXIST_CHECK) { return true; } else { return false; } } } public bool IsPickEnable { get { if(IsExist && Step == AoiStageSteps.S3200_PANEL_EMPTY_CHECK) { return true; } else { return false; } } } public bool IsMeasurementEnable { get { if(step == AoiStageSteps.S2100_MEASUREMENT_CHECK) { return true; } else { return false; } } } public bool IsMotorT1LoadPosition { get { object value; double position; if (equipment.Cur_Main_Recipe.tray_info.AOI_Before_CW == En_AOI_CW.CW_0) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Position, out value); position = double.Parse($"{value}"); } else if (equipment.Cur_Main_Recipe.tray_info.AOI_Before_CW == En_AOI_CW.CW_90) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_90_Position, out value); position = double.Parse($"{value}"); } else { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_180_Position, out value); position = double.Parse($"{value}"); } return MotorT1.Is_Inposition(position + equipment.Cur_Main_Recipe.vision_info.AOI_Before_Left_T, equipment.Setting.Inposition_Offset); } } public bool IsMotorT2LoadPosition { get { object value; double position; if (equipment.Cur_Main_Recipe.tray_info.AOI_Before_CW == En_AOI_CW.CW_0) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Position, out value); position = double.Parse($"{value}"); } else if (equipment.Cur_Main_Recipe.tray_info.AOI_Before_CW == En_AOI_CW.CW_90) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_90_Position, out value); position = double.Parse($"{value}"); } else { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_180_Position, out value); position = double.Parse($"{value}"); } return MotorT2.Is_Inposition(position + equipment.Cur_Main_Recipe.vision_info.AOI_Before_Right_T, equipment.Setting.Inposition_Offset); } } public bool IsMotorT1UnloadPosition { get { object value; double position; if (equipment.Cur_Main_Recipe.tray_info.AOI_After_CW == En_AOI_CW.CW_0) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Position, out value); position = double.Parse($"{value}"); } else if (equipment.Cur_Main_Recipe.tray_info.AOI_After_CW == En_AOI_CW.CW_90) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_90_Position, out value); position = double.Parse($"{value}"); } else { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_180_Position, out value); position = double.Parse($"{value}"); } return MotorT1.Is_Inposition(position + equipment.Cur_Main_Recipe.vision_info.AOI_After_Left_T, equipment.Setting.Inposition_Offset); } } public bool IsMotorT2UnloadPosition { get { object value; double position; if (equipment.Cur_Main_Recipe.tray_info.AOI_After_CW == En_AOI_CW.CW_0) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Position, out value); position = double.Parse($"{value}"); } else if (equipment.Cur_Main_Recipe.tray_info.AOI_After_CW == En_AOI_CW.CW_90) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_90_Position, out value); position = double.Parse($"{value}"); } else { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_180_Position, out value); position = double.Parse($"{value}"); } return MotorT2.Is_Inposition(position + equipment.Cur_Main_Recipe.vision_info.AOI_After_Right_T, equipment.Setting.Inposition_Offset); } } public double MotorT1LoadPosition { get { object value; double position; if (equipment.Cur_Main_Recipe.tray_info.AOI_Before_CW == En_AOI_CW.CW_0) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Position, out value); position = double.Parse($"{value}"); } else if (equipment.Cur_Main_Recipe.tray_info.AOI_Before_CW == En_AOI_CW.CW_90) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_90_Position, out value); position = double.Parse($"{value}"); } else { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_180_Position, out value); position = double.Parse($"{value}"); } return position + equipment.Cur_Main_Recipe.vision_info.AOI_Before_Left_T; } } public double MotorT2LoadPosition { get { object value; double position; if (equipment.Cur_Main_Recipe.tray_info.AOI_Before_CW == En_AOI_CW.CW_0) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Position, out value); position = double.Parse($"{value}"); } else if (equipment.Cur_Main_Recipe.tray_info.AOI_Before_CW == En_AOI_CW.CW_90) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_90_Position, out value); position = double.Parse($"{value}"); } else { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_180_Position, out value); position = double.Parse($"{value}"); } return position + equipment.Cur_Main_Recipe.vision_info.AOI_Before_Right_T; } } public double MotorT1UnloadPosition { get { object value; double position; if (equipment.Cur_Main_Recipe.tray_info.AOI_After_CW == En_AOI_CW.CW_0) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Position, out value); position = double.Parse($"{value}"); } else if (equipment.Cur_Main_Recipe.tray_info.AOI_After_CW == En_AOI_CW.CW_90) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_90_Position, out value); position = double.Parse($"{value}"); } else { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_180_Position, out value); position = double.Parse($"{value}"); } return position + equipment.Cur_Main_Recipe.vision_info.AOI_After_Left_T; } } public double MotorT2UnloadPosition { get { object value; double position; if (equipment.Cur_Main_Recipe.tray_info.AOI_After_CW == En_AOI_CW.CW_0) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Position, out value); position = double.Parse($"{value}"); } else if (equipment.Cur_Main_Recipe.tray_info.AOI_After_CW == En_AOI_CW.CW_90) { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_90_Position, out value); position = double.Parse($"{value}"); } else { equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_180_Position, out value); position = double.Parse($"{value}"); } return position + equipment.Cur_Main_Recipe.vision_info.AOI_After_Right_T; } } public override bool IsWorkEnd { get { if (Step == AoiStageSteps.S0000_WAIT) { return true; } else { return false; } } } public override bool IsStayPosition { get { if (IsMotorT1LoadPosition && IsMotorT2LoadPosition) { return true; } else { return false; } } } public override Panel_Info Panel1 { get { return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.AOI_Stage_1); } set { Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.AOI_Stage_1, value); } } public override Panel_Info Panel2 { get { return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.AOI_Stage_2); } set { Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.AOI_Stage_2, value); } } public AoiStageSteps Step { get { return step; } set { step = value; } } #endregion #region Field private AoiStageSteps step; private AoiStageSteps _oldStep; public AoiStageHomeSteps _homeStpe; private StageSteps _stage1Step; private StageSteps _stage2Step; public Time_Checker Tact_Move = new Time_Checker(); #endregion #region Construct public AoiStage(Equipment equipment) : base(equipment, MotorAxis.AOI_Stage_T_1, MotorAxis.AOI_Stage_T_2) { Step = AoiStageSteps.S0000_WAIT; _oldStep = AoiStageSteps.S0000_WAIT; Stage1.Initialize(OutputData.AOI_Stage_1_Vaccum_On_Sol_Valve, OutputData.AOI_Stage_1_Blow_On_Sol_Valve, InputData.AOI_Stage_1_Vaccum_On_Check, En_Alarm_List.AL_0850_AOI_STAGE_1_VACUUM_ON_CHECK); Stage2.Initialize(OutputData.AOI_Stage_2_Vaccum_On_Sol_Valve, OutputData.AOI_Stage_2_Blow_On_Sol_Valve, InputData.AOI_Stage_2_Vaccum_On_Check, En_Alarm_List.AL_0851_AOI_STAGE_2_VACUUM_ON_CHECK); pauseDisableList.Add(AoiStageSteps.S1110_POSITION_CHECK); pauseDisableList.Add(AoiStageSteps.S3110_POSITION_CHECK); MotorT1.Check_Jog_Interlock = Jog_Interlock; MotorT1.Check_Move_Interlock = Move_Interlock; MotorT2.Check_Jog_Interlock = Jog_Interlock; MotorT2.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 = AoiStageSteps.S0000_WAIT; _homeStpe = AoiStageHomeSteps.S0000_WAIT; Tact_Move.Reset(); } public void ExecuteAuto() { if (Step == AoiStageSteps.S0000_WAIT) { if(equipment.after.Handler2.Picker1.IsUp == false || equipment.after.Handler2.Picker2.IsUp == false || equipment.after.ReverseStage.IsStayPosition == false) { return; } if (IsExist) { if(equipment.Mode.Measurement_Skip || ((Stage1.IsExist == false || Panel1.Measurement_Ack) && (Stage2.IsExist == false || Panel2.Measurement_Ack))) { Step = AoiStageSteps.S3000_PANEL_UNLOAD_START; } else { Step = AoiStageSteps.S2000_MEASUREMENT_START; } } else { Step = AoiStageSteps.S1000_PANEL_LOAD_START; } } } public override void MonitoringStatus() { if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual) { if (Stage1.IsWorkEnd && Stage1.VacuumSolOn == true && Stage1.IsVacuumSensor == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0850_AOI_STAGE_1_VACUUM_ON_CHECK); } if (Stage2.IsWorkEnd && Stage2.VacuumSolOn == true && Stage2.IsVacuumSensor == false) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0851_AOI_STAGE_2_VACUUM_ON_CHECK); } } if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened) { if (MotorT1.MotionComplete == false) { MotorT1.Move_Stop(); } if (MotorT2.MotionComplete == false) { MotorT2.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_Load(); Seq_Measurement(); Seq_Unload(); } } public void ExecuteHome() { switch(_homeStpe) { case AoiStageHomeSteps.S0000_WAIT: { _homeStpe = AoiStageHomeSteps.S1000_STATUS_CHECK; break; } case AoiStageHomeSteps.S1000_STATUS_CHECK: { if (MotorT1.ErrorStop || MotorT2.ErrorStop) { if (MotorT1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0351_AOI_STAGE_T_1_ERROR_STOP); } if (MotorT2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0361_AOI_STAGE_T_2_ERROR_STOP); } } else if (!MotorT1.PowerOn || !MotorT2.PowerOn) { if (!MotorT1.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0350_AOI_STAGE_T_1_POWER_OFF); } if (!MotorT2.PowerOn) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0360_AOI_STAGE_T_2_POWER_OFF); } } else { _homeStpe = AoiStageHomeSteps.S2000_T_HOME_START; } break; } case AoiStageHomeSteps.S2000_T_HOME_START: { if (MotorT1.Home()) { if (MotorT2.Home()) { homeCheckedTime.Restart(); _homeStpe = AoiStageHomeSteps.S2100_T_HOME_CHECK; } } break; } case AoiStageHomeSteps.S2100_T_HOME_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (!MotorT1.IsHomed || !MotorT2.IsHomed) { if (MotorT1.Homing == false && MotorT1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0351_AOI_STAGE_T_1_ERROR_STOP); } if (MotorT2.Homing == false && MotorT2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0361_AOI_STAGE_T_2_ERROR_STOP); } } else { _homeStpe = AoiStageHomeSteps.S3000_MOVE_0_DEG; } break; } case AoiStageHomeSteps.S3000_MOVE_0_DEG: { if(Move_T_1_Deg_0_Position()) { if (Move_T_2_Deg_0_Position()) { homeCheckedTime.Restart(); _homeStpe = AoiStageHomeSteps.S3100_POSITION_CHECK; } } break; } case AoiStageHomeSteps.S3100_POSITION_CHECK: { if (homeCheckedTime.Seconds < 1) return; if (MotorT1.ErrorStop || MotorT2.ErrorStop) { if (MotorT1.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0351_AOI_STAGE_T_1_ERROR_STOP); } if (MotorT2.ErrorStop) { Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0361_AOI_STAGE_T_2_ERROR_STOP); } } else if (MotorT1.MotionComplete && MotorT2.MotionComplete) { if (Get_Is_Position_T_1_Deg_0() && Get_Is_Position_T_2_Deg_0()) { _homeStpe = AoiStageHomeSteps.S9999_END; } else { if (Get_Is_Position_T_1_Deg_0()) { Interlock_Manager.Add_Interlock_Msg("AOI Stage 1 Home can't run.", "AOI Stage T 1 is not 0 Deg."); } if (Get_Is_Position_T_2_Deg_0()) { Interlock_Manager.Add_Interlock_Msg("AOI Stage 1 Home can't run.", "AOI Stage T 2 is not 0 Deg."); } } } break; } case AoiStageHomeSteps.S9999_END: { isHomeComplete = true; _homeStpe = AoiStageHomeSteps.S0000_WAIT; break; } } } public void Seq_Load() { switch(Step) { case AoiStageSteps.S1000_PANEL_LOAD_START: { Step = AoiStageSteps.S1100_MOVE_STAY_POSITION; break; } case AoiStageSteps.S1100_MOVE_STAY_POSITION: { if(MoveT1LoadPosition() && MoveT2LoadPosition()) { Step = AoiStageSteps.S1110_POSITION_CHECK; } break; } case AoiStageSteps.S1110_POSITION_CHECK: { if (MotorT1.MotionComplete && MotorT2.MotionComplete) { if (IsMotorT1LoadPosition && IsMotorT2LoadPosition) { Step = AoiStageSteps.S1200_PANEL_EXIST_CHECK; } else { Step = AoiStageSteps.S1100_MOVE_STAY_POSITION; } } break; } case AoiStageSteps.S1200_PANEL_EXIST_CHECK: { if (Stage1.IsWorkEnd && Stage2.IsWorkEnd) { if (IsExist) { Step = AoiStageSteps.S1999_PANEL_LOAD_END; } } break; } case AoiStageSteps.S1999_PANEL_LOAD_END: { Step = AoiStageSteps.S0000_WAIT; break; } } } public void Seq_Measurement() { switch (Step) { case AoiStageSteps.S2000_MEASUREMENT_START: { Step = AoiStageSteps.S2100_MEASUREMENT_CHECK; break; } case AoiStageSteps.S2100_MEASUREMENT_CHECK: { if (equipment.Mode.Measurement_Skip || ((Stage1.IsExist == false || Panel1.Measurement_Ack) && (Stage2.IsExist == false || Panel2.Measurement_Ack))) { if (equipment.unloader.Handler1.Step < UnloaderHandler1Steps.S4000_MEASUREMENT_START || UnloaderHandler1Steps.S4999_MEASUREMENT_END < equipment.unloader.Handler1.Step) { Step = AoiStageSteps.S2999_MEASUREMENT_END; } } break; } case AoiStageSteps.S2999_MEASUREMENT_END: { Step = AoiStageSteps.S0000_WAIT; break; } } } public void Seq_Unload() { switch (Step) { case AoiStageSteps.S3000_PANEL_UNLOAD_START: { Step = AoiStageSteps.S3100_MOVE_UNLOAD_POSITION; break; } case AoiStageSteps.S3100_MOVE_UNLOAD_POSITION: { if (MoveT1UnloadPosition() && MoveT2UnloadPosition()) { Step = AoiStageSteps.S3110_POSITION_CHECK; } break; } case AoiStageSteps.S3110_POSITION_CHECK: { if (MotorT1.MotionComplete && MotorT2.MotionComplete) { if (IsMotorT1UnloadPosition && IsMotorT2UnloadPosition) { Step = AoiStageSteps.S3200_PANEL_EMPTY_CHECK; } else { Step = AoiStageSteps.S3100_MOVE_UNLOAD_POSITION; } } break; } case AoiStageSteps.S3200_PANEL_EMPTY_CHECK: { if (Stage1.IsWorkEnd && Stage2.IsWorkEnd) { if (IsExist == false) { Step = AoiStageSteps.S3999_PANEL_UNLOAD_END; } } break; } case AoiStageSteps.S3999_PANEL_UNLOAD_END: { Step = AoiStageSteps.S0000_WAIT; break; } } } public void Seq_Stage1Step() { switch (_stage1Step) { 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_SCRAP_END; break; } case StageSteps.S9999_SCRAP_END: { _stage1Step = StageSteps.S0000_WAIT; break; } } } public void Seq_Stage2Step() { switch (_stage2Step) { 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_SCRAP_END; break; } case StageSteps.S9999_SCRAP_END: { _stage2Step = StageSteps.S0000_WAIT; break; } } } public bool MoveT1LoadPosition() { object value; double position = MotorT1LoadPosition; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Velocity, out value); var velocity = double.Parse($"{value}"); return MotorT1.Move_Absolute_Pos(position, velocity); } public bool MoveT2LoadPosition() { object value; double position = MotorT2LoadPosition; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Velocity, out value); var velocity = double.Parse($"{value}"); return MotorT2.Move_Absolute_Pos(position, velocity); } public bool MoveT1UnloadPosition() { object value; double position = MotorT1UnloadPosition; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Velocity, out value); var velocity = double.Parse($"{value}"); return MotorT1.Move_Absolute_Pos(position, velocity); } public bool MoveT2UnloadPosition() { object value; double position = MotorT2UnloadPosition; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Velocity, out value); var velocity = double.Parse($"{value}"); return MotorT2.Move_Absolute_Pos(position, velocity); } public bool Move_T_1_Deg_0_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Velocity, out value); velocity = double.Parse($"{value}"); return MotorT1.Move_Absolute_Pos(position, velocity); } public bool Move_T_1_Deg_90_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_90_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_90_Velocity, out value); velocity = double.Parse($"{value}"); return MotorT1.Move_Absolute_Pos(position, velocity); } public bool Move_T_1_Deg_180_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_180_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_180_Velocity, out value); velocity = double.Parse($"{value}"); return MotorT1.Move_Absolute_Pos(position, velocity); } public bool Move_T_2_Deg_0_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Velocity, out value); velocity = double.Parse($"{value}"); return MotorT2.Move_Absolute_Pos(position, velocity); } public bool Move_T_2_Deg_90_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_90_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_90_Velocity, out value); velocity = double.Parse($"{value}"); return MotorT2.Move_Absolute_Pos(position, velocity); } public bool Move_T_2_Deg_180_Position() { object value; double position; double velocity; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_180_Position, out value); position = double.Parse($"{value}"); equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_180_Velocity, out value); velocity = double.Parse($"{value}"); return MotorT2.Move_Absolute_Pos(position, velocity); } // ============================================================================================= public bool Get_Is_Position_T_1_Deg_0() { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_0_Position, out value); get_position = double.Parse($"{value}"); return MotorT1.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } public bool Get_Is_Position_T_1_Deg_90() { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_90_Position, out value); get_position = double.Parse($"{value}"); return MotorT1.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } public bool Get_Is_Position_T_1_Deg_180() { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_1_T_180_Position, out value); get_position = double.Parse($"{value}"); return MotorT1.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } public bool Get_Is_Position_T_2_Deg_0() { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_0_Position, out value); get_position = double.Parse($"{value}"); return MotorT2.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } public bool Get_Is_Position_T_2_Deg_90() { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_90_Position, out value); get_position = double.Parse($"{value}"); return MotorT2.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } public bool Get_Is_Position_T_2_Deg_180() { object value; double get_position; equipment.sm.Get_Value(Position_Parameter_Address.AOI_Stage_2_T_180_Position, out value); get_position = double.Parse($"{value}"); return MotorT2.Is_Inposition(get_position, equipment.Setting.Inposition_Offset); } public bool Stage_1_Scrap() { if (UnitMode == En_Equipment_Mode.Auto || equipment.Auto_Mode) { Interlock_Manager.Add_Interlock_Msg("AOI_Stage_1 Scrap Can't Start", "Equipment mode is Auto."); return false; } _stage1Step = StageSteps.S9000_SCRAP_START; return true; } public bool Stage_2_Scrap() { if (UnitMode == En_Equipment_Mode.Auto || equipment.Auto_Mode) { Interlock_Manager.Add_Interlock_Msg("AOI_Stage_2 Scrap Can't Start", "Equipment mode is Auto."); return false; } _stage2Step = StageSteps.S9000_SCRAP_START; return true; } #endregion } }