검사 개조, Measurement 후 Width 검사 불합리 제거.
| | |
| | | this.cbb_AOI_SeqType.FormattingEnabled = true; |
| | | this.cbb_AOI_SeqType.ItemHeight = 12; |
| | | this.cbb_AOI_SeqType.Items.AddRange(new object[] { |
| | | "AOI Measurement"}); |
| | | "AOI Measurement", |
| | | "Width Measurement"}); |
| | | this.cbb_AOI_SeqType.Location = new System.Drawing.Point(106, 51); |
| | | this.cbb_AOI_SeqType.Name = "cbb_AOI_SeqType"; |
| | | this.cbb_AOI_SeqType.Size = new System.Drawing.Size(156, 20); |
| | |
| | | |
| | | private void btn_AOI_Grab_Ready_Req_Click(object sender, EventArgs e) |
| | | { |
| | | int Seq_Type = 3; |
| | | int Seq_Type = cbb_AOI_SeqType.SelectedIndex == 0 ? 3 : 4; |
| | | int Module_Idx = rb_AOI_Left.Checked ? 0 : 1; |
| | | int Grab_Dir = 1; |
| | | int Pnl_Dir = rb_AOI_Short.Checked ? 0 : 1; |
| | |
| | | |
| | | private void btn_AOI_Grab_Start_Req_Click(object sender, EventArgs e) |
| | | { |
| | | int Seq_Type = 3; |
| | | int Seq_Type = cbb_AOI_SeqType.SelectedIndex == 0 ? 3 : 4; |
| | | int Module_Idx = rb_AOI_Left.Checked ? 0 : 1; |
| | | int Mark_Idx = rb_AOI_Mark_1.Checked ? 0 : 1; |
| | | double Motor_Offset_X; |
| | |
| | | _Parent.sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack, false); |
| | | else |
| | | _Parent.sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack, false); |
| | | |
| | | _Parent._equip.Aoi_vision.SendData(vision_control.Send_Grab_Start_Req(Seq_Type, Module_Idx, Mark_Idx, Motor_Offset_X, Motor_Offset_Y)); |
| | | } |
| | | |
| | |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Ready_Ack, true); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Ready_Result, grab_ready_Ack.result == 0 ? false : true); |
| | | } |
| | | else if (grab_ready_Ack.SeqType == (int)En_SeqType.MeasurementWidth) |
| | | { |
| | | WriteClientLog($"[Recv]MeasurementWidth Grab Ready, Result : {grab_ready_Ack.result}"); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Ready_Ack, true); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Ready_Result, grab_ready_Ack.result == 0 ? false : true); |
| | | } |
| | | |
| | | break; |
| | | } |
| | |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack, true); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Left_Result, grab_start_Ack.result == 0 ? false : true); |
| | | } |
| | | else if (grab_start_Ack.SeqType == (int)En_SeqType.MeasurementWidth) |
| | | { |
| | | WriteClientLog($"[Recv]MeasurementWidth Left Grab Start, Result : {grab_start_Ack.result}"); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack, true); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Left_Result, grab_start_Ack.result == 0 ? false : true); |
| | | } |
| | | } |
| | | else if (grab_start_Ack.ModuleIdx == (int)En_Module_Idx.Right) |
| | | { |
| | |
| | | else if (grab_start_Ack.SeqType == (int)En_SeqType.Measurement) |
| | | { |
| | | WriteClientLog($"[Recv]Measurement Right Grab Start, Result : {grab_start_Ack.result}"); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack, true); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Right_Result, grab_start_Ack.result == 0 ? false : true); |
| | | } |
| | | else if (grab_start_Ack.SeqType == (int)En_SeqType.MeasurementWidth) |
| | | { |
| | | WriteClientLog($"[Recv]MeasurementWidth Right Grab Start, Result : {grab_start_Ack.result}"); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack, true); |
| | | sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Right_Result, grab_start_Ack.result == 0 ? false : true); |
| | | } |
| | |
| | | |
| | | if (measurement_result_Ack.moduleIdx == (int)En_Module_Idx.Left) |
| | | { |
| | | WriteClientLog($"[Recv]Width Measurement Left Result, Result : {measurement_result_Ack.measurement_result}, Mark1Width : {measurement_result_Ack.Mark1Width}, Mark2Width : {measurement_result_Ack.Mark2Width}, Mark3Width : {measurement_result_Ack.Mark3Width}, Mark4Width : {measurement_result_Ack.Mark4Width}"); |
| | | WriteClientLog($"[Recv]Width Measurement Left Result, Result : {measurement_result_Ack.measurement_result}, Mark1Width : {measurement_result_Ack.Mark1Width}, Mark2Width : {measurement_result_Ack.Mark2Width}"); |
| | | sm.Set_Value(Vision_Address.Measurement_Left_Result, measurement_result_Ack.measurement_result); |
| | | sm.Set_Value(Vision_Address.Measurement_Left_Mark_1_Point_1, measurement_result_Ack.Mark1Width); |
| | | sm.Set_Value(Vision_Address.Measurement_Left_Mark_2_Point_1, measurement_result_Ack.Mark2Width); |
| | | sm.Set_Value(Vision_Address.Measurement_Left_Mark_3_Point_1, measurement_result_Ack.Mark3Width); |
| | | sm.Set_Value(Vision_Address.Measurement_Left_Mark_4_Point_1, measurement_result_Ack.Mark4Width); |
| | | sm.Set_Bit(Vision_Address.Measurement_Left_Ack, true); |
| | | } |
| | | break; |
| | |
| | | vision_control.Recv_WidthMeasurement_Result(Recvdata, out measurement_result_Ack); |
| | | if (measurement_result_Ack.moduleIdx == (int)En_Module_Idx.Right) |
| | | { |
| | | WriteClientLog($"[Recv]Width Measurement Right Result, Result : {measurement_result_Ack.measurement_result}, Mark1Width : {measurement_result_Ack.Mark1Width}, Mark2Width : {measurement_result_Ack.Mark2Width}, Mark3Width : {measurement_result_Ack.Mark3Width}, Mark4Width : {measurement_result_Ack.Mark4Width}"); |
| | | WriteClientLog($"[Recv]Width Measurement Right Result, Result : {measurement_result_Ack.measurement_result}, Mark1Width : {measurement_result_Ack.Mark1Width}, Mark2Width : {measurement_result_Ack.Mark2Width}"); |
| | | sm.Set_Value(Vision_Address.Measurement_Right_Result, measurement_result_Ack.measurement_result); |
| | | sm.Set_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, measurement_result_Ack.Mark1Width); |
| | | sm.Set_Value(Vision_Address.Measurement_Right_Mark_2_Point_1, measurement_result_Ack.Mark2Width); |
| | | sm.Set_Value(Vision_Address.Measurement_Right_Mark_3_Point_1, measurement_result_Ack.Mark3Width); |
| | | sm.Set_Value(Vision_Address.Measurement_Right_Mark_4_Point_1, measurement_result_Ack.Mark4Width); |
| | | sm.Set_Bit(Vision_Address.Measurement_Right_Ack, true); |
| | | } |
| | | break; |
| | |
| | | byte[] MeasureResult = new byte[4]; //0 : Fail, 1 : Success |
| | | byte[] Mark1Width = new byte[8]; //Mark1의 넓이 |
| | | byte[] Mark2Width = new byte[8]; //Mark2의 넓이 |
| | | byte[] Mark3Width = new byte[8]; //Mark3의 넓이 |
| | | byte[] Mark4Width = new byte[8]; //Mark4의 넓이 |
| | | |
| | | int copylength = 0; |
| | | Array.Copy(Recvdata, size, size.Length); |
| | |
| | | copylength += Mark1Width.Length; |
| | | Array.Copy(Recvdata, copylength, Mark2Width, 0, Mark2Width.Length); |
| | | copylength += Mark2Width.Length; |
| | | Array.Copy(Recvdata, copylength, Mark3Width, 0, Mark3Width.Length); |
| | | copylength += Mark3Width.Length; |
| | | Array.Copy(Recvdata, copylength, Mark4Width, 0, Mark4Width.Length); |
| | | copylength += Mark4Width.Length; |
| | | |
| | | int Result_MsgIndex = BitConverter.ToInt32(MsgIndex, 0); |
| | | int Result_ModuleIdx = BitConverter.ToInt32(ModuleIdx, 0); |
| | | int Result_MeasureResult = BitConverter.ToInt32(MeasureResult, 0); |
| | | double Result_Mark1Width = BitConverter.ToDouble(Mark1Width, 0); |
| | | double Result_Mark2Width = BitConverter.ToDouble(Mark2Width, 0); |
| | | double Result_Mark3Width = BitConverter.ToDouble(Mark3Width, 0); |
| | | double Result_Mark4Width = BitConverter.ToDouble(Mark4Width, 0); |
| | | |
| | | Ack = new WidthMeasurementResultAck(Result_MsgIndex, Result_ModuleIdx, Result_MeasureResult, Result_Mark1Width, Result_Mark2Width, Result_Mark3Width, Result_Mark4Width); |
| | | Ack = new WidthMeasurementResultAck(Result_MsgIndex, Result_ModuleIdx, Result_MeasureResult, Result_Mark1Width, Result_Mark2Width); |
| | | } |
| | | |
| | | public void Recv_Fine_Align_Result(byte[] Recvdata, out FineAlignResultAck Ack) |
| | |
| | | Pre_Align, |
| | | Fine_Align, |
| | | Measurement, |
| | | MeasurementWidth, |
| | | } |
| | | |
| | | public enum En_Module_Idx : int |
| | |
| | | public int measurement_result { get; private set; } |
| | | public double Mark1Width { get; private set; } |
| | | public double Mark2Width { get; private set; } |
| | | public double Mark3Width { get; private set; } |
| | | public double Mark4Width { get; private set; } |
| | | |
| | | public WidthMeasurementResultAck(int msg_Index = 0, int moduleIdx = 0, int measurement_result = 0, double mark1Width = 0, double mark2Width = 0, double mark3Width = 0, double mark4Width = 0) |
| | | public WidthMeasurementResultAck(int msg_Index = 0, int moduleIdx = 0, int measurement_result = 0, double mark1Width = 0, double mark2Width = 0) |
| | | { |
| | | this.msg_Index = msg_Index; |
| | | this.moduleIdx = moduleIdx; |
| | | this.measurement_result = measurement_result; |
| | | this.Mark1Width = mark1Width; |
| | | this.Mark2Width = mark2Width; |
| | | this.Mark3Width = mark3Width; |
| | | this.Mark4Width = mark4Width; |
| | | } |
| | | } |
| | | |
| | |
| | | public DateTime Start_Time { get; set; } |
| | | |
| | | public DateTime End_Time { get; set; } |
| | | |
| | | #endregion |
| | | |
| | | #region Construct |
| | |
| | | info.Mark3Point2 = this.Mark3Point2; |
| | | info.Mark4Point1 = this.Mark4Point1; |
| | | info.Mark4Point2 = this.Mark4Point2; |
| | | info.WidthMeasurement_Ack = this.WidthMeasurement_Ack; |
| | | info.WidthMeasurement_Result = this.WidthMeasurement_Result; |
| | | info.Mark1Width = this.Mark1Width; |
| | | info.Mark2Width = this.Mark2Width; |
| | | info.Mark3Width = this.Mark3Width; |
| | | info.Mark4Width = this.Mark4Width; |
| | | info.Stage_Num = this.Stage_Num; |
| | | info.Start_Time = this.Start_Time; |
| | | info.End_Time = this.End_Time; |
| | |
| | | { |
| | | sequenceChangedTime.Start(); |
| | | |
| | | if (equipment.Cur_Main_Recipe.vision_info.AoiMark34Use) |
| | | { |
| | | Step = UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION; |
| | | } |
| | | else |
| | | { |
| | | Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK; |
| | | } |
| | | return; |
| | | } |
| | | |
| | |
| | | { |
| | | if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack)) |
| | | { |
| | | if (equipment.Cur_Main_Recipe.vision_info.AoiMark34Use) |
| | | { |
| | | Step = UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION; |
| | | } |
| | | else |
| | | { |
| | | Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK; |
| | | } |
| | | } |
| | | else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout) |
| | | { |
| | |
| | | info1.End_Time = DateTime.Now; |
| | | |
| | | equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_1_Point_1, out value); |
| | | info1.Mark1Point1 = double.Parse(value.ToString()); |
| | | info1.Mark1Width = double.Parse(value.ToString()); |
| | | equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_2_Point_1, out value); |
| | | info1.Mark2Point1 = double.Parse(value.ToString()); |
| | | equipment.sm.Get_Value(Vision_Address.Measurement_Left_Mark_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()); |
| | | 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()); |
| | | |
| | | aoistage.Panel1 = info1; |
| | | |
| | |
| | | |
| | | if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false) |
| | | { |
| | | if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Align_Result)) |
| | | { |
| | | info2.WidthMeasurement_Ack = true; |
| | | |
| | | if (equipment.sm.Get_Bit(Vision_Address.Measurement_Right_Result, out result)) |
| | | { |
| | | info2.Measurement_Result = result; |
| | | info2.WidthMeasurement_Result = result; |
| | | |
| | | info2.End_Time = DateTime.Now; |
| | | |
| | | equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, out value); |
| | | info2.Mark1Point1 = double.Parse(value.ToString()); |
| | | info2.Mark1Width = double.Parse(value.ToString()); |
| | | equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_2_Point_1, out value); |
| | | info2.Mark2Point1 = double.Parse(value.ToString()); |
| | | equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_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()); |
| | | 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()); |
| | | |
| | | aoistage.Panel2 = info2; |
| | | |
| | |
| | | else |
| | | { |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | equipment.Aoi_vision.Send_Measurement_Command_Req(2, 1, info2.Tray_Num, info2.Panel_Num, info2.Panel_ID); |
| | | } |
| | | |
| | | Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK; |
| | | if (equipment.cim_mode == En_Cim_Mode.Online) |
| | | { |
| | | Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND; |
| | | } |
| | | else |
| | | { |
| | | Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END; |
| | | } |
| | | } |
| | | break; |
| | | } |