From 0468353b5e2265935846b299afc38bb34ae23e24 Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期一, 19 一月 2026 16:49:49 +0800
Subject: [PATCH] 完善运动控制参数存储以及加载

---
 LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.cs          |  159 +++--
 LB_SmartVision/VisionForm.cs                                                     |   60 +
 LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.cs                |  156 +++++
 LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.Designer.cs       |  883 +++++++++++++++--------------
 LB_SmartVisionCommon/UserManager.cs                                              |   33 
 LB_SmartVision/LB_SmartVision.csproj                                             |    1 
 LB_SmartVision/CSV/CsvDataHelperRecordProductData.cs                             |  110 +++
 LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorsEditPage.cs             |   10 
 LB_SmartVision/CSV/CsvRecordProductDataMap.cs                                    |   25 
 LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.resx              |    2 
 LB_SmartVision/Forms/Pages/MotionControlPage/RecordMotionControlData.cs          |   93 +++
 LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.cs          |  119 ++-
 LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs |   79 +-
 LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.Designer.cs |    8 
 LB_SmartVision/SQL/DatabaseRecordProductDataHelper.cs                            |    2 
 LB_SmartVision/GlobalVar.cs                                                      |   11 
 LB_SmartVision/VisionForm.Designer.cs                                            |   32 
 17 files changed, 1,161 insertions(+), 622 deletions(-)

diff --git a/LB_SmartVision/CSV/CsvDataHelperRecordProductData.cs b/LB_SmartVision/CSV/CsvDataHelperRecordProductData.cs
new file mode 100644
index 0000000..813ccb6
--- /dev/null
+++ b/LB_SmartVision/CSV/CsvDataHelperRecordProductData.cs
@@ -0,0 +1,110 @@
+锘縰sing LB_SmartVision.SQL;
+using LB_SmartVisionCommon;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using CsvHelper;
+namespace LB_SmartVision.CSV
+{
+    internal class CsvDataHelperRecordProductData
+    {
+        /// <summary>
+        /// 灏哛ecordProductDatas瀛楀吀淇濆瓨鍒癈SV鏂囦欢
+        /// </summary>
+        /// <param name="filePath">CSV鏂囦欢璺緞</param>
+        /// <param name="recordProductDatas">瑕佷繚瀛樼殑鏁版嵁瀛楀吀</param>
+        public static void SaveToCsv(string filePath, List<RecordProductData> recordProductDatas)
+        {
+            try
+            {
+                using (var writer = new StreamWriter(filePath))
+                using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+                {
+                    csv.Context.RegisterClassMap<CsvRecordProductDataMap>();
+                    // 灏嗗瓧鍏歌浆鎹负CsvRecord鍒楄〃
+                    var records = recordProductDatas.Select(kvp => new CsvRecordProductData
+                    {
+                        //DictionaryKey = kvp.Key,
+                        ProductName = kvp.ProductName,
+                        ProductSN = kvp.ProductSN,
+                        InspectionOperator = kvp.InspectionOperator,
+                        NGType = kvp.NGType,
+                        NGSize = kvp.NGSize,
+                        DetectionTime = kvp.DetectionTime,
+                        CameraInspection = kvp.CameraInspection,
+
+                    }).ToList();
+                    for (int i = 0; i < records.Count; i++)
+                    {
+                        AsyncLogHelper.Warn("鐗╂枡鍙锋垨浜у搧鍚嶇О锛�" + records[i].ProductName + "\r\n" +
+                     "锛屼骇鍝丼N鍙凤細" + records[i].ProductSN + "\r\n" +
+                     "锛屾娴嬩綔涓氬憳锛�" + records[i].InspectionOperator + "\r\n" +
+                     "锛孨G绫诲瀷锛�" + records[i].NGType + " mm" + "\r\n" +
+                     "锛孨G澶у皬锛�" + records[i].NGSize + " mm" + "\r\n" +
+                     "锛屾娴嬫椂闂达細" + records[i].DetectionTime + "\r\n" +
+                     "锛屾娴嬬浉鏈猴細" + records[i].CameraInspection + " mm" + "\r\n" );
+
+                    }
+                    csv.WriteRecords(records);
+                }
+                LogHelper.Info($"鏁版嵁鎴愬姛淇濆瓨鍒�: {filePath}");
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error($"淇濆瓨CSV鏂囦欢鏃跺嚭閿�: {ex.Message}");
+                //throw;
+            }
+            //Task.Factory.StartNew(() =>
+            //{
+            //});
+        }
+        /// <summary>
+        /// 浠嶤SV鏂囦欢璇诲彇鏁版嵁鍒癛ecordProductDatas瀛楀吀
+        /// </summary>
+        /// <param name="filePath">CSV鏂囦欢璺緞</param>
+        /// <returns>璇诲彇鐨勬暟鎹瓧鍏�</returns>
+        public static List<RecordProductData> LoadFromCsv(string filePath)
+        {
+            var recordProductDatas = new List<RecordProductData>();
+            try
+            {
+                if (!File.Exists(filePath))
+                {
+                    LogHelper.Info($"鏂囦欢涓嶅瓨鍦�: {filePath}");
+                    return recordProductDatas;
+                }
+                using (var reader = new StreamReader(filePath))
+                using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+                {
+                    csv.Context.RegisterClassMap<CsvRecordProductDataMap>();
+                    var records = csv.GetRecords<CsvRecordProductData>();
+                    foreach (var record in records)
+                    {
+                        var productData = new RecordProductData
+                        {
+                            ProductName = record.ProductName,
+                            ProductSN = record.ProductSN,
+                            InspectionOperator = record.InspectionOperator,
+                            NGType = record.NGType,
+                            NGSize = record.NGSize,
+                            DetectionTime = record.DetectionTime,
+                            CameraInspection = record.CameraInspection,
+                        };
+                        recordProductDatas.Add(productData);
+                    }
+                }
+                LogHelper.Info($"浠� {filePath} 鎴愬姛璇诲彇 {recordProductDatas.Count} 鏉¤褰�");
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Error($"璇诲彇CSV鏂囦欢鏃跺嚭閿�: {ex.Message}");
+                //throw;
+            }
+            return recordProductDatas;
+        }
+
+    }
+}
diff --git a/LB_SmartVision/CSV/CsvRecordProductDataMap.cs b/LB_SmartVision/CSV/CsvRecordProductDataMap.cs
new file mode 100644
index 0000000..a954f32
--- /dev/null
+++ b/LB_SmartVision/CSV/CsvRecordProductDataMap.cs
@@ -0,0 +1,25 @@
+锘縰sing CsvHelper.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LB_SmartVision.CSV
+{
+    internal class CsvRecordProductDataMap:ClassMap<CsvRecordProductData>
+    {
+        public CsvRecordProductDataMap()
+        {
+            //Map(m => m.DictionaryKey).Name("璁板綍鏃堕棿");
+            Map(m => m.ProductName).Name("鐗╂枡鍙锋垨浜у搧鍚嶇О");
+            Map(m => m.ProductSN).Name("浜у搧SN鍙�");
+            Map(m => m.InspectionOperator).Name("妫�娴嬩綔涓氬憳");
+            Map(m => m.NGType).Name("NG绫诲瀷");
+            Map(m => m.NGSize).Name("NG澶у皬");
+            Map(m => m.DetectionTime).Name("妫�娴嬫椂闂�");
+            Map(m => m.CameraInspection).Name("妫�娴嬬浉鏈�");
+        }
+    }
+}
+
diff --git a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorsEditPage.cs b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorsEditPage.cs
index ad09050..3a0a804 100644
--- a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorsEditPage.cs
+++ b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorsEditPage.cs
@@ -206,6 +206,16 @@
 
                 if (GlobalVar.dicCommunicators.ContainsKey(oldName))
                     GlobalVar.dicCommunicators.TryRename(oldName, newName);
+                foreach (var item in GlobalVar.dicMotionControlData.Keys)
+                {
+                    foreach (var item1 in GlobalVar.dicMotionControlData[item].Keys)
+                    {
+                        if (GlobalVar.dicMotionControlData[item][item1].CommunicatorsName.Contains(oldName))
+                        {
+                            GlobalVar.dicMotionControlData[item][item1].CommunicatorsName = newName;
+                        }
+                    }
+                }
 
                 flow.Refresh();
             }
diff --git a/LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.Designer.cs b/LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.Designer.cs
index 4796997..f4c14e7 100644
--- a/LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.Designer.cs
+++ b/LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.Designer.cs
@@ -283,14 +283,14 @@
             // 
             tableLayoutPanel4.Anchor = AnchorStyles.Top | AnchorStyles.Right;
             tableLayoutPanel4.ColumnCount = 2;
-            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
-            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
+            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.3333321F));
+            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.3333321F));
             tableLayoutPanel4.Controls.Add(btnHisDataFind, 0, 0);
             tableLayoutPanel4.Controls.Add(btnHisDataExport, 1, 0);
             tableLayoutPanel4.Location = new Point(657, 509);
             tableLayoutPanel4.Name = "tableLayoutPanel4";
             tableLayoutPanel4.RowCount = 1;
-            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
+            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
             tableLayoutPanel4.Size = new Size(200, 39);
             tableLayoutPanel4.TabIndex = 1;
             // 
@@ -312,6 +312,7 @@
             btnHisDataFind.Text = "鏌ヨ";
             btnHisDataFind.TextColor = Color.White;
             btnHisDataFind.WarningColor = Color.FromArgb(230, 162, 60);
+            btnHisDataFind.Click += btnHisDataFind_Click;
             // 
             // btnHisDataExport
             // 
@@ -341,6 +342,7 @@
             Name = "HistoricalDataEditPage";
             Size = new Size(866, 580);
             grpHisData.ResumeLayout(false);
+            grpHisData.PerformLayout();
             tableLayoutPanel1.ResumeLayout(false);
             tableLayoutPanel2.ResumeLayout(false);
             tableLayoutPanel3.ResumeLayout(false);
