검사 개조, Measurement 후 Width 검사 추가.
Recipe 위치 좌표 추가, 검사 Parameter 추가.
18개 파일 변경됨
1711 ■■■■ 파일 변경됨
SHARP_CLAS_UI/100.Screen/Form_Main.cs 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/100.Screen/Form_Parameter_System.Designer.cs 249 ●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/100.Screen/Form_Parameter_System.cs 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.Designer.cs 236 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.cs 58 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/100.Memory_Address/Memory_Address.cs 4 ●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Client_AOI.cs 84 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Control.cs 43 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Define.cs 22 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/400.Module/300.CIM/CIM_Client.cs 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/500.Recipe/200.Vision_Info/Vision_Info_Recipe.cs 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/600.Info/000.Panel_Info/Panel_Info.cs 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Mode.cs 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Setting.cs 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/700.Unit/300.After/AoiStage.cs 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs 850 ●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/700.Unit/Base/Handler.cs 58 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/500.Equipment/Equipment.cs 19 ●●●●● 패치 | 보기 | raw | blame | 히스토리
SHARP_CLAS_UI/100.Screen/Form_Main.cs
@@ -22,6 +22,7 @@
        public int ULD_Tray_Empty_Count;
        public int ULD_Tray_Ok_Count;
        public int ULD_Tray_Ng_Count;
        public int Width_Measurement_Count;
        
        bool update_check;
        #endregion
