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
|
}
|
}
|