diff --git a/LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.cs b/LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.cs
index 28694cc..477bcfd 100644
--- a/LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.cs
+++ b/LB_SmartVision/Forms/Pages/HistoricalDataPage/HistoricalDataEditPage.cs
@@ -1,9 +1,12 @@
-锘縰sing LB_SmartVisionCommon;
+锘縰sing LB_SmartVision.CSV;
+using LB_SmartVision.SQL;
+using LB_SmartVisionCommon;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
+using System.Globalization;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -14,9 +17,13 @@
     public partial class HistoricalDataEditPage : UserControl
     {
         public Action<string, LogInfoType> LogInfo;
+        // 淇濆瓨鍘熷鏁版嵁鐨勫垪琛�
+        private List<DataGridViewRow> originalRows = new List<DataGridViewRow>();
 
         private int row2OriginalHeight;
         private int row3OriginalHeight;
+
+        List<RecordProductData> RecordProductDatas = new List<RecordProductData>();
         public HistoricalDataEditPage()
         {
             Name = "HistoricalDataEditPage";
@@ -37,30 +44,7 @@
         /// </summary>
         private void InitializeDataGridView()
         {
-            // 璁剧疆DataGridView鍒楀
-            dataGridViewHD.ColumnCount = 4;
-
-            int totalWidth = dataGridViewHD.ClientSize.Width;
-            int columnCount = dataGridViewHD.ColumnCount;
-            int columnWidth = totalWidth / columnCount;
-
-            // 璁剧疆鏈�灏忓搴�
-            int minWidth = 100; // 鏈�灏忓搴�
-            if (columnWidth < minWidth)
-            {
-                columnWidth = minWidth;
-            }
-
-            for (int i = 0; i < columnCount; i++)
-            {
-                dataGridViewHD.Columns[i].Width = columnWidth;
-            }
-
-            // 璁剧疆鍒楁爣棰�
-            dataGridViewHD.Columns[0].Name = "SN鍙�";
-            dataGridViewHD.Columns[1].Name = "鏃堕棿";
-            dataGridViewHD.Columns[2].Name = "NG绫�";
-            dataGridViewHD.Columns[3].Name = "缂洪櫡澶у皬";
+            this.dataGridViewHD.DataSource = RecordProductDatas;
 
             dataGridViewHD.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
 
@@ -151,45 +135,68 @@
         {
             dateTimePickerEnd.MinDate = dateTimePickerStart.Value;
         }
-
-        private void btnHisDataExport_Click(object sender, EventArgs e)
+        public string OpenFileForSave()
         {
-
-        }
-
-        public void SaveToCSV(string filePath, int rowIndex)
-        {
-            // 浣跨敤 StreamWriter 鏉ュ啓鍏ユ枃浠�
-            using (StreamWriter writer = new StreamWriter(filePath))
+            using (SaveFileDialog saveFileDialog = new SaveFileDialog())
             {
-                DataGridViewRow row = dataGridViewHD.Rows[rowIndex];
+                // 璁剧疆榛樿鏂囦欢鍚嶅拰鎵╁睍鍚�
+                saveFileDialog.FileName = $"鍘嗗彶鏁版嵁_{DateTime.Now:yyyyMMdd_HHmmss}";
+                saveFileDialog.DefaultExt = "xlsx";
 
-                int rowCount = 10;//10鏀逛负閲囬泦娆℃暟
+                // 璁剧疆鏂囦欢杩囨护鍣�
+                saveFileDialog.Filter = "Excel鏂囦欢 (*.xlsx)|*.xlsx|" +
+                                        "CSV鏂囦欢 (*.csv)|*.csv|" +
+                                        "鏂囨湰鏂囦欢 (*.txt)|*.txt|" +
+                                        "鎵�鏈夋枃浠� (*.*)|*.*";
 
-                writer.WriteLine("SN鍙�, 鏃堕棿, NG绫�, 缂洪櫡澶у皬");
+                saveFileDialog.Title = "閫夋嫨鏂囦欢淇濆瓨浣嶇疆";
+                saveFileDialog.RestoreDirectory = true;  // 璁颁綇涓婃鎵撳紑鐨勭洰褰�
+                saveFileDialog.OverwritePrompt = true;   // 瑕嗙洊鏃舵彁绀�
 
-                // 閬嶅巻姣忎竴琛屾暟鎹�
-                for (int i = 0; i < rowCount; i++)
+                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                 {
-                    int batchSize = 4;
-
-                    // 鍐欏叆杩欎竴鎵规鐨勬瘡涓�鍒楁暟鎹�
-                    for (int k = 0; k < batchSize; k++)
-                    {
-                        writer.Write($"{row.Cells[k].Value}");
-
-                        // 鍦ㄥ厓绱犱箣闂存坊鍔犻�楀彿锛岄櫎闈炶繖鏄渶鍚庝竴涓厓绱�
-                        if (k < batchSize - 1)
-                        {
-                            writer.Write(",");
-                        }
-                    }
-
-                    // 鍐欏叆瀹屼竴琛屽悗锛屾崲琛�
-                    writer.WriteLine();
-                    
+                    string filePathHD = saveFileDialog.FileName;
+                    return filePathHD;
                 }
             }
+
+            return null;
         }
+        private void btnHisDataExport_Click(object sender, EventArgs e)
+        {
+            CsvDataHelperRecordProductData.SaveToCsv(OpenFileForSave(), RecordProductDatas);
+        }
+        
+        private void btnHisDataFind_Click(object sender, EventArgs e)
+        {
+            
+            DateTime startDate = dateTimePickerStart.Value.Date;
+            DateTime endDate = dateTimePickerEnd.Value.Date;
+
+            switch(comboBoxSearchBasis.SelectedIndex)
+            {
+                //渚濇嵁鏃ユ湡鏌ヨ
+                case 0:
+                    RecordProductDatas = RecordProductDataRepository.GetRecordsByTimeRange(DateTime.Parse(this.dateTimePickerStart.Value.ToString()), DateTime.Parse(this.dateTimePickerEnd.Value.ToString()));
+                    break;
+                //渚濇嵁SN鍙锋煡璇�
+                case 1:
+                    if(string.IsNullOrEmpty(textBoxSN.Text))
+                    {
+                        MessageBox.Show("璇峰~鍐橲N鍙凤紒", "鎻愮ず", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+                    }
+                    else
+                    {
+                        RecordProductDatas = RecordProductDataRepository.GetRecordsByProductNumber(textBoxSN.Text);
+                    }
+                        break;
+            }
+
+            this.dataGridViewHD.DataSource = RecordProductDatas;
+            this.dataGridViewHD.AutoGenerateColumns = true;
+
+        }
+
     }
 }
+
diff --git a/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.Designer.cs b/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.Designer.cs
index 7ec2df7..d4d330c 100644
--- a/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.Designer.cs
+++ b/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.Designer.cs
@@ -30,6 +30,7 @@
         {
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MotionControlForm));
             uiGroupBoxMotionControl = new GroupBox();
+            panel1 = new Panel();
             tableLayoutPanel3 = new TableLayoutPanel();
             tableLayoutPanel6 = new TableLayoutPanel();
             uiButtonCloseSoftGrab = new Button();
@@ -45,6 +46,12 @@
             textBoxAngSpeed = new TextBox();
             labelAngSpeed = new Label();
             textBoxPointSpeed = new TextBox();
+            groupBoxPulseMotionSpeedAddress = new GroupBox();
+            textBoxPulseMotionSpeedAddress = new TextBox();
+            groupBoxAngularVelocityAddress = new GroupBox();
+            textBoxAngularVelocityAddress = new TextBox();
+            groupBoxCom = new GroupBox();
+            cmbCom = new Sunny.UI.UIComboBox();
             tableLayoutPanel2 = new TableLayoutPanel();
             uiButtonIncreasePitchAngle = new Button();
             groupBoxPitchAnglePosition = new GroupBox();
@@ -62,6 +69,30 @@
             uiButtonDecreaseX = new Button();
             groupBoxXPosition = new GroupBox();
             textBoxXPosition = new TextBox();
+            groupBoxYVarAddress = new GroupBox();
+            textBoxYVarAddress = new TextBox();
+            groupBoxXVarAddress = new GroupBox();
+            textBoxXVarAddress = new TextBox();
+            groupBoxZVarAddress = new GroupBox();
+            textBoxZVarAddress = new TextBox();
+            groupBoxWVarAddress = new GroupBox();
+            textBoxWVarAddress = new TextBox();
+            groupBoxYDetectLocation = new GroupBox();
+            textBoxYDetectLocation = new TextBox();
+            groupBoxZDetectLocation = new GroupBox();
+            textBoxZDetectLocation = new TextBox();
+            groupBoxWDetectLocation = new GroupBox();
+            textBoxWDetectLocation = new TextBox();
+            groupBoxXDetectLocation = new GroupBox();
+            textBoxXDetectLocation = new TextBox();
+            groupBoxXOriginalLocation = new GroupBox();
+            textBoxXOriginalLocation = new TextBox();
+            groupBoxYOriginalLocation = new GroupBox();
+            textBoxYOriginalLocation = new TextBox();
+            groupBoxZOriginalLocation = new GroupBox();
+            textBoxZOriginalLocation = new TextBox();
+            groupBoxWOriginalLocation = new GroupBox();
+            textBoxWOriginalLocation = new TextBox();
             tableLayoutPanel1 = new TableLayoutPanel();
             textBoxSN = new TextBox();
             uiMarkLabelSN = new Label();
@@ -72,45 +103,32 @@
             uiSplitContainer1 = new SplitContainer();
             themeForm1 = new ReaLTaiizor.Forms.ThemeForm();
             controlBox1 = new ReaLTaiizor.Controls.ControlBox();
-            panel1 = new Panel();
-            groupBoxXVarAddress = new GroupBox();
-            textBoxXVarAddress = new TextBox();
-            groupBoxYVarAddress = new GroupBox();
-            textBoxYVarAddress = new TextBox();
-            groupBoxZVarAddress = new GroupBox();
-            textBoxZVarAddress = new TextBox();
-            groupBoxWVarAddress = new GroupBox();
-            textBoxWVarAddress = new TextBox();
-            groupBoxXDetectLocation = new GroupBox();
-            textBoxXDetectLocation = new TextBox();
-            groupBoxYDetectLocation = new GroupBox();
-            textBoxYDetectLocation = new TextBox();
-            groupBoxZDetectLocation = new GroupBox();
-            textBoxZDetectLocation = new TextBox();
-            groupBoxWDetectLocation = new GroupBox();
-            textBoxWDetectLocation = new TextBox();
-            groupBoxXOriginalLocation = new GroupBox();
-            textBoxXOriginalLocation = new TextBox();
-            groupBoxYOriginalLocation = new GroupBox();
-            textBoxYOriginalLocation = new TextBox();
-            groupBoxZOriginalLocation = new GroupBox();
-            textBoxZOriginalLocation = new TextBox();
-            groupBoxWOriginalLocation = new GroupBox();
-            textBoxWOriginalLocation = new TextBox();
-            groupBoxPulseMotionSpeedAddress = new GroupBox();
-            textBoxPulseMotionSpeedAddress = new TextBox();
-            groupBoxAngularVelocityAddress = new GroupBox();
-            textBoxAngularVelocityAddress = new TextBox();
             uiGroupBoxMotionControl.SuspendLayout();
+            panel1.SuspendLayout();
             tableLayoutPanel3.SuspendLayout();
             tableLayoutPanel6.SuspendLayout();
             tableLayoutPanel5.SuspendLayout();
             tableLayoutPanel4.SuspendLayout();
+            groupBoxPulseMotionSpeedAddress.SuspendLayout();
+            groupBoxAngularVelocityAddress.SuspendLayout();
+            groupBoxCom.SuspendLayout();
             tableLayoutPanel2.SuspendLayout();
             groupBoxPitchAnglePosition.SuspendLayout();
             groupBoxZPosition.SuspendLayout();
             groupBoxYPosition.SuspendLayout();
             groupBoxXPosition.SuspendLayout();
+            groupBoxYVarAddress.SuspendLayout();
+            groupBoxXVarAddress.SuspendLayout();
+            groupBoxZVarAddress.SuspendLayout();
+            groupBoxWVarAddress.SuspendLayout();
+            groupBoxYDetectLocation.SuspendLayout();
+            groupBoxZDetectLocation.SuspendLayout();
+            groupBoxWDetectLocation.SuspendLayout();
+            groupBoxXDetectLocation.SuspendLayout();
+            groupBoxXOriginalLocation.SuspendLayout();
+            groupBoxYOriginalLocation.SuspendLayout();
+            groupBoxZOriginalLocation.SuspendLayout();
+            groupBoxWOriginalLocation.SuspendLayout();
             tableLayoutPanel1.SuspendLayout();
             tableLayoutPanel7.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)uiSplitContainer1).BeginInit();
@@ -118,21 +136,6 @@
             uiSplitContainer1.Panel2.SuspendLayout();
             uiSplitContainer1.SuspendLayout();
             themeForm1.SuspendLayout();
-            panel1.SuspendLayout();
-            groupBoxXVarAddress.SuspendLayout();
-            groupBoxYVarAddress.SuspendLayout();
-            groupBoxZVarAddress.SuspendLayout();
-            groupBoxWVarAddress.SuspendLayout();
-            groupBoxXDetectLocation.SuspendLayout();
-            groupBoxYDetectLocation.SuspendLayout();
-            groupBoxZDetectLocation.SuspendLayout();
-            groupBoxWDetectLocation.SuspendLayout();
-            groupBoxXOriginalLocation.SuspendLayout();
-            groupBoxYOriginalLocation.SuspendLayout();
-            groupBoxZOriginalLocation.SuspendLayout();
-            groupBoxWOriginalLocation.SuspendLayout();
-            groupBoxPulseMotionSpeedAddress.SuspendLayout();
-            groupBoxAngularVelocityAddress.SuspendLayout();
             SuspendLayout();
             // 
             // uiGroupBoxMotionControl
@@ -150,6 +153,16 @@
             uiGroupBoxMotionControl.TabIndex = 18;
             uiGroupBoxMotionControl.TabStop = false;
             uiGroupBoxMotionControl.Text = "杩愬姩鎺у埗鍙傛暟";
+            // 
+            // panel1
+            // 
+            panel1.Controls.Add(tableLayoutPanel3);
+            panel1.Dock = DockStyle.Fill;
+            panel1.Location = new Point(0, 23);
+            panel1.Name = "panel1";
+            panel1.Padding = new Padding(0, 3, 0, 0);
+            panel1.Size = new Size(580, 661);
+            panel1.TabIndex = 1;
             // 
             // tableLayoutPanel3
             // 
@@ -245,7 +258,6 @@
             tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 160F));
             tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 120F));
             tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 120F));
-            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 20F));
             tableLayoutPanel4.Controls.Add(labelPointSpeed, 0, 0);
             tableLayoutPanel4.Controls.Add(textBoxAngleNow, 1, 3);
             tableLayoutPanel4.Controls.Add(labelAngleNow, 0, 3);
@@ -256,14 +268,16 @@
             tableLayoutPanel4.Controls.Add(textBoxPointSpeed, 1, 0);
             tableLayoutPanel4.Controls.Add(groupBoxPulseMotionSpeedAddress, 2, 0);
             tableLayoutPanel4.Controls.Add(groupBoxAngularVelocityAddress, 2, 1);
+            tableLayoutPanel4.Controls.Add(groupBoxCom, 0, 4);
             tableLayoutPanel4.Dock = DockStyle.Fill;
             tableLayoutPanel4.Location = new Point(3, 371);
             tableLayoutPanel4.Name = "tableLayoutPanel4";
-            tableLayoutPanel4.RowCount = 5;
+            tableLayoutPanel4.RowCount = 6;
             tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Absolute, 45F));
             tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Absolute, 45F));
             tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Absolute, 45F));
             tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Absolute, 45F));
+            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Absolute, 60F));
             tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
             tableLayoutPanel4.Size = new Size(574, 284);
             tableLayoutPanel4.TabIndex = 2;
@@ -361,6 +375,88 @@
             textBoxPointSpeed.TextChanged += textBoxPointSpeed_TextChanged;
             textBoxPointSpeed.KeyDown += textBoxXPosition_KeyDown;
             textBoxPointSpeed.KeyPress += textBoxXPosition_KeyPress;
