From 154cfce360a831d18f3f21b4e1101b4e13440b74 Mon Sep 17 00:00:00 2001
From: 천호석 <hosuk1418@naver.com>
Date: 화, 11 10월 2022 13:19:52 +0900
Subject: [PATCH] 검사 개조, Measurement 후 Width 검사 추가. Recipe 위치 좌표 추가, 검사 Parameter 추가.

---
 SHARP_CLAS_UI/100.Screen/Form_Main.cs                                          |    5 
 SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Setting.cs |    6 
 SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Control.cs            |   43 +
 SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Mode.cs    |    4 
 SHARP_CLAS_UI/500.Equipment/600.Info/000.Panel_Info/Panel_Info.cs              |    8 
 SHARP_CLAS_UI/100.Screen/Form_Parameter_System.cs                              |   38 +
 SHARP_CLAS_UI/500.Equipment/100.Memory_Address/Memory_Address.cs               |    4 
 SHARP_CLAS_UI/100.Screen/Form_Parameter_System.Designer.cs                     |  249 ++++++--
 SHARP_CLAS_UI/500.Equipment/500.Recipe/200.Vision_Info/Vision_Info_Recipe.cs   |   26 
 SHARP_CLAS_UI/500.Equipment/Equipment.cs                                       |   21 
 SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Define.cs             |   22 
 SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.Designer.cs                          |  236 +++++++
 SHARP_CLAS_UI/500.Equipment/700.Unit/300.After/AoiStage.cs                     |    4 
 SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs             |  854 +++++++++++++++++++++++++---
 SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.cs                                   |   60 ++
 SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Client_AOI.cs                |   84 ++
 SHARP_CLAS_UI/500.Equipment/700.Unit/Base/Handler.cs                           |   58 +
 SHARP_CLAS_UI/500.Equipment/400.Module/300.CIM/CIM_Client.cs                   |    9 
 18 files changed, 1,533 insertions(+), 198 deletions(-)

diff --git a/SHARP_CLAS_UI/100.Screen/Form_Main.cs b/SHARP_CLAS_UI/100.Screen/Form_Main.cs
index 99c8b9a..b9854f8 100644
--- a/SHARP_CLAS_UI/100.Screen/Form_Main.cs
+++ b/SHARP_CLAS_UI/100.Screen/Form_Main.cs
@@ -22,7 +22,8 @@
         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)
             {
diff --git a/SHARP_CLAS_UI/100.Screen/Form_Parameter_System.Designer.cs b/SHARP_CLAS_UI/100.Screen/Form_Parameter_System.Designer.cs
index 7971e54..33e2ced 100644
--- a/SHARP_CLAS_UI/100.Screen/Form_Parameter_System.Designer.cs
+++ b/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;
     }
 }
\ No newline at end of file
diff --git a/SHARP_CLAS_UI/100.Screen/Form_Parameter_System.cs b/SHARP_CLAS_UI/100.Screen/Form_Parameter_System.cs
index e40b7ee..86ead03 100644
--- a/SHARP_CLAS_UI/100.Screen/Form_Parameter_System.cs
+++ b/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;
@@ -331,12 +340,15 @@
 
                 btn_Measurement_Use.Text = resLanguage.USE;
                 btn_Measurement_Notuse.Text = resLanguage.NOT_USE;
-
+                
                 btn_Ablation_Use.Text = resLanguage.USE;
                 btn_Ablation_Notuse.Text = resLanguage.NOT_USE;
 
                 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;
+                    }
             }
         }
     }
diff --git a/SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.Designer.cs b/SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.Designer.cs
index 33373ab..7d3979d 100644
--- a/SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.Designer.cs
+++ b/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;
     }
 }
\ No newline at end of file
diff --git a/SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.cs b/SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.cs
index 1fd29db..6b39340 100644
--- a/SHARP_CLAS_UI/100.Screen/Form_Recipe_Type.cs
+++ b/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;
@@ -1871,6 +1911,15 @@
             tb_AOI_Mark4_Y.Text = cur_vision_info_recipe.AOI_Mark4_Y.ToString();
 
             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();
@@ -1994,7 +2043,16 @@
             tb_AOI_Mark3_Y.BackColor = cur_vision_info_recipe.AOI_Mark3_Y == recipe.AOI_Mark3_Y ? Color.White : Color.Red;
             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;
diff --git a/SHARP_CLAS_UI/500.Equipment/100.Memory_Address/Memory_Address.cs b/SHARP_CLAS_UI/500.Equipment/100.Memory_Address/Memory_Address.cs
index 422dbc6..89b6922 100644
--- a/SHARP_CLAS_UI/500.Equipment/100.Memory_Address/Memory_Address.cs
+++ b/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);
 
