From e9f47e76b9932949c9df829e98b09938eb93e870 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期三, 01 七月 2020 17:53:09 +0800
Subject: [PATCH] 完成 板卡警报+监听功能

---
 src/Bro.Device.GTSCard/GTSCardDriver.cs                     |  295 +++++-
 src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs | 1314 ++++++++++++---------------------
 src/Bro.Common.Model/Model/MonitorSet.cs                    |   63 +
 src/Bro.Common.Model/Model/IOItem.cs                        |   30 
 src/Bro.Common.Model/Bro.Common.Model.csproj                |    2 
 src/Bro.Process/ProcessControl.cs                           |    6 
 src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj      |    9 
 src/Bro.Common.Model/Helper/EnumHelper.cs                   |   13 
 src/Bro.Device.GTSCard/GTSCardConfig.cs                     |  229 +----
 src/Bro.Process/ProcessControl_Calibration.cs               |    6 
 src/Bro.Common.Model/Interface/IMonitor.cs                  |    4 
 src/Bro.UI.Device.Winform/Properties/Resources.Designer.cs  |   63 +
 src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs          |    4 
 src/Bro.Common.Model/Interface/IMonitorSetCollection.cs     |    5 
 src/Bro.Common.Model/Model/WarningSet.cs                    |   95 ++
 src/Bro.UI.Device.Winform/Properties/Resources.resx         |  120 +++
 src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx        |   23 
 src/Bro.Common.Device/DeviceBase/PLCBase.cs                 |    6 
 src/Bro.Common.Model/Interface/IWarningSetCollection.cs     |   36 
 19 files changed, 1,217 insertions(+), 1,106 deletions(-)

diff --git a/src/Bro.Common.Device/DeviceBase/PLCBase.cs b/src/Bro.Common.Device/DeviceBase/PLCBase.cs
index c6f8d6f..0f56fbb 100644
--- a/src/Bro.Common.Device/DeviceBase/PLCBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/PLCBase.cs
@@ -36,8 +36,8 @@
         public abstract void WriteSingleAddress(int address, int writeValue, bool waitForReply = true);
 
         #region IMonitor
-        public event Action<DateTime, string, IDevice, MonitorSet> OnMonitorInvoke;
-        public event Action<DateTime, IDevice, WarningSet> OnMonitorAlarm;
+        public event Action<DateTime, string, IDevice, IMonitorSet> OnMonitorInvoke;
+        public event Action<DateTime, IDevice, IWarningSet> OnMonitorAlarm;
 
         public List<int> MonitorValues { get; set; } = new List<int>();
 
@@ -157,7 +157,7 @@
 
             ProcessResponse resValues = monitorSet.Response;
 
-            if (resValues.ResultValue == (int)PLCReplyValue.IGNORE)
+            if (resValues.ResultValue == (int)ReplyValue.IGNORE)
             {
                 return;
             }
diff --git a/src/Bro.Common.Model/Bro.Common.Model.csproj b/src/Bro.Common.Model/Bro.Common.Model.csproj
index 547c452..de64a2e 100644
--- a/src/Bro.Common.Model/Bro.Common.Model.csproj
+++ b/src/Bro.Common.Model/Bro.Common.Model.csproj
@@ -139,6 +139,7 @@
     <Compile Include="Interface\IHalconToolPath.cs" />
     <Compile Include="Interface\IInputConfig.cs" />
     <Compile Include="Interface\IMonitor.cs" />
+    <Compile Include="Interface\IWarningSetCollection.cs" />
     <Compile Include="Interface\IMonitorSetCollection.cs" />
     <Compile Include="Interface\IOperationConfig.cs" />
     <Compile Include="Interface\IProcessConfig.cs" />
@@ -153,6 +154,7 @@
     <Compile Include="Model\ModbusFrame.cs" />
     <Compile Include="Model\MonitorSet.cs" />
     <Compile Include="Model\PageRequest.cs" />
+    <Compile Include="Model\IOItem.cs" />
     <Compile Include="Model\PLCItem.cs" />
     <Compile Include="Model\ProcessResponse.cs" />
     <Compile Include="Model\ResponseMessage.cs" />
diff --git a/src/Bro.Common.Model/Helper/EnumHelper.cs b/src/Bro.Common.Model/Helper/EnumHelper.cs
index cc90e89..905013c 100644
--- a/src/Bro.Common.Model/Helper/EnumHelper.cs
+++ b/src/Bro.Common.Model/Helper/EnumHelper.cs
@@ -365,7 +365,7 @@
         //    Jpeg,
         //}
 
-        public enum PLCReplyValue
+        public enum ReplyValue
         {
             OK = 1,
             NG = -1,
@@ -583,5 +583,16 @@
             [Description("杩愬姩鎺у埗鍣ㄦ病鏈夊搷搴�")]
             GRCNotAck = -7                           // 杩愬姩鎺у埗鍣ㄦ病鏈夊搷搴�
         }
+
+        /// <summary>
+        /// 杩愬姩鏉垮崱 IO 绫诲瀷锛圛N OUT锛�
+        /// </summary>
+        public enum IOModel
+        {
+            [Description("In杈撳叆")]
+            In = 0,
+            [Description("Out杈撳嚭")]
+            Out = 1
+        }
     }
 }
diff --git a/src/Bro.Common.Model/Interface/IMonitor.cs b/src/Bro.Common.Model/Interface/IMonitor.cs
index abea46c..979e30e 100644
--- a/src/Bro.Common.Model/Interface/IMonitor.cs
+++ b/src/Bro.Common.Model/Interface/IMonitor.cs
@@ -10,7 +10,7 @@
         void Monitor();
         void ResetAlarm();
 
-        event Action<DateTime, string, IDevice, MonitorSet> OnMonitorInvoke;
-        event Action<DateTime, IDevice, WarningSet> OnMonitorAlarm;
+        event Action<DateTime, string, IDevice, IMonitorSet> OnMonitorInvoke;
+        event Action<DateTime, IDevice, IWarningSet> OnMonitorAlarm;
     }
 }
diff --git a/src/Bro.Common.Model/Interface/IMonitorSetCollection.cs b/src/Bro.Common.Model/Interface/IMonitorSetCollection.cs
index 9573c2c..d7facbe 100644
--- a/src/Bro.Common.Model/Interface/IMonitorSetCollection.cs
+++ b/src/Bro.Common.Model/Interface/IMonitorSetCollection.cs
@@ -1,4 +1,5 @@
-锘縰sing System.Collections.Generic;
+锘縰sing Bro.Common.Model;
+using System.Collections.Generic;
 
 namespace Bro.Common.Interface
 {
@@ -35,5 +36,7 @@
         string DisplayText { get; }
 
         string SourceDevice { get; set; }
+
+        ProcessResponse Response { get; set; }
     }
 }
diff --git a/src/Bro.Common.Model/Interface/IWarningSetCollection.cs b/src/Bro.Common.Model/Interface/IWarningSetCollection.cs
new file mode 100644
index 0000000..e694264
--- /dev/null
+++ b/src/Bro.Common.Model/Interface/IWarningSetCollection.cs
@@ -0,0 +1,36 @@
+锘縰sing System;
+using System.Collections.Generic;
+
+namespace Bro.Common.Interface
+{
+    public interface IWarningSetCollection
+    {
+        List<IWarningSet> WarningSetCollection { get; set; }
+
+        List<IWarningSet> GetAllWarningSet();
+    }
+
+    public interface IWarningSet
+    {
+        string Id { get; set; }
+
+        string Name { get; set; }
+
+        string DisplayText { get; }
+
+        bool TriggerValue { get; set; }
+
+        string WarningCode { get; set; }
+
+        string WarningDescription { get; set; }
+
+        int WarningLvl { get; set; }
+
+        bool CurrentStatus { get; set; }
+
+        string Source { get; set; }
+
+        DateTime TriggerTime { get; set; }
+
+    }
+}
diff --git a/src/Bro.Common.Model/Model/IOItem.cs b/src/Bro.Common.Model/Model/IOItem.cs
new file mode 100644
index 0000000..64a2bca
--- /dev/null
+++ b/src/Bro.Common.Model/Model/IOItem.cs
@@ -0,0 +1,30 @@
+锘縰sing Bro.Common.Helper;
+using System;
+using System.Collections.Generic;
+using static Bro.Common.Helper.EnumHelper;
+
+namespace Bro.Common.Model
+{
+    public class IOItem : IComplexDisplay
+    {
+        /// <summary>
+        /// IO鐐圭紪鍙�
+        /// </summary>
+        public int IONum { get; set; }
+
+        /// <summary>
+        /// IO鐐圭殑鍊�
+        /// </summary>
+        public int Value { get; set; }
+
+        /// <summary>
+        /// IO鐐规槸in杩樻槸out
+        /// </summary>   
+        public IOModel Model { get; set; }
+
+        public string GetDisplayText()
+        {
+            return $"{Model.GetEnumDescription()},缂栧彿{IONum}锛孖O鐐圭殑鍊納Value}";
+        }
+    }
+}
diff --git a/src/Bro.Common.Model/Model/MonitorSet.cs b/src/Bro.Common.Model/Model/MonitorSet.cs
index 74d5a8f..50f977a 100644
--- a/src/Bro.Common.Model/Model/MonitorSet.cs
+++ b/src/Bro.Common.Model/Model/MonitorSet.cs
@@ -11,6 +11,7 @@
 using System.Linq;
 using System.Windows.Forms;
 using System.Windows.Forms.Design;
+using static Bro.Common.Helper.EnumHelper;
 
 namespace Bro.Common.Model
 {
@@ -61,6 +62,10 @@
         [Description("鐩戝惉璋冪敤鎻忚堪")]
         [DisplayName("鐩戝惉鍚嶇О")]
         public string Name { get; set; } = "";
+
+        [Browsable(false)]
+        [JsonIgnore]
+        public ProcessResponse Response { get; set; } = new ProcessResponse();
 
         [Browsable(false)]
         public string DisplayText
@@ -120,10 +125,10 @@
     public class MonitorSet : SimpleMonitorSet
     {
         /// <summary>
-        /// 鐩戝惉鍦板潃绱㈠紩 鎸夌収PLC鐩戝惉鍦板潃浠�0寮�濮嬬殑绱㈠紩
+        /// 鐩戝惉鍦板潃绱㈠紩 鎸夌収鐩戝惉鍦板潃浠�0寮�濮嬬殑绱㈠紩
         /// </summary>
         [Category("鐩戝惉璁剧疆")]
-        [Description("鐩戝惉鍦板潃绱㈠紩 鎸夌収PLC鐩戝惉鍦板潃浠�0寮�濮嬬殑绱㈠紩")]
+        [Description("鐩戝惉鍦板潃绱㈠紩 鎸夌収鐩戝惉鍦板潃浠�0寮�濮嬬殑绱㈠紩")]
         [DisplayName("瑙﹀彂绱㈠紩")]
         public int TriggerIndex { get; set; } = -1;
 
@@ -136,16 +141,16 @@
         public int TriggerValue { get; set; } = -1;
 
         /// <summary>
-        /// 浼犲叆鏁版嵁鍦板潃鐨勭储寮� 鎸夌収PLC鐩戝惉鍦板潃浠�0寮�濮嬬殑绱㈠紩闆嗗悎
+        /// 浼犲叆鏁版嵁鍦板潃鐨勭储寮� 鎸夌収鐩戝惉鍦板潃浠�0寮�濮嬬殑绱㈠紩闆嗗悎
         /// </summary>
         [Category("鐩戝惉璁剧疆")]
-        [Description("浼犲叆鏁版嵁鍦板潃鐨勭储寮� 鎸夌収PLC鐩戝惉鍦板潃浠�0寮�濮嬬殑绱㈠紩")]
+        [Description("浼犲叆鏁版嵁鍦板潃鐨勭储寮� 鎸夌収鐩戝惉鍦板潃浠�0寮�濮嬬殑绱㈠紩")]
         [DisplayName("浼犲叆鏁版嵁绱㈠紩")]
         [TypeConverter(typeof(SimpleCollectionConvert<int>))]
         public List<int> InputDataIndex { get; set; } = new List<int>();
 
         /// <summary>
-        /// 鏁版嵁鍦板潃 瀹為檯PLC瀵勫瓨鍣ㄧ殑鍦板潃锛屼緥濡� 40012
+        /// 鏁版嵁鍦板潃 瀹為檯瀵勫瓨鍣ㄧ殑鍦板潃锛屼緥濡� 40012
         /// </summary>
         [Category("鍥炰紶璁剧疆")]
         [Description("鍥炰紶鏁版嵁鍦板潃 瀹為檯PLC瀵勫瓨鍣ㄧ殑鍦板潃,10杩涘埗锛屼緥濡� 40012")]
@@ -153,16 +158,12 @@
         public int ReplyDataAddress { get; set; } = -1;
 
         /// <summary>
-        /// 閫氱煡鍦板潃 瀹為檯PLC瀵勫瓨鍣ㄧ殑鍦板潃锛屼緥濡� 40012
+        /// 閫氱煡鍦板潃 瀹為檯瀵勫瓨鍣ㄧ殑鍦板潃锛屼緥濡� 40012
         /// </summary>
         [Category("鍥炰紶璁剧疆")]
-        [Description("閫氱煡鍦板潃 瀹為檯PLC瀵勫瓨鍣ㄧ殑鍦板潃,10杩涘埗锛屼緥濡� 40012")]
+        [Description("閫氱煡鍦板潃 瀹為檯瀵勫瓨鍣ㄧ殑鍦板潃,10杩涘埗锛屼緥濡� 40012")]
         [DisplayName("閫氱煡鍦板潃")]
         public int NoticeAddress { get; set; } = -1;
-
-        [Browsable(false)]
-        [JsonIgnore]
-        public ProcessResponse Response { get; set; } = new ProcessResponse();
 
         public MonitorSet() { }
 
@@ -176,6 +177,46 @@
         }
     }
 