+            // 
+            // groupBoxPulseMotionSpeedAddress
+            // 
+            groupBoxPulseMotionSpeedAddress.Controls.Add(textBoxPulseMotionSpeedAddress);
+            groupBoxPulseMotionSpeedAddress.Dock = DockStyle.Fill;
+            groupBoxPulseMotionSpeedAddress.Font = new Font("瀹嬩綋", 8F);
+            groupBoxPulseMotionSpeedAddress.ForeColor = Color.White;
+            groupBoxPulseMotionSpeedAddress.Location = new Point(323, 3);
+            groupBoxPulseMotionSpeedAddress.Name = "groupBoxPulseMotionSpeedAddress";
+            groupBoxPulseMotionSpeedAddress.Size = new Size(114, 39);
+            groupBoxPulseMotionSpeedAddress.TabIndex = 30;
+            groupBoxPulseMotionSpeedAddress.TabStop = false;
+            groupBoxPulseMotionSpeedAddress.Text = "鐐归�熷害鍦板潃";
+            // 
+            // textBoxPulseMotionSpeedAddress
+            // 
+            textBoxPulseMotionSpeedAddress.Dock = DockStyle.Bottom;
+            textBoxPulseMotionSpeedAddress.Font = new Font("瀹嬩綋", 10F);
+            textBoxPulseMotionSpeedAddress.Location = new Point(3, 16);
+            textBoxPulseMotionSpeedAddress.Multiline = true;
+            textBoxPulseMotionSpeedAddress.Name = "textBoxPulseMotionSpeedAddress";
+            textBoxPulseMotionSpeedAddress.Size = new Size(108, 20);
+            textBoxPulseMotionSpeedAddress.TabIndex = 12;
+            textBoxPulseMotionSpeedAddress.Text = "1";
+            // 
+            // groupBoxAngularVelocityAddress
+            // 
+            groupBoxAngularVelocityAddress.Controls.Add(textBoxAngularVelocityAddress);
+            groupBoxAngularVelocityAddress.Dock = DockStyle.Fill;
+            groupBoxAngularVelocityAddress.Font = new Font("瀹嬩綋", 8F);
+            groupBoxAngularVelocityAddress.ForeColor = Color.White;
+            groupBoxAngularVelocityAddress.Location = new Point(323, 48);
+            groupBoxAngularVelocityAddress.Name = "groupBoxAngularVelocityAddress";
+            groupBoxAngularVelocityAddress.Size = new Size(114, 39);
+            groupBoxAngularVelocityAddress.TabIndex = 30;
+            groupBoxAngularVelocityAddress.TabStop = false;
+            groupBoxAngularVelocityAddress.Text = "瑙掗�熷害鍦板潃";
+            // 
+            // textBoxAngularVelocityAddress
+            // 
+            textBoxAngularVelocityAddress.Dock = DockStyle.Bottom;
+            textBoxAngularVelocityAddress.Font = new Font("瀹嬩綋", 10F);
+            textBoxAngularVelocityAddress.Location = new Point(3, 16);
+            textBoxAngularVelocityAddress.Multiline = true;
+            textBoxAngularVelocityAddress.Name = "textBoxAngularVelocityAddress";
+            textBoxAngularVelocityAddress.Size = new Size(108, 20);
+            textBoxAngularVelocityAddress.TabIndex = 12;
+            textBoxAngularVelocityAddress.Text = "1";
+            // 
+            // groupBoxCom
+            // 
+            groupBoxCom.Controls.Add(cmbCom);
+            groupBoxCom.Dock = DockStyle.Fill;
+            groupBoxCom.Font = new Font("瀹嬩綋", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
+            groupBoxCom.ForeColor = Color.White;
+            groupBoxCom.Location = new Point(3, 183);
+            groupBoxCom.Name = "groupBoxCom";
+            groupBoxCom.Size = new Size(154, 54);
+            groupBoxCom.TabIndex = 31;
+            groupBoxCom.TabStop = false;
+            groupBoxCom.Text = "閫氳";
+            // 
+            // cmbCom
+            // 
+            cmbCom.DataSource = null;
+            cmbCom.Dock = DockStyle.Fill;
+            cmbCom.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList;
+            cmbCom.FillColor = Color.White;
+            cmbCom.Font = new Font("瀹嬩綋", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
+            cmbCom.ItemHoverColor = Color.FromArgb(155, 200, 255);
+            cmbCom.ItemSelectForeColor = Color.FromArgb(235, 243, 255);
+            cmbCom.Location = new Point(3, 21);
+            cmbCom.Margin = new Padding(4, 5, 4, 5);
+            cmbCom.MinimumSize = new Size(63, 0);
+            cmbCom.Name = "cmbCom";
+            cmbCom.Padding = new Padding(0, 0, 30, 2);
+            cmbCom.Size = new Size(148, 30);
+            cmbCom.SymbolSize = 24;
+            cmbCom.TabIndex = 0;
+            cmbCom.TextAlignment = ContentAlignment.MiddleLeft;
+            cmbCom.Watermark = "";
+            cmbCom.SelectedIndexChanged += cmbCom_SelectedIndexChanged;
             // 
             // tableLayoutPanel2
             // 
@@ -614,6 +710,294 @@
             textBoxXPosition.KeyDown += textBoxXPosition_KeyDown;
             textBoxXPosition.KeyPress += textBoxXPosition_KeyPress;
             // 
+            // groupBoxYVarAddress
+            // 
+            groupBoxYVarAddress.Controls.Add(textBoxYVarAddress);
+            groupBoxYVarAddress.Dock = DockStyle.Fill;
+            groupBoxYVarAddress.Font = new Font("瀹嬩綋", 8F);
+            groupBoxYVarAddress.ForeColor = Color.White;
+            groupBoxYVarAddress.Location = new Point(193, 48);
+            groupBoxYVarAddress.Name = "groupBoxYVarAddress";
+            groupBoxYVarAddress.Size = new Size(122, 39);
+            groupBoxYVarAddress.TabIndex = 29;
+            groupBoxYVarAddress.TabStop = false;
+            groupBoxYVarAddress.Text = "Y杞村彉閲忓湴鍧�";
+            // 
+            // textBoxYVarAddress
+            // 
+            textBoxYVarAddress.Dock = DockStyle.Bottom;
+            textBoxYVarAddress.Font = new Font("瀹嬩綋", 10F);
+            textBoxYVarAddress.Location = new Point(3, 16);
+            textBoxYVarAddress.Multiline = true;
+            textBoxYVarAddress.Name = "textBoxYVarAddress";
+            textBoxYVarAddress.Size = new Size(116, 20);
+            textBoxYVarAddress.TabIndex = 12;
+            textBoxYVarAddress.Text = "1";
+            // 
+            // groupBoxXVarAddress
+            // 
+            groupBoxXVarAddress.Controls.Add(textBoxXVarAddress);
+            groupBoxXVarAddress.Dock = DockStyle.Fill;
+            groupBoxXVarAddress.Font = new Font("瀹嬩綋", 8F);
+            groupBoxXVarAddress.ForeColor = Color.White;
+            groupBoxXVarAddress.Location = new Point(193, 3);
+            groupBoxXVarAddress.Name = "groupBoxXVarAddress";
+            groupBoxXVarAddress.Size = new Size(122, 39);
+            groupBoxXVarAddress.TabIndex = 28;
+            groupBoxXVarAddress.TabStop = false;
+            groupBoxXVarAddress.Text = "X杞村彉閲忓湴鍧�";
+            // 
+            // textBoxXVarAddress
+            // 
+            textBoxXVarAddress.Dock = DockStyle.Bottom;
+            textBoxXVarAddress.Font = new Font("瀹嬩綋", 10F);
+            textBoxXVarAddress.Location = new Point(3, 16);
+            textBoxXVarAddress.Multiline = true;
+            textBoxXVarAddress.Name = "textBoxXVarAddress";
+            textBoxXVarAddress.Size = new Size(116, 20);
+            textBoxXVarAddress.TabIndex = 12;
+            textBoxXVarAddress.Text = "1";
+            // 
+            // groupBoxZVarAddress
+            // 
+            groupBoxZVarAddress.Controls.Add(textBoxZVarAddress);
+            groupBoxZVarAddress.Dock = DockStyle.Fill;
+            groupBoxZVarAddress.Font = new Font("瀹嬩綋", 8F);
+            groupBoxZVarAddress.ForeColor = Color.White;
+            groupBoxZVarAddress.Location = new Point(193, 93);
+            groupBoxZVarAddress.Name = "groupBoxZVarAddress";
+            groupBoxZVarAddress.Size = new Size(122, 39);
+            groupBoxZVarAddress.TabIndex = 29;
+            groupBoxZVarAddress.TabStop = false;
+            groupBoxZVarAddress.Text = "Z杞村彉閲忓湴鍧�";
+            // 
+            // textBoxZVarAddress
+            // 
+            textBoxZVarAddress.Dock = DockStyle.Bottom;
+            textBoxZVarAddress.Font = new Font("瀹嬩綋", 10F);
+            textBoxZVarAddress.Location = new Point(3, 16);
+            textBoxZVarAddress.Multiline = true;
+            textBoxZVarAddress.Name = "textBoxZVarAddress";
+            textBoxZVarAddress.Size = new Size(116, 20);
+            textBoxZVarAddress.TabIndex = 12;
+            textBoxZVarAddress.Text = "1";
+            // 
+            // groupBoxWVarAddress
+            // 
+            groupBoxWVarAddress.Controls.Add(textBoxWVarAddress);
+            groupBoxWVarAddress.Dock = DockStyle.Fill;
+            groupBoxWVarAddress.Font = new Font("瀹嬩綋", 8F);
+            groupBoxWVarAddress.ForeColor = Color.White;
+            groupBoxWVarAddress.Location = new Point(193, 138);
+            groupBoxWVarAddress.Name = "groupBoxWVarAddress";
+            groupBoxWVarAddress.Size = new Size(122, 41);
+            groupBoxWVarAddress.TabIndex = 29;
+            groupBoxWVarAddress.TabStop = false;
+            groupBoxWVarAddress.Text = "W杞村彉閲忓湴鍧�";
+            // 
+            // textBoxWVarAddress
+            // 
+            textBoxWVarAddress.Dock = DockStyle.Bottom;
+            textBoxWVarAddress.Font = new Font("瀹嬩綋", 10F);
+            textBoxWVarAddress.Location = new Point(3, 18);
+            textBoxWVarAddress.Multiline = true;
+            textBoxWVarAddress.Name = "textBoxWVarAddress";
+            textBoxWVarAddress.Size = new Size(116, 20);
+            textBoxWVarAddress.TabIndex = 12;
+            textBoxWVarAddress.Text = "1";
+            // 
+            // groupBoxYDetectLocation
+            // 
+            groupBoxYDetectLocation.Controls.Add(textBoxYDetectLocation);
+            groupBoxYDetectLocation.Dock = DockStyle.Fill;
+            groupBoxYDetectLocation.Font = new Font("瀹嬩綋", 8F);
+            groupBoxYDetectLocation.ForeColor = Color.White;
+            groupBoxYDetectLocation.Location = new Point(321, 48);
+            groupBoxYDetectLocation.Name = "groupBoxYDetectLocation";
+            groupBoxYDetectLocation.Size = new Size(122, 39);
+            groupBoxYDetectLocation.TabIndex = 30;
+            groupBoxYDetectLocation.TabStop = false;
+            groupBoxYDetectLocation.Text = "Y杞存娴嬩綅缃�";
+            // 
+            // textBoxYDetectLocation
+            // 
+            textBoxYDetectLocation.Dock = DockStyle.Bottom;
+            textBoxYDetectLocation.Font = new Font("瀹嬩綋", 10F);
+            textBoxYDetectLocation.Location = new Point(3, 16);
+            textBoxYDetectLocation.Multiline = true;
+            textBoxYDetectLocation.Name = "textBoxYDetectLocation";
+            textBoxYDetectLocation.Size = new Size(116, 20);
+            textBoxYDetectLocation.TabIndex = 12;
+            textBoxYDetectLocation.Text = "1";
+            // 
+            // groupBoxZDetectLocation
+            // 
+            groupBoxZDetectLocation.Controls.Add(textBoxZDetectLocation);
+            groupBoxZDetectLocation.Dock = DockStyle.Fill;
+            groupBoxZDetectLocation.Font = new Font("瀹嬩綋", 8F);
+            groupBoxZDetectLocation.ForeColor = Color.White;
+            groupBoxZDetectLocation.Location = new Point(321, 93);
+            groupBoxZDetectLocation.Name = "groupBoxZDetectLocation";
+            groupBoxZDetectLocation.Size = new Size(122, 39);
+            groupBoxZDetectLocation.TabIndex = 30;
+            groupBoxZDetectLocation.TabStop = false;
+            groupBoxZDetectLocation.Text = "Z杞存娴嬩綅缃�";
+            // 
+            // textBoxZDetectLocation
+            // 
+            textBoxZDetectLocation.Dock = DockStyle.Bottom;
+            textBoxZDetectLocation.Font = new Font("瀹嬩綋", 10F);
+            textBoxZDetectLocation.Location = new Point(3, 16);
+            textBoxZDetectLocation.Multiline = true;
+            textBoxZDetectLocation.Name = "textBoxZDetectLocation";
+            textBoxZDetectLocation.Size = new Size(116, 20);
+            textBoxZDetectLocation.TabIndex = 12;
+            textBoxZDetectLocation.Text = "1";
+            // 
+            // groupBoxWDetectLocation
+            // 
+            groupBoxWDetectLocation.Controls.Add(textBoxWDetectLocation);
+            groupBoxWDetectLocation.Dock = DockStyle.Fill;
+            groupBoxWDetectLocation.Font = new Font("瀹嬩綋", 8F);
+            groupBoxWDetectLocation.ForeColor = Color.White;
+            groupBoxWDetectLocation.Location = new Point(321, 138);
+            groupBoxWDetectLocation.Name = "groupBoxWDetectLocation";
+            groupBoxWDetectLocation.Size = new Size(122, 41);
+            groupBoxWDetectLocation.TabIndex = 30;
+            groupBoxWDetectLocation.TabStop = false;
+            groupBoxWDetectLocation.Text = "W杞存娴嬩綅缃�";
+            // 
+            // textBoxWDetectLocation
+            // 
+            textBoxWDetectLocation.Dock = DockStyle.Bottom;
+            textBoxWDetectLocation.Font = new Font("瀹嬩綋", 10F);
+            textBoxWDetectLocation.Location = new Point(3, 18);
+            textBoxWDetectLocation.Multiline = true;
+            textBoxWDetectLocation.Name = "textBoxWDetectLocation";
+            textBoxWDetectLocation.Size = new Size(116, 20);
+            textBoxWDetectLocation.TabIndex = 12;
+            textBoxWDetectLocation.Text = "1";
+            // 
+            // groupBoxXDetectLocation
+            // 
+            groupBoxXDetectLocation.Controls.Add(textBoxXDetectLocation);
+            groupBoxXDetectLocation.Dock = DockStyle.Fill;
+            groupBoxXDetectLocation.Font = new Font("瀹嬩綋", 8F);
+            groupBoxXDetectLocation.ForeColor = Color.White;
+            groupBoxXDetectLocation.Location = new Point(321, 3);
+            groupBoxXDetectLocation.Name = "groupBoxXDetectLocation";
+            groupBoxXDetectLocation.Size = new Size(122, 39);
+            groupBoxXDetectLocation.TabIndex = 30;
+            groupBoxXDetectLocation.TabStop = false;
+            groupBoxXDetectLocation.Text = "X杞存娴嬩綅缃�";
+            // 
+            // textBoxXDetectLocation
+            // 
+            textBoxXDetectLocation.Dock = DockStyle.Bottom;
+            textBoxXDetectLocation.Font = new Font("瀹嬩綋", 10F);
+            textBoxXDetectLocation.Location = new Point(3, 16);
+            textBoxXDetectLocation.Multiline = true;
+            textBoxXDetectLocation.Name = "textBoxXDetectLocation";
+            textBoxXDetectLocation.Size = new Size(116, 20);
+            textBoxXDetectLocation.TabIndex = 12;
+            textBoxXDetectLocation.Text = "1";
+            // 
+            // groupBoxXOriginalLocation
+            // 
+            groupBoxXOriginalLocation.Controls.Add(textBoxXOriginalLocation);
+            groupBoxXOriginalLocation.Dock = DockStyle.Fill;
+            groupBoxXOriginalLocation.Font = new Font("瀹嬩綋", 8F);
+            groupBoxXOriginalLocation.ForeColor = Color.White;
+            groupBoxXOriginalLocation.Location = new Point(449, 3);
+            groupBoxXOriginalLocation.Name = "groupBoxXOriginalLocation";
+            groupBoxXOriginalLocation.Size = new Size(122, 39);
+            groupBoxXOriginalLocation.TabIndex = 30;
+            groupBoxXOriginalLocation.TabStop = false;
+            groupBoxXOriginalLocation.Text = "X杞村師鐐逛綅缃�";
+            // 
+            // textBoxXOriginalLocation
+            // 
+            textBoxXOriginalLocation.Dock = DockStyle.Bottom;
+            textBoxXOriginalLocation.Font = new Font("瀹嬩綋", 10F);
+            textBoxXOriginalLocation.Location = new Point(3, 16);
+            textBoxXOriginalLocation.Multiline = true;
+            textBoxXOriginalLocation.Name = "textBoxXOriginalLocation";
+            textBoxXOriginalLocation.Size = new Size(116, 20);
+            textBoxXOriginalLocation.TabIndex = 12;
+            textBoxXOriginalLocation.Text = "1";
+            // 
+            // groupBoxYOriginalLocation
+            // 
+            groupBoxYOriginalLocation.Controls.Add(textBoxYOriginalLocation);
+            groupBoxYOriginalLocation.Dock = DockStyle.Fill;
+            groupBoxYOriginalLocation.Font = new Font("瀹嬩綋", 8F);
+            groupBoxYOriginalLocation.ForeColor = Color.White;
+            groupBoxYOriginalLocation.Location = new Point(449, 48);
+            groupBoxYOriginalLocation.Name = "groupBoxYOriginalLocation";
+            groupBoxYOriginalLocation.Size = new Size(122, 39);
+            groupBoxYOriginalLocation.TabIndex = 30;
+            groupBoxYOriginalLocation.TabStop = false;
+            groupBoxYOriginalLocation.Text = "Y杞村師鐐逛綅缃�";
+            // 
+            // textBoxYOriginalLocation
+            // 
+            textBoxYOriginalLocation.Dock = DockStyle.Bottom;
+            textBoxYOriginalLocation.Font = new Font("瀹嬩綋", 10F);
+            textBoxYOriginalLocation.Location = new Point(3, 16);
+            textBoxYOriginalLocation.Multiline = true;
+            textBoxYOriginalLocation.Name = "textBoxYOriginalLocation";
+            textBoxYOriginalLocation.Size = new Size(116, 20);
+            textBoxYOriginalLocation.TabIndex = 12;
+            textBoxYOriginalLocation.Text = "1";
+            // 
+            // groupBoxZOriginalLocation
+            // 
+            groupBoxZOriginalLocation.Controls.Add(textBoxZOriginalLocation);
+            groupBoxZOriginalLocation.Dock = DockStyle.Fill;
+            groupBoxZOriginalLocation.Font = new Font("瀹嬩綋", 8F);
+            groupBoxZOriginalLocation.ForeColor = Color.White;
+            groupBoxZOriginalLocation.Location = new Point(449, 93);
+            groupBoxZOriginalLocation.Name = "groupBoxZOriginalLocation";
+            groupBoxZOriginalLocation.Size = new Size(122, 39);
+            groupBoxZOriginalLocation.TabIndex = 30;
+            groupBoxZOriginalLocation.TabStop = false;
+            groupBoxZOriginalLocation.Text = "Z杞村師鐐逛綅缃�";
+            // 
+            // textBoxZOriginalLocation
+            // 
+            textBoxZOriginalLocation.Dock = DockStyle.Bottom;
+            textBoxZOriginalLocation.Font = new Font("瀹嬩綋", 10F);
+            textBoxZOriginalLocation.Location = new Point(3, 16);
+            textBoxZOriginalLocation.Multiline = true;
+            textBoxZOriginalLocation.Name = "textBoxZOriginalLocation";
+            textBoxZOriginalLocation.Size = new Size(116, 20);
+            textBoxZOriginalLocation.TabIndex = 12;
+            textBoxZOriginalLocation.Text = "1";
+            // 
+            // groupBoxWOriginalLocation
+            // 
+            groupBoxWOriginalLocation.Controls.Add(textBoxWOriginalLocation);
+            groupBoxWOriginalLocation.Dock = DockStyle.Fill;
+            groupBoxWOriginalLocation.Font = new Font("瀹嬩綋", 8F);
+            groupBoxWOriginalLocation.ForeColor = Color.White;
+            groupBoxWOriginalLocation.Location = new Point(449, 138);
+            groupBoxWOriginalLocation.Name = "groupBoxWOriginalLocation";
+            groupBoxWOriginalLocation.Size = new Size(122, 41);
+            groupBoxWOriginalLocation.TabIndex = 30;
+            groupBoxWOriginalLocation.TabStop = false;
+            groupBoxWOriginalLocation.Text = "W杞村師鐐逛綅缃�";
+            // 
+            // textBoxWOriginalLocation
+            // 
+            textBoxWOriginalLocation.Dock = DockStyle.Bottom;
+            textBoxWOriginalLocation.Font = new Font("瀹嬩綋", 10F);
+            textBoxWOriginalLocation.Location = new Point(3, 18);
+            textBoxWOriginalLocation.Multiline = true;
+            textBoxWOriginalLocation.Name = "textBoxWOriginalLocation";
+            textBoxWOriginalLocation.Size = new Size(116, 20);
+            textBoxWOriginalLocation.TabIndex = 12;
+            textBoxWOriginalLocation.Text = "1";
+            // 
             // tableLayoutPanel1
             // 
             tableLayoutPanel1.ColumnCount = 2;
@@ -760,352 +1144,6 @@
             controlBox1.TabIndex = 21;
             controlBox1.Text = "controlBox1";
             // 
-            // panel1
-            // 
-            panel1.Controls.Add(tableLayoutPanel3);
-            panel1.Dock = DockStyle.Fill;
-            panel1.Location = new Point(0, 23);
-            panel1.Name = "panel1";
-            panel1.Padding = new Padding(0, 3, 0, 0);
-            panel1.Size = new Size(580, 661);
-            panel1.TabIndex = 1;
-            // 
-            // groupBoxXVarAddress
-            // 
-            groupBoxXVarAddress.Controls.Add(textBoxXVarAddress);
-            groupBoxXVarAddress.Dock = DockStyle.Fill;
-            groupBoxXVarAddress.Font = new Font("瀹嬩綋", 8F);
-            groupBoxXVarAddress.ForeColor = Color.White;
-            groupBoxXVarAddress.Location = new Point(193, 3);
-            groupBoxXVarAddress.Name = "groupBoxXVarAddress";
-            groupBoxXVarAddress.Size = new Size(122, 39);
-            groupBoxXVarAddress.TabIndex = 28;
-            groupBoxXVarAddress.TabStop = false;
-            groupBoxXVarAddress.Text = "X杞村彉閲忓湴鍧�";
-            // 
-            // textBoxXVarAddress
-            // 
-            textBoxXVarAddress.Dock = DockStyle.Bottom;
-            textBoxXVarAddress.Font = new Font("瀹嬩綋", 10F);
-            textBoxXVarAddress.Location = new Point(3, 16);
-            textBoxXVarAddress.Multiline = true;
-            textBoxXVarAddress.Name = "textBoxXVarAddress";
-            textBoxXVarAddress.Size = new Size(116, 20);
-            textBoxXVarAddress.TabIndex = 12;
-            textBoxXVarAddress.Text = "1";
-            // 
-            // groupBoxYVarAddress
-            // 
-            groupBoxYVarAddress.Controls.Add(textBoxYVarAddress);
-            groupBoxYVarAddress.Dock = DockStyle.Fill;
-            groupBoxYVarAddress.Font = new Font("瀹嬩綋", 8F);
-            groupBoxYVarAddress.ForeColor = Color.White;
-            groupBoxYVarAddress.Location = new Point(193, 48);
-            groupBoxYVarAddress.Name = "groupBoxYVarAddress";
-            groupBoxYVarAddress.Size = new Size(122, 39);
-            groupBoxYVarAddress.TabIndex = 29;
-            groupBoxYVarAddress.TabStop = false;
-            groupBoxYVarAddress.Text = "Y杞村彉閲忓湴鍧�";
-            // 
-            // textBoxYVarAddress
-            // 
-            textBoxYVarAddress.Dock = DockStyle.Bottom;
-            textBoxYVarAddress.Font = new Font("瀹嬩綋", 10F);
-            textBoxYVarAddress.Location = new Point(3, 16);
-            textBoxYVarAddress.Multiline = true;
-            textBoxYVarAddress.Name = "textBoxYVarAddress";
-            textBoxYVarAddress.Size = new Size(116, 20);
-            textBoxYVarAddress.TabIndex = 12;
-            textBoxYVarAddress.Text = "1";
-            // 
-            // groupBoxZVarAddress
-            // 
-            groupBoxZVarAddress.Controls.Add(textBoxZVarAddress);
-            groupBoxZVarAddress.Dock = DockStyle.Fill;
-            groupBoxZVarAddress.Font = new Font("瀹嬩綋", 8F);
-            groupBoxZVarAddress.ForeColor = Color.White;
-            groupBoxZVarAddress.Location = new Point(193, 93);
-            groupBoxZVarAddress.Name = "groupBoxZVarAddress";
-            groupBoxZVarAddress.Size = new Size(122, 39);
-            groupBoxZVarAddress.TabIndex = 29;
-            groupBoxZVarAddress.TabStop = false;
-            groupBoxZVarAddress.Text = "Z杞村彉閲忓湴鍧�";
-            // 
-            // textBoxZVarAddress
-            // 
-            textBoxZVarAddress.Dock = DockStyle.Bottom;
-            textBoxZVarAddress.Font = new Font("瀹嬩綋", 10F);
-            textBoxZVarAddress.Location = new Point(3, 16);
-            textBoxZVarAddress.Multiline = true;
-            textBoxZVarAddress.Name = "textBoxZVarAddress";
-            textBoxZVarAddress.Size = new Size(116, 20);
-            textBoxZVarAddress.TabIndex = 12;
-            textBoxZVarAddress.Text = "1";
-            // 
-            // groupBoxWVarAddress
-            // 
-            groupBoxWVarAddress.Controls.Add(textBoxWVarAddress);
-            groupBoxWVarAddress.Dock = DockStyle.Fill;
-            groupBoxWVarAddress.Font = new Font("瀹嬩綋", 8F);
-            groupBoxWVarAddress.ForeColor = Color.White;
-            groupBoxWVarAddress.Location = new Point(193, 138);
-            groupBoxWVarAddress.Name = "groupBoxWVarAddress";
-            groupBoxWVarAddress.Size = new Size(122, 41);
-            groupBoxWVarAddress.TabIndex = 29;
-            groupBoxWVarAddress.TabStop = false;
-            groupBoxWVarAddress.Text = "W杞村彉閲忓湴鍧�";
-            // 
-            // textBoxWVarAddress
-            // 
-            textBoxWVarAddress.Dock = DockStyle.Bottom;
-            textBoxWVarAddress.Font = new Font("瀹嬩綋", 10F);
-            textBoxWVarAddress.Location = new Point(3, 18);
-            textBoxWVarAddress.Multiline = true;
-            textBoxWVarAddress.Name = "textBoxWVarAddress";
-            textBoxWVarAddress.Size = new Size(116, 20);
-            textBoxWVarAddress.TabIndex = 12;
-            textBoxWVarAddress.Text = "1";
-            // 
-            // groupBoxXDetectLocation
-            // 
-            groupBoxXDetectLocation.Controls.Add(textBoxXDetectLocation);
-            groupBoxXDetectLocation.Dock = DockStyle.Fill;
-            groupBoxXDetectLocation.Font = new Font("瀹嬩綋", 8F);
-            groupBoxXDetectLocation.ForeColor = Color.White;
-            groupBoxXDetectLocation.Location = new Point(321, 3);
-            groupBoxXDetectLocation.Name = "groupBoxXDetectLocation";
-            groupBoxXDetectLocation.Size = new Size(122, 39);
-            groupBoxXDetectLocation.TabIndex = 30;
-            groupBoxXDetectLocation.TabStop = false;
-            groupBoxXDetectLocation.Text = "X杞存娴嬩綅缃�";
-            // 
-            // textBoxXDetectLocation
-            // 
-            textBoxXDetectLocation.Dock = DockStyle.Bottom;
-            textBoxXDetectLocation.Font = new Font("瀹嬩綋", 10F);
-            textBoxXDetectLocation.Location = new Point(3, 16);
-            textBoxXDetectLocation.Multiline = true;
-            textBoxXDetectLocation.Name = "textBoxXDetectLocation";
-            textBoxXDetectLocation.Size = new Size(116, 20);
-            textBoxXDetectLocation.TabIndex = 12;
-            textBoxXDetectLocation.Text = "1";
-            // 
-            // groupBoxYDetectLocation
-            // 
-            groupBoxYDetectLocation.Controls.Add(textBoxYDetectLocation);
-            groupBoxYDetectLocation.Dock = DockStyle.Fill;
-            groupBoxYDetectLocation.Font = new Font("瀹嬩綋", 8F);
-            groupBoxYDetectLocation.ForeColor = Color.White;
-            groupBoxYDetectLocation.Location = new Point(321, 48);
-            groupBoxYDetectLocation.Name = "groupBoxYDetectLocation";
-            groupBoxYDetectLocation.Size = new Size(122, 39);
-            groupBoxYDetectLocation.TabIndex = 30;
-            groupBoxYDetectLocation.TabStop = false;
-            groupBoxYDetectLocation.Text = "Y杞存娴嬩綅缃�";
-            // 
-            // textBoxYDetectLocation
-            // 
-            textBoxYDetectLocation.Dock = DockStyle.Bottom;
-            textBoxYDetectLocation.Font = new Font("瀹嬩綋", 10F);
-            textBoxYDetectLocation.Location = new Point(3, 16);
-            textBoxYDetectLocation.Multiline = true;
-            textBoxYDetectLocation.Name = "textBoxYDetectLocation";
-            textBoxYDetectLocation.Size = new Size(116, 20);
-            textBoxYDetectLocation.TabIndex = 12;
-            textBoxYDetectLocation.Text = "1";
-            // 
-            // groupBoxZDetectLocation
-            // 
-            groupBoxZDetectLocation.Controls.Add(textBoxZDetectLocation);
-            groupBoxZDetectLocation.Dock = DockStyle.Fill;
-            groupBoxZDetectLocation.Font = new Font("瀹嬩綋", 8F);
-            groupBoxZDetectLocation.ForeColor = Color.White;
-            groupBoxZDetectLocation.Location = new Point(321, 93);
-            groupBoxZDetectLocation.Name = "groupBoxZDetectLocation";
-            groupBoxZDetectLocation.Size = new Size(122, 39);
-            groupBoxZDetectLocation.TabIndex = 30;
-            groupBoxZDetectLocation.TabStop = false;
-            groupBoxZDetectLocation.Text = "Z杞存娴嬩綅缃�";
-            // 
-            // textBoxZDetectLocation
-            // 
-            textBoxZDetectLocation.Dock = DockStyle.Bottom;
-            textBoxZDetectLocation.Font = new Font("瀹嬩綋", 10F);
-            textBoxZDetectLocation.Location = new Point(3, 16);
-            textBoxZDetectLocation.Multiline = true;
-            textBoxZDetectLocation.Name = "textBoxZDetectLocation";
-            textBoxZDetectLocation.Size = new Size(116, 20);
-            textBoxZDetectLocation.TabIndex = 12;
-            textBoxZDetectLocation.Text = "1";
-            // 
-            // groupBoxWDetectLocation
-            // 
-            groupBoxWDetectLocation.Controls.Add(textBoxWDetectLocation);
-            groupBoxWDetectLocation.Dock = DockStyle.Fill;
-            groupBoxWDetectLocation.Font = new Font("瀹嬩綋", 8F);
-            groupBoxWDetectLocation.ForeColor = Color.White;
-            groupBoxWDetectLocation.Location = new Point(321, 138);
-            groupBoxWDetectLocation.Name = "groupBoxWDetectLocation";
-            groupBoxWDetectLocation.Size = new Size(122, 41);
-            groupBoxWDetectLocation.TabIndex = 30;
-            groupBoxWDetectLocation.TabStop = false;
-            groupBoxWDetectLocation.Text = "W杞存娴嬩綅缃�";
-            // 
-            // textBoxWDetectLocation
-            // 
-            textBoxWDetectLocation.Dock = DockStyle.Bottom;
-            textBoxWDetectLocation.Font = new Font("瀹嬩綋", 10F);
-            textBoxWDetectLocation.Location = new Point(3, 18);
-            textBoxWDetectLocation.Multiline = true;
-            textBoxWDetectLocation.Name = "textBoxWDetectLocation";
-            textBoxWDetectLocation.Size = new Size(116, 20);
-            textBoxWDetectLocation.TabIndex = 12;
-            textBoxWDetectLocation.Text = "1";
-            // 
-            // groupBoxXOriginalLocation
-            // 
-            groupBoxXOriginalLocation.Controls.Add(textBoxXOriginalLocation);
-            groupBoxXOriginalLocation.Dock = DockStyle.Fill;
-            groupBoxXOriginalLocation.Font = new Font("瀹嬩綋", 8F);
-            groupBoxXOriginalLocation.ForeColor = Color.White;
-            groupBoxXOriginalLocation.Location = new Point(449, 3);
-            groupBoxXOriginalLocation.Name = "groupBoxXOriginalLocation";
-            groupBoxXOriginalLocation.Size = new Size(122, 39);
-            groupBoxXOriginalLocation.TabIndex = 30;
-            groupBoxXOriginalLocation.TabStop = false;
-            groupBoxXOriginalLocation.Text = "X杞村師鐐逛綅缃�";
-            // 
-            // textBoxXOriginalLocation
-            // 
-            textBoxXOriginalLocation.Dock = DockStyle.Bottom;
-            textBoxXOriginalLocation.Font = new Font("瀹嬩綋", 10F);
-            textBoxXOriginalLocation.Location = new Point(3, 16);
-            textBoxXOriginalLocation.Multiline = true;
-            textBoxXOriginalLocation.Name = "textBoxXOriginalLocation";
-            textBoxXOriginalLocation.Size = new Size(116, 20);
-            textBoxXOriginalLocation.TabIndex = 12;
-            textBoxXOriginalLocation.Text = "1";
-            // 
-            // groupBoxYOriginalLocation
-            // 
-            groupBoxYOriginalLocation.Controls.Add(textBoxYOriginalLocation);
-            groupBoxYOriginalLocation.Dock = DockStyle.Fill;
-            groupBoxYOriginalLocation.Font = new Font("瀹嬩綋", 8F);
-            groupBoxYOriginalLocation.ForeColor = Color.White;
-            groupBoxYOriginalLocation.Location = new Point(449, 48);
-            groupBoxYOriginalLocation.Name = "groupBoxYOriginalLocation";
-            groupBoxYOriginalLocation.Size = new Size(122, 39);
-            groupBoxYOriginalLocation.TabIndex = 30;
-            groupBoxYOriginalLocation.TabStop = false;
-            groupBoxYOriginalLocation.Text = "Y杞村師鐐逛綅缃�";
-            // 
-            // textBoxYOriginalLocation
-            // 
-            textBoxYOriginalLocation.Dock = DockStyle.Bottom;
-            textBoxYOriginalLocation.Font = new Font("瀹嬩綋", 10F);
-            textBoxYOriginalLocation.Location = new Point(3, 16);
-            textBoxYOriginalLocation.Multiline = true;
-            textBoxYOriginalLocation.Name = "textBoxYOriginalLocation";
-            textBoxYOriginalLocation.Size = new Size(116, 20);
-            textBoxYOriginalLocation.TabIndex = 12;
-            textBoxYOriginalLocation.Text = "1";
-            // 
-            // groupBoxZOriginalLocation
-            // 
-            groupBoxZOriginalLocation.Controls.Add(textBoxZOriginalLocation);
-            groupBoxZOriginalLocation.Dock = DockStyle.Fill;
-            groupBoxZOriginalLocation.Font = new Font("瀹嬩綋", 8F);
-            groupBoxZOriginalLocation.ForeColor = Color.White;
-            groupBoxZOriginalLocation.Location = new Point(449, 93);
-            groupBoxZOriginalLocation.Name = "groupBoxZOriginalLocation";
-            groupBoxZOriginalLocation.Size = new Size(122, 39);
-            groupBoxZOriginalLocation.TabIndex = 30;
-            groupBoxZOriginalLocation.TabStop = false;
-            groupBoxZOriginalLocation.Text = "Z杞村師鐐逛綅缃�";
-            // 
-            // textBoxZOriginalLocation
-            // 
-            textBoxZOriginalLocation.Dock = DockStyle.Bottom;
-            textBoxZOriginalLocation.Font = new Font("瀹嬩綋", 10F);
-            textBoxZOriginalLocation.Location = new Point(3, 16);
-            textBoxZOriginalLocation.Multiline = true;
-            textBoxZOriginalLocation.Name = "textBoxZOriginalLocation";
-            textBoxZOriginalLocation.Size = new Size(116, 20);
-            textBoxZOriginalLocation.TabIndex = 12;
-            textBoxZOriginalLocation.Text = "1";
-            // 
-            // groupBoxWOriginalLocation
-            // 
-            groupBoxWOriginalLocation.Controls.Add(textBoxWOriginalLocation);
-            groupBoxWOriginalLocation.Dock = DockStyle.Fill;
-            groupBoxWOriginalLocation.Font = new Font("瀹嬩綋", 8F);
-            groupBoxWOriginalLocation.ForeColor = Color.White;
-            groupBoxWOriginalLocation.Location = new Point(449, 138);
-            groupBoxWOriginalLocation.Name = "groupBoxWOriginalLocation";
-            groupBoxWOriginalLocation.Size = new Size(122, 41);
-            groupBoxWOriginalLocation.TabIndex = 30;
-            groupBoxWOriginalLocation.TabStop = false;
-            groupBoxWOriginalLocation.Text = "W杞村師鐐逛綅缃�";
-            // 
-            // textBoxWOriginalLocation
-            // 
-            textBoxWOriginalLocation.Dock = DockStyle.Bottom;
-            textBoxWOriginalLocation.Font = new Font("瀹嬩綋", 10F);
-            textBoxWOriginalLocation.Location = new Point(3, 18);
-            textBoxWOriginalLocation.Multiline = true;
-            textBoxWOriginalLocation.Name = "textBoxWOriginalLocation";
-            textBoxWOriginalLocation.Size = new Size(116, 20);
-            textBoxWOriginalLocation.TabIndex = 12;
-            textBoxWOriginalLocation.Text = "1";
-            // 
-            // groupBoxPulseMotionSpeedAddress
-            // 
-            groupBoxPulseMotionSpeedAddress.Controls.Add(textBoxPulseMotionSpeedAddress);
-            groupBoxPulseMotionSpeedAddress.Dock = DockStyle.Fill;
-            groupBoxPulseMotionSpeedAddress.Font = new Font("瀹嬩綋", 8F);
-            groupBoxPulseMotionSpeedAddress.ForeColor = Color.White;
-            groupBoxPulseMotionSpeedAddress.Location = new Point(323, 3);
-            groupBoxPulseMotionSpeedAddress.Name = "groupBoxPulseMotionSpeedAddress";
-            groupBoxPulseMotionSpeedAddress.Size = new Size(114, 39);
-            groupBoxPulseMotionSpeedAddress.TabIndex = 30;
-            groupBoxPulseMotionSpeedAddress.TabStop = false;
-            groupBoxPulseMotionSpeedAddress.Text = "鐐归�熷害鍦板潃";
-            // 
-            // textBoxPulseMotionSpeedAddress
-            // 
-            textBoxPulseMotionSpeedAddress.Dock = DockStyle.Bottom;
-            textBoxPulseMotionSpeedAddress.Font = new Font("瀹嬩綋", 10F);
-            textBoxPulseMotionSpeedAddress.Location = new Point(3, 16);
-            textBoxPulseMotionSpeedAddress.Multiline = true;
-            textBoxPulseMotionSpeedAddress.Name = "textBoxPulseMotionSpeedAddress";
-            textBoxPulseMotionSpeedAddress.Size = new Size(108, 20);
-            textBoxPulseMotionSpeedAddress.TabIndex = 12;
-            textBoxPulseMotionSpeedAddress.Text = "1";
-            // 
-            // groupBoxAngularVelocityAddress
-            // 
-            groupBoxAngularVelocityAddress.Controls.Add(textBoxAngularVelocityAddress);
-            groupBoxAngularVelocityAddress.Dock = DockStyle.Fill;
-            groupBoxAngularVelocityAddress.Font = new Font("瀹嬩綋", 8F);
-            groupBoxAngularVelocityAddress.ForeColor = Color.White;
-            groupBoxAngularVelocityAddress.Location = new Point(323, 48);
-            groupBoxAngularVelocityAddress.Name = "groupBoxAngularVelocityAddress";
-            groupBoxAngularVelocityAddress.Size = new Size(114, 39);
-            groupBoxAngularVelocityAddress.TabIndex = 30;
-            groupBoxAngularVelocityAddress.TabStop = false;
-            groupBoxAngularVelocityAddress.Text = "瑙掗�熷害鍦板潃";
-            // 
-            // textBoxAngularVelocityAddress
-            // 
-            textBoxAngularVelocityAddress.Dock = DockStyle.Bottom;
-            textBoxAngularVelocityAddress.Font = new Font("瀹嬩綋", 10F);
-            textBoxAngularVelocityAddress.Location = new Point(3, 16);
-            textBoxAngularVelocityAddress.Multiline = true;
-            textBoxAngularVelocityAddress.Name = "textBoxAngularVelocityAddress";
-            textBoxAngularVelocityAddress.Size = new Size(108, 20);
-            textBoxAngularVelocityAddress.TabIndex = 12;
-            textBoxAngularVelocityAddress.Text = "1";
-            // 
             // MotionControlForm
             // 
             AutoScaleDimensions = new SizeF(120F, 120F);
@@ -1119,11 +1157,17 @@
             Text = "杩愬姩鎺у埗璁剧疆";
             TransparencyKey = Color.Fuchsia;
             uiGroupBoxMotionControl.ResumeLayout(false);
+            panel1.ResumeLayout(false);
             tableLayoutPanel3.ResumeLayout(false);
             tableLayoutPanel6.ResumeLayout(false);
             tableLayoutPanel5.ResumeLayout(false);
             tableLayoutPanel4.ResumeLayout(false);
             tableLayoutPanel4.PerformLayout();
+            groupBoxPulseMotionSpeedAddress.ResumeLayout(false);
+            groupBoxPulseMotionSpeedAddress.PerformLayout();
+            groupBoxAngularVelocityAddress.ResumeLayout(false);
+            groupBoxAngularVelocityAddress.PerformLayout();
+            groupBoxCom.ResumeLayout(false);
             tableLayoutPanel2.ResumeLayout(false);
             groupBoxPitchAnglePosition.ResumeLayout(false);
             groupBoxPitchAnglePosition.PerformLayout();
@@ -1133,6 +1177,30 @@
             groupBoxYPosition.PerformLayout();
             groupBoxXPosition.ResumeLayout(false);
             groupBoxXPosition.PerformLayout();
+            groupBoxYVarAddress.ResumeLayout(false);
+            groupBoxYVarAddress.PerformLayout();
+            groupBoxXVarAddress.ResumeLayout(false);
+            groupBoxXVarAddress.PerformLayout();
+            groupBoxZVarAddress.ResumeLayout(false);
+            groupBoxZVarAddress.PerformLayout();
+            groupBoxWVarAddress.ResumeLayout(false);
+            groupBoxWVarAddress.PerformLayout();
+            groupBoxYDetectLocation.ResumeLayout(false);
+            groupBoxYDetectLocation.PerformLayout();
+            groupBoxZDetectLocation.ResumeLayout(false);
+            groupBoxZDetectLocation.PerformLayout();
+            groupBoxWDetectLocation.ResumeLayout(false);
+            groupBoxWDetectLocation.PerformLayout();
+            groupBoxXDetectLocation.ResumeLayout(false);
+            groupBoxXDetectLocation.PerformLayout();
+            groupBoxXOriginalLocation.ResumeLayout(false);
+            groupBoxXOriginalLocation.PerformLayout();
+            groupBoxYOriginalLocation.ResumeLayout(false);
+            groupBoxYOriginalLocation.PerformLayout();
+            groupBoxZOriginalLocation.ResumeLayout(false);
+            groupBoxZOriginalLocation.PerformLayout();
+            groupBoxWOriginalLocation.ResumeLayout(false);
+            groupBoxWOriginalLocation.PerformLayout();
             tableLayoutPanel1.ResumeLayout(false);
             tableLayoutPanel1.PerformLayout();
             tableLayoutPanel7.ResumeLayout(false);
@@ -1142,35 +1210,6 @@
             ((System.ComponentModel.ISupportInitialize)uiSplitContainer1).EndInit();
             uiSplitContainer1.ResumeLayout(false);
             themeForm1.ResumeLayout(false);
-            panel1.ResumeLayout(false);
-            groupBoxXVarAddress.ResumeLayout(false);
-            groupBoxXVarAddress.PerformLayout();
-            groupBoxYVarAddress.ResumeLayout(false);
-            groupBoxYVarAddress.PerformLayout();
-            groupBoxZVarAddress.ResumeLayout(false);
-            groupBoxZVarAddress.PerformLayout();
-            groupBoxWVarAddress.ResumeLayout(false);
-            groupBoxWVarAddress.PerformLayout();
-            groupBoxXDetectLocation.ResumeLayout(false);
-            groupBoxXDetectLocation.PerformLayout();
-            groupBoxYDetectLocation.ResumeLayout(false);
-            groupBoxYDetectLocation.PerformLayout();
-            groupBoxZDetectLocation.ResumeLayout(false);
-            groupBoxZDetectLocation.PerformLayout();
-            groupBoxWDetectLocation.ResumeLayout(false);
-            groupBoxWDetectLocation.PerformLayout();
-            groupBoxXOriginalLocation.ResumeLayout(false);
-            groupBoxXOriginalLocation.PerformLayout();
-            groupBoxYOriginalLocation.ResumeLayout(false);
-            groupBoxYOriginalLocation.PerformLayout();
-            groupBoxZOriginalLocation.ResumeLayout(false);
-            groupBoxZOriginalLocation.PerformLayout();
-            groupBoxWOriginalLocation.ResumeLayout(false);
-            groupBoxWOriginalLocation.PerformLayout();
-            groupBoxPulseMotionSpeedAddress.ResumeLayout(false);
-            groupBoxPulseMotionSpeedAddress.PerformLayout();
-            groupBoxAngularVelocityAddress.ResumeLayout(false);
-            groupBoxAngularVelocityAddress.PerformLayout();
             ResumeLayout(false);
         }
 
@@ -1250,5 +1289,7 @@
         private TextBox textBoxPulseMotionSpeedAddress;
         private GroupBox groupBoxAngularVelocityAddress;
         private TextBox textBoxAngularVelocityAddress;
+        private GroupBox groupBoxCom;
+        private Sunny.UI.UIComboBox cmbCom;
     }
 }
