| | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | /// 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) |
| | |
| | | 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> |