+    /// <summary>
+    /// 杩愬姩鏉垮崱鐩戝惉閰嶇疆瀵硅薄
+    /// </summary>
+    public class MotionCardMonitorSet : SimpleMonitorSet
+    {
+        /// <summary>
+        /// 鐩戝惉绫诲瀷
+        /// </summary>
+        [Category("鐩戝惉璁剧疆")]
+        [DisplayName("鐩戝惉绫诲瀷")]
+        [Description("鐩戝惉杩愬姩鏉垮崱 IO 绫诲瀷锛圛N OUT锛�")]
+        public IOModel MonitorIOModel { get; set; }
+
+        /// <summary>
+        /// 鐩戝惉鍦板潃绱㈠紩
+        /// </summary>
+        [Category("鐩戝惉璁剧疆")]
+        [Description("鐩戝惉鍦板潃绱㈠紩")]
+        [DisplayName("瑙﹀彂绱㈠紩")]
+        public int TriggerIndex { get; set; } = -1;
+
+        /// <summary>
+        /// 瑙﹀彂鍊�
+        /// </summary>
+        [Category("鐩戝惉璁剧疆")]
+        [Description("瑙﹀彂鍊硷紝璁剧疆涓�-999鏃跺彉鍖栧嵆瑙﹀彂")]
+        [DisplayName("瑙﹀彂鍊�")]
+        public int TriggerValue { get; set; } = -1;
+
+        /// <summary>
+        /// 鐩戝惉鍥炰紶
+        /// </summary>
+        [Category("鍥炰紶璁剧疆")]
+        [DisplayName("鐩戝惉鍥炰紶")]
+        [Description("鐩戝惉杩愬姩鏉垮崱锛屽苟寰�鎸囧畾鐨処O鍐欏叆鏁版嵁")]
+        [TypeConverter(typeof(CollectionCountConvert))]
+        [Editor(typeof(IOItem), typeof(UITypeEditor))]
+        public List<IOItem> ReplyIODatas { get; set; } = new List<IOItem>();
+    }
+
     public class IOperationConfigEditor : UITypeEditor
     {
         public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
diff --git a/src/Bro.Common.Model/Model/WarningSet.cs b/src/Bro.Common.Model/Model/WarningSet.cs
index 43fbbae..a57dbab 100644
--- a/src/Bro.Common.Model/Model/WarningSet.cs
+++ b/src/Bro.Common.Model/Model/WarningSet.cs
@@ -1,23 +1,24 @@
 锘縰sing Bro.Common.Helper;
+using Bro.Common.Interface;
 using Newtonsoft.Json;
 using System;
 using System.ComponentModel;
+using static Bro.Common.Helper.EnumHelper;
 
 namespace Bro.Common.Model
 {
-
     /// <summary>
-    /// 璀︽姤閰嶇疆
+    /// PLC璀︽姤閰嶇疆
     /// </summary>
-    public class WarningSet : IComplexDisplay
+    public class WarningSet : IComplexDisplay, IWarningSet
     {
         [Category("绱㈠紩璁剧疆")]
-        [Description("璀︽姤绱㈠紩鈥斺�斿瓧绱㈠紩")]
+        [Description("PLC璀︽姤绱㈠紩鈥斺�斿瓧绱㈠紩")]
         [DisplayName("璀︽姤瀛楃储寮�")]
         public int WarningIndex_Word { get; set; }
 
         [Category("绱㈠紩璁剧疆")]
-        [Description("璀︽姤绱㈠紩鈥斺�斾綅绱㈠紩")]
+        [Description("PLC璀︽姤绱㈠紩鈥斺�斾綅绱㈠紩")]
         [DisplayName("璀︽姤浣嶇储寮�")]
         public int WarningIndex_Bit { get; set; }
 
@@ -57,9 +58,91 @@
         [JsonIgnore]
         public DateTime TriggerTime { get; set; } = DateTime.Now;
 
+        [Browsable(false)]
+        public string Id { get; set; } = Guid.NewGuid().ToString();
+
+        [Category("涓�у寲璁剧疆")]
+        [Description("璀︽姤")]
+        [DisplayName("璀︽姤鍚嶇О")]
+        public string Name { get; set; } = "";
+
+        [Browsable(false)]
+        public string DisplayText => GetDisplayText();
+
         public string GetDisplayText()
         {
-            return $"{WarningIndex_Word}:{WarningIndex_Bit}-{WarningCode}-{WarningDescription}";
+            return $"{Name}-{WarningIndex_Word}:{WarningIndex_Bit}-{WarningCode}-{WarningDescription}";
+        }
+    }
+
+    /// <summary>
+    /// 杩愬姩鏉垮崱璀︽姤閰嶇疆瀵硅薄
+    /// </summary>
+    public class MotionCardWarningSet : IComplexDisplay, IWarningSet
+    {
+        [Browsable(false)]
+        public string Id { get; set; } = Guid.NewGuid().ToString();
+
+        [Category("涓�у寲璁剧疆")]
+        [Description("璀︽姤")]
+        [DisplayName("璀︽姤鍚嶇О")]
+        public string Name { get; set; } = "";
+
+        [Category("瑙﹀彂璁剧疆")]
+        [Description("褰撹瑙﹀彂绱㈠紩鐨勫�间笌璁剧疆鐨凾riggerValue鐩稿悓鏃讹紝璀︽姤瑙﹀彂")]
+        [DisplayName("瑙﹀彂绱㈠紩")]
+        public int TriggerIndex { get; set; }
+
+        /// <summary>
+        /// 璀︽姤绫诲瀷
+        /// </summary>
+        [Category("璀︽姤璁剧疆")]
+        [DisplayName("璀︽姤绫诲瀷")]
+        [Description("璀︽姤璁剧疆锛氳繍鍔ㄦ澘鍗� IO 绫诲瀷锛圛N OUT锛�")]
+        public IOModel WarningIOModel { get; set; }
+
+        [Category("瑙﹀彂璁剧疆")]
+        [Description("true锛氶珮鐢靛钩瑙﹀彂鎶ヨ false锛氫綆鐢靛钩瑙﹀彂鎶ヨ")]
+        [DisplayName("瑙﹀彂鍊�")]
+        public bool TriggerValue { get; set; } = true;
+
+        [Category("璀︽姤鍐呭")]
+        [Description("璀︽姤浠g爜")]
+        [DisplayName("璀︽姤浠g爜")]
+        public string WarningCode { get; set; }
+
+        [Category("璀︽姤鍐呭")]
+        [Description("璀︽姤鎻忚堪")]
+        [DisplayName("璀︽姤鎻忚堪")]
+        public string WarningDescription { get; set; }
+
+        [Category("绾у埆璁剧疆")]
+        [Description("璀︽姤绾у埆")]
+        [DisplayName("璀︽姤绾у埆")]
+        public int WarningLvl { get; set; } = 0;
+
+        /// <summary>
+        /// 琛ㄧず鎶ヨ鐘舵�侊紝鏄姤璀﹀湴鍧�鍊煎拰璀︽姤瑙﹀彂鍊兼瘮杈冨悗鐨勭粨鏋�
+        /// true 姝e湪鎶ヨ false 鍙栨秷鎶ヨ
+        /// </summary>
+        [Browsable(false)]
+        [JsonIgnore]
+        public bool CurrentStatus { get; set; } = false;
+
+        [Browsable(false)]
+        [JsonIgnore]
+        public string Source { get; set; } = "";
+
+        [Browsable(false)]
+        [JsonIgnore]
+        public DateTime TriggerTime { get; set; } = DateTime.Now;
+
+        [Browsable(false)]
+        public string DisplayText => GetDisplayText();
+
+        public string GetDisplayText()
+        {
+            return $"{Name}-{WarningIOModel.GetEnumDescription()}:{WarningCode}-{WarningDescription}";
         }
     }
 }
diff --git a/src/Bro.Device.GTSCard/GTSCardConfig.cs b/src/Bro.Device.GTSCard/GTSCardConfig.cs
index b440e1b..5c843a4 100644
--- a/src/Bro.Device.GTSCard/GTSCardConfig.cs
+++ b/src/Bro.Device.GTSCard/GTSCardConfig.cs
@@ -1,6 +1,7 @@
 锘縰sing Bro.Common.Base;
 using Bro.Common.Helper;
 using Bro.Common.Interface;
+using Bro.Common.Model;
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
@@ -39,20 +40,11 @@
         [Description("CardNum锛氬崱鍙�")]
         public int CardNum { get; set; }
 
-        //[Category("鏉垮崱閰嶇疆")]
-        //[Description("IO鍗″彿")]
-        //public int IOCardNum { get; set; }
-
         [Category("鏉垮崱閰嶇疆")]
         [DisplayName("鍒濆閰嶇疆鏂囦欢璺緞")]
         [Description("InitialConfigFilePath锛氬垵濮嬮厤缃枃浠惰矾寰�")]
         [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))]
         public string InitialConfigFilePath { get; set; }
-
-        [Category("IO鎵弿閰嶇疆")]
-        [DisplayName("鎵弿闂撮殧")]
-        [Description("ScanInterval锛氭壂鎻忛棿闅旓紝浠ユ绉掍负鍗曚綅")]
-        public int ScanInterval { get; set; } = 100;
 
         [Category("杞撮厤缃�")]
         [DisplayName("杞存暟閲�")]
@@ -76,15 +68,63 @@
         [Description("ActionAfterDelay锛氬姩浣滃畬鎴愬悗寤惰繜")]
         public int ActionAfterDelay { get; set; } = 100;
 
-        public bool IsEnableMonitor { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
-        public int MonitorInterval { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
-        public int MonitorTimeout { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
-        public List<IMonitorSet> MonitorSetCollection { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
+        [Category("璀︽姤閰嶇疆")]
+        [Description("WarningSetCollection锛氳鎶ラ厤缃垪琛�")]
+        [DisplayName("璀︽姤閰嶇疆")]
+        [TypeConverter(typeof(CollectionCountConvert))]
+        [Editor(typeof(WarningSetsEditor), typeof(UITypeEditor))]
+        public List<IWarningSet> WarningSetCollection { get; set; } = new List<IWarningSet>();
+
+        #region IMonitorConfig
+        [Category("鐩戝惉璁剧疆")]
+        [Description("MonitorSetCollection锛氱洃鍚搷浣滈厤缃泦鍚�")]
+        [DisplayName("鐩戝惉閰嶇疆")]
+        [TypeConverter(typeof(CollectionCountConvert))]
+        [Editor(typeof(ComplexCollectionEditor<MotionCardMonitorSet>), typeof(UITypeEditor))]
+        public List<IMonitorSet> MonitorSetCollection { get; set; } = new List<IMonitorSet>();
+
+        [Category("鐩戝惉璁剧疆")]
+        [Description("true锛氬惎鍔ㄧ洃鍚� false锛氬叧闂洃鍚�")]
+        [DisplayName("鐩戝惉鍚敤")]
+        public bool IsEnableMonitor { get; set; } = true;
+
+        [Category("鐩戝惉璁剧疆")]
+        [Description("鎵弿闂撮殧鏃堕棿锛屽崟浣嶏細ms")]
+        [DisplayName("鎵弿闂撮殧")]
+        public int MonitorInterval { get; set; } = 10;
+
+        [Category("鐩戝惉璁剧疆")]
+        [Description("瓒呮椂璁剧疆锛屽崟浣嶏細ms")]
+        [DisplayName("鐩戝惉瓒呮椂")]
+        public int MonitorTimeout { get; set; } = 500;
+
+        //[Category("浜嬩欢鍦板潃璁剧疆")]
+        //[Description("浜嬩欢寮�濮嬪湴鍧�锛孭LC鐨勫疄闄呭瘎瀛樺櫒鍦板潃銆傚崄杩涘埗锛屼笉鍖呭惈鍔熻兘鐮併��")]
+        //[DisplayName("鐩戝惉寮�濮嬪湴鍧�")]
+        //public int EventStartAddress { get; set; } = 8000;
+
+        //[Category("浜嬩欢鍦板潃璁剧疆")]
+        //[Description("浜嬩欢鍦板潃闀垮害锛屾渶澶ч暱搴�128")]
+        //[DisplayName("鐩戝惉闀垮害")]
+        //public int EventLength { get; set; } = 120;
 
         public List<IMonitorSet> GetAllMonitorSet()
         {
-            throw new NotImplementedException();
+            WarningSetCollection.ForEach(m => m.Source = this.Name);
+
+            MonitorSetCollection.ForEach(m => m.SourceDevice = this.Id);
+            return MonitorSetCollection;
         }
+        #endregion
+
+        //#region IMotion Related
+        //[Category("杩愬姩閰嶇疆")]
+        //[Description("杩愬姩杞寸姸鎬侀泦鍚�")]
+        //[DisplayName("杩愬姩杞寸姸鎬侀泦鍚�")]
+        //[TypeConverter(typeof(CollectionCountConvert))]
+        //[Editor(typeof(ComplexCollectionEditor<PLCMotionDefinition_State>), typeof(UITypeEditor))]
+        //public List<PLCMotionDefinition_State> MotionStateCollection { get; set; } = new List<PLCMotionDefinition_State>();
+        //#endregion
     }
 
     /// <summary>
@@ -575,165 +615,4 @@
         public AutoResetEvent MoveSendHandle { get; set; } = new AutoResetEvent(false);
     }
 
-    ///// <summary>
-    ///// 鐐逛綅绫诲瀷
-    ///// </summary>
-    //public enum PosType
-    //{
-    //    /// <summary>
-    //    /// 鐩寸嚎鎻掕ˉ
-    //    /// </summary>
-    //    Line = 1,
-    //    /// <summary>
-    //    /// 鍦嗗姬鎻掕ˉ(鍗婂緞)
-    //    /// </summary>
-    //    CircleRadius,
-    //    /// <summary>
-    //    /// 鍦嗗姬鎻掕ˉ(鍦嗗績)
-    //    /// </summary>
-    //    CircleCenter
-    //}
-
-
-    //public static class GTSCardParameter
-    //{
-    //    #region 杩愬姩鍙傛暟
-    //    public static int Dangliang = 1;
-    //    public static int AxisCount = 2;//杩愬姩杞存暟閲�
-    //    public static short CardNum = Convert.ToInt16(ConfigurationManager.AppSettings["cardNum"]);
-    //    public static short fifo = Convert.ToInt16(ConfigurationManager.AppSettings["fifo"]);
-    //    public static int FlySpeed = Convert.ToInt32(ConfigurationManager.AppSettings["flySpeed"]);
-    //    public static double FlyAcc = Convert.ToDouble(ConfigurationManager.AppSettings["flyAcc"]);
-    //    public static int P2PSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["p2pSpeed"]);
-    //    public static double P2PAcc = Convert.ToDouble(ConfigurationManager.AppSettings["p2pAcc"]);
-    //    public static double P2PDec = Convert.ToDouble(ConfigurationManager.AppSettings["p2pDec"]);
-    //    public static int FreeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["freeSpeed"]);
-    //    public static int VelEnd = Convert.ToInt32(ConfigurationManager.AppSettings["velEnd"]);//椋炴媿缁撴潫閫熷害
-    //    public static int HomeSpeed = Convert.ToInt32(ConfigurationManager.AppSettings["homeSpeed"]);
-    //    public static int Loading = Convert.ToInt32(ConfigurationManager.AppSettings["loading"]);
-    //    //public const short cardn = 0;//杩愬姩鎺у埗鍣ㄥ崱鍙� 榛樿涓猴細0
-    //    //public const short crdn = 1;//鍧愭爣绯诲彿 鍙栧�艰寖鍥达細[1, 2]
-    //    //public const short fifo = 0;//鎻掕ˉ缂撳瓨鍖哄彿 鍙栧�艰寖鍥达細[0, 1]锛岄粯璁ゅ�间负锛�0
-    //    //public const int flySpeed = 250;//椋炴媿閫熷害
-    //    //public const double flyAcc = 0.5;//椋炴媿鍔犻�熷害
-    //    //public const int gocatorSpeed = 150;//3D妫�娴嬭酱杩愬姩閫熷害
-    //    //public const int p2pSpeed = 250;//P2P閫熷害
-    //    //public const double p2pAcc = 1;//P2P鍔犻�熷害
-    //    //public const double p2pDec = 1;//P2P鍑忛�熷害
-    //    //public const int calibrationSpeed = 10;//鏍囧畾閫熷害
-    //    //public const int calibrationZ = 19336;//鏍囧畾Z杞撮珮搴�
-    //    //public const int barcodeSpeed = 250;//鏉$爜妫�娴嬭酱杩愬姩閫熷害
-    //    //public const int freeSpeed = 250;//闈炴娴嬫椂杞磋繍鍔ㄩ�熷害
-    //    //public const int velEnd = 0;//椋炴媿缁撴潫閫熷害
-    //    //public const int homeSpeed = 50;//鍥為浂閫熷害
-    //    //public const int loading = 80000;//涓婃枡浣嶇疆
-    //    #endregion
-
-    //    #region IO
-    //    /// <summary>
-    //    /// 杈撳叆IO榛樿鍊�
-    //    /// </summary>
-    //    public const int InDefaultValue = 0xFFDA;
-    //    /// <summary>
-    //    /// 澶圭揣姘旂几
-    //    /// </summary>
-    //    public const short EXO_1 = 100;//澶圭揣姘旂几
-    //    /// <summary>
-    //    /// 鏃ュ厜鐏�
-    //    /// </summary>
-    //    public const short EXO_2 = 101;//鏃ュ厜鐏�
-    //    /// <summary>
-    //    /// 鍏夋簮鍒囨崲
-    //    /// </summary>
-    //    public const short EXO_3 = 102;//鍏夋簮鍒囨崲
-    //    /// <summary>
-    //    /// 绾㈢伅
-    //    /// </summary>
-    //    public const short EXO_4 = 103;//绾㈢伅
-    //    /// <summary>
-    //    /// 榛勭伅
-    //    /// </summary>
-    //    public const short EXO_5 = 104;//榛勭伅
-    //    /// <summary>
-    //    /// 缁跨伅
-    //    /// </summary>
-    //    public const short EXO_6 = 105;//缁跨伅
-    //    /// <summary>
-    //    /// 铚傞福鍣�
-    //    /// </summary>
-    //    public const short EXO_7 = 106;//铚傞福鍣�
-    //    /// <summary>
-    //    /// Gocator X
-    //    /// </summary>
-    //    public const short EXO_8 = 107;//Gocator X
-
-    //    /// <summary>
-    //    /// 姝i潰鍏�(宸�)
-    //    /// </summary>
-    //    public const short EXO_9 = 108;//姝i潰鍏�(宸�)
-
-    //    /// <summary>
-    //    /// 姝i潰鍏�(鍚�)
-    //    /// </summary>
-    //    public const short EXO_10 = 109;//姝i潰鍏�(鍚�)
-
-    //    /// <summary>
-    //    /// 姝i潰鍏�(鍙�)
-    //    /// </summary>
-    //    public const short EXO_11 = 110;//姝i潰鍏�(鍙�)
-
-    //    /// <summary>
-    //    /// 姝i潰鍏�(鍓�)
-    //    /// </summary>
-    //    public const short EXO_12 = 111;//姝i潰鍏�(鍓�)
-
-    //    /// <summary>
-    //    /// Gocator Y
-    //    /// </summary>
-    //    public const short EXO_16 = 115;//Gocator Y
-
-    //    /// <summary>
-    //    /// 杈撳嚭IO榛樿鍊�
-    //    /// </summary>
-    //    public const int OutDefaultValue = 0xFFF;
-    //    /// <summary>
-    //    /// 宸﹀惎鍔�
-    //    /// </summary>
-    //    public const short EXI0 = 0;//宸﹁捣鍔�
-    //    /// <summary>
-    //    /// 鍙冲惎鍔�
-    //    /// </summary>
-    //    public const short EXI1 = 1;//鍙宠捣鍔�
-    //    /// <summary>
-    //    /// 鍋滄
-    //    /// </summary>
-    //    public const short EXI2 = 2;//鍋滄
-    //    /// <summary>
-    //    /// 澶嶄綅
-    //    /// </summary>
-    //    public const short EXI3 = 3;//澶嶄綅
-    //    /// <summary>
-    //    /// 鎬ュ仠
-    //    /// </summary>
-    //    public const short EXI4 = 4;//鎬ュ仠
-    //    /// <summary>
-    //    /// 闂ㄥ紑鍏�
-    //    /// </summary>
-    //    public const short EXI5 = 5;//闂ㄥ紑鍏�
-    //    /// <summary>
-    //    /// 瀹夊叏鍏夊箷
-    //    /// </summary>
-    //    public const short EXI6 = 6;//瀹夊叏鍏夊箷
-
-    //    public const short EXI7 = 7;//
-    //    /// <summary>
-    //    /// 澶圭揣姘旂几鍘熶綅
-    //    /// </summary>
-    //    public const short EXI8 = 8;//澶圭揣姘旂几鍘熶綅
-    //    /// <summary>
-    //    /// 澶圭揣姘旂几鍒颁綅
-    //    /// </summary>
-    //    public const short EXI9 = 9;//澶圭揣姘旂几鍒颁綅
-    //    #endregion
-    //}
 }
diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index e96d00c..58e27c7 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -6,7 +6,9 @@
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
+using System.Diagnostics;
 using System.Drawing;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading;
@@ -18,10 +20,6 @@
     [Device("GTSCard", "鍥洪珮鏉垮崱", EnumHelper.DeviceAttributeType.Device)]
     public class GTSCardDriver : DeviceBase, IMonitor, IMotion
     {
-        public event Action<DateTime, string, IDevice, MonitorSet> OnMonitorInvoke;
-        public event Action<DateTime, IDevice, WarningSet> OnMonitorAlarm;
-
-        public delegate bool OnAxisStartToCheckDelegate(int axisIndex, int startPosition, int endPosition);
         // 寮傚父浜嬩欢
         public Action<Exception> OnExceptionRaised;
 
@@ -266,18 +264,15 @@
         /// <returns></returns>
         public double GetPrfPosition(int axisNum)
         {
-            lock (moveLock)
+            double position = 0;
+            double prfpos = 0; uint pclock = 0;
+            var ret = GTSCardAPI.GT_GetPrfPos((short)IConfig.CardNum, (short)axisNum, out prfpos, 1, out pclock);
+            if (ret != (short)GTSRetCode.GRCRunOK)
             {
-                double position = 0;
-                double prfpos = 0; uint pclock = 0;
-                var ret = GTSCardAPI.GT_GetPrfPos((short)IConfig.CardNum, (short)axisNum, out prfpos, 1, out pclock);
-                if (ret != (short)GTSRetCode.GRCRunOK)
-                {
-                    throw new Exception("杞�" + axisNum + "鑾峰彇瑙勫垝浣嶇疆寮傚父锛岄敊璇爜锛�" + ret);
-                }
-                position = prfpos / IConfig.AxisVelocityRatio;
-                return position;
+                throw new Exception("杞�" + axisNum + "鑾峰彇瑙勫垝浣嶇疆寮傚父锛岄敊璇爜锛�" + ret);
             }
+            position = prfpos / IConfig.AxisVelocityRatio;
+            return position;
         }
 
         /// <summary>
@@ -300,7 +295,6 @@
                 return position;
             }
         }
