SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Client_AOI.cs
@@ -354,6 +354,12 @@
                                        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;
                                }
@@ -388,6 +394,12 @@
                                            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)
                                    {
@@ -412,6 +424,12 @@
                                        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);
                                        }
@@ -616,6 +634,39 @@
                                    sm.Set_Value(Vision_Address.AOI_PC_System_Time_Sync_Result, system_time_sync_Ack.result);
                                    break;
                                }
                            case 301:
                                {
                                    WidthMeasurementResultAck measurement_result_Ack;
                                    vision_control.Recv_WidthMeasurement_Result(Recvdata, out measurement_result_Ack);
                                    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}");
                                        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;
                                }
                            case 302:
                                {
                                    WidthMeasurementResultAck measurement_result_Ack;
                                    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}");
                                        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;
                                }
                            case 100:
                                {
                                    VisionAliveAck vision_alive_Ack;
@@ -732,7 +783,7 @@
        /// Send Grab Start Req
        /// </summary>
        /// <param name="ModelIdx">카메라 Module Idx (0: Left, 1: Right)</param>
        /// <param name="MarkIdx">마크 위치 (0:Left, 1: Right)</param>
        /// <param name="MarkIdx">마크 위치 (0:Left, 1:Left, 2:Right, 3:Right)</param>
        /// <param name="MotorOffsetX">현재 Motor Position X</param>
        /// <param name="MotorOffsetY">현재 Motor Position Y</param>
        public bool Send_Measurement_Grab_Start_Req(int ModelIdx, int MarkIdx, double MotorOffsetX, double MotorOffsetY)
@@ -768,6 +819,55 @@
            return SendData(vision_control.Send_Command_Req(CmdType, SeqType, ModuleIdx, Slot_No, PnlIdx, PanelID));
        }
        /// <summary>
        ///  Send Grab Ready Req
        /// </summary>
        /// <param name="SeqType">물류 Sequence Type</param>
        /// <param name="ModuleIdx">카메라 Module Idx (0: Left, 1: Right)</param>
        /// <param name="GrabDir">단축 Grab(Default), 1: 단축 Grab</param>
        /// <param name="PnlDir">0: 단면 물류 흐름 방향, 1: 장면 물류 흐름 방향</param>
        /// <param name="StageNo">현재 검사를 위한 Panel이 로딩된 Stage 번호</param>
        /// <param name="SlotNo">Tray Slot 번호</param>
        /// <param name="PnlIdx">Tray 내 Panel이 위치한 Idx 번호</param>
        /// <param name="PanelID">Panel을 식별하기위한 ID (*없는 경우 NULL)</param>
        public bool Send_WidthMeasurement_Grab_Ready_Req(int ModuleIdx, int GrabDir, int PnlDir, int StageNo, int SlotNo, int PnlIdx, string PanelID)
        {
            int SeqType = 4;
            sm.Set_Bit(Vision_Address.Measurement_Grab_Ready_Ack, false);
            if (ModuleIdx == 0)
                sm.Set_Bit(Vision_Address.Measurement_Left_Ack, false);
            else
                sm.Set_Bit(Vision_Address.Measurement_Right_Ack, false);
            WriteClientLog($"[Send]Measurement Grab Ready, ModuleIdx : {ModuleIdx}, GrabDir : {GrabDir}, PnlDir : {PnlDir}, StageNo : {StageNo}, SlotNo : {SlotNo}, PnlIdx : {PnlIdx}, PanelID : {PanelID}");
            return SendData(vision_control.Send_Grab_Ready_Req(SeqType, ModuleIdx, GrabDir, PnlDir, StageNo, SlotNo, PnlIdx, PanelID));
        }
        /// <summary>
        /// Send Grab Start Req
        /// </summary>
        /// <param name="ModelIdx">카메라 Module Idx (0: Left, 1: Right)</param>
        /// <param name="MarkIdx">마크 위치 (0:Left, 1:Left, 2:Right, 3:Right)</param>
        /// <param name="MotorOffsetX">현재 Motor Position X</param>
        /// <param name="MotorOffsetY">현재 Motor Position Y</param>
        public bool Send_WidthMeasurement_Grab_Start_Req(int ModelIdx, int MarkIdx, double MotorOffsetX, double MotorOffsetY)
        {
            int SeqType = 4;
            if (ModelIdx == 0)
                sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack, false);
            else
                sm.Set_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack, false);
            WriteClientLog($"[Send]Measurement Grab Start, ModelIdx : {ModelIdx}, MarkIdx : {MarkIdx}, MotorOffsetX : {MotorOffsetX}, MotorOffsetY : {MotorOffsetY}");
            return SendData(vision_control.Send_Grab_Start_Req(SeqType, ModelIdx, MarkIdx, MotorOffsetX, MotorOffsetY));
        }
        /// <summary>
        /// Send Motor Pos Move Ack
        /// </summary>