From 6f0b54910180efc54fa9e2d1efe6cfa9f3008d09 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期四, 02 七月 2020 11:16:18 +0800
Subject: [PATCH] 操作界面

---
 /dev/null                                                                 |   25 -
 src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.Designer.cs |  237 +++++++++++++
 src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.Designer.cs  |  440 +++++++------------------
 src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj                    |   19 
 src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.resx        |  120 +++++++
 src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.resx         |    0 
 src/Bro.Device.GTSCard/GTSCardConfig.cs                                   |    8 
 src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.cs          |   20 +
 src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.cs           |  100 +++++
 9 files changed, 628 insertions(+), 341 deletions(-)

diff --git a/src/Bro.Device.GTSCard/GTSCardConfig.cs b/src/Bro.Device.GTSCard/GTSCardConfig.cs
index 5c843a4..9cff3c0 100644
--- a/src/Bro.Device.GTSCard/GTSCardConfig.cs
+++ b/src/Bro.Device.GTSCard/GTSCardConfig.cs
@@ -98,10 +98,10 @@
         [DisplayName("鐩戝惉瓒呮椂")]
         public int MonitorTimeout { get; set; } = 500;
 
-        //[Category("浜嬩欢鍦板潃璁剧疆")]
-        //[Description("浜嬩欢寮�濮嬪湴鍧�锛孭LC鐨勫疄闄呭瘎瀛樺櫒鍦板潃銆傚崄杩涘埗锛屼笉鍖呭惈鍔熻兘鐮併��")]
-        //[DisplayName("鐩戝惉寮�濮嬪湴鍧�")]
-        //public int EventStartAddress { get; set; } = 8000;
+        [Category("浜嬩欢鍦板潃璁剧疆")]
+        [Description("浜嬩欢寮�濮嬪湴鍧�锛孭LC鐨勫疄闄呭瘎瀛樺櫒鍦板潃銆傚崄杩涘埗锛屼笉鍖呭惈鍔熻兘鐮併��")]
+        [DisplayName("鐩戝惉寮�濮嬪湴鍧�")]
+        public int EventStartAddress { get; set; } = 8000;
 
         //[Category("浜嬩欢鍦板潃璁剧疆")]
         //[Description("浜嬩欢鍦板潃闀垮害锛屾渶澶ч暱搴�128")]
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 2eba9b1..0931e4a 100644
--- a/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
+++ b/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
@@ -89,17 +89,23 @@
     <Compile Include="CtrlCameraRunBase.Designer.cs">
       <DependentUpon>CtrlCameraRunBase.cs</DependentUpon>
     </Compile>
-    <Compile Include="CtrlMotionCardRunBase.cs">
+    <Compile Include="MotionCard\CtrlMotionCardOperation.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Include="CtrlMotionCardRunBase.Designer.cs">
-      <DependentUpon>CtrlMotionCardRunBase.cs</DependentUpon>
+    <Compile Include="MotionCard\CtrlMotionCardOperation.Designer.cs">
+      <DependentUpon>CtrlMotionCardOperation.cs</DependentUpon>
     </Compile>
     <Compile Include="CtrlPLCRunBase.cs">
       <SubType>UserControl</SubType>
     </Compile>
     <Compile Include="CtrlPLCRunBase.Designer.cs">
       <DependentUpon>CtrlPLCRunBase.cs</DependentUpon>
+    </Compile>
+    <Compile Include="MotionCard\CtrlMotionCardAxisStatus.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MotionCard\CtrlMotionCardAxisStatus.Designer.cs">
+      <DependentUpon>CtrlMotionCardAxisStatus.cs</DependentUpon>
     </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
@@ -112,12 +118,15 @@
     <EmbeddedResource Include="CtrlCameraRunBase.resx">
       <DependentUpon>CtrlCameraRunBase.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="CtrlMotionCardRunBase.resx">
-      <DependentUpon>CtrlMotionCardRunBase.cs</DependentUpon>
+    <EmbeddedResource Include="MotionCard\CtrlMotionCardOperation.resx">
+      <DependentUpon>CtrlMotionCardOperation.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="CtrlPLCRunBase.resx">
       <DependentUpon>CtrlPLCRunBase.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="MotionCard\CtrlMotionCardAxisStatus.resx">
