using System;
|
using System.Collections.Generic;
|
using System.Windows.Forms;
|
|
namespace SHARP_CLAS_UI
|
{
|
public class LoaderHandler1 : Handler
|
{
|
#region Enum
|
private enum PickerSteps
|
{
|
S0000_WAIT,
|
|
S1000_PICK_TRAY_PANEL_START,
|
S1100_PICKER_DOWN,
|
S1110_VACUUM_ON,
|
|
S2000_PLACE_PRE_ALIGN_STAGE_START,
|
S2100_PICKER_DOWN,
|
S2110_PRE_ALIGN_STAGE_VACUUM_ON,
|
S2120_VACUUM_OFF,
|
S2130_DATA_SET,
|
|
S3000_PICK_PRE_ALIGN_STAGE_START,
|
S3100_PICKER_DOWN,
|
S3110_VACUUM_ON,
|
S3120_PRE_ALIGN_STAGE_VACUUM_OFF,
|
S3130_PRE_ALIGN_STAGE_BLOW_ON,
|
S3140_PICKER_UP,
|
S3150_PRE_ALIGN_STAGE_BLOW_OFF,
|
S3160_DATA_SET,
|
|
S4000_PLACE_REVERSE_STAGE_START,
|
S4100_PICKER_DOWN,
|
S4110_REVERSE_STAGE_VACUUM_ON,
|
S4120_VACUUM_OFF,
|
S4130_DATA_SET,
|
|
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.LD_Handler_1_1);
|
}
|
set
|
{
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Handler_1_1, value);
|
}
|
}
|
|
public override Panel_Info Panel2
|
{
|
get
|
{
|
return Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Handler_1_2);
|
}
|
set
|
{
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Handler_1_2, value);
|
}
|
}
|
|
public override bool IsWorkEnd
|
{
|
get
|
{
|
if(Step == LoaderHandler1Steps.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.LD_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.LD_Handler_1_Y_Stay_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorY.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
}
|
|
public LoaderHandler1Steps Step
|
{
|
get
|
{
|
return _step;
|
}
|
|
set
|
{
|
_step = value;
|
}
|
}
|
#endregion
|
|
#region Field
|
private LoaderHandler1Steps _step;
|
private LoaderHandler1Steps _oldStep;
|
private HandlerHomeSteps _homeStep;
|
|
private PickerSteps _picker1Step;
|
private PickerSteps _picker2Step;
|
|
int pick_panel_num;
|
double pick_position_x;
|
double pick_position_y;
|
|
public SequenceTimer Tact_Film_Judge = new SequenceTimer();
|
public SequenceTimer Tact_Pre_Align = new SequenceTimer();
|
public SequenceTimer Tact_Move = new SequenceTimer();
|
|
private Form_User_Command_Set _preAlignUserCommand;
|
private Form_User_Command_Set _filmJudgeUserCommand;
|
private Tray_QR_Code_Command _bcrUserCommand;
|
private Tray_QR_Code_Command _pickerUserCommand;
|
|
bool vision_user_command_show;
|
bool film_judge_user_command_show;
|
bool qr_code_user_command_show;
|
bool tray_pick_retry_pass_command_show;
|
|
int Pre_Align_retry_Cnt;
|
int Film_Judge_retry_Cnt;
|
int Bcr_retry_cnt;
|
string BCR_Data;
|
|
Timer tmrUi = new Timer();
|
|
System.Threading.Thread BCR_Read_Th;
|
#endregion
|
|
#region Construct
|
public LoaderHandler1(Equipment equipment) : base(equipment, MotorAxis.LD_Handler_1_X, MotorAxis.LD_Handler_1_Y, "LoaderHandler1")
|
{
|
Picker1.Initialize(OutputData.LD_Handler_1_1_Down, InputData.LD_Handler_Picker_1_1_Up_Sensor, InputData.LD_Handler_Picker_1_1_Down_Sensor, En_Alarm_List.AL_0642_LD_HANDLER_1_1_UP_SENSOR_CHECK, En_Alarm_List.AL_0643_LD_HANDLER_1_1_DOWN_SENSOR_CHECK,
|
OutputData.LD_Cell_Handler_1_1_Vaccum_On_Sol_Valve, OutputData.LD_Cell_Handler_1_1_Blow_On_Sol_Valve, InputData.LD_Cell_Handler_1_1_Vaccum_On_Check, En_Alarm_List.AL_0640_LD_HANDLER_1_1_VACUUM_ON_CHECK);
|
|
Picker2.Initialize(OutputData.LD_Handler_1_2_Down, InputData.LD_Handler_Picker_1_2_Up_Sensor, InputData.LD_Handler_Picker_1_2_Down_Sensor, En_Alarm_List.AL_0644_LD_HANDLER_1_2_UP_SENSOR_CHECK, En_Alarm_List.AL_0645_LD_HANDLER_1_2_DOWN_SENSOR_CHECK,
|
OutputData.LD_Cell_Handler_1_2_Vaccum_On_Sol_Valve, OutputData.LD_Cell_Handler_1_2_Blow_On_Sol_Valve, InputData.LD_Cell_Handler_1_2_Vaccum_On_Check, En_Alarm_List.AL_0641_LD_HANDLER_1_2_VACUUM_ON_CHECK);
|
|
pauseDisableList.Add(LoaderHandler1Steps.S1220_POSITION_CHECK);
|
pauseDisableList.Add(LoaderHandler1Steps.S2250_BCR_USER_COMMAND_START);
|
pauseDisableList.Add(LoaderHandler1Steps.S6300_USER_COMMAND_START);
|
pauseDisableList.Add(LoaderHandler1Steps.S8400_USER_COMMAND_START);
|
|
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.IsDown || Picker2.IsDown)
|
{
|
Interlock_Manager.Add_Interlock_Msg("LD Handler 1 Picker Down", "Picker is Down, Can't Move.");
|
return true;
|
}
|
|
return false;
|
}
|
|
private bool Move_Interlock()
|
{
|
if (Picker1.IsDown || Picker2.IsDown)
|
{
|
Interlock_Manager.Add_Interlock_Msg("LD 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.IsDown || Picker2.IsDown)
|
{
|
Interlock_Manager.Add_Interlock_Msg("LD 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 (vision_user_command_show && _preAlignUserCommand != null)
|
{
|
_preAlignUserCommand.Show();
|
vision_user_command_show = false;
|
}
|
|
if (film_judge_user_command_show && _filmJudgeUserCommand != null)
|
{
|
_filmJudgeUserCommand.Show();
|
film_judge_user_command_show = false;
|
}
|
|
if (qr_code_user_command_show && _bcrUserCommand != null)
|
{
|
_bcrUserCommand.Show();
|
qr_code_user_command_show = false;
|
}
|
|
if (tray_pick_retry_pass_command_show && _pickerUserCommand != null)
|
{
|
_pickerUserCommand.Show();
|
tray_pick_retry_pass_command_show = false;
|
}
|
}
|
|
public void Init_Seq()
|
{
|
Step = LoaderHandler1Steps.S0000_WAIT;
|
_homeStep = HandlerHomeSteps.S0000_WAIT;
|
|
Tact_Film_Judge.Reset();
|
Tact_Pre_Align.Reset();
|
Tact_Move.Reset();
|
}
|
|
public void ExecuteAuto()
|
{
|
if(IsWorkEnd)
|
{
|
if (equipment.process.ablation.Is_Power_Measure && IsStayPosition)
|
{
|
return;
|
}
|
|
if (equipment.loader.LiftIn.IsBcrReadBit)
|
{
|
Step = LoaderHandler1Steps.S2000_TRAY_ID_READ_START;
|
}
|
else
|
{
|
var liftin = equipment.loader.LiftIn;
|
var prealignstage = equipment.before.PreAlignStage;
|
var reversestage = equipment.before.ReverseStage;
|
|
var isPanel1FilmjudgeAck = Picker1.IsExist == false || Panel1.Film_Judge_Ack;
|
var isPanel2FilmjudgeAck = Picker2.IsExist == false || Panel2.Film_Judge_Ack;
|
|
if (IsExist)
|
{
|
//reverse, align 모두 없는거 확인.
|
// -> film skip이면 reverse 확인 후 reverse or place prealign.
|
if (prealignstage.IsPlaceEnable && reversestage.IsPlaceEnable)
|
{
|
if (equipment.Cur_Main_Recipe.tray_info.Ld_Reverse && (equipment.Mode.Film_Judge_Skip || (isPanel1FilmjudgeAck && isPanel2FilmjudgeAck)))
|
{
|
Step = LoaderHandler1Steps.S7000_PLACE_REVERSE_STAGE_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S5000_PLACE_PRE_ALIGN_START;
|
}
|
}
|
else if (reversestage.IsPlaceEnable && PreAlignSteps.S3000_PRE_ALIGN_START <= prealignstage.Step && prealignstage.Step <= PreAlignSteps.S3400_PRE_ALIGN_CHECK)
|
{
|
Step = LoaderHandler1Steps.S8000_PRE_ALIGN_START;
|
}
|
else
|
{
|
if(IsStayPosition == false)
|
{
|
Step = LoaderHandler1Steps.S1000_MOVE_STAY_POSITION_START;
|
}
|
}
|
}
|
else
|
{
|
if (prealignstage.IsExist && (prealignstage.Step == PreAlignSteps.S2100_FILM_JUDGE_CHECK || prealignstage.Step == PreAlignSteps.S2200_PANEL_EMPTY_CHECK || prealignstage.Step == PreAlignSteps.S3400_PRE_ALIGN_CHECK))
|
{
|
if (prealignstage.Step == PreAlignSteps.S2200_PANEL_EMPTY_CHECK)
|
{
|
if (reversestage.IsPlaceEnable)
|
{
|
Step = LoaderHandler1Steps.S6400_MOVE_PRE_ALIGN_STAGE;
|
}
|
else
|
{
|
Interlock_Manager.Add_Interlock_Msg("Pre Align panel can't pick", "Scrap Pre Align Stage Panel.");
|
}
|
}
|
else if (prealignstage.Step == PreAlignSteps.S2100_FILM_JUDGE_CHECK)
|
{
|
Step = LoaderHandler1Steps.S6000_PRE_ALIGN_FILM_JUDGE_START;
|
}
|
else if (PreAlignSteps.S3000_PRE_ALIGN_START <= prealignstage.Step && prealignstage.Step <= PreAlignSteps.S3400_PRE_ALIGN_CHECK)
|
{
|
Step = LoaderHandler1Steps.S8000_PRE_ALIGN_START;
|
}
|
}
|
else if(liftin.IsPickEnable && equipment.LD_Stop == false /* 바로 집으러 가도 될듯? && ((PreAlignSteps.S3400_PRE_ALIGN_CHECK <= prealignstage.Step && prealignstage.Step <= PreAlignSteps.S4999_PANEL_UNLOAD_END) || (prealignstage.IsExist == false && reversestage.IsExist == false))*/)
|
{
|
if (equipment.Mode.Film_Judge_Skip == false && equipment.Film_Judge_Mode == En_Film_Judge_Mode.Tray_In)
|
{
|
Step = LoaderHandler1Steps.S3000_TRAY_FILM_JUDGE_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S4000_PICK_TRAY_PANEL_START;
|
}
|
}
|
else
|
{
|
if (IsStayPosition == false)
|
{
|
Step = LoaderHandler1Steps.S1000_MOVE_STAY_POSITION_START;
|
}
|
}
|
}
|
}
|
}
|
}
|
|
public override void MonitoringStatus()
|
{
|
if (UnitMode == En_Equipment_Mode.Auto || UnitMode == En_Equipment_Mode.Manual)
|
{
|
if (Step != LoaderHandler1Steps.S4330_PICKER1_COMMAND_WAIT)
|
{
|
if (Picker1.IsWorkEnd && Picker1.VacuumSolOn == true && Picker1.IsVacuumSensor == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0640_LD_HANDLER_1_1_VACUUM_ON_CHECK);
|
}
|
}
|
|
if (Step != LoaderHandler1Steps.S4530_PICKER2_COMMAND_WAIT)
|
{
|
if (Picker2.IsWorkEnd && Picker2.VacuumSolOn == true && Picker2.IsVacuumSensor == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0641_LD_HANDLER_1_2_VACUUM_ON_CHECK);
|
}
|
}
|
|
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();
|
}
|
}
|
}
|
|
if (LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY < Step && Step < LoaderHandler1Steps.S8350_PRE_ALIGN_CHECK)
|
{
|
if(equipment.before.PreAlignStage.IsExist == false)
|
{
|
Step = LoaderHandler1Steps.S0000_WAIT;
|
}
|
}
|
|
if (Alarm_Manager.Instance.Occured_List.Exists(X => X.Code == En_Alarm_List.AL_0510_ALIGN_VISION_DISCONNECT))
|
{
|
if (LoaderHandler1Steps.S3300_LEFT_CAMERA_GRAB_READY < Step && Step < LoaderHandler1Steps.S3340_FILM_JUDGE_LEFT_CHECK)
|
{
|
Step = LoaderHandler1Steps.S3300_LEFT_CAMERA_GRAB_READY;
|
}
|
|
if (LoaderHandler1Steps.S3600_RIGHT_CAMERA_GRAB_READY < Step && Step < LoaderHandler1Steps.S3640_FILM_JUDGE_RIGHT_CHECK)
|
{
|
Step = LoaderHandler1Steps.S3600_RIGHT_CAMERA_GRAB_READY;
|
}
|
|
if (LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY < Step && Step < LoaderHandler1Steps.S6280_FILM_JUDGE_CHECK)
|
{
|
Step = LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY;
|
}
|
|
if (LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY < Step && Step < LoaderHandler1Steps.S8350_PRE_ALIGN_CHECK)
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
|
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();
|
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_TrayIdRead();
|
Seq_TrayFilmJudge();
|
Seq_PickTrayPanel();
|
Seq_PlacePreAlignStage();
|
Seq_PreAlignStageFilmJudge();
|
Seq_PlaceReverseStage();
|
Seq_PreAlign();
|
}
|
}
|
|
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_0151_LD_HANDLER_1_X_ERROR_STOP);
|
}
|
else if (MotorY.ErrorStop)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0171_LD_HANDLER_1_Y_ERROR_STOP);
|
}
|
else if (!MotorX.PowerOn)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0150_LD_HANDLER_1_X_POWER_OFF);
|
}
|
else if(!MotorY.PowerOn)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0170_LD_HANDLER_1_Y_POWER_OFF);
|
}
|
else if (Picker1.IsDown)
|
{
|
Interlock_Manager.Add_Interlock_Msg("LD Handler 1 Home can't run.", "LD Handler Picker 1-1 Up.");
|
}
|
else if (Picker2.IsDown)
|
{
|
Interlock_Manager.Add_Interlock_Msg("LD Handler 1 Home can't run.", "LD Handler Picker 1-2 Up.");
|
}
|
else
|
{
|
_homeStep = HandlerHomeSteps.S1100_TRAY_TRANSFER_HOME_CHECK;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1100_TRAY_TRANSFER_HOME_CHECK:
|
{
|
if (equipment.loader.TrayTransfer.IsHomeComplete)
|
{
|
_homeStep = HandlerHomeSteps.S1200_TRAY_TRANSFER_POSITION_CHECK;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1200_TRAY_TRANSFER_POSITION_CHECK:
|
{
|
if (equipment.loader.TrayTransfer.IsStayPosition)
|
{
|
_homeStep = HandlerHomeSteps.S1300_MOTOR_Y_HOME;
|
}
|
else
|
{
|
Interlock_Manager.Add_Interlock_Msg("LD 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_0171_LD_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_0151_LD_HANDLER_1_X_ERROR_STOP);
|
}
|
}
|
else
|
{
|
_homeStep = HandlerHomeSteps.S1400_MOVE_STAY_POSITION;
|
}
|
break;
|
}
|
case HandlerHomeSteps.S1400_MOVE_STAY_POSITION:
|
{
|
if(MoveMotorXStayPosition())
|
{
|
if(MoveMotorYStayPosition())
|
{
|
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_0151_LD_HANDLER_1_X_ERROR_STOP);
|
|
if(MotorY.ErrorStop)
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0171_LD_HANDLER_1_Y_ERROR_STOP);
|
|
}
|
else if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (IsStayPosition)
|
{
|
_homeStep = HandlerHomeSteps.S1999_END;
|
}
|
else
|
{
|
if(!IsMotorXStayPosition)
|
{
|
Interlock_Manager.Add_Interlock_Msg("LD Handler 1 Home can't run.", "X Position is not stay.");
|
}
|
|
if (!IsMotorYStayPosition)
|
{
|
Interlock_Manager.Add_Interlock_Msg("LD 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 LoaderHandler1Steps.S1000_MOVE_STAY_POSITION_START:
|
{
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Stay Position [Start]");
|
Step = LoaderHandler1Steps.S1100_REVERSE_STAGE_POSITION_CHECK;
|
break;
|
}
|
case LoaderHandler1Steps.S1100_REVERSE_STAGE_POSITION_CHECK:
|
{
|
//if (equipment.before.ReverseStage.IsStayPosition)
|
//{
|
// Step = LoaderHandler1Steps.S1110_PICKER_UP;
|
//}
|
|
Step = LoaderHandler1Steps.S1110_PICKER_UP;
|
break;
|
}
|
case LoaderHandler1Steps.S1110_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = LoaderHandler1Steps.S1200_MOVE_STAY_POSITION;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S1200_MOVE_STAY_POSITION:
|
{
|
if (MoveMotorXStayPosition() && MoveMotorYStayPosition())
|
{
|
Step = LoaderHandler1Steps.S1220_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S1220_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (IsMotorXStayPosition && IsMotorYStayPosition)
|
{
|
Step = LoaderHandler1Steps.S1999_MOVE_STAY_POSITION_END;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S1200_MOVE_STAY_POSITION;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S1999_MOVE_STAY_POSITION_END:
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Stay Position [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Stay Position [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = LoaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_TrayIdRead()
|
{
|
switch (Step)
|
{
|
case LoaderHandler1Steps.S2000_TRAY_ID_READ_START:
|
{
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, QR Code Position [Start]");
|
Step = LoaderHandler1Steps.S2100_PICKER_UP;
|
break;
|
}
|
case LoaderHandler1Steps.S2100_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = LoaderHandler1Steps.S2200_TRAY_TRANSFER_POSITION_CHECK;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S2200_TRAY_TRANSFER_POSITION_CHECK:
|
{
|
if (equipment.loader.TrayTransfer.IsStayPosition)
|
{
|
Step = LoaderHandler1Steps.S2210_MOVE_TRAY_BCR_POS;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S2210_MOVE_TRAY_BCR_POS:
|
{
|
if (Move_X(equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_BCR_X) && Move_Y(equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_BCR_Y))
|
Step = LoaderHandler1Steps.S2230_POSITION_CHECK;
|
|
break;
|
}
|
case LoaderHandler1Steps.S2230_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_BCR_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_BCR_Y, equipment.Setting.Inposition_Offset))
|
{
|
Bcr_retry_cnt = 0;
|
Step = LoaderHandler1Steps.S2240_BCR_DATA_READ;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S2210_MOVE_TRAY_BCR_POS;
|
}
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S2240_BCR_DATA_READ:
|
{
|
BCR_Read_Th = new System.Threading.Thread(() => BCR_Read());
|
BCR_Read_Th.Start();
|
|
Step = LoaderHandler1Steps.S2245_BCR_DATA_READ_WAIT;
|
break;
|
}
|
case LoaderHandler1Steps.S2245_BCR_DATA_READ_WAIT:
|
{
|
if (BCR_Read_Th != null && BCR_Read_Th.ThreadState != System.Threading.ThreadState.Stopped) return;
|
|
if (BCR_Data != null && BCR_Data.Length == 14)
|
{
|
equipment.loader.LiftIn.TrayID = BCR_Data;
|
equipment.loader.LiftIn.SetTrayId(BCR_Data);
|
|
Step = LoaderHandler1Steps.S2999_TRAY_ID_READ_END;
|
}
|
else
|
{
|
if (Bcr_retry_cnt > equipment.Setting.Bcr_Retry_Count)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0860_LD_TRAY_IN_ID_READ_ERROR);
|
Step = LoaderHandler1Steps.S2250_BCR_USER_COMMAND_START;
|
return;
|
}
|
|
Bcr_retry_cnt++;
|
Step = LoaderHandler1Steps.S2240_BCR_DATA_READ;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S2250_BCR_USER_COMMAND_START:
|
{
|
_bcrUserCommand = new Tray_QR_Code_Command("LD TRAY IN QR CODE");
|
qr_code_user_command_show = true;
|
|
Step = LoaderHandler1Steps.S2260_BCR_USER_COMMAND_CHECK;
|
break;
|
}
|
case LoaderHandler1Steps.S2260_BCR_USER_COMMAND_CHECK:
|
{
|
if (_bcrUserCommand.Command_Type == En_User_Command.Retry)
|
{
|
Bcr_retry_cnt = 0;
|
Step = LoaderHandler1Steps.S2240_BCR_DATA_READ;
|
}
|
else if (_bcrUserCommand.Command_Type == En_User_Command.Pass)
|
{
|
equipment.LD_Tray_BCR.BCR_Stop();
|
|
DateTime dt = DateTime.Now;
|
string tray_id = $"{dt.Year.ToString().Remove(0, 2)}{dt.Month:D2}{dt.Day:D2}{dt.Hour:D2}{dt.Minute:D2}{dt.Second:D2}00";
|
equipment.loader.LiftIn.TrayID = tray_id;
|
equipment.loader.LiftIn.SetTrayId(tray_id);
|
|
Step = LoaderHandler1Steps.S2999_TRAY_ID_READ_END;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S2999_TRAY_ID_READ_END:
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, QR Code Position[End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, QR Code Position[Tact : {Tact_Move.Seconds} (sec)]");
|
equipment.loader.LiftIn.IsBcrReadBit = false;
|
|
Step = LoaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_TrayFilmJudge()
|
{
|
switch (Step)
|
{
|
case LoaderHandler1Steps.S3000_TRAY_FILM_JUDGE_START:
|
{
|
Tact_Film_Judge.Start();
|
Step = LoaderHandler1Steps.S3110_PICKER_UP;
|
break;
|
}
|
case LoaderHandler1Steps.S3110_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = LoaderHandler1Steps.S3150_TRAY_TRANSFER_POSITION_CHECK;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3150_TRAY_TRANSFER_POSITION_CHECK:
|
{
|
if (equipment.loader.TrayTransfer.IsStayPosition)
|
{
|
Step = LoaderHandler1Steps.S3200_PICKER1_GET_PANEL_NUM;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3200_PICKER1_GET_PANEL_NUM:
|
{
|
var panel_num = 0;
|
if (Get_Handler_1_1_Tray_In_Panel_Num(out panel_num))
|
{
|
Film_Judge_retry_Cnt = 0;
|
pick_panel_num = panel_num;
|
Step = LoaderHandler1Steps.S3210_PICKER1_GET_FILM_JUDGE_POITION;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S3500_PICKER2_GET_PANEL_NUM;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3210_PICKER1_GET_FILM_JUDGE_POITION:
|
{
|
var position_x = 0.0;
|
var position_y = 0.0;
|
if (Get_Tray_In_LD_Handler_1_X_Film_Position(pick_panel_num, out position_x) && Get_Tray_In_LD_Handler_1_Y_Film_Position(pick_panel_num, out position_y))
|
{
|
pick_position_x = position_x;
|
pick_position_y = position_y;
|
|
Step = LoaderHandler1Steps.S3220_MOVE_PICKER1_FILM_JUDGE_POSITION;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3220_MOVE_PICKER1_FILM_JUDGE_POSITION:
|
{
|
if (Move_X(pick_position_x) && Move_Y(pick_position_y))
|
{
|
Step = LoaderHandler1Steps.S3230_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3230_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(pick_position_x, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(pick_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Step = LoaderHandler1Steps.S3300_LEFT_CAMERA_GRAB_READY;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S3220_MOVE_PICKER1_FILM_JUDGE_POSITION;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3300_LEFT_CAMERA_GRAB_READY:
|
{
|
Panel_Info info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, pick_panel_num);
|
|
if (info.Film_Judge_Ack)
|
{
|
Step = LoaderHandler1Steps.S3500_PICKER2_GET_PANEL_NUM;
|
}
|
else if (equipment.Align_vision.Send_Film_Judge_Grab_Ready(0, 0, 0, 0, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
Step = LoaderHandler1Steps.S3310_LEFT_CAMERA_GRAB_READY_WAIT;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S3310_LEFT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Grab_Ready_Ack))
|
{
|
Step = LoaderHandler1Steps.S3320_LEFT_CAMERA_MARK_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S3300_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3320_LEFT_CAMERA_MARK_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
if (equipment.Align_vision.Send_Film_Judge_Grab_Start(0, 0, MotorX.Position, MotorY.Position))
|
{
|
Step = LoaderHandler1Steps.S3330_LEFT_CAMERA_MARK_GRAB_WAIT;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S3330_LEFT_CAMERA_MARK_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Grab_Start_Left_Ack))
|
{
|
Step = LoaderHandler1Steps.S3340_FILM_JUDGE_LEFT_CHECK;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S3300_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3340_FILM_JUDGE_LEFT_CHECK:
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, pick_panel_num);
|
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Left_Ack))
|
{
|
info.Film_Judge_Ack = true;
|
info.Film_Judge_Result = equipment.sm.Get_Bit(Vision_Address.Film_Judge_Left_Result);
|
info.Ablation_Run = info.Film_Judge_Result;
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, info);
|
|
Step = LoaderHandler1Steps.S3500_PICKER2_GET_PANEL_NUM;
|
}
|
else
|
{
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Film_Judge_retry_Cnt++;
|
|
if (Film_Judge_retry_Cnt > equipment.Setting.Vision_Retry_Count)
|
{
|
if (sequenceChangedTime.Minute > 5)
|
{
|
Step = LoaderHandler1Steps.S3400_USER_COMMAND_START;
|
}
|
}
|
if (Film_Judge_retry_Cnt == equipment.Setting.Vision_Retry_Count)
|
{
|
Step = LoaderHandler1Steps.S3400_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S3300_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3400_USER_COMMAND_START:
|
{
|
_filmJudgeUserCommand = new Form_User_Command_Set("Film_Judge");
|
film_judge_user_command_show = true;
|
|
Step = LoaderHandler1Steps.S3410_USER_COMMAND_WAIT;
|
break;
|
}
|
case LoaderHandler1Steps.S3410_USER_COMMAND_WAIT:
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, pick_panel_num);
|
|
if (_filmJudgeUserCommand.Command_Type == En_User_Command.Scrap)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(0, 0, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
info.Blank = true;
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, info);
|
Step = LoaderHandler1Steps.S3500_PICKER2_GET_PANEL_NUM;
|
}
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Retry)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(1, 0, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
Film_Judge_retry_Cnt = 0;
|
Step = LoaderHandler1Steps.S3300_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Skip)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(2, 0, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Result, false);
|
Step = LoaderHandler1Steps.S3340_FILM_JUDGE_LEFT_CHECK;
|
}
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Pass)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(3, 0, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Result, false);
|
Step = LoaderHandler1Steps.S3340_FILM_JUDGE_LEFT_CHECK;
|
}
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Manual)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(4, 0, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Result, false);
|
Step = LoaderHandler1Steps.S3340_FILM_JUDGE_LEFT_CHECK;
|
}
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S3500_PICKER2_GET_PANEL_NUM:
|
{
|
var panel_num = 0;
|
if (Get_Handler_1_2_Tray_In_Panel_Num(out panel_num))
|
{
|
Film_Judge_retry_Cnt = 0;
|
pick_panel_num = panel_num;
|
Step = LoaderHandler1Steps.S3510_PICKER2_GET_FILM_JUDGE_POITION;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S3999_TRAY_FILM_JUDGE_END;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3510_PICKER2_GET_FILM_JUDGE_POITION:
|
{
|
var position_x = 0.0;
|
var position_y = 0.0;
|
if (Get_Tray_In_LD_Handler_1_X_Film_Position(pick_panel_num, out position_x) && Get_Tray_In_LD_Handler_1_Y_Film_Position(pick_panel_num, out position_y))
|
{
|
pick_position_x = double.Parse((position_x - 220).ToString("F3"));
|
pick_position_y = position_y;
|
|
Step = LoaderHandler1Steps.S3520_MOVE_PICKER2_FILM_JUDGE_POS;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3520_MOVE_PICKER2_FILM_JUDGE_POS:
|
{
|
if (Move_X(pick_position_x) && Move_Y(pick_position_y))
|
{
|
Step = LoaderHandler1Steps.S3530_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3530_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(pick_position_x, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(pick_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Step = LoaderHandler1Steps.S3600_RIGHT_CAMERA_GRAB_READY;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S3520_MOVE_PICKER2_FILM_JUDGE_POS;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3600_RIGHT_CAMERA_GRAB_READY:
|
{
|
Panel_Info info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, pick_panel_num);
|
|
if (info.Film_Judge_Ack)
|
{
|
Step = LoaderHandler1Steps.S3999_TRAY_FILM_JUDGE_END;
|
}
|
else if (equipment.Align_vision.Send_Film_Judge_Grab_Ready(1, 0, 0, 1, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
Step = LoaderHandler1Steps.S3610_RIGHT_CAMERA_GRAB_READY_WAIT;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S3610_RIGHT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Grab_Ready_Ack))
|
{
|
Step = LoaderHandler1Steps.S3620_RIGHT_CAMERA_MARK_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S3600_RIGHT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3620_RIGHT_CAMERA_MARK_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
if (equipment.Align_vision.Send_Film_Judge_Grab_Start(1, 0, equipment.loader.Handler1.MotorX.Position, equipment.loader.Handler1.MotorY.Position))
|
{
|
Step = LoaderHandler1Steps.S3630_RIGHT_CAMERA_MARK_GRAB_WAIT;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S3630_RIGHT_CAMERA_MARK_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Grab_Start_Right_Ack))
|
{
|
Step = LoaderHandler1Steps.S3640_FILM_JUDGE_RIGHT_CHECK;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S3600_RIGHT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3640_FILM_JUDGE_RIGHT_CHECK:
|
{
|
Panel_Info info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, pick_panel_num);
|
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Right_Ack))
|
{
|
info.Film_Judge_Ack = true;
|
info.Film_Judge_Result = equipment.sm.Get_Bit(Vision_Address.Film_Judge_Right_Result);
|
info.Ablation_Run = info.Film_Judge_Result;
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, info);
|
|
Step = LoaderHandler1Steps.S3999_TRAY_FILM_JUDGE_END;
|
}
|
else
|
{
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Move_Delay)
|
{
|
Film_Judge_retry_Cnt++;
|
|
if (Film_Judge_retry_Cnt > equipment.Setting.Vision_Retry_Count)
|
{
|
if (sequenceChangedTime.Minute > 5)
|
{
|
Step = LoaderHandler1Steps.S3700_USER_COMMAND_START;
|
}
|
}
|
if (Film_Judge_retry_Cnt == equipment.Setting.Vision_Retry_Count)
|
{
|
Step = LoaderHandler1Steps.S3700_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S3600_RIGHT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S3700_USER_COMMAND_START:
|
{
|
_filmJudgeUserCommand = new Form_User_Command_Set("Film_Judge");
|
film_judge_user_command_show = true;
|
|
Step = LoaderHandler1Steps.S3710_USER_COMMAND_WAIT;
|
break;
|
}
|
case LoaderHandler1Steps.S3710_USER_COMMAND_WAIT:
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, pick_panel_num);
|
|
if (_filmJudgeUserCommand.Command_Type == En_User_Command.Scrap)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(0, 1, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
info.Blank = true;
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, info);
|
Step = LoaderHandler1Steps.S3999_TRAY_FILM_JUDGE_END;
|
}
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Retry)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(1, 1, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
Film_Judge_retry_Cnt = 0;
|
Step = LoaderHandler1Steps.S3600_RIGHT_CAMERA_GRAB_READY;
|
}
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Skip)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(2, 1, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Result, false);
|
Step = LoaderHandler1Steps.S3640_FILM_JUDGE_RIGHT_CHECK;
|
}
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Pass)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(3, 1, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Result, false);
|
Step = LoaderHandler1Steps.S3640_FILM_JUDGE_RIGHT_CHECK;
|
}
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Manual)
|
{
|
if (equipment.Align_vision.Send_Film_Judge_Command(4, 1, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Result, false);
|
Step = LoaderHandler1Steps.S3640_FILM_JUDGE_RIGHT_CHECK;
|
}
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S3999_TRAY_FILM_JUDGE_END:
|
{
|
Tact_Film_Judge.Stop();
|
Step = LoaderHandler1Steps.S4000_PICK_TRAY_PANEL_START;
|
break;
|
}
|
}
|
}
|
|
private void Seq_PickTrayPanel()
|
{
|
switch (Step)
|
{
|
case LoaderHandler1Steps.S4000_PICK_TRAY_PANEL_START:
|
{
|
Step = LoaderHandler1Steps.S4100_PICKER_UP;
|
break;
|
}
|
case LoaderHandler1Steps.S4100_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = LoaderHandler1Steps.S4110_TRAY_TRANSFER_POSITION_CHECK;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4110_TRAY_TRANSFER_POSITION_CHECK:
|
{
|
if (equipment.loader.TrayTransfer.IsStayPosition)
|
{
|
Step = LoaderHandler1Steps.S4200_GET_PICKER1_PANEL_NUM;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4200_GET_PICKER1_PANEL_NUM:
|
{
|
var panel_num = 0;
|
if (Get_Handler_1_1_Tray_In_Panel_Num(out panel_num))
|
{
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Panel #1 Pick Position [Start]");
|
pick_panel_num = panel_num;
|
Step = LoaderHandler1Steps.S4210_GET_PICKER1_PICK_POITION;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S4400_GET_PICKER2_PANEL_NUM;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4210_GET_PICKER1_PICK_POITION:
|
{
|
var position_x = 0.0;
|
var position_y = 0.0;
|
if (Get_Tray_In_LD_Handler_1_X_Position(pick_panel_num, out position_x) && Get_Tray_In_LD_Handler_1_Y_Position(pick_panel_num, out position_y))
|
{
|
pick_position_x = position_x;
|
pick_position_y = position_y;
|
|
Step = LoaderHandler1Steps.S4300_MOVE_PICKER1_PICK_POSITION;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4300_MOVE_PICKER1_PICK_POSITION:
|
{
|
if (Move_X(pick_position_x) && Move_Y(pick_position_y))
|
{
|
Step = LoaderHandler1Steps.S4305_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4305_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(pick_position_x, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(pick_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #1 Pick Position [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #1 Pick Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #1 Pick [Start]");
|
Step = LoaderHandler1Steps.S4310_PICKER1_PICK_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S4300_MOVE_PICKER1_PICK_POSITION;
|
}
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S4310_PICKER1_PICK_START:
|
{
|
if(_picker1Step == PickerSteps.S0000_WAIT)
|
{
|
_picker1Step = PickerSteps.S1000_PICK_TRAY_PANEL_START;
|
|
Step = LoaderHandler1Steps.S4320_PICKER1_PICK_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4320_PICKER1_PICK_WAIT:
|
{
|
if(_picker1Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #1 Pick [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #1 Pick [Tact : {Tact_Move.Seconds} (sec)]");
|
|
if (Picker1.IsVacuumSensor)
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, pick_panel_num);
|
info.Start_Time = DateTime.Now;
|
Panel1 = info;
|
|
info.Blank = true;
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, info);
|
|
equipment.panel_count_info.CleaningCount++;
|
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(equipment.panel_count_info);
|
|
Step = LoaderHandler1Steps.S4400_GET_PICKER2_PANEL_NUM;
|
}
|
else
|
{
|
_pickerUserCommand = new Tray_QR_Code_Command($"LD Tray Picker 1 ({pick_panel_num})");
|
tray_pick_retry_pass_command_show = true;
|
|
Step = LoaderHandler1Steps.S4330_PICKER1_COMMAND_WAIT;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4330_PICKER1_COMMAND_WAIT:
|
{
|
if (_pickerUserCommand.Command_Type == En_User_Command.Retry)
|
{
|
Step = LoaderHandler1Steps.S4310_PICKER1_PICK_START;
|
}
|
else if (_pickerUserCommand.Command_Type == En_User_Command.Pass)
|
{
|
if(Picker1.IsWorkEnd)
|
{
|
if(Picker1.VacuumSolOn == false)
|
{
|
var resetInfo = new Panel_Info();
|
resetInfo.Panel_Num = pick_panel_num;
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, resetInfo);
|
Step = LoaderHandler1Steps.S4400_GET_PICKER2_PANEL_NUM;
|
}
|
else
|
{
|
Picker1.VacuumOff();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4400_GET_PICKER2_PANEL_NUM:
|
{
|
var panel_num = 0;
|
if (Get_Handler_1_2_Tray_In_Panel_Num(out panel_num))
|
{
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #2 Pick Position [Start]");
|
pick_panel_num = panel_num;
|
Step = LoaderHandler1Steps.S4410_GET_PICKER2_PICK_POITION;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S4999_PICK_TRAY_PANEL_END;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4410_GET_PICKER2_PICK_POITION:
|
{
|
var position_x = 0.0;
|
var position_y = 0.0;
|
if (Get_Tray_In_LD_Handler_1_X_Position(pick_panel_num, out position_x) && Get_Tray_In_LD_Handler_1_Y_Position(pick_panel_num, out position_y))
|
{
|
pick_position_x = double.Parse((position_x - 220).ToString("F3"));
|
pick_position_y = position_y;
|
|
Step = LoaderHandler1Steps.S4500_MOVE_PICKER2_PICK_POSITION;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S4500_MOVE_PICKER2_PICK_POSITION:
|
{
|
if (Move_X(pick_position_x) && Move_Y(pick_position_y))
|
{
|
Step = LoaderHandler1Steps.S4505_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4505_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(pick_position_x, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(pick_position_y, equipment.Setting.Inposition_Offset))
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #2 Pick Position [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #2 Pick Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #2 Pick [Start]");
|
Step = LoaderHandler1Steps.S4510_PICKER2_PICK_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S4500_MOVE_PICKER2_PICK_POSITION;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4510_PICKER2_PICK_START:
|
{
|
if (_picker2Step == PickerSteps.S0000_WAIT)
|
{
|
_picker2Step = PickerSteps.S1000_PICK_TRAY_PANEL_START;
|
|
Step = LoaderHandler1Steps.S4520_PICKER2_PICK_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4520_PICKER2_PICK_WAIT:
|
{
|
if (_picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #2 Pick [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1,Panel #2 Pick [Tact : {Tact_Move.Seconds} (sec)]");
|
|
if (Picker2.IsVacuumSensor)
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, pick_panel_num);
|
info.Start_Time = DateTime.Now;
|
Panel2 = info;
|
|
info.Blank = true;
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, info);
|
|
equipment.panel_count_info.CleaningCount++;
|
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(equipment.panel_count_info);
|
|
Step = LoaderHandler1Steps.S4999_PICK_TRAY_PANEL_END;
|
}
|
else
|
{
|
_pickerUserCommand = new Tray_QR_Code_Command($"LD Tray Picker 2 ({pick_panel_num})");
|
tray_pick_retry_pass_command_show = true;
|
|
Step = LoaderHandler1Steps.S4530_PICKER2_COMMAND_WAIT;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4530_PICKER2_COMMAND_WAIT:
|
{
|
if (_pickerUserCommand.Command_Type == En_User_Command.Retry)
|
{
|
Step = LoaderHandler1Steps.S4510_PICKER2_PICK_START;
|
}
|
else if (_pickerUserCommand.Command_Type == En_User_Command.Pass)
|
{
|
if (Picker2.VacuumOff())
|
{
|
var resetInfo = new Panel_Info();
|
resetInfo.Panel_Num = pick_panel_num;
|
Panel_Info_Manager.Instance.Set_Panel_Info(Panel_Info_Names.LD_Tray_In, resetInfo);
|
Step = LoaderHandler1Steps.S4999_PICK_TRAY_PANEL_END;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S4999_PICK_TRAY_PANEL_END:
|
{
|
Step = LoaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_PlacePreAlignStage()
|
{
|
switch (Step)
|
{
|
case LoaderHandler1Steps.S5000_PLACE_PRE_ALIGN_START:
|
{
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Position [Start]");
|
Step = LoaderHandler1Steps.S5100_HANDLER2_POSITION_CHECK;
|
break;
|
}
|
case LoaderHandler1Steps.S5100_HANDLER2_POSITION_CHECK:
|
{
|
var position = equipment.before.Handler2.Get_Position_Y_Stay();
|
|
if (position >= equipment.before.Handler2.MotorY.Position || equipment.before.Handler2.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset))
|
{
|
Step = LoaderHandler1Steps.S5110_REVERSE_STAGE_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S5110_REVERSE_STAGE_POSITION_CHECK:
|
{
|
if (equipment.before.ReverseStage.IsStayPosition)
|
{
|
Step = LoaderHandler1Steps.S5120_PRE_ALIGN_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S5120_PRE_ALIGN_POSITION_CHECK:
|
{
|
if (equipment.before.PreAlignStage.IsMotorX1LoadPosition && equipment.before.PreAlignStage.IsMotorY1LoadPosition && equipment.before.PreAlignStage.IsMotorT1LoadPosition
|
&& equipment.before.PreAlignStage.IsMotorX2LoadPosition && equipment.before.PreAlignStage.IsMotorY2LoadPosition && equipment.before.PreAlignStage.IsMotorT2LoadPosition)
|
{
|
Step = LoaderHandler1Steps.S5140_PICKER_UP;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S5140_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = LoaderHandler1Steps.S5200_MOVE_PRE_ALIGN_STAGE;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S5200_MOVE_PRE_ALIGN_STAGE:
|
{
|
if (Move_X_Pre_Align_Position() && Move_Y_Pre_Align_Position())
|
{
|
Step = LoaderHandler1Steps.S5220_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S5220_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (Get_Is_Position_X_Pre_Align() && Get_Is_Position_Y_Pre_Align())
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Position [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Position [Tact : {Tact_Move.Seconds} (sec)]");
|
Step = LoaderHandler1Steps.S5300_PLACE_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S5200_MOVE_PRE_ALIGN_STAGE;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S5300_PLACE_START:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Place [Start]");
|
|
if (Picker1.IsExist)
|
{
|
_picker1Step = PickerSteps.S2000_PLACE_PRE_ALIGN_STAGE_START;
|
}
|
|
if (Picker2.IsExist)
|
{
|
_picker2Step = PickerSteps.S2000_PLACE_PRE_ALIGN_STAGE_START;
|
}
|
|
Step = LoaderHandler1Steps.S5310_PLACE_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S5310_PLACE_WAIT:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Place [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Place [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = LoaderHandler1Steps.S5999_PLACE_PRE_ALIGN_END;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S5999_PLACE_PRE_ALIGN_END:
|
{
|
Tact_Move.Stop();
|
|
var prealignstage = equipment.before.PreAlignStage;
|
|
var isPreAlignPanel1FilmjudgeAck = prealignstage.Stage1.IsExist == false || prealignstage.Panel1.Film_Judge_Ack;
|
var isPreAlignPanel2FilmjudgeAck = prealignstage.Stage2.IsExist == false || prealignstage.Panel2.Film_Judge_Ack;
|
|
if(equipment.Mode.Film_Judge_Skip || (isPreAlignPanel1FilmjudgeAck && isPreAlignPanel2FilmjudgeAck))
|
{
|
Step = LoaderHandler1Steps.S0000_WAIT;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S6000_PRE_ALIGN_FILM_JUDGE_START;
|
}
|
break;
|
}
|
}
|
}
|
|
private void Seq_PreAlignStageFilmJudge()
|
{
|
var prealignstage = equipment.before.PreAlignStage;
|
var isPreAlignPanel1FilmjudgeAck = prealignstage.Stage1.IsExist == false || prealignstage.Panel1.Film_Judge_Ack;
|
var isPreAlignPanel2FilmjudgeAck = prealignstage.Stage2.IsExist == false || prealignstage.Panel2.Film_Judge_Ack;
|
|
switch (Step)
|
{
|
case LoaderHandler1Steps.S6000_PRE_ALIGN_FILM_JUDGE_START:
|
{
|
Film_Judge_retry_Cnt = 0;
|
Tact_Film_Judge.Start();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Film Judge [Start]");
|
Step = LoaderHandler1Steps.S6100_HANDLER2_POSITION_CHECK;
|
break;
|
}
|
case LoaderHandler1Steps.S6100_HANDLER2_POSITION_CHECK:
|
{
|
double position = equipment.before.Handler2.Get_Position_Y_Stay();
|
|
if (position >= equipment.before.Handler2.MotorY.Position || equipment.before.Handler2.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset))
|
{
|
Step = LoaderHandler1Steps.S6110_REVERSE_STAGE_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6110_REVERSE_STAGE_POSITION_CHECK:
|
{
|
if (equipment.before.ReverseStage.IsStayPosition)
|
{
|
Step = LoaderHandler1Steps.S6120_PICKER_UP;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6120_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = LoaderHandler1Steps.S6130_MOVE_FILM_JUGE_POS;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6130_MOVE_FILM_JUGE_POS:
|
{
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Film_Judge_Left_X, 500)
|
&& MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Film_Judge_Left_Y, 500))
|
Step = LoaderHandler1Steps.S6135_POSITION_CHECK;
|
|
break;
|
}
|
case LoaderHandler1Steps.S6135_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Film_Judge_Left_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Film_Judge_Left_Y, equipment.Setting.Inposition_Offset))
|
{
|
Step = LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S6130_MOVE_FILM_JUGE_POS;
|
}
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY:
|
{
|
var info = equipment.before.PreAlignStage.Panel1;
|
|
if (isPreAlignPanel1FilmjudgeAck)
|
{
|
Step = LoaderHandler1Steps.S6220_RIGHT_CAMERA_GRAB_READY;
|
}
|
else if (equipment.Align_vision.Send_Film_Judge_Grab_Ready(0, 0, 0, 0, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
Step = LoaderHandler1Steps.S6210_LEFT_CAMERA_GRAB_READY_WAIT;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S6210_LEFT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Grab_Ready_Ack))
|
{
|
Step = LoaderHandler1Steps.S6220_RIGHT_CAMERA_GRAB_READY;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6220_RIGHT_CAMERA_GRAB_READY:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.before.PreAlignStage.Panel2;
|
|
if (isPreAlignPanel2FilmjudgeAck)
|
{
|
Step = LoaderHandler1Steps.S6240_LEFT_CAMERA_MARK_GRAB_START;
|
return;
|
}
|
else if (equipment.Align_vision.Send_Film_Judge_Grab_Ready(1, 0, 0, 1, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
sequenceChangedTime.Start();
|
Step = LoaderHandler1Steps.S6230_RIGHT_CAMERA_GRAB_READY_WAIT;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S6230_RIGHT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Grab_Ready_Ack))
|
{
|
Step = LoaderHandler1Steps.S6240_LEFT_CAMERA_MARK_GRAB_START;
|
return;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6240_LEFT_CAMERA_MARK_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.before.PreAlignStage.Panel1;
|
|
if (isPreAlignPanel1FilmjudgeAck)
|
{
|
Step = LoaderHandler1Steps.S6260_RIGHT_CAMERA_MARK_GRAB_START;
|
return;
|
}
|
else if (equipment.Align_vision.Send_Film_Judge_Grab_Start(0, 0, MotorX.Position, MotorY.Position))
|
{
|
Step = LoaderHandler1Steps.S6250_LEFT_CAMERA_MARK_GRAB_WAIT;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S6250_LEFT_CAMERA_MARK_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Grab_Start_Left_Ack))
|
{
|
Step = LoaderHandler1Steps.S6260_RIGHT_CAMERA_MARK_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6260_RIGHT_CAMERA_MARK_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.before.PreAlignStage.Panel2;
|
|
if (isPreAlignPanel2FilmjudgeAck)
|
{
|
Step = LoaderHandler1Steps.S6280_FILM_JUDGE_CHECK;
|
return;
|
}
|
else if (equipment.Align_vision.Send_Film_Judge_Grab_Start(1, 0, equipment.loader.Handler1.MotorX.Position, equipment.loader.Handler1.MotorY.Position))
|
{
|
Step = LoaderHandler1Steps.S6270_RIGHT_CAMERA_MARK_GRAB_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6270_RIGHT_CAMERA_MARK_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Film_Judge_Grab_Start_Right_Ack))
|
{
|
Step = LoaderHandler1Steps.S6280_FILM_JUDGE_CHECK;
|
}
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6280_FILM_JUDGE_CHECK:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var prealign = equipment.before.PreAlignStage;
|
var info1 = prealign.Panel1;
|
var info2 = prealign.Panel2;
|
|
if ((isPreAlignPanel1FilmjudgeAck || equipment.sm.Get_Bit(Vision_Address.Film_Judge_Left_Ack))
|
&& (isPreAlignPanel2FilmjudgeAck || equipment.sm.Get_Bit(Vision_Address.Film_Judge_Right_Ack)))
|
{
|
if (prealign.Stage1.IsExist && info1.Film_Judge_Ack == false)
|
{
|
info1.Film_Judge_Ack = true;
|
info1.Film_Judge_Result = equipment.sm.Get_Bit(Vision_Address.Film_Judge_Left_Result);
|
info1.Ablation_Run = info1.Film_Judge_Result;
|
equipment.Write_Exception_Log($"Film judge Result Left {info1.Film_Judge_Result}");
|
prealign.Panel1 = info1;
|
}
|
|
if (prealign.Stage2.IsExist && info2.Film_Judge_Ack == false)
|
{
|
info2.Film_Judge_Ack = true;
|
info2.Film_Judge_Result = equipment.sm.Get_Bit(Vision_Address.Film_Judge_Right_Result);
|
info2.Ablation_Run = info2.Film_Judge_Result;
|
equipment.Write_Exception_Log($"Film judge Result Right {info2.Film_Judge_Result}");
|
prealign.Panel2 = info2;
|
}
|
|
Step = LoaderHandler1Steps.S6290_PANEL_INFO_CHECK;
|
}
|
else
|
{
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Film_Judge_retry_Cnt++;
|
|
if (Film_Judge_retry_Cnt > equipment.Setting.Vision_Retry_Count)
|
{
|
if (sequenceChangedTime.Minute > 5)
|
{
|
Step = LoaderHandler1Steps.S6300_USER_COMMAND_START;
|
}
|
}
|
if (Film_Judge_retry_Cnt == equipment.Setting.Vision_Retry_Count)
|
{
|
Step = LoaderHandler1Steps.S6300_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6290_PANEL_INFO_CHECK:
|
{
|
Tact_Film_Judge.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Film Judge [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Film Judge [Tact : {Tact_Film_Judge.Seconds} (sec)]");
|
|
if (equipment.Cur_Main_Recipe.tray_info.Ld_Reverse)
|
{
|
Step = LoaderHandler1Steps.S6400_MOVE_PRE_ALIGN_STAGE;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S6999_PRE_ALIGN_FILM_JUDGE_END;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6300_USER_COMMAND_START:
|
{
|
var info1 = equipment.before.PreAlignStage.Panel1;
|
var info2 = equipment.before.PreAlignStage.Panel2;
|
|
if (equipment.before.PreAlignStage.Stage1.IsExist && info1.Film_Judge_Ack == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0880_FILM_JUDGE_LEFT_ERRROR);
|
}
|
if (equipment.before.PreAlignStage.Stage2.IsExist && info2.Film_Judge_Ack == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0881_FILM_JUDGE_RIGHT_ERRROR);
|
}
|
|
_filmJudgeUserCommand = new Form_User_Command_Set("Film_Judge");
|
film_judge_user_command_show = true;
|
|
Step = LoaderHandler1Steps.S6310_USER_COMMAND_WAIT;
|
break;
|
}
|
case LoaderHandler1Steps.S6310_USER_COMMAND_WAIT:
|
{
|
var prealign = equipment.before.PreAlignStage;
|
|
var info1 = prealign.Panel1;
|
var info2 = prealign.Panel2;
|
|
if (_filmJudgeUserCommand.Command_Type == En_User_Command.Scrap)
|
{
|
if (prealign.Stage1.IsExist && info1.Film_Judge_Ack == false)
|
{
|
info1.Blank = true;
|
prealign.Panel1 = info1;
|
equipment.Align_vision.Send_Film_Judge_Command(0, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (prealign.Stage2.IsExist && info2.Film_Judge_Ack == false)
|
{
|
info2.Blank = true;
|
prealign.Panel2 = info2;
|
equipment.Align_vision.Send_Film_Judge_Command(0, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = LoaderHandler1Steps.S6999_PRE_ALIGN_FILM_JUDGE_END;
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Retry)
|
{
|
if (prealign.Stage1.IsExist && info1.Film_Judge_Ack == false)
|
{
|
equipment.Align_vision.Send_Film_Judge_Command(1, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (prealign.Stage2.IsExist && info2.Film_Judge_Ack == false)
|
{
|
equipment.Align_vision.Send_Film_Judge_Command(1, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Film_Judge_retry_Cnt = 0;
|
Step = LoaderHandler1Steps.S6200_LEFT_CAMERA_GRAB_READY;
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Skip)
|
{
|
if (prealign.Stage1.IsExist && info1.Film_Judge_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Result, false);
|
equipment.Align_vision.Send_Film_Judge_Command(2, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (prealign.Stage2.IsExist && info2.Film_Judge_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Result, false);
|
equipment.Align_vision.Send_Film_Judge_Command(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = LoaderHandler1Steps.S6280_FILM_JUDGE_CHECK;
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Pass)
|
{
|
if (prealign.Stage1.IsExist && info1.Film_Judge_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Result, false);
|
equipment.Align_vision.Send_Film_Judge_Command(3, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (prealign.Stage2.IsExist && info2.Film_Judge_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Result, false);
|
equipment.Align_vision.Send_Film_Judge_Command(3, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = LoaderHandler1Steps.S6280_FILM_JUDGE_CHECK;
|
}
|
else if (_filmJudgeUserCommand.Command_Type == En_User_Command.Manual)
|
{
|
if (prealign.Stage1.IsExist && info1.Film_Judge_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Left_Result, false);
|
equipment.Align_vision.Send_Film_Judge_Command(4, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (prealign.Stage2.IsExist && info2.Film_Judge_Ack == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Film_Judge_Right_Result, false);
|
equipment.Align_vision.Send_Film_Judge_Command(4, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = LoaderHandler1Steps.S6280_FILM_JUDGE_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6400_MOVE_PRE_ALIGN_STAGE:
|
{
|
if (Move_X_Pre_Align_Position() && Move_Y_Pre_Align_Position())
|
{
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Position [Start]");
|
Step = LoaderHandler1Steps.S6405_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6405_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (Get_Is_Position_X_Pre_Align() && Get_Is_Position_Y_Pre_Align())
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Position [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Pick [Start]");
|
Step = LoaderHandler1Steps.S6410_PICK_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S6400_MOVE_PRE_ALIGN_STAGE;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6410_PICK_START:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsExist)
|
{
|
_picker1Step = PickerSteps.S3000_PICK_PRE_ALIGN_STAGE_START;
|
}
|
|
if (equipment.before.PreAlignStage.Stage2.IsExist)
|
{
|
_picker2Step = PickerSteps.S3000_PICK_PRE_ALIGN_STAGE_START;
|
}
|
|
Step = LoaderHandler1Steps.S6420_PICK_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6420_PICK_WAIT:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Pick [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, PreAlign Stage Pick [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = LoaderHandler1Steps.S6999_PRE_ALIGN_FILM_JUDGE_END;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S6999_PRE_ALIGN_FILM_JUDGE_END:
|
{
|
if (equipment.Cur_Main_Recipe.tray_info.Ld_Reverse && IsExist)
|
{
|
Step = LoaderHandler1Steps.S7000_PLACE_REVERSE_STAGE_START;
|
}
|
else
|
{
|
if (equipment.Mode.Pre_Align_Skip)
|
{
|
Step = LoaderHandler1Steps.S1000_MOVE_STAY_POSITION_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S8000_PRE_ALIGN_START;
|
}
|
}
|
break;
|
}
|
}
|
}
|
|
private void Seq_PlaceReverseStage()
|
{
|
switch (Step)
|
{
|
case LoaderHandler1Steps.S7000_PLACE_REVERSE_STAGE_START:
|
{
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Reverse Stage Position [Start]");
|
Step = LoaderHandler1Steps.S7100_HANDLER2_POSITION_CHECK;
|
break;
|
}
|
case LoaderHandler1Steps.S7100_HANDLER2_POSITION_CHECK:
|
{
|
if (equipment.before.Handler2.IsMotorXStayPosition && equipment.before.Handler2.IsMotorYStayPosition)
|
{
|
Step = LoaderHandler1Steps.S7110_REVERSE_STAGE_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S7110_REVERSE_STAGE_POSITION_CHECK:
|
{
|
if (equipment.before.ReverseStage.IsStayPosition)
|
{
|
Step = LoaderHandler1Steps.S7130_PICKER_UP;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S7130_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = LoaderHandler1Steps.S7200_MOVE_REVERSE_STAGE;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S7200_MOVE_REVERSE_STAGE:
|
{
|
if (Move_X_Reverse_Position() && Move_Y_Reverse_Position())
|
{
|
Step = LoaderHandler1Steps.S7220_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S7220_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($"LD_Handler_1, Reverse Stage Position [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Reverse Stage Position [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Tact_Move.Restart();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Reverse Stage Place [Start]");
|
Step = LoaderHandler1Steps.S7300_PLACE_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S7200_MOVE_REVERSE_STAGE;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S7300_PLACE_START:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
if (Picker1.IsExist)
|
{
|
_picker1Step = PickerSteps.S4000_PLACE_REVERSE_STAGE_START;
|
}
|
|
if (Picker2.IsExist)
|
{
|
_picker2Step = PickerSteps.S4000_PLACE_REVERSE_STAGE_START;
|
}
|
|
Step = LoaderHandler1Steps.S7310_PLACE_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S7310_PLACE_WAIT:
|
{
|
if (_picker1Step == PickerSteps.S0000_WAIT && _picker2Step == PickerSteps.S0000_WAIT)
|
{
|
Tact_Move.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Reverse Stage Place [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Reverse Stage Place [Tact : {Tact_Move.Seconds} (sec)]");
|
|
Step = LoaderHandler1Steps.S7999_PLACE_REVERSE_STAGE_END;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S7999_PLACE_REVERSE_STAGE_END:
|
{
|
Step = LoaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_PreAlign()
|
{
|
var prealignstage = equipment.before.PreAlignStage;
|
var isPreAlignPanel1PreAlignResult = prealignstage.Stage1.IsExist == false || prealignstage.Panel1.Pre_Align_Result;
|
var isPreAlignPanel2PreAlignResult = prealignstage.Stage2.IsExist == false || prealignstage.Panel2.Pre_Align_Result;
|
|
switch (Step)
|
{
|
case LoaderHandler1Steps.S8000_PRE_ALIGN_START:
|
{
|
Tact_Pre_Align.Start();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Pre Align [Start]");
|
Pre_Align_retry_Cnt = 0;
|
Step = LoaderHandler1Steps.S8100_HANDLER2_POSITION_CHECK;
|
break;
|
}
|
case LoaderHandler1Steps.S8100_HANDLER2_POSITION_CHECK:
|
{
|
double position = equipment.before.Handler2.Get_Position_Y_Stay();
|
|
if (position >= equipment.before.Handler2.MotorY.Position || equipment.before.Handler2.MotorY.Is_Inposition(position, equipment.Setting.Inposition_Offset))
|
{
|
Step = LoaderHandler1Steps.S8110_REVERSE_STAGE_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8110_REVERSE_STAGE_POSITION_CHECK:
|
{
|
if (equipment.before.ReverseStage.IsStayPosition)
|
{
|
Step = LoaderHandler1Steps.S8120_PICKER_UP;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8120_PICKER_UP:
|
{
|
if (Picker1.IsWorkEnd && Picker2.IsWorkEnd)
|
{
|
if (Picker1.IsUp && Picker2.IsUp)
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
else
|
{
|
if (Picker1.IsUp == false)
|
{
|
Picker1.Up();
|
}
|
|
if (Picker2.IsUp == false)
|
{
|
Picker2.Up();
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY:
|
{
|
var info = equipment.before.PreAlignStage.Panel1;
|
|
if(isPreAlignPanel1PreAlignResult)
|
{
|
Step = LoaderHandler1Steps.S8150_RIGHT_CAMERA_GRAB_READY;
|
return;
|
}
|
|
if (equipment.Align_vision.Send_Pre_Align_Grab_Ready(0, 0, 0, 0, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
Step = LoaderHandler1Steps.S8140_LEFT_CAMERA_GRAB_READY_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8140_LEFT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Pre_Align_Grab_Ready_Ack))
|
{
|
Step = LoaderHandler1Steps.S8150_RIGHT_CAMERA_GRAB_READY;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8150_RIGHT_CAMERA_GRAB_READY:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.before.PreAlignStage.Panel2;
|
|
if (isPreAlignPanel2PreAlignResult)
|
{
|
Step = LoaderHandler1Steps.S8200_MOVE_PRE_ALIGN_LEFT_POS;
|
}
|
else if (equipment.Align_vision.Send_Pre_Align_Grab_Ready(1, 0, 0, 1, info.Tray_Num, info.Panel_Num, info.Panel_ID))
|
{
|
Step = LoaderHandler1Steps.S8160_RIGHT_CAMERA_GRAB_READY_WAIT;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S8160_RIGHT_CAMERA_GRAB_READY_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Pre_Align_Grab_Ready_Ack))
|
{
|
Step = LoaderHandler1Steps.S8200_MOVE_PRE_ALIGN_LEFT_POS;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8200_MOVE_PRE_ALIGN_LEFT_POS:
|
{
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Pre_Align_Left_X, 500)
|
&& MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Pre_Align_Left_Y, 500))
|
{
|
Step = LoaderHandler1Steps.S8205_POSITION_CHECK;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8205_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Pre_Align_Left_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Pre_Align_Left_Y, equipment.Setting.Inposition_Offset))
|
{
|
if (equipment.before.PreAlignStage.Step == PreAlignSteps.S3400_PRE_ALIGN_CHECK)
|
{
|
Step = LoaderHandler1Steps.S8210_LEFT_CAMERA_MARK_1_GRAB_START;
|
}
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S8200_MOVE_PRE_ALIGN_LEFT_POS;
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8210_LEFT_CAMERA_MARK_1_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.before.PreAlignStage.Panel1;
|
|
if (isPreAlignPanel1PreAlignResult)
|
{
|
Step = LoaderHandler1Steps.S8230_RIGHT_CAMERA_MARK_1_GRAB_START;
|
}
|
else if (equipment.Align_vision.Send_Pre_Align_Grab_Start(0, 0, MotorX.Position, MotorY.Position))
|
{
|
Step = LoaderHandler1Steps.S8220_LEFT_CAMERA_MARK_1_GRAB_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8220_LEFT_CAMERA_MARK_1_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Pre_Align_Grab_Start_Left_Ack))
|
{
|
Step = LoaderHandler1Steps.S8230_RIGHT_CAMERA_MARK_1_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S8230_RIGHT_CAMERA_MARK_1_GRAB_START:
|
{
|
var info = equipment.before.PreAlignStage.Panel2;
|
|
if (isPreAlignPanel2PreAlignResult)
|
{
|
Step = LoaderHandler1Steps.S8300_MOVE_PRE_ALIGN_RIGHT_POS;
|
}
|
else if (equipment.Align_vision.Send_Pre_Align_Grab_Start(1, 0, MotorX.Position, MotorY.Position))
|
{
|
Step = LoaderHandler1Steps.S8240_RIGHT_CAMERA_MARK_1_GRAB_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8240_RIGHT_CAMERA_MARK_1_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Pre_Align_Grab_Start_Right_Ack))
|
{
|
Step = LoaderHandler1Steps.S8300_MOVE_PRE_ALIGN_RIGHT_POS;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8300_MOVE_PRE_ALIGN_RIGHT_POS:
|
{
|
if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Pre_Align_Right_X, 500)
|
&& MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Pre_Align_Right_Y, 500))
|
{
|
Step = LoaderHandler1Steps.S8305_POSITION_CHECK;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S8305_POSITION_CHECK:
|
{
|
if (MotorX.MotionComplete && MotorY.MotionComplete)
|
{
|
if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Pre_Align_Right_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Pre_Align_Right_Y, equipment.Setting.Inposition_Offset))
|
{
|
Step = LoaderHandler1Steps.S8310_LEFT_CAMERA_MARK_2_GRAB_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S8300_MOVE_PRE_ALIGN_RIGHT_POS;
|
}
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S8310_LEFT_CAMERA_MARK_2_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) return;
|
|
var info = equipment.before.PreAlignStage.Panel1;
|
|
if (isPreAlignPanel1PreAlignResult)
|
{
|
Step = LoaderHandler1Steps.S8330_RIGHT_CAMERA_MARK_2_GRAB_START;
|
return;
|
}
|
|
if (equipment.Align_vision.Send_Pre_Align_Grab_Start(0, 1, MotorX.Position, MotorY.Position))
|
{
|
Step = LoaderHandler1Steps.S8320_LEFT_CAMERA_MARK_2_GRAB_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8320_LEFT_CAMERA_MARK_2_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Pre_Align_Grab_Start_Left_Ack))
|
{
|
Step = LoaderHandler1Steps.S8330_RIGHT_CAMERA_MARK_2_GRAB_START;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8330_RIGHT_CAMERA_MARK_2_GRAB_START:
|
{
|
if (sequenceChangedTime.Seconds < 0.1)
|
return;
|
|
var info = equipment.before.PreAlignStage.Panel2;
|
|
if (isPreAlignPanel2PreAlignResult)
|
{
|
Step = LoaderHandler1Steps.S8350_PRE_ALIGN_CHECK;
|
return;
|
}
|
else if (equipment.Align_vision.Send_Pre_Align_Grab_Start(1, 1, equipment.loader.Handler1.MotorX.Position, equipment.loader.Handler1.MotorY.Position))
|
{
|
Step = LoaderHandler1Steps.S8340_RIGHT_CAMERA_MARK_2_GRAB_WAIT;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8340_RIGHT_CAMERA_MARK_2_GRAB_WAIT:
|
{
|
if (equipment.sm.Get_Bit(Vision_Address.Pre_Align_Grab_Start_Right_Ack))
|
{
|
Step = LoaderHandler1Steps.S8350_PRE_ALIGN_CHECK;
|
}
|
else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8350_PRE_ALIGN_CHECK:
|
{
|
var prealign = equipment.before.PreAlignStage;
|
var info1 = prealign.Panel1;
|
var info2 = prealign.Panel2;
|
object value_offset;
|
|
if ((isPreAlignPanel1PreAlignResult || equipment.sm.Get_Bit(Vision_Address.Pre_Align_Left_Ack))
|
&& (isPreAlignPanel2PreAlignResult || equipment.sm.Get_Bit(Vision_Address.Pre_Align_Right_Ack)))
|
{
|
if (prealign.Stage1.IsExist && info1.Pre_Align_Result == false)
|
{
|
info1.Pre_Align_Ack = true;
|
info1.Pre_Align_Result = equipment.sm.Get_Bit(Vision_Address.Pre_Align_Left_Result);
|
equipment.Write_Exception_Log($"Pre Align Result Left {info1.Pre_Align_Result}");
|
prealign.Panel1 = info1;
|
isPreAlignPanel1PreAlignResult = prealignstage.Stage1.IsExist == false || prealignstage.Panel1.Pre_Align_Result;
|
}
|
|
if (prealign.Stage2.IsExist && info2.Pre_Align_Result == false)
|
{
|
info2.Pre_Align_Ack = true;
|
info2.Pre_Align_Result = equipment.sm.Get_Bit(Vision_Address.Pre_Align_Right_Result);
|
equipment.Write_Exception_Log($"Pre Align Result Right {info2.Pre_Align_Result}");
|
prealign.Panel2 = info2;
|
isPreAlignPanel2PreAlignResult = prealignstage.Stage2.IsExist == false || prealignstage.Panel2.Pre_Align_Result;
|
}
|
|
if ((isPreAlignPanel1PreAlignResult) && (isPreAlignPanel2PreAlignResult))
|
{
|
if(prealign.Stage1.IsExist && info1.Pre_Align_Result)
|
{
|
equipment.sm.Get_Value(Vision_Address.Pre_Align_Left_Offset_X, out value_offset);
|
info1.Pre_Align_X_Offset = double.Parse(value_offset.ToString());
|
info1.Pre_Align_X_Offset = double.Parse(info1.Pre_Align_X_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Pre_Align_Left_Offset_Y, out value_offset);
|
info1.Pre_Align_Y_Offset = double.Parse(value_offset.ToString());
|
info1.Pre_Align_Y_Offset = double.Parse(info1.Pre_Align_Y_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Pre_Align_Left_Offset_T, out value_offset);
|
info1.Pre_Align_T_Offset = double.Parse(value_offset.ToString());
|
info1.Pre_Align_T_Offset = double.Parse(info1.Pre_Align_T_Offset.ToString("F3"));
|
|
prealign.Panel1 = info1;
|
}
|
|
if (prealign.Stage2.IsExist && info2.Pre_Align_Result)
|
{
|
equipment.sm.Get_Value(Vision_Address.Pre_Align_Right_Offset_X, out value_offset);
|
info2.Pre_Align_X_Offset = double.Parse(value_offset.ToString());
|
info2.Pre_Align_X_Offset = double.Parse(info2.Pre_Align_X_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Pre_Align_Right_Offset_Y, out value_offset);
|
info2.Pre_Align_Y_Offset = double.Parse(value_offset.ToString());
|
info2.Pre_Align_Y_Offset = double.Parse(info2.Pre_Align_Y_Offset.ToString("F3"));
|
|
equipment.sm.Get_Value(Vision_Address.Pre_Align_Right_Offset_T, out value_offset);
|
info2.Pre_Align_T_Offset = double.Parse(value_offset.ToString());
|
info2.Pre_Align_T_Offset = double.Parse(info2.Pre_Align_T_Offset.ToString("F3"));
|
|
prealign.Panel2 = info2;
|
}
|
|
Step = LoaderHandler1Steps.S8999_PRE_ALIGN_END;
|
}
|
else
|
{
|
Pre_Align_retry_Cnt++;
|
|
if (Pre_Align_retry_Cnt >= equipment.Setting.Vision_Retry_Count)
|
{
|
Step = LoaderHandler1Steps.S8400_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
else
|
{
|
if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
|
{
|
Pre_Align_retry_Cnt++;
|
|
if (Pre_Align_retry_Cnt > equipment.Setting.Vision_Retry_Count)
|
{
|
if (sequenceChangedTime.Minute > 5)
|
{
|
Step = LoaderHandler1Steps.S8400_USER_COMMAND_START;
|
}
|
}
|
else if (Pre_Align_retry_Cnt == equipment.Setting.Vision_Retry_Count)
|
{
|
Step = LoaderHandler1Steps.S8400_USER_COMMAND_START;
|
}
|
else
|
{
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
}
|
}
|
break;
|
}
|
case LoaderHandler1Steps.S8400_USER_COMMAND_START:
|
{
|
var info1 = equipment.before.PreAlignStage.Panel1;
|
var info2 = equipment.before.PreAlignStage.Panel2;
|
|
if (equipment.before.PreAlignStage.Stage1.IsExist && info1.Pre_Align_Result == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0882_PRE_ALIGN_LEFT_ERROR);
|
}
|
|
if (equipment.before.PreAlignStage.Stage2.IsExist && info2.Pre_Align_Result == false)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0883_PRE_ALIGN_RIGHT_ERROR);
|
}
|
|
_preAlignUserCommand = new Form_User_Command_Set("Pre Align", false);
|
vision_user_command_show = true;
|
|
Step = LoaderHandler1Steps.S8410_USER_COMMAND_WAIT;
|
break;
|
}
|
case LoaderHandler1Steps.S8410_USER_COMMAND_WAIT:
|
{
|
var info1 = equipment.before.PreAlignStage.Panel1;
|
var info2 = equipment.before.PreAlignStage.Panel2;
|
|
if (_preAlignUserCommand.Command_Type == En_User_Command.Scrap)
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsExist && info1.Pre_Align_Result == false)
|
{
|
equipment.before.PreAlignStage.Panel1 = new Panel_Info();
|
equipment.before.PreAlignStage.Stage_1_Scrap();
|
equipment.Align_vision.Send_Pre_Align_Command(0, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (equipment.before.PreAlignStage.Stage2.IsExist && info2.Pre_Align_Result == false)
|
{
|
equipment.before.PreAlignStage.Panel2 = new Panel_Info();
|
equipment.before.PreAlignStage.Stage_2_Scrap();
|
equipment.Align_vision.Send_Pre_Align_Command(0, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = LoaderHandler1Steps.S8999_PRE_ALIGN_END;
|
}
|
else if (_preAlignUserCommand.Command_Type == En_User_Command.Retry)
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsExist && info1.Pre_Align_Result == false)
|
{
|
equipment.Align_vision.Send_Pre_Align_Command(1, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (equipment.before.PreAlignStage.Stage2.IsExist && info2.Pre_Align_Result == false)
|
{
|
equipment.Align_vision.Send_Pre_Align_Command(1, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Pre_Align_retry_Cnt = 0;
|
Step = LoaderHandler1Steps.S8130_LEFT_CAMERA_GRAB_READY;
|
}
|
else if (_preAlignUserCommand.Command_Type == En_User_Command.Skip)
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsExist && info1.Pre_Align_Result == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Left_Result, true);
|
equipment.Align_vision.Send_Pre_Align_Command(2, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (equipment.before.PreAlignStage.Stage2.IsExist && info2.Pre_Align_Result == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Right_Result, true);
|
equipment.Align_vision.Send_Pre_Align_Command(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = LoaderHandler1Steps.S8350_PRE_ALIGN_CHECK;
|
}
|
else if (_preAlignUserCommand.Command_Type == En_User_Command.Pass)
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsExist && info1.Pre_Align_Result == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Left_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Left_Result, true);
|
equipment.Align_vision.Send_Pre_Align_Command(3, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (equipment.before.PreAlignStage.Stage2.IsExist && info2.Pre_Align_Result == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Right_Ack, true);
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Right_Result, true);
|
equipment.Align_vision.Send_Pre_Align_Command(3, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = LoaderHandler1Steps.S8350_PRE_ALIGN_CHECK;
|
}
|
else if (_preAlignUserCommand.Command_Type == En_User_Command.Manual)
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsExist && info1.Pre_Align_Result == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Left_Ack, false);
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Left_Result, false);
|
equipment.Align_vision.Send_Pre_Align_Command(4, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID);
|
}
|
|
if (equipment.before.PreAlignStage.Stage2.IsExist && info2.Pre_Align_Result == false)
|
{
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Right_Ack, false);
|
equipment.sm.Set_Bit(Vision_Address.Pre_Align_Right_Result, false);
|
equipment.Align_vision.Send_Pre_Align_Command(4, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID);
|
}
|
|
Step = LoaderHandler1Steps.S8350_PRE_ALIGN_CHECK;
|
}
|
|
break;
|
}
|
case LoaderHandler1Steps.S8999_PRE_ALIGN_END:
|
{
|
Tact_Pre_Align.Stop();
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Pre Align [End]");
|
equipment.Write_Tact_Time_Log($"LD_Handler_1, Pre Align [Tact : {Tact_Pre_Align.Seconds} (sec)]");
|
|
Step = LoaderHandler1Steps.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private void Seq_Picker1Step()
|
{
|
switch(_picker1Step)
|
{
|
case PickerSteps.S1000_PICK_TRAY_PANEL_START:
|
{
|
_picker1Step = PickerSteps.S1100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S1100_PICKER_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)
|
{
|
picker1Timer.Restart();
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
}
|
else
|
{
|
Picker1.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2000_PLACE_PRE_ALIGN_STAGE_START:
|
{
|
_picker1Step = PickerSteps.S2100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S2100_PICKER_DOWN:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsDown)
|
{
|
_picker1Step = PickerSteps.S2110_PRE_ALIGN_STAGE_VACUUM_ON;
|
}
|
else
|
{
|
Picker1.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2110_PRE_ALIGN_STAGE_VACUUM_ON:
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.before.PreAlignStage.Stage1.VacuumSolOn)
|
{
|
_picker1Step = PickerSteps.S2120_VACUUM_OFF;
|
}
|
else
|
{
|
equipment.before.PreAlignStage.Stage1.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2120_VACUUM_OFF:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.VacuumSolOn == false)
|
{
|
_picker1Step = PickerSteps.S2130_DATA_SET;
|
}
|
else
|
{
|
Picker1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2130_DATA_SET:
|
{
|
equipment.before.PreAlignStage.Panel1 = Panel1;
|
Panel1 = new Panel_Info();
|
picker1Timer.Restart();
|
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S3000_PICK_PRE_ALIGN_STAGE_START:
|
{
|
_picker1Step = PickerSteps.S3100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S3100_PICKER_DOWN:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsDown)
|
{
|
_picker1Step = PickerSteps.S3110_VACUUM_ON;
|
}
|
else
|
{
|
Picker1.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3110_VACUUM_ON:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.VacuumSolOn)
|
{
|
_picker1Step = PickerSteps.S3120_PRE_ALIGN_STAGE_VACUUM_OFF;
|
}
|
else
|
{
|
Picker1.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3120_PRE_ALIGN_STAGE_VACUUM_OFF:
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.before.PreAlignStage.Stage1.VacuumSolOn == false)
|
{
|
_picker1Step = PickerSteps.S3130_PRE_ALIGN_STAGE_BLOW_ON;
|
}
|
else
|
{
|
equipment.before.PreAlignStage.Stage1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3130_PRE_ALIGN_STAGE_BLOW_ON:
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.before.PreAlignStage.Stage1.BlowSolOn == true)
|
{
|
picker1Timer.Restart();
|
_picker1Step = PickerSteps.S3140_PICKER_UP;
|
}
|
else
|
{
|
equipment.before.PreAlignStage.Stage1.BlowSolOn = true;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3140_PICKER_UP:
|
{
|
if (picker1Timer.Seconds < pickerUpWaitTime)
|
{
|
return;
|
}
|
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsUp)
|
{
|
_picker1Step = PickerSteps.S3150_PRE_ALIGN_STAGE_BLOW_OFF;
|
}
|
else
|
{
|
Picker1.Up();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3150_PRE_ALIGN_STAGE_BLOW_OFF:
|
{
|
if (equipment.before.PreAlignStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.before.PreAlignStage.Stage1.BlowSolOn == false)
|
{
|
_picker1Step = PickerSteps.S3160_DATA_SET;
|
}
|
else
|
{
|
equipment.before.PreAlignStage.Stage1.BlowSolOn = false;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3160_DATA_SET:
|
{
|
Panel1 = equipment.before.PreAlignStage.Panel1;
|
picker1Timer.Restart();
|
equipment.before.PreAlignStage.Panel1 = new Panel_Info();
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S4000_PLACE_REVERSE_STAGE_START:
|
{
|
_picker1Step = PickerSteps.S4100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S4100_PICKER_DOWN:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.IsDown)
|
{
|
_picker1Step = PickerSteps.S4110_REVERSE_STAGE_VACUUM_ON;
|
}
|
else
|
{
|
Picker1.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S4110_REVERSE_STAGE_VACUUM_ON:
|
{
|
if (equipment.before.ReverseStage.Stage1.IsWorkEnd)
|
{
|
if (equipment.before.ReverseStage.Stage1.VacuumSolOn)
|
{
|
_picker1Step = PickerSteps.S4120_VACUUM_OFF;
|
}
|
else
|
{
|
equipment.before.ReverseStage.Stage1.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S4120_VACUUM_OFF:
|
{
|
if (Picker1.IsWorkEnd)
|
{
|
if (Picker1.VacuumSolOn == false)
|
{
|
_picker1Step = PickerSteps.S4130_DATA_SET;
|
}
|
else
|
{
|
Picker1.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S4130_DATA_SET:
|
{
|
equipment.before.ReverseStage.Panel1 = Panel1;
|
Panel1 = new Panel_Info();
|
picker1Timer.Restart();
|
_picker1Step = PickerSteps.S9200_PICKER_UP;
|
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();
|
picker1Timer.Restart();
|
_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_TRAY_PANEL_START:
|
{
|
_picker2Step = PickerSteps.S1100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S1100_PICKER_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)
|
{
|
picker2Timer.Restart();
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
}
|
else
|
{
|
Picker2.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2000_PLACE_PRE_ALIGN_STAGE_START:
|
{
|
_picker2Step = PickerSteps.S2100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S2100_PICKER_DOWN:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsDown)
|
{
|
_picker2Step = PickerSteps.S2110_PRE_ALIGN_STAGE_VACUUM_ON;
|
}
|
else
|
{
|
Picker2.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2110_PRE_ALIGN_STAGE_VACUUM_ON:
|
{
|
if (equipment.before.PreAlignStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.before.PreAlignStage.Stage2.VacuumSolOn)
|
{
|
_picker2Step = PickerSteps.S2120_VACUUM_OFF;
|
}
|
else
|
{
|
equipment.before.PreAlignStage.Stage2.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2120_VACUUM_OFF:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.VacuumSolOn == false)
|
{
|
_picker2Step = PickerSteps.S2130_DATA_SET;
|
}
|
else
|
{
|
Picker2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S2130_DATA_SET:
|
{
|
equipment.before.PreAlignStage.Panel2 = Panel2;
|
Panel2 = new Panel_Info();
|
picker2Timer.Restart();
|
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S3000_PICK_PRE_ALIGN_STAGE_START:
|
{
|
_picker2Step = PickerSteps.S3100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S3100_PICKER_DOWN:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsDown)
|
{
|
_picker2Step = PickerSteps.S3110_VACUUM_ON;
|
}
|
else
|
{
|
Picker2.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3110_VACUUM_ON:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.VacuumSolOn)
|
{
|
_picker2Step = PickerSteps.S3120_PRE_ALIGN_STAGE_VACUUM_OFF;
|
}
|
else
|
{
|
Picker2.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3120_PRE_ALIGN_STAGE_VACUUM_OFF:
|
{
|
if (equipment.before.PreAlignStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.before.PreAlignStage.Stage2.VacuumSolOn == false)
|
{
|
_picker2Step = PickerSteps.S3130_PRE_ALIGN_STAGE_BLOW_ON;
|
}
|
else
|
{
|
equipment.before.PreAlignStage.Stage2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3130_PRE_ALIGN_STAGE_BLOW_ON:
|
{
|
if (equipment.before.PreAlignStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.before.PreAlignStage.Stage2.BlowSolOn == true)
|
{
|
picker2Timer.Restart();
|
_picker2Step = PickerSteps.S3140_PICKER_UP;
|
}
|
else
|
{
|
equipment.before.PreAlignStage.Stage2.BlowSolOn = true;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3140_PICKER_UP:
|
{
|
if (picker2Timer.Seconds < pickerUpWaitTime)
|
{
|
return;
|
}
|
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsUp)
|
{
|
_picker2Step = PickerSteps.S3150_PRE_ALIGN_STAGE_BLOW_OFF;
|
}
|
else
|
{
|
Picker2.Up();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3150_PRE_ALIGN_STAGE_BLOW_OFF:
|
{
|
if (equipment.before.PreAlignStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.before.PreAlignStage.Stage2.BlowSolOn == false)
|
{
|
_picker2Step = PickerSteps.S3160_DATA_SET;
|
}
|
else
|
{
|
equipment.before.PreAlignStage.Stage2.BlowSolOn = false;
|
}
|
}
|
break;
|
}
|
case PickerSteps.S3160_DATA_SET:
|
{
|
Panel2 = equipment.before.PreAlignStage.Panel2;
|
equipment.before.PreAlignStage.Panel2 = new Panel_Info();
|
picker2Timer.Restart();
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
break;
|
}
|
case PickerSteps.S4000_PLACE_REVERSE_STAGE_START:
|
{
|
_picker2Step = PickerSteps.S4100_PICKER_DOWN;
|
break;
|
}
|
case PickerSteps.S4100_PICKER_DOWN:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.IsDown)
|
{
|
_picker2Step = PickerSteps.S4110_REVERSE_STAGE_VACUUM_ON;
|
}
|
else
|
{
|
Picker2.Down();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S4110_REVERSE_STAGE_VACUUM_ON:
|
{
|
if (equipment.before.ReverseStage.Stage2.IsWorkEnd)
|
{
|
if (equipment.before.ReverseStage.Stage2.VacuumSolOn)
|
{
|
_picker2Step = PickerSteps.S4120_VACUUM_OFF;
|
}
|
else
|
{
|
equipment.before.ReverseStage.Stage2.VacuumOn();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S4120_VACUUM_OFF:
|
{
|
if (Picker2.IsWorkEnd)
|
{
|
if (Picker2.VacuumSolOn == false)
|
{
|
_picker2Step = PickerSteps.S4130_DATA_SET;
|
}
|
else
|
{
|
Picker2.VacuumOff();
|
}
|
}
|
break;
|
}
|
case PickerSteps.S4130_DATA_SET:
|
{
|
equipment.before.ReverseStage.Panel2 = Panel2;
|
Panel2 = new Panel_Info();
|
picker2Timer.Restart();
|
_picker2Step = PickerSteps.S9200_PICKER_UP;
|
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();
|
picker2Timer.Restart();
|
_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.LD_Tray_BCR.BCR_Read();
|
}
|
|
public bool Get_Handler_1_1_Tray_In_Panel_Num(out int panel_num)
|
{
|
int row = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_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.LD_Tray_In_Row_Data[i].Column % 2 == 0;
|
if (even_num)
|
column = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column / 2;
|
else
|
column = (equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column / 2) + 1;
|
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++)
|
{
|
panel_num++;
|
|
if (j <= column)
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, panel_num);
|
|
if (!info.Blank)
|
{
|
return true;
|
}
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Handler_1_2_Tray_In_Panel_Num(out int panel_num)
|
{
|
int row = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_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.LD_Tray_In_Row_Data[i].Column % 2 == 0;
|
if (even_num)
|
column = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column / 2;
|
else
|
column = (equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column / 2) + 1;
|
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_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.LD_Tray_In, panel_num);
|
|
if (!info.Blank)
|
{
|
return true;
|
}
|
}
|
}
|
else
|
{
|
if ((j >= column))
|
{
|
var info = Panel_Info_Manager.Instance.Get_Panel_Info(Panel_Info_Names.LD_Tray_In, panel_num);
|
|
if (!info.Blank)
|
{
|
return true;
|
}
|
}
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Tray_In_LD_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.LD_Tray_In_Row; i++)
|
{
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++)
|
{
|
pnum++;
|
if (pnum == panel_num)
|
{
|
column = j;
|
position = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Pick_Position_X + ((column - 1) * equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Cell_Pitch_X);
|
|
position = double.Parse(position.ToString("F3"));
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Tray_In_LD_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.LD_Tray_In_Row; i++)
|
{
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++)
|
{
|
pnum++;
|
if (pnum == panel_num)
|
{
|
position = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Pick_Position_Y;
|
position = double.Parse(position.ToString("F3"));
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Tray_In_LD_Handler_1_X_Film_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.LD_Tray_In_Row; i++)
|
{
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++)
|
{
|
pnum++;
|
if (pnum == panel_num)
|
{
|
column = j;
|
position = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Film_Position_X + ((column - 1) * equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Cell_Pitch_X);
|
|
position = double.Parse(position.ToString("F3"));
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public bool Get_Tray_In_LD_Handler_1_Y_Film_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.LD_Tray_In_Row; i++)
|
{
|
for (int j = 1; j <= equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Column; j++)
|
{
|
pnum++;
|
if (pnum == panel_num)
|
{
|
position = equipment.Cur_Main_Recipe.tray_info.LD_Tray_In_Row_Data[i].Film_Position_Y;
|
position = double.Parse(position.ToString("F3"));
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
public double Get_Position_Y_Stay()
|
{
|
object value;
|
double get_position;
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_Y_Stay_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return get_position;
|
}
|
|
public bool Get_Is_Position_X_Pre_Align()
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_X_PreAlign_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_Pre_Align()
|
{
|
object value;
|
double get_position;
|
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_Y_PreAlign_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.LD_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.LD_Handler_1_Y_Reverse_Stage_Position, out value);
|
get_position = double.Parse($"{value}");
|
|
return MotorY.Is_Inposition(get_position, equipment.Setting.Inposition_Offset);
|
}
|
|
public bool Move_X(double position)
|
{
|
return MotorX.Move_Absolute_Pos(position, 500);
|
}
|
|
public bool Move_Y(double position)
|
{
|
return MotorY.Move_Absolute_Pos(position, 500);
|
}
|
|
public bool MoveMotorXStayPosition()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_X_Stay_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_X_Stay_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorX.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool MoveMotorYStayPosition()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_Y_Stay_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_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.LD_Handler_1_X_Reverse_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_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.LD_Handler_1_Y_Reverse_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_Y_Reverse_Stage_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorY.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Move_X_Pre_Align_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_X_PreAlign_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_X_PreAlign_Stage_Velocity, out value);
|
velocity = double.Parse($"{value}");
|
|
return MotorX.Move_Absolute_Pos(position, velocity);
|
}
|
|
public bool Move_Y_Pre_Align_Position()
|
{
|
object value;
|
double position;
|
double velocity;
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_Y_PreAlign_Stage_Position, out value);
|
position = double.Parse($"{value}");
|
equipment.sm.Get_Value(Position_Parameter_Address.LD_Handler_1_Y_PreAlign_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("LD_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("LD_Handler_1_2 Scrap Can't Start", "Equipment mode is Auto.");
|
return false;
|
}
|
|
_picker2Step = PickerSteps.S9000_SCRAP_START;
|
return true;
|
}
|
#endregion
|
}
|
}
|