-
 
         /// <summary>
         /// Set Single Axis Do Jog Move  
@@ -510,7 +504,7 @@
         }
 
         /// <summary>
-        /// 杩愬姩鍋滄
+        /// 鏌愪釜杞磋繍鍔ㄥ仠姝�
         /// </summary>
         /// <param name="axisNum">axisNo</param>
         /// <param name="option">0琛ㄧず骞虫粦鍋滄锛�1琛ㄧず绱ф�ュ仠姝�</param>
@@ -617,7 +611,7 @@
         }
 
         /// <summary>
-        /// 璇诲彇杈撳叆
+        /// 璇诲彇IO杈撳叆
         /// </summary>
         /// <param name="cardNum">鍗″彿</param>
         /// <param name="index">杈撳叆鍙�</param>
@@ -626,12 +620,27 @@
         {
             int value;
             GTSCardAPI.GT_GetDi(cardNum, GTSCardAPI.MC_GPI, out value);
-            if ((value & 1 << index) == 0) return true;//鏈夎緭鍏ヨ繑鍥瀟rue
+            if ((value & (1 << index)) == 0) return true;//鏈夎緭鍏ヨ繑鍥瀟rue
             else return false;          //鏃犺緭鍏ヨ繑鍥瀎alse
         }
 
         /// <summary>
-        /// 杈撳嚭
+        /// 璇诲彇IO杈撳嚭
+        /// </summary>
+        /// <param name="cardNum"></param>
+        /// <param name="index"></param>
+        /// <returns></returns>
+        public bool GetDoSts(short cardNum, short index)
+        {
+            int outSts;
+            short outNum = (short)(index % 100);
+            GTSCardAPI.GT_GetDo(cardNum, GTSCardAPI.MC_GPO, out outSts);
+            if ((outSts & (1 << outNum)) == 0) return true;
+            else return false;
+        }
+
+        /// <summary>
+        /// 鎸変綅璁剧疆鏁板瓧 IO 杈撳嚭鐘舵��
         /// </summary>
         /// <param name="cardNum">鍗″彿</param>
         /// <param name="index">杈撳嚭鍙�,杩斿洖1-16</param>
@@ -647,59 +656,6 @@
             {
                 GTSCardAPI.GT_SetDoBit(cardNum, GTSCardAPI.MC_GPO, outNum, 1);
             }
-        }
-
-        /// <summary>
-        /// 鍋滄 鏌愪釜杞�
-        /// </summary>
-        /// <param name="cardNum"></param>
-        /// <param name="axisNum">杞村彿</param>
-        /// <param name="value">鍋滄鏂瑰紡锛宖alse琛ㄧず骞虫粦鍋滄锛宼rue琛ㄧず绱ф�ュ仠姝�</param>
-        public void Stop(short cardNum, short axisNum, bool emergencyStop)
-        {
-            if (emergencyStop)
-            {
-                GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 1 << (axisNum - 1));
-            }
-            else
-            {
-                GTSCardAPI.GT_Stop(cardNum, 1 << (axisNum - 1), 0);
-            }
-        }
-
-        /// <summary>
-        /// IO杈撳嚭
-        /// </summary>
-        /// <param name="cardNum">鍗″彿</param>
-        /// <param name="mdl">妯″潡鍙�</param>
-        /// <param name="index">IO杈撳嚭</param>
-        /// <param name="value">true琛ㄧず杈撳嚭锛宖alse琛ㄧず鏃犺緭鍑�</param>
-        public void MC_WriteDigitalOutput(short cardNum, short mdl, short index, bool value)
-        {
-            if (value)
-            {
-                GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 0);
-            }
-            else
-            {
-                GTSCardAPI.GT_SetExtIoBit(cardNum, mdl, index, 1);
-            }
-        }
-
-        /// <summary>
-        /// 璇诲彇IO杈撳嚭鐘舵��
-        /// </summary>
-        /// <param name="cardNum"></param>
-        /// <param name="index"></param>
-        /// <returns></returns>
-        public bool GetDoSts(short cardNum, short index)
-        {
-            short outNum = 0;
-            int outSts;
-            outNum = (short)(index % 100);
-            GTSCardAPI.GT_GetDo(cardNum, GTSCardAPI.MC_GPO, out outSts);
-            if ((outSts & (1 << outNum)) == 0) return true;
-            else return false;
         }
 
         /// <summary>
@@ -722,9 +678,168 @@
 
         #endregion
 
-        public void Monitor()
+        #region IMonitor
+        public event Action<DateTime, string, IDevice, IMonitorSet> OnMonitorInvoke;
+        public event Action<DateTime, IDevice, IWarningSet> OnMonitorAlarm;
+
+        public List<IOItem> MonitorValues { get; set; } = new List<IOItem>();
+
+
+        public List<IOItem> GetMonitorValues()
         {
-            throw new NotImplementedException();
+            var result = new List<IOItem>();
+            //璇诲彇IO杈撳叆
+            int inValue;
+            GTSCardAPI.GT_GetDi((short)IConfig.CardNum, GTSCardAPI.MC_GPI, out inValue);
+            //璇诲彇IO杈撳嚭
+            int outValue;
+            GTSCardAPI.GT_GetDo((short)IConfig.CardNum, GTSCardAPI.MC_GPO, out outValue);
+
+            //瑙f瀽缁撴灉
+            for (var index = 1; index <= 16; index++)
+            {
+                IOItem inItem = new IOItem()
+                {
+                    IONum = index,
+                    Value = (inValue & (1 << index)) == 0 ? 1 : 0,
+                    Model = IOModel.In
+                };
+                IOItem outItem = new IOItem()
+                {
+                    IONum = index,
+                    Value = (outValue & (1 << index)) == 0 ? 1 : 0,
+                    Model = IOModel.Out
+                };
+                result.Add(inItem);
+                result.Add(outItem);
+            }
+
+            return result;
+        }
+
+        public async void Monitor()
+        {
+            await Task.Run(() =>
+            {
+                while (CurrentState != EnumHelper.DeviceState.DSClose && CurrentState != EnumHelper.DeviceState.DSExcept && CurrentState != EnumHelper.DeviceState.DSUninit)
+                {
+                    try
+                    {
+                        if (!IConfig.IsEnableMonitor)
+                            return;
+                        var newValues = GetMonitorValues();
+                        if (newValues == null || newValues.Count == 0)
+                            continue;
+
+                        Stopwatch sw = new Stopwatch();
+                        sw.Start();
+                        if (MonitorValues.Count == newValues.Count)
+                        {
+                            var tempNew = new List<IOItem>(newValues);//clone
+                            var tempOld = new List<IOItem>(MonitorValues);
+                            MonitorCheckAndInvoke(tempNew, tempOld);
+                        }
+                        MonitorValues = new List<IOItem>(newValues);
+                        sw.Stop();
+
+                        if (sw.ElapsedMilliseconds > 20)
+                        {
+                            LogAsync(DateTime.Now, $"{this.Name}杞鏃堕棿锛歿sw.ElapsedMilliseconds}", "");
+                        }
+
+                        if (IConfig.MonitorInterval > 0)
+                        {
+                            Thread.Sleep(IConfig.MonitorInterval);
+                        }
+
+                    }
+                    catch (Exception ex)
+                    {
+                        if (CurrentState == DeviceState.DSOpen)
+                        {
+                            LogAsync(DateTime.Now, $"{this.Name}鐩戝惉寮傚父", ex.GetExceptionMessage());
+                        }
+                    }
+                }
+            });
+        }
+
+        private void OnMethodInvoked(IAsyncResult ar)
+        {
+            MotionCardMonitorSet monitorSet = ar.AsyncState as MotionCardMonitorSet;
+            ProcessResponse resValues = monitorSet.Response;
+            if (resValues.ResultValue == (int)ReplyValue.IGNORE)
+            {
+                return;
+            }
+
+            Stopwatch sw = new Stopwatch();
+            sw.Start();
+            // 灏嗘寚瀹欼OItem鍐欏叆鏉垮崱
+            foreach (var replyIOData in monitorSet.ReplyIODatas)
+            {
+                //鍐欏叆IO杈撳嚭
+                if (replyIOData.Model == IOModel.Out)
+                {
+                    GTSCardAPI.GT_SetDoBit((short)IConfig.CardNum, GTSCardAPI.MC_GPI, (short)replyIOData.IONum, (short)replyIOData.Value);
+                }
+                // in鍙涓嶈兘鍐�
+            }
+            sw.Stop();
+            LogAsync(DateTime.Now, $"{Name}鍙嶉瀹屾垚锛岃�楁椂{sw.ElapsedMilliseconds}ms", $"{resValues.GetDisplayText()}");
+        }
+
+        protected void MonitorCheckAndInvoke(List<IOItem> tempNew, List<IOItem> tempOld)
+        {
+            #region 璀︽姤淇℃伅
+            Parallel.ForEach(IConfig.WarningSetCollection, wSet =>
+            {
+                MotionCardWarningSet warningSet = wSet as MotionCardWarningSet;
+
+                bool isOn = ((tempNew.FirstOrDefault(u => u.IONum == warningSet.TriggerIndex && u.Model == warningSet.WarningIOModel)?.Value >> warningSet.TriggerIndex) & 1) == (warningSet.TriggerValue ? 1 : 0);
+
+                if (warningSet.CurrentStatus != isOn)
+                {
+                    warningSet.CurrentStatus = isOn;
+                    warningSet.TriggerTime = DateTime.Now;
+                    warningSet.WarningDescription = $"璀︽姤锛歿warningSet.Name}-瑙﹀彂绱㈠紩锛歿warningSet.TriggerIndex}-{warningSet.WarningIOModel.GetEnumDescription()}:{warningSet.WarningCode}";
+                    SaveAlarmCSVAsync(DateTime.Now, this.Name, warningSet);
+                    OnMonitorAlarm?.BeginInvoke(DateTime.Now, this, warningSet, null, null);
+                }
+            });
+            #endregion
+
+            #region 鐩戝惉淇℃伅
+            Parallel.ForEach(IConfig.MonitorSetCollection, mSet =>
+            {
+                MotionCardMonitorSet monitorSet = mSet as MotionCardMonitorSet;
+                if (monitorSet.TriggerIndex < 0 || monitorSet.TriggerIndex > tempNew.Count)
+                {
+                    return;
+                }
+
+                var newIOItem = tempNew.FirstOrDefault(u => u.IONum == monitorSet.TriggerIndex);
+                var oldIOItem = tempOld.FirstOrDefault(u => u.IONum == monitorSet.TriggerIndex);
+
+                if (newIOItem?.Value != oldIOItem?.Value)
+                {
+                    if (monitorSet.TriggerValue == -999 || newIOItem.Value == monitorSet.TriggerValue)
+                    {
+                        if (monitorSet.OpConfig == null)
+                        {
+                            monitorSet.OpConfig = new OperationConfigBase();
+                        }
+
+                        //monitorSet.OpConfig.InputPara = monitorSet.InputDataIndex.ConvertAll(index =>
+                        //{
+                        //    return tempNew[index].Value;
+                        //}).ToList();
+
+                        OnMonitorInvoke?.BeginInvoke(DateTime.Now, monitorSet.InvokeDevice, this, monitorSet, OnMethodInvoked, monitorSet);
+                    }
+                }
+            });
+            #endregion
         }
 
         public void ResetAlarm()