@@ -438,6 +439,8 @@
                    ULD_Tray_Ok_Count = int.Parse($"{value}");
                if (_Parent.sm.Get_Value(Process_Memory_Address.ULD_Tray_Ng_Count, out value))
                    ULD_Tray_Ng_Count = int.Parse($"{value}");
                if (_Parent.sm.Get_Value(Process_Memory_Address.Width_Measurement_Count, out value))
                    Width_Measurement_Count = int.Parse($"{value}");
            }
            catch (Exception)
            {
SHARP_CLAS_UI/100.Screen/Form_Parameter_System.Designer.cs
@@ -31,6 +31,10 @@
            this.label1 = new System.Windows.Forms.Label();
            this.pnl_Mode = new System.Windows.Forms.Panel();
            this.panel16 = new System.Windows.Forms.Panel();
            this.panel64 = new System.Windows.Forms.Panel();
            this.btn_Width_Measurement_Notuse = new System.Windows.Forms.Button();
            this.btn_Width_Measurement_Use = new System.Windows.Forms.Button();
            this.label28 = new System.Windows.Forms.Label();
            this.panel6 = new System.Windows.Forms.Panel();
            this.btn_Auto_Power_Notuse = new System.Windows.Forms.Button();
            this.btn_Auto_Power_Use = new System.Windows.Forms.Button();
@@ -108,6 +112,16 @@
            this.lb_AGV = new System.Windows.Forms.Label();
            this.lb_Mode = new System.Windows.Forms.Label();
            this.pnl_Setting = new System.Windows.Forms.Panel();
            this.panel62 = new System.Windows.Forms.Panel();
            this.label26 = new System.Windows.Forms.Label();
            this.panel63 = new System.Windows.Forms.Panel();
            this.tb_Width_Measurement_Count = new System.Windows.Forms.TextBox();
            this.label27 = new System.Windows.Forms.Label();
            this.panel60 = new System.Windows.Forms.Panel();
            this.label24 = new System.Windows.Forms.Label();
            this.panel61 = new System.Windows.Forms.Panel();
            this.tb_Cleaning_Count = new System.Windows.Forms.TextBox();
            this.label25 = new System.Windows.Forms.Label();
            this.panel58 = new System.Windows.Forms.Panel();
            this.label22 = new System.Windows.Forms.Label();
            this.panel59 = new System.Windows.Forms.Panel();
@@ -224,13 +238,9 @@
            this.tb_Vision_Connect_Time = new System.Windows.Forms.TextBox();
            this.lb_Vision_Connect_Time = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.panel60 = new System.Windows.Forms.Panel();
            this.label24 = new System.Windows.Forms.Label();
            this.panel61 = new System.Windows.Forms.Panel();
            this.tb_Cleaning_Count = new System.Windows.Forms.TextBox();
            this.label25 = new System.Windows.Forms.Label();
            this.pnl_Mode.SuspendLayout();
            this.panel16.SuspendLayout();
            this.panel64.SuspendLayout();
            this.panel6.SuspendLayout();
            this.panel38.SuspendLayout();
            this.panel37.SuspendLayout();
@@ -250,6 +260,10 @@
            this.panel15.SuspendLayout();
            this.panel14.SuspendLayout();
            this.pnl_Setting.SuspendLayout();
            this.panel62.SuspendLayout();
            this.panel63.SuspendLayout();
            this.panel60.SuspendLayout();
            this.panel61.SuspendLayout();
            this.panel58.SuspendLayout();
            this.panel59.SuspendLayout();
            this.panel51.SuspendLayout();
@@ -291,8 +305,6 @@
            this.panel1.SuspendLayout();
            this.panel3.SuspendLayout();
            this.panel4.SuspendLayout();
            this.panel60.SuspendLayout();
            this.panel61.SuspendLayout();
            this.SuspendLayout();
            // 
            // label1
@@ -320,6 +332,7 @@
            // panel16
            // 
            this.panel16.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.panel16.Controls.Add(this.panel64);
            this.panel16.Controls.Add(this.panel6);
            this.panel16.Controls.Add(this.panel38);
            this.panel16.Controls.Add(this.panel37);
@@ -345,6 +358,52 @@
            this.panel16.Name = "panel16";
            this.panel16.Size = new System.Drawing.Size(870, 791);
            this.panel16.TabIndex = 35;
            //
            // panel64
            //
            this.panel64.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.panel64.Controls.Add(this.btn_Width_Measurement_Notuse);
            this.panel64.Controls.Add(this.btn_Width_Measurement_Use);
            this.panel64.Controls.Add(this.label28);
            this.panel64.Location = new System.Drawing.Point(660, 268);
            this.panel64.Name = "panel64";
            this.panel64.Size = new System.Drawing.Size(205, 51);
            this.panel64.TabIndex = 63;
            //
            // btn_Width_Measurement_Notuse
            //
            this.btn_Width_Measurement_Notuse.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.btn_Width_Measurement_Notuse.Location = new System.Drawing.Point(104, 25);
            this.btn_Width_Measurement_Notuse.Name = "btn_Width_Measurement_Notuse";
            this.btn_Width_Measurement_Notuse.Size = new System.Drawing.Size(95, 21);
            this.btn_Width_Measurement_Notuse.TabIndex = 43;
            this.btn_Width_Measurement_Notuse.Text = "NOT USE";
            this.btn_Width_Measurement_Notuse.UseVisualStyleBackColor = true;
            this.btn_Width_Measurement_Notuse.Click += new System.EventHandler(this.btn_Skip_Mode_Click);
            //
            // btn_Width_Measurement_Use
            //
            this.btn_Width_Measurement_Use.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.btn_Width_Measurement_Use.Location = new System.Drawing.Point(3, 25);
            this.btn_Width_Measurement_Use.Name = "btn_Width_Measurement_Use";
            this.btn_Width_Measurement_Use.Size = new System.Drawing.Size(95, 21);
            this.btn_Width_Measurement_Use.TabIndex = 42;
            this.btn_Width_Measurement_Use.Text = "USE";
            this.btn_Width_Measurement_Use.UseVisualStyleBackColor = true;
            this.btn_Width_Measurement_Use.Click += new System.EventHandler(this.btn_Skip_Mode_Click);
            //
            // label28
            //
            this.label28.BackColor = System.Drawing.Color.Silver;
            this.label28.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label28.Dock = System.Windows.Forms.DockStyle.Top;
            this.label28.Font = new System.Drawing.Font("Gulim", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
            this.label28.Location = new System.Drawing.Point(0, 0);
            this.label28.Name = "label28";
            this.label28.Size = new System.Drawing.Size(203, 22);
            this.label28.TabIndex = 41;
            this.label28.Text = "WIDTH MEASUREMENT";
            this.label28.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // panel6
            // 
@@ -1225,6 +1284,7 @@
            // 
            this.pnl_Setting.BackColor = System.Drawing.Color.White;
            this.pnl_Setting.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.pnl_Setting.Controls.Add(this.panel62);
            this.pnl_Setting.Controls.Add(this.panel60);
            this.pnl_Setting.Controls.Add(this.panel58);
            this.pnl_Setting.Controls.Add(this.panel51);
@@ -1244,6 +1304,110 @@
            this.pnl_Setting.Name = "pnl_Setting";
            this.pnl_Setting.Size = new System.Drawing.Size(880, 850);
            this.pnl_Setting.TabIndex = 5;
            //
            // panel62
            //
            this.panel62.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.panel62.Controls.Add(this.label26);
            this.panel62.Controls.Add(this.panel63);
            this.panel62.Location = new System.Drawing.Point(439, 529);
            this.panel62.Name = "panel62";
            this.panel62.Size = new System.Drawing.Size(417, 51);
            this.panel62.TabIndex = 61;
            //
            // label26
            //
            this.label26.BackColor = System.Drawing.Color.Silver;
            this.label26.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label26.Dock = System.Windows.Forms.DockStyle.Top;
            this.label26.Location = new System.Drawing.Point(0, 0);
            this.label26.Name = "label26";
            this.label26.Size = new System.Drawing.Size(415, 20);
            this.label26.TabIndex = 35;
            this.label26.Text = "Width Measurement Count";
            this.label26.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // panel63
            //
            this.panel63.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.panel63.Controls.Add(this.tb_Width_Measurement_Count);
            this.panel63.Controls.Add(this.label27);
            this.panel63.Location = new System.Drawing.Point(3, 23);
            this.panel63.Name = "panel63";
            this.panel63.Size = new System.Drawing.Size(407, 21);
            this.panel63.TabIndex = 42;
            //
            // tb_Width_Measurement_Count
            //
            this.tb_Width_Measurement_Count.Location = new System.Drawing.Point(231, -1);
            this.tb_Width_Measurement_Count.Name = "tb_Width_Measurement_Count";
            this.tb_Width_Measurement_Count.Size = new System.Drawing.Size(175, 21);
            this.tb_Width_Measurement_Count.TabIndex = 34;
            this.tb_Width_Measurement_Count.Text = "0";
            this.tb_Width_Measurement_Count.KeyDown += new System.Windows.Forms.KeyEventHandler(this.SettingData_KeyDown);
            this.tb_Width_Measurement_Count.Leave += new System.EventHandler(this.SettingData_Leave);
            //
            // label27
            //
            this.label27.Dock = System.Windows.Forms.DockStyle.Left;
            this.label27.Location = new System.Drawing.Point(0, 0);
            this.label27.Name = "label27";
            this.label27.Size = new System.Drawing.Size(227, 19);
            this.label27.TabIndex = 33;
            this.label27.Text = "Width Measurement Count";
            this.label27.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // panel60
            //
            this.panel60.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.panel60.Controls.Add(this.label24);
            this.panel60.Controls.Add(this.panel61);
            this.panel60.Location = new System.Drawing.Point(440, 472);
            this.panel60.Name = "panel60";
            this.panel60.Size = new System.Drawing.Size(417, 51);
            this.panel60.TabIndex = 61;
            //
            // label24
            //
            this.label24.BackColor = System.Drawing.Color.Silver;
            this.label24.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label24.Dock = System.Windows.Forms.DockStyle.Top;
            this.label24.Location = new System.Drawing.Point(0, 0);
            this.label24.Name = "label24";
            this.label24.Size = new System.Drawing.Size(415, 20);
            this.label24.TabIndex = 35;
            this.label24.Text = "Cleaning Count Parameter";
            this.label24.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // panel61
            //
            this.panel61.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.panel61.Controls.Add(this.tb_Cleaning_Count);
            this.panel61.Controls.Add(this.label25);
            this.panel61.Location = new System.Drawing.Point(3, 23);
            this.panel61.Name = "panel61";
            this.panel61.Size = new System.Drawing.Size(407, 21);
            this.panel61.TabIndex = 42;
            //
            // tb_Cleaning_Count
            //
            this.tb_Cleaning_Count.Location = new System.Drawing.Point(231, -1);
            this.tb_Cleaning_Count.Name = "tb_Cleaning_Count";
            this.tb_Cleaning_Count.Size = new System.Drawing.Size(175, 21);
            this.tb_Cleaning_Count.TabIndex = 34;
            this.tb_Cleaning_Count.Text = "0";
            this.tb_Cleaning_Count.KeyDown += new System.Windows.Forms.KeyEventHandler(this.SettingData_KeyDown);
            this.tb_Cleaning_Count.Leave += new System.EventHandler(this.SettingData_Leave);
            //
            // label25
            //
            this.label25.Dock = System.Windows.Forms.DockStyle.Left;
            this.label25.Location = new System.Drawing.Point(0, 0);
            this.label25.Name = "label25";
            this.label25.Size = new System.Drawing.Size(227, 19);
            this.label25.TabIndex = 33;
            this.label25.Text = "Cleaning Count";
            this.label25.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // panel58
            // 
@@ -2450,58 +2614,6 @@
            this.label2.Text = "■ Setting";
            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // panel60
            //
            this.panel60.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.panel60.Controls.Add(this.label24);
            this.panel60.Controls.Add(this.panel61);
            this.panel60.Location = new System.Drawing.Point(440, 472);
            this.panel60.Name = "panel60";
            this.panel60.Size = new System.Drawing.Size(417, 51);
            this.panel60.TabIndex = 61;
            //
            // label24
            //
            this.label24.BackColor = System.Drawing.Color.Silver;
            this.label24.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label24.Dock = System.Windows.Forms.DockStyle.Top;
            this.label24.Location = new System.Drawing.Point(0, 0);
            this.label24.Name = "label24";
            this.label24.Size = new System.Drawing.Size(415, 20);
            this.label24.TabIndex = 35;
            this.label24.Text = "Cleaning Count Parameter";
            this.label24.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // panel61
            //
            this.panel61.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.panel61.Controls.Add(this.tb_Cleaning_Count);
            this.panel61.Controls.Add(this.label25);
            this.panel61.Location = new System.Drawing.Point(3, 23);
            this.panel61.Name = "panel61";
            this.panel61.Size = new System.Drawing.Size(407, 21);
            this.panel61.TabIndex = 42;
            //
            // tb_Cleaning_Count
            //
            this.tb_Cleaning_Count.Location = new System.Drawing.Point(231, -1);
            this.tb_Cleaning_Count.Name = "tb_Cleaning_Count";
            this.tb_Cleaning_Count.Size = new System.Drawing.Size(175, 21);
            this.tb_Cleaning_Count.TabIndex = 34;
            this.tb_Cleaning_Count.Text = "0";
            this.tb_Cleaning_Count.KeyDown += new System.Windows.Forms.KeyEventHandler(this.SettingData_KeyDown);
            this.tb_Cleaning_Count.Leave += new System.EventHandler(this.SettingData_Leave);
            //
            // label25
            //
            this.label25.Dock = System.Windows.Forms.DockStyle.Left;
            this.label25.Location = new System.Drawing.Point(0, 0);
            this.label25.Name = "label25";
            this.label25.Size = new System.Drawing.Size(227, 19);
            this.label25.TabIndex = 33;
            this.label25.Text = "Cleaning Count";
            this.label25.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // Form_Parameter_System
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
@@ -2515,6 +2627,7 @@
            this.Text = "Form_System_Parameter";
            this.pnl_Mode.ResumeLayout(false);
            this.panel16.ResumeLayout(false);
            this.panel64.ResumeLayout(false);
            this.panel6.ResumeLayout(false);
            this.panel38.ResumeLayout(false);
            this.panel37.ResumeLayout(false);
@@ -2534,6 +2647,12 @@
            this.panel15.ResumeLayout(false);
            this.panel14.ResumeLayout(false);
            this.pnl_Setting.ResumeLayout(false);
            this.panel62.ResumeLayout(false);
            this.panel63.ResumeLayout(false);
            this.panel63.PerformLayout();
            this.panel60.ResumeLayout(false);
            this.panel61.ResumeLayout(false);
            this.panel61.PerformLayout();
            this.panel58.ResumeLayout(false);
            this.panel59.ResumeLayout(false);
            this.panel59.PerformLayout();
@@ -2606,9 +2725,6 @@
            this.panel3.PerformLayout();
            this.panel4.ResumeLayout(false);
            this.panel4.PerformLayout();
            this.panel60.ResumeLayout(false);
            this.panel61.ResumeLayout(false);
            this.panel61.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();
@@ -2817,5 +2933,14 @@
        private System.Windows.Forms.Panel panel61;
        private System.Windows.Forms.TextBox tb_Cleaning_Count;
        private System.Windows.Forms.Label label25;
        private System.Windows.Forms.Panel panel62;
        private System.Windows.Forms.Label label26;
        private System.Windows.Forms.Panel panel63;
        private System.Windows.Forms.TextBox tb_Width_Measurement_Count;
        private System.Windows.Forms.Label label27;
        private System.Windows.Forms.Panel panel64;
        private System.Windows.Forms.Button btn_Width_Measurement_Notuse;
        private System.Windows.Forms.Button btn_Width_Measurement_Use;
        private System.Windows.Forms.Label label28;
    }
}
SHARP_CLAS_UI/100.Screen/Form_Parameter_System.cs
@@ -178,6 +178,15 @@
                mode.Plasma_Skip = true;
            }
            if(btn_Width_Measurement_Use == (Button)sender)
            {
                mode.Width_Measurement_Skip = false;
            }
            else if (btn_Width_Measurement_Notuse == (Button)sender)
            {
                mode.Width_Measurement_Skip = true;
            }
            if (btn_LD_Stacker_Use == (Button)sender)
            {
                mode.LD_Stacker_Skip = false;
@@ -337,6 +346,9 @@
                btn_Plasma_Use.Text = resLanguage.USE;
                btn_Plasma_Notuse.Text = resLanguage.NOT_USE;
                btn_Width_Measurement_Use.Text = resLanguage.USE;
                btn_Width_Measurement_Notuse.Text = resLanguage.NOT_USE;
                btn_LD_Stacker_Use.Text = resLanguage.USE;
                btn_LD_Stacker_Notuse.Text = resLanguage.NOT_USE;
@@ -499,6 +511,9 @@
            btn_Plasma_Use.BackColor = !mode.Plasma_Skip ? mod.Plasma_Skip == mode.Plasma_Skip ? System.Drawing.Color.DodgerBlue : System.Drawing.Color.Red : System.Drawing.Color.White;
            btn_Plasma_Notuse.BackColor = mode.Plasma_Skip ? mod.Plasma_Skip == mode.Plasma_Skip ? System.Drawing.Color.DodgerBlue : System.Drawing.Color.Red : System.Drawing.Color.White;
            btn_Width_Measurement_Use.BackColor = !mode.Width_Measurement_Skip ? mod.Width_Measurement_Skip == mode.Width_Measurement_Skip ? System.Drawing.Color.DodgerBlue : System.Drawing.Color.Red : System.Drawing.Color.White;
            btn_Width_Measurement_Notuse.BackColor = mode.Width_Measurement_Skip ? mod.Width_Measurement_Skip == mode.Width_Measurement_Skip ? System.Drawing.Color.DodgerBlue : System.Drawing.Color.Red : System.Drawing.Color.White;
            btn_LD_Stacker_Use.BackColor = !mode.LD_Stacker_Skip ? mod.LD_Stacker_Skip == mode.LD_Stacker_Skip ? System.Drawing.Color.DodgerBlue : System.Drawing.Color.Red : System.Drawing.Color.White;
            btn_LD_Stacker_Notuse.BackColor = mode.LD_Stacker_Skip ? mod.LD_Stacker_Skip == mode.LD_Stacker_Skip ? System.Drawing.Color.DodgerBlue : System.Drawing.Color.Red : System.Drawing.Color.White;
@@ -660,6 +675,12 @@
                tb_Cleaning_Count.Text = setting.Cleaning_Count.ToString();
            }
            if (ActiveControl == null || ActiveControl.Name != "tb_Width_Measurement_Count")
            {
                tb_Width_Measurement_Count.Text = setting.Width_Measurement_Count.ToString();
            }
            tb_Film_Judge_Speed.BackColor = setting.Film_Judge_Speed == set.Film_Judge_Speed ? System.Drawing.Color.White : System.Drawing.Color.Red;
            tb_Pre_Align_Speed.BackColor = setting.Pre_Align_Speed == set.Pre_Align_Speed ? System.Drawing.Color.White : System.Drawing.Color.Red;
            tb_Fine_Align_Speed.BackColor = setting.Fine_Align_Speed == set.Fine_Align_Speed ? System.Drawing.Color.White : System.Drawing.Color.Red;
