From a4300483169869355a8c19fb78144ae59d1a0595 Mon Sep 17 00:00:00 2001 From: 천호석 <hosuk1418@naver.com> Date: 금, 04 11월 2022 16:29:28 +0900 Subject: [PATCH] Measurement Width error 알람 추가, PREND 보고 오류 제거, S4750_ 에서 무언정지 제거 --- SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs | 748 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 703 insertions(+), 45 deletions(-) diff --git a/SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs b/SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs index 3ccf432..05eaf5b 100644 --- a/SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs +++ b/SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs @@ -1694,6 +1694,7 @@ } else { + equipment.WidthMeasurementCount = 0; measurement_retry_cnt = 0; Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY; } @@ -2091,7 +2092,7 @@ { sequenceChangedTime.Start(); - Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK; + Step = UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION; return; } @@ -2104,7 +2105,7 @@ { if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack)) { - Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK; + Step = UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION; } else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) { @@ -2285,32 +2286,33 @@ var info2 = aoistage.Panel2; object value; - bool result; if ((isAoiPanel1WidthMeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack)) && (isAoiPanel2WidthMeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack))) { if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false) { - info1.WidthMeasurement_Ack = true; - - if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Result, out result)) + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack)) { - info1.WidthMeasurement_Result = result; + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Result)) + { + info1.WidthMeasurement_Ack = true; + info1.WidthMeasurement_Result = true; - info1.End_Time = DateTime.Now; + info1.End_Time = DateTime.Now; - equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_1_Point_1, out value); - info1.Mark1Width = double.Parse(value.ToString()); - equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_2_Point_1, out value); - info1.Mark2Width = double.Parse(value.ToString()); - //equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_3_Point_1, out value); - //info1.Mark3Point1 = double.Parse(value.ToString()); - //equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_4_Point_1, out value); - //info1.Mark4Point1 = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_1_Point_1, out value); + info1.Mark1Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_2_Point_1, out value); + info1.Mark2Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_3_Point_1, out value); + info1.Mark3Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_4_Point_1, out value); + info1.Mark4Width = double.Parse(value.ToString()); - aoistage.Panel1 = info1; + aoistage.Panel1 = info1; - isAoiPanel1WidthMeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.WidthMeasurement_Ack; + isAoiPanel1WidthMeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.WidthMeasurement_Ack; + } } else { @@ -2320,26 +2322,677 @@ if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false) { - info2.WidthMeasurement_Ack = true; - - if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Result, out result)) + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack)) { - info2.WidthMeasurement_Result = result; + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Result)) + { + info2.WidthMeasurement_Ack = true; + info2.WidthMeasurement_Result = true; - info2.End_Time = DateTime.Now; + info2.End_Time = DateTime.Now; - equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, out value); - info2.Mark1Width = double.Parse(value.ToString()); - equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_2_Point_1, out value); - info2.Mark2Width = double.Parse(value.ToString()); - //equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_3_Point_1, out value); - //info2.Mark3Point1 = double.Parse(value.ToString()); - //equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_4_Point_1, out value); - //info2.Mark4Point1 = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, out value); + info2.Mark1Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_2_Point_1, out value); + info2.Mark2Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_3_Point_1, out value); + info2.Mark3Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_4_Point_1, out value); + info2.Mark4Width = double.Parse(value.ToString()); + aoistage.Panel2 = info2; + + isAoiPanel2WidthMeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.WidthMeasurement_Ack; + } + } + else + { + return; + } + } + + Tact_Move.Stop(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]"); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]"); + + if (isAoiPanel1WidthMeasurementAck && isAoiPanel2WidthMeasurementAck) + { + if(equipment.Cur_Main_Recipe.vision_info.Width_AOI_8Use) + { + info1.WidthMeasurement_Ack = false; + info2.WidthMeasurement_Ack = false; + info1.WidthMeasurement_Result = false; + info2.WidthMeasurement_Result = false; + + aoistage.Panel1 = info1; aoistage.Panel2 = info2; - isAoiPanel2WidthMeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.WidthMeasurement_Ack; + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + else + { + if (equipment.cim_mode == En_Cim_Mode.Online) + { + Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND; + } + else + { + Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END; + } + } + } + else + { + equipment.Aoi_vision.WriteClientLog("no align result"); + measurement_retry_cnt++; + + if (measurement_retry_cnt >= equipment.Setting.Vision_Retry_Count) + { + Step = UnloaderHandler1Steps.S4660_USER_COMMAND_START; + } + else + { + Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY; + } + } + } + else + { + if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + measurement_retry_cnt++; + + if (measurement_retry_cnt == equipment.Setting.Vision_Retry_Count) + { + equipment.Aoi_vision.WriteClientLog("no ack result"); + Tact_Move.Stop(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]"); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]"); + Step = UnloaderHandler1Steps.S4660_USER_COMMAND_START; + } + else + { + equipment.Aoi_vision.WriteClientLog("no ack result"); + Tact_Move.Stop(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]"); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]"); + Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY; + } + } + } + + break; + } + case UnloaderHandler1Steps.S4660_USER_COMMAND_START: + { + var aoistage = equipment.after.AoiStage; + Panel_Info info1 = aoistage.Panel1; + Panel_Info info2 = aoistage.Panel2; + + if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false) + { + Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0888_MEASUREMENT_WIDTH_ERROR); + } + + if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false) + { + Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0888_MEASUREMENT_WIDTH_ERROR); + } + + measurement_user_command = new Form_User_Command_Set("Width Measurement"); + measurement_user_command.UserManualEnable(false); + measurement_user_command_show = true; + + Step = UnloaderHandler1Steps.S4670_USER_COMMAND_WAIT; + break; + } + case UnloaderHandler1Steps.S4670_USER_COMMAND_WAIT: + { + var aoistage = equipment.after.AoiStage; + Panel_Info info1 = aoistage.Panel1; + Panel_Info info2 = aoistage.Panel2; + + if (measurement_user_command.Command_Type == En_User_Command.Scrap) + { + if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false) + { + aoistage.Panel1 = new Panel_Info(); + aoistage.Stage_1_Scrap(); + equipment.Aoi_vision.Send_Measurement_Command_Req(0, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID); + } + + if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false) + { + aoistage.Panel2 = new Panel_Info(); + aoistage.Stage_2_Scrap(); + equipment.Aoi_vision.Send_Measurement_Command_Req(0, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID); + } + + Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END; + } + else if (measurement_user_command.Command_Type == En_User_Command.Retry) + { + if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false) + { + equipment.Aoi_vision.Send_Measurement_Command_Req(1, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID); + } + + if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false) + { + equipment.Aoi_vision.Send_Measurement_Command_Req(1, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID); + } + + measurement_retry_cnt = 0; + Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY; + } + else if (measurement_user_command.Command_Type == En_User_Command.Skip) + { + if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false) + { + equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Ack, true); + equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Align_Result, true); + equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Result, false); + equipment.Aoi_vision.Send_Measurement_Command_Req(2, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID); + info1.Measurement_Result = false; + aoistage.Panel1 = info1; + + } + + if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false) + { + equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Ack, true); + equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Align_Result, true); + equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Result, false); + equipment.Aoi_vision.Send_Measurement_Command_Req(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID); + info2.Measurement_Result = false; + aoistage.Panel2 = info2; + } + + if (equipment.cim_mode == En_Cim_Mode.Online) + { + Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND; + } + else + { + Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END; + } + } + break; + } + + case UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY: + { + Tact_Move.Start(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Ready [Start]"); + + var info = equipment.after.AoiStage.Panel1; + + if (isAoiPanel1WidthMeasurementAck) + { + Step = UnloaderHandler1Steps.S4702_RIGHT_CAMERA_GRAB_READY; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Ready_Req(0, 0, 0, info.Stage_Num, info.Tray_Num, info.Panel_Num, info.Panel_ID)) + Step = UnloaderHandler1Steps.S4701_LEFT_CAMERA_GRAB_READY_WAIT; + + break; + } + case UnloaderHandler1Steps.S4701_LEFT_CAMERA_GRAB_READY_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack)) + { + Step = UnloaderHandler1Steps.S4702_RIGHT_CAMERA_GRAB_READY; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4702_RIGHT_CAMERA_GRAB_READY: + { + if (sequenceChangedTime.Seconds < 0.1) break; + + var info = equipment.after.AoiStage.Panel2; + + if (isAoiPanel2WidthMeasurementAck) + { + Tact_Move.Stop(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [End]"); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [Tact : {Tact_Move.Seconds} (sec)]"); + + Step = UnloaderHandler1Steps.S4710_MOVE_MEASUREMENT_MARK1_POSITION; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Ready_Req(1, 0, 0, info.Stage_Num, info.Tray_Num, info.Panel_Num, info.Panel_ID)) + Step = UnloaderHandler1Steps.S4703_RIGHT_CAMERA_GRAB_READY_WAIT; + + break; + } + case UnloaderHandler1Steps.S4703_RIGHT_CAMERA_GRAB_READY_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack)) + { + Tact_Move.Stop(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [End]"); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Ready [Tact : {Tact_Move.Seconds} (sec)]"); + + Step = UnloaderHandler1Steps.S4710_MOVE_MEASUREMENT_MARK1_POSITION; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4710_MOVE_MEASUREMENT_MARK1_POSITION: + { + Tact_Move.Start(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [Start]"); + + if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark5_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark5_Y, 500)) + Step = UnloaderHandler1Steps.S4711_POSITION_CHECK; + break; + } + case UnloaderHandler1Steps.S4711_POSITION_CHECK: + { + if (MotorX.MotionComplete && MotorY.MotionComplete) + { + if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark5_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark5_Y, equipment.Setting.Inposition_Offset)) + { + Tact_Move.Stop(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [End]"); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading Position [Tact : {Tact_Move.Seconds} (sec)]"); + + vision_delay.Start(); + Step = UnloaderHandler1Steps.S4712_LEFT_CAMERA_MARK_1_GRAB_START; + } + else + { + Step = UnloaderHandler1Steps.S4710_MOVE_MEASUREMENT_MARK1_POSITION; + } + } + break; + } + case UnloaderHandler1Steps.S4712_LEFT_CAMERA_MARK_1_GRAB_START: + { + if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return; + + Tact_Move.Start(); + equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Start]"); + + var info = equipment.after.AoiStage.Panel1; + + if (isAoiPanel1WidthMeasurementAck) + { + Step = UnloaderHandler1Steps.S4714_RIGHT_CAMERA_MARK_1_GRAB_START; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 0, MotorX.Position, MotorY.Position)) + Step = UnloaderHandler1Steps.S4713_LEFT_CAMERA_MARK_1_GRAB_WAIT; + + break; + } + case UnloaderHandler1Steps.S4713_LEFT_CAMERA_MARK_1_GRAB_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack)) + { + Step = UnloaderHandler1Steps.S4714_RIGHT_CAMERA_MARK_1_GRAB_START; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + + break; + } + case UnloaderHandler1Steps.S4714_RIGHT_CAMERA_MARK_1_GRAB_START: + { + if (sequenceChangedTime.Seconds < 0.1) return; + + var info = equipment.after.AoiStage.Panel2; + + if (isAoiPanel2WidthMeasurementAck) + { + Step = UnloaderHandler1Steps.S4720_MOVE_MEASUREMENT_MARK2_POSITION; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 0, MotorX.Position, MotorY.Position)) + Step = UnloaderHandler1Steps.S4715_RIGHT_CAMERA_MARK_1_GRAB_WAIT; + + break; + } + case UnloaderHandler1Steps.S4715_RIGHT_CAMERA_MARK_1_GRAB_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack)) + { + Step = UnloaderHandler1Steps.S4720_MOVE_MEASUREMENT_MARK2_POSITION; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4720_MOVE_MEASUREMENT_MARK2_POSITION: + { + if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break; + + if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark6_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark6_Y, 500)) + Step = UnloaderHandler1Steps.S4721_POSITION_CHECK; + break; + } + case UnloaderHandler1Steps.S4721_POSITION_CHECK: + { + if (MotorX.MotionComplete && MotorY.MotionComplete) + { + if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark6_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark6_Y, equipment.Setting.Inposition_Offset)) + { + vision_delay.Start(); + Step = UnloaderHandler1Steps.S4722_LEFT_CAMERA_MARK_2_GRAB_START; + } + else + { + Step = UnloaderHandler1Steps.S4720_MOVE_MEASUREMENT_MARK2_POSITION; + } + } + break; + } + case UnloaderHandler1Steps.S4722_LEFT_CAMERA_MARK_2_GRAB_START: + { + if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return; + + var info = equipment.after.AoiStage.Panel1; + + if (isAoiPanel1WidthMeasurementAck) + { + Step = UnloaderHandler1Steps.S4724_RIGHT_CAMERA_MARK_2_GRAB_START; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 1, MotorX.Position, MotorY.Position)) + Step = UnloaderHandler1Steps.S4723_LEFT_CAMERA_MARK_2_GRAB_WAIT; + + break; + } + case UnloaderHandler1Steps.S4723_LEFT_CAMERA_MARK_2_GRAB_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack)) + { + Step = UnloaderHandler1Steps.S4724_RIGHT_CAMERA_MARK_2_GRAB_START; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4724_RIGHT_CAMERA_MARK_2_GRAB_START: + { + if (sequenceChangedTime.Seconds < 0.1) return; + + var info = equipment.after.AoiStage.Panel2; + + if (isAoiPanel2WidthMeasurementAck) + { + sequenceChangedTime.Start(); + + Step = UnloaderHandler1Steps.S4730_MOVE_MEASUREMENT_MARK3_POSITION; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 1, MotorX.Position, MotorY.Position)) + Step = UnloaderHandler1Steps.S4725_RIGHT_CAMERA_MARK_2_GRAB_WAIT; + + break; + } + case UnloaderHandler1Steps.S4725_RIGHT_CAMERA_MARK_2_GRAB_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack)) + { + Step = UnloaderHandler1Steps.S4730_MOVE_MEASUREMENT_MARK3_POSITION; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4730_MOVE_MEASUREMENT_MARK3_POSITION: + { + if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break; + + if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark7_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark7_Y, 500)) + Step = UnloaderHandler1Steps.S4731_POSITION_CHECK; + break; + } + case UnloaderHandler1Steps.S4731_POSITION_CHECK: + { + if (MotorX.MotionComplete && MotorY.MotionComplete) + { + if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark7_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark7_Y, equipment.Setting.Inposition_Offset)) + { + vision_delay.Start(); + Step = UnloaderHandler1Steps.S4732_LEFT_CAMERA_MARK_3_GRAB_START; + } + else + { + Step = UnloaderHandler1Steps.S4730_MOVE_MEASUREMENT_MARK3_POSITION; + } + } + break; + } + case UnloaderHandler1Steps.S4732_LEFT_CAMERA_MARK_3_GRAB_START: + { + if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return; + + var info = equipment.after.AoiStage.Panel1; + + if (isAoiPanel1WidthMeasurementAck) + { + Step = UnloaderHandler1Steps.S4734_RIGHT_CAMERA_MARK_3_GRAB_START; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 2, MotorX.Position, MotorY.Position)) + Step = UnloaderHandler1Steps.S4733_LEFT_CAMERA_MARK_3_GRAB_WAIT; + + break; + } + case UnloaderHandler1Steps.S4733_LEFT_CAMERA_MARK_3_GRAB_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack)) + { + Step = UnloaderHandler1Steps.S4734_RIGHT_CAMERA_MARK_3_GRAB_START; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4734_RIGHT_CAMERA_MARK_3_GRAB_START: + { + if (sequenceChangedTime.Seconds < 0.1) return; + + var info = equipment.after.AoiStage.Panel2; + + if (isAoiPanel2WidthMeasurementAck) + { + sequenceChangedTime.Start(); + Step = UnloaderHandler1Steps.S4740_MOVE_MEASUREMENT_MARK4_POSITION; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 2, MotorX.Position, MotorY.Position)) + Step = UnloaderHandler1Steps.S4735_RIGHT_CAMERA_MARK_3_GRAB_WAIT; + + break; + } + case UnloaderHandler1Steps.S4735_RIGHT_CAMERA_MARK_3_GRAB_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack)) + { + Step = UnloaderHandler1Steps.S4740_MOVE_MEASUREMENT_MARK4_POSITION; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4740_MOVE_MEASUREMENT_MARK4_POSITION: + { + if (sequenceChangedTime.Seconds < equipment.Setting.Vision_Move_Delay) break; + + if (MotorX.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark8_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark8_Y, 500)) + Step = UnloaderHandler1Steps.S4741_POSITION_CHECK; + break; + } + case UnloaderHandler1Steps.S4741_POSITION_CHECK: + { + if (MotorX.MotionComplete && MotorY.MotionComplete) + { + if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark8_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark8_Y, equipment.Setting.Inposition_Offset)) + { + vision_delay.Start(); + Step = UnloaderHandler1Steps.S4742_LEFT_CAMERA_MARK_4_GRAB_START; + } + else + { + Step = UnloaderHandler1Steps.S4740_MOVE_MEASUREMENT_MARK4_POSITION; + } + } + break; + } + case UnloaderHandler1Steps.S4742_LEFT_CAMERA_MARK_4_GRAB_START: + { + if (vision_delay.Seconds < equipment.Setting.Vision_Move_Delay) return; + + var info = equipment.after.AoiStage.Panel1; + + if (isAoiPanel1WidthMeasurementAck) + { + Step = UnloaderHandler1Steps.S4744_RIGHT_CAMERA_MARK_4_GRAB_START; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 3, MotorX.Position, MotorY.Position)) + Step = UnloaderHandler1Steps.S4743_LEFT_CAMERA_MARK_4_GRAB_WAIT; + + break; + } + case UnloaderHandler1Steps.S4743_LEFT_CAMERA_MARK_4_GRAB_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack)) + { + Step = UnloaderHandler1Steps.S4744_RIGHT_CAMERA_MARK_4_GRAB_START; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4744_RIGHT_CAMERA_MARK_4_GRAB_START: + { + if (sequenceChangedTime.Seconds < 0.1) return; + + var info = equipment.after.AoiStage.Panel2; + + if (isAoiPanel2WidthMeasurementAck) + { + sequenceChangedTime.Start(); + Step = UnloaderHandler1Steps.S4750_MEASUREMENT_CHECK; + return; + } + + if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 3, MotorX.Position, MotorY.Position)) + Step = UnloaderHandler1Steps.S4745_RIGHT_CAMERA_MARK_4_GRAB_WAIT; + + break; + } + case UnloaderHandler1Steps.S4745_RIGHT_CAMERA_MARK_4_GRAB_WAIT: + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack)) + { + Step = UnloaderHandler1Steps.S4750_MEASUREMENT_CHECK; + } + else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) + { + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; + } + break; + } + case UnloaderHandler1Steps.S4750_MEASUREMENT_CHECK: + { + var aoistage = equipment.after.AoiStage; + var info1 = aoistage.Panel1; + var info2 = aoistage.Panel2; + + object value; + if ((isAoiPanel1WidthMeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack)) + && (isAoiPanel2WidthMeasurementAck || equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack))) + { + if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false) + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Ack)) + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Left_Result)) + { + info1.WidthMeasurement_Ack = true; + info1.WidthMeasurement_Result = true; + + info1.End_Time = DateTime.Now; + + equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_1_Point_1, out value); + info1.Mark5Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_2_Point_1, out value); + info1.Mark6Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_3_Point_1, out value); + info1.Mark7Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_4_Point_1, out value); + info1.Mark8Width = double.Parse(value.ToString()); + + aoistage.Panel1 = info1; + + isAoiPanel1WidthMeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.WidthMeasurement_Result; + } + } + else + { + return; + } + } + + if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false) + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Ack)) + { + if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Result)) + { + info2.WidthMeasurement_Ack = true; + info2.WidthMeasurement_Result = true; + + info2.End_Time = DateTime.Now; + + equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, out value); + info2.Mark5Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_2_Point_1, out value); + info2.Mark6Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_3_Point_1, out value); + info2.Mark7Width = double.Parse(value.ToString()); + equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_4_Point_1, out value); + info2.Mark8Width = double.Parse(value.ToString()); + + aoistage.Panel2 = info2; + + isAoiPanel2WidthMeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.WidthMeasurement_Result; + } } else { @@ -2369,11 +3022,11 @@ if (measurement_retry_cnt >= equipment.Setting.Vision_Retry_Count) { - Step = UnloaderHandler1Steps.S4700_USER_COMMAND_START; + Step = UnloaderHandler1Steps.S4760_USER_COMMAND_START; } else { - Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY; + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; } } } @@ -2389,7 +3042,7 @@ Tact_Move.Stop(); equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]"); equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]"); - Step = UnloaderHandler1Steps.S4700_USER_COMMAND_START; + Step = UnloaderHandler1Steps.S4760_USER_COMMAND_START; } else { @@ -2397,14 +3050,14 @@ Tact_Move.Stop(); equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [End]"); equipment.Write_Tact_Time_Log($"ULD Handler 1, Widht AOI Reading [Tact : {Tact_Move.Seconds} (sec)]"); - Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY; + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; } } } break; } - case UnloaderHandler1Steps.S4700_USER_COMMAND_START: + case UnloaderHandler1Steps.S4760_USER_COMMAND_START: { var aoistage = equipment.after.AoiStage; Panel_Info info1 = aoistage.Panel1; @@ -2412,21 +3065,22 @@ if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false) { - Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0886_MEASUREMENT_LEFT_ERROR); + Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0888_MEASUREMENT_WIDTH_ERROR); } if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false) { - Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0887_MEASUREMENT_RIGHT_ERROR); + Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0888_MEASUREMENT_WIDTH_ERROR); } - measurement_user_command = new Form_User_Command_Set("Measurement"); + measurement_user_command = new Form_User_Command_Set("Width Measurement"); + measurement_user_command.UserManualEnable(false); measurement_user_command_show = true; - Step = UnloaderHandler1Steps.S4700_USER_COMMAND_WAIT; + Step = UnloaderHandler1Steps.S4770_USER_COMMAND_WAIT; break; } - case UnloaderHandler1Steps.S4700_USER_COMMAND_WAIT: + case UnloaderHandler1Steps.S4770_USER_COMMAND_WAIT: { var aoistage = equipment.after.AoiStage; Panel_Info info1 = aoistage.Panel1; @@ -2464,24 +3118,28 @@ } measurement_retry_cnt = 0; - Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY; + Step = UnloaderHandler1Steps.S4700_LEFT_CAMERA_GRAB_READY; } else if (measurement_user_command.Command_Type == En_User_Command.Skip) { - if (aoistage.Stage1.IsExist && info1.Measurement_Ack == false) + if (aoistage.Stage1.IsExist && info1.WidthMeasurement_Ack == false) { equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Ack, true); equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Align_Result, true); equipment.sm.Set_Bit(Vision_Address.Measurement_Left_Result, false); equipment.Aoi_vision.Send_Measurement_Command_Req(2, 0, info1.Tray_Num, info1.Panel_Num, info1.Panel_ID); + info1.Measurement_Result = false; + aoistage.Panel1 = info1; } - if (aoistage.Stage2.IsExist && info2.Measurement_Ack == false) + if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false) { equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Ack, true); equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Align_Result, true); equipment.sm.Set_Bit(Vision_Address.Measurement_Right_Result, false); equipment.Aoi_vision.Send_Measurement_Command_Req(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID); + info2.Measurement_Result = false; + aoistage.Panel2 = info2; } if (equipment.cim_mode == En_Cim_Mode.Online) -- Gitblit v1.9.3