+      <DependentUpon>CtrlMotionCardAxisStatus.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
diff --git a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs b/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs
deleted file mode 100644
index 498fec5..0000000
--- a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace Bro.UI.Device.Winform
-{
-    public partial class CtrlMotionCardRunBase : UserControl
-    {
-        public CtrlMotionCardRunBase()
-        {
-            InitializeComponent();
-        }
-
-        private void RadioButton_CheckedChanged(object sender, EventArgs e)
-        {
-
-        }
-    }
-}
diff --git a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.Designer.cs b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.Designer.cs
new file mode 100644
index 0000000..5ab7756
--- /dev/null
+++ b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.Designer.cs
@@ -0,0 +1,237 @@
+锘縩amespace Bro.UI.Device.Winform.MotionCard
+{
+    partial class CtrlMotionCardAxisStatus
+    {
+        /// <summary> 
+        /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆�
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// 娓呯悊鎵�鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆�
+        /// </summary>
+        /// <param name="disposing">濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓� true锛涘惁鍒欎负 false銆�</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region 缁勪欢璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+        /// <summary> 
+        /// 璁捐鍣ㄦ敮鎸佹墍闇�鐨勬柟娉� - 涓嶈淇敼
+        /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广��
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.groupBoxAxisStatus = 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.groupBoxAxisStatus.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // groupBoxAxisStatus
+            // 
+            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl2);
+            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl10);
+            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl9);
+            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl8);
+            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl6);
+            this.groupBoxAxisStatus.Controls.Add(this.ioIndicatorCtrl1);
+            this.groupBoxAxisStatus.Controls.Add(this.textBox4);
+            this.groupBoxAxisStatus.Controls.Add(this.textBox3);
+            this.groupBoxAxisStatus.Controls.Add(this.textBox2);
+            this.groupBoxAxisStatus.Controls.Add(this.textBox1);
+            this.groupBoxAxisStatus.Controls.Add(this.label7);
+            this.groupBoxAxisStatus.Controls.Add(this.label5);
+            this.groupBoxAxisStatus.Controls.Add(this.label4);
+            this.groupBoxAxisStatus.Controls.Add(this.label3);
+            this.groupBoxAxisStatus.Controls.Add(this.label2);
+            this.groupBoxAxisStatus.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBoxAxisStatus.Location = new System.Drawing.Point(0, 0);
+            this.groupBoxAxisStatus.Name = "groupBoxAxisStatus";
+            this.groupBoxAxisStatus.Size = new System.Drawing.Size(580, 141);
+            this.groupBoxAxisStatus.TabIndex = 4;
+            this.groupBoxAxisStatus.TabStop = false;
+            this.groupBoxAxisStatus.Text = "杞寸姸鎬�";
+            // 
+            // ioIndicatorCtrl2
+            // 
+            this.ioIndicatorCtrl2.Desc = "浼烘湇浣胯兘";
+            this.ioIndicatorCtrl2.IsOn = null;
+            this.ioIndicatorCtrl2.Location = new System.Drawing.Point(479, 17);
+            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(328, 77);
+            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(328, 107);
+            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(479, 47);
+            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(328, 47);
+            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(328, 17);
+            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(85, 114);
+            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(85, 53);
+            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(85, 83);
+            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(85, 22);
+            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(23, 117);
+            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(23, 56);
+            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(23, 86);
+            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(23, 25);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(65, 12);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "瑙勫垝浣嶇疆锛�";
+            // 
+            // CtrlMotionCardRunStatus
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.groupBoxAxisStatus);
+            this.Name = "CtrlMotionCardRunStatus";
+            this.Size = new System.Drawing.Size(580, 141);
+            this.groupBoxAxisStatus.ResumeLayout(false);
+            this.groupBoxAxisStatus.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.GroupBox groupBoxAxisStatus;
+        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl2;
+        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl10;
+        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl9;
+        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl8;
+        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl6;
+        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl1;
+        private System.Windows.Forms.TextBox textBox4;
+        private System.Windows.Forms.TextBox textBox3;
+        private System.Windows.Forms.TextBox textBox2;
+        private System.Windows.Forms.TextBox textBox1;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label label2;
+    }
+}
diff --git a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.cs b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.cs
new file mode 100644
index 0000000..e6b93cf
--- /dev/null
+++ b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.cs
@@ -0,0 +1,20 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Bro.UI.Device.Winform.MotionCard
+{
+    public partial class CtrlMotionCardAxisStatus : UserControl
+    {
+        public CtrlMotionCardAxisStatus()
+        {
+            InitializeComponent();
+        }
+    }
+}
diff --git a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.resx b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardAxisStatus.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
diff --git a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.Designer.cs
similarity index 67%
rename from src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs
rename to src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.Designer.cs
index 4ea729d..a7875c8 100644
--- a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.Designer.cs
+++ b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.Designer.cs
@@ -1,6 +1,6 @@
 锘縩amespace Bro.UI.Device.Winform
 {
-    partial class CtrlMotionCardRunBase
+    partial class CtrlMotionCardOperation
     {
         /// <summary> 
         /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆�
@@ -28,24 +28,24 @@
         /// </summary>
         private void InitializeComponent()
         {
-            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CtrlMotionCardRunBase));
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CtrlMotionCardOperation));
             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.listBoxMsg = new System.Windows.Forms.ListBox();