@@ -769,5 +884,37 @@
             GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, 1, (short)IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count);
         }
 
+        object _alarmLock = new object();
+        private async void SaveAlarmCSVAsync(DateTime now, string plcName, IWarningSet ws)
+        {
+            await Task.Run(() =>
+            {
+                lock (_alarmLock)
+                {
+                    DirectoryInfo dir = new DirectoryInfo(this.IConfig.LogPath);
+                    if (!dir.Exists)
+                    {
+                        dir.Create();
+                    }
+
+                    string path = Path.Combine(IConfig.LogPath, $"Alarm_{Name}_{now.ToString("yyyyMMdd")}.csv");
+                    bool fileExist = File.Exists(path);
+
+                    using (StreamWriter writer = new StreamWriter(path, true, System.Text.Encoding.UTF8))
+                    {
+                        if (!fileExist)
+                        {
+                            writer.WriteLine("Time,Source,AlarmCode,AlarmDescription,AlarmStatus");
+                        }
+
+                        writer.WriteLine($"{now.ToString("HH:mm:ss.fff")},{plcName},{ws.WarningCode},{ws.WarningDescription},{(ws.CurrentStatus ? "鎶ヨ" : "鍋滄")}");
+
+                        writer.Flush();
+                        writer.Close();
+                    }
+                }
+            });
+        }
+        #endregion
     }
 }
diff --git a/src/Bro.Process/ProcessControl.cs b/src/Bro.Process/ProcessControl.cs
index 474d0c0..04271dd 100644
--- a/src/Bro.Process/ProcessControl.cs
+++ b/src/Bro.Process/ProcessControl.cs
@@ -484,7 +484,7 @@
         #endregion
 
         #region IMonitor鐩戝惉
-        protected virtual void OnMonitorInvoke(DateTime dt, string deviceId, IDevice sourceDevice, MonitorSet monitorSet)
+        protected virtual void OnMonitorInvoke(DateTime dt, string deviceId, IDevice sourceDevice, IMonitorSet monitorSet)
         {
             string methodCode = monitorSet.MethodCode;
 
@@ -642,9 +642,9 @@
         #endregion
 
         #region 鎶ヨ鍜孌ownTime
-        ObservableCollection<WarningSet> _warningRemains = new ObservableCollection<WarningSet>();
+        ObservableCollection<IWarningSet> _warningRemains = new ObservableCollection<IWarningSet>();
 
-        protected virtual void OnMonitorAlarm(DateTime dt, IDevice device, WarningSet warning)
+        protected virtual void OnMonitorAlarm(DateTime dt, IDevice device, IWarningSet warning)
         {
             if (warning.CurrentStatus)
             {
diff --git a/src/Bro.Process/ProcessControl_Calibration.cs b/src/Bro.Process/ProcessControl_Calibration.cs
index dcd38a2..9463056 100644
--- a/src/Bro.Process/ProcessControl_Calibration.cs
+++ b/src/Bro.Process/ProcessControl_Calibration.cs
@@ -40,13 +40,13 @@
                     _frmCalibration_9P.ShowDialog();
                 });
 
-                return (int)PLCReplyValue.NG;
+                return (int)ReplyValue.NG;
             }
 
             if (config.InputPara[0] <= 0 || config.InputPara[0] > config.Results.Count)
             {
                 config.InputPara = null;
-                return (int)PLCReplyValue.IGNORE;
+                return (int)ReplyValue.IGNORE;
             }
 
             int sequence = config.InputPara[0];
@@ -100,7 +100,7 @@
             //}
 
             config.InputPara = null;
-            return (int)PLCReplyValue.OK;
+            return (int)ReplyValue.OK;
         }
 
         public void GetCalibrationPoints(CameraBase camera, CalibrationConfig config, string methodName, int sequence)
diff --git a/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj b/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
index 388ceb2..2eba9b1 100644
--- a/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
+++ b/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
@@ -102,6 +102,11 @@
       <DependentUpon>CtrlPLCRunBase.cs</DependentUpon>
     </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="CtrlCameraRunBase.resx">
@@ -113,6 +118,10 @@
     <EmbeddedResource Include="CtrlPLCRunBase.resx">
       <DependentUpon>CtrlPLCRunBase.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Bro.Common.Device\Bro.Common.Device.csproj">
diff --git a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs b/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs
index a3923bb..4ea729d 100644
--- a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs
+++ b/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs
@@ -28,59 +28,58 @@
         /// </summary>
         private void InitializeComponent()
         {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CtrlMotionCardRunBase));
             this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
             this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.listBox1 = new System.Windows.Forms.ListBox();
             this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.propGrid = new System.Windows.Forms.PropertyGrid();
             this.groupBox1 = new System.Windows.Forms.GroupBox();
-            this.button4 = new System.Windows.Forms.Button();
-            this.button3 = new System.Windows.Forms.Button();
-            this.button2 = new System.Windows.Forms.Button();
+            this.radioButton3 = new System.Windows.Forms.RadioButton();
+            this.radioButton2 = new System.Windows.Forms.RadioButton();
+            this.radioButton1 = new System.Windows.Forms.RadioButton();
             this.groupBoxCommBtn = new System.Windows.Forms.GroupBox();
+            this.btnStart = new System.Windows.Forms.Button();
             this.button1 = new System.Windows.Forms.Button();
             this.button11 = new System.Windows.Forms.Button();
             this.button8 = new System.Windows.Forms.Button();
             this.button10 = new System.Windows.Forms.Button();
             this.button9 = new System.Windows.Forms.Button();
-            this.groupBox2 = new System.Windows.Forms.GroupBox();
-            this.listBox1 = new System.Windows.Forms.ListBox();
-            this.groupBox4 = new System.Windows.Forms.GroupBox();
-            this.label2 = new System.Windows.Forms.Label();
-            this.label3 = new System.Windows.Forms.Label();
-            this.label4 = new System.Windows.Forms.Label();
-            this.label5 = new System.Windows.Forms.Label();
-            this.label7 = new System.Windows.Forms.Label();
-            this.textBox1 = new System.Windows.Forms.TextBox();
-            this.textBox2 = new System.Windows.Forms.TextBox();
-            this.textBox3 = new System.Windows.Forms.TextBox();
-            this.textBox4 = new System.Windows.Forms.TextBox();
-            this.ioIndicatorCtrl1 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl6 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl8 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl9 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl10 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl4 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl2 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl5 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl3 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl7 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.groupBox5 = new System.Windows.Forms.GroupBox();
-            this.ioIndicatorCtrl11 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl12 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl13 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl14 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
             this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
-            this.ioIndicatorCtrl15 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl16 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl17 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl18 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl19 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl20 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl21 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl22 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl23 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl24 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl25 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.groupBox5 = new System.Windows.Forms.GroupBox();
+            this.ioIndicatorCtrl14 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl13 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl12 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
             this.ioIndicatorCtrl26 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl25 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl24 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl17 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl16 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl20 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl19 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl23 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl22 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl21 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl18 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl15 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl11 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.groupBox4 = new System.Windows.Forms.GroupBox();
+            this.ioIndicatorCtrl2 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl10 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl9 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl8 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl6 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.ioIndicatorCtrl1 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
+            this.textBox4 = new System.Windows.Forms.TextBox();
+            this.textBox3 = new System.Windows.Forms.TextBox();
+            this.textBox2 = new System.Windows.Forms.TextBox();
+            this.textBox1 = new System.Windows.Forms.TextBox();
+            this.label7 = new System.Windows.Forms.Label();
+            this.label5 = new System.Windows.Forms.Label();
+            this.label4 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
             this.groupBox6 = new System.Windows.Forms.GroupBox();
             this.ioIndicatorCtrl27 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
             this.ioIndicatorCtrl28 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
@@ -98,45 +97,16 @@
             this.ioIndicatorCtrl40 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
             this.ioIndicatorCtrl41 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
             this.ioIndicatorCtrl42 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.groupBox7 = new System.Windows.Forms.GroupBox();
-            this.groupBox8 = new System.Windows.Forms.GroupBox();
-            this.groupBox9 = new System.Windows.Forms.GroupBox();
-            this.ioIndicatorCtrl43 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl44 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl45 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl46 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl47 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl48 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl49 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl50 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl51 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl52 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl53 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl54 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl55 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl56 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl57 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl58 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl59 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl60 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl61 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl62 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl63 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl64 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl65 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
-            this.ioIndicatorCtrl66 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
             this.tableLayoutPanel1.SuspendLayout();
             this.tableLayoutPanel2.SuspendLayout();
+            this.groupBox2.SuspendLayout();
+            this.groupBox3.SuspendLayout();
             this.groupBox1.SuspendLayout();
             this.groupBoxCommBtn.SuspendLayout();
-            this.groupBox2.SuspendLayout();
-            this.groupBox4.SuspendLayout();
-            this.groupBox5.SuspendLayout();
             this.tableLayoutPanel3.SuspendLayout();
+            this.groupBox5.SuspendLayout();
+            this.groupBox4.SuspendLayout();
             this.groupBox6.SuspendLayout();
-            this.groupBox7.SuspendLayout();
-            this.groupBox8.SuspendLayout();
-            this.groupBox9.SuspendLayout();
             this.SuspendLayout();
             // 
             // tableLayoutPanel1
@@ -166,122 +136,12 @@
             this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3);
             this.tableLayoutPanel2.Name = "tableLayoutPanel2";
             this.tableLayoutPanel2.RowCount = 4;
-            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 70F));
-            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 70F));
+            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 90F));
+            this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
             this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
             this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 110F));
             this.tableLayoutPanel2.Size = new System.Drawing.Size(386, 714);
             this.tableLayoutPanel2.TabIndex = 0;
-            // 
-            // groupBox3
-            // 
-            this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox3.Location = new System.Drawing.Point(3, 143);
-            this.groupBox3.Name = "groupBox3";
-            this.groupBox3.Size = new System.Drawing.Size(380, 458);
-            this.groupBox3.TabIndex = 6;
-            this.groupBox3.TabStop = false;
-            this.groupBox3.Text = "鍙傛暟鍙婃搷浣�";
-            // 
-            // groupBox1
-            // 
-            this.groupBox1.Controls.Add(this.button4);
-            this.groupBox1.Controls.Add(this.button3);
-            this.groupBox1.Controls.Add(this.button2);
-            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox1.Location = new System.Drawing.Point(3, 73);
-            this.groupBox1.Name = "groupBox1";
-            this.groupBox1.Size = new System.Drawing.Size(380, 64);
-            this.groupBox1.TabIndex = 5;
-            this.groupBox1.TabStop = false;
-            this.groupBox1.Text = "杩愬姩绫诲瀷";
-            // 
-            // button4
-            // 
-            this.button4.Location = new System.Drawing.Point(152, 32);
-            this.button4.Name = "button4";
-            this.button4.Size = new System.Drawing.Size(70, 25);
-            this.button4.TabIndex = 4;
-            this.button4.Text = "GoHome";
-            this.button4.UseVisualStyleBackColor = true;
-            // 
-            // button3
-            // 
-            this.button3.Location = new System.Drawing.Point(76, 32);
-            this.button3.Name = "button3";
-            this.button3.Size = new System.Drawing.Size(70, 25);
-            this.button3.TabIndex = 4;
-            this.button3.Text = "Jog";
-            this.button3.UseVisualStyleBackColor = true;
-            // 
-            // button2
-            // 
-            this.button2.Location = new System.Drawing.Point(0, 32);
-            this.button2.Name = "button2";
-            this.button2.Size = new System.Drawing.Size(70, 25);
-            this.button2.TabIndex = 4;
-            this.button2.Text = "P2P";
-            this.button2.UseVisualStyleBackColor = true;
-            // 
-            // groupBoxCommBtn
-            // 
-            this.groupBoxCommBtn.Controls.Add(this.button1);
-            this.groupBoxCommBtn.Controls.Add(this.button11);
-            this.groupBoxCommBtn.Controls.Add(this.button8);
-            this.groupBoxCommBtn.Controls.Add(this.button10);
-            this.groupBoxCommBtn.Controls.Add(this.button9);
-            this.groupBoxCommBtn.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBoxCommBtn.Location = new System.Drawing.Point(3, 3);
-            this.groupBoxCommBtn.Name = "groupBoxCommBtn";
-            this.groupBoxCommBtn.Size = new System.Drawing.Size(380, 64);
-            this.groupBoxCommBtn.TabIndex = 0;
-            this.groupBoxCommBtn.TabStop = false;
-            this.groupBoxCommBtn.Text = "鍏叡鎿嶄綔";
-            // 
-            // button1
-            // 
-            this.button1.Location = new System.Drawing.Point(0, 31);
-            this.button1.Name = "button1";
-            this.button1.Size = new System.Drawing.Size(70, 25);
-            this.button1.TabIndex = 4;
-            this.button1.Text = "娓呴櫎鐘舵��";
-            this.button1.UseVisualStyleBackColor = true;
-            // 
-            // button11
-            // 
-            this.button11.Location = new System.Drawing.Point(305, 31);
-            this.button11.Name = "button11";
-            this.button11.Size = new System.Drawing.Size(70, 25);
-            this.button11.TabIndex = 4;
-            this.button11.Text = "绱ф�ュ仠姝�";
-            this.button11.UseVisualStyleBackColor = true;
-            // 
-            // button8
-            // 
-            this.button8.Location = new System.Drawing.Point(76, 31);
-            this.button8.Name = "button8";
-            this.button8.Size = new System.Drawing.Size(70, 25);
-            this.button8.TabIndex = 4;
-            this.button8.Text = "浼烘湇浣胯兘";
-            this.button8.UseVisualStyleBackColor = true;
-            // 
-            // button10
-            // 
-            this.button10.Location = new System.Drawing.Point(228, 31);
-            this.button10.Name = "button10";
-            this.button10.Size = new System.Drawing.Size(70, 25);
-            this.button10.TabIndex = 4;
-            this.button10.Text = "骞虫粦鍋滄";
-            this.button10.UseVisualStyleBackColor = true;
-            // 
-            // button9
-            // 
-            this.button9.Location = new System.Drawing.Point(152, 31);
-            this.button9.Name = "button9";
-            this.button9.Size = new System.Drawing.Size(70, 25);
-            this.button9.TabIndex = 4;
-            this.button9.Text = "浣嶇疆娓呴浂";
-            this.button9.UseVisualStyleBackColor = true;
             // 
             // groupBox2
             // 