\ No newline at end of file
diff --git a/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.cs b/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.cs
index e48690f..ea8c66a 100644
--- a/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.cs
+++ b/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.cs
@@ -1,6 +1,8 @@
-锘縰sing LB_VisionControl;
+锘縰sing LB_SmartVisionCommon;
+using LB_VisionControl;
 using LB_VisionProcesses.Cameras;
 using System;
+using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
@@ -12,6 +14,7 @@
 using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Forms;
+using System.Windows.Media.Media3D;
 using static ZXing.QrCode.Internal.Mode;
 
 namespace LB_SmartVision.Forms.Pages.MotionControlPage
@@ -20,10 +23,12 @@
     {
         BaseCamera camera { get; set; }
         UserPictureBox onlinePictureBox { get; set; }
+        string communicatorsName { get; set; }
         public MotionControlForm()
         {
             InitializeComponent();
         }
+        string cameraSN = string.Empty;
 
         public MotionControlForm(BaseCamera camera)
         {
@@ -35,7 +40,7 @@
             this.camera = camera;
             this.Text = camera.SN;
             textBoxSN.Text = camera.SN;
-
+            cameraSN = camera.SN;
             onlinePictureBox = new UserPictureBox(uiGroupBoxImage);
             this.uiGroupBoxImage.Controls.Clear();
             this.uiGroupBoxImage.Controls.Add(onlinePictureBox);
@@ -43,8 +48,12 @@
 
             //鍔犺浇鍥炶皟鍑芥暟
             Subscribe();
+            foreach (var name in GlobalVar.dicCommunicators.Items.Keys)
+            {
+                cmbCom.Items.Add(name);
+            }
         }
-
+        ConcurrentDictionary<string, RecordMotionControlData> concurrentDictionary = new ConcurrentDictionary<string, RecordMotionControlData>();
         private void CameraForm_FormClosing(object sender, FormClosingEventArgs e)
         {
             if (camera == null)
@@ -53,7 +62,141 @@
             camera.StopGrabbing();
 
             camera.StartGrabbing();
-
+            if (GlobalVar.dicMotionControlData.Keys.Contains(GlobalVar.strProductName))
+            {
+                concurrentDictionary = GlobalVar.dicMotionControlData[GlobalVar.strProductName];
+                double xAxisDetectLocationValue, xAxisOriginalLocationValue, yAxisDetectLocationValue, yAxisOriginalLocationValue, zAxisDetectLocationValue, zAxisOriginalLocationValue, wAxisDetectLocationValue, wAxisOriginalLocationValue, pulseMotionSpeedValue, angularVelocityValue;
+                xAxisDetectLocationValue = double.Parse(this.textBoxXDetectLocation.Text);
+                xAxisOriginalLocationValue = double.Parse(this.textBoxXOriginalLocation.Text);
+                yAxisDetectLocationValue = double.Parse(this.textBoxYDetectLocation.Text);
+                yAxisOriginalLocationValue = double.Parse(this.textBoxYOriginalLocation.Text);
+                zAxisDetectLocationValue = double.Parse(this.textBoxZDetectLocation.Text);
+                zAxisOriginalLocationValue = double.Parse(this.textBoxZOriginalLocation.Text);
+                wAxisDetectLocationValue = double.Parse(this.textBoxWDetectLocation.Text);
+                wAxisOriginalLocationValue = double.Parse(this.textBoxWOriginalLocation.Text);
+                pulseMotionSpeedValue = double.Parse(this.textBoxPointSpeed.Text);
+                angularVelocityValue = double.Parse(this.textBoxPointSpeed.Text);
+                if (concurrentDictionary.Keys.Contains(cameraSN))
+                {
+                    RecordMotionControlData recordMotionControlData = new RecordMotionControlData
+                    {
+                        ProductName = GlobalVar.strProductName,
+                        CommunicatorsName = communicatorsName,
+                        CameraSN = cameraSN,
+                        XAxisAddress = this.textBoxXVarAddress.Text,
+                        XAxisDetectLocationValue = xAxisDetectLocationValue,
+                        XAxisOriginalLocationValue = xAxisOriginalLocationValue,
+                        YAxisAddress = this.textBoxYVarAddress.Text,
+                        YAxisDetectLocationValue = yAxisDetectLocationValue,
+                        YAxisOriginalLocationValue = yAxisOriginalLocationValue,
+                        ZAxisAddress = this.textBoxZVarAddress.Text,
+                        ZAxisDetectLocationValue = zAxisDetectLocationValue,
+                        ZAxisOriginalLocationValue = zAxisOriginalLocationValue,
+                        WAxisAddress = this.textBoxWVarAddress.Text,
+                        WAxisDetectLocationValue = wAxisDetectLocationValue,
+                        WAxisOriginalLocationValue = wAxisOriginalLocationValue,
+                        PulseMotionSpeedAddress = this.textBoxPulseMotionSpeedAddress.Text,
+                        PulseMotionSpeedValue = pulseMotionSpeedValue,
+                        AngularVelocityAddress = this.textBoxAngularVelocityAddress.Text,
+                        AngularVelocityValue = angularVelocityValue
+                    };
+                    concurrentDictionary.TryAdd(cameraSN, recordMotionControlData);
+                }
+                else
+                {
+                    RecordMotionControlData recordMotionControlData = new RecordMotionControlData
+                    {
+                        ProductName = GlobalVar.strProductName,
+                        CommunicatorsName = communicatorsName,
+                        CameraSN = cameraSN,
+                        XAxisAddress = this.textBoxXVarAddress.Text,
+                        XAxisDetectLocationValue = xAxisDetectLocationValue,
+                        XAxisOriginalLocationValue = xAxisOriginalLocationValue,
+                        YAxisAddress = this.textBoxYVarAddress.Text,
+                        YAxisDetectLocationValue = yAxisDetectLocationValue,
+                        YAxisOriginalLocationValue = yAxisOriginalLocationValue,
+                        ZAxisAddress = this.textBoxZVarAddress.Text,
+                        ZAxisDetectLocationValue = zAxisDetectLocationValue,
+                        ZAxisOriginalLocationValue = zAxisOriginalLocationValue,
+                        WAxisAddress = this.textBoxWVarAddress.Text,
+                        WAxisDetectLocationValue = wAxisDetectLocationValue,
+                        WAxisOriginalLocationValue = wAxisOriginalLocationValue,
+                        PulseMotionSpeedAddress = this.textBoxPulseMotionSpeedAddress.Text,
+                        PulseMotionSpeedValue = pulseMotionSpeedValue,
+                        AngularVelocityAddress = this.textBoxAngularVelocityAddress.Text,
+                        AngularVelocityValue = angularVelocityValue
+                    };
+                    concurrentDictionary.TryAdd(cameraSN, recordMotionControlData);
+                }
+            }
+            else
+            {
+                double xAxisDetectLocationValue, xAxisOriginalLocationValue, yAxisDetectLocationValue, yAxisOriginalLocationValue, zAxisDetectLocationValue, zAxisOriginalLocationValue, wAxisDetectLocationValue, wAxisOriginalLocationValue, pulseMotionSpeedValue, angularVelocityValue;
+                xAxisDetectLocationValue = double.Parse(this.textBoxXDetectLocation.Text);
+                xAxisOriginalLocationValue = double.Parse(this.textBoxXOriginalLocation.Text);
+                yAxisDetectLocationValue = double.Parse(this.textBoxYDetectLocation.Text);
+                yAxisOriginalLocationValue = double.Parse(this.textBoxYOriginalLocation.Text);
+                zAxisDetectLocationValue = double.Parse(this.textBoxZDetectLocation.Text);
+                zAxisOriginalLocationValue = double.Parse(this.textBoxZOriginalLocation.Text);
+                wAxisDetectLocationValue = double.Parse(this.textBoxWDetectLocation.Text);
+                wAxisOriginalLocationValue = double.Parse(this.textBoxWOriginalLocation.Text);
+                pulseMotionSpeedValue = double.Parse(this.textBoxPointSpeed.Text);
+                angularVelocityValue = double.Parse(this.textBoxPointSpeed.Text);
+                if (concurrentDictionary.Keys.Contains(cameraSN))
+                {
+                    RecordMotionControlData recordMotionControlData = new RecordMotionControlData
+                    {
+                        ProductName = GlobalVar.strProductName,
+                        CommunicatorsName = communicatorsName,
+                        CameraSN = cameraSN,
+                        XAxisAddress = this.textBoxXVarAddress.Text,
+                        XAxisDetectLocationValue = xAxisDetectLocationValue,
+                        XAxisOriginalLocationValue = xAxisOriginalLocationValue,
+                        YAxisAddress = this.textBoxYVarAddress.Text,
+                        YAxisDetectLocationValue = yAxisDetectLocationValue,
+                        YAxisOriginalLocationValue = yAxisOriginalLocationValue,
+                        ZAxisAddress = this.textBoxZVarAddress.Text,
+                        ZAxisDetectLocationValue = zAxisDetectLocationValue,
+                        ZAxisOriginalLocationValue = zAxisOriginalLocationValue,
+                        WAxisAddress = this.textBoxWVarAddress.Text,
+                        WAxisDetectLocationValue = wAxisDetectLocationValue,
+                        WAxisOriginalLocationValue = wAxisOriginalLocationValue,
+                        PulseMotionSpeedAddress = this.textBoxPulseMotionSpeedAddress.Text,
+                        PulseMotionSpeedValue = pulseMotionSpeedValue,
+                        AngularVelocityAddress = this.textBoxAngularVelocityAddress.Text,
+                        AngularVelocityValue = angularVelocityValue
+                    };
+                    concurrentDictionary.TryAdd(cameraSN, recordMotionControlData);
+                }
+                else
+                {
+                    RecordMotionControlData recordMotionControlData = new RecordMotionControlData
+                    {
+                        ProductName = GlobalVar.strProductName,
+                        CommunicatorsName = communicatorsName,
+                        CameraSN = cameraSN,
+                        XAxisAddress = this.textBoxXVarAddress.Text,
+                        XAxisDetectLocationValue = xAxisDetectLocationValue,
+                        XAxisOriginalLocationValue = xAxisOriginalLocationValue,
+                        YAxisAddress = this.textBoxYVarAddress.Text,
+                        YAxisDetectLocationValue = yAxisDetectLocationValue,
+                        YAxisOriginalLocationValue = yAxisOriginalLocationValue,
+                        ZAxisAddress = this.textBoxZVarAddress.Text,
+                        ZAxisDetectLocationValue = zAxisDetectLocationValue,
+                        ZAxisOriginalLocationValue = zAxisOriginalLocationValue,
+                        WAxisAddress = this.textBoxWVarAddress.Text,
+                        WAxisDetectLocationValue = wAxisDetectLocationValue,
+                        WAxisOriginalLocationValue = wAxisOriginalLocationValue,
+                        PulseMotionSpeedAddress = this.textBoxPulseMotionSpeedAddress.Text,
+                        PulseMotionSpeedValue = pulseMotionSpeedValue,
+                        AngularVelocityAddress = this.textBoxAngularVelocityAddress.Text,
+                        AngularVelocityValue = angularVelocityValue
+                    };
+                    concurrentDictionary.TryAdd(cameraSN, recordMotionControlData);
+                }
+            }
+            GlobalVar.dicMotionControlData.TryAdd(GlobalVar.strProductName, concurrentDictionary);
+            ConfigManager<ConcurrentDictionary<string, ConcurrentDictionary<string, RecordMotionControlData>>>.SaveConfig<ConcurrentDictionary<string, ConcurrentDictionary<string, RecordMotionControlData>>>(GlobalVar.dicMotionControlData, GlobalVar.allMotionControlDataPath);
             Unsubscribe();
         }
 
@@ -370,5 +513,10 @@
         {
 
         }
+
+        private void cmbCom_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            communicatorsName = cmbCom.Text;
+        }
     }
 }