@@ -693,7 +714,9 @@
            tb_Handler_Pitch.BackColor = setting.Handler_Pitch == set.Handler_Pitch ? System.Drawing.Color.White : System.Drawing.Color.Red;
            tb_Cleaning_Count.BackColor = setting.Cleaning_Count == set.Cleaning_Count ? System.Drawing.Color.White : System.Drawing.Color.Red;
            tb_Width_Measurement_Count.BackColor = setting.Width_Measurement_Count == set.Width_Measurement_Count ? System.Drawing.Color.White : System.Drawing.Color.Red;
        }
        #endregion
        private void tb_Film_Judge_Speed_Leave(object sender, EventArgs e)
@@ -1095,6 +1118,19 @@
                        break;
                    }
                case "tb_Width_Measurement_Count":
                    {
                        int.TryParse(tb.Text, out int_data);
                        if (int_data < 0)
                        {
                            int_data = 0;
                        }
                        setting.Width_Measurement_Count = int_data;
                        break;
                    }
            }
        }
    }
SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.Designer.cs
@@ -180,6 +180,7 @@
            this.pnl_Vision_Info_Recipe = new System.Windows.Forms.Panel();
            this.tabControl3 = new System.Windows.Forms.TabControl();
            this.tabPage3 = new System.Windows.Forms.TabPage();
            this.cb_AoiMark34Use = new System.Windows.Forms.CheckBox();
            this.lb_Aoi_measurement = new System.Windows.Forms.Label();
            this.tb_AOI_Mark3_X = new System.Windows.Forms.TextBox();
            this.tb_AOI_Mark3_Y = new System.Windows.Forms.TextBox();
@@ -278,7 +279,22 @@
            this.lv_Vision_Info_Recipes = new System.Windows.Forms.ListView();
            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
            this.btn_Vision_Info_Refresh = new System.Windows.Forms.Button();
            this.cb_AoiMark34Use = new System.Windows.Forms.CheckBox();
            this.tabPage6 = new System.Windows.Forms.TabPage();
            this.label11 = new System.Windows.Forms.Label();
            this.tb_Width_AOI_Mark3_X = new System.Windows.Forms.TextBox();
            this.tb_Width_AOI_Mark1_X = new System.Windows.Forms.TextBox();
            this.tb_Width_AOI_Mark3_Y = new System.Windows.Forms.TextBox();
            this.tb_Width_AOI_Mark1_Y = new System.Windows.Forms.TextBox();
            this.label12 = new System.Windows.Forms.Label();
            this.label13 = new System.Windows.Forms.Label();
            this.tb_Width_AOI_Mark4_X = new System.Windows.Forms.TextBox();
            this.tb_Width_AOI_Mark4_Y = new System.Windows.Forms.TextBox();
            this.tb_Width_AOI_Mark2_X = new System.Windows.Forms.TextBox();
            this.label14 = new System.Windows.Forms.Label();
            this.tb_Width_AOI_Mark2_Y = new System.Windows.Forms.TextBox();
            this.label15 = new System.Windows.Forms.Label();
            this.label16 = new System.Windows.Forms.Label();
            this.label17 = new System.Windows.Forms.Label();
            this.pnl_Tray_Info_Recipe.SuspendLayout();
            this.panel5.SuspendLayout();
            this.panel4.SuspendLayout();
@@ -302,6 +318,7 @@
            this.tabControl1.SuspendLayout();
            this.tab_PreAlignOffset.SuspendLayout();
            this.tab_LoaderHandler1Position.SuspendLayout();
            this.tabPage6.SuspendLayout();
            this.SuspendLayout();
            // 
            // pnl_Tray_Info_Recipe
@@ -2014,6 +2031,7 @@
            // tabControl3
            // 
            this.tabControl3.Controls.Add(this.tabPage3);
            this.tabControl3.Controls.Add(this.tabPage6);
            this.tabControl3.Controls.Add(this.tabPage4);
            this.tabControl3.Location = new System.Drawing.Point(3, 435);
            this.tabControl3.Name = "tabControl3";
@@ -2046,6 +2064,17 @@
            this.tabPage3.TabIndex = 0;
            this.tabPage3.Text = "AOI Position";
            this.tabPage3.UseVisualStyleBackColor = true;
            //
            // cb_AoiMark34Use
            //
            this.cb_AoiMark34Use.AutoSize = true;
            this.cb_AoiMark34Use.Location = new System.Drawing.Point(6, 138);
            this.cb_AoiMark34Use.Name = "cb_AoiMark34Use";
            this.cb_AoiMark34Use.Size = new System.Drawing.Size(94, 16);
            this.cb_AoiMark34Use.TabIndex = 200;
            this.cb_AoiMark34Use.Text = "Mark3,4 Use";
            this.cb_AoiMark34Use.UseVisualStyleBackColor = true;
            this.cb_AoiMark34Use.CheckedChanged += new System.EventHandler(this.cb_AoiMark34Use_CheckedChanged);
            // 
            // lb_Aoi_measurement
            // 
@@ -2154,7 +2183,7 @@
            this.tabPage4.Location = new System.Drawing.Point(4, 22);
            this.tabPage4.Name = "tabPage4";
            this.tabPage4.Padding = new System.Windows.Forms.Padding(3);
            this.tabPage4.Size = new System.Drawing.Size(442, 141);
            this.tabPage4.Size = new System.Drawing.Size(442, 166);
            this.tabPage4.TabIndex = 1;
            this.tabPage4.Text = "AOI Offset";
            this.tabPage4.UseVisualStyleBackColor = true;