+            this.groupBoxPara = new System.Windows.Forms.GroupBox();
             this.propGrid = new System.Windows.Forms.PropertyGrid();
             this.groupBox1 = new System.Windows.Forms.GroupBox();
-            this.radioButton3 = new System.Windows.Forms.RadioButton();
-            this.radioButton2 = new System.Windows.Forms.RadioButton();
-            this.radioButton1 = new System.Windows.Forms.RadioButton();
+            this.radioGoHome = new System.Windows.Forms.RadioButton();
+            this.radioJog = new System.Windows.Forms.RadioButton();
+            this.radioP2P = 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.buttonClearStatus = new System.Windows.Forms.Button();
+            this.buttonEmergencyStop = new System.Windows.Forms.Button();
+            this.buttonServoEnable = new System.Windows.Forms.Button();
+            this.buttonSmoothStop = new System.Windows.Forms.Button();
+            this.buttonPositionReset = new System.Windows.Forms.Button();
             this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
             this.groupBox5 = new System.Windows.Forms.GroupBox();
             this.ioIndicatorCtrl14 = new Bro.UI.Model.Winform.IOIndicatorCtrl();
@@ -64,22 +64,6 @@
             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();
@@ -97,15 +81,15 @@
             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.flowLayoutPanelRunStatus = new System.Windows.Forms.FlowLayoutPanel();
             this.tableLayoutPanel1.SuspendLayout();
             this.tableLayoutPanel2.SuspendLayout();
             this.groupBox2.SuspendLayout();
-            this.groupBox3.SuspendLayout();
+            this.groupBoxPara.SuspendLayout();
             this.groupBox1.SuspendLayout();
             this.groupBoxCommBtn.SuspendLayout();
             this.tableLayoutPanel3.SuspendLayout();
             this.groupBox5.SuspendLayout();
-            this.groupBox4.SuspendLayout();
             this.groupBox6.SuspendLayout();
             this.SuspendLayout();
             // 
@@ -129,7 +113,7 @@
             this.tableLayoutPanel2.ColumnCount = 1;
             this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
             this.tableLayoutPanel2.Controls.Add(this.groupBox2, 0, 3);
-            this.tableLayoutPanel2.Controls.Add(this.groupBox3, 0, 2);
+            this.tableLayoutPanel2.Controls.Add(this.groupBoxPara, 0, 2);
             this.tableLayoutPanel2.Controls.Add(this.groupBox1, 0, 1);
             this.tableLayoutPanel2.Controls.Add(this.groupBoxCommBtn, 0, 0);
             this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
@@ -145,7 +129,7 @@
             // 
             // groupBox2
             // 
-            this.groupBox2.Controls.Add(this.listBox1);
+            this.groupBox2.Controls.Add(this.listBoxMsg);
             this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
             this.groupBox2.Location = new System.Drawing.Point(3, 607);
             this.groupBox2.Name = "groupBox2";
@@ -154,27 +138,27 @@
             this.groupBox2.TabStop = false;
             this.groupBox2.Text = "娑堟伅妗�";
             // 
-            // listBox1
+            // listBoxMsg
             // 
-            this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
-            this.listBox1.FormattingEnabled = true;
-            this.listBox1.ItemHeight = 15;
-            this.listBox1.Location = new System.Drawing.Point(3, 17);
-            this.listBox1.Name = "listBox1";
-            this.listBox1.Size = new System.Drawing.Size(374, 84);
-            this.listBox1.TabIndex = 1;
+            this.listBoxMsg.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.listBoxMsg.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+            this.listBoxMsg.FormattingEnabled = true;
+            this.listBoxMsg.ItemHeight = 15;
+            this.listBoxMsg.Location = new System.Drawing.Point(3, 17);
+            this.listBoxMsg.Name = "listBoxMsg";
+            this.listBoxMsg.Size = new System.Drawing.Size(374, 84);
+            this.listBoxMsg.TabIndex = 1;
             // 