@@ -305,200 +165,168 @@
             this.listBox1.Size = new System.Drawing.Size(374, 84);
             this.listBox1.TabIndex = 1;
             // 
-            // groupBox4
+            // groupBox3
             // 
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl7);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl3);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl5);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl2);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl4);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl10);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl9);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl8);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl6);
-            this.groupBox4.Controls.Add(this.ioIndicatorCtrl1);
-            this.groupBox4.Controls.Add(this.textBox4);
-            this.groupBox4.Controls.Add(this.textBox3);
-            this.groupBox4.Controls.Add(this.textBox2);
-            this.groupBox4.Controls.Add(this.textBox1);
-            this.groupBox4.Controls.Add(this.label7);
-            this.groupBox4.Controls.Add(this.label5);
-            this.groupBox4.Controls.Add(this.label4);
-            this.groupBox4.Controls.Add(this.label3);
-            this.groupBox4.Controls.Add(this.label2);
-            this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox4.Location = new System.Drawing.Point(3, 3);
-            this.groupBox4.Name = "groupBox4";
-            this.groupBox4.Size = new System.Drawing.Size(578, 136);
-            this.groupBox4.TabIndex = 3;
-            this.groupBox4.TabStop = false;
-            this.groupBox4.Text = "杞寸姸鎬�";
+            this.groupBox3.Controls.Add(this.propGrid);
+            this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox3.Location = new System.Drawing.Point(3, 143);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.Size = new System.Drawing.Size(380, 458);
+            this.groupBox3.TabIndex = 6;
+            this.groupBox3.TabStop = false;
+            this.groupBox3.Text = "鍙傛暟";
             // 
-            // label2
+            // propGrid
             // 
-            this.label2.AutoSize = true;
-            this.label2.Location = new System.Drawing.Point(7, 21);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(65, 12);
-            this.label2.TabIndex = 2;
-            this.label2.Text = "瑙勫垝浣嶇疆锛�";
+            this.propGrid.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.propGrid.Location = new System.Drawing.Point(3, 17);
+            this.propGrid.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
+            this.propGrid.Name = "propGrid";
+            this.propGrid.Size = new System.Drawing.Size(374, 438);
+            this.propGrid.TabIndex = 1;
             // 
-            // label3
+            // groupBox1
             // 
-            this.label3.AutoSize = true;
-            this.label3.Location = new System.Drawing.Point(218, 21);
-            this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(65, 12);
-            this.label3.TabIndex = 2;
-            this.label3.Text = "瀹為檯浣嶇疆锛�";
+            this.groupBox1.Controls.Add(this.radioButton3);
+            this.groupBox1.Controls.Add(this.radioButton2);
+            this.groupBox1.Controls.Add(this.radioButton1);
+            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox1.Location = new System.Drawing.Point(3, 93);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(380, 44);
+            this.groupBox1.TabIndex = 5;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "杩愬姩绫诲瀷";
             // 
-            // label4
+            // radioButton3
             // 
-            this.label4.AutoSize = true;
-            this.label4.Location = new System.Drawing.Point(7, 48);
-            this.label4.Name = "label4";
-            this.label4.Size = new System.Drawing.Size(65, 12);
-            this.label4.TabIndex = 2;
-            this.label4.Text = "瑙勫垝閫熷害锛�";
+            this.radioButton3.AutoSize = true;
+            this.radioButton3.Location = new System.Drawing.Point(156, 22);
+            this.radioButton3.Name = "radioButton3";
+            this.radioButton3.Size = new System.Drawing.Size(59, 16);
+            this.radioButton3.TabIndex = 5;
+            this.radioButton3.TabStop = true;
+            this.radioButton3.Text = "GoHome";
+            this.radioButton3.UseVisualStyleBackColor = true;
             // 
-            // label5
+            // radioButton2
             // 
-            this.label5.AutoSize = true;
-            this.label5.Location = new System.Drawing.Point(218, 51);
-            this.label5.Name = "label5";
-            this.label5.Size = new System.Drawing.Size(65, 12);
-            this.label5.TabIndex = 2;
-            this.label5.Text = "瀹為檯閫熷害锛�";
+            this.radioButton2.AutoSize = true;
+            this.radioButton2.Location = new System.Drawing.Point(82, 22);
+            this.radioButton2.Name = "radioButton2";
+            this.radioButton2.Size = new System.Drawing.Size(41, 16);
+            this.radioButton2.TabIndex = 5;
+            this.radioButton2.TabStop = true;
+            this.radioButton2.Text = "Jog";
+            this.radioButton2.UseVisualStyleBackColor = true;
             // 
-            // label7
+            // radioButton1
             // 
-            this.label7.AutoSize = true;
-            this.label7.Location = new System.Drawing.Point(7, 214);
-            this.label7.Name = "label7";
-            this.label7.Size = new System.Drawing.Size(0, 12);
-            this.label7.TabIndex = 2;
+            this.radioButton1.AutoSize = true;
+            this.radioButton1.Checked = true;
+            this.radioButton1.Location = new System.Drawing.Point(9, 22);
+            this.radioButton1.Name = "radioButton1";
+            this.radioButton1.Size = new System.Drawing.Size(41, 16);
+            this.radioButton1.TabIndex = 5;
+            this.radioButton1.TabStop = true;
+            this.radioButton1.Text = "P2P";
+            this.radioButton1.UseVisualStyleBackColor = true;
+            this.radioButton1.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged);
             // 
-            // textBox1
+            // groupBoxCommBtn
             // 
-            this.textBox1.Location = new System.Drawing.Point(69, 18);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.ReadOnly = true;
-            this.textBox1.Size = new System.Drawing.Size(116, 21);
-            this.textBox1.TabIndex = 3;
+            this.groupBoxCommBtn.Controls.Add(this.btnStart);
+            this.groupBoxCommBtn.Controls.Add(this.button1);
+            this.groupBoxCommBtn.Controls.Add(this.button11);
+            this.groupBoxCommBtn.Controls.Add(this.button8);
+            this.groupBoxCommBtn.Controls.Add(this.button10);
+            this.groupBoxCommBtn.Controls.Add(this.button9);
+            this.groupBoxCommBtn.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBoxCommBtn.Location = new System.Drawing.Point(3, 3);
+            this.groupBoxCommBtn.Name = "groupBoxCommBtn";
+            this.groupBoxCommBtn.Size = new System.Drawing.Size(380, 84);
+            this.groupBoxCommBtn.TabIndex = 0;
+            this.groupBoxCommBtn.TabStop = false;
+            this.groupBoxCommBtn.Text = "鍏叡鎿嶄綔";
             // 
-            // textBox2
+            // btnStart
             // 
-            this.textBox2.Location = new System.Drawing.Point(280, 18);
-            this.textBox2.Name = "textBox2";
-            this.textBox2.ReadOnly = true;
-            this.textBox2.Size = new System.Drawing.Size(116, 21);
-            this.textBox2.TabIndex = 3;
+            this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnStart.AutoSize = true;
+            this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.btnStart.Font = new System.Drawing.Font("瀹嬩綋", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.btnStart.Image = ((System.Drawing.Image)(resources.GetObject("btnStart.Image")));
+            this.btnStart.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+            this.btnStart.Location = new System.Drawing.Point(248, 20);
+            this.btnStart.Name = "btnStart";
+            this.btnStart.Size = new System.Drawing.Size(126, 54);
+            this.btnStart.TabIndex = 5;
+            this.btnStart.Text = "  鍚�  鍔�";
+            this.btnStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+            this.btnStart.UseVisualStyleBackColor = true;
             // 
-            // textBox3
+            // button1
             // 
-            this.textBox3.Location = new System.Drawing.Point(69, 45);
-            this.textBox3.Name = "textBox3";
-            this.textBox3.ReadOnly = true;
-            this.textBox3.Size = new System.Drawing.Size(116, 21);
-            this.textBox3.TabIndex = 3;
+            this.button1.Location = new System.Drawing.Point(6, 18);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(70, 25);
+            this.button1.TabIndex = 4;
+            this.button1.Text = "娓呴櫎鐘舵��";
+            this.button1.UseVisualStyleBackColor = true;
             // 
-            // textBox4
+            // button11
             // 
-            this.textBox4.Location = new System.Drawing.Point(280, 48);
-            this.textBox4.Name = "textBox4";
-            this.textBox4.ReadOnly = true;
-            this.textBox4.Size = new System.Drawing.Size(116, 21);
-            this.textBox4.TabIndex = 3;
+            this.button11.Location = new System.Drawing.Point(86, 53);
+            this.button11.Name = "button11";
+            this.button11.Size = new System.Drawing.Size(70, 25);
+            this.button11.TabIndex = 4;
+            this.button11.Text = "绱ф�ュ仠姝�";
+            this.button11.UseVisualStyleBackColor = true;
             // 
-            // ioIndicatorCtrl1
+            // button8
             // 
-            this.ioIndicatorCtrl1.Desc = "椹卞姩鎶ヨ";
-            this.ioIndicatorCtrl1.IsOn = null;
-            this.ioIndicatorCtrl1.Location = new System.Drawing.Point(9, 76);
-            this.ioIndicatorCtrl1.Name = "ioIndicatorCtrl1";
-            this.ioIndicatorCtrl1.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl1.TabIndex = 4;
+            this.button8.Location = new System.Drawing.Point(86, 18);
+            this.button8.Name = "button8";
+            this.button8.Size = new System.Drawing.Size(70, 25);
+            this.button8.TabIndex = 4;
+            this.button8.Text = "浼烘湇浣胯兘";
+            this.button8.UseVisualStyleBackColor = true;
             // 
-            // ioIndicatorCtrl6
+            // button10
             // 
-            this.ioIndicatorCtrl6.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl6.IsOn = null;
-            this.ioIndicatorCtrl6.Location = new System.Drawing.Point(9, 106);
-            this.ioIndicatorCtrl6.Name = "ioIndicatorCtrl6";
-            this.ioIndicatorCtrl6.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl6.TabIndex = 4;
+            this.button10.Location = new System.Drawing.Point(6, 53);
+            this.button10.Name = "button10";
+            this.button10.Size = new System.Drawing.Size(70, 25);
+            this.button10.TabIndex = 4;
+            this.button10.Text = "骞虫粦鍋滄";
+            this.button10.UseVisualStyleBackColor = true;
             // 
-            // ioIndicatorCtrl8
+            // button9
             // 
-            this.ioIndicatorCtrl8.Desc = "璐熼檺浣�";
-            this.ioIndicatorCtrl8.IsOn = null;
-            this.ioIndicatorCtrl8.Location = new System.Drawing.Point(145, 106);
-            this.ioIndicatorCtrl8.Name = "ioIndicatorCtrl8";
-            this.ioIndicatorCtrl8.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl8.TabIndex = 4;
+            this.button9.Location = new System.Drawing.Point(168, 18);
+            this.button9.Name = "button9";
+            this.button9.Size = new System.Drawing.Size(70, 25);
+            this.button9.TabIndex = 4;
+            this.button9.Text = "浣嶇疆娓呴浂";
+            this.button9.UseVisualStyleBackColor = true;
             // 
-            // ioIndicatorCtrl9
+            // tableLayoutPanel3
             // 
-            this.ioIndicatorCtrl9.Desc = "杩愬姩鐘舵��";
-            this.ioIndicatorCtrl9.IsOn = null;
-            this.ioIndicatorCtrl9.Location = new System.Drawing.Point(306, 103);
-            this.ioIndicatorCtrl9.Name = "ioIndicatorCtrl9";
-            this.ioIndicatorCtrl9.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl9.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl10
-            // 
-            this.ioIndicatorCtrl10.Desc = "杩愬姩鍑洪敊";
-            this.ioIndicatorCtrl10.IsOn = null;
-            this.ioIndicatorCtrl10.Location = new System.Drawing.Point(306, 73);
-            this.ioIndicatorCtrl10.Name = "ioIndicatorCtrl10";
-            this.ioIndicatorCtrl10.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl10.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl4
-            // 
-            this.ioIndicatorCtrl4.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl4.IsOn = null;
-            this.ioIndicatorCtrl4.Location = new System.Drawing.Point(3, 391);
-            this.ioIndicatorCtrl4.Name = "ioIndicatorCtrl4";
-            this.ioIndicatorCtrl4.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl4.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl2
-            // 
-            this.ioIndicatorCtrl2.Desc = "浼烘湇浣胯兘";
-            this.ioIndicatorCtrl2.IsOn = null;
-            this.ioIndicatorCtrl2.Location = new System.Drawing.Point(145, 76);
-            this.ioIndicatorCtrl2.Name = "ioIndicatorCtrl2";
-            this.ioIndicatorCtrl2.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl2.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl5
-            // 
-            this.ioIndicatorCtrl5.Desc = "璐熼檺浣�";
-            this.ioIndicatorCtrl5.IsOn = null;
-            this.ioIndicatorCtrl5.Location = new System.Drawing.Point(3, 461);
-            this.ioIndicatorCtrl5.Name = "ioIndicatorCtrl5";
-            this.ioIndicatorCtrl5.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl5.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl3
-            // 
-            this.ioIndicatorCtrl3.Desc = "杩愬姩鐘舵��";
-            this.ioIndicatorCtrl3.IsOn = null;
-            this.ioIndicatorCtrl3.Location = new System.Drawing.Point(3, 613);
-            this.ioIndicatorCtrl3.Name = "ioIndicatorCtrl3";
-            this.ioIndicatorCtrl3.Size = new System.Drawing.Size(90, 15);
-            this.ioIndicatorCtrl3.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl7
-            // 
-            this.ioIndicatorCtrl7.Desc = "杩愬姩鍑洪敊";
-            this.ioIndicatorCtrl7.IsOn = null;
-            this.ioIndicatorCtrl7.Location = new System.Drawing.Point(3, 612);
-            this.ioIndicatorCtrl7.Name = "ioIndicatorCtrl7";
-            this.ioIndicatorCtrl7.Size = new System.Drawing.Size(90, 16);
-            this.ioIndicatorCtrl7.TabIndex = 4;
+            this.tableLayoutPanel3.ColumnCount = 1;
+            this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+            this.tableLayoutPanel3.Controls.Add(this.groupBox5, 0, 1);
+            this.tableLayoutPanel3.Controls.Add(this.groupBox4, 0, 0);
+            this.tableLayoutPanel3.Controls.Add(this.groupBox6, 0, 2);
+            this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.tableLayoutPanel3.Location = new System.Drawing.Point(395, 3);
+            this.tableLayoutPanel3.Name = "tableLayoutPanel3";
+            this.tableLayoutPanel3.RowCount = 3;
+            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 60F));
+            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
+            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
+            this.tableLayoutPanel3.Size = new System.Drawing.Size(584, 714);
+            this.tableLayoutPanel3.TabIndex = 1;
             // 
             // groupBox5
             // 