diff --git a/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.resx b/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.resx
index 83adc1a..33e01c9 100644
--- a/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.resx
+++ b/LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlForm.resx
@@ -121,7 +121,7 @@
   <data name="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        wQAADsEBuJFr7QAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
+        vwAADr8BOAVTJAAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
         BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
         evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
         2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
diff --git a/LB_SmartVision/Forms/Pages/MotionControlPage/RecordMotionControlData.cs b/LB_SmartVision/Forms/Pages/MotionControlPage/RecordMotionControlData.cs
new file mode 100644
index 0000000..7f9dd80
--- /dev/null
+++ b/LB_SmartVision/Forms/Pages/MotionControlPage/RecordMotionControlData.cs
@@ -0,0 +1,93 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LB_SmartVision.Forms.Pages.MotionControlPage
+{
+    /// <summary>
+    /// 璁板綍杩愬姩鎺у埗鐩稿叧鍙傛暟
+    /// </summary>
+    [JsonObject(MemberSerialization.OptOut)]
+    public class RecordMotionControlData
+    {
+        /// <summary>
+        /// 浜у搧鍚嶇О
+        /// </summary>
+        public required string ProductName { get; set; }
+        /// <summary>
+        /// 閫氳鍚嶇О
+        /// </summary>
+        public required string CommunicatorsName { get; set; }
+        /// <summary>
+        /// 鐩告満搴忓垪鍙�
+        /// </summary>
+        public required string CameraSN { get; set; }
+        /// <summary>
+        /// X杞碢LC鍦板潃
+        /// </summary>
+        public required string XAxisAddress { get; set; }
+        /// <summary>
+        /// X杞碢LC妫�娴嬩綅缃��
+        /// </summary>
+        public required double XAxisDetectLocationValue { get; set; }
+        /// <summary>
+        /// X杞碢LC鍘熺偣浣嶇疆鍊�
+        /// </summary>
+        public required double XAxisOriginalLocationValue { get; set; }
+        /// <summary>
+        /// Y杞碢LC鍦板潃
+        /// </summary>
+        public required string YAxisAddress { get; set; }
+        /// <summary>
+        /// Y杞碢LC妫�娴嬩綅缃��
+        /// </summary>
+        public required double YAxisDetectLocationValue { get; set; }
+        /// <summary>
+        /// Y杞碢LC鍘熺偣浣嶇疆鍊�
+        /// </summary>
+        public required double YAxisOriginalLocationValue { get; set; }
+        /// <summary>
+        /// Z杞碢LC鍦板潃
+        /// </summary>
+        public required string ZAxisAddress { get; set; }
+        /// <summary>
+        /// Z杞碢LC妫�娴嬩綅缃��
+        /// </summary>
+        public required double ZAxisDetectLocationValue { get; set; }
+        /// <summary>
+        /// Z杞碢LC鍘熺偣浣嶇疆鍊�
+        /// </summary>
+        public required double ZAxisOriginalLocationValue { get; set; }
+        /// <summary>
+        /// W杞碢LC鍦板潃
+        /// </summary>
+        public required string WAxisAddress { get; set; }
+        /// <summary>
+        /// W杞碢LC妫�娴嬩綅缃��
+        /// </summary>
+        public required double WAxisDetectLocationValue { get; set; }
+        /// <summary>
+        /// W杞碢LC鍘熺偣浣嶇疆鍊�
+        /// </summary>
+        public required double WAxisOriginalLocationValue { get; set; }
+        /// <summary>
+        /// 鐐瑰姩閫熷害鍦板潃
+        /// </summary>
+        public required string PulseMotionSpeedAddress { get; set; }
+        /// <summary>
+        /// 鐐瑰姩閫熷害鍊�
+        /// </summary>
+        public required double PulseMotionSpeedValue { get; set; }
+        /// <summary>
+        /// 瑙掗�熷害鍦板潃
+        /// </summary>
+        public required string AngularVelocityAddress { get; set; }
+        /// <summary>
+        /// 瑙掗�熷害鍊�
+        /// </summary>
+        public required double AngularVelocityValue { get; set; }
+    }
+}
diff --git a/LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs b/LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs
index a1dcd6f..1ddac98 100644
--- a/LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs
+++ b/LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs
@@ -50,10 +50,10 @@
             comboBoxPermission = new ComboBox();
             dataGridViewUM = new DataGridView();
             tableLayoutPanel4 = new TableLayoutPanel();