diff --git a/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Client_AOI.cs b/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Client_AOI.cs
index 1b67dbb..4dc7cad 100644
--- a/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Client_AOI.cs
+++ b/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>
diff --git a/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Control.cs b/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Control.cs
index c615bca..ad858db 100644
--- a/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Control.cs
+++ b/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];
diff --git a/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Define.cs b/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Define.cs
index 17964fb..413fba8 100644
--- a/SHARP_CLAS_UI/500.Equipment/400.Module/000.Vision/Vision_Define.cs
+++ b/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; }
diff --git a/SHARP_CLAS_UI/500.Equipment/400.Module/300.CIM/CIM_Client.cs b/SHARP_CLAS_UI/500.Equipment/400.Module/300.CIM/CIM_Client.cs
index b661511..8609d98 100644
--- a/SHARP_CLAS_UI/500.Equipment/400.Module/300.CIM/CIM_Client.cs
+++ b/SHARP_CLAS_UI/500.Equipment/400.Module/300.CIM/CIM_Client.cs
@@ -578,12 +578,7 @@
             string data_17 = info.Measurement_Result ? string.Empty : $"{(int)(En_Judgement_Reason.Ng):d7}";
 
             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)
diff --git a/SHARP_CLAS_UI/500.Equipment/500.Recipe/200.Vision_Info/Vision_Info_Recipe.cs b/SHARP_CLAS_UI/500.Equipment/500.Recipe/200.Vision_Info/Vision_Info_Recipe.cs
index 7a54b92..ba4a06d 100644
--- a/SHARP_CLAS_UI/500.Equipment/500.Recipe/200.Vision_Info/Vision_Info_Recipe.cs
+++ b/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;
diff --git a/SHARP_CLAS_UI/500.Equipment/600.Info/000.Panel_Info/Panel_Info.cs b/SHARP_CLAS_UI/500.Equipment/600.Info/000.Panel_Info/Panel_Info.cs
index 5e2e6b5..284caf7 100644
--- a/SHARP_CLAS_UI/500.Equipment/600.Info/000.Panel_Info/Panel_Info.cs
+++ b/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; }
diff --git a/SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Mode.cs b/SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Mode.cs
index 698c075..448a60f 100644
--- a/SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Mode.cs
+++ b/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;
diff --git a/SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Setting.cs b/SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Setting.cs
index 4c6af3a..dd6be6d 100644
--- a/SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Setting.cs
+++ b/SHARP_CLAS_UI/500.Equipment/600.Info/200.System_Parameter/Parameter_Setting.cs
@@ -38,8 +38,10 @@
         public double Stage_2_2_Power_Offset { get; set; }
 
         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;
         }
diff --git a/SHARP_CLAS_UI/500.Equipment/700.Unit/300.After/AoiStage.cs b/SHARP_CLAS_UI/500.Equipment/700.Unit/300.After/AoiStage.cs
index e3cff38..e6916ec 100644
--- a/SHARP_CLAS_UI/500.Equipment/700.Unit/300.After/AoiStage.cs
+++ b/SHARP_CLAS_UI/500.Equipment/700.Unit/300.After/AoiStage.cs
@@ -61,7 +61,7 @@
                 }
             }
         }
-        
+
         public bool IsMotorT1LoadPosition
         {
             get
@@ -784,7 +784,7 @@
                     }
             }
         }
-        
+
         public void Seq_Stage1Step()
         {
             switch (_stage1Step)
diff --git a/SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs b/SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs
index 0e68f2b..7c20ed7 100644
--- a/SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs
+++ b/SHARP_CLAS_UI/500.Equipment/700.Unit/400.Unloader/ULD_Handler_1.cs
@@ -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)
                             {
-                                if (equipment.cim_mode == En_Cim_Mode.Online)
+                                //AOI �셿猷�. -> Width meausrement �뿬湲곗뿉 異붽� �빐�빞 �맆�벏..?
+
+                                if (equipment.Mode.Width_Measurement_Skip || equipment.WidthMeasurementCount < equipment.Setting.Width_Measurement_Count)
                                 {
-                                    Step = UnloaderHandler1Steps.S4600_PANEL_LEFT_CIM_SEND;
+                                    equipment.WidthMeasurementCount = equipment.WidthMeasurementCount + 1;
+
+                                    if (equipment.cim_mode == En_Cim_Mode.Online)
+                                    {
+                                        Step = UnloaderHandler1Steps.S4800_PANEL_LEFT_CIM_SEND;
+                                    }
+                                    else
+                                    {
+                                        Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
+                                    }
                                 }
                                 else
                                 {
-                                    Step = UnloaderHandler1Steps.S4999_MEASUREMENT_END;
+                                    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();
diff --git a/SHARP_CLAS_UI/500.Equipment/700.Unit/Base/Handler.cs b/SHARP_CLAS_UI/500.Equipment/700.Unit/Base/Handler.cs
index 7aec7d1..31fd863 100644
--- a/SHARP_CLAS_UI/500.Equipment/700.Unit/Base/Handler.cs
+++ b/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 ============================
diff --git a/SHARP_CLAS_UI/500.Equipment/Equipment.cs b/SHARP_CLAS_UI/500.Equipment/Equipment.cs
index e05e9b7..d7af1b8 100644
--- a/SHARP_CLAS_UI/500.Equipment/Equipment.cs
+++ b/SHARP_CLAS_UI/500.Equipment/Equipment.cs
@@ -366,7 +366,24 @@
                 sm.Set_Value(Process_Memory_Address.ULD_Tray_Ng_Count, value);
             }
         }
-        
+
+        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

--
Gitblit v1.9.3