@@ -519,180 +347,311 @@
             this.groupBox5.Controls.Add(this.ioIndicatorCtrl15);
             this.groupBox5.Controls.Add(this.ioIndicatorCtrl11);
             this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox5.Location = new System.Drawing.Point(3, 145);
+            this.groupBox5.Location = new System.Drawing.Point(3, 431);
             this.groupBox5.Name = "groupBox5";
             this.groupBox5.Size = new System.Drawing.Size(578, 136);
             this.groupBox5.TabIndex = 6;
             this.groupBox5.TabStop = false;
             this.groupBox5.Text = "鏁板瓧閲忚緭鍏�";
             // 
-            // ioIndicatorCtrl11
-            // 
-            this.ioIndicatorCtrl11.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl11.IsOn = null;
-            this.ioIndicatorCtrl11.Location = new System.Drawing.Point(9, 18);
-            this.ioIndicatorCtrl11.Name = "ioIndicatorCtrl11";
-            this.ioIndicatorCtrl11.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl11.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl12
-            // 
-            this.ioIndicatorCtrl12.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl12.IsOn = null;
-            this.ioIndicatorCtrl12.Location = new System.Drawing.Point(145, 18);
-            this.ioIndicatorCtrl12.Name = "ioIndicatorCtrl12";
-            this.ioIndicatorCtrl12.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl12.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl13
-            // 
-            this.ioIndicatorCtrl13.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl13.IsOn = null;
-            this.ioIndicatorCtrl13.Location = new System.Drawing.Point(306, 18);
-            this.ioIndicatorCtrl13.Name = "ioIndicatorCtrl13";
-            this.ioIndicatorCtrl13.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl13.TabIndex = 4;
-            // 
             // ioIndicatorCtrl14
             // 
-            this.ioIndicatorCtrl14.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl14.Desc = "IN 4";
             this.ioIndicatorCtrl14.IsOn = null;
             this.ioIndicatorCtrl14.Location = new System.Drawing.Point(477, 18);
             this.ioIndicatorCtrl14.Name = "ioIndicatorCtrl14";
             this.ioIndicatorCtrl14.Size = new System.Drawing.Size(90, 24);
             this.ioIndicatorCtrl14.TabIndex = 4;
             // 
-            // tableLayoutPanel3
+            // ioIndicatorCtrl13
             // 
-            this.tableLayoutPanel3.ColumnCount = 1;
-            this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-            this.tableLayoutPanel3.Controls.Add(this.groupBox8, 0, 5);
-            this.tableLayoutPanel3.Controls.Add(this.groupBox5, 0, 1);
-            this.tableLayoutPanel3.Controls.Add(this.groupBox4, 0, 0);
-            this.tableLayoutPanel3.Controls.Add(this.groupBox6, 0, 2);
-            this.tableLayoutPanel3.Controls.Add(this.groupBox7, 0, 3);
-            this.tableLayoutPanel3.Controls.Add(this.groupBox9, 0, 4);
-            this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.tableLayoutPanel3.Location = new System.Drawing.Point(395, 3);
-            this.tableLayoutPanel3.Name = "tableLayoutPanel3";
-            this.tableLayoutPanel3.RowCount = 6;
-            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.02002F));
-            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.02002F));
-            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20.02002F));
-            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 13.31331F));
-            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 13.31331F));
-            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 13.31331F));
-            this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
-            this.tableLayoutPanel3.Size = new System.Drawing.Size(584, 714);
-            this.tableLayoutPanel3.TabIndex = 1;
+            this.ioIndicatorCtrl13.Desc = "IN 3";
+            this.ioIndicatorCtrl13.IsOn = null;
+            this.ioIndicatorCtrl13.Location = new System.Drawing.Point(306, 18);
+            this.ioIndicatorCtrl13.Name = "ioIndicatorCtrl13";
+            this.ioIndicatorCtrl13.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl13.TabIndex = 4;
             // 
-            // ioIndicatorCtrl15
+            // ioIndicatorCtrl12
             // 
-            this.ioIndicatorCtrl15.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl15.IsOn = null;
-            this.ioIndicatorCtrl15.Location = new System.Drawing.Point(9, 48);
-            this.ioIndicatorCtrl15.Name = "ioIndicatorCtrl15";
-            this.ioIndicatorCtrl15.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl15.TabIndex = 4;
+            this.ioIndicatorCtrl12.Desc = "IN 2";
+            this.ioIndicatorCtrl12.IsOn = null;
+            this.ioIndicatorCtrl12.Location = new System.Drawing.Point(145, 18);
+            this.ioIndicatorCtrl12.Name = "ioIndicatorCtrl12";
+            this.ioIndicatorCtrl12.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl12.TabIndex = 4;
             // 
-            // ioIndicatorCtrl16
+            // ioIndicatorCtrl26
             // 
-            this.ioIndicatorCtrl16.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl16.IsOn = null;
-            this.ioIndicatorCtrl16.Location = new System.Drawing.Point(9, 77);
-            this.ioIndicatorCtrl16.Name = "ioIndicatorCtrl16";
-            this.ioIndicatorCtrl16.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl16.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl17
-            // 
-            this.ioIndicatorCtrl17.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl17.IsOn = null;
-            this.ioIndicatorCtrl17.Location = new System.Drawing.Point(9, 106);
-            this.ioIndicatorCtrl17.Name = "ioIndicatorCtrl17";
-            this.ioIndicatorCtrl17.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl17.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl18
-            // 
-            this.ioIndicatorCtrl18.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl18.IsOn = null;
-            this.ioIndicatorCtrl18.Location = new System.Drawing.Point(145, 48);
-            this.ioIndicatorCtrl18.Name = "ioIndicatorCtrl18";
-            this.ioIndicatorCtrl18.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl18.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl19
-            // 
-            this.ioIndicatorCtrl19.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl19.IsOn = null;
-            this.ioIndicatorCtrl19.Location = new System.Drawing.Point(306, 48);
-            this.ioIndicatorCtrl19.Name = "ioIndicatorCtrl19";
-            this.ioIndicatorCtrl19.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl19.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl20
-            // 
-            this.ioIndicatorCtrl20.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl20.IsOn = null;
-            this.ioIndicatorCtrl20.Location = new System.Drawing.Point(477, 48);
-            this.ioIndicatorCtrl20.Name = "ioIndicatorCtrl20";
-            this.ioIndicatorCtrl20.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl20.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl21
-            // 
-            this.ioIndicatorCtrl21.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl21.IsOn = null;
-            this.ioIndicatorCtrl21.Location = new System.Drawing.Point(145, 77);
-            this.ioIndicatorCtrl21.Name = "ioIndicatorCtrl21";
-            this.ioIndicatorCtrl21.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl21.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl22
-            // 
-            this.ioIndicatorCtrl22.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl22.IsOn = null;
-            this.ioIndicatorCtrl22.Location = new System.Drawing.Point(306, 77);
-            this.ioIndicatorCtrl22.Name = "ioIndicatorCtrl22";
-            this.ioIndicatorCtrl22.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl22.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl23
-            // 
-            this.ioIndicatorCtrl23.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl23.IsOn = null;
-            this.ioIndicatorCtrl23.Location = new System.Drawing.Point(477, 77);
-            this.ioIndicatorCtrl23.Name = "ioIndicatorCtrl23";
-            this.ioIndicatorCtrl23.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl23.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl24
-            // 
-            this.ioIndicatorCtrl24.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl24.IsOn = null;
-            this.ioIndicatorCtrl24.Location = new System.Drawing.Point(145, 107);
-            this.ioIndicatorCtrl24.Name = "ioIndicatorCtrl24";
-            this.ioIndicatorCtrl24.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl24.TabIndex = 4;
+            this.ioIndicatorCtrl26.Desc = "IN 16";
+            this.ioIndicatorCtrl26.IsOn = null;
+            this.ioIndicatorCtrl26.Location = new System.Drawing.Point(477, 107);
+            this.ioIndicatorCtrl26.Name = "ioIndicatorCtrl26";
+            this.ioIndicatorCtrl26.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl26.TabIndex = 4;
             // 
             // ioIndicatorCtrl25
             // 
-            this.ioIndicatorCtrl25.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl25.Desc = "IN 15";
             this.ioIndicatorCtrl25.IsOn = null;
             this.ioIndicatorCtrl25.Location = new System.Drawing.Point(306, 107);
             this.ioIndicatorCtrl25.Name = "ioIndicatorCtrl25";
             this.ioIndicatorCtrl25.Size = new System.Drawing.Size(90, 24);
             this.ioIndicatorCtrl25.TabIndex = 4;
             // 
-            // ioIndicatorCtrl26
+            // ioIndicatorCtrl24
             // 
-            this.ioIndicatorCtrl26.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl26.IsOn = null;
-            this.ioIndicatorCtrl26.Location = new System.Drawing.Point(477, 107);
-            this.ioIndicatorCtrl26.Name = "ioIndicatorCtrl26";
-            this.ioIndicatorCtrl26.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl26.TabIndex = 4;
+            this.ioIndicatorCtrl24.Desc = "IN 14";
+            this.ioIndicatorCtrl24.IsOn = null;
+            this.ioIndicatorCtrl24.Location = new System.Drawing.Point(145, 107);
+            this.ioIndicatorCtrl24.Name = "ioIndicatorCtrl24";
+            this.ioIndicatorCtrl24.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl24.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl17
+            // 
+            this.ioIndicatorCtrl17.Desc = "IN 13";
+            this.ioIndicatorCtrl17.IsOn = null;
+            this.ioIndicatorCtrl17.Location = new System.Drawing.Point(9, 106);
+            this.ioIndicatorCtrl17.Name = "ioIndicatorCtrl17";
+            this.ioIndicatorCtrl17.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl17.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl16
+            // 
+            this.ioIndicatorCtrl16.Desc = "IN 9";
+            this.ioIndicatorCtrl16.IsOn = null;
+            this.ioIndicatorCtrl16.Location = new System.Drawing.Point(9, 77);
+            this.ioIndicatorCtrl16.Name = "ioIndicatorCtrl16";
+            this.ioIndicatorCtrl16.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl16.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl20
+            // 
+            this.ioIndicatorCtrl20.Desc = "IN 8";
+            this.ioIndicatorCtrl20.IsOn = null;
+            this.ioIndicatorCtrl20.Location = new System.Drawing.Point(477, 48);
+            this.ioIndicatorCtrl20.Name = "ioIndicatorCtrl20";
+            this.ioIndicatorCtrl20.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl20.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl19
+            // 
+            this.ioIndicatorCtrl19.Desc = "IN 7";
+            this.ioIndicatorCtrl19.IsOn = null;
+            this.ioIndicatorCtrl19.Location = new System.Drawing.Point(306, 48);
+            this.ioIndicatorCtrl19.Name = "ioIndicatorCtrl19";
+            this.ioIndicatorCtrl19.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl19.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl23
+            // 
+            this.ioIndicatorCtrl23.Desc = "IN 12";
+            this.ioIndicatorCtrl23.IsOn = null;
+            this.ioIndicatorCtrl23.Location = new System.Drawing.Point(477, 77);
+            this.ioIndicatorCtrl23.Name = "ioIndicatorCtrl23";
+            this.ioIndicatorCtrl23.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl23.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl22
+            // 
+            this.ioIndicatorCtrl22.Desc = "IN 11";
+            this.ioIndicatorCtrl22.IsOn = null;
+            this.ioIndicatorCtrl22.Location = new System.Drawing.Point(306, 77);
+            this.ioIndicatorCtrl22.Name = "ioIndicatorCtrl22";
+            this.ioIndicatorCtrl22.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl22.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl21
+            // 
+            this.ioIndicatorCtrl21.Desc = "IN 10";
+            this.ioIndicatorCtrl21.IsOn = null;
+            this.ioIndicatorCtrl21.Location = new System.Drawing.Point(145, 77);
+            this.ioIndicatorCtrl21.Name = "ioIndicatorCtrl21";
+            this.ioIndicatorCtrl21.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl21.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl18
+            // 
+            this.ioIndicatorCtrl18.Desc = "IN 6";
+            this.ioIndicatorCtrl18.IsOn = null;
+            this.ioIndicatorCtrl18.Location = new System.Drawing.Point(145, 48);
+            this.ioIndicatorCtrl18.Name = "ioIndicatorCtrl18";
+            this.ioIndicatorCtrl18.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl18.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl15
+            // 
+            this.ioIndicatorCtrl15.Desc = "IN 5";
+            this.ioIndicatorCtrl15.IsOn = null;
+            this.ioIndicatorCtrl15.Location = new System.Drawing.Point(9, 48);
+            this.ioIndicatorCtrl15.Name = "ioIndicatorCtrl15";
+            this.ioIndicatorCtrl15.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl15.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl11
+            // 
+            this.ioIndicatorCtrl11.Desc = "IN 1";
+            this.ioIndicatorCtrl11.IsOn = null;
+            this.ioIndicatorCtrl11.Location = new System.Drawing.Point(9, 18);
+            this.ioIndicatorCtrl11.Name = "ioIndicatorCtrl11";
+            this.ioIndicatorCtrl11.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl11.TabIndex = 4;
+            // 
+            // groupBox4
+            // 
+            this.groupBox4.Controls.Add(this.ioIndicatorCtrl2);
+            this.groupBox4.Controls.Add(this.ioIndicatorCtrl10);
+            this.groupBox4.Controls.Add(this.ioIndicatorCtrl9);
+            this.groupBox4.Controls.Add(this.ioIndicatorCtrl8);
+            this.groupBox4.Controls.Add(this.ioIndicatorCtrl6);
+            this.groupBox4.Controls.Add(this.ioIndicatorCtrl1);
+            this.groupBox4.Controls.Add(this.textBox4);
+            this.groupBox4.Controls.Add(this.textBox3);
+            this.groupBox4.Controls.Add(this.textBox2);
+            this.groupBox4.Controls.Add(this.textBox1);
+            this.groupBox4.Controls.Add(this.label7);
+            this.groupBox4.Controls.Add(this.label5);
+            this.groupBox4.Controls.Add(this.label4);
+            this.groupBox4.Controls.Add(this.label3);
+            this.groupBox4.Controls.Add(this.label2);
+            this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox4.Location = new System.Drawing.Point(3, 3);
+            this.groupBox4.Name = "groupBox4";
+            this.groupBox4.Size = new System.Drawing.Size(578, 422);
+            this.groupBox4.TabIndex = 3;
+            this.groupBox4.TabStop = false;
+            this.groupBox4.Text = "杞寸姸鎬�";
+            // 
+            // ioIndicatorCtrl2
+            // 
+            this.ioIndicatorCtrl2.Desc = "浼烘湇浣胯兘";
+            this.ioIndicatorCtrl2.IsOn = null;
+            this.ioIndicatorCtrl2.Location = new System.Drawing.Point(145, 76);
+            this.ioIndicatorCtrl2.Name = "ioIndicatorCtrl2";
+            this.ioIndicatorCtrl2.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl2.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl10
+            // 
+            this.ioIndicatorCtrl10.Desc = "杩愬姩鍑洪敊";
+            this.ioIndicatorCtrl10.IsOn = null;
+            this.ioIndicatorCtrl10.Location = new System.Drawing.Point(306, 73);
+            this.ioIndicatorCtrl10.Name = "ioIndicatorCtrl10";
+            this.ioIndicatorCtrl10.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl10.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl9
+            // 
+            this.ioIndicatorCtrl9.Desc = "杩愬姩鐘舵��";
+            this.ioIndicatorCtrl9.IsOn = null;
+            this.ioIndicatorCtrl9.Location = new System.Drawing.Point(306, 103);
+            this.ioIndicatorCtrl9.Name = "ioIndicatorCtrl9";
+            this.ioIndicatorCtrl9.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl9.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl8
+            // 
+            this.ioIndicatorCtrl8.Desc = "璐熼檺浣�";
+            this.ioIndicatorCtrl8.IsOn = null;
+            this.ioIndicatorCtrl8.Location = new System.Drawing.Point(145, 106);
+            this.ioIndicatorCtrl8.Name = "ioIndicatorCtrl8";
+            this.ioIndicatorCtrl8.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl8.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl6
+            // 
+            this.ioIndicatorCtrl6.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl6.IsOn = null;
+            this.ioIndicatorCtrl6.Location = new System.Drawing.Point(9, 106);
+            this.ioIndicatorCtrl6.Name = "ioIndicatorCtrl6";
+            this.ioIndicatorCtrl6.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl6.TabIndex = 4;
+            // 
+            // ioIndicatorCtrl1
+            // 
+            this.ioIndicatorCtrl1.Desc = "椹卞姩鎶ヨ";
+            this.ioIndicatorCtrl1.IsOn = null;
+            this.ioIndicatorCtrl1.Location = new System.Drawing.Point(9, 76);
+            this.ioIndicatorCtrl1.Name = "ioIndicatorCtrl1";
+            this.ioIndicatorCtrl1.Size = new System.Drawing.Size(90, 24);
+            this.ioIndicatorCtrl1.TabIndex = 4;
+            // 
+            // textBox4
+            // 
+            this.textBox4.Location = new System.Drawing.Point(280, 48);
+            this.textBox4.Name = "textBox4";
+            this.textBox4.ReadOnly = true;
+            this.textBox4.Size = new System.Drawing.Size(116, 21);
+            this.textBox4.TabIndex = 3;
+            // 
+            // textBox3
+            // 
+            this.textBox3.Location = new System.Drawing.Point(69, 45);
+            this.textBox3.Name = "textBox3";
+            this.textBox3.ReadOnly = true;
+            this.textBox3.Size = new System.Drawing.Size(116, 21);
+            this.textBox3.TabIndex = 3;
+            // 
+            // textBox2
+            // 
+            this.textBox2.Location = new System.Drawing.Point(280, 18);
+            this.textBox2.Name = "textBox2";
+            this.textBox2.ReadOnly = true;
+            this.textBox2.Size = new System.Drawing.Size(116, 21);
+            this.textBox2.TabIndex = 3;
+            // 
+            // textBox1
+            // 
+            this.textBox1.Location = new System.Drawing.Point(69, 18);
+            this.textBox1.Name = "textBox1";
+            this.textBox1.ReadOnly = true;
+            this.textBox1.Size = new System.Drawing.Size(116, 21);
+            this.textBox1.TabIndex = 3;
+            // 
+            // label7
+            // 
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(7, 214);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(0, 12);
+            this.label7.TabIndex = 2;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(218, 51);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(65, 12);
+            this.label5.TabIndex = 2;
+            this.label5.Text = "瀹為檯閫熷害锛�";
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(7, 48);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(65, 12);
+            this.label4.TabIndex = 2;
+            this.label4.Text = "瑙勫垝閫熷害锛�";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(218, 21);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(65, 12);
+            this.label3.TabIndex = 2;
+            this.label3.Text = "瀹為檯浣嶇疆锛�";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(7, 21);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(65, 12);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "瑙勫垝浣嶇疆锛�";
             // 
             // groupBox6
             // 