-            btnEdit = new HopeButton();
             btnFind = new HopeButton();
-            btnDel = new HopeButton();
+            btnEdit = new HopeButton();
             btnAdd = new ForeverButton();
+            btnDel = new HopeButton();
             grpSetting.SuspendLayout();
             tableLayoutPanel1.SuspendLayout();
             tableLayoutPanel2.SuspendLayout();
@@ -250,20 +250,40 @@
             // 
             tableLayoutPanel4.Anchor = AnchorStyles.Top | AnchorStyles.Right;
             tableLayoutPanel4.ColumnCount = 4;
-            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
-            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
-            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
-            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
-            tableLayoutPanel4.Controls.Add(btnEdit, 1, 0);
+            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
+            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
+            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
+            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
             tableLayoutPanel4.Controls.Add(btnFind, 0, 0);
-            tableLayoutPanel4.Controls.Add(btnDel, 3, 0);
+            tableLayoutPanel4.Controls.Add(btnEdit, 1, 0);
             tableLayoutPanel4.Controls.Add(btnAdd, 2, 0);
+            tableLayoutPanel4.Controls.Add(btnDel, 3, 0);
             tableLayoutPanel4.Location = new Point(457, 509);
             tableLayoutPanel4.Name = "tableLayoutPanel4";
             tableLayoutPanel4.RowCount = 1;
             tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
             tableLayoutPanel4.Size = new Size(400, 39);
             tableLayoutPanel4.TabIndex = 1;
+            // 
+            // btnFind
+            // 
+            btnFind.BorderColor = Color.FromArgb(220, 223, 230);
+            btnFind.ButtonType = ReaLTaiizor.Util.HopeButtonType.Primary;
+            btnFind.DangerColor = Color.FromArgb(245, 108, 108);
+            btnFind.DefaultColor = Color.FromArgb(255, 255, 255);
+            btnFind.Font = new Font("Segoe UI", 12F);
+            btnFind.HoverTextColor = Color.FromArgb(48, 49, 51);
+            btnFind.InfoColor = Color.FromArgb(144, 147, 153);
+            btnFind.Location = new Point(3, 3);
+            btnFind.Name = "btnFind";
+            btnFind.PrimaryColor = Color.FromArgb(64, 158, 255);
+            btnFind.Size = new Size(94, 33);
+            btnFind.SuccessColor = Color.FromArgb(103, 194, 58);
+            btnFind.TabIndex = 1;
+            btnFind.Text = "鏌ヨ";
+            btnFind.TextColor = Color.White;
+            btnFind.WarningColor = Color.FromArgb(230, 162, 60);
+            btnFind.Click += btnFind_Click;
             // 
             // btnEdit
             // 
@@ -285,24 +305,19 @@
             btnEdit.WarningColor = Color.FromArgb(230, 162, 60);
             btnEdit.Click += btnEdit_Click;
             // 
-            // btnFind
+            // btnAdd
             // 