-            // groupBox3
+            // groupBoxPara
             // 
-            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 = "鍙傛暟";
+            this.groupBoxPara.Controls.Add(this.propGrid);
+            this.groupBoxPara.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBoxPara.Location = new System.Drawing.Point(3, 143);
+            this.groupBoxPara.Name = "groupBoxPara";
+            this.groupBoxPara.Size = new System.Drawing.Size(380, 458);
+            this.groupBoxPara.TabIndex = 6;
+            this.groupBoxPara.TabStop = false;
+            this.groupBoxPara.Text = "鍙傛暟";
             // 
             // propGrid
             // 
@@ -187,9 +171,9 @@
             // 
             // groupBox1
             // 
-            this.groupBox1.Controls.Add(this.radioButton3);
-            this.groupBox1.Controls.Add(this.radioButton2);
-            this.groupBox1.Controls.Add(this.radioButton1);
+            this.groupBox1.Controls.Add(this.radioGoHome);
+            this.groupBox1.Controls.Add(this.radioJog);
+            this.groupBox1.Controls.Add(this.radioP2P);
             this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
             this.groupBox1.Location = new System.Drawing.Point(3, 93);
             this.groupBox1.Name = "groupBox1";
@@ -198,49 +182,49 @@
             this.groupBox1.TabStop = false;
             this.groupBox1.Text = "杩愬姩绫诲瀷";
             // 
-            // radioButton3
+            // radioGoHome
             // 
-            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;
+            this.radioGoHome.AutoSize = true;
+            this.radioGoHome.Location = new System.Drawing.Point(156, 22);
+            this.radioGoHome.Name = "radioGoHome";
+            this.radioGoHome.Size = new System.Drawing.Size(59, 16);
+            this.radioGoHome.TabIndex = 5;
+            this.radioGoHome.TabStop = true;
+            this.radioGoHome.Text = "GoHome";
+            this.radioGoHome.UseVisualStyleBackColor = true;
             // 
-            // radioButton2
+            // radioJog
             // 
-            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;
+            this.radioJog.AutoSize = true;
+            this.radioJog.Location = new System.Drawing.Point(82, 22);
+            this.radioJog.Name = "radioJog";
+            this.radioJog.Size = new System.Drawing.Size(41, 16);
+            this.radioJog.TabIndex = 5;
+            this.radioJog.TabStop = true;
+            this.radioJog.Text = "Jog";
+            this.radioJog.UseVisualStyleBackColor = true;
             // 
-            // radioButton1
+            // radioP2P
             // 
-            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);
+            this.radioP2P.AutoSize = true;
+            this.radioP2P.Checked = true;
+            this.radioP2P.Location = new System.Drawing.Point(9, 22);
+            this.radioP2P.Name = "radioP2P";
+            this.radioP2P.Size = new System.Drawing.Size(41, 16);
+            this.radioP2P.TabIndex = 5;
+            this.radioP2P.TabStop = true;
+            this.radioP2P.Text = "P2P";
+            this.radioP2P.UseVisualStyleBackColor = true;
+            this.radioP2P.CheckedChanged += new System.EventHandler(this.RadioButton_CheckedChanged);
             // 
             // groupBoxCommBtn
             // 
             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.Controls.Add(this.buttonClearStatus);
+            this.groupBoxCommBtn.Controls.Add(this.buttonEmergencyStop);
+            this.groupBoxCommBtn.Controls.Add(this.buttonServoEnable);
+            this.groupBoxCommBtn.Controls.Add(this.buttonSmoothStop);
+            this.groupBoxCommBtn.Controls.Add(this.buttonPositionReset);
             this.groupBoxCommBtn.Dock = System.Windows.Forms.DockStyle.Fill;
             this.groupBoxCommBtn.Location = new System.Drawing.Point(3, 3);
             this.groupBoxCommBtn.Name = "groupBoxCommBtn";
@@ -265,59 +249,65 @@
             this.btnStart.Text = "  鍚�  鍔�";
             this.btnStart.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
             this.btnStart.UseVisualStyleBackColor = true;
+            this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
             // 
-            // button1
+            // buttonClearStatus
             // 
-            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;
+            this.buttonClearStatus.Location = new System.Drawing.Point(6, 18);
+            this.buttonClearStatus.Name = "buttonClearStatus";
+            this.buttonClearStatus.Size = new System.Drawing.Size(70, 25);
+            this.buttonClearStatus.TabIndex = 4;
+            this.buttonClearStatus.Text = "娓呴櫎鐘舵��";
+            this.buttonClearStatus.UseVisualStyleBackColor = true;
+            this.buttonClearStatus.Click += new System.EventHandler(this.buttonClearStatus_Click);
             // 