@@ -713,16 +672,16 @@
             this.groupBox6.Controls.Add(this.ioIndicatorCtrl41);
             this.groupBox6.Controls.Add(this.ioIndicatorCtrl42);
             this.groupBox6.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox6.Location = new System.Drawing.Point(3, 287);
+            this.groupBox6.Location = new System.Drawing.Point(3, 573);
             this.groupBox6.Name = "groupBox6";
-            this.groupBox6.Size = new System.Drawing.Size(578, 136);
+            this.groupBox6.Size = new System.Drawing.Size(578, 138);
             this.groupBox6.TabIndex = 7;
             this.groupBox6.TabStop = false;
             this.groupBox6.Text = "鏁板瓧閲忚緭鍑�";
             // 
             // ioIndicatorCtrl27
             // 
-            this.ioIndicatorCtrl27.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl27.Desc = "OUT 4";
             this.ioIndicatorCtrl27.IsOn = null;
             this.ioIndicatorCtrl27.Location = new System.Drawing.Point(477, 18);
             this.ioIndicatorCtrl27.Name = "ioIndicatorCtrl27";
@@ -731,7 +690,7 @@
             // 
             // ioIndicatorCtrl28
             // 
-            this.ioIndicatorCtrl28.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl28.Desc = "OUT 3";
             this.ioIndicatorCtrl28.IsOn = null;
             this.ioIndicatorCtrl28.Location = new System.Drawing.Point(306, 18);
             this.ioIndicatorCtrl28.Name = "ioIndicatorCtrl28";
@@ -740,7 +699,7 @@
             // 
             // ioIndicatorCtrl29
             // 
-            this.ioIndicatorCtrl29.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl29.Desc = "OUT 2";
             this.ioIndicatorCtrl29.IsOn = null;
             this.ioIndicatorCtrl29.Location = new System.Drawing.Point(145, 18);
             this.ioIndicatorCtrl29.Name = "ioIndicatorCtrl29";
@@ -749,7 +708,7 @@
             // 
             // ioIndicatorCtrl30
             // 
-            this.ioIndicatorCtrl30.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl30.Desc = "OUT 16";
             this.ioIndicatorCtrl30.IsOn = null;
             this.ioIndicatorCtrl30.Location = new System.Drawing.Point(477, 107);
             this.ioIndicatorCtrl30.Name = "ioIndicatorCtrl30";
@@ -758,7 +717,7 @@
             // 
             // ioIndicatorCtrl31
             // 
-            this.ioIndicatorCtrl31.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl31.Desc = "OUT 15";
             this.ioIndicatorCtrl31.IsOn = null;
             this.ioIndicatorCtrl31.Location = new System.Drawing.Point(306, 107);
             this.ioIndicatorCtrl31.Name = "ioIndicatorCtrl31";
@@ -767,7 +726,7 @@
             // 
             // ioIndicatorCtrl32
             // 
-            this.ioIndicatorCtrl32.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl32.Desc = "OUT 14";
             this.ioIndicatorCtrl32.IsOn = null;
             this.ioIndicatorCtrl32.Location = new System.Drawing.Point(145, 107);
             this.ioIndicatorCtrl32.Name = "ioIndicatorCtrl32";
@@ -776,7 +735,7 @@
             // 
             // ioIndicatorCtrl33
             // 
-            this.ioIndicatorCtrl33.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl33.Desc = "OUT 13";
             this.ioIndicatorCtrl33.IsOn = null;
             this.ioIndicatorCtrl33.Location = new System.Drawing.Point(9, 106);
             this.ioIndicatorCtrl33.Name = "ioIndicatorCtrl33";
@@ -785,7 +744,7 @@
             // 
             // ioIndicatorCtrl34
             // 
-            this.ioIndicatorCtrl34.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl34.Desc = "OUT 9";
             this.ioIndicatorCtrl34.IsOn = null;
             this.ioIndicatorCtrl34.Location = new System.Drawing.Point(9, 77);
             this.ioIndicatorCtrl34.Name = "ioIndicatorCtrl34";
@@ -794,7 +753,7 @@
             // 
             // ioIndicatorCtrl35
             // 
-            this.ioIndicatorCtrl35.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl35.Desc = "OUT 8";
             this.ioIndicatorCtrl35.IsOn = null;
             this.ioIndicatorCtrl35.Location = new System.Drawing.Point(477, 48);
             this.ioIndicatorCtrl35.Name = "ioIndicatorCtrl35";
@@ -803,7 +762,7 @@
             // 
             // ioIndicatorCtrl36
             // 
-            this.ioIndicatorCtrl36.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl36.Desc = "OUT 7";
             this.ioIndicatorCtrl36.IsOn = null;
             this.ioIndicatorCtrl36.Location = new System.Drawing.Point(306, 48);
             this.ioIndicatorCtrl36.Name = "ioIndicatorCtrl36";
@@ -812,7 +771,7 @@
             // 
             // ioIndicatorCtrl37
             // 
-            this.ioIndicatorCtrl37.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl37.Desc = "OUT 12";
             this.ioIndicatorCtrl37.IsOn = null;
             this.ioIndicatorCtrl37.Location = new System.Drawing.Point(477, 77);
             this.ioIndicatorCtrl37.Name = "ioIndicatorCtrl37";
@@ -821,7 +780,7 @@
             // 
             // ioIndicatorCtrl38
             // 
-            this.ioIndicatorCtrl38.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl38.Desc = "OUT 11";
             this.ioIndicatorCtrl38.IsOn = null;
             this.ioIndicatorCtrl38.Location = new System.Drawing.Point(306, 77);
             this.ioIndicatorCtrl38.Name = "ioIndicatorCtrl38";
@@ -830,7 +789,7 @@
             // 
             // ioIndicatorCtrl39
             // 
-            this.ioIndicatorCtrl39.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl39.Desc = "OUT 10";
             this.ioIndicatorCtrl39.IsOn = null;
             this.ioIndicatorCtrl39.Location = new System.Drawing.Point(145, 77);
             this.ioIndicatorCtrl39.Name = "ioIndicatorCtrl39";
@@ -839,7 +798,7 @@
             // 
             // ioIndicatorCtrl40
             // 
-            this.ioIndicatorCtrl40.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl40.Desc = "OUT 6";
             this.ioIndicatorCtrl40.IsOn = null;
             this.ioIndicatorCtrl40.Location = new System.Drawing.Point(145, 48);
             this.ioIndicatorCtrl40.Name = "ioIndicatorCtrl40";
@@ -848,7 +807,7 @@
             // 
             // ioIndicatorCtrl41
             // 
-            this.ioIndicatorCtrl41.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl41.Desc = "OUT 5";
             this.ioIndicatorCtrl41.IsOn = null;
             this.ioIndicatorCtrl41.Location = new System.Drawing.Point(9, 48);
             this.ioIndicatorCtrl41.Name = "ioIndicatorCtrl41";
@@ -857,282 +816,12 @@
             // 
             // ioIndicatorCtrl42
             // 
-            this.ioIndicatorCtrl42.Desc = "姝i檺浣�";
+            this.ioIndicatorCtrl42.Desc = "OUT 1";
             this.ioIndicatorCtrl42.IsOn = null;
             this.ioIndicatorCtrl42.Location = new System.Drawing.Point(9, 18);
             this.ioIndicatorCtrl42.Name = "ioIndicatorCtrl42";
             this.ioIndicatorCtrl42.Size = new System.Drawing.Size(90, 24);
             this.ioIndicatorCtrl42.TabIndex = 4;