-            btnFind.BorderColor = Color.FromArgb(220, 223, 230);
-            btnFind.ButtonType = ReaLTaiizor.Util.HopeButtonType.Primary;
-            btnFind.DangerColor = Color.FromArgb(245, 108, 108);
-            btnFind.DefaultColor = Color.FromArgb(255, 255, 255);
-            btnFind.Font = new Font("Segoe UI", 12F);
-            btnFind.HoverTextColor = Color.FromArgb(48, 49, 51);
-            btnFind.InfoColor = Color.FromArgb(144, 147, 153);
-            btnFind.Location = new Point(3, 3);
-            btnFind.Name = "btnFind";
-            btnFind.PrimaryColor = Color.FromArgb(64, 158, 255);
-            btnFind.Size = new Size(94, 33);
-            btnFind.SuccessColor = Color.FromArgb(103, 194, 58);
-            btnFind.TabIndex = 1;
-            btnFind.Text = "鏌ヨ";
-            btnFind.TextColor = Color.White;
-            btnFind.WarningColor = Color.FromArgb(230, 162, 60);
+            btnAdd.BackColor = Color.Transparent;
+            btnAdd.BaseColor = Color.FromArgb(35, 168, 109);
+            btnAdd.Font = new Font("Segoe UI", 12F);
+            btnAdd.Location = new Point(203, 3);
+            btnAdd.Name = "btnAdd";
+            btnAdd.Rounded = false;
+            btnAdd.Size = new Size(94, 33);
+            btnAdd.TabIndex = 4;
+            btnAdd.Text = "娣诲姞";
+            btnAdd.TextColor = Color.FromArgb(243, 243, 243);
+            btnAdd.Click += btnAdd_Click;
             // 
             // btnDel
             // 
@@ -323,20 +338,6 @@
             btnDel.TextColor = Color.White;
             btnDel.WarningColor = Color.FromArgb(230, 162, 60);
             btnDel.Click += btnDel_Click;
-            // 
-            // btnAdd
-            // 
-            btnAdd.BackColor = Color.Transparent;
-            btnAdd.BaseColor = Color.FromArgb(35, 168, 109);
-            btnAdd.Font = new Font("Segoe UI", 12F);
-            btnAdd.Location = new Point(203, 3);
-            btnAdd.Name = "btnAdd";
-            btnAdd.Rounded = false;
-            btnAdd.Size = new Size(94, 33);
-            btnAdd.TabIndex = 4;
-            btnAdd.Text = "娣诲姞";
-            btnAdd.TextColor = Color.FromArgb(243, 243, 243);
-            btnAdd.Click += btnAdd_Click;
             // 
             // UserManagementEditPage
             // 
diff --git a/LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.cs b/LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.cs
index f017dce..3c7371d 100644
--- a/LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.cs
+++ b/LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.cs
@@ -1,25 +1,27 @@
-锘縰sing LB_SmartVision.Forms.Pages.ProcessPage;
+锘縰sing LB_SmartVision.Forms.Pages.CameraPage;
+using LB_SmartVision.Forms.Pages.ProcessPage;
+using LB_SmartVision.Forms.Pages.SettingPage;
 using LB_SmartVision.ProcessRun;
+using LB_SmartVision.SQL;
+using LB_SmartVisionCommon;
 using LB_VisionControl;
 using LB_VisionProcesses;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Serialization;
 using System.Collections.Concurrent;
 using System.Data;
-using System.Text;
-using VisionControl.Forms;
-using LB_SmartVision.Forms.Pages.SettingPage;
-using LB_SmartVisionCommon;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
-using LB_SmartVision.Forms.Pages.CameraPage;
 using System.Security.Principal;
+using System.Text;
 using System.Windows.Forms;
+using VisionControl.Forms;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
 
 namespace LB_SmartVision.Forms.Pages.UserManagementPage
 {
     public partial class UserManagementEditPage : UserControl
     {
         public Action<string, LogInfoType> LogInfo;
+        List<RecordUserData> recordUserDatas = new List<RecordUserData>();
 
         public UserManagementEditPage()
         {
@@ -27,8 +29,9 @@
             Text = "鐢ㄦ埛绠$悊璁剧疆";
 
             InitializeComponent();
-            InitializeDataGridView();
             InitializeComboBox();
+            InitializeDataGridView();
+
         }
 
         /// <summary>
@@ -36,42 +39,9 @@
         /// </summary>
         private void InitializeDataGridView()
         {
+            this.dataGridViewUM.DataSource = recordUserDatas;
             // 璁剧疆DataGridView鍒楀
-            dataGridViewUM.ColumnCount = 4;
-
-            int totalWidth = dataGridViewUM.ClientSize.Width;
-            int columnCount = dataGridViewUM.ColumnCount;
-            int columnWidth = totalWidth / columnCount;
-
-            // 璁剧疆鏈�灏忓搴�
-            int minWidth = 100; // 鏈�灏忓搴�
-            if (columnWidth < minWidth)
-            {
-                columnWidth = minWidth;
-            }
-
-            for (int i = 0; i < columnCount; i++)
-            {
-                dataGridViewUM.Columns[i].Width = columnWidth;
-            }
-
-            // 璁剧疆鍒楁爣棰�
-            dataGridViewUM.Columns[0].Name = "鐢ㄦ埛鍚�";
-            //dataGridViewUM.Columns[1].Name = "瀵嗙爜";
-            dataGridViewUM.Columns[1].Name = "濮撳悕";
-            dataGridViewUM.Columns[2].Name = "宸ュ彿";
-            dataGridViewUM.Columns[3].Name = "鏉冮檺";
-
             dataGridViewUM.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
-
-            // 绂佹缂栬緫鍗曞厓鏍硷紙鍙�夛級
-            dataGridViewUM.ReadOnly = true;
-
-            // 鍏佽澶氳閫夋嫨锛堝彲閫夛級
-            dataGridViewUM.MultiSelect = false;
-
-            // 鏄剧ず琛屾爣棰橈紙鍙�夛級
-            dataGridViewUM.RowHeadersVisible = true;
         }
 
         /// <summary>
@@ -99,6 +69,8 @@
             comboBoxPermission.SelectedIndex = 0;
             textBoxUsername.Focus(); // 灏嗙劍鐐硅缃洖鐢ㄦ埛鍚嶈緭鍏ユ
         }
+
+        #region 娣诲姞鐢ㄦ埛鎸夐挳
         private void btnAdd_Click(object sender, EventArgs e)
         {
             // 楠岃瘉杈撳叆
@@ -112,41 +84,81 @@
                 return;
             }
 
-            // 鍒涘缓鏂拌鏁版嵁
-            string[] row = new string[]
+            RecordUserData user = new RecordUserData();
+            user.EmployeeNumber = this.textBoxEmployeeID.Text;
+            user.EmployeeAccount = this.textBoxUsername.Text;
+            user.EmployeePassword = this.textBoxPassword.Text;
+            user.EmployeeName = this.textBoxName.Text;
+            user.EmployeePermission = (UserPermission)this.comboBoxPermission.SelectedIndex;
+            // 娣诲姞鍒� UserManager
+            bool success = UserManager.Instance.AddUser(user);
+
+            if (success)
             {
-                textBoxUsername.Text,
-                //textBoxPassword.Text, // 瀹為檯搴旂敤涓瘑鐮佸簲璇ュ姞瀵�
-                textBoxName.Text,
-                textBoxEmployeeID.Text,
-                comboBoxPermission.SelectedItem.ToString()
-            };
+                recordUserDatas.Add(user);
 
-            // 璁剧疆鏁翠釜DataGridView鐨勯粯璁ゅ瓧浣撳拰棰滆壊
-            dataGridViewUM.DefaultCellStyle.Font = new Font("瀹嬩綋", 12);
-            dataGridViewUM.DefaultCellStyle.ForeColor = Color.Black;  // 瀛椾綋棰滆壊
-            dataGridViewUM.DefaultCellStyle.BackColor = Color.White;   // 鑳屾櫙棰滆壊
+                //MessageBox.Show("鐢ㄦ埛娣诲姞鎴愬姛锛�", "鎻愮ず",
+                //    MessageBoxButtons.OK, MessageBoxIcon.Information);
 
-            // 娣诲姞鏂拌鍒癉ataGridView
-            dataGridViewUM.Rows.Add(row);
+                // 娓呯┖杈撳叆妗�
+                ClearInputFields();
+            }
+            else
+            {
+                MessageBox.Show("娣诲姞鐢ㄦ埛澶辫触锛�", "閿欒",
+                    MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
 
-            // 娓呯┖杈撳叆妗�
-            ClearInputFields();
         }
+        #endregion
 
+        #region 鍒犻櫎鐢ㄦ埛鎸夐挳
         private void btnDel_Click(object sender, EventArgs e)
         {
             if (dataGridViewUM.SelectedRows.Count > 0)
             {
+                // 鑾峰彇閫変腑鐨勮
+                DataGridViewRow selectedRow = dataGridViewUM.SelectedRows[0];
+
                 // 纭鍒犻櫎
                 DialogResult result = MessageBox.Show("纭畾瑕佸垹闄ら�変腑鐨勮鍚楋紵",
                     "纭鍒犻櫎", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
 
                 if (result == DialogResult.Yes)
                 {
-                    foreach (DataGridViewRow row in dataGridViewUM.SelectedRows)
+                    try
                     {
-                        dataGridViewUM.Rows.Remove(row);
+                        // 鍏堣幏鍙栬鍒犻櫎鐨勬暟鎹�
+                        string employeeNumber = selectedRow.Cells[0].Value?.ToString();
+
+                        if (!string.IsNullOrEmpty(employeeNumber))
+                        {
+                            // 1. 浠庢暟鎹簮鍒犻櫎
+                            var dataSource = dataGridViewUM.DataSource as List<RecordUserData>;
+                            if (dataSource != null)
+                            {
+                                var itemToRemove = dataSource.FirstOrDefault(u => u.EmployeeNumber == employeeNumber);
+                                if (itemToRemove != null)
+                                {
+                                    dataSource.Remove(itemToRemove);
+                                }
+                            }
+
+                            // 2. 浠庣敤鎴风鐞嗗櫒鍒犻櫎
+                            UserManager.Instance.DeleteUser(employeeNumber);
+
+                            // 3. 鍒锋柊鏁版嵁缁戝畾
+                            dataGridViewUM.DataSource = null;
+                            dataGridViewUM.DataSource = dataSource;
+
+                            //MessageBox.Show("鍒犻櫎鎴愬姛锛�", "鎻愮ず",
+                            //    MessageBoxButtons.OK, MessageBoxIcon.Information);
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        MessageBox.Show($"鍒犻櫎澶辫触: {ex.Message}", "閿欒",
+                            MessageBoxButtons.OK, MessageBoxIcon.Error);
                     }
                 }
             }
@@ -156,9 +168,11 @@
                     MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
         }
+        #endregion
         private int editingRowIndex = -1;
         private bool isEditingMode = false;
         private string originalButtonText = "淇敼";
+        #region 淇敼鐢ㄦ埛淇℃伅
         private void btnEdit_Click(object sender, EventArgs e)
         {
             // 鍗曞厓鏍煎彲缂栬緫
@@ -227,8 +241,16 @@
                 // 娓呯┖杈撳叆妗�
                 ClearInputFields();
 
-                MessageBox.Show("淇敼瀹屾垚锛�", "鎻愮ず",
-                    MessageBoxButtons.OK, MessageBoxIcon.Information);
+                RecordUserData user = new RecordUserData();
+                user.EmployeeNumber = this.textBoxEmployeeID.Text;
+                user.EmployeeAccount = this.textBoxUsername.Text;
+                user.EmployeePassword = this.textBoxPassword.Text;
+                user.EmployeeName = this.textBoxName.Text;
+                user.EmployeePermission = (UserPermission)this.comboBoxPermission.SelectedIndex;
+                UserManager.Instance.UpdateUser(user);
+
+                //MessageBox.Show("淇敼瀹屾垚锛�", "鎻愮ず",
+                //    MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
         }
 
@@ -277,7 +299,6 @@
                 //textBoxPassword.PlaceholderText = "濡傞渶淇敼瀵嗙爜璇峰~鍐�";
             }
         }
-
         private void UpdateRowData(int rowIndex)
         {
             if (rowIndex >= 0 && rowIndex < dataGridViewUM.Rows.Count)
@@ -304,5 +325,17 @@
                 row.Cells[3].Value = comboBoxPermission.SelectedItem.ToString();
             }
         }
+        #endregion
+
+
+        #region 鏌ヨ鐢ㄦ埛淇℃伅
+        private void btnFind_Click(object sender, EventArgs e)
+        {
+            List<RecordUserData> recordUserDatas = UserManager.Instance.GetAllUsers();
+            this.dataGridViewUM.DataSource = recordUserDatas;
+            this.dataGridViewUM.AutoGenerateColumns = true;
+        }
+        #endregion
+
     }
 }
diff --git a/LB_SmartVision/GlobalVar.cs b/LB_SmartVision/GlobalVar.cs
index 230e920..6c5862a 100644
--- a/LB_SmartVision/GlobalVar.cs
+++ b/LB_SmartVision/GlobalVar.cs
@@ -1,4 +1,5 @@
-锘縰sing LB_SmartVision.Forms.Pages.SettingPage;
+锘縰sing LB_SmartVision.Forms.Pages.MotionControlPage;
+using LB_SmartVision.Forms.Pages.SettingPage;
 using LB_SmartVision.ProcessRun;
 using LB_SmartVision.Tool;
 using LB_VisionProcesses.Cameras;
@@ -48,6 +49,14 @@
         public static ConcurrentDictionary<int, ConcurrentDictionary<string, string>> dicProcessSetting { get; set; } = new ConcurrentDictionary<int, ConcurrentDictionary<string, string>>();
 
         /// <summary>
+        /// 杩愬姩鎺ф暟鎹埗闆嗗悎 Key:浜у搧鍚嶇О锛孷alue: SN,RecordMotionControlData
+        /// </summary>
+        public static ConcurrentDictionary<string, ConcurrentDictionary<string, RecordMotionControlData>> dicMotionControlData { get; set; } = new ConcurrentDictionary<string, ConcurrentDictionary<string, RecordMotionControlData>>();
+
+        public static string allMotionControlDataPath
+            => GlobalVar.strApplicationPath + "\\鎵�鏈変骇鍝乗\" + GlobalVar.strProductName + "\\A_MotionControlDatas.json";
+
+        /// <summary>
         /// 甯冨眬闆嗗悎
         /// </summary>
         public static ConcurrentDictionary<int, Layout> dicLayout { get; set; } = new ConcurrentDictionary<int, Layout>();
diff --git a/LB_SmartVision/LB_SmartVision.csproj b/LB_SmartVision/LB_SmartVision.csproj
index e242bd3..184052f 100644
--- a/LB_SmartVision/LB_SmartVision.csproj
+++ b/LB_SmartVision/LB_SmartVision.csproj
@@ -47,6 +47,7 @@
   </ItemGroup>
 
   <ItemGroup>
+    <PackageReference Include="CsvHelper" Version="33.1.0" />
     <PackageReference Include="MaterialSkin.NET5" Version="1.0.2" />
   </ItemGroup>
 
diff --git a/LB_SmartVision/SQL/DatabaseRecordProductDataHelper.cs b/LB_SmartVision/SQL/DatabaseRecordProductDataHelper.cs
index ae357bf..7e46d51 100644
--- a/LB_SmartVision/SQL/DatabaseRecordProductDataHelper.cs
+++ b/LB_SmartVision/SQL/DatabaseRecordProductDataHelper.cs
@@ -47,7 +47,7 @@
                                                  InspectionOperator VARCHAR(255),
                                                  NGType VARCHAR(255),
                                                  NGSize VARCHAR(255),
