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