-            // 
-            // groupBox7
-            // 
-            this.groupBox7.Controls.Add(this.ioIndicatorCtrl50);
-            this.groupBox7.Controls.Add(this.ioIndicatorCtrl49);
-            this.groupBox7.Controls.Add(this.ioIndicatorCtrl48);
-            this.groupBox7.Controls.Add(this.ioIndicatorCtrl47);
-            this.groupBox7.Controls.Add(this.ioIndicatorCtrl46);
-            this.groupBox7.Controls.Add(this.ioIndicatorCtrl45);
-            this.groupBox7.Controls.Add(this.ioIndicatorCtrl44);
-            this.groupBox7.Controls.Add(this.ioIndicatorCtrl43);
-            this.groupBox7.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox7.Location = new System.Drawing.Point(3, 429);
-            this.groupBox7.Name = "groupBox7";
-            this.groupBox7.Size = new System.Drawing.Size(578, 89);
-            this.groupBox7.TabIndex = 8;
-            this.groupBox7.TabStop = false;
-            this.groupBox7.Text = "Home";
-            // 
-            // groupBox8
-            // 
-            this.groupBox8.Controls.Add(this.ioIndicatorCtrl59);
-            this.groupBox8.Controls.Add(this.ioIndicatorCtrl60);
-            this.groupBox8.Controls.Add(this.ioIndicatorCtrl61);
-            this.groupBox8.Controls.Add(this.ioIndicatorCtrl62);
-            this.groupBox8.Controls.Add(this.ioIndicatorCtrl63);
-            this.groupBox8.Controls.Add(this.ioIndicatorCtrl64);
-            this.groupBox8.Controls.Add(this.ioIndicatorCtrl65);
-            this.groupBox8.Controls.Add(this.ioIndicatorCtrl66);
-            this.groupBox8.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox8.Location = new System.Drawing.Point(3, 619);
-            this.groupBox8.Name = "groupBox8";
-            this.groupBox8.Size = new System.Drawing.Size(578, 92);
-            this.groupBox8.TabIndex = 9;
-            this.groupBox8.TabStop = false;
-            this.groupBox8.Text = "Lim-";
-            // 
-            // groupBox9
-            // 
-            this.groupBox9.Controls.Add(this.ioIndicatorCtrl58);
-            this.groupBox9.Controls.Add(this.ioIndicatorCtrl57);
-            this.groupBox9.Controls.Add(this.ioIndicatorCtrl56);
-            this.groupBox9.Controls.Add(this.ioIndicatorCtrl55);
-            this.groupBox9.Controls.Add(this.ioIndicatorCtrl54);
-            this.groupBox9.Controls.Add(this.ioIndicatorCtrl53);
-            this.groupBox9.Controls.Add(this.ioIndicatorCtrl52);
-            this.groupBox9.Controls.Add(this.ioIndicatorCtrl51);
-            this.groupBox9.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.groupBox9.Location = new System.Drawing.Point(3, 524);
-            this.groupBox9.Name = "groupBox9";
-            this.groupBox9.Size = new System.Drawing.Size(578, 89);
-            this.groupBox9.TabIndex = 9;
-            this.groupBox9.TabStop = false;
-            this.groupBox9.Text = "Lim+";
-            // 
-            // ioIndicatorCtrl43
-            // 
-            this.ioIndicatorCtrl43.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl43.IsOn = null;
-            this.ioIndicatorCtrl43.Location = new System.Drawing.Point(6, 20);
-            this.ioIndicatorCtrl43.Name = "ioIndicatorCtrl43";
-            this.ioIndicatorCtrl43.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl43.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl44
-            // 
-            this.ioIndicatorCtrl44.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl44.IsOn = null;
-            this.ioIndicatorCtrl44.Location = new System.Drawing.Point(145, 20);
-            this.ioIndicatorCtrl44.Name = "ioIndicatorCtrl44";
-            this.ioIndicatorCtrl44.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl44.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl45
-            // 
-            this.ioIndicatorCtrl45.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl45.IsOn = null;
-            this.ioIndicatorCtrl45.Location = new System.Drawing.Point(306, 20);
-            this.ioIndicatorCtrl45.Name = "ioIndicatorCtrl45";
-            this.ioIndicatorCtrl45.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl45.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl46
-            // 
-            this.ioIndicatorCtrl46.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl46.IsOn = null;
-            this.ioIndicatorCtrl46.Location = new System.Drawing.Point(477, 20);
-            this.ioIndicatorCtrl46.Name = "ioIndicatorCtrl46";
-            this.ioIndicatorCtrl46.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl46.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl47
-            // 
-            this.ioIndicatorCtrl47.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl47.IsOn = null;
-            this.ioIndicatorCtrl47.Location = new System.Drawing.Point(477, 59);
-            this.ioIndicatorCtrl47.Name = "ioIndicatorCtrl47";
-            this.ioIndicatorCtrl47.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl47.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl48
-            // 
-            this.ioIndicatorCtrl48.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl48.IsOn = null;
-            this.ioIndicatorCtrl48.Location = new System.Drawing.Point(306, 59);
-            this.ioIndicatorCtrl48.Name = "ioIndicatorCtrl48";
-            this.ioIndicatorCtrl48.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl48.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl49
-            // 
-            this.ioIndicatorCtrl49.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl49.IsOn = null;
-            this.ioIndicatorCtrl49.Location = new System.Drawing.Point(145, 59);
-            this.ioIndicatorCtrl49.Name = "ioIndicatorCtrl49";
-            this.ioIndicatorCtrl49.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl49.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl50
-            // 
-            this.ioIndicatorCtrl50.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl50.IsOn = null;
-            this.ioIndicatorCtrl50.Location = new System.Drawing.Point(9, 59);
-            this.ioIndicatorCtrl50.Name = "ioIndicatorCtrl50";
-            this.ioIndicatorCtrl50.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl50.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl51
-            // 
-            this.ioIndicatorCtrl51.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl51.IsOn = null;
-            this.ioIndicatorCtrl51.Location = new System.Drawing.Point(9, 20);
-            this.ioIndicatorCtrl51.Name = "ioIndicatorCtrl51";
-            this.ioIndicatorCtrl51.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl51.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl52
-            // 
-            this.ioIndicatorCtrl52.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl52.IsOn = null;
-            this.ioIndicatorCtrl52.Location = new System.Drawing.Point(9, 59);
-            this.ioIndicatorCtrl52.Name = "ioIndicatorCtrl52";
-            this.ioIndicatorCtrl52.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl52.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl53
-            // 
-            this.ioIndicatorCtrl53.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl53.IsOn = null;
-            this.ioIndicatorCtrl53.Location = new System.Drawing.Point(145, 59);
-            this.ioIndicatorCtrl53.Name = "ioIndicatorCtrl53";
-            this.ioIndicatorCtrl53.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl53.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl54
-            // 
-            this.ioIndicatorCtrl54.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl54.IsOn = null;
-            this.ioIndicatorCtrl54.Location = new System.Drawing.Point(145, 20);
-            this.ioIndicatorCtrl54.Name = "ioIndicatorCtrl54";
-            this.ioIndicatorCtrl54.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl54.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl55
-            // 
-            this.ioIndicatorCtrl55.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl55.IsOn = null;
-            this.ioIndicatorCtrl55.Location = new System.Drawing.Point(306, 20);
-            this.ioIndicatorCtrl55.Name = "ioIndicatorCtrl55";
-            this.ioIndicatorCtrl55.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl55.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl56
-            // 
-            this.ioIndicatorCtrl56.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl56.IsOn = null;
-            this.ioIndicatorCtrl56.Location = new System.Drawing.Point(306, 59);
-            this.ioIndicatorCtrl56.Name = "ioIndicatorCtrl56";
-            this.ioIndicatorCtrl56.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl56.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl57
-            // 
-            this.ioIndicatorCtrl57.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl57.IsOn = null;
-            this.ioIndicatorCtrl57.Location = new System.Drawing.Point(477, 59);
-            this.ioIndicatorCtrl57.Name = "ioIndicatorCtrl57";
-            this.ioIndicatorCtrl57.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl57.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl58
-            // 
-            this.ioIndicatorCtrl58.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl58.IsOn = null;
-            this.ioIndicatorCtrl58.Location = new System.Drawing.Point(477, 20);
-            this.ioIndicatorCtrl58.Name = "ioIndicatorCtrl58";
-            this.ioIndicatorCtrl58.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl58.TabIndex = 4;
-            // 
-            // ioIndicatorCtrl59
-            // 
-            this.ioIndicatorCtrl59.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl59.IsOn = null;
-            this.ioIndicatorCtrl59.Location = new System.Drawing.Point(478, 15);
-            this.ioIndicatorCtrl59.Name = "ioIndicatorCtrl59";
-            this.ioIndicatorCtrl59.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl59.TabIndex = 5;
-            // 
-            // ioIndicatorCtrl60
-            // 
-            this.ioIndicatorCtrl60.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl60.IsOn = null;
-            this.ioIndicatorCtrl60.Location = new System.Drawing.Point(478, 54);
-            this.ioIndicatorCtrl60.Name = "ioIndicatorCtrl60";
-            this.ioIndicatorCtrl60.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl60.TabIndex = 6;
-            // 
-            // ioIndicatorCtrl61
-            // 
-            this.ioIndicatorCtrl61.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl61.IsOn = null;
-            this.ioIndicatorCtrl61.Location = new System.Drawing.Point(307, 54);
-            this.ioIndicatorCtrl61.Name = "ioIndicatorCtrl61";
-            this.ioIndicatorCtrl61.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl61.TabIndex = 7;
-            // 
-            // ioIndicatorCtrl62
-            // 
-            this.ioIndicatorCtrl62.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl62.IsOn = null;
-            this.ioIndicatorCtrl62.Location = new System.Drawing.Point(307, 15);
-            this.ioIndicatorCtrl62.Name = "ioIndicatorCtrl62";
-            this.ioIndicatorCtrl62.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl62.TabIndex = 8;
-            // 
-            // ioIndicatorCtrl63
-            // 
-            this.ioIndicatorCtrl63.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl63.IsOn = null;
-            this.ioIndicatorCtrl63.Location = new System.Drawing.Point(146, 15);
-            this.ioIndicatorCtrl63.Name = "ioIndicatorCtrl63";
-            this.ioIndicatorCtrl63.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl63.TabIndex = 9;
-            // 
-            // ioIndicatorCtrl64
-            // 
-            this.ioIndicatorCtrl64.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl64.IsOn = null;
-            this.ioIndicatorCtrl64.Location = new System.Drawing.Point(146, 54);
-            this.ioIndicatorCtrl64.Name = "ioIndicatorCtrl64";
-            this.ioIndicatorCtrl64.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl64.TabIndex = 10;
-            // 
-            // ioIndicatorCtrl65
-            // 
-            this.ioIndicatorCtrl65.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl65.IsOn = null;
-            this.ioIndicatorCtrl65.Location = new System.Drawing.Point(10, 54);
-            this.ioIndicatorCtrl65.Name = "ioIndicatorCtrl65";
-            this.ioIndicatorCtrl65.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl65.TabIndex = 11;
-            // 
-            // ioIndicatorCtrl66
-            // 
-            this.ioIndicatorCtrl66.Desc = "姝i檺浣�";
-            this.ioIndicatorCtrl66.IsOn = null;
-            this.ioIndicatorCtrl66.Location = new System.Drawing.Point(10, 15);
-            this.ioIndicatorCtrl66.Name = "ioIndicatorCtrl66";
-            this.ioIndicatorCtrl66.Size = new System.Drawing.Size(90, 24);
-            this.ioIndicatorCtrl66.TabIndex = 12;
             // 
             // CtrlMotionCardRunBase
             // 
@@ -1143,17 +832,17 @@
             this.Size = new System.Drawing.Size(982, 720);
             this.tableLayoutPanel1.ResumeLayout(false);
             this.tableLayoutPanel2.ResumeLayout(false);
-            this.groupBox1.ResumeLayout(false);
-            this.groupBoxCommBtn.ResumeLayout(false);
             this.groupBox2.ResumeLayout(false);
+            this.groupBox3.ResumeLayout(false);
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.groupBoxCommBtn.ResumeLayout(false);
+            this.groupBoxCommBtn.PerformLayout();
+            this.tableLayoutPanel3.ResumeLayout(false);
+            this.groupBox5.ResumeLayout(false);
             this.groupBox4.ResumeLayout(false);
             this.groupBox4.PerformLayout();
-            this.groupBox5.ResumeLayout(false);
-            this.tableLayoutPanel3.ResumeLayout(false);
             this.groupBox6.ResumeLayout(false);
-            this.groupBox7.ResumeLayout(false);
-            this.groupBox8.ResumeLayout(false);
-            this.groupBox9.ResumeLayout(false);
             this.ResumeLayout(false);
 
         }
@@ -1170,9 +859,6 @@
         private System.Windows.Forms.Button button8;
         private System.Windows.Forms.Button button10;
         private System.Windows.Forms.Button button9;
-        private System.Windows.Forms.Button button4;
-        private System.Windows.Forms.Button button3;
-        private System.Windows.Forms.Button button2;
         private System.Windows.Forms.GroupBox groupBox2;
         private System.Windows.Forms.ListBox listBox1;
         private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
@@ -1194,11 +880,7 @@
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl15;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl11;
         private System.Windows.Forms.GroupBox groupBox4;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl7;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl3;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl5;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl2;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl4;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl10;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl9;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl8;
@@ -1213,7 +895,6 @@
         private System.Windows.Forms.Label label4;
         private System.Windows.Forms.Label label3;
         private System.Windows.Forms.Label label2;
-        private System.Windows.Forms.GroupBox groupBox8;
         private System.Windows.Forms.GroupBox groupBox6;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl27;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl28;
@@ -1231,31 +912,10 @@
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl40;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl41;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl42;
-        private System.Windows.Forms.GroupBox groupBox7;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl50;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl49;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl48;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl47;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl46;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl45;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl44;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl43;
-        private System.Windows.Forms.GroupBox groupBox9;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl59;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl60;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl61;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl62;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl63;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl64;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl65;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl66;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl58;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl57;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl56;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl55;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl54;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl53;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl52;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl51;
+        private System.Windows.Forms.RadioButton radioButton3;
+        private System.Windows.Forms.RadioButton radioButton2;
+        private System.Windows.Forms.RadioButton radioButton1;
+        private System.Windows.Forms.PropertyGrid propGrid;
+        private System.Windows.Forms.Button btnStart;
     }
 }
diff --git a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs b/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs
index 5f2389b..498fec5 100644
--- a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs
+++ b/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs
@@ -17,5 +17,9 @@
             InitializeComponent();
         }
 
+        private void RadioButton_CheckedChanged(object sender, EventArgs e)
+        {
+
+        }
     }
 }
diff --git a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx b/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx
index 1af7de1..f82e6e1 100644
--- a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx
+++ b/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx
@@ -117,4 +117,27 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnStart.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6
+        JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAB3RJTUUH5AEVBQUmshfOegAAA3lJREFU
+        WEe90D1sG2UcBvBXSiUYKmUoTGTpxEfEQgffnc/+v/flOztJk6ZfI1LFxoAYGBiYWGCjoktBQkxV90qN
+        oCCUxj7HdomxE380scNCUZkqtdKLVFV9eV7fpaUltI59ziP9csmdfc/zhp3bnWfndxfY+d8X3oBvYBs2
+        4Svcn1XP/y3xxC+egosolM/p4v5HcOwsPnd2d24g0cQD3oQ7IPfxGH7BgGWUv6oGnOlHEkl8KgIB8gXU
+        8yuQOtM/gQGFJ8ZKfBoCAXIId1H6BRw/3c+zPSMnPgUGFDCggIKhbZ3uFz5A+bQasNyDUYbEJyAQIA/o
+        EfwI+eVe4chyL8CQyNCJv0AgQI7oPnwL7y32PHaq5z/x0pzCACAQIMf0B3yG4pmlHZ/teWHipRjgY4CP
+        lyRiY6nnv4/yo4s7ObZn3yzhARAIkAl6CNfAWdwJphZ3PIyIPJN4HYEAOQH34GsUv31y22NPudGAk1gE
+        BALkBPXhE5S/toByJRqAX4BAgDwEP6B8NhrhsMESIBAgD8kKyqcHA+bxAwgEyEPyAHTAgNu2QiBAHoa5
+        jv2g0LB0YGzutqUQCJAT17EkileCEp8O1jljBQwAAgFykvItLoMN/pNfpneDKmdBBQPyXa4QCJAToYrr
+        1Pcr9KlfzL4eVIjlf0O5Sr6LP7qEAYQBhC8kJ2hDg+751ezlXCn7TqHJmR8Sw39gYJAAA4BAgExEh6S/
+        mX2Yu5W97oUZz7luTOXCLMMIpq7PxO9kFQIBcmxbWZnbyNS9dfOCu2oe9dYzzCtBmIkbn4vfySgYkMGA
+        DF4ymlwrI726ecetmJ+7RXMmV1XFJorNqOj/ksMAIBAgD6xtSq9h3ndr6e+dUvrEwl8uc1HqluFl5Spe
+        GyvbJoEAeRBuI/3IqaVv2KExZ93QjjhhmmEEU9eh47bTCoEAOZTNtHR+NVp22fjQWtWnnbKBYgiN+K0H
+        CF449ABny5BO3bhrV/Qv7TX9uFMzmF0ElI8cp4nlTYOcliFA7gvFdt34G8VXraKuXZDzKNWZtaINrmPF
+        quJFVf0tu6n/abd0+R8N/bFV02/yknaO/6y/YqniIoxbvBe+pjFa0aZ4TbtoNTVpbcUamuS3tC4PtY/5
+        qnbMClG6FpUnGpyMUTHF6GZqhsqp73g1tc0rqU0KU5dwbxanH4zkxUiyYewfjPxR3uNflhgAAAAASUVO
+        RK5CYII=
+</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/src/Bro.UI.Device.Winform/Properties/Resources.Designer.cs b/src/Bro.UI.Device.Winform/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..b8edd78
--- /dev/null
+++ b/src/Bro.UI.Device.Winform/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Bro.UI.Device.Winform.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   涓�涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈��
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Bro.UI.Device.Winform.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴��
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�с��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/src/Bro.UI.Device.Winform/Properties/Resources.resx b/src/Bro.UI.Device.Winform/Properties/Resources.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/src/Bro.UI.Device.Winform/Properties/Resources.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

--
Gitblit v1.8.0