-                                                 DetectionTime VARCHAR(255)),
+                                                 DetectionTime VARCHAR(255),
                                                  CameraInspection VARCHAR(255),
                                                  CreatedDate DATETIME DEFAULT CURRENT_TIMESTAMP,
                                                  INDEX idx_created_date (CreatedDate),
diff --git a/LB_SmartVision/VisionForm.Designer.cs b/LB_SmartVision/VisionForm.Designer.cs
index 3cbbadf..ef45a32 100644
--- a/LB_SmartVision/VisionForm.Designer.cs
+++ b/LB_SmartVision/VisionForm.Designer.cs
@@ -61,7 +61,7 @@
             theme_VisionForm.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0);
             theme_VisionForm.Image = (Image)resources.GetObject("theme_VisionForm.Image");
             theme_VisionForm.Location = new Point(0, 0);
-            theme_VisionForm.Margin = new Padding(4, 4, 4, 4);
+            theme_VisionForm.Margin = new Padding(4);
             theme_VisionForm.Name = "theme_VisionForm";
             theme_VisionForm.Padding = new Padding(12, 88, 12, 11);
             theme_VisionForm.RoundCorners = true;
@@ -77,7 +77,7 @@
             sc_VisionForm.Dock = DockStyle.Fill;
             sc_VisionForm.FixedPanel = FixedPanel.Panel2;
             sc_VisionForm.Location = new Point(12, 88);
-            sc_VisionForm.Margin = new Padding(4, 4, 4, 4);
+            sc_VisionForm.Margin = new Padding(4);
             sc_VisionForm.Name = "sc_VisionForm";
             sc_VisionForm.Orientation = Orientation.Horizontal;
             // 
@@ -89,7 +89,7 @@
             // 
             sc_VisionForm.Panel2.Controls.Add(grb_Info);
             sc_VisionForm.Size = new Size(1416, 781);
-            sc_VisionForm.SplitterDistance = 595;
+            sc_VisionForm.SplitterDistance = 592;
             sc_VisionForm.SplitterWidth = 5;
             sc_VisionForm.TabIndex = 1;
             // 
@@ -108,7 +108,7 @@
             tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Absolute, 60F));
             tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Absolute, 39F));
             tlp_MainView.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
-            tlp_MainView.Size = new Size(1416, 595);
+            tlp_MainView.Size = new Size(1416, 592);
             tlp_MainView.TabIndex = 1;
             tlp_MainView.TagString = null;
             // 
@@ -122,7 +122,7 @@
             materialTabControl.MouseState = MaterialSkin.MouseState.HOVER;
             materialTabControl.Name = "materialTabControl";
             materialTabControl.SelectedIndex = 0;
-            materialTabControl.Size = new Size(1412, 492);
+            materialTabControl.Size = new Size(1412, 489);
             materialTabControl.TabIndex = 0;
             // 
             // tlp_VisionMainOperator
@@ -144,7 +144,7 @@
             tlp_VisionMainOperator.Controls.Add(com_ProductName, 8, 0);
             tlp_VisionMainOperator.Dock = DockStyle.Fill;
             tlp_VisionMainOperator.Location = new Point(4, 64);
-            tlp_VisionMainOperator.Margin = new Padding(4, 4, 4, 4);
+            tlp_VisionMainOperator.Margin = new Padding(4);
             tlp_VisionMainOperator.Name = "tlp_VisionMainOperator";
             tlp_VisionMainOperator.RowCount = 1;
             tlp_VisionMainOperator.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
@@ -158,7 +158,7 @@
             ckb_AllowRun.Font = new Font("瀹嬩綋", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
             ckb_AllowRun.ForeColor = SystemColors.Control;
             ckb_AllowRun.Location = new Point(4, 4);
-            ckb_AllowRun.Margin = new Padding(4, 4, 4, 4);
+            ckb_AllowRun.Margin = new Padding(4);
             ckb_AllowRun.MinimumSize = new Size(1, 1);
             ckb_AllowRun.Name = "ckb_AllowRun";
             ckb_AllowRun.Size = new Size(148, 23);
@@ -177,7 +177,7 @@
             btn_Login.ImageAlign = ContentAlignment.MiddleLeft;
             btn_Login.InactiveColor = Color.FromArgb(32, 34, 37);
             btn_Login.Location = new Point(160, 4);
-            btn_Login.Margin = new Padding(4, 4, 4, 4);
+            btn_Login.Margin = new Padding(4);
             btn_Login.Name = "btn_Login";
             btn_Login.PressedBorderColor = Color.FromArgb(165, 37, 37);
             btn_Login.PressedColor = Color.FromArgb(165, 37, 37);
@@ -199,7 +199,7 @@
             btn_GlobalVar.ImageAlign = ContentAlignment.MiddleLeft;
             btn_GlobalVar.InactiveColor = Color.FromArgb(32, 34, 37);
             btn_GlobalVar.Location = new Point(1096, 4);
-            btn_GlobalVar.Margin = new Padding(4, 4, 4, 4);
+            btn_GlobalVar.Margin = new Padding(4);
             btn_GlobalVar.Name = "btn_GlobalVar";
             btn_GlobalVar.PressedBorderColor = Color.FromArgb(165, 37, 37);
             btn_GlobalVar.PressedColor = Color.FromArgb(165, 37, 37);
@@ -219,7 +219,7 @@
             com_ProductName.FormattingEnabled = true;
             com_ProductName.ItemHeight = 20;
             com_ProductName.Location = new Point(1252, 4);
-            com_ProductName.Margin = new Padding(4, 4, 4, 4);
+            com_ProductName.Margin = new Padding(4);
             com_ProductName.Name = "com_ProductName";
             com_ProductName.Size = new Size(152, 26);
             com_ProductName.TabIndex = 5;
@@ -231,7 +231,7 @@
             materialTabSelector.Depth = 0;
             materialTabSelector.Dock = DockStyle.Fill;
             materialTabSelector.Location = new Point(4, 4);
-            materialTabSelector.Margin = new Padding(4, 4, 4, 4);
+            materialTabSelector.Margin = new Padding(4);
             materialTabSelector.MouseState = MaterialSkin.MouseState.HOVER;
             materialTabSelector.Name = "materialTabSelector";
             materialTabSelector.Size = new Size(1408, 52);
@@ -249,7 +249,7 @@
             grb_Info.MinimumSize = new Size(1, 1);
             grb_Info.Name = "grb_Info";
             grb_Info.Padding = new Padding(0, 40, 0, 0);
-            grb_Info.Size = new Size(1416, 181);
+            grb_Info.Size = new Size(1416, 184);
             grb_Info.TabIndex = 1;
             grb_Info.Text = "鏃ュ織鏄剧ず鍖猴細";
             grb_Info.TextAlignment = ContentAlignment.MiddleLeft;
@@ -265,7 +265,7 @@
             rich_Info.Name = "rich_Info";
             rich_Info.Padding = new Padding(2);
             rich_Info.ShowText = false;
-            rich_Info.Size = new Size(1416, 141);
+            rich_Info.Size = new Size(1416, 144);
             rich_Info.TabIndex = 0;
             rich_Info.TextAlignment = ContentAlignment.MiddleLeft;
             // 
@@ -279,8 +279,8 @@
             cb_VisionForm.EnableMaximizeButton = true;
             cb_VisionForm.EnableMinimizeButton = true;
             cb_VisionForm.ForeColor = Color.FromArgb(155, 155, 155);
-            cb_VisionForm.Location = new Point(1330, 13);
-            cb_VisionForm.Margin = new Padding(4, 4, 4, 4);
+            cb_VisionForm.Location = new Point(1330, 18);
+            cb_VisionForm.Margin = new Padding(4);
             cb_VisionForm.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
             cb_VisionForm.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
             cb_VisionForm.Name = "cb_VisionForm";
@@ -296,7 +296,7 @@
             Controls.Add(theme_VisionForm);
             FormBorderStyle = FormBorderStyle.None;
             Icon = (Icon)resources.GetObject("$this.Icon");
-            Margin = new Padding(4, 4, 4, 4);
+            Margin = new Padding(4);
             MinimumSize = new Size(326, 76);
             Name = "VisionForm";
             Text = "杞儙澶栬瑙嗚妫�娴嬬郴缁�";
diff --git a/LB_SmartVision/VisionForm.cs b/LB_SmartVision/VisionForm.cs
index 31f11a8..2b0d895 100644
--- a/LB_SmartVision/VisionForm.cs
+++ b/LB_SmartVision/VisionForm.cs
@@ -10,6 +10,7 @@
 using LB_SmartVision.Forms.Pages.SettingPage;
 using LB_SmartVision.Forms.Pages.UserManagementPage;
 using LB_SmartVision.ProcessRun;
+using LB_SmartVision.SQL;
 using LB_SmartVision.Tool;
 using LB_SmartVisionCommon;
 using LB_SmartVisionLoginUI;
@@ -633,7 +634,15 @@
             {
                 LogInfo("鍏ㄥ眬鍙橀噺鍔犺浇澶辫触", LogInfoType.ERROR);
             }
-
+            GlobalVar.dicMotionControlData.Clear();
+            if (LoadMotionControlDatas(GlobalVar.allMotionControlDataPath))
+            {
+                LogInfo("杩愬姩鎺у埗鍙傛暟鍔犺浇鎴愬姛", LogInfoType.PASS);
+            }
+            else
+            {
+                LogInfo("杩愬姩鎺у埗鍙傛暟鍔犺浇澶辫触", LogInfoType.ERROR);
+            }
             //鍔犺浇娴佺▼
             GlobalVar.dicProcesses.Clear();
             if (LoadAllProcess(GlobalVar.allProcessConnectionStringPath))
@@ -687,6 +696,7 @@
             com_ProductName.Items.Add("鏂板");
             com_ProductName.Text = GlobalVar.strProductName;
             this.WindowState = FormWindowState.Maximized;
+            DatabaseRecordProductDataHelper.InitializeDatabase();
         }
 
         public void SaveAllSetting()
@@ -698,6 +708,54 @@
             SaveAllProcessSetting();
             SaveAllLayout();
             SaveAllCsv();
+            SaveMotionControlDatas();
+        }
+        public bool LoadMotionControlDatas(string alMotionControlDataPath)
+        {
+            try
+            {
+                GlobalVar.dicMotionControlData = ConfigManager<ConcurrentDictionary<string, ConcurrentDictionary<string, RecordMotionControlData>>>.LoadConfig<ConcurrentDictionary<string, ConcurrentDictionary<string, RecordMotionControlData>>>(alMotionControlDataPath);
+            }
+            catch
+            {
+                return false;
+            }
+            return true;
+        }
+        public bool SaveMotionControlDatas()
+        {
+            try
+            {
+                ConcurrentDictionary<string, List<string>> removeCameraSN = new ConcurrentDictionary<string, List<string>>();
+                foreach (var item in GlobalVar.dicMotionControlData.Keys)
+                {
+                    List<string> list = new List<string>();
+                    foreach (var itemSN in GlobalVar.dicMotionControlData[item].Keys)
+                    {
+                        if (!GlobalVar.dicCameras.Keys.Contains(itemSN))
+                        {
+                            list.Add(itemSN);
+                        }
+                    }
+                    if (list.Count > 0)
+                    {
+                        removeCameraSN.TryAdd(item, list);
+                    }
+                }
+                foreach (var item in removeCameraSN.Keys)
+                {
+                    foreach (var itemSN in removeCameraSN[item])
+                    {
+                        GlobalVar.dicMotionControlData[item].Keys.Remove(itemSN);
+                    }
+                }
+                ConfigManager<ConcurrentDictionary<string, ConcurrentDictionary<string, RecordMotionControlData>>>.SaveConfig<ConcurrentDictionary<string, ConcurrentDictionary<string, RecordMotionControlData>>>(GlobalVar.dicMotionControlData, GlobalVar.allMotionControlDataPath);
+            }
+            catch
+            {
+                return false;
+            }
+            return true;
         }
 
         public bool LoadAllCameras(string allCamerasConnectionStringPath)
diff --git a/LB_SmartVisionCommon/UserManager.cs b/LB_SmartVisionCommon/UserManager.cs
index 22bef7d..847f25f 100644
--- a/LB_SmartVisionCommon/UserManager.cs
+++ b/LB_SmartVisionCommon/UserManager.cs
@@ -113,11 +113,11 @@
             {
                 _currentUser = user;
             }
-            if (!CheckPermission(true))
-            {
-                MessageBox.Show("闇�瑕佺鐞嗗憳鏉冮檺鎵嶈兘娣诲姞鐢ㄦ埛锛�", "鏉冮檺涓嶈冻", MessageBoxButtons.OK, MessageBoxIcon.Warning);
-                return false;
-            }
+            //if (!CheckPermission(true))
+            //{
+            //    MessageBox.Show("闇�瑕佺鐞嗗憳鏉冮檺鎵嶈兘娣诲姞鐢ㄦ埛锛�", "鏉冮檺涓嶈冻", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+            //    return false;
+            //}
 
             if (_users.Any(u => u.Value.EmployeeNumber == user.EmployeeNumber ||
                                u.Value.EmployeeAccount == user.EmployeeAccount))
@@ -125,6 +125,7 @@
                 MessageBox.Show("鍛樺伐鍙锋垨璐﹀彿宸插瓨鍦紒", "娣诲姞澶辫触", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                 return false;
             }
+
             RecordUserData recordUserData = new RecordUserData();
             recordUserData.EmployeeNumber = user.EmployeeNumber;
             recordUserData.EmployeeAccount = user.EmployeeAccount;
@@ -143,18 +144,18 @@
         /// <returns>鏄惁鍒犻櫎鎴愬姛</returns>
         public bool DeleteUser(string employeeNumber)
         {
-            if (!CheckPermission(true))
-            {
-                MessageBox.Show("闇�瑕佺鐞嗗憳鏉冮檺鎵嶈兘鍒犻櫎鐢ㄦ埛锛�", "鏉冮檺涓嶈冻", MessageBoxButtons.OK, MessageBoxIcon.Warning);
-                return false;
-            }
+            //if (!CheckPermission(true))
+            //{
+            //    MessageBox.Show("闇�瑕佺鐞嗗憳鏉冮檺鎵嶈兘鍒犻櫎鐢ㄦ埛锛�", "鏉冮檺涓嶈冻", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+            //    return false;
+            //}
 
-            // 绠$悊鍛樹笉鑳藉垹闄よ嚜宸�
-            if (_currentUser.EmployeeNumber == employeeNumber)
-            {
-                MessageBox.Show("涓嶈兘鍒犻櫎褰撳墠鐧诲綍鐨勭敤鎴凤紒", "鍒犻櫎澶辫触", MessageBoxButtons.OK, MessageBoxIcon.Warning);
-                return false;
-            }
+            //// 绠$悊鍛樹笉鑳藉垹闄よ嚜宸�
+            //if (_currentUser.EmployeeNumber == employeeNumber)
+            //{
+            //    MessageBox.Show("涓嶈兘鍒犻櫎褰撳墠鐧诲綍鐨勭敤鎴凤紒", "鍒犻櫎澶辫触", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+            //    return false;
+            //}
 
             var user = _users.FirstOrDefault(u => u.Value.EmployeeNumber == employeeNumber);
             if (user.Value != null)

--
Gitblit v1.9.3