-            // button11
+            // buttonEmergencyStop
             // 
-            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;
+            this.buttonEmergencyStop.Location = new System.Drawing.Point(86, 53);
+            this.buttonEmergencyStop.Name = "buttonEmergencyStop";
+            this.buttonEmergencyStop.Size = new System.Drawing.Size(70, 25);
+            this.buttonEmergencyStop.TabIndex = 4;
+            this.buttonEmergencyStop.Text = "绱ф�ュ仠姝�";
+            this.buttonEmergencyStop.UseVisualStyleBackColor = true;
+            this.buttonEmergencyStop.Click += new System.EventHandler(this.buttonEmergencyStop_Click);
             // 
-            // button8
+            // buttonServoEnable
             // 
-            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;
+            this.buttonServoEnable.Location = new System.Drawing.Point(86, 18);
+            this.buttonServoEnable.Name = "buttonServoEnable";
+            this.buttonServoEnable.Size = new System.Drawing.Size(70, 25);
+            this.buttonServoEnable.TabIndex = 4;
+            this.buttonServoEnable.Text = "浼烘湇浣胯兘";
+            this.buttonServoEnable.UseVisualStyleBackColor = true;
+            this.buttonServoEnable.Click += new System.EventHandler(this.buttonServoEnable_Click);
             // 
-            // button10
+            // buttonSmoothStop
             // 
-            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;
+            this.buttonSmoothStop.Location = new System.Drawing.Point(6, 53);
+            this.buttonSmoothStop.Name = "buttonSmoothStop";
+            this.buttonSmoothStop.Size = new System.Drawing.Size(70, 25);
+            this.buttonSmoothStop.TabIndex = 4;
+            this.buttonSmoothStop.Text = "骞虫粦鍋滄";
+            this.buttonSmoothStop.UseVisualStyleBackColor = true;
+            this.buttonSmoothStop.Click += new System.EventHandler(this.buttonSmoothStop_Click);
             // 
-            // button9
+            // buttonPositionReset
             // 
-            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;
+            this.buttonPositionReset.Location = new System.Drawing.Point(168, 18);
+            this.buttonPositionReset.Name = "buttonPositionReset";
+            this.buttonPositionReset.Size = new System.Drawing.Size(70, 25);
+            this.buttonPositionReset.TabIndex = 4;
+            this.buttonPositionReset.Text = "浣嶇疆娓呴浂";
+            this.buttonPositionReset.UseVisualStyleBackColor = true;
+            this.buttonPositionReset.Click += new System.EventHandler(this.buttonPositionReset_Click);
             // 
             // tableLayoutPanel3
             // 
             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.Controls.Add(this.flowLayoutPanelRunStatus, 0, 0);
             this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
             this.tableLayoutPanel3.Location = new System.Drawing.Point(395, 3);
             this.tableLayoutPanel3.Name = "tableLayoutPanel3";
@@ -498,161 +488,6 @@
             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
             // 
             this.groupBox6.Controls.Add(this.ioIndicatorCtrl27);
@@ -823,6 +658,14 @@
             this.ioIndicatorCtrl42.Size = new System.Drawing.Size(90, 24);
             this.ioIndicatorCtrl42.TabIndex = 4;
             // 
+            // flowLayoutPanelRunStatus
+            // 
+            this.flowLayoutPanelRunStatus.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.flowLayoutPanelRunStatus.Location = new System.Drawing.Point(3, 3);
+            this.flowLayoutPanelRunStatus.Name = "flowLayoutPanelRunStatus";
+            this.flowLayoutPanelRunStatus.Size = new System.Drawing.Size(578, 422);
+            this.flowLayoutPanelRunStatus.TabIndex = 8;
+            // 
             // CtrlMotionCardRunBase
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@@ -833,15 +676,13 @@
             this.tableLayoutPanel1.ResumeLayout(false);
             this.tableLayoutPanel2.ResumeLayout(false);
             this.groupBox2.ResumeLayout(false);
-            this.groupBox3.ResumeLayout(false);
+            this.groupBoxPara.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.groupBox6.ResumeLayout(false);
             this.ResumeLayout(false);
 
@@ -852,15 +693,15 @@
         private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
         private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
         private System.Windows.Forms.GroupBox groupBoxCommBtn;