@@ -3154,16 +3183,183 @@
            this.btn_Vision_Info_Refresh.UseVisualStyleBackColor = true;
            this.btn_Vision_Info_Refresh.Click += new System.EventHandler(this.btn_Vision_Info_Refresh_Click);
            // 
            // cb_AoiMark34Use
            // tabPage6
            // 
            this.cb_AoiMark34Use.AutoSize = true;
            this.cb_AoiMark34Use.Location = new System.Drawing.Point(6, 138);
            this.cb_AoiMark34Use.Name = "cb_AoiMark34Use";
            this.cb_AoiMark34Use.Size = new System.Drawing.Size(94, 16);
            this.cb_AoiMark34Use.TabIndex = 200;
            this.cb_AoiMark34Use.Text = "Mark3,4 Use";
            this.cb_AoiMark34Use.UseVisualStyleBackColor = true;
            this.cb_AoiMark34Use.CheckedChanged += new System.EventHandler(this.cb_AoiMark34Use_CheckedChanged);
            this.tabPage6.Controls.Add(this.label11);
            this.tabPage6.Controls.Add(this.tb_Width_AOI_Mark3_X);
            this.tabPage6.Controls.Add(this.tb_Width_AOI_Mark1_X);
            this.tabPage6.Controls.Add(this.tb_Width_AOI_Mark3_Y);
            this.tabPage6.Controls.Add(this.tb_Width_AOI_Mark1_Y);
            this.tabPage6.Controls.Add(this.label12);
            this.tabPage6.Controls.Add(this.label13);
            this.tabPage6.Controls.Add(this.tb_Width_AOI_Mark4_X);
            this.tabPage6.Controls.Add(this.tb_Width_AOI_Mark4_Y);
            this.tabPage6.Controls.Add(this.tb_Width_AOI_Mark2_X);
            this.tabPage6.Controls.Add(this.label14);
            this.tabPage6.Controls.Add(this.tb_Width_AOI_Mark2_Y);
            this.tabPage6.Controls.Add(this.label15);
            this.tabPage6.Controls.Add(this.label16);
            this.tabPage6.Controls.Add(this.label17);
            this.tabPage6.Location = new System.Drawing.Point(4, 22);
            this.tabPage6.Name = "tabPage6";
            this.tabPage6.Padding = new System.Windows.Forms.Padding(3);
            this.tabPage6.Size = new System.Drawing.Size(442, 166);
            this.tabPage6.TabIndex = 2;
            this.tabPage6.Text = "Width AOI Position";
            this.tabPage6.UseVisualStyleBackColor = true;
            //
            // label11
            //
            this.label11.BackColor = System.Drawing.Color.LightCoral;
            this.label11.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label11.Location = new System.Drawing.Point(3, 5);
            this.label11.Name = "label11";
            this.label11.Size = new System.Drawing.Size(167, 21);
            this.label11.TabIndex = 214;
            this.label11.Text = "AOI MEASUREMENT";
            this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // tb_Width_AOI_Mark3_X
            //
            this.tb_Width_AOI_Mark3_X.Location = new System.Drawing.Point(177, 84);
            this.tb_Width_AOI_Mark3_X.Name = "tb_Width_AOI_Mark3_X";
            this.tb_Width_AOI_Mark3_X.Size = new System.Drawing.Size(123, 21);
            this.tb_Width_AOI_Mark3_X.TabIndex = 200;
            this.tb_Width_AOI_Mark3_X.Text = "0";
            this.tb_Width_AOI_Mark3_X.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.tb_Width_AOI_Mark3_X.TextChanged += new System.EventHandler(this.tb_Vision_Info_Recipe_TextChanged);
            //
            // tb_Width_AOI_Mark1_X
            //
            this.tb_Width_AOI_Mark1_X.Location = new System.Drawing.Point(177, 29);
            this.tb_Width_AOI_Mark1_X.Name = "tb_Width_AOI_Mark1_X";
            this.tb_Width_AOI_Mark1_X.Size = new System.Drawing.Size(123, 21);
            this.tb_Width_AOI_Mark1_X.TabIndex = 201;
            this.tb_Width_AOI_Mark1_X.Text = "0";
            this.tb_Width_AOI_Mark1_X.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.tb_Width_AOI_Mark1_X.TextChanged += new System.EventHandler(this.tb_Vision_Info_Recipe_TextChanged);
            //
            // tb_Width_AOI_Mark3_Y
            //
            this.tb_Width_AOI_Mark3_Y.Location = new System.Drawing.Point(306, 84);
            this.tb_Width_AOI_Mark3_Y.Name = "tb_Width_AOI_Mark3_Y";
            this.tb_Width_AOI_Mark3_Y.Size = new System.Drawing.Size(123, 21);
            this.tb_Width_AOI_Mark3_Y.TabIndex = 202;
            this.tb_Width_AOI_Mark3_Y.Text = "0";
            this.tb_Width_AOI_Mark3_Y.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.tb_Width_AOI_Mark3_Y.TextChanged += new System.EventHandler(this.tb_Vision_Info_Recipe_TextChanged);
            //
            // tb_Width_AOI_Mark1_Y
            //
            this.tb_Width_AOI_Mark1_Y.Location = new System.Drawing.Point(306, 29);
            this.tb_Width_AOI_Mark1_Y.Name = "tb_Width_AOI_Mark1_Y";
            this.tb_Width_AOI_Mark1_Y.Size = new System.Drawing.Size(123, 21);
            this.tb_Width_AOI_Mark1_Y.TabIndex = 203;
            this.tb_Width_AOI_Mark1_Y.Text = "0";
            this.tb_Width_AOI_Mark1_Y.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.tb_Width_AOI_Mark1_Y.TextChanged += new System.EventHandler(this.tb_Vision_Info_Recipe_TextChanged);
            //
            // label12
            //
            this.label12.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label12.Location = new System.Drawing.Point(3, 84);
            this.label12.Name = "label12";
            this.label12.Size = new System.Drawing.Size(167, 21);
            this.label12.TabIndex = 204;
            this.label12.Text = "AOI MARK3 [mm]";
            this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // label13
            //
            this.label13.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label13.Location = new System.Drawing.Point(3, 29);
            this.label13.Name = "label13";
            this.label13.Size = new System.Drawing.Size(167, 21);
            this.label13.TabIndex = 205;
            this.label13.Text = "AOI MARK 1 [mm]";
            this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // tb_Width_AOI_Mark4_X
            //
            this.tb_Width_AOI_Mark4_X.Location = new System.Drawing.Point(177, 111);
            this.tb_Width_AOI_Mark4_X.Name = "tb_Width_AOI_Mark4_X";
            this.tb_Width_AOI_Mark4_X.Size = new System.Drawing.Size(123, 21);
            this.tb_Width_AOI_Mark4_X.TabIndex = 206;
            this.tb_Width_AOI_Mark4_X.Text = "0";
            this.tb_Width_AOI_Mark4_X.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.tb_Width_AOI_Mark4_X.TextChanged += new System.EventHandler(this.tb_Vision_Info_Recipe_TextChanged);
            //
            // tb_Width_AOI_Mark4_Y
            //
            this.tb_Width_AOI_Mark4_Y.Location = new System.Drawing.Point(306, 111);
            this.tb_Width_AOI_Mark4_Y.Name = "tb_Width_AOI_Mark4_Y";
            this.tb_Width_AOI_Mark4_Y.Size = new System.Drawing.Size(123, 21);
            this.tb_Width_AOI_Mark4_Y.TabIndex = 208;
            this.tb_Width_AOI_Mark4_Y.Text = "0";
            this.tb_Width_AOI_Mark4_Y.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.tb_Width_AOI_Mark4_Y.TextChanged += new System.EventHandler(this.tb_Vision_Info_Recipe_TextChanged);
            //
            // tb_Width_AOI_Mark2_X
            //
            this.tb_Width_AOI_Mark2_X.Location = new System.Drawing.Point(177, 56);
            this.tb_Width_AOI_Mark2_X.Name = "tb_Width_AOI_Mark2_X";
            this.tb_Width_AOI_Mark2_X.Size = new System.Drawing.Size(123, 21);
            this.tb_Width_AOI_Mark2_X.TabIndex = 207;
            this.tb_Width_AOI_Mark2_X.Text = "0";
            this.tb_Width_AOI_Mark2_X.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.tb_Width_AOI_Mark2_X.TextChanged += new System.EventHandler(this.tb_Vision_Info_Recipe_TextChanged);
            //
            // label14
            //
            this.label14.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label14.Location = new System.Drawing.Point(3, 111);
            this.label14.Name = "label14";
            this.label14.Size = new System.Drawing.Size(167, 21);
            this.label14.TabIndex = 210;
            this.label14.Text = "AOI MARK4 [mm]";
            this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // tb_Width_AOI_Mark2_Y
            //
            this.tb_Width_AOI_Mark2_Y.Location = new System.Drawing.Point(306, 56);
            this.tb_Width_AOI_Mark2_Y.Name = "tb_Width_AOI_Mark2_Y";
            this.tb_Width_AOI_Mark2_Y.Size = new System.Drawing.Size(123, 21);
            this.tb_Width_AOI_Mark2_Y.TabIndex = 209;
            this.tb_Width_AOI_Mark2_Y.Text = "0";
            this.tb_Width_AOI_Mark2_Y.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
            this.tb_Width_AOI_Mark2_Y.TextChanged += new System.EventHandler(this.tb_Vision_Info_Recipe_TextChanged);
            //
            // label15
            //
            this.label15.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label15.Location = new System.Drawing.Point(3, 56);
            this.label15.Name = "label15";
            this.label15.Size = new System.Drawing.Size(167, 21);
            this.label15.TabIndex = 211;
            this.label15.Text = "AOI MARK2 [mm]";
            this.label15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // label16
            //
            this.label16.BackColor = System.Drawing.Color.LightCoral;
            this.label16.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label16.Location = new System.Drawing.Point(306, 5);
            this.label16.Name = "label16";
            this.label16.Size = new System.Drawing.Size(123, 21);
            this.label16.TabIndex = 213;
            this.label16.Text = "ULD HANDLER 1 Y";
            this.label16.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // label17
            //
            this.label17.BackColor = System.Drawing.Color.LightCoral;
            this.label17.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.label17.Location = new System.Drawing.Point(177, 5);
            this.label17.Name = "label17";
            this.label17.Size = new System.Drawing.Size(123, 21);
            this.label17.TabIndex = 212;
            this.label17.Text = "ULD HANDLER 1 X";
            this.label17.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            // 
            // Form_Recipe_Type
            // 
@@ -3231,6 +3427,8 @@
            this.tab_PreAlignOffset.PerformLayout();
            this.tab_LoaderHandler1Position.ResumeLayout(false);
            this.tab_LoaderHandler1Position.PerformLayout();
            this.tabPage6.ResumeLayout(false);
            this.tabPage6.PerformLayout();
            this.ResumeLayout(false);
        }
