using System;
|
using System.Windows.Forms;
|
|
namespace SHARP_CLAS_UI
|
{
|
public class ULD_Handler_1 : Handler
|
{
|
#region Enum
|
private enum PickerSteps
|
{
|
S0000_WAIT,
|
|
S1000_PICK_AOI_STAGE_START,
|
S1100_DOWN,
|
S1110_VACUUM_ON,
|
S1120_AOI_STAGE_VACUUM_OFF,
|
S1130_AOI_STAGE_BLOW_ON,
|
S1140_PICKER_UP,
|
S1150_AOI_STAGE_BLOW_OFF,
|
S1160_DATA_SET,
|
|
S2000_PICK_REVERSE_START,
|
S2100_DOWN,
|
S2110_VACUUM_ON,
|
S2120_VACUUM_CHECK,
|
S5130_REVERSE_STAGE_MOVE_UP,
|
S2140_VACUUM_CHECK,
|
S2150_REVERSE_STAGE_VACUUM_OFF,
|
S2160_REVERSE_STAGE_MOVE_STAY,
|
S2170_DATA_SET,
|
|
S3000_PLACE_REVERSE_STAGE_START,
|
S3100_PICKER_DOWN,
|
S3110_REVERSE_STAGE_VACUUM_ON,
|
S3120_VACUUM_OFF,
|
S3130_DATA_SET,
|
|
S4000_PLACE_TRAY_PANEL_START,
|
S4100_PICKER_DOWN,
|
S4110_VACUUM_OFF,
|
|
S9000_SCRAP_START,
|
S9100_VACUUM_OFF,
|
S9110_DATA_SET,
|
|
S9200_PICKER_UP,
|
S9999_STEP_END,
|
}
|
#endregion
|
|
#region Property
|
public override Panel_Info Panel1
|
{
|
get
|
{
|
return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Handler_1_1);
|
}
|
set
|
{
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.ULD_Handler_1_1, value);
|
}
|
}
|
|
public override Panel_Info Panel2
|
{
|
get
|
{
|
return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Handler_1_2);
|
}
|
set
|
{
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.ULD_Handler_1_2, value);
|
}
|
}
|
|
public override bool IsWorkEnd
|
{
|
get
|
{
|
if (Step == UnloaderHandler1Steps.S0000_WAIT)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public override bool IsStayPosition
|
{
|
get
|
{
|
if (IsMotorXStayPosition && IsMotorYStayPosition)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public bool IsMotorXStayPosition
|
{
|
get
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Stay_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorX.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
}
|
|
public bool IsMotorYStayPosition
|
{
|
get
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_Stay_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorY.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
}
|
|
public UnloaderHandler1Steps Step
|
{
|
get
|
{
|
return _step;
|
}
|
|
set
|
{
|
_step = value;
|
}
|
}
|
#endregion
|
|
#region Field
|
private UnloaderHandler1Steps _step;
|
private UnloaderHandler1Steps _oldStep;
|
private HandlerHomeSteps _homeStep;
|
|
private PickerSteps _picker1Step;
|
private PickerSteps _picker2Step;
|
|
private int place_panel_num;
|
private double place_position_x;
|
private double place_position_y;
|
|
private double pick_velocity = 500;
|
private double handler_pitch = 220;
|
private double reversestage_move_position = -0.5;
|
|
public Time_Checker Tact_AOI = new Time_Checker();
|
public Time_Checker Tact_Move = new Time_Checker();
|
public Time_Checker vision_delay = new Time_Checker();
|
|
Form_User_Command_Set measurement_user_command;
|
Tray_QR_Code_Command qr_code_user_command;
|
|
bool measurement_user_command_show;
|
bool qr_code_user_command_show;
|
|
int measurement_retry_cnt;
|
int Bcr_retry_cnt;
|
string BCR_Data;
|
|
int cim_row;
|
int cim_column;
|
|
bool ng_place_runned;
|
|
private Timer tmrUi = new Timer();
|
System.Threading.Thread BCR_Read_Th;
|
#endregion
|
|
#region Construct
|
public ULD_Handler_1(Equipment equipment) : base(equipment, MotorAxis.ULD_Handler_1_X, MotorAxis.ULD_Handler_1_Y, "UnloaderHandler1")
|
{
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
_oldStep = UnloaderHandler1Steps.S0000_WAIT;
|
|
Picker1.Initialize(OutputData.ULD_Handler_1_1_Down, InputData.ULD_Handler_Picker_1_1_Up_Sensor, InputData.ULD_Handler_Picker_1_1_Down_Sensor, En_Alarm_List.AL_0822_ULD_HANDLER_1_1_UP_SENSOR_CHECK, En_Alarm_List.AL_0823_ULD_HANDLER_1_1_DOWN_SENSOR_CHECK,
|
OutputData.ULD_Cell_Handler_1_1_Vaccum_On_Sol_Valve, OutputData.ULD_Cell_Handler_1_1_Blow_On_Sol_Valve, InputData.ULD_Cell_Handler_1_1_Vaccum_On_Check, En_Alarm_List.AL_0820_ULD_HANDLER_1_1_VACUUM_ON_CHECK);
|
|
Picker2.Initialize(OutputData.ULD_Handler_1_2_Down, InputData.ULD_Handler_Picker_1_2_Up_Sensor, InputData.ULD_Handler_Picker_1_2_Down_Sensor, En_Alarm_List.AL_0824_ULD_HANDLER_1_2_UP_SENSOR_CHECK, En_Alarm_List.AL_0825_ULD_HANDLER_1_2_DOWN_SENSOR_CHECK,
|
OutputData.ULD_Cell_Handler_1_2_Vaccum_On_Sol_Valve, OutputData.ULD_Cell_Handler_1_2_Blow_On_Sol_Valve, InputData.ULD_Cell_Handler_1_2_Vaccum_On_Check, En_Alarm_List.AL_0821_ULD_HANDLER_1_2_VACUUM_ON_CHECK);
|
|
pauseDisableList.Add(UnloaderHandler1Steps.S1205_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S1215_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S1305_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S2230_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S3230_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S4205_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S4305_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S4405_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S4505_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S5205_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S6205_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S7205_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S7305_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S8305_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S8505_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S8515_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S8705_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S8905_POSITION_CHECK);
|
pauseDisableList.Add(UnloaderHandler1Steps.S8915_POSITION_CHECK);
|
|
MotorX.Check_Jog_Interlock = Jog_Interlock;
|
MotorX.Check_Move_Interlock = Move_Interlock;
|
MotorX.Check_Home_Interlock = Home_Interlock;
|
|
MotorY.Check_Jog_Interlock = Jog_Interlock;
|
MotorY.Check_Move_Interlock = Move_Interlock;
|
MotorY.Check_Home_Interlock = Home_Interlock;
|
|
tmrUi.Tick += TmrUi_Tick;
|
tmrUi.Interval = 3000;
|
tmrUi.Start();
|
}
|
|
#endregion
|
|
#region Function
|
private bool Home_Interlock()
|
{
|
if (Picker1.IsDownSensor || Picker2.IsDownSensor)
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD Handler 1 Picker Down", "Picker is Down, Can't Move.");
|
return true;
|
}
|
|
return false;
|
}
|
|
private bool Move_Interlock()
|
{
|
if (Picker1.IsDownSensor || Picker2.IsDownSensor)
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD Handler 1 Picker Down", "Picker is Down, Can't Move.");
|
return true;
|
}
|
|
if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened)
|
{
|
return true;
|
}
|
|
return false;
|
}
|
|
private bool Jog_Interlock(bool positive)
|
{
|
if (Picker1.IsDownSensor || Picker2.IsDownSensor)
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD Handler 1 Picker Down", "Picker is Down, Can't Move.");
|
return true;
|
}
|
|
if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened)
|
{
|
return true;
|
}
|
|
return false;
|
}
|
|
private void TmrUi_Tick(object sender, EventArgs e)
|
{
|
if (measurement_user_command_show && measurement_user_command != null)
|
{
|
measurement_user_command.Show();
|
measurement_user_command_show = false;
|
}
|
|
if (qr_code_user_command_show && qr_code_user_command != null)
|
{
|
qr_code_user_command.Show();
|
qr_code_user_command_show = false;
|
}
|
}
|
|
public void Init_Seq()
|
{
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
_homeStep = HandlerHomeSteps.S0000_WAIT;
|
|
Tact_AOI.Reset();
|
Tact_Move.Reset();
|
}
|
|
public void ExecuteAuto()
|
{
|
if(Step == UnloaderHandler1Steps.S0000_WAIT)
|
{
|
if (equipment.unloader.LiftOk.is_Tray_Id_Read_Enable)
|
{
|
Step = UnloaderHandler1Steps.S2000_TRAY_OK_ID_READ_START;
|
}
|
else if (equipment.unloader.LiftNg.is_Tray_Id_Read_Enable)
|
{
|
Step = UnloaderHandler1Steps.S3000_TRAY_NG_ID_READ_START;
|
}
|
else if (equipment.after.AoiStage.IsMeasurementEnable)
|
{
|
Step = UnloaderHandler1Steps.S4000_MEASUREMENT_START;
|
}
|
else
|
{
|
if (equipment.process.ablation.Is_Power_Measure) return;
|
|
if (IsExist)
|
{
|
if (equipment.unloader.LiftNg.IsPanelPlaceEnable && equipment.unloader.LiftOk.IsPanelPlaceEnable)
|
{
|
bool isPick1PlaceEnable = true;
|
bool isPick2PlaceEnable = true;
|
int panel_num = 0;
|
|
if (Picker1.IsExist)
|
{
|
if ((equipment.Mode.Film_Judge_Skip || Panel1.Film_Judge_Result) && (equipment.Mode.Measurement_Skip || Panel1.Measurement_Result))
|
{
|
isPick1PlaceEnable = Get_Handler_1_1_Tray_OK_Panel_Num(out panel_num);
|
}
|
else
|
{
|
isPick1PlaceEnable = Get_Handler_1_1_Tray_NG_Panel_Num(out panel_num);
|
}
|
}
|
else
|
{
|
isPick1PlaceEnable = false;
|
}
|
|
if (Picker2.IsExist)
|
{
|
if ((equipment.Mode.Film_Judge_Skip || Panel2.Film_Judge_Result) && (equipment.Mode.Measurement_Skip || Panel2.Measurement_Result))
|
{
|
isPick2PlaceEnable = Get_Handler_1_2_Tray_OK_Panel_Num(out panel_num);
|
}
|
else
|
{
|
isPick2PlaceEnable = Get_Handler_1_2_Tray_NG_Panel_Num(out panel_num);
|
}
|
}
|
else
|
{
|
isPick2PlaceEnable = false;
|
}
|
|
if (isPick1PlaceEnable || isPick2PlaceEnable)
|
{
|
Step = UnloaderHandler1Steps.S8000_PLACE_TO_TRAY_START;
|
}
|
else
|
{
|
if (equipment.after.Handler2.IsExist && equipment.after.AoiStage.IsExist == false)
|
{
|
if (IsStayPosition == false)
|
{
|
Step = UnloaderHandler1Steps.S1000_MOVE_TO_STAY_START;
|
}
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S7000_PLACE_TO_REVERSE_STAGE_CHANGE_START;
|
}
|
}
|
}
|
else
|
{
|
if(IsStayPosition == false)
|
{
|
Step = UnloaderHandler1Steps.S1000_MOVE_TO_STAY_START;
|
}
|
}
|
}
|
else
|
{
|
if (equipment.after.ReverseStage.IsPickEnable)
|
{
|
Step = UnloaderHandler1Steps.S6000_PICK_TO_REVERSE_STAGE_START;
|
}
|
else if (equipment.Cur_Main_Recipe.tray_info.Uld_Reverse == false && equipment.after.AoiStage.IsPickEnable)
|
{
|
Step = UnloaderHandler1Steps.S5000_PICK_TO_AOI_STAGE_START;
|
}
|
else
|
{
|
if (IsStayPosition == false)
|
{
|
Step = UnloaderHandler1Steps.S1000_MOVE_TO_STAY_START;
|
}
|
}
|
}
|
}
|
}
|
}
|
|
public override void MonitoringStatus()
|
{
|
if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual)
|
{
|
if (Picker1.IsWorkEnd && Picker1.VacuumSolOn == true && Picker1.IsVacuumSensor == false && Picker1.IsUp)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0820_ULD_HANDLER_1_1_VACUUM_ON_CHECK);
|
}
|
|
if (Picker2.IsWorkEnd && Picker2.VacuumSolOn == true && Picker2.IsVacuumSensor == false && Picker2.IsUp)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0821_ULD_HANDLER_1_2_VACUUM_ON_CHECK);
|
}
|
}
|
|
if (Alarm_Manager.Instance.Occured_List.Exists(X => X.Code == En_Alarm_List.AL_0511_AOI_VISION_DISCONNECT))
|
{
|
if (UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY < Step && Step < UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
|
if (equipment.User.Level != En_User_Level.Master && equipment.Door_Opened)
|
{
|
if (MotorX.MotionComplete == false)
|
{
|
MotorX.Move_Stop();
|
}
|
|
if (MotorY.MotionComplete == false)
|
{
|
MotorY.Move_Stop();
|
}
|
}
|
}
|
|
public override void ExecuteStep()
|
{
|
if (_oldStep != Step)
|
{
|
sequenceChangedTime.Restart();
|
_oldStep = Step;
|
WriteSequenceLog(Step.ToString());
|
}
|
|
Picker1.ExecuteProcess();
|
Picker2.ExecuteProcess();
|
|
Seq_Picker1Step();
|
Seq_Picker2Step();
|
if (UnitMode == En_Equipment_Mode.Stop)
|
{
|
Init_Seq();
|
equipment.unloader.TactTime.Reset();
|
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;
|
}
|
else 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_MoveStayPosition();
|
Seq_TrayOkIdRead();
|
Seq_TrayNgIdRead();
|
Seq_Measurement();
|
Seq_PickAOIStage();
|
Seq_PickReverseStage();
|
Seq_PlaceReverseStage();
|
Seq_PlaceTrayPanel();
|
}
|
}
|
|
public void ExecuteHome()
|
{
|
switch(_homeStep)
|
{
|
case HandlerHomeSteps.S0000_WAIT:
|
{
|
_homeStep = HandlerHomeSteps.S1000_STATUS_CHECK;
|
break;
|
}
|
case HandlerHomeSteps.S1000_STATUS_CHECK:
|
{
|
if (MotorX.ErrorStop)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0411_ULD_HANDLER_1_X_ERROR_STOP);
|
}
|
else if (MotorY.ErrorStop)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0431_ULD_HANDLER_1_Y_ERROR_STOP);
|
}
|
else if (!MotorX.PowerOn)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0410_ULD_HANDLER_1_X_POWER_OFF);
|
}
|
else if (!MotorY.PowerOn)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0430_ULD_HANDLER_1_Y_POWER_OFF);
|
}
|
else if (Picker1.IsUp == false)
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD Handler 1 Home can't run.", "ULD Handler Picker 1-1 Up.");
|
}
|
else if (Picker2.IsUp == false)
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD Handler 1 Home can't run.", "ULD Handler Picker 1-2 Up.");
|
}
|
else
|
{
|
_homeStep = HandlerHomeSteps.S1100_TRAY_TRANSFER_HOME_CHECK;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1100_TRAY_TRANSFER_HOME_CHECK:
|
{
|
if (equipment.unloader.TrayTransfer.IsHomeComplete)
|
{
|
_homeStep = HandlerHomeSteps.S1200_TRAY_TRANSFER_POSITION_CHECK;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1200_TRAY_TRANSFER_POSITION_CHECK:
|
{
|
if (equipment.unloader.TrayTransfer.IsStayPosition)
|
{
|
_homeStep = HandlerHomeSteps.S1300_MOTOR_Y_HOME;
|
}
|
else
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD Handler 1 Home can't run.", "Tray TR Position is not empty.");
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1300_MOTOR_Y_HOME:
|
{
|
if (MotorY.Home())
|
{
|
homeCheckedTime.Restart();
|
_homeStep = HandlerHomeSteps.S1305_MOTOR_Y_HOME_CHECK;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1305_MOTOR_Y_HOME_CHECK:
|
{
|
if (homeCheckedTime.Seconds < 1) return;
|
|
if (!MotorY.IsHomed)
|
{
|
if (MotorY.Homing == false && MotorY.ErrorStop)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0431_ULD_HANDLER_1_Y_ERROR_STOP);
|
}
|
}
|
else
|
{
|
_homeStep = HandlerHomeSteps.S1310_MOTOR_X_HOME;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1310_MOTOR_X_HOME:
|
{
|
if (MotorX.Home())
|
{
|
homeCheckedTime.Restart();
|
_homeStep = HandlerHomeSteps.S1315_MOTOR_X_HOME_CHECK;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1315_MOTOR_X_HOME_CHECK:
|
{
|
if (homeCheckedTime.Seconds < 1) return;
|
|
if (!MotorX.IsHomed)
|
{
|
if (MotorX.Homing == false && MotorX.ErrorStop)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0411_ULD_HANDLER_1_X_ERROR_STOP);
|
}
|
}
|
else
|
{
|
_homeStep = HandlerHomeSteps.S1400_MOVE_STAY_POSITION;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1400_MOVE_STAY_POSITION:
|
{
|
if (Move_X_Stay_Position())
|
{
|
if (Move_Y_Stay_Position())
|
{
|
homeCheckedTime.Restart();
|
_homeStep = HandlerHomeSteps.S1405_POSITION_CHECK;
|
}
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1405_POSITION_CHECK:
|
{
|
if (homeCheckedTime.Seconds < 1) return;
|
|
if (MotorX.ErrorStop || MotorY.ErrorStop)
|
{
|
if (MotorX.ErrorStop)
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0411_ULD_HANDLER_1_X_ERROR_STOP);
|
|
if (MotorY.ErrorStop)
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0431_ULD_HANDLER_1_Y_ERROR_STOP);
|
|
}
|
else if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (Get_Is_Position_X_Stay() && Get_Is_Position_Y_Stay())
|
{
|
_homeStep = HandlerHomeSteps.S1999_END;
|
}
|
else
|
{
|
if (!Get_Is_Position_X_Stay())
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD Handler 1 Home can't run.", "X Position is not stay.");
|
}
|
|
if (!Get_Is_Position_Y_Stay())
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD Handler 1 Home can't run.", "Y Position is not stay.");
|
}
|
}
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1999_END:
|
{
|
isHomeComplete = true;
|
_homeStep = HandlerHomeSteps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_MoveStayPosition()
|
{
|
switch (Step)
|
{
|
case UnloaderHandler1Steps.S1000_MOVE_TO_STAY_START:
|
{
|
Step = UnloaderHandler1Steps.S1100_PICKER_UP;
|
break;
|
}
|
case UnloaderHandler1Steps.S1100_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
if (ng_place_runned)
|
{
|
Step = UnloaderHandler1Steps.S1200_MOVE_X_STAY;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S1300_MOVE_STAY_POSITION;
|
}
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S1200_MOVE_X_STAY:
|
{
|
if(Move_X_Stay_Position())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Stay Position [Start]");
|
Step = UnloaderHandler1Steps.S1205_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S1205_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete)
|
{
|
if (IsMotorXStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S1210_MOVE_Y_STAY;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S1200_MOVE_X_STAY;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S1210_MOVE_Y_STAY:
|
{
|
if (Move_Y_Stay_Position())
|
{
|
Step = UnloaderHandler1Steps.S1215_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S1215_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (IsMotorXStayPosition && IsMotorYStayPosition)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Stay Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Stay Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S1999_MOVE_TO_STAY_END;
|
}
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S1200_MOVE_X_STAY;
|
}
|
break;
|
}
|
|
case UnloaderHandler1Steps.S1300_MOVE_STAY_POSITION:
|
{
|
if (Move_X_Stay_Position() && Move_Y_Stay_Position())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Stay Position [Start]");
|
Step = UnloaderHandler1Steps.S1305_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S1305_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (IsStayPosition)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Stay Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Stay Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S1999_MOVE_TO_STAY_END;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S1300_MOVE_STAY_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S1999_MOVE_TO_STAY_END:
|
{
|
ng_place_runned = false;
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_TrayOkIdRead()
|
{
|
switch (Step)
|
{
|
case UnloaderHandler1Steps.S2000_TRAY_OK_ID_READ_START:
|
{
|
Step = UnloaderHandler1Steps.S2100_PICKER_UP;
|
break;
|
}
|
case UnloaderHandler1Steps.S2100_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = UnloaderHandler1Steps.S2200_ULD_TRAY_TR_POSITION_CHECK;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S2200_ULD_TRAY_TR_POSITION_CHECK:
|
{
|
if (equipment.unloader.TrayTransfer.IsStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S2210_MOVE_TRAY_OK_BCR_POS;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S2210_MOVE_TRAY_OK_BCR_POS:
|
{
|
if (Move_X(equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_BCR_X) && Move_Y(equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_BCR_Y))
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Position [Start]");
|
Step = UnloaderHandler1Steps.S2230_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S2230_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_BCR_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_BCR_Y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Bcr_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S2240_BCR_DATA_READ;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S2210_MOVE_TRAY_OK_BCR_POS;
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S2240_BCR_DATA_READ:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Reading [Start]");
|
|
BCR_Read_Th = new System.Threading.Thread(() => BCR_Read());
|
BCR_Read_Th.Start();
|
|
Step = UnloaderHandler1Steps.S2245_BCR_DATA_READ_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S2245_BCR_DATA_READ_WAIT:
|
{
|
if (BCR_Read_Th != null && BCR_Read_Th.ThreadState != System.Threading.ThreadState.Stopped) return;
|
|
Tact_Move.Stop();
|
|
if (BCR_Data != null && BCR_Data.Length == 14)
|
{
|
equipment.sm.Set_Value(Process_Memory_Address.ULD_Tray_Ok_ID, BCR_Data);
|
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S2999_TRAY_OK_ID_READ_END;
|
}
|
else
|
{
|
if (Bcr_retry_cnt > equipment.Setting.Bcr_Retry_Count)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0865_ULD_TRAY_OK_ID_READ_ERROR);
|
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = UnloaderHandler1Steps.S2250_BCR_USER_COMMAND_START;
|
return;
|
}
|
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray QR Code Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
Bcr_retry_cnt++;
|
Step = UnloaderHandler1Steps.S2240_BCR_DATA_READ;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S2250_BCR_USER_COMMAND_START:
|
{
|
qr_code_user_command = new Tray_QR_Code_Command("ULD TRAY OK QR CODE");
|
qr_code_user_command_show = true;
|
|
Step = UnloaderHandler1Steps.S2260_BCR_USER_COMMAND_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S2260_BCR_USER_COMMAND_CHECK:
|
{
|
if (qr_code_user_command.Command_Type == En_User_Command.Retry)
|
{
|
Bcr_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S2240_BCR_DATA_READ;
|
}
|
else if (qr_code_user_command.Command_Type == En_User_Command.Pass)
|
{
|
equipment.ULD_Tray_BCR.BCR_Stop();
|
|
equipment.UnloaderOkTrayCount = equipment.UnloaderOkTrayCount - 1;
|
Step = UnloaderHandler1Steps.S2999_TRAY_OK_ID_READ_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S2999_TRAY_OK_ID_READ_END:
|
{
|
equipment.unloader.LiftOk.IsBcrReadBit = false;
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
|
break;
|
}
|
}
|
}
|
|
private void Seq_TrayNgIdRead()
|
{
|
switch (Step)
|
{
|
case UnloaderHandler1Steps.S3000_TRAY_NG_ID_READ_START:
|
{
|
Step = UnloaderHandler1Steps.S3100_PICKER_UP;
|
break;
|
}
|
case UnloaderHandler1Steps.S3100_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = UnloaderHandler1Steps.S3200_ULD_TRAY_TR_POSITION_CHECK;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S3200_ULD_TRAY_TR_POSITION_CHECK:
|
{
|
if (equipment.unloader.TrayTransfer.IsStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S3210_MOVE_TRAY_NG_BCR_POS;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S3210_MOVE_TRAY_NG_BCR_POS:
|
{
|
if (Move_X(equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_BCR_X) && Move_Y(equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_BCR_Y))
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Position [Start]");
|
Step = UnloaderHandler1Steps.S3230_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S3230_POSITION_CHECK:
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_BCR_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_BCR_Y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Bcr_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S3240_BCR_DATA_READ;
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S3240_BCR_DATA_READ:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Reading [Start]");
|
|
BCR_Read_Th = new System.Threading.Thread(() => BCR_Read());
|
BCR_Read_Th.Start();
|
|
Step = UnloaderHandler1Steps.S3245_BCR_DATA_READ_WAIT;
|
break;
|
}
|
case UnloaderHandler1Steps.S3245_BCR_DATA_READ_WAIT:
|
{
|
if (BCR_Read_Th != null && BCR_Read_Th.ThreadState != System.Threading.ThreadState.Stopped) return;
|
|
Tact_Move.Stop();
|
|
if (BCR_Data != null && BCR_Data.Length == 14)
|
{
|
equipment.unloader.LiftNg.TrayID = BCR_Data;
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S3999_TRAY_NG_ID_READ_END;
|
}
|
else
|
{
|
if (Bcr_retry_cnt > equipment.Setting.Bcr_Retry_Count)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0866_ULD_TRAY_NG_ID_READ_ERROR);
|
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S3250_BCR_USER_COMMAND_START;
|
return;
|
}
|
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray QR Code Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Bcr_retry_cnt++;
|
Step = UnloaderHandler1Steps.S3240_BCR_DATA_READ;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S3250_BCR_USER_COMMAND_START:
|
{
|
qr_code_user_command = new Tray_QR_Code_Command("ULD TRAY NG QR CODE");
|
qr_code_user_command_show = true;
|
|
Step = UnloaderHandler1Steps.S3260_BCR_USER_COMMAND_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S3260_BCR_USER_COMMAND_CHECK:
|
{
|
if (qr_code_user_command.Command_Type == En_User_Command.Retry)
|
{
|
Bcr_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S3240_BCR_DATA_READ;
|
}
|
else if (qr_code_user_command.Command_Type == En_User_Command.Pass)
|
{
|
equipment.ULD_Tray_BCR.BCR_Stop();
|
|
equipment.UnloaderNgTrayCount = equipment.UnloaderNgTrayCount - 1;
|
Step = UnloaderHandler1Steps.S3999_TRAY_NG_ID_READ_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S3999_TRAY_NG_ID_READ_END:
|
{
|
equipment.unloader.LiftNg.IsBcrReadBit = false;
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
|
break;
|
}
|
}
|
}
|
|
private void Seq_Measurement()
|
{
|
var aoiStage = equipment.after.AoiStage;
|
var isAoiPanel1MeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.Measurement_Ack;
|
var isAoiPanel2MeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.Measurement_Ack;
|
|
var isAoiPanel1WidthMeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.WidthMeasurement_Ack;
|
var isAoiPanel2WidthMeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.WidthMeasurement_Ack;
|
|
switch (Step)
|
{
|
case UnloaderHandler1Steps.S4000_MEASUREMENT_START:
|
{
|
Tact_AOI.Start();
|
measurement_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S4100_ULD_HANDLER_2_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4100_ULD_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 = UnloaderHandler1Steps.S4110_REVERSE_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4110_REVERSE_POSITION_CHECK:
|
{
|
if (equipment.after.ReverseStage.IsStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S4120_PICKER_UP;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4120_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Ready [Start]");
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1MeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4150_RIGHT_CAMERA_GRAB_READY;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Ready_Req(0, 0, 0, info.Stage_Num, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
Step = UnloaderHandler1Steps.S4140_LEFT_CAMERA_GRAB_READY_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4140_LEFT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4150_RIGHT_CAMERA_GRAB_READY;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4150_RIGHT_CAMERA_GRAB_READY:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) break;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2MeasurementAck)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Ready [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Ready [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S4200_MOVE_MEASUREMENT_MARK1_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Ready_Req(1, 0, 0, info.Stage_Num, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
Step = UnloaderHandler1Steps.S4160_RIGHT_CAMERA_GRAB_READY_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4160_RIGHT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Ready [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Ready [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S4200_MOVE_MEASUREMENT_MARK1_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4200_MOVE_MEASUREMENT_MARK1_POSITION:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading Position [Start]");
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.AOI_Mark1_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.AOI_Mark1_Y, 500))
|
Step = UnloaderHandler1Steps.S4205_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4205_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.AOI_Mark1_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.AOI_Mark1_Y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4210_LEFT_CAMERA_MARK_1_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4200_MOVE_MEASUREMENT_MARK1_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4210_LEFT_CAMERA_MARK_1_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [Start]");
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1MeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4230_RIGHT_CAMERA_MARK_1_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Start_Req(0, 0, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4220_LEFT_CAMERA_MARK_1_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4220_LEFT_CAMERA_MARK_1_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4230_RIGHT_CAMERA_MARK_1_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4230_RIGHT_CAMERA_MARK_1_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2MeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4300_MOVE_MEASUREMENT_MARK2_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Start_Req(1, 0, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4240_RIGHT_CAMERA_MARK_1_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4240_RIGHT_CAMERA_MARK_1_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4300_MOVE_MEASUREMENT_MARK2_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4300_MOVE_MEASUREMENT_MARK2_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.AOI_Mark2_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.AOI_Mark2_Y, 500))
|
Step = UnloaderHandler1Steps.S4305_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4305_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.AOI_Mark2_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.AOI_Mark2_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4310_LEFT_CAMERA_MARK_2_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4300_MOVE_MEASUREMENT_MARK2_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4310_LEFT_CAMERA_MARK_2_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1MeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4330_RIGHT_CAMERA_MARK_2_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Start_Req(0, 1, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4320_LEFT_CAMERA_MARK_2_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4320_LEFT_CAMERA_MARK_2_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4330_RIGHT_CAMERA_MARK_2_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4330_RIGHT_CAMERA_MARK_2_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2MeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
|
if (equipment.Cur_Main_Recipe.vision_info.AoiMark34Use)
|
{
|
Step = UnloaderHandler1Steps.S4400_MOVE_MEASUREMENT_MARK3_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK;
|
}
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Start_Req(1, 1, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4340_RIGHT_CAMERA_MARK_2_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4340_RIGHT_CAMERA_MARK_2_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
if (equipment.Cur_Main_Recipe.vision_info.AoiMark34Use)
|
{
|
Step = UnloaderHandler1Steps.S4400_MOVE_MEASUREMENT_MARK3_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK;
|
}
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4400_MOVE_MEASUREMENT_MARK3_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.AOI_Mark3_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.AOI_Mark3_Y, 500))
|
Step = UnloaderHandler1Steps.S4405_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4405_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.AOI_Mark3_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.AOI_Mark3_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4410_LEFT_CAMERA_MARK_3_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4400_MOVE_MEASUREMENT_MARK3_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4410_LEFT_CAMERA_MARK_3_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1MeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4430_RIGHT_CAMERA_MARK_3_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Start_Req(0, 2, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4420_LEFT_CAMERA_MARK_3_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4420_LEFT_CAMERA_MARK_3_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4430_RIGHT_CAMERA_MARK_3_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4430_RIGHT_CAMERA_MARK_3_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2MeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
Step = UnloaderHandler1Steps.S4500_MOVE_MEASUREMENT_MARK4_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Start_Req(1, 2, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4440_RIGHT_CAMERA_MARK_3_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4440_RIGHT_CAMERA_MARK_3_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4500_MOVE_MEASUREMENT_MARK4_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4500_MOVE_MEASUREMENT_MARK4_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.AOI_Mark4_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.AOI_Mark4_Y, 500))
|
Step = UnloaderHandler1Steps.S4505_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4505_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.AOI_Mark4_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.AOI_Mark4_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4510_LEFT_CAMERA_MARK_4_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4500_MOVE_MEASUREMENT_MARK4_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4510_LEFT_CAMERA_MARK_4_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1MeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4530_RIGHT_CAMERA_MARK_4_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Start_Req(0, 3, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4520_LEFT_CAMERA_MARK_4_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4520_LEFT_CAMERA_MARK_4_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4530_RIGHT_CAMERA_MARK_4_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4530_RIGHT_CAMERA_MARK_4_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2MeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
Step = UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_Measurement_Grab_Start_Req(1, 3, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4540_RIGHT_CAMERA_MARK_4_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4540_RIGHT_CAMERA_MARK_4_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK:
|
{
|
var aoistage = equipment.after.AoiStage;
|
var info1 = aoistage.Panel1;
|
var info2 = aoistage.Panel2;
|
object value;
|
bool result;
|
if ((isAoiPanel1MeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack))
|
&& (isAoiPanel2MeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack)))
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Align_Result))
|
{
|
info1.Measurement_Ack = true;
|
|
if(equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Result, out result))
|
{
|
info1.Measurement_Result = result;
|
}
|
else
|
{
|
return;
|
}
|
|
info1.End_Time = DateTime.Now;
|
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_1_Point_1, out value);
|
info1.Mark1Point1 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_1_Point_2, out value);
|
info1.Mark1Point2 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_2_Point_1, out value);
|
info1.Mark2Point1 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_2_Point_2, out value);
|
info1.Mark2Point2 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_3_Point_1, out value);
|
info1.Mark3Point1 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_3_Point_2, out value);
|
info1.Mark3Point2 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_4_Point_1, out value);
|
info1.Mark4Point1 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_4_Point_2, out value);
|
info1.Mark4Point2 = double.Parse(value.ToString());
|
|
aoistage.Panel1 = info1;
|
|
isAoiPanel1MeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.Measurement_Ack;
|
}
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Align_Result))
|
{
|
info2.Measurement_Ack = true;
|
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Result, out result))
|
{
|
info2.Measurement_Result = result;
|
}
|
else
|
{
|
return;
|
}
|
|
info2.End_Time = DateTime.Now;
|
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, out value);
|
info2.Mark1Point1 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_2, out value);
|
info2.Mark1Point2 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_2_Point_1, out value);
|
info2.Mark2Point1 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_2_Point_2, out value);
|
info2.Mark2Point2 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_3_Point_1, out value);
|
info2.Mark3Point1 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_3_Point_2, out value);
|
info2.Mark3Point2 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_4_Point_1, out value);
|
info2.Mark4Point1 = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_4_Point_2, out value);
|
info2.Mark4Point2 = double.Parse(value.ToString());
|
|
aoistage.Panel2 = info2;
|
|
isAoiPanel2MeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.Measurement_Ack;
|
}
|
}
|
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
|
if (isAoiPanel1MeasurementAck && isAoiPanel2MeasurementAck)
|
{
|
//AOI 완료. -> Width meausrement 여기에 추가 해야 될듯..?
|
|
if (equipment.Mode.Width_Measurement_Skip || equipment.WidthMeasurementCount < equipment.Setting.Width_Measurement_Count)
|
{
|
equipment.WidthMeasurementCount = equipment.WidthMeasurementCount + 1;
|
|
if (equipment.cim_mode == En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
}
|
else
|
{
|
equipment.WidthMeasurementCount = 0;
|
measurement_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
else
|
{
|
equipment.Aoi_vision.WriteClientLog("no align result");
|
measurement_retry_cnt++;
|
|
if (measurement_retry_cnt >= equipment.Setting.Vision_Retry_Count)
|
{
|
Step = UnloaderHandler1Steps.S4560_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
else
|
{
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
measurement_retry_cnt++;
|
|
if (measurement_retry_cnt > equipment.Setting.Vision_Retry_Count)
|
{
|
if (sequenceChangedTime.Minute > 5)
|
{
|
Step = UnloaderHandler1Steps.S4560_USER_COMMAND_START;
|
}
|
}
|
else if (measurement_retry_cnt == equipment.Setting.Vision_Retry_Count)
|
{
|
equipment.Aoi_vision.WriteClientLog("no ack result");
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = UnloaderHandler1Steps.S4560_USER_COMMAND_START;
|
}
|
else
|
{
|
equipment.Aoi_vision.WriteClientLog("no ack result");
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4560_USER_COMMAND_START:
|
{
|
var aoistage = equipment.after.AoiStage;
|
Panel_Info info1 = aoistage.Panel1;
|
Panel_Info info2 = aoistage.Panel2;
|
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0886_MEASUREMENT_LEFT_ERROR);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0887_MEASUREMENT_RIGHT_ERROR);
|
}
|
|
measurement_user_command = new Form_User_Command_Set("Measurement");
|
measurement_user_command_show = true;
|
|
Step = UnloaderHandler1Steps.S4570_USER_COMMAND_WAIT;
|
break;
|
}
|
case UnloaderHandler1Steps.S4570_USER_COMMAND_WAIT:
|
{
|
var aoistage = equipment.after.AoiStage;
|
Panel_Info info1 = aoistage.Panel1;
|
Panel_Info info2 = aoistage.Panel2;
|
|
if (measurement_user_command.Command_Type == En_User_Command.Scrap)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
aoistage.Panel1 = new Panel_Info();
|
aoistage.Stage_1_Scrap();
|
equipment.Aoi_vision.Send_Measurement_Command_Req(0, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
aoistage.Panel2 = new Panel_Info();
|
aoistage.Stage_2_Scrap();
|
equipment.Aoi_vision.Send_Measurement_Command_Req(0, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
else if (measurement_user_command.Command_Type == En_User_Command.Retry)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
equipment.Aoi_vision.Send_Measurement_Command_Req(1, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
equipment.Aoi_vision.Send_Measurement_Command_Req(1, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
measurement_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S4130_LEFT_CAMERA_GRAB_READY;
|
}
|
else if (measurement_user_command.Command_Type == En_User_Command.Skip)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Align_Result, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(2, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Align_Result, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK;
|
}
|
else if (measurement_user_command.Command_Type == En_User_Command.Pass)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Align_Result, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(3, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Align_Result, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(3, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK;
|
}
|
else if (measurement_user_command.Command_Type == En_User_Command.Manual)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Ack, false);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Align_Result, false);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(4, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Ack, false);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Align_Result, false);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(4, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = UnloaderHandler1Steps.S4550_MEASUREMENT_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Ready [Start]");
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4602_RIGHT_CAMERA_GRAB_READY;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Ready_Req(0, 0, 0, info.Stage_Num, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
Step = UnloaderHandler1Steps.S4601_LEFT_CAMERA_GRAB_READY_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4601_LEFT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4602_RIGHT_CAMERA_GRAB_READY;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4602_RIGHT_CAMERA_GRAB_READY:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) break;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S4610_MOVE_MEASUREMENT_MARK1_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Ready_Req(1, 0, 0, info.Stage_Num, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
Step = UnloaderHandler1Steps.S4603_RIGHT_CAMERA_GRAB_READY_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4603_RIGHT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S4610_MOVE_MEASUREMENT_MARK1_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4610_MOVE_MEASUREMENT_MARK1_POSITION:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [Start]");
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark1_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark1_Y, 500))
|
Step = UnloaderHandler1Steps.S4611_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4611_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark1_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark1_Y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4612_LEFT_CAMERA_MARK_1_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4610_MOVE_MEASUREMENT_MARK1_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4612_LEFT_CAMERA_MARK_1_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Start]");
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4614_RIGHT_CAMERA_MARK_1_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 0, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4613_LEFT_CAMERA_MARK_1_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4613_LEFT_CAMERA_MARK_1_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4614_RIGHT_CAMERA_MARK_1_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4614_RIGHT_CAMERA_MARK_1_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4620_MOVE_MEASUREMENT_MARK2_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 0, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4615_RIGHT_CAMERA_MARK_1_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4615_RIGHT_CAMERA_MARK_1_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4620_MOVE_MEASUREMENT_MARK2_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4620_MOVE_MEASUREMENT_MARK2_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark2_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark2_Y, 500))
|
Step = UnloaderHandler1Steps.S4621_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4621_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark2_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark2_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4622_LEFT_CAMERA_MARK_2_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4620_MOVE_MEASUREMENT_MARK2_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4622_LEFT_CAMERA_MARK_2_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4624_RIGHT_CAMERA_MARK_2_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 1, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4623_LEFT_CAMERA_MARK_2_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4623_LEFT_CAMERA_MARK_2_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4624_RIGHT_CAMERA_MARK_2_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4624_RIGHT_CAMERA_MARK_2_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
|
Step = UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 1, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4625_RIGHT_CAMERA_MARK_2_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4625_RIGHT_CAMERA_MARK_2_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark3_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark3_Y, 500))
|
Step = UnloaderHandler1Steps.S4631_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4631_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark3_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark3_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4632_LEFT_CAMERA_MARK_3_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4632_LEFT_CAMERA_MARK_3_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4634_RIGHT_CAMERA_MARK_3_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 2, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4633_LEFT_CAMERA_MARK_3_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4633_LEFT_CAMERA_MARK_3_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4634_RIGHT_CAMERA_MARK_3_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4634_RIGHT_CAMERA_MARK_3_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
Step = UnloaderHandler1Steps.S4640_MOVE_MEASUREMENT_MARK4_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 2, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4635_RIGHT_CAMERA_MARK_3_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4635_RIGHT_CAMERA_MARK_3_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4640_MOVE_MEASUREMENT_MARK4_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4640_MOVE_MEASUREMENT_MARK4_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark4_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark4_Y, 500))
|
Step = UnloaderHandler1Steps.S4641_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4641_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark4_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark4_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4642_LEFT_CAMERA_MARK_4_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4640_MOVE_MEASUREMENT_MARK4_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4642_LEFT_CAMERA_MARK_4_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4644_RIGHT_CAMERA_MARK_4_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 3, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4643_LEFT_CAMERA_MARK_4_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4643_LEFT_CAMERA_MARK_4_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4644_RIGHT_CAMERA_MARK_4_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4644_RIGHT_CAMERA_MARK_4_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 3, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4645_RIGHT_CAMERA_MARK_4_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4645_RIGHT_CAMERA_MARK_4_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK:
|
{
|
var aoistage = equipment.after.AoiStage;
|
var info1 = aoistage.Panel1;
|
var info2 = aoistage.Panel2;
|
|
object value;
|
if ((isAoiPanel1WidthMeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack))
|
&& (isAoiPanel2WidthMeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack)))
|
{
|
if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false)
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack))
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Result))
|
{
|
info1.WidthMeasurement_Ack = true;
|
info1.WidthMeasurement_Result = true;
|
|
info1.End_Time = DateTime.Now;
|
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_1_Point_1, out value);
|
info1.Mark1Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_2_Point_1, out value);
|
info1.Mark2Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_3_Point_1, out value);
|
info1.Mark3Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_4_Point_1, out value);
|
info1.Mark4Width = double.Parse(value.ToString());
|
|
aoistage.Panel1 = info1;
|
|
isAoiPanel1WidthMeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.WidthMeasurement_Ack;
|
}
|
}
|
else
|
{
|
return;
|
}
|
}
|
|
if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false)
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack))
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Result))
|
{
|
info2.WidthMeasurement_Ack = true;
|
info2.WidthMeasurement_Result = true;
|
|
info2.End_Time = DateTime.Now;
|
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, out value);
|
info2.Mark1Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_2_Point_1, out value);
|
info2.Mark2Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_3_Point_1, out value);
|
info2.Mark3Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_4_Point_1, out value);
|
info2.Mark4Width = double.Parse(value.ToString());
|
|
aoistage.Panel2 = info2;
|
|
isAoiPanel2WidthMeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.WidthMeasurement_Ack;
|
}
|
}
|
else
|
{
|
return;
|
}
|
}
|
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
|
if (isAoiPanel1WidthMeasurementAck && isAoiPanel2WidthMeasurementAck)
|
{
|
if(equipment.Cur_Main_Recipe.vision_info.Width_AOI_8Use)
|
{
|
info1.WidthMeasurement_Ack = false;
|
info2.WidthMeasurement_Ack = false;
|
info1.WidthMeasurement_Result = false;
|
info2.WidthMeasurement_Result = false;
|
|
aoistage.Panel1 = info1;
|
aoistage.Panel2 = info2;
|
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
else
|
{
|
if (equipment.cim_mode == En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
}
|
}
|
else
|
{
|
equipment.Aoi_vision.WriteClientLog("no align result");
|
measurement_retry_cnt++;
|
|
if (measurement_retry_cnt >= equipment.Setting.Vision_Retry_Count)
|
{
|
Step = UnloaderHandler1Steps.S4660_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
else
|
{
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
measurement_retry_cnt++;
|
|
if (measurement_retry_cnt == equipment.Setting.Vision_Retry_Count)
|
{
|
equipment.Aoi_vision.WriteClientLog("no ack result");
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = UnloaderHandler1Steps.S4660_USER_COMMAND_START;
|
}
|
else
|
{
|
equipment.Aoi_vision.WriteClientLog("no ack result");
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4660_USER_COMMAND_START:
|
{
|
var aoistage = equipment.after.AoiStage;
|
Panel_Info info1 = aoistage.Panel1;
|
Panel_Info info2 = aoistage.Panel2;
|
|
if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0888_MEASUREMENT_WIDTH_ERROR);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0888_MEASUREMENT_WIDTH_ERROR);
|
}
|
|
measurement_user_command = new Form_User_Command_Set("Width Measurement");
|
measurement_user_command.UserManualEnable(false);
|
measurement_user_command_show = true;
|
|
Step = UnloaderHandler1Steps.S4670_USER_COMMAND_WAIT;
|
break;
|
}
|
case UnloaderHandler1Steps.S4670_USER_COMMAND_WAIT:
|
{
|
var aoistage = equipment.after.AoiStage;
|
Panel_Info info1 = aoistage.Panel1;
|
Panel_Info info2 = aoistage.Panel2;
|
|
if (measurement_user_command.Command_Type == En_User_Command.Scrap)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
aoistage.Panel1 = new Panel_Info();
|
aoistage.Stage_1_Scrap();
|
equipment.Aoi_vision.Send_Measurement_Command_Req(0, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
aoistage.Panel2 = new Panel_Info();
|
aoistage.Stage_2_Scrap();
|
equipment.Aoi_vision.Send_Measurement_Command_Req(0, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
else if (measurement_user_command.Command_Type == En_User_Command.Retry)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
equipment.Aoi_vision.Send_Measurement_Command_Req(1, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
equipment.Aoi_vision.Send_Measurement_Command_Req(1, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
measurement_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
|
}
|
else if (measurement_user_command.Command_Type == En_User_Command.Skip)
|
{
|
if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Align_Result, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(2, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
info1.Measurement_Result = false;
|
aoistage.Panel1 = info1;
|
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Align_Result, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
info2.Measurement_Result = false;
|
aoistage.Panel2 = info2;
|
}
|
|
if (equipment.cim_mode == En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
}
|
break;
|
}
|
|
case UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Ready [Start]");
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4702_RIGHT_CAMERA_GRAB_READY;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Ready_Req(0, 0, 0, info.Stage_Num, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
Step = UnloaderHandler1Steps.S4701_LEFT_CAMERA_GRAB_READY_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4701_LEFT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4702_RIGHT_CAMERA_GRAB_READY;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4702_RIGHT_CAMERA_GRAB_READY:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) break;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S4710_MOVE_MEASUREMENT_MARK1_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Ready_Req(1, 0, 0, info.Stage_Num, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
Step = UnloaderHandler1Steps.S4703_RIGHT_CAMERA_GRAB_READY_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4703_RIGHT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S4710_MOVE_MEASUREMENT_MARK1_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4710_MOVE_MEASUREMENT_MARK1_POSITION:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [Start]");
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark5_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark5_Y, 500))
|
Step = UnloaderHandler1Steps.S4711_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4711_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark5_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark5_Y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4712_LEFT_CAMERA_MARK_1_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4710_MOVE_MEASUREMENT_MARK1_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4712_LEFT_CAMERA_MARK_1_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Start]");
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4714_RIGHT_CAMERA_MARK_1_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 0, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4713_LEFT_CAMERA_MARK_1_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4713_LEFT_CAMERA_MARK_1_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4714_RIGHT_CAMERA_MARK_1_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4714_RIGHT_CAMERA_MARK_1_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4720_MOVE_MEASUREMENT_MARK2_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 0, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4715_RIGHT_CAMERA_MARK_1_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4715_RIGHT_CAMERA_MARK_1_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4720_MOVE_MEASUREMENT_MARK2_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4720_MOVE_MEASUREMENT_MARK2_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark6_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark6_Y, 500))
|
Step = UnloaderHandler1Steps.S4721_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4721_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark6_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark6_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4722_LEFT_CAMERA_MARK_2_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4720_MOVE_MEASUREMENT_MARK2_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4722_LEFT_CAMERA_MARK_2_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4724_RIGHT_CAMERA_MARK_2_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 1, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4723_LEFT_CAMERA_MARK_2_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4723_LEFT_CAMERA_MARK_2_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4724_RIGHT_CAMERA_MARK_2_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4724_RIGHT_CAMERA_MARK_2_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
|
Step = UnloaderHandler1Steps.S4730_MOVE_MEASUREMENT_MARK3_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 1, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4725_RIGHT_CAMERA_MARK_2_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4725_RIGHT_CAMERA_MARK_2_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4730_MOVE_MEASUREMENT_MARK3_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4730_MOVE_MEASUREMENT_MARK3_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark7_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark7_Y, 500))
|
Step = UnloaderHandler1Steps.S4731_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4731_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark7_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark7_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4732_LEFT_CAMERA_MARK_3_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4730_MOVE_MEASUREMENT_MARK3_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4732_LEFT_CAMERA_MARK_3_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4734_RIGHT_CAMERA_MARK_3_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 2, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4733_LEFT_CAMERA_MARK_3_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4733_LEFT_CAMERA_MARK_3_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4734_RIGHT_CAMERA_MARK_3_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4734_RIGHT_CAMERA_MARK_3_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
Step = UnloaderHandler1Steps.S4740_MOVE_MEASUREMENT_MARK4_POSITION;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 2, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4735_RIGHT_CAMERA_MARK_3_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4735_RIGHT_CAMERA_MARK_3_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4740_MOVE_MEASUREMENT_MARK4_POSITION;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4740_MOVE_MEASUREMENT_MARK4_POSITION:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break;
|
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark8_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark8_Y, 500))
|
Step = UnloaderHandler1Steps.S4741_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S4741_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark8_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark8_Y, equipment.Setting.Inposition_Offset))
|
{
|
vision_delay.Start();
|
Step = UnloaderHandler1Steps.S4742_LEFT_CAMERA_MARK_4_GRAB_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4740_MOVE_MEASUREMENT_MARK4_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4742_LEFT_CAMERA_MARK_4_GRAB_START:
|
{
|
if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.after.AoiStage.Panel1;
|
|
if (isAoiPanel1WidthMeasurementAck)
|
{
|
Step = UnloaderHandler1Steps.S4744_RIGHT_CAMERA_MARK_4_GRAB_START;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 3, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4743_LEFT_CAMERA_MARK_4_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4743_LEFT_CAMERA_MARK_4_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4744_RIGHT_CAMERA_MARK_4_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4744_RIGHT_CAMERA_MARK_4_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1) return;
|
|
var info = equipment.after.AoiStage.Panel2;
|
|
if (isAoiPanel2WidthMeasurementAck)
|
{
|
sequenceChangedTime.Start();
|
Step = UnloaderHandler1Steps.S4750_MEASUREMENT_CHECK;
|
return;
|
}
|
|
if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 3, MotorX.Position, MotorY.Position))
|
Step = UnloaderHandler1Steps.S4745_RIGHT_CAMERA_MARK_4_GRAB_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4745_RIGHT_CAMERA_MARK_4_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
|
{
|
Step = UnloaderHandler1Steps.S4750_MEASUREMENT_CHECK;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4750_MEASUREMENT_CHECK:
|
{
|
var aoistage = equipment.after.AoiStage;
|
var info1 = aoistage.Panel1;
|
var info2 = aoistage.Panel2;
|
|
object value;
|
if ((isAoiPanel1WidthMeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack))
|
&& (isAoiPanel2WidthMeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack)))
|
{
|
if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false)
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack))
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Result))
|
{
|
info1.WidthMeasurement_Ack = true;
|
info1.WidthMeasurement_Result = true;
|
|
info1.End_Time = DateTime.Now;
|
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_1_Point_1, out value);
|
info1.Mark5Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_2_Point_1, out value);
|
info1.Mark6Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_3_Point_1, out value);
|
info1.Mark7Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_4_Point_1, out value);
|
info1.Mark8Width = double.Parse(value.ToString());
|
|
aoistage.Panel1 = info1;
|
|
isAoiPanel1WidthMeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.WidthMeasurement_Result;
|
}
|
}
|
else
|
{
|
return;
|
}
|
}
|
|
if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false)
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack))
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Result))
|
{
|
info2.WidthMeasurement_Ack = true;
|
info2.WidthMeasurement_Result = true;
|
|
info2.End_Time = DateTime.Now;
|
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, out value);
|
info2.Mark5Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_2_Point_1, out value);
|
info2.Mark6Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_3_Point_1, out value);
|
info2.Mark7Width = double.Parse(value.ToString());
|
equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_4_Point_1, out value);
|
info2.Mark8Width = double.Parse(value.ToString());
|
|
aoistage.Panel2 = info2;
|
|
isAoiPanel2WidthMeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.WidthMeasurement_Result;
|
}
|
}
|
else
|
{
|
return;
|
}
|
}
|
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
|
if (isAoiPanel1WidthMeasurementAck && isAoiPanel2WidthMeasurementAck)
|
{
|
if (equipment.cim_mode == En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
}
|
else
|
{
|
equipment.Aoi_vision.WriteClientLog("no align result");
|
measurement_retry_cnt++;
|
|
if (measurement_retry_cnt >= equipment.Setting.Vision_Retry_Count)
|
{
|
Step = UnloaderHandler1Steps.S4760_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
else
|
{
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
measurement_retry_cnt++;
|
|
if (measurement_retry_cnt == equipment.Setting.Vision_Retry_Count)
|
{
|
equipment.Aoi_vision.WriteClientLog("no ack result");
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = UnloaderHandler1Steps.S4760_USER_COMMAND_START;
|
}
|
else
|
{
|
equipment.Aoi_vision.WriteClientLog("no ack result");
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4760_USER_COMMAND_START:
|
{
|
var aoistage = equipment.after.AoiStage;
|
Panel_Info info1 = aoistage.Panel1;
|
Panel_Info info2 = aoistage.Panel2;
|
|
if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0888_MEASUREMENT_WIDTH_ERROR);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0888_MEASUREMENT_WIDTH_ERROR);
|
}
|
|
measurement_user_command = new Form_User_Command_Set("Width Measurement");
|
measurement_user_command.UserManualEnable(false);
|
measurement_user_command_show = true;
|
|
Step = UnloaderHandler1Steps.S4770_USER_COMMAND_WAIT;
|
break;
|
}
|
case UnloaderHandler1Steps.S4770_USER_COMMAND_WAIT:
|
{
|
var aoistage = equipment.after.AoiStage;
|
Panel_Info info1 = aoistage.Panel1;
|
Panel_Info info2 = aoistage.Panel2;
|
|
|
if (measurement_user_command.Command_Type == En_User_Command.Scrap)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
aoistage.Panel1 = new Panel_Info();
|
aoistage.Stage_1_Scrap();
|
equipment.Aoi_vision.Send_Measurement_Command_Req(0, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
aoistage.Panel2 = new Panel_Info();
|
aoistage.Stage_2_Scrap();
|
equipment.Aoi_vision.Send_Measurement_Command_Req(0, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
else if (measurement_user_command.Command_Type == En_User_Command.Retry)
|
{
|
if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false)
|
{
|
equipment.Aoi_vision.Send_Measurement_Command_Req(1, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false)
|
{
|
equipment.Aoi_vision.Send_Measurement_Command_Req(1, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
measurement_retry_cnt = 0;
|
Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY;
|
}
|
else if (measurement_user_command.Command_Type == En_User_Command.Skip)
|
{
|
if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Align_Result, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(2, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
info1.Measurement_Result = false;
|
aoistage.Panel1 = info1;
|
}
|
|
if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Align_Result, true);
|
equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Result, false);
|
equipment.Aoi_vision.Send_Measurement_Command_Req(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
info2.Measurement_Result = false;
|
aoistage.Panel2 = info2;
|
}
|
|
if (equipment.cim_mode == En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
return;
|
}
|
|
Panel_Info info1 = equipment.after.AoiStage.Panel1;
|
|
if (equipment.after.AoiStage.Stage1.IsExist == false || info1.IsPanelIdRead == false)
|
{
|
Step = UnloaderHandler1Steps.S4820_PANEL_RIGHT_CIM_SEND;
|
return;
|
}
|
else
|
{
|
if (equipment.cim_client.Send_Process_End("E123456", info1))
|
{
|
Step = UnloaderHandler1Steps.S4810_PANEL_LEFT_CIM_SEND_WAIT;
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4810_PANEL_LEFT_CIM_SEND_WAIT:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
return;
|
}
|
|
if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PREND))
|
{
|
if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PREND))
|
{
|
Step = UnloaderHandler1Steps.S4820_PANEL_RIGHT_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4820_PANEL_RIGHT_CIM_SEND:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
return;
|
}
|
|
Panel_Info info2 = equipment.after.AoiStage.Panel2;
|
|
if (equipment.after.AoiStage.Stage2.IsExist == false || info2.IsPanelIdRead == false)
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
else
|
{
|
if (equipment.cim_client.Send_Process_End("E123456", info2))
|
{
|
Step = UnloaderHandler1Steps.S4830_PANEL_RIGHT_CIM_SEND_WAIT;
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4830_PANEL_RIGHT_CIM_SEND_WAIT:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
return;
|
}
|
|
if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PREND))
|
{
|
if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PREND))
|
{
|
Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S4820_PANEL_RIGHT_CIM_SEND;
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S4999_MEASUREMENT_END:
|
{
|
Tact_AOI.Stop();
|
|
if (IsStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
}
|
else
|
Step = UnloaderHandler1Steps.S1000_MOVE_TO_STAY_START;
|
|
break;
|
}
|
}
|
}
|
|
private void Seq_PickAOIStage()
|
{
|
switch(Step)
|
{
|
case UnloaderHandler1Steps.S5000_PICK_TO_AOI_STAGE_START:
|
{
|
Step = UnloaderHandler1Steps.S5100_ULD_HANDLER_2_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S5100_ULD_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 = UnloaderHandler1Steps.S5110_REVERSE_STAGE_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S5110_REVERSE_STAGE_POSITION_CHECK:
|
{
|
if (equipment.after.ReverseStage.IsStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S5120_PICKER_UP;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S5120_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = UnloaderHandler1Steps.S5200_MOVE_AOI_STAGE_POSITION;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S5200_MOVE_AOI_STAGE_POSITION:
|
{
|
if(Move_X_AOI_Position() && Move_Y_AOI_Position())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Stage Position [Start]");
|
Step = UnloaderHandler1Steps.S5205_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S5205_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (Get_Is_Position_X_AOI() && Get_Is_Position_Y_AOI())
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Stage Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Stage Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S5210_PICK_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S5200_MOVE_AOI_STAGE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S5210_PICK_START:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Stage Pick [Start]");
|
|
if (equipment.after.AoiStage.Stage1.IsExist)
|
{
|
_picker1Step = PickerSteps.S1000_PICK_AOI_STAGE_START;
|
}
|
|
if (equipment.after.AoiStage.Stage2.IsExist)
|
{
|
_picker2Step = PickerSteps.S1000_PICK_AOI_STAGE_START;
|
}
|
|
Step = UnloaderHandler1Steps.S5220_PICK_WAIT;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S5220_PICK_WAIT:
|
{
|
if(_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Stage Pick [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Stage Pick [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S5999_PICK_TO_AOI_STAGE_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S5999_PICK_TO_AOI_STAGE_END:
|
{
|
Tact_Move.Stop();
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_PickReverseStage()
|
{
|
switch (Step)
|
{
|
case UnloaderHandler1Steps.S6000_PICK_TO_REVERSE_STAGE_START:
|
{
|
Step = UnloaderHandler1Steps.S6100_ULD_HANDLER_2_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S6100_ULD_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 = UnloaderHandler1Steps.S6110_REVERSE_STAGE_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S6110_REVERSE_STAGE_POSITION_CHECK:
|
{
|
if (equipment.after.ReverseStage.IsStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S6120_PICKER_UP;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S6120_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = UnloaderHandler1Steps.S6200_MOVE_REVERSE_STAGE_POSITION;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S6200_MOVE_REVERSE_STAGE_POSITION:
|
{
|
if (Move_X_Reverse_Position() && Move_Y_Reverse_Position())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Position [Start]");
|
Step = UnloaderHandler1Steps.S6205_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S6205_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (Get_Is_Position_X_Reverse() && Get_Is_Position_Y_Reverse())
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S6210_PICK_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S6200_MOVE_REVERSE_STAGE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S6210_PICK_START:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Pick [Start]");
|
|
if (equipment.after.ReverseStage.Stage1.IsExist)
|
{
|
_picker1Step = PickerSteps.S2000_PICK_REVERSE_START;
|
}
|
|
if (equipment.after.ReverseStage.Stage2.IsExist)
|
{
|
_picker2Step = PickerSteps.S2000_PICK_REVERSE_START;
|
}
|
|
Step = UnloaderHandler1Steps.S6220_PICK_WAIT;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S6220_PICK_WAIT:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Pick [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Pick [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S6999_PICK_TO_REVERSE_STAGE_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S6999_PICK_TO_REVERSE_STAGE_END:
|
{
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_PlaceReverseStage()
|
{
|
switch (Step)
|
{
|
case UnloaderHandler1Steps.S7000_PLACE_TO_REVERSE_STAGE_CHANGE_START:
|
{
|
Step = UnloaderHandler1Steps.S7100_ULD_HANDLER_2_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S7100_ULD_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 = UnloaderHandler1Steps.S7110_REVERSE_STAGE_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7110_REVERSE_STAGE_POSITION_CHECK:
|
{
|
if (equipment.after.ReverseStage.IsStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S7120_PICKER_UP;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7120_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = UnloaderHandler1Steps.S7130_VACUUM_CHECK;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7130_VACUUM_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))
|
{
|
if (Picker1.IsExist)
|
{
|
Step = UnloaderHandler1Steps.S7200_MOVE_PICKER1_REVERSE_STAGE_POSITION;
|
}
|
else if (Picker2.IsExist)
|
{
|
Step = UnloaderHandler1Steps.S7300_MOVE_PICKER2_REVERSE_STAGE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7200_MOVE_PICKER1_REVERSE_STAGE_POSITION:
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
position = position + handler_pitch;
|
position = double.Parse(position.ToString("F3"));
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
if (MotorX.Move_Absolute_Pos(position, velocity) && Move_Y_Reverse_Position())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Buffer Position [Start]");
|
Step = UnloaderHandler1Steps.S7205_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7205_POSITION_CHECK:
|
{
|
object value;
|
double position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
position = position + handler_pitch;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(position, equipment.Setting.Inposition_Offset) && Get_Is_Position_Y_Reverse())
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Buffer Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Buffer Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S7210_PICKER1_PLACE_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S7200_MOVE_PICKER1_REVERSE_STAGE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7210_PICKER1_PLACE_START:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [Start]");
|
|
_picker1Step = PickerSteps.S3000_PLACE_REVERSE_STAGE_START;
|
|
Step = UnloaderHandler1Steps.S7220_PICKER1_PLACE_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S7220_PICKER1_PLACE_WAIT:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [Tact : {Tact_Move.Seconds} (sec)]");
|
|
if(Picker2.IsExist)
|
{
|
Step = UnloaderHandler1Steps.S7300_MOVE_PICKER2_REVERSE_STAGE_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S7999_PLACE_TO_REVERSE_STAGE_CHANGE_END;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7300_MOVE_PICKER2_REVERSE_STAGE_POSITION:
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
position = position - handler_pitch;
|
position = double.Parse(position.ToString("F3"));
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
if (MotorX.Move_Absolute_Pos(position, velocity) && Move_Y_Reverse_Position())
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Buffer Position [Start]");
|
|
Step = UnloaderHandler1Steps.S7305_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7305_POSITION_CHECK:
|
{
|
object value;
|
double position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
position = position - handler_pitch;
|
position = double.Parse(position.ToString("F3"));
|
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(position, equipment.Setting.Inposition_Offset) && Get_Is_Position_Y_Reverse())
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Buffer Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Reverse Stage Buffer Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S7310_PICKER2_PLACE_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S7300_MOVE_PICKER2_REVERSE_STAGE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7310_PICKER2_PLACE_START:
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #2 Place [Start]");
|
|
_picker2Step = PickerSteps.S3000_PLACE_REVERSE_STAGE_START;
|
Step = UnloaderHandler1Steps.S7320_PICKER2_PLACE_WAIT;
|
|
break;
|
}
|
case UnloaderHandler1Steps.S7320_PICKER2_PLACE_WAIT:
|
{
|
if (_picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #2 Place [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #2 Place [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S7999_PLACE_TO_REVERSE_STAGE_CHANGE_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S7999_PLACE_TO_REVERSE_STAGE_CHANGE_END:
|
{
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_PlaceTrayPanel()
|
{
|
switch (Step)
|
{
|
case UnloaderHandler1Steps.S8000_PLACE_TO_TRAY_START:
|
{
|
Tact_Move.Start();
|
Step = UnloaderHandler1Steps.S8100_ULD_TRAY_TR_POSITION_CHECK;
|
break;
|
}
|
case UnloaderHandler1Steps.S8100_ULD_TRAY_TR_POSITION_CHECK:
|
{
|
if(equipment.unloader.TrayTransfer.IsStayPosition)
|
{
|
Step = UnloaderHandler1Steps.S8110_PICKER_UP;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8110_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = UnloaderHandler1Steps.S8200_PICKER1_DATA_CHECK;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S8200_PICKER1_DATA_CHECK:
|
{
|
if(Picker1.IsExist)
|
{
|
if((equipment.Mode.Film_Judge_Skip || Panel1.Film_Judge_Result) && (equipment.Mode.Measurement_Skip || Panel1.Measurement_Result))
|
{
|
Step = UnloaderHandler1Steps.S8210_PICKER1_GET_OK_PANEL_NUM;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8400_PICKER1_GET_NG_PANEL_NUM;
|
}
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8210_PICKER1_GET_OK_PANEL_NUM:
|
{
|
int panel_num = 0;
|
|
if(Get_Handler_1_1_Tray_OK_Panel_Num(out panel_num))
|
{
|
place_panel_num = panel_num;
|
Step = UnloaderHandler1Steps.S8220_PICKER1_GET_PLACE_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S8220_PICKER1_GET_PLACE_POSITION:
|
{
|
double position_x;
|
double position_y;
|
if (Get_Tray_OK_ULD_Handler_1_X_Position(place_panel_num, out position_x) && Get_Tray_OK_ULD_Handler_1_Y_Position(place_panel_num, out position_y))
|
{
|
place_position_x = position_x;
|
place_position_y = position_y;
|
|
Step = UnloaderHandler1Steps.S8300_MOVE_PLACE_POSITION;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8300_MOVE_PLACE_POSITION:
|
{
|
if(Move_X(place_position_x) && Move_Y(place_position_y))
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray Position [Start]");
|
Step = UnloaderHandler1Steps.S8305_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8305_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(place_position_x, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(place_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S8310_PICKER1_PLACE_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8300_MOVE_PLACE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8310_PICKER1_PLACE_START:
|
{
|
if (Picker1.IsExist)
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [Start]");
|
_picker1Step = PickerSteps.S4000_PLACE_TRAY_PANEL_START;
|
Step = UnloaderHandler1Steps.S8315_PICKER1_PLACE_WAIT;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8315_PICKER1_PLACE_WAIT:
|
{
|
if(_picker1Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S8320_TRAY_OK_DATA_SET;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8320_TRAY_OK_DATA_SET:
|
{
|
Panel_Info info = Panel1;
|
|
info.Panel_Num = place_panel_num;
|
|
if (Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.ULD_Tray_Ok, info))
|
{
|
equipment.Write_Panel_Info_Log($"{equipment.equipment_info.Device_ID},{equipment.equipment_info.Process_Number},{equipment.equipment_info.Module_Model_ID},{info.Panel_ID},판정,{info.Start_Time},{info.End_Time},{info.Film_Judge_Result},OK");
|
|
equipment.panel_count_info.Day_ULD_OK_Count++;
|
equipment.panel_count_info.Minute_ULD_OK_Count++;
|
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(equipment.panel_count_info);
|
|
//210923 hslee, chs 220530 Tray -> Panel 로 변경.====================================================================================
|
object value;
|
|
equipment.sm.Get_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, out value);
|
equipment.sm.Set_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, Convert.ToInt32(value) + 1);
|
equipment.SaveTempGlassOutCnt();
|
//=================================================================================================
|
|
Panel1 = new Panel_Info();
|
}
|
else
|
{
|
return;
|
}
|
|
if (equipment.cim_mode == En_Cim_Mode.Online && info.IsPanelIdRead)
|
{
|
Step = UnloaderHandler1Steps.S8330_TRAY_IN_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
|
ng_place_runned = false;
|
break;
|
}
|
case UnloaderHandler1Steps.S8330_TRAY_IN_CIM_SEND:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
return;
|
}
|
|
object value;
|
equipment.sm.Get_Value(Process_Memory_Address.ULD_Tray_Ok_ID, out value);
|
|
Panel_Info info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ok, place_panel_num);
|
|
if (!equipment.cim_client.Send_Panel_Tray_In("E123456", value.ToString(), info.Panel_ID, $"{cim_column}{cim_row + 1}", En_Port_ID.P03))
|
return;
|
|
Step = UnloaderHandler1Steps.S8340_TRAY_IN_CIM_SEND_WAIT;
|
break;
|
}
|
case UnloaderHandler1Steps.S8340_TRAY_IN_CIM_SEND_WAIT:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
return;
|
}
|
|
if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PTINR))
|
{
|
if(equipment.cim_client.Get_Command_Result(En_Cim_Command.PTINR))
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8330_TRAY_IN_CIM_SEND;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8400_PICKER1_GET_NG_PANEL_NUM:
|
{
|
int panel_num = 0;
|
|
if (Get_Handler_1_1_Tray_NG_Panel_Num(out panel_num))
|
{
|
place_panel_num = panel_num;
|
Step = UnloaderHandler1Steps.S8410_PICKER1_GET_PLACE_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8410_PICKER1_GET_PLACE_POSITION:
|
{
|
double position_x;
|
double position_y;
|
if (Get_Tray_NG_ULD_Handler_1_X_Position(place_panel_num, out position_x) && Get_Tray_NG_ULD_Handler_1_Y_Position(place_panel_num, out position_y))
|
{
|
place_position_x = position_x;
|
place_position_y = position_y;
|
|
Step = UnloaderHandler1Steps.S8500_MOVE_Y_PLACE_POSITION;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8500_MOVE_Y_PLACE_POSITION:
|
{
|
if (Move_Y(place_position_y))
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray Position [Start]");
|
Step = UnloaderHandler1Steps.S8505_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8505_POSITION_CHECK:
|
{
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(place_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Step = UnloaderHandler1Steps.S8510_MOVE_X_PLACE_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8500_MOVE_Y_PLACE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8510_MOVE_X_PLACE_POSITION:
|
{
|
if (Move_X(place_position_x))
|
{
|
Step = UnloaderHandler1Steps.S8515_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8515_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(place_position_x, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(place_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S8520_PICKER1_PLACE_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8500_MOVE_Y_PLACE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8520_PICKER1_PLACE_START:
|
{
|
if (Picker1.IsExist)
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [Start]");
|
|
_picker1Step = PickerSteps.S4000_PLACE_TRAY_PANEL_START;
|
Step = UnloaderHandler1Steps.S8525_PICKER1_PLACE_WAIT;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8525_PICKER1_PLACE_WAIT:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S8530_TRAY_NG_DATA_SET;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8530_TRAY_NG_DATA_SET:
|
{
|
Panel_Info info = Panel1;
|
|
info.Panel_Num = place_panel_num;
|
|
if (Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.ULD_Tray_Ng, info))
|
{
|
equipment.Write_Panel_Info_Log($"{equipment.equipment_info.Device_ID},{equipment.equipment_info.Process_Number},{equipment.equipment_info.Module_Model_ID},{info.Panel_ID},판정,{info.Start_Time},{info.End_Time},{info.Film_Judge_Result},NG");
|
|
equipment.panel_count_info.Day_ULD_NG_Count++;
|
equipment.panel_count_info.Minute_ULD_NG_Count++;
|
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(equipment.panel_count_info);
|
|
//210923 hslee, chs 220530 Tray -> Panel 로 변경.====================================================================================
|
object value;
|
|
equipment.sm.Get_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, out value);
|
equipment.sm.Set_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, Convert.ToInt32(value) + 1);
|
equipment.SaveTempGlassOutCnt();
|
//=================================================================================================
|
|
Panel1 = new Panel_Info();
|
}
|
else
|
{
|
return;
|
}
|
|
ng_place_runned = true;
|
|
if (equipment.cim_mode == En_Cim_Mode.Online && info.IsPanelIdRead)
|
{
|
Step = UnloaderHandler1Steps.S8540_TRAY_IN_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8540_TRAY_IN_CIM_SEND:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
return;
|
}
|
|
Panel_Info info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ng, place_panel_num);
|
|
if (!equipment.cim_client.Send_Panel_Tray_In("E123456", equipment.unloader.LiftNg.TrayID, info.Panel_ID, $"{cim_column}{cim_row + 1}", En_Port_ID.P04))
|
return;
|
|
Step = UnloaderHandler1Steps.S8550_TRAY_IN_CIM_SEND_WAIT;
|
break;
|
}
|
case UnloaderHandler1Steps.S8550_TRAY_IN_CIM_SEND_WAIT:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
return;
|
}
|
|
if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PTINR))
|
{
|
if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PTINR))
|
{
|
Step = UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8540_TRAY_IN_CIM_SEND;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8600_PICKER2_DATA_CHECK:
|
{
|
if (Picker2.IsExist)
|
{
|
if ((equipment.Mode.Film_Judge_Skip || Panel2.Film_Judge_Result) && (equipment.Mode.Measurement_Skip || Panel2.Measurement_Result))
|
{
|
Step = UnloaderHandler1Steps.S8610_PICKER2_GET_OK_PANEL_NUM;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8800_PICKER2_GET_NG_PANEL_NUM;
|
}
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8610_PICKER2_GET_OK_PANEL_NUM:
|
{
|
int panel_num = 0;
|
|
if (Get_Handler_1_2_Tray_OK_Panel_Num(out panel_num))
|
{
|
place_panel_num = panel_num;
|
Step = UnloaderHandler1Steps.S8620_PICKER2_GET_PLACE_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8620_PICKER2_GET_PLACE_POSITION:
|
{
|
double position_x;
|
double position_y;
|
if (Get_Tray_OK_ULD_Handler_1_X_Position(place_panel_num, out position_x) && Get_Tray_OK_ULD_Handler_1_Y_Position(place_panel_num, out position_y))
|
{
|
place_position_x = position_x - handler_pitch;
|
place_position_y = position_y;
|
|
place_position_x = double.Parse(place_position_x.ToString("F3"));
|
place_position_y = double.Parse(place_position_y.ToString("F3"));
|
Step = UnloaderHandler1Steps.S8700_MOVE_PLACE_POSITION;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8700_MOVE_PLACE_POSITION:
|
{
|
if (Move_X(place_position_x) && Move_Y(place_position_y))
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray Position [Start]");
|
Step = UnloaderHandler1Steps.S8705_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8705_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(place_position_x, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(place_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, OK Tray Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S8710_PICKER2_PLACE_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8700_MOVE_PLACE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8710_PICKER2_PLACE_START:
|
{
|
if (Picker2.IsExist)
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #2 Place [Start]");
|
|
_picker2Step = PickerSteps.S4000_PLACE_TRAY_PANEL_START;
|
Step = UnloaderHandler1Steps.S8715_PICKER2_PLACE_WAIT;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8715_PICKER2_PLACE_WAIT:
|
{
|
if (_picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #1 Place [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S8720_TRAY_OK_DATA_SET;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8720_TRAY_OK_DATA_SET:
|
{
|
Panel_Info info = Panel2;
|
info.Panel_Num = place_panel_num;
|
|
if (Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.ULD_Tray_Ok, info))
|
{
|
equipment.Write_Panel_Info_Log($"{equipment.equipment_info.Device_ID},{equipment.equipment_info.Process_Number},{equipment.equipment_info.Module_Model_ID},{info.Panel_ID},판정,{info.Start_Time},{info.End_Time},{info.Film_Judge_Result},OK");
|
|
equipment.panel_count_info.Day_ULD_OK_Count++;
|
equipment.panel_count_info.Minute_ULD_OK_Count++;
|
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(equipment.panel_count_info);
|
|
//210923 hslee, chs 220530 Tray -> Panel 로 변경.====================================================================================
|
object value;
|
|
equipment.sm.Get_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, out value);
|
equipment.sm.Set_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, Convert.ToInt32(value) + 1);
|
equipment.SaveTempGlassOutCnt();
|
//=================================================================================================
|
|
Panel2 = new Panel_Info();
|
}
|
else
|
{
|
return;
|
}
|
|
ng_place_runned = false;
|
|
if (equipment.cim_mode == En_Cim_Mode.Online && info.IsPanelIdRead)
|
{
|
Step = UnloaderHandler1Steps.S8730_TRAY_IN_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8730_TRAY_IN_CIM_SEND:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
return;
|
}
|
|
object value;
|
equipment.sm.Get_Value(Process_Memory_Address.ULD_Tray_Ok_ID, out value);
|
|
Panel_Info info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ok, place_panel_num);
|
|
if (!equipment.cim_client.Send_Panel_Tray_In("E123456", value.ToString(), info.Panel_ID, $"{cim_column}{cim_row + 1}", En_Port_ID.P03))
|
return;
|
|
Step = UnloaderHandler1Steps.S8740_TRAY_IN_CIM_SEND_WAIT;
|
break;
|
}
|
case UnloaderHandler1Steps.S8740_TRAY_IN_CIM_SEND_WAIT:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
return;
|
}
|
|
if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PTINR))
|
{
|
if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PTINR))
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8730_TRAY_IN_CIM_SEND;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8800_PICKER2_GET_NG_PANEL_NUM:
|
{
|
int panel_num = 0;
|
|
if (Get_Handler_1_2_Tray_NG_Panel_Num(out panel_num))
|
{
|
place_panel_num = panel_num;
|
Step = UnloaderHandler1Steps.S8810_PICKER2_GET_PLACE_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8810_PICKER2_GET_PLACE_POSITION:
|
{
|
double position_x;
|
double position_y;
|
if (Get_Tray_NG_ULD_Handler_1_X_Position(place_panel_num, out position_x) && Get_Tray_NG_ULD_Handler_1_Y_Position(place_panel_num, out position_y))
|
{
|
place_position_x = position_x - handler_pitch;
|
place_position_y = position_y;
|
|
Step = UnloaderHandler1Steps.S8900_MOVE_Y_PLACE_POSITION;
|
}
|
break;
|
}
|
|
case UnloaderHandler1Steps.S8900_MOVE_Y_PLACE_POSITION:
|
{
|
if (Move_Y(place_position_y))
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray Position [Start]");
|
Step = UnloaderHandler1Steps.S8905_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8905_POSITION_CHECK:
|
{
|
if (MotorY.MotionComplete)
|
{
|
if (MotorY.Is_Inposition(place_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Step = UnloaderHandler1Steps.S8910_MOVE_X_PLACE_POSITION;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8900_MOVE_Y_PLACE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8910_MOVE_X_PLACE_POSITION:
|
{
|
if (Move_X(place_position_x))
|
{
|
Step = UnloaderHandler1Steps.S8915_POSITION_CHECK;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8915_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(place_position_x, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(place_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray Position [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, NG Tray Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S8920_PICKER2_PLACE_START;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8900_MOVE_Y_PLACE_POSITION;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8920_PICKER2_PLACE_START:
|
{
|
if (Picker2.IsExist)
|
{
|
Tact_Move.Start();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #2 Place [Start]");
|
_picker2Step = PickerSteps.S4000_PLACE_TRAY_PANEL_START;
|
Step = UnloaderHandler1Steps.S8925_PICKER2_PLACE_WAIT;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8925_PICKER2_PLACE_WAIT:
|
{
|
if (_picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #2 Place [End]");
|
equipment.Write_Tact_Time_Log($"ULD Handler 1, Picker #2 Place [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = UnloaderHandler1Steps.S8930_TRAY_NG_DATA_SET;
|
}
|
|
break;
|
}
|
case UnloaderHandler1Steps.S8930_TRAY_NG_DATA_SET:
|
{
|
Panel_Info info = Panel2;
|
|
info.Panel_Num = place_panel_num;
|
|
if (Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.ULD_Tray_Ng, info))
|
{
|
equipment.Write_Panel_Info_Log($"{equipment.equipment_info.Device_ID},{equipment.equipment_info.Process_Number},{equipment.equipment_info.Module_Model_ID},{info.Panel_ID},판정,{info.Start_Time},{info.End_Time},{info.Film_Judge_Result},NG");
|
|
equipment.panel_count_info.Day_ULD_NG_Count++;
|
equipment.panel_count_info.Minute_ULD_NG_Count++;
|
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(equipment.panel_count_info);
|
|
//210923 hslee, chs 220530 Tray -> Panel 로 변경.====================================================================================
|
object value;
|
|
equipment.sm.Get_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, out value);
|
equipment.sm.Set_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, Convert.ToInt32(value) + 1);
|
equipment.SaveTempGlassOutCnt();
|
//=================================================================================================
|
|
Panel2 = new Panel_Info();
|
}
|
else
|
{
|
return;
|
}
|
|
ng_place_runned = true;
|
|
if (equipment.cim_mode == En_Cim_Mode.Online && info.IsPanelIdRead)
|
{
|
Step = UnloaderHandler1Steps.S8940_TRAY_IN_CIM_SEND;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8940_TRAY_IN_CIM_SEND:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
return;
|
}
|
|
Panel_Info info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ng, place_panel_num);
|
if (!equipment.cim_client.Send_Panel_Tray_In("E123456", equipment.unloader.LiftNg.TrayID, info.Panel_ID, $"{cim_column}{cim_row + 1}", En_Port_ID.P04))
|
return;
|
|
Step = UnloaderHandler1Steps.S8950_TRAY_IN_CIM_SEND_WAIT;
|
break;
|
}
|
case UnloaderHandler1Steps.S8950_TRAY_IN_CIM_SEND_WAIT:
|
{
|
if (equipment.cim_mode != En_Cim_Mode.Online)
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
return;
|
}
|
|
if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PTINR))
|
{
|
if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PTINR))
|
{
|
Step = UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END;
|
}
|
else
|
{
|
Step = UnloaderHandler1Steps.S8940_TRAY_IN_CIM_SEND;
|
}
|
}
|
break;
|
}
|
case UnloaderHandler1Steps.S8999_PLACE_TO_TRAY_END:
|
{
|
Tact_Move.Stop();
|
|
if (IsExist == false)
|
{
|
equipment.unloader.TactTime.Restart();
|
}
|
|
Step = UnloaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_Picker1Step()
|
{
|
switch(_picker1Step)
|
{
|
case PickerSteps.S1000_PICK_AOI_STAGE_START:
|
{
|
_picker1Step = PickerSteps.S1100_DOWN;
|
break;
|
}
|
case PickerSteps.S1100_DOWN:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsDown)
|
{
|
_picker1Step = PickerSteps.S1110_VACUUM_ON;
|
}
|
else
|
{
|
Picker1.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1110_VACUUM_ON:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.VacuumSolOn)
|
{
|
_picker1Step = PickerSteps.S1120_AOI_STAGE_VACUUM_OFF;
|
}
|
else
|
{
|
Picker1.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1120_AOI_STAGE_VACUUM_OFF:
|
{
|
if (equipment.after.AoiStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.after.AoiStage.Stage1.VacuumSolOn == false)
|
{
|
picker1Timer.Restart();
|
_picker1Step = PickerSteps.S1130_AOI_STAGE_BLOW_ON;
|
}
|
else
|
{
|
equipment.after.AoiStage.Stage1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1130_AOI_STAGE_BLOW_ON:
|
{
|
if (equipment.after.AoiStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.after.AoiStage.Stage1.BlowSolOn == true)
|
{
|
picker1Timer.Restart();
|
_picker1Step = PickerSteps.S1140_PICKER_UP;
|
}
|
else
|
{
|
equipment.after.AoiStage.Stage1.BlowSolOn = true;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1140_PICKER_UP:
|
{
|
if (picker1Timer.Seconds < pickerUpWaitTime)
|
{
|
return;
|
}
|
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsUp)
|
{
|
_picker1Step = PickerSteps.S1150_AOI_STAGE_BLOW_OFF;
|
}
|
else
|
{
|
Picker1.Up();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1150_AOI_STAGE_BLOW_OFF:
|
{
|
if (equipment.after.AoiStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.after.AoiStage.Stage1.BlowSolOn == false)
|
{
|
_picker1Step = PickerSteps.S1160_DATA_SET;
|
}
|
else
|
{
|
equipment.after.AoiStage.Stage1.BlowSolOn = false;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1160_DATA_SET:
|
{
|
if (picker1Timer.Seconds < pickerUpWaitTime)
|
{
|
return;
|
}
|
|
Panel1 = equipment.after.AoiStage.Panel1;
|
equipment.after.AoiStage.Panel1 = new Panel_Info();
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S2000_PICK_REVERSE_START:
|
{
|
_picker1Step = PickerSteps.S2100_DOWN;
|
break;
|
}
|
case PickerSteps.S2100_DOWN:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsDown)
|
{
|
_picker1Step = PickerSteps.S2110_VACUUM_ON;
|
}
|
else
|
{
|
Picker1.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2110_VACUUM_ON:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.VacuumSolOn)
|
{
|
_picker1Step = PickerSteps.S2120_VACUUM_CHECK;
|
}
|
else
|
{
|
Picker1.VacuumSolOn = true;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2120_VACUUM_CHECK:
|
{
|
if(Picker1.IsVacuumSensor)
|
{
|
_picker1Step = PickerSteps.S2150_REVERSE_STAGE_VACUUM_OFF;
|
}
|
else
|
{
|
_picker1Step = PickerSteps.S5130_REVERSE_STAGE_MOVE_UP;
|
}
|
break;
|
}
|
case PickerSteps.S5130_REVERSE_STAGE_MOVE_UP:
|
{
|
if (equipment.after.ReverseStage.MotorZ1.Move_Relative_Pos(reversestage_move_position, 50))
|
{
|
_picker1Step = PickerSteps.S2140_VACUUM_CHECK;
|
}
|
break;
|
}
|
case PickerSteps.S2140_VACUUM_CHECK:
|
{
|
if(equipment.after.ReverseStage.MotorZ1.MotionComplete)
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsExist)
|
{
|
_picker1Step = PickerSteps.S2150_REVERSE_STAGE_VACUUM_OFF;
|
}
|
else
|
{
|
Picker1.VacuumOn();
|
}
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2150_REVERSE_STAGE_VACUUM_OFF:
|
{
|
if (equipment.after.ReverseStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.after.ReverseStage.Stage1.VacuumSolOn == false)
|
{
|
_picker1Step = PickerSteps.S2160_REVERSE_STAGE_MOVE_STAY;
|
}
|
else
|
{
|
equipment.after.ReverseStage.Stage1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2160_REVERSE_STAGE_MOVE_STAY:
|
{
|
if (equipment.after.ReverseStage.Move_Z_1_Down_Position())
|
{
|
_picker1Step = PickerSteps.S2170_DATA_SET;
|
}
|
break;
|
}
|
case PickerSteps.S2170_DATA_SET:
|
{
|
Panel1 = equipment.after.ReverseStage.Panel1;
|
equipment.after.ReverseStage.Panel1 = new Panel_Info();
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S3000_PLACE_REVERSE_STAGE_START:
|
{
|
_picker1Step = PickerSteps.S3100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S3100_PICKER_DOWN:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsDown)
|
{
|
_picker1Step = PickerSteps.S3110_REVERSE_STAGE_VACUUM_ON;
|
}
|
else
|
{
|
Picker1.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3110_REVERSE_STAGE_VACUUM_ON:
|
{
|
if (equipment.after.ReverseStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.after.ReverseStage.Stage2.VacuumSolOn)
|
{
|
_picker1Step = PickerSteps.S3120_VACUUM_OFF;
|
}
|
else
|
{
|
equipment.after.ReverseStage.Stage2.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3120_VACUUM_OFF:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.VacuumSolOn == false)
|
{
|
_picker1Step = PickerSteps.S3130_DATA_SET;
|
}
|
else
|
{
|
Picker1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3130_DATA_SET:
|
{
|
equipment.after.ReverseStage.Panel2 = Panel1;
|
Panel1 = new Panel_Info();
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S4000_PLACE_TRAY_PANEL_START:
|
{
|
_picker1Step = PickerSteps.S4100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S4100_PICKER_DOWN:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsDown)
|
{
|
_picker1Step = PickerSteps.S4110_VACUUM_OFF;
|
}
|
else
|
{
|
Picker1.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S4110_VACUUM_OFF:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.VacuumSolOn == false)
|
{
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
}
|
else
|
{
|
Picker1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S9000_SCRAP_START:
|
{
|
_picker1Step = PickerSteps.S9100_VACUUM_OFF;
|
break;
|
}
|
case PickerSteps.S9100_VACUUM_OFF:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.VacuumSolOn == false)
|
{
|
_picker1Step = PickerSteps.S9110_DATA_SET;
|
}
|
else
|
{
|
Picker1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S9110_DATA_SET:
|
{
|
Panel1 = new Panel_Info();
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S9200_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsUp)
|
{
|
_picker1Step = PickerSteps.S9999_STEP_END;
|
}
|
else
|
{
|
Picker1.Up();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S9999_STEP_END:
|
{
|
_picker1Step = PickerSteps.S0000_WAIT;
|
|
break;
|
}
|
}
|
}
|
|
private void Seq_Picker2Step()
|
{
|
switch (_picker2Step)
|
{
|
case PickerSteps.S1000_PICK_AOI_STAGE_START:
|
{
|
_picker2Step = PickerSteps.S1100_DOWN;
|
break;
|
}
|
case PickerSteps.S1100_DOWN:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsDown)
|
{
|
_picker2Step = PickerSteps.S1110_VACUUM_ON;
|
}
|
else
|
{
|
Picker2.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1110_VACUUM_ON:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.VacuumSolOn)
|
{
|
_picker2Step = PickerSteps.S1120_AOI_STAGE_VACUUM_OFF;
|
}
|
else
|
{
|
Picker2.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1120_AOI_STAGE_VACUUM_OFF:
|
{
|
if (equipment.after.AoiStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.after.AoiStage.Stage2.VacuumSolOn == false)
|
{
|
picker2Timer.Restart();
|
_picker2Step = PickerSteps.S1130_AOI_STAGE_BLOW_ON;
|
}
|
else
|
{
|
equipment.after.AoiStage.Stage2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1130_AOI_STAGE_BLOW_ON:
|
{
|
if (equipment.after.AoiStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.after.AoiStage.Stage2.BlowSolOn == true)
|
{
|
picker2Timer.Restart();
|
_picker2Step = PickerSteps.S1140_PICKER_UP;
|
}
|
else
|
{
|
equipment.after.AoiStage.Stage2.BlowSolOn = true;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1140_PICKER_UP:
|
{
|
if (picker2Timer.Seconds < pickerUpWaitTime)
|
{
|
return;
|
}
|
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsUp)
|
{
|
_picker2Step = PickerSteps.S1150_AOI_STAGE_BLOW_OFF;
|
}
|
else
|
{
|
Picker2.Up();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1150_AOI_STAGE_BLOW_OFF:
|
{
|
if (equipment.after.AoiStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.after.AoiStage.Stage2.BlowSolOn == false)
|
{
|
_picker2Step = PickerSteps.S1160_DATA_SET;
|
}
|
else
|
{
|
equipment.after.AoiStage.Stage2.BlowSolOn = false;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S1160_DATA_SET:
|
{
|
if (picker2Timer.Seconds < pickerUpWaitTime)
|
{
|
return;
|
}
|
|
Panel2 = equipment.after.AoiStage.Panel2;
|
equipment.after.AoiStage.Panel2 = new Panel_Info();
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S2000_PICK_REVERSE_START:
|
{
|
_picker2Step = PickerSteps.S2100_DOWN;
|
break;
|
}
|
case PickerSteps.S2100_DOWN:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsDown)
|
{
|
_picker2Step = PickerSteps.S2110_VACUUM_ON;
|
}
|
else
|
{
|
Picker2.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2110_VACUUM_ON:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.VacuumSolOn)
|
{
|
_picker2Step = PickerSteps.S2120_VACUUM_CHECK;
|
}
|
else
|
{
|
Picker2.VacuumSolOn = true;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2120_VACUUM_CHECK:
|
{
|
if (Picker2.IsVacuumSensor)
|
{
|
_picker2Step = PickerSteps.S2150_REVERSE_STAGE_VACUUM_OFF;
|
}
|
else
|
{
|
_picker2Step = PickerSteps.S5130_REVERSE_STAGE_MOVE_UP;
|
}
|
break;
|
}
|
case PickerSteps.S5130_REVERSE_STAGE_MOVE_UP:
|
{
|
if (equipment.after.ReverseStage.MotorZ2.Move_Relative_Pos(reversestage_move_position, 50))
|
{
|
_picker2Step = PickerSteps.S2140_VACUUM_CHECK;
|
}
|
break;
|
}
|
case PickerSteps.S2140_VACUUM_CHECK:
|
{
|
if (equipment.after.ReverseStage.MotorZ1.MotionComplete)
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsExist)
|
{
|
_picker2Step = PickerSteps.S2150_REVERSE_STAGE_VACUUM_OFF;
|
}
|
else
|
{
|
Picker2.VacuumOn();
|
}
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2150_REVERSE_STAGE_VACUUM_OFF:
|
{
|
if (equipment.after.ReverseStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.after.ReverseStage.Stage2.VacuumSolOn == false)
|
{
|
_picker2Step = PickerSteps.S2160_REVERSE_STAGE_MOVE_STAY;
|
}
|
else
|
{
|
equipment.after.ReverseStage.Stage2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2160_REVERSE_STAGE_MOVE_STAY:
|
{
|
if (equipment.after.ReverseStage.Move_Z_2_Down_Position())
|
{
|
_picker2Step = PickerSteps.S2170_DATA_SET;
|
}
|
break;
|
}
|
case PickerSteps.S2170_DATA_SET:
|
{
|
Panel2 = equipment.after.ReverseStage.Panel2;
|
equipment.after.ReverseStage.Panel2 = new Panel_Info();
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S3000_PLACE_REVERSE_STAGE_START:
|
{
|
_picker2Step = PickerSteps.S3100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S3100_PICKER_DOWN:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsDown)
|
{
|
_picker2Step = PickerSteps.S3110_REVERSE_STAGE_VACUUM_ON;
|
}
|
else
|
{
|
Picker2.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3110_REVERSE_STAGE_VACUUM_ON:
|
{
|
if (equipment.after.ReverseStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.after.ReverseStage.Stage1.VacuumSolOn)
|
{
|
_picker2Step = PickerSteps.S3120_VACUUM_OFF;
|
}
|
else
|
{
|
equipment.after.ReverseStage.Stage1.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3120_VACUUM_OFF:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.VacuumSolOn == false)
|
{
|
_picker2Step = PickerSteps.S3130_DATA_SET;
|
}
|
else
|
{
|
Picker2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3130_DATA_SET:
|
{
|
equipment.after.ReverseStage.Panel1 = Panel2;
|
Panel2 = new Panel_Info();
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S4000_PLACE_TRAY_PANEL_START:
|
{
|
_picker2Step = PickerSteps.S4100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S4100_PICKER_DOWN:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsDown)
|
{
|
_picker2Step = PickerSteps.S4110_VACUUM_OFF;
|
}
|
else
|
{
|
Picker2.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S4110_VACUUM_OFF:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.VacuumSolOn == false)
|
{
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
}
|
else
|
{
|
Picker2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S9000_SCRAP_START:
|
{
|
_picker2Step = PickerSteps.S9100_VACUUM_OFF;
|
break;
|
}
|
case PickerSteps.S9100_VACUUM_OFF:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.VacuumSolOn == false)
|
{
|
_picker2Step = PickerSteps.S9110_DATA_SET;
|
}
|
else
|
{
|
Picker2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S9110_DATA_SET:
|
{
|
Panel2 = new Panel_Info();
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S9200_PICKER_UP:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsUp)
|
{
|
_picker2Step = PickerSteps.S9999_STEP_END;
|
}
|
else
|
{
|
Picker2.Up();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S9999_STEP_END:
|
{
|
_picker2Step = PickerSteps.S0000_WAIT;
|
|
break;
|
}
|
}
|
}
|
|
private void BCR_Read()
|
{
|
BCR_Data = equipment.ULD_Tray_BCR.BCR_Read();
|
}
|
|
public bool Get_Handler_1_1_Tray_OK_Panel_Num(out int panel_num)
|
{
|
int row = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row;
|
int column = 0;
|
panel_num = 0;
|
|
bool even_num;
|
for (int i = 0; i < row; i++)
|
{
|
even_num = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column % 2 == 0;
|
if (even_num)
|
column = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column / 2;
|
else
|
column = (equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column / 2) + 1;
|
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column; j++)
|
{
|
panel_num++;
|
|
if (j <= column)
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ok, panel_num);
|
|
if (info.Blank)
|
{
|
cim_row = i;
|
cim_column = j;
|
return true;
|
}
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Handler_1_2_Tray_OK_Panel_Num(out int panel_num)
|
{
|
int row = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row;
|
int column = 0;
|
panel_num = 0;
|
|
bool even_num;
|
for (int i = 0; i < row; i++)
|
{
|
even_num = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column % 2 == 0;
|
if (even_num)
|
column = (equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column / 2);
|
else
|
column = (equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column / 2) + 1;
|
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column; j++)
|
{
|
panel_num++;
|
|
if (even_num)
|
{
|
if ((j > column))
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ok, panel_num);
|
|
if (info.Blank)
|
{
|
cim_row = i;
|
cim_column = j;
|
return true;
|
}
|
}
|
}
|
else
|
{
|
if ((j >= column))
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ok, panel_num);
|
|
if (info.Blank)
|
{
|
cim_row = i;
|
cim_column = j;
|
return true;
|
}
|
}
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Tray_OK_ULD_Handler_1_X_Position(int panel_num, out double position)
|
{
|
position = 0;
|
int pnum = 0;
|
if (equipment.Cur_Main_Recipe.tray_info== null) return false;
|
|
int column;
|
|
for (int i = 0; i < equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row; i++)
|
{
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column; j++)
|
{
|
pnum++;
|
if (pnum == panel_num)
|
{
|
column = j;
|
position = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Pick_Position_X + ((column - 1) * equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Cell_Pitch_X);
|
|
position = double.Parse(position.ToString("F3"));
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Tray_OK_ULD_Handler_1_Y_Position(int panel_num, out double position)
|
{
|
position = 0;
|
int pnum = 0;
|
if (equipment.Cur_Main_Recipe.tray_info== null) return false;
|
|
for (int i = 0; i < equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row; i++)
|
{
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Column; j++)
|
{
|
pnum++;
|
if (pnum == panel_num)
|
{
|
position = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ok_Row_Data[i].Pick_Position_Y;
|
|
position = double.Parse(position.ToString("F3"));
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Handler_1_1_Tray_NG_Panel_Num(out int panel_num)
|
{
|
int row = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row;
|
int column = 0;
|
panel_num = 0;
|
|
bool even_num;
|
for (int i = 0; i < row; i++)
|
{
|
even_num = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column % 2 == 0;
|
if (even_num)
|
column = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column / 2;
|
else
|
column = (equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column / 2) + 1;
|
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column; j++)
|
{
|
panel_num++;
|
|
if (j <= column)
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ng, panel_num);
|
|
if (info.Blank)
|
{
|
cim_row = i;
|
cim_column = j;
|
return true;
|
}
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Handler_1_2_Tray_NG_Panel_Num(out int panel_num)
|
{
|
int row = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row;
|
int column = 0;
|
panel_num = 0;
|
|
bool even_num;
|
for (int i = 0; i < row; i++)
|
{
|
even_num = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column % 2 == 0;
|
if (even_num)
|
column = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column / 2;
|
else
|
column = (equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column / 2) + 1;
|
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column; j++)
|
{
|
panel_num++;
|
|
if (even_num)
|
{
|
if ((j > column))
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ng, panel_num);
|
|
if (info.Blank)
|
{
|
cim_row = i;
|
cim_column = j;
|
return true;
|
}
|
}
|
}
|
else
|
{
|
if ((j >= column))
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.ULD_Tray_Ng, panel_num);
|
|
if (info.Blank)
|
{
|
return true;
|
}
|
}
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Tray_NG_ULD_Handler_1_X_Position(int panel_num, out double position)
|
{
|
position = 0;
|
int pnum = 0;
|
if (equipment.Cur_Main_Recipe.tray_info== null) return false;
|
|
int column;
|
|
for (int i = 0; i < equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row; i++)
|
{
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column; j++)
|
{
|
pnum++;
|
if (pnum == panel_num)
|
{
|
column = j;
|
position = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Pick_Position_X + ((column - 1) * equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Cell_Pitch_X);
|
|
position = double.Parse(position.ToString("F3"));
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Tray_NG_ULD_Handler_1_Y_Position(int panel_num, out double position)
|
{
|
position = 0;
|
int pnum = 0;
|
if (equipment.Cur_Main_Recipe.tray_info== null) return false;
|
|
for (int i = 0; i < equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row; i++)
|
{
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Column; j++)
|
{
|
pnum++;
|
if (pnum == panel_num)
|
{
|
position = equipment.Cur_Main_Recipe.tray_info.ULD_Tray_Ng_Row_Data[i].Pick_Position_Y;
|
|
position = double.Parse(position.ToString("F3"));
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Is_Position_X_Stay()
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Stay_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorX.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
|
public bool Get_Is_Position_Y_Stay()
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_Stay_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorY.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
|
public bool Get_Is_Position_X_AOI()
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_AOI_Stage_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorX.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
|
public bool Get_Is_Position_Y_AOI()
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_AOI_Stage_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorY.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
|
public bool Get_Is_Position_X_Reverse()
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorX.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
|
public bool Get_Is_Position_Y_Reverse()
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_Reverse_Stage_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorY.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
|
public double Get_Position_Y_Stay()
|
{
|
object value;
|
double get_position;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_Stay_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return get_position;
|
}
|
|
public bool Move_X(double position)
|
{
|
return MotorX.Move_Absolute_Pos(position, pick_velocity);
|
}
|
|
public bool Move_Y(double position)
|
{
|
return MotorY.Move_Absolute_Pos(position, pick_velocity);
|
}
|
|
public bool Move_X_Stay_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Stay_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Stay_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorX.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Move_Y_Stay_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_Stay_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_Stay_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorY.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Move_X_Reverse_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_Reverse_Stage_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorX.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Move_Y_Reverse_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_Reverse_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_Reverse_Stage_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorY.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Move_X_AOI_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_AOI_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_X_AOI_Stage_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorX.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Move_Y_AOI_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_AOI_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.ULD_Handler_1_Y_AOI_Stage_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorY.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Picker_1_Scrap()
|
{
|
if (UnitMode == En_Equipment_Mode.Auto || equipment.Auto_Mode)
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD_Handler_1_1 Scrap Can't Start", "Equipment mode is Auto.");
|
return false;
|
}
|
|
_picker1Step = PickerSteps.S9000_SCRAP_START;
|
|
return true;
|
}
|
|
public bool Picker_2_Scrap()
|
{
|
if (UnitMode == En_Equipment_Mode.Auto || equipment.Auto_Mode)
|
{
|
Interlock_Manager.Add_Interlock_Msg("ULD_Handler_1_2 Scrap Can't Start", "Equipment mode is Auto.");
|
return false;
|
}
|
|
_picker2Step = PickerSteps.S9000_SCRAP_START;
|
|
return true;
|
}
|
#endregion
|
}
|
}
|