-        private System.Windows.Forms.GroupBox groupBox3;
+        private System.Windows.Forms.GroupBox groupBoxPara;
         private System.Windows.Forms.GroupBox groupBox1;
-        private System.Windows.Forms.Button button1;
-        private System.Windows.Forms.Button button11;
-        private System.Windows.Forms.Button button8;
-        private System.Windows.Forms.Button button10;
-        private System.Windows.Forms.Button button9;
+        private System.Windows.Forms.Button buttonClearStatus;
+        private System.Windows.Forms.Button buttonEmergencyStop;
+        private System.Windows.Forms.Button buttonServoEnable;
+        private System.Windows.Forms.Button buttonSmoothStop;
+        private System.Windows.Forms.Button buttonPositionReset;
         private System.Windows.Forms.GroupBox groupBox2;
-        private System.Windows.Forms.ListBox listBox1;
+        private System.Windows.Forms.ListBox listBoxMsg;
         private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
         private System.Windows.Forms.GroupBox groupBox5;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl14;
@@ -879,22 +720,6 @@
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl18;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl15;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl11;
-        private System.Windows.Forms.GroupBox groupBox4;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl2;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl10;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl9;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl8;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl6;
-        private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl1;
-        private System.Windows.Forms.TextBox textBox4;
-        private System.Windows.Forms.TextBox textBox3;
-        private System.Windows.Forms.TextBox textBox2;
-        private System.Windows.Forms.TextBox textBox1;
-        private System.Windows.Forms.Label label7;
-        private System.Windows.Forms.Label label5;
-        private System.Windows.Forms.Label label4;
-        private System.Windows.Forms.Label label3;
-        private System.Windows.Forms.Label label2;
         private System.Windows.Forms.GroupBox groupBox6;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl27;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl28;
@@ -912,10 +737,11 @@
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl40;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl41;
         private Model.Winform.IOIndicatorCtrl ioIndicatorCtrl42;
-        private System.Windows.Forms.RadioButton radioButton3;
-        private System.Windows.Forms.RadioButton radioButton2;
-        private System.Windows.Forms.RadioButton radioButton1;
+        private System.Windows.Forms.RadioButton radioGoHome;
+        private System.Windows.Forms.RadioButton radioJog;
+        private System.Windows.Forms.RadioButton radioP2P;
         private System.Windows.Forms.PropertyGrid propGrid;
         private System.Windows.Forms.Button btnStart;
+        private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelRunStatus;
     }
 }
diff --git a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.cs b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.cs
new file mode 100644
index 0000000..248d18f
--- /dev/null
+++ b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.cs
@@ -0,0 +1,100 @@
+锘縰sing Bro.Common.Helper;
+using Bro.Common.Interface;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace Bro.UI.Device.Winform
+{
+    public partial class CtrlMotionCardOperation : UserControl, IProcessObserver, ILogOutput
+    {
+        public CtrlMotionCardOperation()
+        {
+            InitializeComponent();
+        }
+
+        List<string> _avaiableMethods { get; set; } = new List<string>();
+
+        private IProcess process = null;
+        public IProcess Process
+        {
+            get => process;
+            set
+            {
+                if (process != value)
+                {
+                    process = value;
+                    OnProcessUpdated();
+                }
+            }
+        }
+
+        #region ILogoutput
+        public Action<LogMsg> OnLogMsgOutput { get; set; }
+
+        public void LogDisplay(LogMsg msg)
+        {
+        }
+        #endregion
+        public void DownloadProcess(IProcess process)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void OnProcessUpdated()
+        {
+            if (InvokeRequired)
+            {
+                Invoke(new Action(() => OnProcessUpdated()));
+            }
+            else
+            {
+                if (Process != null)
+                {
+                    //_avaiableMethods = Process.ProcessMethodCollection.Where(u => u.InvokeType == _invokeType).Select(u => u.MethodCode).ToList();
+
+                    //LoadDevices();
+                    //LoadProcessMethods();
+                }
+            }
+        }
+
+        private void RadioButton_CheckedChanged(object sender, EventArgs e)
+        {
+
+        }
+
+        private void buttonClearStatus_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void buttonServoEnable_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void buttonPositionReset_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void btnStart_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void buttonSmoothStop_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void buttonEmergencyStop_Click(object sender, EventArgs e)
+        {
+
+        }
+
+    }
+}
diff --git a/src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.resx
similarity index 100%
rename from src/Bro.UI.Device.Winform/CtrlMotionCardRunBase.resx
rename to src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperation.resx

--
Gitblit v1.8.0