@@ -3488,5 +3686,21 @@
        private System.Windows.Forms.TextBox tb_AOI_Mark4_Y;
        private System.Windows.Forms.Label label8;
        private System.Windows.Forms.CheckBox cb_AoiMark34Use;
        private System.Windows.Forms.TabPage tabPage6;
        private System.Windows.Forms.Label label11;
        private System.Windows.Forms.TextBox tb_Width_AOI_Mark3_X;
        private System.Windows.Forms.TextBox tb_Width_AOI_Mark1_X;
        private System.Windows.Forms.TextBox tb_Width_AOI_Mark3_Y;
        private System.Windows.Forms.TextBox tb_Width_AOI_Mark1_Y;
        private System.Windows.Forms.Label label12;
        private System.Windows.Forms.Label label13;
        private System.Windows.Forms.TextBox tb_Width_AOI_Mark4_X;
        private System.Windows.Forms.TextBox tb_Width_AOI_Mark4_Y;
        private System.Windows.Forms.TextBox tb_Width_AOI_Mark2_X;
        private System.Windows.Forms.Label label14;
        private System.Windows.Forms.TextBox tb_Width_AOI_Mark2_Y;
        private System.Windows.Forms.Label label15;
        private System.Windows.Forms.Label label16;
        private System.Windows.Forms.Label label17;
    }
}
SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.cs
@@ -707,6 +707,46 @@
                            cur_vision_info_recipe.AOI_Mark4_Y = value_double;
                            break;
                        }
                    case "tb_Width_AOI_Mark1_X":
                        {
                            cur_vision_info_recipe.Width_AOI_Mark1_X = value_double;
                            break;
                        }
                    case "tb_Width_AOI_Mark1_Y":
                        {
                            cur_vision_info_recipe.Width_AOI_Mark1_Y = value_double;
                            break;
                        }
                    case "tb_Width_AOI_Mark2_X":
                        {
                            cur_vision_info_recipe.Width_AOI_Mark2_X = value_double;
                            break;
                        }
                    case "tb_Width_AOI_Mark2_Y":
                        {
                            cur_vision_info_recipe.Width_AOI_Mark2_Y = value_double;
                            break;
                        }
                    case "tb_Width_AOI_Mark3_X":
                        {
                            cur_vision_info_recipe.Width_AOI_Mark3_X = value_double;
                            break;
                        }
                    case "tb_Width_AOI_Mark3_Y":
                        {
                            cur_vision_info_recipe.Width_AOI_Mark3_Y = value_double;
                            break;
                        }
                    case "tb_Width_AOI_Mark4_X":
                        {
                            cur_vision_info_recipe.Width_AOI_Mark4_X = value_double;
                            break;
                        }
                    case "tb_Width_AOI_Mark4_Y":
                        {
                            cur_vision_info_recipe.Width_AOI_Mark4_Y = value_double;
                            break;
                        }
                    case "tb_AOI_Before_Left_T":
                        {
                            cur_vision_info_recipe.AOI_Before_Left_T = value_double;
@@ -1872,6 +1912,15 @@
            cb_AoiMark34Use.Checked = cur_vision_info_recipe.AoiMark34Use;
            tb_Width_AOI_Mark1_X.Text = cur_vision_info_recipe.Width_AOI_Mark1_X.ToString();
            tb_Width_AOI_Mark1_Y.Text = cur_vision_info_recipe.Width_AOI_Mark1_Y.ToString();
            tb_Width_AOI_Mark2_X.Text = cur_vision_info_recipe.Width_AOI_Mark2_X.ToString();
            tb_Width_AOI_Mark2_Y.Text = cur_vision_info_recipe.Width_AOI_Mark2_Y.ToString();
            tb_Width_AOI_Mark3_X.Text = cur_vision_info_recipe.Width_AOI_Mark3_X.ToString();
            tb_Width_AOI_Mark3_Y.Text = cur_vision_info_recipe.Width_AOI_Mark3_Y.ToString();
            tb_Width_AOI_Mark4_X.Text = cur_vision_info_recipe.Width_AOI_Mark4_X.ToString();
            tb_Width_AOI_Mark4_Y.Text = cur_vision_info_recipe.Width_AOI_Mark4_Y.ToString();
            tb_AOI_Before_Left_T.Text = cur_vision_info_recipe.AOI_Before_Left_T.ToString();
            tb_AOI_Before_Right_T.Text = cur_vision_info_recipe.AOI_Before_Right_T.ToString();
            tb_AOI_After_Left_T.Text = cur_vision_info_recipe.AOI_After_Left_T.ToString();
@@ -1995,6 +2044,15 @@
            tb_AOI_Mark4_X.BackColor = cur_vision_info_recipe.AOI_Mark4_X == recipe.AOI_Mark4_X ? Color.White : Color.Red;
            tb_AOI_Mark4_Y.BackColor = cur_vision_info_recipe.AOI_Mark4_Y == recipe.AOI_Mark4_Y ? Color.White : Color.Red;
            
            tb_Width_AOI_Mark1_X.BackColor = cur_vision_info_recipe.Width_AOI_Mark1_X == recipe.Width_AOI_Mark1_X ? Color.White : Color.Red;
            tb_Width_AOI_Mark1_Y.BackColor = cur_vision_info_recipe.Width_AOI_Mark1_Y == recipe.Width_AOI_Mark1_Y ? Color.White : Color.Red;
            tb_Width_AOI_Mark2_X.BackColor = cur_vision_info_recipe.Width_AOI_Mark2_X == recipe.Width_AOI_Mark2_X ? Color.White : Color.Red;
            tb_Width_AOI_Mark2_Y.BackColor = cur_vision_info_recipe.Width_AOI_Mark2_Y == recipe.Width_AOI_Mark2_Y ? Color.White : Color.Red;
            tb_Width_AOI_Mark3_X.BackColor = cur_vision_info_recipe.Width_AOI_Mark3_X == recipe.Width_AOI_Mark3_X ? Color.White : Color.Red;
            tb_Width_AOI_Mark3_Y.BackColor = cur_vision_info_recipe.Width_AOI_Mark3_Y == recipe.Width_AOI_Mark3_Y ? Color.White : Color.Red;
            tb_Width_AOI_Mark4_X.BackColor = cur_vision_info_recipe.Width_AOI_Mark4_X == recipe.Width_AOI_Mark4_X ? Color.White : Color.Red;
            tb_Width_AOI_Mark4_Y.BackColor = cur_vision_info_recipe.Width_AOI_Mark4_Y == recipe.Width_AOI_Mark4_Y ? Color.White : Color.Red;
            tb_AOI_Before_Left_T.BackColor = cur_vision_info_recipe.AOI_Before_Left_T == recipe.AOI_Before_Left_T ? Color.White : Color.Red;
            tb_AOI_Before_Right_T.BackColor = cur_vision_info_recipe.AOI_Before_Right_T == recipe.AOI_Before_Right_T ? Color.White : Color.Red;
            tb_AOI_After_Left_T.BackColor = cur_vision_info_recipe.AOI_After_Left_T == recipe.AOI_After_Left_T ? Color.White : Color.Red;
SHARP_CLAS_UI/500.Equipment/100.Memory_Address/Memory_Address.cs
@@ -116,6 +116,8 @@
        public static SharedmemoryAddressInfo Power_Meter_Max = new SharedmemoryAddressInfo(226, MemberTypes.DOUBLE);
        public static SharedmemoryAddressInfo Power_Meter_Min = new SharedmemoryAddressInfo(234, MemberTypes.DOUBLE);
        public static SharedmemoryAddressInfo Power_Meter_Count = new SharedmemoryAddressInfo(242, MemberTypes.INT);
        public static SharedmemoryAddressInfo Width_Measurement_Count = new SharedmemoryAddressInfo(246, MemberTypes.INT);
    }
    
    /// <summary>
@@ -3519,7 +3521,7 @@
        public static SharedmemoryAddressInfo Measurement_Right_Mark_4_Point_2 = new SharedmemoryAddressInfo(6787, MemberTypes.DOUBLE);
        //Measurement 6800 ~ 7100
        //Measurement 6800 ~ 7000
        public static SharedmemoryAddressInfo Measurement_Grab_Ready_Ack = new SharedmemoryAddressInfo(6800, MemberTypes.BIT);
        public static SharedmemoryAddressInfo Measurement_Grab_Ready_Result = new SharedmemoryAddressInfo(6801, MemberTypes.INT);
SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Client_AOI.cs
@@ -616,6 +616,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 +765,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 +801,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>
SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Control.cs
@@ -473,6 +473,49 @@
            Ack = new MeasurementResultAck(Result_MsgIndex, Result_ModuleIdx, Result_MeasureResult, Result_Mark1Point1, Result_Mark1Point2, Result_Mark2Point1, Result_Mark2Point2, Result_Mark3Point1, Result_Mark3Point2, Result_Mark4Point1, Result_Mark4Point2, Result_MarkDistance, Result_AlignResult);
        }
        public void Recv_WidthMeasurement_Result(byte[] Recvdata, out WidthMeasurementResultAck Ack)
        {
            byte[] size = new byte[4];
            byte[] command = new byte[2];
            byte[] MsgIndex = new byte[4]; //TimeStamp (HHMMSSmsmsms)
            byte[] ModuleIdx = new byte[4]; //카메라 Module Idx (0: Left, 1: Right)
            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 += size.Length;
            Array.Copy(Recvdata, copylength, command, 0, command.Length);
            copylength += command.Length;
            Array.Copy(Recvdata, copylength, MsgIndex, 0, MsgIndex.Length);
            copylength += MsgIndex.Length;
            Array.Copy(Recvdata, copylength, ModuleIdx, 0, ModuleIdx.Length);
            copylength += ModuleIdx.Length;
            Array.Copy(Recvdata, copylength, MeasureResult, 0, MeasureResult.Length);
            copylength += MeasureResult.Length;
            Array.Copy(Recvdata, copylength, Mark1Width, 0, Mark1Width.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);
        }
        public void Recv_Fine_Align_Result(byte[] Recvdata, out FineAlignResultAck Ack)
        {
            byte[] size = new byte[4];
SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Define.cs
@@ -163,6 +163,28 @@
        }
    }
    public struct WidthMeasurementResultAck
    {
        public int msg_Index { get; private set; }
        public int moduleIdx { get; private set; }
        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)
        {
            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 struct MotorPosMoveReq
    {
        public int msg_Index{ get; private set; }
SHARP_CLAS_UI/500.Equipment/400.Module/300.CIM/CIM_Client.cs
@@ -579,11 +579,6 @@
            string data_etc = string.Empty;
            //for (int i = 18; i < 380; i++)
            //{
            //    data_etc += ",";
            //}
            for (int i = 18; i < 81; i++)
            {
                data_etc += $",";
@@ -613,8 +608,6 @@
            Set_Command_Ack(En_Cim_Command.PREND, false);
            send_datas.Enqueue(new Cim_Send_Data(En_Cim_Command.PREND, command));
            return true;
            //return Check_Receive_Data(command, En_Cim_Command.PREND);
        }
        public bool Send_Panel_Tray_In(string seq_num, string tray_id, string panel_id, string location, En_Port_ID port_id)
SHARP_CLAS_UI/500.Equipment/500.Recipe/200.Vision_Info/Vision_Info_Recipe.cs
@@ -56,6 +56,15 @@
        public double AOI_Mark4_Y { get; set; }
        public bool AoiMark34Use { get; set; }
        public double Width_AOI_Mark1_X { get; set; }
        public double Width_AOI_Mark1_Y { get; set; }
        public double Width_AOI_Mark2_X { get; set; }
        public double Width_AOI_Mark2_Y { get; set; }
        public double Width_AOI_Mark3_X { get; set; }
        public double Width_AOI_Mark3_Y { get; set; }
        public double Width_AOI_Mark4_X { get; set; }
        public double Width_AOI_Mark4_Y { get; set; }
        public double AOI_Before_Left_T { get; set; }
        public double AOI_Before_Right_T { get; set; }
@@ -114,6 +123,15 @@
            AOI_Mark4_Y = 0;
            AoiMark34Use = false;
            Width_AOI_Mark1_X = 0;
            Width_AOI_Mark1_Y = 0;
            Width_AOI_Mark2_X = 0;
            Width_AOI_Mark2_Y = 0;
            Width_AOI_Mark3_X = 0;
            Width_AOI_Mark3_Y = 0;
            Width_AOI_Mark4_X = 0;
            Width_AOI_Mark4_Y = 0;
            AOI_Before_Left_T = 0;
            AOI_Before_Right_T = 0;
            AOI_After_Left_T = 0;
@@ -170,6 +188,14 @@
            info.AOI_Mark4_X = this.AOI_Mark4_X;
            info.AOI_Mark4_Y = this.AOI_Mark4_Y;
            info.AoiMark34Use = this.AoiMark34Use;
            info.Width_AOI_Mark1_X = this.Width_AOI_Mark1_X;
            info.Width_AOI_Mark1_Y = this.Width_AOI_Mark1_Y;
            info.Width_AOI_Mark2_X = this.Width_AOI_Mark2_X;
            info.Width_AOI_Mark2_Y = this.Width_AOI_Mark2_Y;
            info.Width_AOI_Mark3_X = this.Width_AOI_Mark3_X;
            info.Width_AOI_Mark3_Y = this.Width_AOI_Mark3_Y;
            info.Width_AOI_Mark4_X = this.Width_AOI_Mark4_X;
            info.Width_AOI_Mark4_Y = this.Width_AOI_Mark4_Y;
            info.AOI_Before_Left_T = this.AOI_Before_Left_T;
            info.AOI_Before_Right_T = this.AOI_Before_Right_T;
            info.AOI_After_Left_T = this.AOI_After_Left_T;
SHARP_CLAS_UI/500.Equipment/600.Info/000.Panel_Info/Panel_Info.cs
@@ -59,6 +59,14 @@
        public double Mark4Point1 { get; set; }
        public double Mark4Point2 { get; set; }
        
        public bool WidthMeasurement_Ack { get; set; }
        public bool WidthMeasurement_Result { get; set; }
        public double Mark1Width { get; set; }
        public double Mark2Width { get; set; }
        public double Mark3Width { get; set; }
        public double Mark4Width { get; set; }
        public int Stage_Num { get; set; }
        public DateTime Start_Time { get; set; }
SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Mode.cs
@@ -12,6 +12,7 @@
        public bool Measurement_Skip { get; set; }
        public bool Ablation_Skip { get; set; }
        public bool Plasma_Skip { get; set; }
        public bool Width_Measurement_Skip { get; set; }
        public bool LD_Stacker_Skip { get; set; }
        public bool ULD_Stacker_Skip { get; set; }
        public bool Film_Judge_Mode { get; set; }
@@ -20,6 +21,7 @@
        public bool Ablation_Stage_2_1_Skip { get; set; }
        public bool Ablation_Stage_2_2_Skip { get; set; }
        public bool Auto_Power_Skip { get; set; }
        public Parameter_Mode()
        {
            Agv_Skip = false;
@@ -30,6 +32,7 @@
            Pre_Align_Skip = false;
            Fine_Align_Skip = false;
            Measurement_Skip = false;
            Width_Measurement_Skip = false;
            Ablation_Skip = false;
            Plasma_Skip = false;
            LD_Stacker_Skip = false;
@@ -54,6 +57,7 @@
            mode.Pre_Align_Skip = this.Pre_Align_Skip;
            mode.Fine_Align_Skip = this.Fine_Align_Skip;
            mode.Measurement_Skip = this.Measurement_Skip;
            mode.Width_Measurement_Skip = this.Width_Measurement_Skip;
            mode.Ablation_Skip = this.Ablation_Skip;
            mode.Plasma_Skip = this.Plasma_Skip;
            mode.LD_Stacker_Skip = this.LD_Stacker_Skip;
SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Setting.cs
@@ -40,6 +40,8 @@
        public double Handler_Pitch { get; set; }
        public int Cleaning_Count { get; set;}
        public int Width_Measurement_Count { get; set; }
        public Parameter_Setting()
        {
            Film_Judge_Speed = 0;
@@ -79,6 +81,7 @@
            Handler_Pitch = 0;
            Cleaning_Count = 0;
            Width_Measurement_Count = 0;
        }
        public Parameter_Setting Clone()
@@ -117,6 +120,7 @@
            setting.Stage_2_2_Power_Offset = this.Stage_2_2_Power_Offset;
            setting.Handler_Pitch = this.Handler_Pitch;
            setting.Cleaning_Count = this.Cleaning_Count;
            setting.Width_Measurement_Count = this.Width_Measurement_Count;
            return setting;
        }
SHARP_CLAS_UI/500.Equipment/700.Unit/300.After/AoiStage.cs
SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs
@@ -1106,6 +1106,9 @@
            var isAoiPanel1MeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.Measurement_Ack;
            var isAoiPanel2MeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.Measurement_Ack;
            var isAoiPanel1WidthMeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.WidthMeasurement_Ack;
            var isAoiPanel2WidthMeasurementAck = aoiStage.Stage2.IsExist == false || aoiStage.Panel2.WidthMeasurement_Ack;
            switch (Step)
            {
                case UnloaderHandler1Steps.S4000_MEASUREMENT_START:
@@ -1674,13 +1677,25 @@
                            if (isAoiPanel1MeasurementAck && isAoiPanel2MeasurementAck)
                            {
                                //AOI 완료. -> Width meausrement 여기에 추가 해야 될듯..?
                                if (equipment.Mode.Width_Measurement_Skip || equipment.WidthMeasurementCount < equipment.Setting.Width_Measurement_Count)
                                {
                                    equipment.WidthMeasurementCount = equipment.WidthMeasurementCount + 1;
                                if (equipment.cim_mode == En_Cim_Mode.Online)
                                {
                                    Step = UnloaderHandler1Steps.S4600_PANEL_LEFT_CIM_SEND;
                                        Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
                                }
                                else
                                {
                                    Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                                    }
                                }
                                else
                                {
                                    measurement_retry_cnt = 0;
                                    Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                                }
                            }
                            else
@@ -1690,7 +1705,7 @@
                                if (measurement_retry_cnt >= equipment.Setting.Vision_Retry_Count)
                                {
                                    Step = UnloaderHandler1Steps.S4700_USER_COMMAND_START;
                                    Step = UnloaderHandler1Steps.S4560_USER_COMMAND_START;
                                }
                                else
                                {
@@ -1708,7 +1723,7 @@
                                {
                                    if (sequenceChangedTime.Minute > 5)
                                    {
                                        Step = UnloaderHandler1Steps.S4700_USER_COMMAND_START;
                                        Step = UnloaderHandler1Steps.S4560_USER_COMMAND_START;
                                    }
                                }
                                else if (measurement_retry_cnt == equipment.Setting.Vision_Retry_Count)
@@ -1717,7 +1732,7 @@
                                    Tact_Move.Stop();
                                    equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [End]");
                                    equipment.Write_Tact_Time_Log($"ULD Handler 1, AOI Reading [Tact : {Tact_Move.Seconds} (sec)]");
                                    Step = UnloaderHandler1Steps.S4700_USER_COMMAND_START;
                                    Step = UnloaderHandler1Steps.S4560_USER_COMMAND_START;
                                }
                                else
                                {
@@ -1732,100 +1747,7 @@
                        break;
                    }
                case UnloaderHandler1Steps.S4600_PANEL_LEFT_CIM_SEND:
                    {
                        if (equipment.cim_mode != En_Cim_Mode.Online)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            return;
                        }
                        Panel_Info info1 = equipment.after.AoiStage.Panel1;
                        if (equipment.after.AoiStage.Stage1.IsExist == false || info1.IsPanelIdRead == false)
                        {
                            Step = UnloaderHandler1Steps.S4620_PANEL_RIGHT_CIM_SEND;
                            return;
                        }
                        else
                        {
                            if (equipment.cim_client.Send_Process_End("E123456", info1))
                            {
                                Step = UnloaderHandler1Steps.S4610_PANEL_LEFT_CIM_SEND_WAIT;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4610_PANEL_LEFT_CIM_SEND_WAIT:
                    {
                        if (equipment.cim_mode != En_Cim_Mode.Online)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            return;
                        }
                        if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PREND))
                        {
                            if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PREND))
                            {
                                Step = UnloaderHandler1Steps.S4620_PANEL_RIGHT_CIM_SEND;
                            }
                            else
                            {
                                Step = UnloaderHandler1Steps.S4600_PANEL_LEFT_CIM_SEND;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4620_PANEL_RIGHT_CIM_SEND:
                    {
                        if (equipment.cim_mode != En_Cim_Mode.Online)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            return;
                        }
                        Panel_Info info2 = equipment.after.AoiStage.Panel2;
                        if (equipment.after.AoiStage.Stage2.IsExist == false || info2.IsPanelIdRead == false)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                        }
                        else
                        {
                            if(equipment.cim_client.Send_Process_End("E123456", info2))
                            {
                                Step = UnloaderHandler1Steps.S4630_PANEL_RIGHT_CIM_SEND_WAIT;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4630_PANEL_RIGHT_CIM_SEND_WAIT:
                    {
                        if (equipment.cim_mode != En_Cim_Mode.Online)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            return;
                        }
                        if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PREND))
                        {
                            if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PREND))
                            {
                                Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            }
                            else
                            {
                                Step = UnloaderHandler1Steps.S4620_PANEL_RIGHT_CIM_SEND;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4700_USER_COMMAND_START:
                case UnloaderHandler1Steps.S4560_USER_COMMAND_START:
                    {
                        var aoistage = equipment.after.AoiStage;
                        Panel_Info info1 = aoistage.Panel1;
@@ -1844,10 +1766,10 @@
                        measurement_user_command = new Form_User_Command_Set("Measurement");
                        measurement_user_command_show = true;
                        Step = UnloaderHandler1Steps.S4710_USER_COMMAND_WAIT;
                        Step = UnloaderHandler1Steps.S4570_USER_COMMAND_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4710_USER_COMMAND_WAIT:
                case UnloaderHandler1Steps.S4570_USER_COMMAND_WAIT:
                    {
                        var aoistage = equipment.after.AoiStage;
                        Panel_Info info1 = aoistage.Panel1;
@@ -1948,6 +1870,734 @@
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4600_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.S4602_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.S4601_LEFT_CAMERA_GRAB_READY_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4601_LEFT_CAMERA_GRAB_READY_WAIT:
                    {
                        if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Ready_Ack))
                        {
                            Step = UnloaderHandler1Steps.S4602_RIGHT_CAMERA_GRAB_READY;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4602_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.S4610_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.S4603_RIGHT_CAMERA_GRAB_READY_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4603_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.S4610_MOVE_MEASUREMENT_MARK1_POSITION;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4610_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_Mark1_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark1_Y, 500))
                            Step = UnloaderHandler1Steps.S4611_POSITION_CHECK;
                        break;
                    }
                case UnloaderHandler1Steps.S4611_POSITION_CHECK:
                    {
                        if (MotorX.MotionComplete && MotorY.MotionComplete)
                        {
                            if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark1_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark1_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.S4612_LEFT_CAMERA_MARK_1_GRAB_START;
                            }
                            else
                            {
                                Step = UnloaderHandler1Steps.S4610_MOVE_MEASUREMENT_MARK1_POSITION;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4612_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.S4614_RIGHT_CAMERA_MARK_1_GRAB_START;
                            return;
                        }
                        if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 0, MotorX.Position, MotorY.Position))
                            Step = UnloaderHandler1Steps.S4613_LEFT_CAMERA_MARK_1_GRAB_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4613_LEFT_CAMERA_MARK_1_GRAB_WAIT:
                    {
                        if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
                        {
                            Step = UnloaderHandler1Steps.S4614_RIGHT_CAMERA_MARK_1_GRAB_START;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4614_RIGHT_CAMERA_MARK_1_GRAB_START:
                    {
                        if (sequenceChangedTime.Seconds < 0.1) return;
                        var info = equipment.after.AoiStage.Panel2;
                        if (isAoiPanel2WidthMeasurementAck)
                        {
                            Step = UnloaderHandler1Steps.S4620_MOVE_MEASUREMENT_MARK2_POSITION;
                            return;
                        }
                        if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 0, MotorX.Position, MotorY.Position))
                            Step = UnloaderHandler1Steps.S4615_RIGHT_CAMERA_MARK_1_GRAB_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4615_RIGHT_CAMERA_MARK_1_GRAB_WAIT:
                    {
                        if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
                        {
                            Step = UnloaderHandler1Steps.S4620_MOVE_MEASUREMENT_MARK2_POSITION;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4620_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_Mark2_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark2_Y, 500))
                            Step = UnloaderHandler1Steps.S4621_POSITION_CHECK;
                        break;
                    }
                case UnloaderHandler1Steps.S4621_POSITION_CHECK:
                    {
                        if (MotorX.MotionComplete && MotorY.MotionComplete)
                        {
                            if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark2_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark2_Y, equipment.Setting.Inposition_Offset))
                            {
                                vision_delay.Start();
                                Step = UnloaderHandler1Steps.S4622_LEFT_CAMERA_MARK_2_GRAB_START;
                            }
                            else
                            {
                                Step = UnloaderHandler1Steps.S4620_MOVE_MEASUREMENT_MARK2_POSITION;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4622_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.S4624_RIGHT_CAMERA_MARK_2_GRAB_START;
                            return;
                        }
                        if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 1, MotorX.Position, MotorY.Position))
                            Step = UnloaderHandler1Steps.S4623_LEFT_CAMERA_MARK_2_GRAB_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4623_LEFT_CAMERA_MARK_2_GRAB_WAIT:
                    {
                        if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
                        {
                            Step = UnloaderHandler1Steps.S4624_RIGHT_CAMERA_MARK_2_GRAB_START;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4624_RIGHT_CAMERA_MARK_2_GRAB_START:
                    {
                        if (sequenceChangedTime.Seconds < 0.1) return;
                        var info = equipment.after.AoiStage.Panel2;
                        if (isAoiPanel2WidthMeasurementAck)
                        {
                            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.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 1, MotorX.Position, MotorY.Position))
                            Step = UnloaderHandler1Steps.S4625_RIGHT_CAMERA_MARK_2_GRAB_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4625_RIGHT_CAMERA_MARK_2_GRAB_WAIT:
                    {
                        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)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4630_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_Mark3_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark3_Y, 500))
                            Step = UnloaderHandler1Steps.S4631_POSITION_CHECK;
                        break;
                    }
                case UnloaderHandler1Steps.S4631_POSITION_CHECK:
                    {
                        if (MotorX.MotionComplete && MotorY.MotionComplete)
                        {
                            if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark3_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark3_Y, equipment.Setting.Inposition_Offset))
                            {
                                vision_delay.Start();
                                Step = UnloaderHandler1Steps.S4632_LEFT_CAMERA_MARK_3_GRAB_START;
                            }
                            else
                            {
                                Step = UnloaderHandler1Steps.S4630_MOVE_MEASUREMENT_MARK3_POSITION;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4632_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.S4634_RIGHT_CAMERA_MARK_3_GRAB_START;
                            return;
                        }
                        if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 2, MotorX.Position, MotorY.Position))
                            Step = UnloaderHandler1Steps.S4633_LEFT_CAMERA_MARK_3_GRAB_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4633_LEFT_CAMERA_MARK_3_GRAB_WAIT:
                    {
                        if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
                        {
                            Step = UnloaderHandler1Steps.S4634_RIGHT_CAMERA_MARK_3_GRAB_START;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4634_RIGHT_CAMERA_MARK_3_GRAB_START:
                    {
                        if (sequenceChangedTime.Seconds < 0.1) return;
                        var info = equipment.after.AoiStage.Panel2;
                        if (isAoiPanel2WidthMeasurementAck)
                        {
                            sequenceChangedTime.Start();
                            Step = UnloaderHandler1Steps.S4640_MOVE_MEASUREMENT_MARK4_POSITION;
                            return;
                        }
                        if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 2, MotorX.Position, MotorY.Position))
                            Step = UnloaderHandler1Steps.S4635_RIGHT_CAMERA_MARK_3_GRAB_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4635_RIGHT_CAMERA_MARK_3_GRAB_WAIT:
                    {
                        if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
                        {
                            Step = UnloaderHandler1Steps.S4640_MOVE_MEASUREMENT_MARK4_POSITION;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4640_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_Mark4_X, 500) && MotorY.Move_Absolute_Pos(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark4_Y, 500))
                            Step = UnloaderHandler1Steps.S4641_POSITION_CHECK;
                        break;
                    }
                case UnloaderHandler1Steps.S4641_POSITION_CHECK:
                    {
                        if (MotorX.MotionComplete && MotorY.MotionComplete)
                        {
                            if (MotorX.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark4_X, equipment.Setting.Inposition_Offset) && MotorY.Is_Inposition(equipment.Cur_Main_Recipe.vision_info.Width_AOI_Mark4_Y, equipment.Setting.Inposition_Offset))
                            {
                                vision_delay.Start();
                                Step = UnloaderHandler1Steps.S4642_LEFT_CAMERA_MARK_4_GRAB_START;
                            }
                            else
                            {
                                Step = UnloaderHandler1Steps.S4640_MOVE_MEASUREMENT_MARK4_POSITION;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4642_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.S4644_RIGHT_CAMERA_MARK_4_GRAB_START;
                            return;
                        }
                        if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(0, 3, MotorX.Position, MotorY.Position))
                            Step = UnloaderHandler1Steps.S4643_LEFT_CAMERA_MARK_4_GRAB_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4643_LEFT_CAMERA_MARK_4_GRAB_WAIT:
                    {
                        if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Left_Ack))
                        {
                            Step = UnloaderHandler1Steps.S4644_RIGHT_CAMERA_MARK_4_GRAB_START;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4644_RIGHT_CAMERA_MARK_4_GRAB_START:
                    {
                        if (sequenceChangedTime.Seconds < 0.1) return;
                        var info = equipment.after.AoiStage.Panel2;
                        if (isAoiPanel2WidthMeasurementAck)
                        {
                            sequenceChangedTime.Start();
                            Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK;
                            return;
                        }
                        if (equipment.Aoi_vision.Send_WidthMeasurement_Grab_Start_Req(1, 3, MotorX.Position, MotorY.Position))
                            Step = UnloaderHandler1Steps.S4645_RIGHT_CAMERA_MARK_4_GRAB_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4645_RIGHT_CAMERA_MARK_4_GRAB_WAIT:
                    {
                        if (equipment.sm.Get_Bit(Vision_Address.Measurement_Grab_Start_Right_Ack))
                        {
                            Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK;
                        }
                        else if (sequenceChangedTime.Seconds > equipment.Setting.Vision_Timeout)
                        {
                            Step = UnloaderHandler1Steps.S4600_LEFT_CAMERA_GRAB_READY;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK:
                    {
                        var aoistage = equipment.after.AoiStage;
                        var info1 = aoistage.Panel1;
                        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))
                                {
                                    info1.WidthMeasurement_Result = result;
                                    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());
                                    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());
                                    aoistage.Panel1 = info1;
                                    isAoiPanel1WidthMeasurementAck = aoiStage.Stage1.IsExist == false || aoiStage.Panel1.WidthMeasurement_Ack;
                                }
                                else
                                {
                                    return;
                                }
                            }
                            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.End_Time = DateTime.Now;
                                        equipment.sm.Get_Value(Vision_Address.Measurement_Right_Mark_1_Point_1, out value);
                                        info2.Mark1Point1 = 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());
                                        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.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.S4700_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.S4700_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.S4700_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_0886_MEASUREMENT_LEFT_ERROR);
                        }
                        if (aoistage.Stage2.IsExist && info2.WidthMeasurement_Ack == false)
                        {
                            Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0887_MEASUREMENT_RIGHT_ERROR);
                        }
                        measurement_user_command = new Form_User_Command_Set("Measurement");
                        measurement_user_command_show = true;
                        Step = UnloaderHandler1Steps.S4700_USER_COMMAND_WAIT;
                        break;
                    }
                case UnloaderHandler1Steps.S4700_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.Measurement_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);
                            }
                            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);
                            }
                            Step = UnloaderHandler1Steps.S4650_MEASUREMENT_CHECK;
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND:
                    {
                        if (equipment.cim_mode != En_Cim_Mode.Online)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            return;
                        }
                        Panel_Info info1 = equipment.after.AoiStage.Panel1;
                        if (equipment.after.AoiStage.Stage1.IsExist == false || info1.IsPanelIdRead == false)
                        {
                            Step = UnloaderHandler1Steps.S4820_PANEL_RIGHT_CIM_SEND;
                            return;
                        }
                        else
                        {
                            if (equipment.cim_client.Send_Process_End("E123456", info1))
                            {
                                Step = UnloaderHandler1Steps.S4810_PANEL_LEFT_CIM_SEND_WAIT;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4810_PANEL_LEFT_CIM_SEND_WAIT:
                    {
                        if (equipment.cim_mode != En_Cim_Mode.Online)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            return;
                        }
                        if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PREND))
                        {
                            if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PREND))
                            {
                                Step = UnloaderHandler1Steps.S4820_PANEL_RIGHT_CIM_SEND;
                            }
                            else
                            {
                                Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4820_PANEL_RIGHT_CIM_SEND:
                    {
                        if (equipment.cim_mode != En_Cim_Mode.Online)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            return;
                        }
                        Panel_Info info2 = equipment.after.AoiStage.Panel2;
                        if (equipment.after.AoiStage.Stage2.IsExist == false || info2.IsPanelIdRead == false)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                        }
                        else
                        {
                            if (equipment.cim_client.Send_Process_End("E123456", info2))
                            {
                                Step = UnloaderHandler1Steps.S4830_PANEL_RIGHT_CIM_SEND_WAIT;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4830_PANEL_RIGHT_CIM_SEND_WAIT:
                    {
                        if (equipment.cim_mode != En_Cim_Mode.Online)
                        {
                            Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            return;
                        }
                        if (equipment.cim_client.Get_Command_Ack(En_Cim_Command.PREND))
                        {
                            if (equipment.cim_client.Get_Command_Result(En_Cim_Command.PREND))
                            {
                                Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
                            }
                            else
                            {
                                Step = UnloaderHandler1Steps.S4820_PANEL_RIGHT_CIM_SEND;
                            }
                        }
                        break;
                    }
                case UnloaderHandler1Steps.S4999_MEASUREMENT_END:
                    {
                        Tact_AOI.Stop();
SHARP_CLAS_UI/500.Equipment/700.Unit/Base/Handler.cs
@@ -261,13 +261,61 @@
        S4550_MEASUREMENT_CHECK,
        S4600_PANEL_LEFT_CIM_SEND,
        S4610_PANEL_LEFT_CIM_SEND_WAIT,
        S4620_PANEL_RIGHT_CIM_SEND,
        S4630_PANEL_RIGHT_CIM_SEND_WAIT,
        S4560_USER_COMMAND_START,
        S4570_USER_COMMAND_WAIT,
        //Width Measurment Sequence 추가.
        /*
         * Camera ready, 4600 ~
         * 위치 이동및 Grab 1 ~ 4
         * 종료 확인.
         * Ok, Retry or Pass 확인. , 4700 ~
         * CIM 보고 확인.
         */
        S4600_LEFT_CAMERA_GRAB_READY,
        S4601_LEFT_CAMERA_GRAB_READY_WAIT,
        S4602_RIGHT_CAMERA_GRAB_READY,
        S4603_RIGHT_CAMERA_GRAB_READY_WAIT,
        S4610_MOVE_MEASUREMENT_MARK1_POSITION,
        S4611_POSITION_CHECK,
        S4612_LEFT_CAMERA_MARK_1_GRAB_START,
        S4613_LEFT_CAMERA_MARK_1_GRAB_WAIT,
        S4614_RIGHT_CAMERA_MARK_1_GRAB_START,
        S4615_RIGHT_CAMERA_MARK_1_GRAB_WAIT,
        S4620_MOVE_MEASUREMENT_MARK2_POSITION,
        S4621_POSITION_CHECK,
        S4622_LEFT_CAMERA_MARK_2_GRAB_START,
        S4623_LEFT_CAMERA_MARK_2_GRAB_WAIT,
        S4624_RIGHT_CAMERA_MARK_2_GRAB_START,
        S4625_RIGHT_CAMERA_MARK_2_GRAB_WAIT,
        S4630_MOVE_MEASUREMENT_MARK3_POSITION,
        S4631_POSITION_CHECK,
        S4632_LEFT_CAMERA_MARK_3_GRAB_START,
        S4633_LEFT_CAMERA_MARK_3_GRAB_WAIT,
        S4634_RIGHT_CAMERA_MARK_3_GRAB_START,
        S4635_RIGHT_CAMERA_MARK_3_GRAB_WAIT,
        S4640_MOVE_MEASUREMENT_MARK4_POSITION,
        S4641_POSITION_CHECK,
        S4642_LEFT_CAMERA_MARK_4_GRAB_START,
        S4643_LEFT_CAMERA_MARK_4_GRAB_WAIT,
        S4644_RIGHT_CAMERA_MARK_4_GRAB_START,
        S4645_RIGHT_CAMERA_MARK_4_GRAB_WAIT,
        S4650_MEASUREMENT_CHECK,
        S4700_USER_COMMAND_START,
        S4710_USER_COMMAND_WAIT,
        S4700_USER_COMMAND_WAIT,
        //==============================
        S4800_PANEL_LEFT_CIM_SEND,
        S4810_PANEL_LEFT_CIM_SEND_WAIT,
        S4820_PANEL_RIGHT_CIM_SEND,
        S4830_PANEL_RIGHT_CIM_SEND_WAIT,
        S4999_MEASUREMENT_END,
        //======================== AOI PICK ============================
SHARP_CLAS_UI/500.Equipment/Equipment.cs
@@ -367,6 +367,23 @@
            }
        }
        
        public int WidthMeasurementCount
        {
            get
            {
                int count;
                object value;
                sm.Get_Value(Process_Memory_Address.Width_Measurement_Count, out value);
                int.TryParse($"{value}", out count);
                return count;
            }
            set
            {
                sm.Set_Value(Process_Memory_Address.Width_Measurement_Count, value);
            }
        }
        public Main_Recipe Cur_Main_Recipe
        {
            get
@@ -547,7 +564,7 @@
        private User_Info _user;
        private SequenceTimer _modeChangeTime = new SequenceTimer();
        private string _programVersion = "001.001.005";
        private string _programVersion = "001.002.000";
        #endregion
        #region Construct