章政 8 лет назад
Родитель
Сommit
a74c4cfda5
66 измененных файлов с 9903 добавлено и 12 удалено
  1. 57 0
      PLCDataReader/CustomerControl/AutoDataGridControl/AutoDataGridControl.Designer.cs
  2. 141 0
      PLCDataReader/CustomerControl/AutoDataGridControl/AutoDataGridControl.cs
  3. 123 0
      PLCDataReader/CustomerControl/AutoDataGridControl/AutoDataGridControl.resx
  4. 42 0
      PLCDataReader/CustomerControl/Button/ButtonAddRow.Designer.cs
  5. 43 0
      PLCDataReader/CustomerControl/Button/ButtonAddRow.cs
  6. 123 0
      PLCDataReader/CustomerControl/Button/ButtonAddRow.resx
  7. 42 0
      PLCDataReader/CustomerControl/Button/ButtonDeleteRow.Designer.cs
  8. 57 0
      PLCDataReader/CustomerControl/Button/ButtonDeleteRow.cs
  9. 123 0
      PLCDataReader/CustomerControl/Button/ButtonDeleteRow.resx
  10. 42 0
      PLCDataReader/CustomerControl/Button/ButtonSaveGrid.Designer.cs
  11. 93 0
      PLCDataReader/CustomerControl/Button/ButtonSaveGrid.cs
  12. 123 0
      PLCDataReader/CustomerControl/Button/ButtonSaveGrid.resx
  13. 45 0
      PLCDataReader/CustomerControl/GridViewWithSerialNum/GridViewWithSerialNum.Designer.cs
  14. 171 0
      PLCDataReader/CustomerControl/GridViewWithSerialNum/GridViewWithSerialNum.cs
  15. 123 0
      PLCDataReader/CustomerControl/GridViewWithSerialNum/GridViewWithSerialNum.resx
  16. 210 0
      PLCDataReader/CustomerControl/PagingControl/PageControl.Designer.cs
  17. 93 0
      PLCDataReader/CustomerControl/PagingControl/PageControl.cs
  18. 257 0
      PLCDataReader/CustomerControl/PagingControl/PageControl.resx
  19. 84 0
      PLCDataReader/CustomerControl/PictureEditWithText/PictureEditWithText.Designer.cs
  20. 66 0
      PLCDataReader/CustomerControl/PictureEditWithText/PictureEditWithText.cs
  21. 120 0
      PLCDataReader/CustomerControl/PictureEditWithText/PictureEditWithText.resx
  22. 36 0
      PLCDataReader/CustomerControl/ValueLabel/ValueLabel.Designer.cs
  23. 19 0
      PLCDataReader/CustomerControl/ValueLabel/ValueLabel.cs
  24. 26 0
      PLCDataReader/DataOperate/ComboBoxData.cs
  25. 1111 0
      PLCDataReader/DataOperate/DataHelper.cs
  26. 257 0
      PLCDataReader/Device/Command/FormNewCommand.Designer.cs
  27. 57 0
      PLCDataReader/Device/Command/FormNewCommand.cs
  28. 120 0
      PLCDataReader/Device/Command/FormNewCommand.resx
  29. 286 0
      PLCDataReader/Device/Information/DeviceDetailInfo.Designer.cs
  30. 80 0
      PLCDataReader/Device/Information/DeviceDetailInfo.cs
  31. 120 0
      PLCDataReader/Device/Information/DeviceDetailInfo.resx
  32. 358 0
      PLCDataReader/Device/Information/DeviceStatusInfo.Designer.cs
  33. 55 0
      PLCDataReader/Device/Information/DeviceStatusInfo.cs
  34. 120 0
      PLCDataReader/Device/Information/DeviceStatusInfo.resx
  35. 146 0
      PLCDataReader/Entity/Polling.cs
  36. 41 0
      PLCDataReader/Entity/SocketObject.cs
  37. 47 0
      PLCDataReader/Entity/SystemInf.cs
  38. 67 0
      PLCDataReader/Entity/User.cs
  39. 117 0
      PLCDataReader/Login.Designer.cs
  40. 71 0
      PLCDataReader/Login.cs
  41. 120 0
      PLCDataReader/Login.resx
  42. 1785 0
      PLCDataReader/Main.Designer.cs
  43. 764 0
      PLCDataReader/Main.cs
  44. 766 0
      PLCDataReader/Main.resx
  45. 1 1
      PLCDataReader/Program.cs
  46. 90 0
      PLCDataReader/Properties/Resources.Designer.cs
  47. 36 5
      PLCDataReader/Properties/Resources.resx
  48. 15 0
      PLCDataReader/Properties/Settings.Designer.cs
  49. 8 6
      PLCDataReader/Properties/Settings.settings
  50. 273 0
      PLCDataReader/PublicMethod/BaseUtil.cs
  51. 63 0
      PLCDataReader/PublicMethod/LogManager.cs
  52. 41 0
      PLCDataReader/PublicMethod/LogicHandler.cs
  53. 316 0
      PLCDataReader/PublicMethod/ModeBusTCPServer.cs
  54. 131 0
      PLCDataReader/PublicMethod/PollingTask.cs
  55. 25 0
      PLCDataReader/PublicMethod/PollingTimer.cs
  56. BIN
      PLCDataReader/Resources/UIcon.png
  57. BIN
      PLCDataReader/Resources/U_Letter_72px_1121581_easyicon.net.png
  58. BIN
      PLCDataReader/Resources/check_16px_1137507_easyicon.net.png
  59. BIN
      PLCDataReader/Resources/close_24px_1069872_easyicon.net.png
  60. BIN
      PLCDataReader/Resources/devicecontrol.png
  61. BIN
      PLCDataReader/Resources/devices_84.078431372549px_1202965_easyicon.net.png
  62. BIN
      PLCDataReader/Resources/net_connected.png
  63. BIN
      PLCDataReader/Resources/netstatus_tx_64px_18991_easyicon.net.png
  64. BIN
      PLCDataReader/Resources/network-offline.png
  65. 142 0
      PLCDataReader/UAS_PLCDataReader.csproj
  66. 15 0
      PLCDataReader/app.config

+ 57 - 0
PLCDataReader/CustomerControl/AutoDataGridControl/AutoDataGridControl.Designer.cs

@@ -0,0 +1,57 @@
+namespace UAS_PLCDataReader.CustomerControl.AutoDataGridControl
+{
+    partial class AutoDataGridControl
+    {
+        /// <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 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
+            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // gridView1
+            // 
+            this.gridView1.GridControl = this;
+            this.gridView1.Name = "gridView1";
+            // 
+            // AutoDataGridControl
+            // 
+            this.MainView = this.gridView1;
+            this.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.gridView1});
+            this.VisibleChanged += new System.EventHandler(this.AutoDataGridControl_VisibleChanged);
+            ((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
+    }
+}

+ 141 - 0
PLCDataReader/CustomerControl/AutoDataGridControl/AutoDataGridControl.cs

@@ -0,0 +1,141 @@
+using System;
+using System.Data;
+using DevExpress.XtraGrid;
+using UAS_PLCDataReader.DataOperate;
+
+namespace UAS_PLCDataReader.CustomerControl.AutoDataGridControl
+{
+    public partial class AutoDataGridControl : GridControl
+    {
+        string getDataSQL;
+
+        string condition;
+
+        //记录初始化的SQL,防止条件重复拼接
+        string firstsql;
+
+        public delegate void OnDataRefresh(object sender, EventArgs e);
+
+        public event OnDataRefresh DataRefresh;
+
+        DataHelper dh = new DataHelper();
+        //获取数据的SQL
+        public string GetDataSQL
+        {
+            get
+            {
+                return getDataSQL;
+            }
+
+            set
+            {
+                getDataSQL = value;
+                firstsql = value;
+            }
+        }
+
+
+        //获取数据的总行数
+        public int RowCount
+        {
+            get
+            {
+                return rowCount;
+            }
+
+            set
+            {
+                rowCount = value;
+            }
+        }
+
+        public string TableName
+        {
+            get
+            {
+                return tableName;
+            }
+
+            set
+            {
+                tableName = value;
+            }
+        }
+
+        public string ID
+        {
+            get
+            {
+                return id;
+            }
+
+            set
+            {
+                id = value;
+            }
+        }
+
+        public string InsertSQL
+        {
+            get
+            {
+                return insertSQL;
+            }
+
+            set
+            {
+                insertSQL = value;
+            }
+        }
+
+        public string Condition
+        {
+            get
+            {
+                return condition;
+            }
+
+            set
+            {
+                condition = value;
+            }
+        }
+
+        private string insertSQL;
+
+        //用于保存数据的主表的名称
+        private string tableName;
+
+        private string id;
+
+        private int rowCount;
+
+        public AutoDataGridControl()
+        {
+            InitializeComponent();
+        }
+
+        private void AutoDataGridControl_VisibleChanged(object sender, EventArgs e)
+        {
+            RefreshData();
+        }
+
+        public void RefreshData()
+        {
+            if (getDataSQL != null)
+            {
+                if (condition != null)
+                {
+                    getDataSQL = getDataSQL + " " + condition;
+                }
+                DataTable dt = (DataTable)dh.ExecuteSql(getDataSQL, "select");
+                rowCount = dt.Rows.Count;
+                DataSource = dt;
+                getDataSQL = firstsql;
+                //调用列自适应,自动调整最合适列宽
+                (MainView as GridViewWithSerialNum.GridViewWithSerialNum).BestFitColumns();
+            }
+            DataRefresh?.Invoke(new object(), new EventArgs());
+        }
+    }
+}

+ 123 - 0
PLCDataReader/CustomerControl/AutoDataGridControl/AutoDataGridControl.resx

@@ -0,0 +1,123 @@
+<?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>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>

+ 42 - 0
PLCDataReader/CustomerControl/Button/ButtonAddRow.Designer.cs

@@ -0,0 +1,42 @@
+namespace UAS_PLCDataReader.CustomerControl.Button
+{
+    partial class ButtonAddRow
+    {
+        /// <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 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.SuspendLayout();
+            // 
+            // ButtonAddRow
+            // 
+            this.Click += new System.EventHandler(this.ButtonAddRow_Click);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+    }
+}

+ 43 - 0
PLCDataReader/CustomerControl/Button/ButtonAddRow.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Data;
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.Entity;
+
+namespace UAS_PLCDataReader.CustomerControl.Button
+{
+    public partial class ButtonAddRow : SimpleButton
+    {
+
+        private AutoDataGridControl.AutoDataGridControl grid;
+
+        public AutoDataGridControl.AutoDataGridControl Grid
+        {
+            get
+            {
+                return grid;
+            }
+
+            set
+            {
+                grid = value;
+            }
+        }
+
+        public ButtonAddRow()
+        {
+            InitializeComponent();
+        }
+
+        private void ButtonSaveGrid_Click(object sender, EventArgs e)
+        {
+
+        }
+
+        private void ButtonAddRow_Click(object sender, EventArgs e)
+        {
+            DataTable dt = (DataTable)grid.DataSource;
+            if (dt != null)
+                dt.Rows.Add();
+        }
+    }
+}

+ 123 - 0
PLCDataReader/CustomerControl/Button/ButtonAddRow.resx

@@ -0,0 +1,123 @@
+<?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>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>

+ 42 - 0
PLCDataReader/CustomerControl/Button/ButtonDeleteRow.Designer.cs

@@ -0,0 +1,42 @@
+namespace UAS_PLCDataReader.CustomerControl.Button
+{
+    partial class ButtonDeleteRow
+    {
+        /// <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 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.SuspendLayout();
+            // 
+            // ButtonDeleteRow
+            // 
+            this.Click += new System.EventHandler(this.ButtonDeleteRow_Click);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+    }
+}

+ 57 - 0
PLCDataReader/CustomerControl/Button/ButtonDeleteRow.cs

@@ -0,0 +1,57 @@
+using System;
+using System.Windows.Forms;
+using DevExpress.XtraEditors;
+using DevExpress.XtraGrid.Views.Grid;
+using UAS_PLCDataReader.Entity;
+using System.Collections.Generic;
+
+namespace UAS_PLCDataReader.CustomerControl.Button
+{
+    public partial class ButtonDeleteRow : SimpleButton
+    {
+        private AutoDataGridControl.AutoDataGridControl grid;
+
+        public AutoDataGridControl.AutoDataGridControl Grid
+        {
+            get
+            {
+                return grid;
+            }
+
+            set
+            {
+                grid = value;
+            }
+        }
+
+
+        public ButtonDeleteRow()
+        {
+            InitializeComponent();
+        }
+
+        private void ButtonDeleteRow_Click(object sender, EventArgs e)
+        {
+            if (grid != null)
+            {
+                GridView view = grid.MainView as GridView;
+                List<int> DeleteID = new List<int>();
+                for (int i = 0; i < view.RowCount; i++)
+                {
+                    if (view.GetRowCellValue(i, SystemInf.CheckedColumnName).ToString() != "0")
+                        DeleteID.Add(int.Parse(view.GetRowCellValue(i, grid.ID.ToUpper()).ToString()));
+                }
+                if (DeleteID.Count > 0)
+                {
+                    DialogResult result = XtraMessageBox.Show("确认删除", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+                    if (result.ToString() == "Yes")
+                    {
+                        SystemInf.dh.DeleteDataByID(grid.TableName, grid.ID, DeleteID.ToArray());
+                        grid.RefreshData();
+                    }
+                }
+                else XtraMessageBox.Show("请选择要删除的数据", "提示");
+            }
+        }
+    }
+}

+ 123 - 0
PLCDataReader/CustomerControl/Button/ButtonDeleteRow.resx

@@ -0,0 +1,123 @@
+<?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>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>

+ 42 - 0
PLCDataReader/CustomerControl/Button/ButtonSaveGrid.Designer.cs

@@ -0,0 +1,42 @@
+namespace UAS_PLCDataReader.CustomerControl.Button
+{
+    partial class ButtonSaveGrid
+    {
+        /// <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 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.SuspendLayout();
+            // 
+            // ButtonSaveGrid
+            // 
+            this.Click += new System.EventHandler(this.ButtonSaveGrid_Click);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+    }
+}

+ 93 - 0
PLCDataReader/CustomerControl/Button/ButtonSaveGrid.cs

@@ -0,0 +1,93 @@
+using System;
+using System.Data;
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.Entity;
+
+namespace UAS_PLCDataReader.CustomerControl.Button
+{
+    public partial class ButtonSaveGrid : SimpleButton
+    {
+
+        private AutoDataGridControl.AutoDataGridControl grid;
+        /// <summary>
+        /// 设置是否优先处理用户自定义的Click事件
+        /// </summary>
+        private bool handlerOtherFirst = false;
+
+        public AutoDataGridControl.AutoDataGridControl Grid
+        {
+            get
+            {
+                return grid;
+            }
+
+            set
+            {
+                grid = value;
+            }
+        }
+
+        public bool HandlerOtherFirst
+        {
+            get
+            {
+                return handlerOtherFirst;
+            }
+
+            set
+            {
+                handlerOtherFirst = value;
+            }
+        }
+
+        public string[] LastSaveID;
+
+        public ButtonSaveGrid()
+        {
+            InitializeComponent();
+        }
+
+        /// <summary>
+        /// 内部调用,重新刷新数据
+        /// </summary>
+        private void DoSave()
+        {
+            DataTable dt = ((DataTable)grid.DataSource).GetChanges();
+            if (dt != null && dt.Rows.Count > 0)
+            {
+                SystemInf.dh.SaveDataTable(dt, grid.TableName, grid.ID, out LastSaveID, grid.InsertSQL);
+                grid.RefreshData();
+                XtraMessageBox.Show("保存成功", "提示");
+            }
+            else
+            {
+                XtraMessageBox.Show("没有修改过的数据", "提示");
+            }
+        }
+
+        /// <summary>
+        /// 外部调用,不重新刷新数据
+        /// </summary>
+        public void DoSaveAfterHandler()
+        {
+            DataTable dt = ((DataTable)grid.DataSource).GetChanges();
+            if (dt != null && dt.Rows.Count > 0)
+            {
+                SystemInf.dh.SaveDataTable(dt, grid.TableName, grid.ID, out LastSaveID, grid.InsertSQL);
+                XtraMessageBox.Show("保存成功", "提示");
+            }
+            else
+            {
+                XtraMessageBox.Show("没有修改过的数据", "提示");
+            }
+        }
+
+        private void ButtonSaveGrid_Click(object sender, EventArgs e)
+        {
+            if (!handlerOtherFirst)
+            {
+                DoSave();
+            }
+        }
+    }
+}

+ 123 - 0
PLCDataReader/CustomerControl/Button/ButtonSaveGrid.resx

@@ -0,0 +1,123 @@
+<?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>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>

+ 45 - 0
PLCDataReader/CustomerControl/GridViewWithSerialNum/GridViewWithSerialNum.Designer.cs

@@ -0,0 +1,45 @@
+namespace UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum
+{
+    partial class GridViewWithSerialNum
+    {
+        /// <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 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            ((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
+            // 
+            // GridViewWithSerialNum
+            // 
+            this.CustomDrawColumnHeader += new DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventHandler(this.GridViewWithSerialNum_CustomDrawColumnHeader);
+            this.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(this.GridViewWithSerialNum_CustomDrawRowIndicator);
+            this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.GridViewWithSerialNum_MouseDown);
+            this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.GridViewWithSerialNum_MouseUp);
+            ((System.ComponentModel.ISupportInitialize)(this)).EndInit();
+
+        }
+
+        #endregion
+    }
+}

+ 171 - 0
PLCDataReader/CustomerControl/GridViewWithSerialNum/GridViewWithSerialNum.cs

@@ -0,0 +1,171 @@
+using DevExpress.XtraEditors;
+using DevExpress.XtraGrid.Columns;
+using DevExpress.XtraGrid.Views.Grid;
+using DevExpress.XtraGrid.Views.Grid.ViewInfo;
+using System.Drawing;
+using System.Windows.Forms;
+using System.Windows.Forms.VisualStyles;
+using UAS_PLCDataReader.Entity;
+
+namespace UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum
+{
+    public partial class GridViewWithSerialNum : GridView
+    {
+
+        private Rectangle checkBoxColumnHeaderRect = Rectangle.Empty;
+
+        private GridColumn checkBoxColumn = null;
+
+        public GridViewWithSerialNum()
+        {
+            InitializeComponent();
+            IndicatorWidth = 30;
+        }
+
+        /// <summary>
+        /// 绘制行号
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void GridViewWithSerialNum_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
+        {
+            if (e.Info.IsRowIndicator && e.RowHandle >= 0)
+            {
+                e.Info.DisplayText = (e.RowHandle + 1).ToString();
+            }
+        }
+
+        /// <summary>
+        /// 绘制指定的列头的CheckBox
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void GridViewWithSerialNum_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
+        {
+            if (e.Column != null && e.Column.FieldName == SystemInf.CheckedColumnName)
+            {
+                checkBoxColumnHeaderRect = e.Bounds;
+                checkBoxColumn = e.Column;
+                e.Column.Caption = " ";
+                //须把列头标题设置为空
+                e.Painter.DrawObject(e.Info);
+                //在列头中心显示复选框
+                int x = e.Bounds.X + (int)((e.Bounds.Width - CheckBoxRenderer.GetGlyphSize(e.Graphics, CheckBoxState.UncheckedNormal).Width) * 0.5);
+                int y = e.Bounds.Y + (int)((e.Bounds.Height - CheckBoxRenderer.GetGlyphSize(e.Graphics, CheckBoxState.UncheckedNormal).Height) * 0.5);
+                Point location = new Point(x, y);
+                CheckBoxState checkBoxState;
+                if (e.Column.Tag != null && e.Column.Tag.ToString() == "1")
+                    checkBoxState = CheckBoxState.CheckedPressed;
+                else
+                    checkBoxState = CheckBoxState.UncheckedNormal;
+                CheckBoxRenderer.DrawCheckBox(e.Graphics, location, checkBoxState);
+                e.Handled = true;
+            }
+        }
+
+        /// <summary>
+        /// 执行全部勾选或者全部不勾选
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void GridViewWithSerialNum_MouseDown(object sender, MouseEventArgs e)
+        {
+            SyncCheckStatus(this, SystemInf.CheckedColumnName, e);
+        }
+
+        /// <summary>
+        /// 绘制列头的CheckBox
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void GridViewWithSerialNum_MouseUp(object sender, MouseEventArgs e)
+        {
+            if (checkBoxColumnHeaderRect != Rectangle.Empty)
+            {
+                if (e.X > checkBoxColumnHeaderRect.X && e.X < (checkBoxColumnHeaderRect.X + checkBoxColumnHeaderRect.Width) && e.Y > checkBoxColumnHeaderRect.Y && e.Y < (checkBoxColumnHeaderRect.Y + checkBoxColumnHeaderRect.Height))
+                {
+                    if (checkBoxColumn.Tag != null && checkBoxColumn.Tag.ToString() == "1" && CheckRowCount == RowCount)
+                        checkBoxColumn.Tag = "0";
+                    //在这写未全选逻辑
+                    else
+                        checkBoxColumn.Tag = "1";
+                    //在这写全选逻辑
+                    //InvalidateColumnHeader(checkBoxColumn);
+                }
+            }
+        }
+        /// <summary>
+        /// GridViewWithSerialNum_MouseUp事件最后执行,提前记录勾选的行号,防止后面统计错误
+        /// </summary>
+        static int CheckRowCount;
+        public static void SyncCheckStatus(GridView view, string fieldeName, MouseEventArgs e)
+        {
+            if (e.Button == MouseButtons.Left)
+            {
+                view.ClearSorting();
+                view.PostEditor();
+                GridHitInfo _info;
+                Point _pt = view.GridControl.PointToClient(Control.MousePosition);
+                _info = view.CalcHitInfo(_pt);
+                if (_info.InColumn && _info.Column.FieldName.Equals(fieldeName))
+                {
+                    CheckRowCount = getCheckedCount(view, fieldeName);
+                    if (CheckRowCount == view.DataRowCount)
+                        UnChekAll(view, fieldeName);
+                    else
+                        CheckAll(view, fieldeName);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 通过勾选的行数和总行数来判断下一次点击是否全部勾选
+        /// </summary>
+        /// <param name="view"></param>
+        /// <param name="filedName"></param>
+        /// <returns></returns>
+        private static int getCheckedCount(GridView view, string filedName)
+        {
+            int count = 0;
+            for (int i = 0; i < view.DataRowCount; i++)
+            {
+                object _cellValue = view.GetRowCellValue(i, view.Columns[filedName]);
+                if (_cellValue == null) continue;
+                if (string.IsNullOrEmpty(_cellValue.ToString().Trim())) continue;
+                bool _checkStatus = false;
+                if (bool.TryParse(_cellValue.ToString() == "0" ? "false" : "true", out _checkStatus))
+                {
+                    if (_checkStatus)
+                        count++;
+                }
+            }
+            return count;
+        }
+
+        /// <summary>
+        /// 设置全选
+        /// </summary>
+        /// <param name="view"></param>
+        /// <param name="fieldName"></param>
+        private static void CheckAll(GridView view, string fieldName)
+        {
+            for (int i = 0; i < view.DataRowCount; i++)
+            {
+                view.SetRowCellValue(i, fieldName, true);
+            }
+        }
+
+        /// <summary>
+        /// 设置全部不选 
+        /// </summary>
+        /// <param name="view"></param>
+        /// <param name="fieldName"></param>
+        private static void UnChekAll(GridView view, string fieldName)
+        {
+            for (int i = 0; i < view.DataRowCount; i++)
+            {
+                view.SetRowCellValue(i, fieldName, false);
+            }
+        }
+    }
+}

+ 123 - 0
PLCDataReader/CustomerControl/GridViewWithSerialNum/GridViewWithSerialNum.resx

@@ -0,0 +1,123 @@
+<?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>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>

+ 210 - 0
PLCDataReader/CustomerControl/PagingControl/PageControl.Designer.cs

@@ -0,0 +1,210 @@
+namespace UAS_PLCDataReader.CustomerControl.PagingControl
+{
+    partial class PageControl
+    {
+        /// <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 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PageControl));
+            this.GoFirstPage = new DevExpress.XtraEditors.SimpleButton();
+            this.GoFormerPage = new DevExpress.XtraEditors.SimpleButton();
+            this.CurrentPage = new System.Windows.Forms.TextBox();
+            this.GoNextPage = new DevExpress.XtraEditors.SimpleButton();
+            this.GoLastPage = new DevExpress.XtraEditors.SimpleButton();
+            this.PageSize_label = new DevExpress.XtraEditors.LabelControl();
+            this.ExportAllPage = new DevExpress.XtraEditors.SimpleButton();
+            this.ExportCurrentPage = new DevExpress.XtraEditors.SimpleButton();
+            this.PageSize = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.PageCount_label = new DevExpress.XtraEditors.LabelControl();
+            this.PageCount = new DevExpress.XtraEditors.TextEdit();
+            ((System.ComponentModel.ISupportInitialize)(this.PageSize.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PageCount.Properties)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // GoFirstPage
+            // 
+            this.GoFirstPage.Dock = System.Windows.Forms.DockStyle.Left;
+            this.GoFirstPage.Image = ((System.Drawing.Image)(resources.GetObject("GoFirstPage.Image")));
+            this.GoFirstPage.ImageLocation = DevExpress.XtraEditors.ImageLocation.MiddleRight;
+            this.GoFirstPage.Location = new System.Drawing.Point(0, 0);
+            this.GoFirstPage.Name = "GoFirstPage";
+            this.GoFirstPage.Size = new System.Drawing.Size(38, 29);
+            this.GoFirstPage.TabIndex = 1;
+            this.GoFirstPage.Click += new System.EventHandler(this.GoPage_Click);
+            // 
+            // GoFormerPage
+            // 
+            this.GoFormerPage.Dock = System.Windows.Forms.DockStyle.Left;
+            this.GoFormerPage.Image = ((System.Drawing.Image)(resources.GetObject("GoFormerPage.Image")));
+            this.GoFormerPage.ImageLocation = DevExpress.XtraEditors.ImageLocation.MiddleRight;
+            this.GoFormerPage.Location = new System.Drawing.Point(38, 0);
+            this.GoFormerPage.Name = "GoFormerPage";
+            this.GoFormerPage.Size = new System.Drawing.Size(38, 29);
+            this.GoFormerPage.TabIndex = 2;
+            this.GoFormerPage.Click += new System.EventHandler(this.GoPage_Click);
+            // 
+            // CurrentPage
+            // 
+            this.CurrentPage.Dock = System.Windows.Forms.DockStyle.Left;
+            this.CurrentPage.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.CurrentPage.Location = new System.Drawing.Point(76, 0);
+            this.CurrentPage.Multiline = true;
+            this.CurrentPage.Name = "CurrentPage";
+            this.CurrentPage.Size = new System.Drawing.Size(42, 29);
+            this.CurrentPage.TabIndex = 3;
+            this.CurrentPage.Text = "1";
+            this.CurrentPage.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            // 
+            // GoNextPage
+            // 
+            this.GoNextPage.Dock = System.Windows.Forms.DockStyle.Left;
+            this.GoNextPage.Image = ((System.Drawing.Image)(resources.GetObject("GoNextPage.Image")));
+            this.GoNextPage.ImageLocation = DevExpress.XtraEditors.ImageLocation.MiddleRight;
+            this.GoNextPage.Location = new System.Drawing.Point(118, 0);
+            this.GoNextPage.Name = "GoNextPage";
+            this.GoNextPage.Size = new System.Drawing.Size(38, 29);
+            this.GoNextPage.TabIndex = 4;
+            this.GoNextPage.Click += new System.EventHandler(this.GoPage_Click);
+            // 
+            // GoLastPage
+            // 
+            this.GoLastPage.Dock = System.Windows.Forms.DockStyle.Left;
+            this.GoLastPage.Image = ((System.Drawing.Image)(resources.GetObject("GoLastPage.Image")));
+            this.GoLastPage.ImageLocation = DevExpress.XtraEditors.ImageLocation.MiddleRight;
+            this.GoLastPage.Location = new System.Drawing.Point(156, 0);
+            this.GoLastPage.Name = "GoLastPage";
+            this.GoLastPage.Size = new System.Drawing.Size(38, 29);
+            this.GoLastPage.TabIndex = 5;
+            this.GoLastPage.Click += new System.EventHandler(this.GoPage_Click);
+            // 
+            // PageSize_label
+            // 
+            this.PageSize_label.Appearance.Font = new System.Drawing.Font("微软雅黑", 10F);
+            this.PageSize_label.Location = new System.Drawing.Point(200, 4);
+            this.PageSize_label.Name = "PageSize_label";
+            this.PageSize_label.Size = new System.Drawing.Size(56, 20);
+            this.PageSize_label.TabIndex = 6;
+            this.PageSize_label.Text = "分页大小";
+            // 
+            // ExportAllPage
+            // 
+            this.ExportAllPage.Dock = System.Windows.Forms.DockStyle.Right;
+            this.ExportAllPage.Location = new System.Drawing.Point(808, 0);
+            this.ExportAllPage.Name = "ExportAllPage";
+            this.ExportAllPage.Size = new System.Drawing.Size(75, 29);
+            this.ExportAllPage.TabIndex = 7;
+            this.ExportAllPage.Text = "导出全部页";
+            this.ExportAllPage.Visible = false;
+            // 
+            // ExportCurrentPage
+            // 
+            this.ExportCurrentPage.Dock = System.Windows.Forms.DockStyle.Right;
+            this.ExportCurrentPage.Location = new System.Drawing.Point(733, 0);
+            this.ExportCurrentPage.Name = "ExportCurrentPage";
+            this.ExportCurrentPage.Size = new System.Drawing.Size(75, 29);
+            this.ExportCurrentPage.TabIndex = 8;
+            this.ExportCurrentPage.Text = "导出当前页";
+            this.ExportCurrentPage.Visible = false;
+            // 
+            // PageSize
+            // 
+            this.PageSize.EditValue = "20";
+            this.PageSize.Location = new System.Drawing.Point(264, 0);
+            this.PageSize.Name = "PageSize";
+            this.PageSize.Properties.Appearance.Font = new System.Drawing.Font("Tahoma", 13F);
+            this.PageSize.Properties.Appearance.Options.UseFont = true;
+            this.PageSize.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.PageSize.Properties.Items.AddRange(new object[] {
+            "20",
+            "30",
+            "40",
+            "50"});
+            this.PageSize.Size = new System.Drawing.Size(59, 28);
+            this.PageSize.TabIndex = 9;
+            this.PageSize.SelectedIndexChanged += new System.EventHandler(this.PageSize_SelectedIndexChanged);
+            // 
+            // PageCount_label
+            // 
+            this.PageCount_label.Appearance.Font = new System.Drawing.Font("微软雅黑", 10F);
+            this.PageCount_label.Location = new System.Drawing.Point(329, 4);
+            this.PageCount_label.Name = "PageCount_label";
+            this.PageCount_label.Size = new System.Drawing.Size(42, 20);
+            this.PageCount_label.TabIndex = 10;
+            this.PageCount_label.Text = "总页数";
+            // 
+            // PageCount
+            // 
+            this.PageCount.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+            this.PageCount.Enabled = false;
+            this.PageCount.Location = new System.Drawing.Point(377, 1);
+            this.PageCount.Name = "PageCount";
+            this.PageCount.Properties.Appearance.Font = new System.Drawing.Font("Tahoma", 12F);
+            this.PageCount.Properties.Appearance.Options.UseFont = true;
+            this.PageCount.Size = new System.Drawing.Size(42, 26);
+            this.PageCount.TabIndex = 12;
+            // 
+            // PageControl
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.PageCount);
+            this.Controls.Add(this.PageCount_label);
+            this.Controls.Add(this.PageSize);
+            this.Controls.Add(this.ExportCurrentPage);
+            this.Controls.Add(this.ExportAllPage);
+            this.Controls.Add(this.PageSize_label);
+            this.Controls.Add(this.GoLastPage);
+            this.Controls.Add(this.GoNextPage);
+            this.Controls.Add(this.CurrentPage);
+            this.Controls.Add(this.GoFormerPage);
+            this.Controls.Add(this.GoFirstPage);
+            this.Name = "PageControl";
+            this.Size = new System.Drawing.Size(883, 29);
+            this.Load += new System.EventHandler(this.PageControl_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.PageSize.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PageCount.Properties)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.SimpleButton GoFirstPage;
+        private DevExpress.XtraEditors.SimpleButton GoFormerPage;
+        private System.Windows.Forms.TextBox CurrentPage;
+        private DevExpress.XtraEditors.SimpleButton GoNextPage;
+        private DevExpress.XtraEditors.SimpleButton GoLastPage;
+        private DevExpress.XtraEditors.LabelControl PageSize_label;
+        private DevExpress.XtraEditors.SimpleButton ExportAllPage;
+        private DevExpress.XtraEditors.SimpleButton ExportCurrentPage;
+        private DevExpress.XtraEditors.ComboBoxEdit PageSize;
+        private DevExpress.XtraEditors.LabelControl PageCount_label;
+        private DevExpress.XtraEditors.TextEdit PageCount;
+    }
+}

+ 93 - 0
PLCDataReader/CustomerControl/PagingControl/PageControl.cs

@@ -0,0 +1,93 @@
+using System;
+using System.Windows.Forms;
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.DataOperate;
+using UAS_PLCDataReader.Entity;
+using System.Data;
+
+namespace UAS_PLCDataReader.CustomerControl.PagingControl
+{
+    public partial class PageControl : UserControl
+    {
+
+        DataHelper dh = SystemInf.dh;
+
+        private AutoDataGridControl.AutoDataGridControl gridcontrol;
+
+        public AutoDataGridControl.AutoDataGridControl Gridcontrol
+        {
+            get
+            {
+                return gridcontrol;
+            }
+
+            set
+            {
+                gridcontrol = value;
+            }
+        }
+
+        public PageControl()
+        {
+            InitializeComponent();
+        }
+
+        private void PageControl_Load(object sender, EventArgs e)
+        {
+            if (gridcontrol != null)
+                gridcontrol.VisibleChanged += Gridcontrol_VisibleChanged;
+        }
+
+        private void Gridcontrol_VisibleChanged(object sender, EventArgs e)
+        {
+            PageCount.Text = (gridcontrol.RowCount / int.Parse(PageSize.Text) + 1).ToString();
+        }
+
+        private void GoPage_Click(object sender, EventArgs e)
+        {
+            SimpleButton button = sender as SimpleButton;
+            string SQL = gridcontrol.GetDataSQL;
+            int pagesize = int.Parse(PageSize.Text);
+            int currentpage = int.Parse(CurrentPage.Text);
+            int rowcount = gridcontrol.RowCount;
+            switch (button.Name)
+            {
+                case "GoFirstPage":
+                    CurrentPage.Text = "1";
+                    currentpage = 1;
+                    break;
+                case "GoFormerPage":
+                    if (currentpage == 1)
+                    {
+                        XtraMessageBox.Show("当前已经是第一页", "提示");
+                        return;
+                    }
+                    CurrentPage.Text = (currentpage - 1).ToString();
+                    currentpage = currentpage - 1;
+                    break;
+                case "GoNextPage":
+                    if (currentpage.ToString() == PageCount.Text)
+                    {
+                        XtraMessageBox.Show("当前已经是最后一页", "提示");
+                        return;
+                    }
+                    CurrentPage.Text = (currentpage + 1).ToString();
+                    currentpage = currentpage + 1;
+                    break;
+                case "GoLastPage":
+                    CurrentPage.Text = ((rowcount / pagesize) + 1).ToString();
+                    currentpage = int.Parse(PageCount.Text);
+                    break;
+                default:
+                    break;
+            }
+            gridcontrol.DataSource = dh.ExecuteSql("select * from (select RowNum RN, A.* from(" + SQL + ")A) where RN<=" + pagesize * currentpage + "and RN >" + pagesize * (currentpage - 1), "select");
+        }
+
+        private void PageSize_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            DataTable dt = (DataTable)dh.ExecuteSql(gridcontrol.GetDataSQL,"select");
+            PageCount.Text = (dt.Rows.Count / int.Parse(PageSize.Text)).ToString();
+        }
+    }
+}

+ 257 - 0
PLCDataReader/CustomerControl/PagingControl/PageControl.resx

@@ -0,0 +1,257 @@
+<?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>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="GoFirstPage.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        RK5CYII=
+</value>
+  </data>
+  <data name="GoFormerPage.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACd0RVh0VGl0
+        bGUARmlyc3Q7QXJyb3c7QmFjaztTa2lwO1ByZXY7UmV3aW5kAY6Q1AAABflJREFUWEfFlQtQVGUUx6+l
+        ICoJQpMlTU3D9LB0qJSZxrHxkTk+Uks0lREx06xB84WYwMIuBCqGoiLyVFlbQN4QAkuwCIsILuyKovGS
+        xy6wIO9HIpqncy57F9bZgZ2pwW/mN8v9vnvP/38e3MsAwAtF7+Z4ondzPNG7OZ7o3SRoHU+6yxxLvMPi
+        i/gklDE+8UhcGeMdW8Z4XVWwCGLkDD9aznhGyRkPhPd7KcO7UkIhJjwHu3R0RgqOtUjUO/b2kGi0QivK
+        Ew2JugtLGFehjG4lsZeQicgkxAh5GWFNGGpA65hbfI2oRxRmKKIsURQzdYssYY5GaoUJEjN29BR9uv+C
+        NOtAcCEJGCNkakwDnHsOrZGGJ8CiRFSaX5bBZ3TMCRut2MG3cjqTE+4VLX+aXdUGewILSGCq5nxUA6y4
+        IEou8Y5RAD+qVILX2tKRECdKBgjNGRmdNGfhuum7/TOPHg672ZMkb4L7PYMgaxuA3QF5dKMpYpCBiYIo
+        BagHn8GhkCI6oB4OG2DRFUZMtvsk2e8NlNZeyq2B8q7HUNI+AOL6PrihfgQ7/CT0wCsIzcSYBow8RXIo
+        bB2Efed1e9cwXGq6pmDGG5xD5+/yl+SdSimHUnU/3O15Ateb/gZxQx9cq+2F/KZ+2OabTXGma54Z1QAF
+        NuYJS0GqHoA9Z9neTdbs0yJxdsCWOrhb7TghDneLlP2TV9MBFb1P0fQA5DQOi6dUd4NE2QebBWKKY4YY
+        ZGCy62UZ5GKgH/3z6cAEIVHC6D3bFWYOXqmue84V9MTfUkFV3xMoaRuEXMw6W4XiWHZOPKGiE7Lwer17
+        OsUxRwwyYHIkohj+bOiHnX65dEDDQ20w2eQea/+9n6Q2WFwJ5Z0DoOhA4cZHkIPCWXh/Zl0fpD3ogeSq
+        boj7qxNiyjsgtaIL1h5JpTgzEJqXUQ1QllOdcfjSH/TCdt8cOjCzOxi2YKuPuMA3WgHF9d0o/Bgkjf2s
+        qBjJYIV7IbW6BxIruyDufieI7rRD0E01RMpaYOWhZIpjgbADPZaBafvP34D4e12w1YsdHgtHHCJxmRpk
+        TX0QX94JVxTtmF0nJGJ2SZXdbMYJ+Hc0ZizEswsofOq6Co5nN0B4kRqW/ZxAcSwRgwyYOp2RglDeBps8
+        2eGxWOUUuuEb19SKw+EyuFraAgl3O+DirVYIK26F0KIWCEaCbjTDOWkznM5rhN8kQ+K/iushGPcX/RRL
+        cV5F6JU8qgEakuk/+OdBhKwV7Nwy6IB6N9XU8i3zxTtD9692Tn7oLpTDVcVDEJa2QmBBM5yVNkEACvvn
+        qsBPooRjKO6N4vz0OgiUNsLCndEU5zXEIANm3x2XQMjNFvj6yDXOAD1I5ZtiNWf5mwscwwJWHkwc4EXd
+        BmFJKwQVNoNfjhKzVoJPVgN4ZQ6J89IewOlcJXy2XURxZmrijGnA3ME7m81sjfMfdKAdHoRaRP8Rpm/b
+        bvlo/pbgmNWHUkAQdw9CsNQn0AA/ow48rtWCW1oNHE2tgZM5DWDrcIXivI6MaYCEZmzyELMlXXkgRcfA
+        xWI1/rBGyCi9oMysP9/75ccbgwrWuKSCV3IFtkEJHmm18EtyDbgkVcOxrHqYZx9Jcd5AyPyYFZhh55oO
+        J3GQlu9N0jEQWdLCRAyboHcG7dNXztJ6kcu2ueuDaux4GSBIqcQ21IJLYhX4iOvgk82XKM4sZFQDXIlN
+        V+2Lk3zhlACLd0XR15A+IrQ/QVSKBoqamdDCJrxk79dpyyQT81nWS3juNnYh7fb4DuGnVcOvmXVg820E
+        CVhp7hu1ApQV9YlEafjolx5ivwWXb6mZS1iBkMJmJjBfxQRcV9E2Z0TbFtOZc9+3XioInrc54rHjqXyw
+        2RhOAga1gAKRGAXjoGvaZz5cF8wyey1xgZm9JmiIr4LomHuW2jIFsbR4Z4ntu8t84202hJGAQS8ibnFZ
+        scLc+gCFWFYT558jkAUXZ4QqOQ2hShL0UWOT0Wvgef7j4sxzFSG0ldTRGXkxkv9pcUY42KWjM/LiRaB3
+        czzRuzme6N0cP4D5F2K77VuIJmMKAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="GoNextPage.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+</value>
+  </data>
+  <data name="GoLastPage.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        CCaHDmD/AczaVSkRWPJ1AAAAAElFTkSuQmCC
+</value>
+  </data>
+</root>

+ 84 - 0
PLCDataReader/CustomerControl/PictureEditWithText/PictureEditWithText.Designer.cs

@@ -0,0 +1,84 @@
+namespace UAS_PLCDataReader.CustomerControl.PictureEditWithText
+{
+    partial class PictureEditWithText
+    {
+        /// <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 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.UserPictureEdit = new DevExpress.XtraEditors.PictureEdit();
+            this.UserLabelControl = new DevExpress.XtraEditors.LabelControl();
+            this.UserLabelControl1 = new DevExpress.XtraEditors.LabelControl();
+            ((System.ComponentModel.ISupportInitialize)(this.UserPictureEdit.Properties)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // UserPictureEdit
+            // 
+            this.UserPictureEdit.Location = new System.Drawing.Point(1, 1);
+            this.UserPictureEdit.Name = "UserPictureEdit";
+            this.UserPictureEdit.Properties.ShowCameraMenuItem = DevExpress.XtraEditors.Controls.CameraMenuItemVisibility.Auto;
+            this.UserPictureEdit.Size = new System.Drawing.Size(100, 96);
+            this.UserPictureEdit.TabIndex = 0;
+            // 
+            // UserLabelControl
+            // 
+            this.UserLabelControl.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.Vertical;
+            this.UserLabelControl.Location = new System.Drawing.Point(11, 103);
+            this.UserLabelControl.MaximumSize = new System.Drawing.Size(110, 0);
+            this.UserLabelControl.Name = "UserLabelControl";
+            this.UserLabelControl.Size = new System.Drawing.Size(80, 0);
+            this.UserLabelControl.TabIndex = 1;
+            // 
+            // UserLabelControl1
+            // 
+            this.UserLabelControl1.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.Vertical;
+            this.UserLabelControl1.Location = new System.Drawing.Point(11, 124);
+            this.UserLabelControl1.MaximumSize = new System.Drawing.Size(110, 0);
+            this.UserLabelControl1.Name = "UserLabelControl1";
+            this.UserLabelControl1.Size = new System.Drawing.Size(80, 0);
+            this.UserLabelControl1.TabIndex = 2;
+            // 
+            // PictureEditWithText
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.UserLabelControl1);
+            this.Controls.Add(this.UserLabelControl);
+            this.Controls.Add(this.UserPictureEdit);
+            this.Name = "PictureEditWithText";
+            this.Size = new System.Drawing.Size(102, 146);
+            this.Load += new System.EventHandler(this.PictureEditWithText_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.UserPictureEdit.Properties)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.PictureEdit UserPictureEdit;
+        private DevExpress.XtraEditors.LabelControl UserLabelControl;
+        private DevExpress.XtraEditors.LabelControl UserLabelControl1;
+    }
+}

+ 66 - 0
PLCDataReader/CustomerControl/PictureEditWithText/PictureEditWithText.cs

@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using DevExpress.XtraEditors;
+
+namespace UAS_PLCDataReader.CustomerControl.PictureEditWithText
+{
+    public partial class PictureEditWithText : XtraUserControl
+    {
+
+        public PictureEdit Picedit
+        {
+            get
+            {
+                return UserPictureEdit;
+            }
+
+            set
+            {
+                UserPictureEdit = value;
+            }
+        }
+
+        public override string Text
+        {
+            get
+            {
+                return UserLabelControl.Text;
+            }
+
+            set
+            {
+                UserLabelControl.Text = value;
+            }
+        }
+
+        public string DeviceName
+        {
+            get
+            {
+                return UserLabelControl1.Text;
+            }
+
+            set
+            {
+                UserLabelControl1.Text = value;
+            }
+        }
+
+        public PictureEditWithText()
+        {
+            InitializeComponent();
+        }
+
+        private void PictureEditWithText_Load(object sender, EventArgs e)
+        {
+            UserLabelControl.Location = new Point((Width - UserLabelControl.Width) / 2, UserLabelControl.Location.Y);
+            UserLabelControl1.Location = new Point((Width - UserLabelControl.Width) / 2, UserLabelControl1.Location.Y);
+        }
+    }
+}

+ 120 - 0
PLCDataReader/CustomerControl/PictureEditWithText/PictureEditWithText.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>

+ 36 - 0
PLCDataReader/CustomerControl/ValueLabel/ValueLabel.Designer.cs

@@ -0,0 +1,36 @@
+namespace UAS_PLCDataReader.CustomerControl.ValueLabel
+{
+    partial class ValueLabel
+    {
+        /// <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 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+        }
+
+        #endregion
+    }
+}

+ 19 - 0
PLCDataReader/CustomerControl/ValueLabel/ValueLabel.cs

@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace UAS_PLCDataReader.CustomerControl.ValueLabel
+{
+    public partial class ValueLabel : DevExpress.XtraEditors.LabelControl
+    {
+        public ValueLabel()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 26 - 0
PLCDataReader/DataOperate/ComboBoxData.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UAS_PLCDataReader.DataOperate
+{
+    class ComboBoxData
+    {
+        /// <summary>
+        /// 值
+        /// </summary>
+        public string Text { set; get; }
+
+        /// <summary>
+        /// 键
+        /// </summary>
+        public string Value { set; get; }
+
+        /// <returns>返回ComboBox的值</returns>
+        public override string ToString()
+        {
+            return Text;
+        }
+    }
+}

+ 1111 - 0
PLCDataReader/DataOperate/DataHelper.cs

@@ -0,0 +1,1111 @@
+using Oracle.ManagedDataAccess.Client;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Text;
+using UAS_PLCDataReader.PublicMethod;
+
+namespace UAS_PLCDataReader.DataOperate
+{
+    class DataHelper
+    {
+        //系统默认的的连接字符串
+        private string ConnectionStrings = Properties.Settings.Default.Properties["MES"].DefaultValue.ToString();
+        //用户选择的数据库的连接字符串
+        public static string DBConnectionString = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=UAS_MES_PROD;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=218.17.158.219)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
+        public static OracleConnection connection = null;
+        OracleCommand command = null;
+        /// <summary>
+        /// 执行构造函数的时候打开数据库的链接
+        /// </summary>
+        public DataHelper()
+        {
+            try
+            {
+                //如果选择的是默认数据则直接用配置文件的信息连接,否则选择数据库的账套信息
+                if (DBConnectionString == null || DBConnectionString == ConnectionStrings)
+                    connection = new OracleConnection(ConnectionStrings);
+                else
+                    connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+            }
+            catch (Exception e) { LogManager.DoLog(e.StackTrace + e.Message); }
+        }
+
+        /// <summary>
+        /// 根据表名获取该表字段数据类型
+        /// </summary>
+        public DataTable GetColumnDataType(string TableName)
+        {
+            DataTable dt = new DataTable();
+            command = new OracleCommand("select Column_Name,Data_Type from cols where TABLE_name=upper('" + TableName + "')", connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            ad.Fill(dt);
+            ad.Dispose();
+            command.Dispose();
+            return dt;
+        }
+
+        /// <summary>
+        /// 获取第一行第一列的信息
+        /// </summary>
+        public object getFieldDataByCondition(string TableName, string Field, string Condition)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select " + Field + " from " + TableName + " where " + Condition;
+            Console.WriteLine(sql);
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter();
+            ad.SelectCommand = command;
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception e)
+            {
+                LogManager.DoLog(e.StackTrace + e.Message);
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            if (dt.Rows.Count > 0)
+            {
+                return dt.Rows[0][0];
+            }
+            else
+            {
+                return "";
+            }
+        }
+
+        /// <summary>
+        /// 执行打印的SQL
+        /// </summary>
+        /// <param name="SQL">SQL语句</param>
+        /// <param name="Parameters">动态添加的参数,主要根据条码枪扫描获取</param>
+        /// <returns></returns>
+        public object ExecutePrintSQL(string SQL, params string[] Parameters)
+        {
+            //按照?拆分数据,然后以:Param替换问号,同时添加参数
+            string[] Param = SQL.Split('?');
+            int ParamNum = Param.Length - 1;
+            //条码打印必然存在需要维护的参数
+            if (ParamNum > 0)
+            {
+                StringBuilder sb = new StringBuilder();
+                for (int i = 0; i < ParamNum; i++)
+                {
+                    sb.Append(Param[i] + ":Param" + i);
+                }
+                command = new OracleCommand(sb.ToString(), connection);
+
+                for (int i = 0; i < ParamNum; i++)
+                {
+                    command.Parameters.Add("Param" + i, OracleDbType.Varchar2, Parameters[i], ParameterDirection.Input);
+                }
+                OracleDataAdapter ad = new OracleDataAdapter(command);
+                DataTable dt = new DataTable();
+                ad.Fill(dt);
+                ad.Dispose();
+                command.Dispose();
+                return dt;
+            }
+            return "参数错误,请检查SQL语句";
+        }
+
+        /// <summary>
+        /// 获取指定表的记录的条数 ,带条件
+        /// </summary>
+        /// <returns></returns>
+        public int getRowCount(string TableName, string Condition)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select count(1) from " + TableName + " where " + Condition;
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            ad.Fill(dt);
+            ad.Dispose();
+            command.Dispose();
+            return int.Parse(dt.Rows[0][0].ToString());
+        }
+
+        /// <summary>
+        /// 获取指定表的记录的条数 ,不带条件
+        /// </summary>
+        /// <param name="TableName"></param>
+        /// <returns></returns>
+        public int getRowCount(string TableName)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select count(1) from " + TableName;
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+
+            ad.Fill(dt);
+            ad.Dispose();
+            command.Dispose();
+            return int.Parse(dt.Rows[0][0].ToString());
+        }
+
+        /// <summary>
+        /// 通过表名和获取单行的记录
+        /// </summary>
+        public DataTable getFieldsDataByCondition(string TableName, string[] Fields, string Condition)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select ";
+            sql += AddField(Fields);
+            sql += " from " + TableName + " where " + Condition + " and rownum=1";
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return dt;
+        }
+
+        /// <summary>
+        /// 将DataTable导入到指定的表中
+        /// </summary>
+        /// <param name="DataTable"></param>
+        /// <param name="TableName"></param>
+        public void InsertDataTable(DataTable DataTable, string TableName)
+        {
+            for (int i = 0; i < DataTable.Rows.Count; i++)
+            {
+                for (int j = 0; j < DataTable.Columns.Count; j++)
+                {
+
+                }
+            }
+        }
+
+        /// <summary>
+        /// 按分页获取数据
+        /// </summary>
+        /// <param name="TableName">表名</param>
+        /// <param name="Fields">查询字段</param>
+        /// <param name="CurrentPage">当前页面</param>
+        /// <param name="PageSize">页面展示条数</param>
+        /// <param name="Caller"></param>
+        /// <returns></returns>
+        // SELECT * FROM (SELECT   A.*  FROM (SELECT* FROM datalist) A WHERE ROWNUM <= 50) WHERE ROWNUM >= 21
+        public DataTable getFieldsDatasByPageing(string TableName, string Fields, int CurrentPage, int PageSize, string Caller, params string[] condition)
+        {
+            DataTable dt = new DataTable();
+            StringBuilder sql = new StringBuilder();
+            //先查询出配置出去的列
+            //获取查询的列
+            string[] caption = GetCaptionFromField(Fields);
+            //获取对应列的描述
+            string[] field = GetField(Fields);
+            sql.Append(" select * from (select RowNum RN, A.* from (select ");
+            sql.Append(AddField(caption));
+            if (condition.Length > 0)
+            {
+                if (condition[0] != null && condition[0].Trim() != "")
+                    sql.Append(" from " + TableName + " where " + condition[0] + " ) A where ROWNUM <=" + CurrentPage * PageSize + ") where RN>" + (CurrentPage - 1) * PageSize);
+                else
+                    sql.Append(" from " + TableName + ") A where ROWNUM <= " + CurrentPage * PageSize + ") where RN> " + (CurrentPage - 1) * PageSize);
+            }
+            command = new OracleCommand(sql.ToString(), connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            ad.Fill(dt);
+            ad.Dispose();
+            command.Dispose();
+            dt.Columns.RemoveAt(0);
+            foreach (DataColumn dc in dt.Columns)
+            {
+                dc.ColumnName = field[dt.Columns.IndexOf(dc)];
+                dc.Caption = caption[dt.Columns.IndexOf(dc)];
+            }
+            return dt;
+        }
+
+        /// <summary>
+        /// 通过表名,字段和条件获取DataTable类型的数据
+        /// </summary>
+        public DataTable getFieldsDatasByCondition(string TableName, string[] Fields, string Condition)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select ";
+            sql += AddField(Fields);
+            sql += " from " + TableName + " where " + Condition;
+
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return dt;
+        }
+
+        /// <summary>
+        /// 通过表名,字段获取DataTable类型的数据
+        /// </summary>
+        public DataTable getFieldsDatas(string TableName, string Fields)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select ";
+            sql += Fields;
+            sql += " from " + TableName;
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            ad.SelectCommand = command;
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return dt;
+        }
+
+        /// <summary>
+        /// 根据DataTable和指定的表名更新数据,如果需要保存新增的数据则需要传递一条Insert的SQL
+        /// </summary>
+        /// <param name="DataTable"></param>
+        /// <param name="TableName"></param>
+        /// <param name="Condition"></param>
+        public void UpDateTableByCondition(DataTable DataTable, string TableName, string PrimaryKey, params string[] sql)
+        {
+            if (DataTable == null)
+            {
+                return;
+            }
+            StringBuilder sb = new StringBuilder();
+            //预防插入的DataTable中存在不属于该表的列,在进行下一步操作之前全部剔除
+            DataTable data = (DataTable)ExecuteSql("select Column_Name,Data_Type from cols where TABLE_name=upper('" + TableName + "')", "select");
+            //将所有的字段拼接起来
+            for (int i = 0; i < data.Rows.Count; i++)
+            {
+                sb.Append("#" + data.Rows[i]["Column_Name"].ToString());
+            }
+            //移除掉所有不属于该表的列
+            for (int i = DataTable.Columns.Count - 1; i >= 0; i--)
+            {
+                if (!sb.ToString().Contains(DataTable.Columns[i].ColumnName.ToUpper()))
+                {
+                    DataTable.Columns.RemoveAt(i);
+                }
+            }
+            sb.Clear();
+            //计算有多少个是新加的行,根据主键为空来进行判断
+            int NewRowCount = 0;
+            for (int i = 0; i < DataTable.Rows.Count; i++)
+            {
+                if (DataTable.Rows[i][PrimaryKey] == null || DataTable.Rows[i][PrimaryKey].ToString() == "")
+                {
+                    NewRowCount = NewRowCount + 1;
+                }
+            }
+            if (sql.Length > 0)
+            {
+                if (NewRowCount > 0)
+                {
+                    //获取参数的个数
+                    int paramsNum = sql[0].Split(':').Length - 1;
+                    //解析参数的数据
+                    string[] param = GetParamFromSQL(sql[0]);
+                    //新建一个二维数组去
+                    string[][] param_array = new string[paramsNum][];
+                    //实例化每个一维数组
+                    for (int i = 0; i < paramsNum; i++)
+                    {
+                        param_array[i] = new string[NewRowCount];
+                    }
+                    //设置每列参数的索引
+                    int num = 0;
+                    //变量所有的行,如果有主键为空的则移除,不为空的进行参数的拼接
+                    for (int i = DataTable.Rows.Count - 1; i >= 0; i--)
+                    {
+                        if (DataTable.Rows[i][PrimaryKey] == null || DataTable.Rows[i][PrimaryKey].ToString() == "")
+                        {
+                            //当为新添加行的时候才去设置参数,设置过后索引+1
+                            for (int j = 0; j < paramsNum; j++)
+                            {
+                                param_array[j][num] = DataTable.Rows[i][param[j]].ToString();
+                            }
+                            DataTable.Rows.RemoveAt(i);
+                            num++;
+                        }
+                    }
+                    BatchInsertDataTable(sql[0], param, param_array);
+                }
+            }
+            //不是新增行的启用更新的方法
+            sb.Append("update " + TableName + " set ");
+            //拼接语句,特殊处理日期
+
+            foreach (DataColumn dc in DataTable.Columns)
+            {
+                if (!dc.DataType.ToString().Equals("System.DateTime"))
+                {
+                    sb.Append(dc.Caption + "=:" + dc.Caption + ",");
+                }
+                else
+                {
+                    sb.Append(dc.Caption + "=:" + dc.Caption + ",");
+                }
+            }
+            sb.Remove(sb.Length - 1, 1);
+            sb.Append(" where " + PrimaryKey + "=:" + PrimaryKey);
+            command = new OracleCommand(sb.ToString(), connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            // 参数的长度是DataTable的行数决定的
+            command.ArrayBindCount = DataTable.Rows.Count;
+            //默认全部是Varchar2类型的
+            OracleDbType ob = OracleDbType.Varchar2;
+            for (int i = 0; i < DataTable.Columns.Count; i++)
+            {
+                object[] param = new object[DataTable.Rows.Count];
+                for (int j = 0; j < DataTable.Rows.Count; j++)
+                {
+                    DateTime dt = DateTime.Now;
+                    if (DateTime.TryParse(DataTable.Rows[j][i].ToString(), out dt))
+                    {
+                        param[j] = dt;
+                        ob = OracleDbType.Date;
+                    }
+                    else
+                    {
+                        ob = OracleDbType.Varchar2;
+                        param[j] = DataTable.Rows[j][i];
+                    }
+                }
+                //添加批量更新的参数
+                command.Parameters.Add(new OracleParameter(DataTable.Columns[i].Caption, ob, param, ParameterDirection.Input));
+            }
+            ad.UpdateCommand = command;
+            ad.Update(DataTable);
+            ad.Dispose();
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 获取DbFind的数据的DataTable的结构
+        /// </summary>
+        /// <param name="field"></param>
+        /// <param name="caller"></param>
+        /// <returns></returns>
+        public DataTable GetDbFindDataTable(string field, string caller)
+        {
+            string sql = "select * from dbfindsetui where ds_caller='" + caller + "' and ds_whichui='" + field + "'";
+            DataTable dt = (DataTable)ExecuteSql(sql, "select");
+            if (dt.Rows.Count != 0)
+            {
+                //通过#号分割字段
+                string[] dbfield = dt.Rows[0]["ds_findtoui"].ToString().Split('#');
+                string[] cnfield = dt.Rows[0]["ds_dbcaption"].ToString().Split('#');
+                //获取查询要查询的Table
+                string dbtable = dt.Rows[0]["ds_tables"].ToString();
+                //拼接查询的字段
+                for (int i = 0; i < dbfield.Length; i++)
+                {
+                    dbfield[i] = dbfield[i].Split(',')[0];
+                }
+                //新建一个空的DataTable
+                DataTable dt1 = new DataTable();
+                //往空的DataTable添加结构,ColumnName是中文,Caption是实际的字段名称
+                for (int i = 0; i < cnfield.Length; i++)
+                {
+                    dt1.Columns.Add(cnfield[i]);
+                    dt1.Columns[i].Caption = dbfield[i];
+                }
+                //返回一个带有结构的空的DataTable
+                //DbFind.BindTable1 = dbtable;
+                return dt1;
+            }
+            else
+            {
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// 检测内容是否存在
+        /// </summary>
+        /// <param name="TableName"></param>
+        /// <param name="Condition"></param>
+        /// <returns></returns>
+        public bool CheckExist(string TableName, string Condition)
+        {
+            string sql = "select count(1) from " + TableName + " where " + Condition;
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            DataTable dt = new DataTable();
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return int.Parse(dt.Rows[0][0].ToString()) > 0;
+        }
+
+        /// <summary>
+        /// 直接执行SQL,同时传入SQL的类型
+        /// </summary>
+        /// <param name="SQL"></param>
+        /// <param name="Type"></param>
+        /// <returns></returns>
+        public object ExecuteSql(string SQL, string Type, params object[] names)
+        {
+            object result = null;
+            command = new OracleCommand(SQL, connection);
+            //用来拼接参数的
+            if (names.Length > 0)
+            {
+                string[] par = SQL.Split(':');
+                //用来存参数的数组
+                StringBuilder[] addpar = new StringBuilder[par.Length - 1];
+                for (int i = 0; i < par.Length - 1; i++)
+                {
+                    //新建一个char类型的数组用来存储每个字节的变量
+                    char[] c = par[i + 1].ToCharArray();
+                    addpar[i] = new StringBuilder();
+                    for (int j = 0; j < c.Length; j++)
+                    {
+                        if (c[j] != ' ' && c[j] != ',' && c[j] != ')')
+                        {
+                            addpar[i].Append(c[j]);
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
+                }
+                for (int i = 0; i < addpar.Length; i++)
+                    command.Parameters.Add(new OracleParameter(addpar[i].ToString(), OracleDbType.Varchar2, names[i], ParameterDirection.Input));
+            }
+            Console.WriteLine(SQL);
+            switch (Type.ToUpper())
+            {
+                case "SELECT":
+                    OracleDataAdapter ad = new OracleDataAdapter(command);
+                    result = new DataTable();
+                    try
+                    {
+                        ad.Fill((DataTable)result);
+                    }
+                    catch (Exception e)
+                    {
+                        LogManager.DoLog(e.StackTrace + e.Message);
+                        connection = new OracleConnection(DBConnectionString);
+                        connection.Open();
+                        command = new OracleCommand(SQL, connection);
+                        ad = new OracleDataAdapter();
+                        ad.SelectCommand = command;
+                        ad.Fill((DataTable)result);
+                    }
+                    break;
+                case "DELETE":
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
+                    break;
+                case "UPDATE":
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
+                    break;
+                case "INSERT":
+                    try
+                    {
+                        result = command.ExecuteNonQuery();
+                    }
+                    catch (Exception)
+                    {
+                        command.Connection = new OracleConnection(DBConnectionString);
+                        command.Connection.Open();
+                        result = command.ExecuteNonQuery();
+                    }
+                    break;
+            }
+            command.Dispose();
+            return result;
+        }
+
+        /// <summary>
+        /// 为了同步BS端的条码维护,检测时允许问号的存在,在检测时默认将问号换成:Param参数
+        /// </summary>
+        /// <param name="SQL"></param>
+        public void CheckSQL(string SQL)
+        {
+            SQL = SQL.Replace("?", ":Param");
+            command = new OracleCommand(SQL, connection);
+            command.ExecuteNonQuery();
+            command.Dispose();
+        }
+
+        public int GetDistinctRowCount(string TableName, string Field)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select distinct count('" + Field + "') from " + TableName;
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter(command);
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            ad.Dispose();
+            command.Dispose();
+            return int.Parse(dt.Rows[0][0].ToString());
+        }
+
+        /// <summary>
+        /// 根据Caller获取流水号
+        /// </summary>
+        /// <param name="Caller"></param>
+        /// <returns></returns>
+        public string GetSerialNumberByCaller(string Caller)
+        {
+            string SerialNumber = getFieldDataByCondition("MaxNumbers", "mn_number", "mn_tablename='" + Caller + "'").ToString();
+            UpdateByCondition("MaxNumbers", "mn_number=mn_number+1", "mn_tablename='" + Caller + "'");
+            return SerialNumber;
+        }
+
+        /// <summary>
+        /// 根据主键ID删除表的数据
+        /// </summary>
+        /// <param name="TableName">表名</param>
+        /// <param name="ID">主键</param>
+        /// <param name="DeleteID">需要删除主键ID的数组</param>
+        public void DeleteDataByID(string TableName, string ID, int[] DeleteID)
+        {
+            string sql = "delete from " + TableName + " where " + ID + " =:DeleteID";
+            command = new OracleCommand(sql, connection);
+            command.ArrayBindCount = DeleteID.Length;
+            command.Parameters.Add(new OracleParameter("DeleteID", OracleDbType.Long, DeleteID, ParameterDirection.Input));
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 通过序列的名称获取序列
+        /// </summary>
+        /// <param name="SeqName"></param>
+        /// <returns></returns>
+        public string GetSEQ(string SeqName)
+        {
+            DataTable dt = new DataTable();
+            dt = (DataTable)ExecuteSql("SELECT " + SeqName + ".NEXTVAL FROM DUAL", "select");
+            return dt.Rows[0][0].ToString();
+        }
+
+        /// <summary>
+        /// 通过序列的名称获取序列
+        /// </summary>
+        /// <param name="SeqName"></param>
+        /// <returns></returns>
+        public string[] GetSEQ(string SeqName, int Num)
+        {
+            DataTable dt = new DataTable();
+            dt = (DataTable)ExecuteSql("SELECT " + SeqName + ".nextval  FROM DUAL CONNECT BY LEVEL<=" + Num, "select");
+            string[] SerialNum = new string[dt.Rows.Count];
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                SerialNum[i] = dt.Rows[i][0].ToString();
+            }
+            return SerialNum;
+        }
+
+        public void SaveDataTable(DataTable dt, string TableName, string ID, out string[] SavedID, params string[] sql)
+        {
+            if (dt == null)
+            {
+                SavedID = new string[0];
+                return;
+            }
+         
+            StringBuilder sb = new StringBuilder();
+            //预防插入的DataTable中存在不属于该表的列,在进行下一步操作之前全部剔除
+            DataTable data = (DataTable)ExecuteSql("select Column_Name,Data_Type from cols where TABLE_name=upper('" + TableName + "')", "select");
+            //将所有的字段拼接起来
+            for (int i = 0; i < data.Rows.Count; i++)
+            {
+                sb.Append("#" + data.Rows[i]["Column_Name"].ToString());
+            }
+            //移除掉所有不属于该表的列
+            for (int i = dt.Columns.Count - 1; i >= 0; i--)
+            {
+                if (!sb.ToString().Contains(dt.Columns[i].ColumnName.ToUpper()))
+                {
+                    dt.Columns.RemoveAt(i);
+                }
+            }
+            sb.Clear();
+            //计算有多少个是新加的行,根据主键为空来进行判断
+            int NewRowCount = 0;
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                if (dt.Rows[i][ID] == null || dt.Rows[i][ID].ToString() == "")
+                {
+                    NewRowCount = NewRowCount + 1;
+                }
+            }
+            if (sql.Length > 0)
+            {
+                if (NewRowCount > 0)
+                {
+                    //获取参数的个数
+                    int paramsNum = sql[0].Split(':').Length - 1;
+                    //解析参数的数据
+                    string[] param = GetParamFromSQL(sql[0]);
+                    //新建一个二维数组去
+                    string[][] param_array = new string[paramsNum][];
+                    //实例化每个一维数组
+                    for (int i = 0; i < paramsNum; i++)
+                    {
+                        param_array[i] = new string[NewRowCount];
+                    }
+                    //设置每列参数的索引
+                    int num = 0;
+                    //变量所有的行,如果有主键为空的则移除,不为空的进行参数的拼接
+                    for (int i = dt.Rows.Count - 1; i >= 0; i--)
+                    {
+                        if (dt.Rows[i][ID] == null || dt.Rows[i][ID].ToString() == "")
+                        {
+                            //当为新添加行的时候才去设置参数,设置过后索引+1
+                            for (int j = 0; j < paramsNum; j++)
+                            {
+                                param_array[j][num] = dt.Rows[i][param[j]].ToString();
+                            }
+                            dt.Rows.RemoveAt(i);
+                            num++;
+                        }
+                    }
+                    BatchInsertDataTable(sql[0], param, param_array);
+                }
+            }
+            sb.Clear();
+            sb.Append("update " + TableName + " set ");
+            int ColumnCount = dt.Columns.Count;
+            int RowCount = dt.Rows.Count;
+            SavedID = new string[RowCount];
+            //存数据的参数
+            List<string[]> Parameter = new List<string[]>();
+            //存参数名的参数
+            string[] ParName = new string[ColumnCount];
+            for (int i = 0; i < ColumnCount; i++)
+            {
+                ParName[i] = dt.Columns[i].ColumnName;
+                if (i == dt.Columns.Count - 1)
+                    sb.Append(dt.Columns[i].ColumnName + "=:" + dt.Columns[i].ColumnName);
+                else
+                    sb.Append(dt.Columns[i].ColumnName + "=:" + dt.Columns[i].ColumnName + ",");
+            }
+            sb.Append(" where " + ID + " =:" + ID);
+            //先添加参数
+            Parameter.Add(ParName);
+            //添加参数的具体内容
+            for (int i = 0; i < ColumnCount; i++)
+            {
+                string[] par = new string[RowCount];
+                for (int j = 0; j < RowCount; j++)
+                {
+                    par[j] = dt.Rows[j][i].ToString();
+                    SavedID[j] = dt.Rows[j][ID].ToString();
+                }
+                Parameter.Add(par);
+            }
+            BatchInsert(sb.ToString(), Parameter.ToArray());
+        }
+
+        /// <summary>
+        /// 批量通过SQL来执行插入操作 ,参数的第一个数一个string[]数组,用来传递需要添加的参数的名称
+        /// 之后的是名称参数数组对应的 ,所有的插入参数数据长度必须是一致的
+        /// </summary>
+        /// <param name="sql"></param>
+        /// <param name="names"></param>
+        public void BatchInsert(string sql, params object[][] names)
+        {
+            command = new OracleCommand(sql, connection);
+            command.ArrayBindCount = names[1].Length;
+            if (names[1].Length == 0)
+            {
+                return;
+            }
+            //因为第一个数组保存的是参数的名称,所以循环从1而不是0开始
+            //将第一个数组的下标固定为0作为循环添加的参数的名称
+            for (int i = 1; i <= names[0].Length; i++)
+            {
+                command.Parameters.Add(new OracleParameter(names[0][i - 1].ToString(), OracleDbType.Varchar2, names[i], ParameterDirection.Input));
+            }
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            command.Dispose();
+        }
+
+        public void BatchInsertDataTable(string sql, string[] param, params object[][] param1)
+        {
+            command = new OracleCommand(sql, connection);
+            command.ArrayBindCount = param1[0].Length;
+            //因为第一个数组保存的是参数的名称,所以循环从1而不是0开始
+            //将第一个数组的下标固定为0作为循环添加的参数的名称
+            for (int i = 0; i < param.Length; i++)
+            {
+                command.Parameters.Add(new OracleParameter(param[i].ToString(), OracleDbType.Varchar2, param1[i], ParameterDirection.Input));
+            }
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 取Configs表中的配置,进行该客户是否执行某个操作
+        /// </summary>
+        /// <param name="Code"></param>
+        /// <param name="Caller"></param>
+        /// <returns></returns>
+        public object GetConfig(string Code, string Caller)
+        {
+            DataTable dt = new DataTable();
+            string sql = "select Data from configs where code='" + Code + "' and caller='" + Caller + "'";
+            dt = (DataTable)ExecuteSql(sql, "select");
+            if (dt.Rows.Count == 0)
+            {
+                return "";
+            }
+            else
+            {
+                return dt.Rows[0]["Data"];
+            }
+        }
+
+
+        //将数据类型的列类型转换为DataTable
+        public DataTable DataTypeColumnToDataTable(DataTable dt)
+        {
+            DataTable dt1 = new DataTable();
+            dt1.Rows.Add();
+            foreach (DataRow dr in dt.Rows)
+            {
+                dt1.Columns.Add(dr[0].ToString());
+                int index = dt.Rows.IndexOf(dr);
+                if (dr[1].ToString() == "NUMBER")
+                {
+                    dt1.Rows[0][index] = 0;
+                }
+                if (dr[1].ToString() == "VARCHAR2")
+                {
+                    dt1.Rows[0][index] = "这是一段文字";
+                }
+                if (dr[1].ToString() == "DATE")
+                {
+                    dt1.Rows[0][index] = DateTime.Now.ToString("yyyy-MM-dd");
+                }
+                if (dr[1].ToString() == "FLOAT")
+                {
+                    dt1.Rows[0][index] = 1.0;
+                }
+                if (dr[1].ToString() == "CLOB")
+                {
+                    dt1.Rows[0][index] = "一段长文字";
+                }
+            }
+            return dt1;
+        }
+
+
+        /// <summary>
+        /// 通过条件更新
+        /// </summary>
+        /// <param name="TableName"></param>
+        /// <param name="update"></param>
+        /// <param name="condition"></param>
+        public string UpdateByCondition(string TableName, string update, string condition)
+        {
+            string sql = "update " + TableName + " set " + update + " where " + condition;
+            command = new OracleCommand(sql, connection);
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            command.Dispose();
+            return sql;
+        }
+
+        /// <summary>
+        /// 调用存储过程
+        /// </summary>
+        /// <param name="ProcedureName"></param>    
+        /// <param name="param"></param>
+        public void CallProcedure(string ProcedureName, ref string[] param)
+        {
+            command = new OracleCommand(ProcedureName);
+            command.Connection = connection;
+            command.CommandText = ProcedureName;
+            command.CommandType = CommandType.StoredProcedure;
+            for (int i = 0; i < param.Length; i++)
+                command.Parameters.Add(new OracleParameter(param[i].ToString(), OracleDbType.Varchar2, 200, param[i], ParameterDirection.InputOutput));
+            try
+            {
+                command.ExecuteNonQuery();
+            }
+            catch (Exception)
+            {
+                command.Connection = new OracleConnection(DBConnectionString);
+                command.Connection.Open();
+                command.ExecuteNonQuery();
+            }
+            for (int i = 0; i < command.Parameters.Count; i++)
+                param[i] = command.Parameters[i].Value.ToString();
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 出现异常进行回滚的执行方法
+        /// </summary>
+        /// <param name="SQL"></param>
+        public void ExecuteSQLTran(params string[] SQL)
+        {
+            OracleTransaction tx = connection.BeginTransaction();
+            command = new OracleCommand();
+            command.Connection = connection;
+            command.Transaction = tx;
+            try
+            {
+                foreach (string sql in SQL)
+                {
+                    Console.WriteLine(sql);
+                    if (!String.IsNullOrEmpty(sql))
+                    {
+                        command.CommandText = sql;
+                        try
+                        {
+                            command.ExecuteNonQuery();
+                        }
+                        catch (Exception)
+                        {
+                            command.Connection = new OracleConnection(DBConnectionString);
+                            command.Connection.Open();
+                            command.ExecuteNonQuery();
+                        }
+                    }
+                }
+                tx.Commit();
+            }
+            catch (Exception e)
+            {
+                tx.Rollback();
+                throw new Exception(e.Message);
+            }
+            command.Dispose();
+        }
+
+        /// <summary>
+        /// 用于将string 的数组转换成SQL的查询内容
+        /// </summary>
+        /// <param name="Fields"></param>
+        /// <returns></returns>
+        private string AddField(string[] Fields)
+        {
+            string sql = " ";
+            foreach (string field in Fields)
+            {
+                sql += field + ",";
+            }
+            return sql.Substring(0, sql.Length - 1);
+        }
+        /// <summary>
+        /// 通过查询的内容获取到字段的描述
+        /// </summary>
+        /// <param name="field"></param>
+        /// <returns></returns>
+        private static string[] GetCaptionFromField(string field)
+        {
+            string[] caption = field.Split(',');
+            for (int i = 0; i < caption.Length; i++)
+            {
+                caption[i] = caption[i].Substring(0, caption[i].LastIndexOf("as")).Trim();
+            }
+            return caption;
+        }
+
+        /// <summary>
+        /// 通过查询的语句获取查询的字段
+        /// </summary>
+        /// <param name="field"></param>
+        /// <returns></returns>
+        private static string[] GetField(string field)
+        {
+            string[] fields = field.Split(',');
+            for (int i = 0; i < fields.Length; i++)
+            {
+                fields[i] = fields[i].Substring(fields[i].LastIndexOf("as") + 2, fields[i].Length - fields[i].LastIndexOf("as") - 2).Trim();
+            }
+            return fields;
+        }
+
+        public object GetLabelParam(string sql)
+        {
+            DataTable dt = new DataTable();
+            command = new OracleCommand(sql, connection);
+            OracleDataAdapter ad = new OracleDataAdapter();
+            ad.SelectCommand = command;
+            try
+            {
+                ad.Fill(dt);
+            }
+            catch (Exception)
+            {
+                connection = new OracleConnection(DBConnectionString);
+                connection.Open();
+                command = new OracleCommand(sql, connection);
+                ad = new OracleDataAdapter();
+                ad.SelectCommand = command;
+                ad.Fill(dt);
+            }
+            if (dt.Rows.Count > 0)
+            {
+                ad.Dispose();
+                command.Dispose();
+                return dt.Rows[0][0];
+            }
+            else
+            {
+                command.Dispose();
+                return "";
+            }
+        }
+
+        public static string[] GetParamFromSQL(string SQL)
+        {
+            string[] par = SQL.Split(':');
+            //用来存参数的数组
+            StringBuilder[] addpar = new StringBuilder[par.Length - 1];
+            string[] param = new string[par.Length - 1];
+            for (int i = 0; i < par.Length - 1; i++)
+            {
+                //新建一个char类型的数组用来存储每个字节的变量
+                char[] c = par[i + 1].ToCharArray();
+                addpar[i] = new StringBuilder();
+
+                for (int j = 0; j < c.Length; j++)
+                {
+                    if (c[j] != ' ' && c[j] != ',' && c[j] != ')')
+                    {
+                        addpar[i].Append(c[j]);
+                    }
+                    else
+                    {
+                        break;
+                    }
+                }
+            }
+            for (int i = 0; i < par.Length - 1; i++)
+            {
+                param[i] = addpar[i].ToString();
+            }
+            return param;
+        }
+
+        public void Dispose()
+        {
+         
+        }
+    }
+}

+ 257 - 0
PLCDataReader/Device/Command/FormNewCommand.Designer.cs

@@ -0,0 +1,257 @@
+namespace UAS_PLCDataReader.Device.Command
+{
+    partial class FormNewCommand
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.AddCommand = new DevExpress.XtraEditors.SimpleButton();
+            this.CodeClientAddress = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.CodeFunction = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.CodeAddress = new DevExpress.XtraEditors.TextEdit();
+            this.CodeLength = new DevExpress.XtraEditors.TextEdit();
+            this.CodeClientAddress_label = new DevExpress.XtraEditors.LabelControl();
+            this.CodeFunction_label = new DevExpress.XtraEditors.LabelControl();
+            this.CodeAddress_label = new DevExpress.XtraEditors.LabelControl();
+            this.CodeLength_label = new DevExpress.XtraEditors.LabelControl();
+            this.dc_name_label = new DevExpress.XtraEditors.LabelControl();
+            this.dc_code_label = new DevExpress.XtraEditors.LabelControl();
+            this.dc_name = new DevExpress.XtraEditors.TextEdit();
+            this.dc_code = new DevExpress.XtraEditors.TextEdit();
+            this.CodeComplement_label = new DevExpress.XtraEditors.LabelControl();
+            this.CodeEnd_label = new DevExpress.XtraEditors.LabelControl();
+            this.CodeEnd = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.CodeComplement = new DevExpress.XtraEditors.ComboBoxEdit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeClientAddress.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeFunction.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeAddress.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeLength.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dc_name.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dc_code.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeEnd.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeComplement.Properties)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // AddCommand
+            // 
+            this.AddCommand.Location = new System.Drawing.Point(347, 133);
+            this.AddCommand.Name = "AddCommand";
+            this.AddCommand.Size = new System.Drawing.Size(75, 23);
+            this.AddCommand.TabIndex = 0;
+            this.AddCommand.Text = "确认添加";
+            this.AddCommand.Click += new System.EventHandler(this.AddCommand_Click);
+            // 
+            // CodeClientAddress
+            // 
+            this.CodeClientAddress.Location = new System.Drawing.Point(75, 80);
+            this.CodeClientAddress.Name = "CodeClientAddress";
+            this.CodeClientAddress.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.CodeClientAddress.Size = new System.Drawing.Size(63, 20);
+            this.CodeClientAddress.TabIndex = 1;
+            // 
+            // CodeFunction
+            // 
+            this.CodeFunction.Location = new System.Drawing.Point(198, 80);
+            this.CodeFunction.Name = "CodeFunction";
+            this.CodeFunction.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.CodeFunction.Size = new System.Drawing.Size(63, 20);
+            this.CodeFunction.TabIndex = 2;
+            // 
+            // CodeAddress
+            // 
+            this.CodeAddress.Location = new System.Drawing.Point(318, 80);
+            this.CodeAddress.Name = "CodeAddress";
+            this.CodeAddress.Size = new System.Drawing.Size(60, 20);
+            this.CodeAddress.TabIndex = 3;
+            // 
+            // CodeLength
+            // 
+            this.CodeLength.Location = new System.Drawing.Point(447, 80);
+            this.CodeLength.Name = "CodeLength";
+            this.CodeLength.Size = new System.Drawing.Size(60, 20);
+            this.CodeLength.TabIndex = 4;
+            // 
+            // CodeClientAddress_label
+            // 
+            this.CodeClientAddress_label.Location = new System.Drawing.Point(18, 83);
+            this.CodeClientAddress_label.Name = "CodeClientAddress_label";
+            this.CodeClientAddress_label.Size = new System.Drawing.Size(48, 14);
+            this.CodeClientAddress_label.TabIndex = 5;
+            this.CodeClientAddress_label.Text = "从站地址";
+            // 
+            // CodeFunction_label
+            // 
+            this.CodeFunction_label.Location = new System.Drawing.Point(144, 83);
+            this.CodeFunction_label.Name = "CodeFunction_label";
+            this.CodeFunction_label.Size = new System.Drawing.Size(36, 14);
+            this.CodeFunction_label.TabIndex = 6;
+            this.CodeFunction_label.Text = "命令码";
+            // 
+            // CodeAddress_label
+            // 
+            this.CodeAddress_label.AccessibleDescription = "";
+            this.CodeAddress_label.Location = new System.Drawing.Point(276, 83);
+            this.CodeAddress_label.Name = "CodeAddress_label";
+            this.CodeAddress_label.Size = new System.Drawing.Size(36, 14);
+            this.CodeAddress_label.TabIndex = 7;
+            this.CodeAddress_label.Text = "地址位";
+            // 
+            // CodeLength_label
+            // 
+            this.CodeLength_label.Location = new System.Drawing.Point(393, 83);
+            this.CodeLength_label.Name = "CodeLength_label";
+            this.CodeLength_label.Size = new System.Drawing.Size(48, 14);
+            this.CodeLength_label.TabIndex = 8;
+            this.CodeLength_label.Text = "操作位数";
+            // 
+            // dc_name_label
+            // 
+            this.dc_name_label.Location = new System.Drawing.Point(144, 30);
+            this.dc_name_label.Name = "dc_name_label";
+            this.dc_name_label.Size = new System.Drawing.Size(48, 14);
+            this.dc_name_label.TabIndex = 12;
+            this.dc_name_label.Text = "指令名称";
+            // 
+            // dc_code_label
+            // 
+            this.dc_code_label.AccessibleDescription = "";
+            this.dc_code_label.Location = new System.Drawing.Point(18, 30);
+            this.dc_code_label.Name = "dc_code_label";
+            this.dc_code_label.Size = new System.Drawing.Size(48, 14);
+            this.dc_code_label.TabIndex = 11;
+            this.dc_code_label.Text = "指令编号";
+            // 
+            // dc_name
+            // 
+            this.dc_name.Location = new System.Drawing.Point(198, 27);
+            this.dc_name.Name = "dc_name";
+            this.dc_name.Size = new System.Drawing.Size(60, 20);
+            this.dc_name.TabIndex = 10;
+            // 
+            // dc_code
+            // 
+            this.dc_code.Location = new System.Drawing.Point(73, 27);
+            this.dc_code.Name = "dc_code";
+            this.dc_code.Size = new System.Drawing.Size(65, 20);
+            this.dc_code.TabIndex = 9;
+            // 
+            // CodeComplement_label
+            // 
+            this.CodeComplement_label.Location = new System.Drawing.Point(528, 83);
+            this.CodeComplement_label.Name = "CodeComplement_label";
+            this.CodeComplement_label.Size = new System.Drawing.Size(24, 14);
+            this.CodeComplement_label.TabIndex = 14;
+            this.CodeComplement_label.Text = "补码";
+            // 
+            // CodeEnd_label
+            // 
+            this.CodeEnd_label.Location = new System.Drawing.Point(646, 83);
+            this.CodeEnd_label.Name = "CodeEnd_label";
+            this.CodeEnd_label.Size = new System.Drawing.Size(36, 14);
+            this.CodeEnd_label.TabIndex = 16;
+            this.CodeEnd_label.Text = "结束位";
+            // 
+            // CodeEnd
+            // 
+            this.CodeEnd.Location = new System.Drawing.Point(700, 80);
+            this.CodeEnd.Name = "CodeEnd";
+            this.CodeEnd.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.CodeEnd.Size = new System.Drawing.Size(63, 20);
+            this.CodeEnd.TabIndex = 18;
+            // 
+            // CodeComplement
+            // 
+            this.CodeComplement.Location = new System.Drawing.Point(567, 80);
+            this.CodeComplement.Name = "CodeComplement";
+            this.CodeComplement.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.CodeComplement.Size = new System.Drawing.Size(63, 20);
+            this.CodeComplement.TabIndex = 17;
+            // 
+            // FormNewCommand
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(766, 190);
+            this.Controls.Add(this.CodeEnd);
+            this.Controls.Add(this.CodeComplement);
+            this.Controls.Add(this.CodeEnd_label);
+            this.Controls.Add(this.CodeComplement_label);
+            this.Controls.Add(this.dc_name_label);
+            this.Controls.Add(this.dc_code_label);
+            this.Controls.Add(this.dc_name);
+            this.Controls.Add(this.dc_code);
+            this.Controls.Add(this.CodeLength_label);
+            this.Controls.Add(this.CodeAddress_label);
+            this.Controls.Add(this.CodeFunction_label);
+            this.Controls.Add(this.CodeClientAddress_label);
+            this.Controls.Add(this.CodeLength);
+            this.Controls.Add(this.CodeAddress);
+            this.Controls.Add(this.CodeFunction);
+            this.Controls.Add(this.CodeClientAddress);
+            this.Controls.Add(this.AddCommand);
+            this.FormBorderEffect = DevExpress.XtraEditors.FormBorderEffect.None;
+            this.Name = "FormNewCommand";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = " ";
+            this.Load += new System.EventHandler(this.FormNewCommand_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.CodeClientAddress.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeFunction.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeAddress.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeLength.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dc_name.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dc_code.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeEnd.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CodeComplement.Properties)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.SimpleButton AddCommand;
+        private DevExpress.XtraEditors.ComboBoxEdit CodeClientAddress;
+        private DevExpress.XtraEditors.ComboBoxEdit CodeFunction;
+        private DevExpress.XtraEditors.TextEdit CodeAddress;
+        private DevExpress.XtraEditors.TextEdit CodeLength;
+        private DevExpress.XtraEditors.LabelControl CodeClientAddress_label;
+        private DevExpress.XtraEditors.LabelControl CodeFunction_label;
+        private DevExpress.XtraEditors.LabelControl CodeAddress_label;
+        private DevExpress.XtraEditors.LabelControl CodeLength_label;
+        private DevExpress.XtraEditors.LabelControl dc_name_label;
+        private DevExpress.XtraEditors.LabelControl dc_code_label;
+        private DevExpress.XtraEditors.TextEdit dc_name;
+        private DevExpress.XtraEditors.TextEdit dc_code;
+        private DevExpress.XtraEditors.LabelControl CodeComplement_label;
+        private DevExpress.XtraEditors.LabelControl CodeEnd_label;
+        private DevExpress.XtraEditors.ComboBoxEdit CodeEnd;
+        private DevExpress.XtraEditors.ComboBoxEdit CodeComplement;
+    }
+}

+ 57 - 0
PLCDataReader/Device/Command/FormNewCommand.cs

@@ -0,0 +1,57 @@
+using System;
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.Entity;
+using System.Data;
+using UAS_PLCDataReader.DataOperate;
+using UAS_PLCDataReader.PublicMethod;
+
+namespace UAS_PLCDataReader.Device.Command
+{
+    public partial class FormNewCommand : XtraForm
+    {
+
+        string brand = "";
+
+        public FormNewCommand()
+        {
+            InitializeComponent();
+        }
+
+        public FormNewCommand(string BrandCode, string BrandName)
+        {
+            InitializeComponent();
+            brand = BrandCode;
+            Text = "新增指令(" + BrandName + ")";
+        }
+
+        /// <summary>
+        /// 设置下拉框的值
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void FormNewCommand_Load(object sender, EventArgs e)
+        {
+            DataTable dt = (DataTable)SystemInf.dh.ExecuteSql("select * from CommandFunctionSetting where cfs_debrand='" + brand + "' order by cfs_id ", "select");
+            BaseUtil.FillComBoxEditWidthDataTable(CodeClientAddress, "cfs_name", "cfs_value", BaseUtil.ToDataTable(dt.Select("cfs_type='CA'")));
+            BaseUtil.FillComBoxEditWidthDataTable(CodeFunction, "cfs_name", "cfs_value", BaseUtil.ToDataTable(dt.Select("cfs_type='CF'")));
+            BaseUtil.FillComBoxEditWidthDataTable(CodeComplement, "cfs_name", "cfs_value", BaseUtil.ToDataTable(dt.Select("cfs_type='CC'")));
+            BaseUtil.FillComBoxEditWidthDataTable(CodeEnd, "cfs_name", "cfs_value", BaseUtil.ToDataTable(dt.Select("cfs_type='CE'")));
+        }
+
+        /// <summary>
+        /// 插入生成的指令,根据选择的功能码+地址位+长度+补码+结束码
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void AddCommand_Click(object sender, EventArgs e)
+        {
+            string code = BaseUtil.GetComboxEditValue(CodeClientAddress) + BaseUtil.GetComboxEditValue(CodeFunction) + CodeAddress.Text + CodeLength.Text;
+            //添加指令的补码
+            code = code + BaseUtil.getLRC(code);
+            code = code + BaseUtil.GetComboxEditValue(CodeEnd);
+            SystemInf.dh.ExecuteSql("insert into devicecommand(dc_id,dc_name,dc_code,dc_command,dc_brand) values (devicecommand_seq.nextval,'" + dc_name.Text + "','" + dc_code.Text + "','" + code + "','" + brand + "')", "insert");
+            XtraMessageBox.Show("指令保存成功");
+            Close();
+        }
+    }
+}

+ 120 - 0
PLCDataReader/Device/Command/FormNewCommand.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>

+ 286 - 0
PLCDataReader/Device/Information/DeviceDetailInfo.Designer.cs

@@ -0,0 +1,286 @@
+using UAS_PLCDataReader.CustomerControl.ValueLabel;
+
+namespace UAS_PLCDataReader.Device.Infomation
+{
+    partial class DeviceDetailInfo
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.groupControl1 = new DevExpress.XtraEditors.GroupControl();
+            this.dnc_type = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dnc_upperip = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dnc_type_label = new DevExpress.XtraEditors.LabelControl();
+            this.dnc_upperip_label = new DevExpress.XtraEditors.LabelControl();
+            this.dnc_mac = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dnc_gateway = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dnc_mac_label = new DevExpress.XtraEditors.LabelControl();
+            this.dnc_port = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dnc_gateway_label = new DevExpress.XtraEditors.LabelControl();
+            this.dnc_ip = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dnc_port_label = new DevExpress.XtraEditors.LabelControl();
+            this.dnc_ip_label = new DevExpress.XtraEditors.LabelControl();
+            this.GridDeviceDetailInfo = new DevExpress.XtraGrid.GridControl();
+            this.GridViewDeviceDetailInfo = new DevExpress.XtraGrid.Views.Grid.GridView();
+            this.DC_CODE = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.DC_NAME = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.DPC_ENABLE = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.repositoryItemCheckEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit();
+            ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit();
+            this.groupControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.GridDeviceDetailInfo)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewDeviceDetailInfo)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.repositoryItemCheckEdit1)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // groupControl1
+            // 
+            this.groupControl1.Controls.Add(this.dnc_type);
+            this.groupControl1.Controls.Add(this.dnc_upperip);
+            this.groupControl1.Controls.Add(this.dnc_type_label);
+            this.groupControl1.Controls.Add(this.dnc_upperip_label);
+            this.groupControl1.Controls.Add(this.dnc_mac);
+            this.groupControl1.Controls.Add(this.dnc_gateway);
+            this.groupControl1.Controls.Add(this.dnc_mac_label);
+            this.groupControl1.Controls.Add(this.dnc_port);
+            this.groupControl1.Controls.Add(this.dnc_gateway_label);
+            this.groupControl1.Controls.Add(this.dnc_ip);
+            this.groupControl1.Controls.Add(this.dnc_port_label);
+            this.groupControl1.Controls.Add(this.dnc_ip_label);
+            this.groupControl1.Location = new System.Drawing.Point(12, 12);
+            this.groupControl1.Name = "groupControl1";
+            this.groupControl1.Size = new System.Drawing.Size(286, 349);
+            this.groupControl1.TabIndex = 0;
+            this.groupControl1.Text = "设备联网信息";
+            // 
+            // dnc_type
+            // 
+            this.dnc_type.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_type.Location = new System.Drawing.Point(79, 164);
+            this.dnc_type.Name = "dnc_type";
+            this.dnc_type.Size = new System.Drawing.Size(0, 16);
+            this.dnc_type.TabIndex = 23;
+            // 
+            // dnc_upperip
+            // 
+            this.dnc_upperip.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_upperip.Location = new System.Drawing.Point(79, 194);
+            this.dnc_upperip.Name = "dnc_upperip";
+            this.dnc_upperip.Size = new System.Drawing.Size(0, 16);
+            this.dnc_upperip.TabIndex = 22;
+            // 
+            // dnc_type_label
+            // 
+            this.dnc_type_label.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_type_label.Location = new System.Drawing.Point(13, 164);
+            this.dnc_type_label.Name = "dnc_type_label";
+            this.dnc_type_label.Size = new System.Drawing.Size(32, 16);
+            this.dnc_type_label.TabIndex = 21;
+            this.dnc_type_label.Text = "类型";
+            // 
+            // dnc_upperip_label
+            // 
+            this.dnc_upperip_label.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_upperip_label.Location = new System.Drawing.Point(13, 194);
+            this.dnc_upperip_label.Name = "dnc_upperip_label";
+            this.dnc_upperip_label.Size = new System.Drawing.Size(48, 16);
+            this.dnc_upperip_label.TabIndex = 20;
+            this.dnc_upperip_label.Text = "上级IP";
+            // 
+            // dnc_mac
+            // 
+            this.dnc_mac.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_mac.Location = new System.Drawing.Point(79, 71);
+            this.dnc_mac.Name = "dnc_mac";
+            this.dnc_mac.Size = new System.Drawing.Size(0, 16);
+            this.dnc_mac.TabIndex = 19;
+            // 
+            // dnc_gateway
+            // 
+            this.dnc_gateway.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_gateway.Location = new System.Drawing.Point(79, 132);
+            this.dnc_gateway.Name = "dnc_gateway";
+            this.dnc_gateway.Size = new System.Drawing.Size(0, 16);
+            this.dnc_gateway.TabIndex = 18;
+            // 
+            // dnc_mac_label
+            // 
+            this.dnc_mac_label.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_mac_label.Location = new System.Drawing.Point(13, 71);
+            this.dnc_mac_label.Name = "dnc_mac_label";
+            this.dnc_mac_label.Size = new System.Drawing.Size(24, 16);
+            this.dnc_mac_label.TabIndex = 6;
+            this.dnc_mac_label.Text = "MAC";
+            // 
+            // dnc_port
+            // 
+            this.dnc_port.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_port.Location = new System.Drawing.Point(79, 100);
+            this.dnc_port.Name = "dnc_port";
+            this.dnc_port.Size = new System.Drawing.Size(0, 16);
+            this.dnc_port.TabIndex = 17;
+            // 
+            // dnc_gateway_label
+            // 
+            this.dnc_gateway_label.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_gateway_label.Location = new System.Drawing.Point(13, 132);
+            this.dnc_gateway_label.Name = "dnc_gateway_label";
+            this.dnc_gateway_label.Size = new System.Drawing.Size(32, 16);
+            this.dnc_gateway_label.TabIndex = 5;
+            this.dnc_gateway_label.Text = "网关";
+            // 
+            // dnc_ip
+            // 
+            this.dnc_ip.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_ip.Location = new System.Drawing.Point(79, 41);
+            this.dnc_ip.Name = "dnc_ip";
+            this.dnc_ip.Size = new System.Drawing.Size(0, 16);
+            this.dnc_ip.TabIndex = 16;
+            // 
+            // dnc_port_label
+            // 
+            this.dnc_port_label.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_port_label.Location = new System.Drawing.Point(13, 100);
+            this.dnc_port_label.Name = "dnc_port_label";
+            this.dnc_port_label.Size = new System.Drawing.Size(32, 16);
+            this.dnc_port_label.TabIndex = 4;
+            this.dnc_port_label.Text = "端口";
+            // 
+            // dnc_ip_label
+            // 
+            this.dnc_ip_label.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dnc_ip_label.Location = new System.Drawing.Point(13, 41);
+            this.dnc_ip_label.Name = "dnc_ip_label";
+            this.dnc_ip_label.Size = new System.Drawing.Size(16, 16);
+            this.dnc_ip_label.TabIndex = 0;
+            this.dnc_ip_label.Text = "IP";
+            // 
+            // GridDeviceDetailInfo
+            // 
+            this.GridDeviceDetailInfo.Location = new System.Drawing.Point(310, 12);
+            this.GridDeviceDetailInfo.MainView = this.GridViewDeviceDetailInfo;
+            this.GridDeviceDetailInfo.Name = "GridDeviceDetailInfo";
+            this.GridDeviceDetailInfo.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] {
+            this.repositoryItemCheckEdit1});
+            this.GridDeviceDetailInfo.Size = new System.Drawing.Size(431, 349);
+            this.GridDeviceDetailInfo.TabIndex = 2;
+            this.GridDeviceDetailInfo.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.GridViewDeviceDetailInfo});
+            // 
+            // GridViewDeviceDetailInfo
+            // 
+            this.GridViewDeviceDetailInfo.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+            this.DC_CODE,
+            this.DC_NAME,
+            this.DPC_ENABLE});
+            this.GridViewDeviceDetailInfo.GridControl = this.GridDeviceDetailInfo;
+            this.GridViewDeviceDetailInfo.Name = "GridViewDeviceDetailInfo";
+            // 
+            // DC_CODE
+            // 
+            this.DC_CODE.Caption = "指令编号";
+            this.DC_CODE.FieldName = "DC_CODE";
+            this.DC_CODE.Name = "DC_CODE";
+            this.DC_CODE.OptionsColumn.AllowEdit = false;
+            this.DC_CODE.Visible = true;
+            this.DC_CODE.VisibleIndex = 0;
+            // 
+            // DC_NAME
+            // 
+            this.DC_NAME.Caption = "指令名称";
+            this.DC_NAME.FieldName = "DC_NAME";
+            this.DC_NAME.Name = "DC_NAME";
+            this.DC_NAME.OptionsColumn.AllowEdit = false;
+            this.DC_NAME.Visible = true;
+            this.DC_NAME.VisibleIndex = 1;
+            // 
+            // DPC_ENABLE
+            // 
+            this.DPC_ENABLE.Caption = "是否启用";
+            this.DPC_ENABLE.ColumnEdit = this.repositoryItemCheckEdit1;
+            this.DPC_ENABLE.FieldName = "DPC_ENABLE";
+            this.DPC_ENABLE.Name = "DPC_ENABLE";
+            this.DPC_ENABLE.OptionsColumn.AllowEdit = false;
+            this.DPC_ENABLE.Visible = true;
+            this.DPC_ENABLE.VisibleIndex = 2;
+            // 
+            // repositoryItemCheckEdit1
+            // 
+            this.repositoryItemCheckEdit1.AutoHeight = false;
+            this.repositoryItemCheckEdit1.Name = "repositoryItemCheckEdit1";
+            this.repositoryItemCheckEdit1.NullStyle = DevExpress.XtraEditors.Controls.StyleIndeterminate.Unchecked;
+            this.repositoryItemCheckEdit1.NullText = "0";
+            this.repositoryItemCheckEdit1.ValueChecked = "-1";
+            this.repositoryItemCheckEdit1.ValueUnchecked = "0";
+            // 
+            // DeviceDetailInfo
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(747, 373);
+            this.Controls.Add(this.GridDeviceDetailInfo);
+            this.Controls.Add(this.groupControl1);
+            this.FormBorderEffect = DevExpress.XtraEditors.FormBorderEffect.None;
+            this.KeyPreview = true;
+            this.MaximizeBox = false;
+            this.Name = "DeviceDetailInfo";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = " ";
+            this.Load += new System.EventHandler(this.DeviceDetailInfo_Load);
+            this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.DeviceDetailInfo_KeyDown);
+            ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit();
+            this.groupControl1.ResumeLayout(false);
+            this.groupControl1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.GridDeviceDetailInfo)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewDeviceDetailInfo)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.repositoryItemCheckEdit1)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.GroupControl groupControl1;
+        private DevExpress.XtraEditors.LabelControl dnc_mac_label;
+        private DevExpress.XtraEditors.LabelControl dnc_gateway_label;
+        private DevExpress.XtraEditors.LabelControl dnc_port_label;
+        private DevExpress.XtraEditors.LabelControl dnc_ip_label;
+        private ValueLabel dnc_mac;
+        private ValueLabel dnc_gateway;
+        private ValueLabel dnc_port;
+        private ValueLabel dnc_ip;
+        private DevExpress.XtraGrid.GridControl GridDeviceDetailInfo;
+        private DevExpress.XtraGrid.Views.Grid.GridView GridViewDeviceDetailInfo;
+        private DevExpress.XtraEditors.LabelControl dnc_upperip_label;
+        private DevExpress.XtraEditors.LabelControl dnc_type_label;
+        private ValueLabel dnc_type;
+        private ValueLabel dnc_upperip;
+        private DevExpress.XtraGrid.Columns.GridColumn DC_CODE;
+        private DevExpress.XtraGrid.Columns.GridColumn DC_NAME;
+        private DevExpress.XtraGrid.Columns.GridColumn DPC_ENABLE;
+        private DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit repositoryItemCheckEdit1;
+    }
+}

+ 80 - 0
PLCDataReader/Device/Information/DeviceDetailInfo.cs

@@ -0,0 +1,80 @@
+using System;
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.DataOperate;
+using UAS_PLCDataReader.Entity;
+using System.Data;
+using System.Text;
+using UAS_PLCDataReader.PublicMethod;
+using System.Windows.Forms;
+
+namespace UAS_PLCDataReader.Device.Infomation
+{
+    public partial class DeviceDetailInfo : XtraForm
+    {
+        DataHelper dh = SystemInf.dh;
+
+        StringBuilder sql = new StringBuilder();
+
+        string de_code = "";
+
+        public DeviceDetailInfo()
+        {
+            InitializeComponent();
+            repositoryItemCheckEdit1.QueryCheckStateByValue += RepositoryItemCheckEdit1_QueryCheckStateByValue;
+        }
+
+        private void RepositoryItemCheckEdit1_QueryCheckStateByValue(object sender, DevExpress.XtraEditors.Controls.QueryCheckStateByValueEventArgs e)
+        {
+            string val = "";
+            if (e.Value != null)
+            {
+                val = e.Value.ToString();
+            }
+            else
+            {
+                val = "FALSE";//默认为不选   
+            }
+            switch (val.ToUpper())
+            {
+                case "TRUE":
+                case "YES":
+                case "1":
+                    e.CheckState = CheckState.Checked;
+                    break;
+                case "FALSE":
+                case "NO":
+                case "0":
+                    e.CheckState = CheckState.Unchecked;
+                    break;
+                default:
+                    e.CheckState = CheckState.Checked;
+                    break;
+            }
+            e.Handled = true;
+        }
+
+        public DeviceDetailInfo(string DevcieCode)
+        {
+            InitializeComponent();
+            de_code = DevcieCode;
+            Text = DevcieCode;
+        }
+
+        private void DeviceDetailInfo_Load(object sender, EventArgs e)
+        {
+            DataTable dt = (DataTable)dh.ExecuteSql("select * from devicenetconfig where dnc_decode='" + de_code + "'", "select");
+            if (dt.Rows.Count > 0)
+            {
+                BaseUtil.SetFormValue(Controls, dt);
+            }
+            dt = (DataTable)dh.ExecuteSql("SELECT DC_CODE,DC_NAME,to_char(DPC_ENABLE)DPC_ENABLE FROM DEVICEPOLLINGCONFIG LEFT JOIN DEVICECOMMAND ON DPC_DCCODE=DC_CODE WHERE DPC_DECODE='" + de_code + "'", "select");
+            GridDeviceDetailInfo.DataSource = dt;
+        }
+
+        private void DeviceDetailInfo_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode == Keys.Escape)
+                Close();
+        }
+    }
+}

+ 120 - 0
PLCDataReader/Device/Information/DeviceDetailInfo.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>

+ 358 - 0
PLCDataReader/Device/Information/DeviceStatusInfo.Designer.cs

@@ -0,0 +1,358 @@
+using UAS_PLCDataReader.CustomerControl.ValueLabel;
+
+namespace UAS_PLCDataReader.Device.Infomation
+{
+    partial class DeviceStatusInfo
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.groupControl1 = new DevExpress.XtraEditors.GroupControl();
+            this.labelControl4 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl3 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
+            this.groupControl2 = new DevExpress.XtraEditors.GroupControl();
+            this.labelControl5 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl6 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl8 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl7 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl11 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl12 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl10 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl9 = new DevExpress.XtraEditors.LabelControl();
+            this.labelControl14 = new DevExpress.XtraEditors.LabelControl();
+            this.groupControl3 = new DevExpress.XtraEditors.GroupControl();
+            this.dpg_count = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dpg_receivedatasize = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dpg_senddatasize = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dpg_starttime = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.de_linecode = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.de_address = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.de_wccode = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.de_name = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            this.dpg_runtime = new UAS_PLCDataReader.CustomerControl.ValueLabel.ValueLabel();
+            ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit();
+            this.groupControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.groupControl2)).BeginInit();
+            this.groupControl2.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.groupControl3)).BeginInit();
+            this.groupControl3.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // groupControl1
+            // 
+            this.groupControl1.Controls.Add(this.de_linecode);
+            this.groupControl1.Controls.Add(this.de_address);
+            this.groupControl1.Controls.Add(this.labelControl4);
+            this.groupControl1.Controls.Add(this.de_wccode);
+            this.groupControl1.Controls.Add(this.labelControl3);
+            this.groupControl1.Controls.Add(this.de_name);
+            this.groupControl1.Controls.Add(this.labelControl2);
+            this.groupControl1.Controls.Add(this.labelControl1);
+            this.groupControl1.Location = new System.Drawing.Point(12, 12);
+            this.groupControl1.Name = "groupControl1";
+            this.groupControl1.Size = new System.Drawing.Size(187, 175);
+            this.groupControl1.TabIndex = 0;
+            this.groupControl1.Text = "设备信息";
+            // 
+            // labelControl4
+            // 
+            this.labelControl4.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl4.Location = new System.Drawing.Point(13, 137);
+            this.labelControl4.Name = "labelControl4";
+            this.labelControl4.Size = new System.Drawing.Size(32, 16);
+            this.labelControl4.TabIndex = 6;
+            this.labelControl4.Text = "线体";
+            // 
+            // labelControl3
+            // 
+            this.labelControl3.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl3.Location = new System.Drawing.Point(13, 106);
+            this.labelControl3.Name = "labelControl3";
+            this.labelControl3.Size = new System.Drawing.Size(32, 16);
+            this.labelControl3.TabIndex = 5;
+            this.labelControl3.Text = "区域";
+            // 
+            // labelControl2
+            // 
+            this.labelControl2.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl2.Location = new System.Drawing.Point(13, 74);
+            this.labelControl2.Name = "labelControl2";
+            this.labelControl2.Size = new System.Drawing.Size(32, 16);
+            this.labelControl2.TabIndex = 4;
+            this.labelControl2.Text = "车间";
+            // 
+            // labelControl1
+            // 
+            this.labelControl1.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl1.Location = new System.Drawing.Point(13, 41);
+            this.labelControl1.Name = "labelControl1";
+            this.labelControl1.Size = new System.Drawing.Size(32, 16);
+            this.labelControl1.TabIndex = 0;
+            this.labelControl1.Text = "设备";
+            // 
+            // groupControl2
+            // 
+            this.groupControl2.Controls.Add(this.labelControl5);
+            this.groupControl2.Controls.Add(this.labelControl6);
+            this.groupControl2.Controls.Add(this.labelControl8);
+            this.groupControl2.Controls.Add(this.labelControl7);
+            this.groupControl2.Location = new System.Drawing.Point(12, 202);
+            this.groupControl2.Name = "groupControl2";
+            this.groupControl2.Size = new System.Drawing.Size(187, 159);
+            this.groupControl2.TabIndex = 1;
+            this.groupControl2.Text = "生产信息";
+            // 
+            // labelControl5
+            // 
+            this.labelControl5.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl5.Location = new System.Drawing.Point(13, 128);
+            this.labelControl5.Name = "labelControl5";
+            this.labelControl5.Size = new System.Drawing.Size(32, 16);
+            this.labelControl5.TabIndex = 10;
+            this.labelControl5.Text = "数量";
+            // 
+            // labelControl6
+            // 
+            this.labelControl6.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl6.Location = new System.Drawing.Point(13, 97);
+            this.labelControl6.Name = "labelControl6";
+            this.labelControl6.Size = new System.Drawing.Size(32, 16);
+            this.labelControl6.TabIndex = 9;
+            this.labelControl6.Text = "批次";
+            // 
+            // labelControl8
+            // 
+            this.labelControl8.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl8.Location = new System.Drawing.Point(13, 32);
+            this.labelControl8.Name = "labelControl8";
+            this.labelControl8.Size = new System.Drawing.Size(32, 16);
+            this.labelControl8.TabIndex = 7;
+            this.labelControl8.Text = "工单";
+            // 
+            // labelControl7
+            // 
+            this.labelControl7.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl7.Location = new System.Drawing.Point(13, 65);
+            this.labelControl7.Name = "labelControl7";
+            this.labelControl7.Size = new System.Drawing.Size(32, 16);
+            this.labelControl7.TabIndex = 8;
+            this.labelControl7.Text = "产品";
+            // 
+            // labelControl11
+            // 
+            this.labelControl11.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl11.Location = new System.Drawing.Point(21, 41);
+            this.labelControl11.Name = "labelControl11";
+            this.labelControl11.Size = new System.Drawing.Size(64, 16);
+            this.labelControl11.TabIndex = 11;
+            this.labelControl11.Text = "开始时间";
+            // 
+            // labelControl12
+            // 
+            this.labelControl12.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl12.Location = new System.Drawing.Point(21, 74);
+            this.labelControl12.Name = "labelControl12";
+            this.labelControl12.Size = new System.Drawing.Size(64, 16);
+            this.labelControl12.TabIndex = 12;
+            this.labelControl12.Text = "持续时长";
+            // 
+            // labelControl10
+            // 
+            this.labelControl10.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl10.Location = new System.Drawing.Point(21, 106);
+            this.labelControl10.Name = "labelControl10";
+            this.labelControl10.Size = new System.Drawing.Size(64, 16);
+            this.labelControl10.TabIndex = 13;
+            this.labelControl10.Text = "发送字节";
+            // 
+            // labelControl9
+            // 
+            this.labelControl9.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl9.Location = new System.Drawing.Point(21, 139);
+            this.labelControl9.Name = "labelControl9";
+            this.labelControl9.Size = new System.Drawing.Size(64, 16);
+            this.labelControl9.TabIndex = 14;
+            this.labelControl9.Text = "接收字节";
+            // 
+            // labelControl14
+            // 
+            this.labelControl14.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.labelControl14.Location = new System.Drawing.Point(21, 172);
+            this.labelControl14.Name = "labelControl14";
+            this.labelControl14.Size = new System.Drawing.Size(64, 16);
+            this.labelControl14.TabIndex = 15;
+            this.labelControl14.Text = "轮询次数";
+            // 
+            // groupControl3
+            // 
+            this.groupControl3.Controls.Add(this.dpg_runtime);
+            this.groupControl3.Controls.Add(this.dpg_count);
+            this.groupControl3.Controls.Add(this.dpg_receivedatasize);
+            this.groupControl3.Controls.Add(this.dpg_senddatasize);
+            this.groupControl3.Controls.Add(this.labelControl14);
+            this.groupControl3.Controls.Add(this.dpg_starttime);
+            this.groupControl3.Controls.Add(this.labelControl9);
+            this.groupControl3.Controls.Add(this.labelControl10);
+            this.groupControl3.Controls.Add(this.labelControl12);
+            this.groupControl3.Controls.Add(this.labelControl11);
+            this.groupControl3.Location = new System.Drawing.Point(216, 12);
+            this.groupControl3.Name = "groupControl3";
+            this.groupControl3.Size = new System.Drawing.Size(250, 349);
+            this.groupControl3.TabIndex = 2;
+            this.groupControl3.Text = "运行信息";
+            // 
+            // dpg_count
+            // 
+            this.dpg_count.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dpg_count.Location = new System.Drawing.Point(101, 172);
+            this.dpg_count.Name = "dpg_count";
+            this.dpg_count.Size = new System.Drawing.Size(0, 16);
+            this.dpg_count.TabIndex = 3;
+            // 
+            // dpg_receivedatasize
+            // 
+            this.dpg_receivedatasize.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dpg_receivedatasize.Location = new System.Drawing.Point(101, 139);
+            this.dpg_receivedatasize.Name = "dpg_receivedatasize";
+            this.dpg_receivedatasize.Size = new System.Drawing.Size(0, 16);
+            this.dpg_receivedatasize.TabIndex = 2;
+            // 
+            // dpg_senddatasize
+            // 
+            this.dpg_senddatasize.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dpg_senddatasize.Location = new System.Drawing.Point(101, 106);
+            this.dpg_senddatasize.Name = "dpg_senddatasize";
+            this.dpg_senddatasize.Size = new System.Drawing.Size(0, 16);
+            this.dpg_senddatasize.TabIndex = 1;
+            // 
+            // dpg_starttime
+            // 
+            this.dpg_starttime.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dpg_starttime.Location = new System.Drawing.Point(101, 41);
+            this.dpg_starttime.Name = "dpg_starttime";
+            this.dpg_starttime.Size = new System.Drawing.Size(0, 16);
+            this.dpg_starttime.TabIndex = 0;
+            // 
+            // de_linecode
+            // 
+            this.de_linecode.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.de_linecode.Location = new System.Drawing.Point(70, 137);
+            this.de_linecode.Name = "de_linecode";
+            this.de_linecode.Size = new System.Drawing.Size(0, 16);
+            this.de_linecode.TabIndex = 19;
+            // 
+            // de_address
+            // 
+            this.de_address.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.de_address.Location = new System.Drawing.Point(70, 106);
+            this.de_address.Name = "de_address";
+            this.de_address.Size = new System.Drawing.Size(0, 16);
+            this.de_address.TabIndex = 18;
+            // 
+            // de_wccode
+            // 
+            this.de_wccode.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.de_wccode.Location = new System.Drawing.Point(70, 74);
+            this.de_wccode.Name = "de_wccode";
+            this.de_wccode.Size = new System.Drawing.Size(0, 16);
+            this.de_wccode.TabIndex = 17;
+            // 
+            // de_name
+            // 
+            this.de_name.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.de_name.Location = new System.Drawing.Point(70, 41);
+            this.de_name.Name = "de_name";
+            this.de_name.Size = new System.Drawing.Size(0, 16);
+            this.de_name.TabIndex = 16;
+            // 
+            // dpg_runtime
+            // 
+            this.dpg_runtime.Appearance.Font = new System.Drawing.Font("黑体", 12F);
+            this.dpg_runtime.Location = new System.Drawing.Point(101, 74);
+            this.dpg_runtime.Name = "dpg_runtime";
+            this.dpg_runtime.Size = new System.Drawing.Size(0, 16);
+            this.dpg_runtime.TabIndex = 16;
+            // 
+            // DeviceStatusInfo
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(478, 373);
+            this.Controls.Add(this.groupControl3);
+            this.Controls.Add(this.groupControl2);
+            this.Controls.Add(this.groupControl1);
+            this.FormBorderEffect = DevExpress.XtraEditors.FormBorderEffect.None;
+            this.KeyPreview = true;
+            this.MaximizeBox = false;
+            this.Name = "DeviceStatusInfo";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = " ";
+            this.Load += new System.EventHandler(this.DeviceStatusInfo_Load);
+            this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.DeviceStatusInfo_KeyDown);
+            ((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit();
+            this.groupControl1.ResumeLayout(false);
+            this.groupControl1.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.groupControl2)).EndInit();
+            this.groupControl2.ResumeLayout(false);
+            this.groupControl2.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.groupControl3)).EndInit();
+            this.groupControl3.ResumeLayout(false);
+            this.groupControl3.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.GroupControl groupControl1;
+        private DevExpress.XtraEditors.GroupControl groupControl2;
+        private DevExpress.XtraEditors.LabelControl labelControl4;
+        private DevExpress.XtraEditors.LabelControl labelControl3;
+        private DevExpress.XtraEditors.LabelControl labelControl2;
+        private DevExpress.XtraEditors.LabelControl labelControl1;
+        private DevExpress.XtraEditors.LabelControl labelControl5;
+        private DevExpress.XtraEditors.LabelControl labelControl6;
+        private DevExpress.XtraEditors.LabelControl labelControl8;
+        private DevExpress.XtraEditors.LabelControl labelControl7;
+        private DevExpress.XtraEditors.LabelControl labelControl11;
+        private DevExpress.XtraEditors.LabelControl labelControl12;
+        private DevExpress.XtraEditors.LabelControl labelControl10;
+        private DevExpress.XtraEditors.LabelControl labelControl9;
+        private ValueLabel dpg_starttime;
+        private DevExpress.XtraEditors.LabelControl labelControl14;
+        private ValueLabel dpg_senddatasize;
+        private ValueLabel dpg_receivedatasize;
+        private ValueLabel dpg_count;
+        private DevExpress.XtraEditors.GroupControl groupControl3;
+        private ValueLabel de_linecode;
+        private ValueLabel de_address;
+        private ValueLabel de_wccode;
+        private ValueLabel de_name;
+        private ValueLabel dpg_runtime;
+    }
+}

+ 55 - 0
PLCDataReader/Device/Information/DeviceStatusInfo.cs

@@ -0,0 +1,55 @@
+using System;
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.DataOperate;
+using UAS_PLCDataReader.Entity;
+using System.Data;
+using System.Text;
+using UAS_PLCDataReader.PublicMethod;
+using System.Windows.Forms;
+
+namespace UAS_PLCDataReader.Device.Infomation
+{
+    public partial class DeviceStatusInfo : XtraForm
+    {
+        DataHelper dh = SystemInf.dh;
+
+        StringBuilder sql = new StringBuilder();
+
+        string de_code = "";
+
+        public DeviceStatusInfo()
+        {
+            InitializeComponent();
+        }
+
+        public DeviceStatusInfo(string DevcieCode)
+        {
+            InitializeComponent();
+            de_code = DevcieCode;
+            Text = DevcieCode;
+        }
+
+        private void DeviceStatusInfo_Load(object sender, EventArgs e)
+        {
+            sql.Clear();
+            sql.Append("select de_linecode,de_wccode,de_name,de_address from device ");
+            sql.Append("where de_code='" + de_code + "'");
+            DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
+            if (dt.Rows.Count > 0)
+            {
+                BaseUtil.SetFormValue(Controls, dt);
+            }
+            dt = (DataTable)dh.ExecuteSql("select dpg_count,round((sysdate-dpg_starttime)*1440)||'分钟' dpg_runtime,dpg_starttime,dpg_senddatasize,dpg_receivedatasize from DEVICEPOLLINGLOG where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + de_code + "') and dpg_status='Running'", "select");
+            if (dt.Rows.Count > 0)
+            {
+                BaseUtil.SetFormValue(Controls, dt);
+            }
+        }
+
+        private void DeviceStatusInfo_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode == Keys.Escape)
+                Close();
+        }
+    }
+}

+ 120 - 0
PLCDataReader/Device/Information/DeviceStatusInfo.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>

+ 146 - 0
PLCDataReader/Entity/Polling.cs

@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using UAS_PLCDataReader.DataOperate;
+
+namespace UAS_PLCDataReader.Entity
+{
+    class Polling
+    {
+        private string sendRadix;
+
+        private string deviceCode;
+
+        private string iP;
+
+        private string port;
+
+        private int interval;
+
+        private int id;
+
+        private bool enable;
+
+        private DataHelper dh;
+
+        private string commandCode;
+
+        public string DeviceCode
+        {
+            get
+            {
+                return deviceCode;
+            }
+
+            set
+            {
+                deviceCode = value;
+            }
+        }
+
+        public string IP
+        {
+            get
+            {
+                return iP;
+            }
+
+            set
+            {
+                iP = value;
+            }
+        }
+
+        public string Port
+        {
+            get
+            {
+                return port;
+            }
+
+            set
+            {
+                port = value;
+            }
+        }
+
+        public int Interval
+        {
+            get
+            {
+                return interval;
+            }
+
+            set
+            {
+                interval = value;
+            }
+        }
+
+        public bool Enable
+        {
+            get
+            {
+                return enable;
+            }
+
+            set
+            {
+                enable = value;
+            }
+        }
+
+        public int Id
+        {
+            get
+            {
+                return id;
+            }
+
+            set
+            {
+                id = value;
+            }
+        }
+
+        public DataHelper Dh
+        {
+            get
+            {
+                return dh;
+            }
+
+            set
+            {
+                dh = value;
+            }
+        }
+
+        public string SendRadix
+        {
+            get
+            {
+                return sendRadix;
+            }
+
+            set
+            {
+                sendRadix = value;
+            }
+        }
+
+        public string CommandCode
+        {
+            get
+            {
+                return commandCode;
+            }
+
+            set
+            {
+                commandCode = value;
+            }
+        }
+    }
+}

+ 41 - 0
PLCDataReader/Entity/SocketObject.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Sockets;
+using System.Text;
+
+namespace UAS_PLCDataReader.Entity
+{
+    class SocketObject
+    {
+        private Socket socket;
+
+        private string receiveCoding;
+
+        public Socket Socket
+        {
+            get
+            {
+                return socket;
+            }
+
+            set
+            {
+                socket = value;
+            }
+        }
+
+        public string ReceiveCoding
+        {
+            get
+            {
+                return receiveCoding;
+            }
+
+            set
+            {
+                receiveCoding = value;
+            }
+        }
+    }
+}

+ 47 - 0
PLCDataReader/Entity/SystemInf.cs

@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+
+namespace UAS_PLCDataReader.Entity
+{
+    class SystemInf
+    {
+        /// <summary>
+        /// 当前岗位资源对应的Caller
+        /// </summary>
+        public static Dictionary<string, Dictionary<string, bool>> Caller = new Dictionary<string, Dictionary<string, bool>>();
+        /// <summary>
+        /// 打开的串口的名称
+        /// </summary>
+        public static List<string> OpenPort=new List<string>();
+        /// <summary>
+        /// 检测音频是否可用
+        /// </summary>
+        public static bool CheckAudioEnable=true;
+        /// <summary>
+        /// 导航宽度
+        /// </summary>
+        public static int NavWidth = 0;
+        /// <summary>
+        /// HeadBar的高度
+        /// </summary>
+        public static int HeadBarHeight = 0;
+        /// <summary>
+        /// 缓存数据的文件夹
+        /// </summary>
+        public static string CacheFolder= Environment.GetEnvironmentVariable("windir").Substring(0, 1)+@":\UAS_MES\CacheFile\";
+        /// <summary>
+        /// 日志文件的缓存路径
+        /// </summary>
+        public static string LogFolder = Environment.GetEnvironmentVariable("windir").Substring(0, 1) + @":\UAS_MES\Log\";
+        /// <summary>
+        /// 缓存的XML文件的路径和名称
+        /// </summary>
+        public static string CacheFilePath= Environment.GetEnvironmentVariable("windir").Substring(0, 1) + @":\UAS_MES\CacheFile\CacheInfo.xml";
+
+        public static bool UpperCollection = true;
+
+        public static DataOperate.DataHelper dh;
+
+        public static string CheckedColumnName = "CHECKEDCOLUMN";
+    }
+}

+ 67 - 0
PLCDataReader/Entity/User.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UAS_PLCDataReader.Entity
+{
+    class User
+    {
+        /// <summary>
+        /// 用户姓名
+        /// </summary>
+        public static string UserName; //  姓名 em_name
+        /// <summary>
+        /// 用户编号
+        /// </summary>
+        public static string UserCode; //  工号 em_code
+        /// <summary>
+        /// 用户岗位
+        /// </summary>
+        public static string UserPosition;//岗位 em_position
+        /// <summary>
+        /// 当前工序编号
+        /// </summary>
+        public static string CurrentStepCode;//工序 sc_stepcode
+        /// <summary>
+        /// 当前工序名称
+        /// </summary>
+        public static string CurrentStepName;//工序名称
+        /// <summary>
+        /// 用户部门
+        /// </summary>
+        public static string UserDepartment;//部门 em_depart
+        /// <summary>
+        /// 职称
+        /// </summary>
+        public static string UserProfessName;//职称 em_professname
+        /// <summary>
+        /// 用户类型,admin表示超级管理员,normal表示普通用户
+        /// </summary>
+        public static string UserAccountType;//用户类型  em_type
+        /// <summary>
+        /// 岗位资源编号
+        /// </summary>
+        public static string UserSourceCode;//岗位资源  ur_resourecode
+        /// <summary>
+        /// 用户分组
+        /// </summary>
+        public static string UserGroup;//用户分组  ug_name
+        /// <summary>
+        ///  用户分组编码
+        /// </summary>
+        public static string UserGroupCode;//用户分组编码   ug_code
+        /// <summary>
+        /// 用户所属的线别
+        /// </summary>
+        public static string UserLineCode;
+        /// <summary>
+        /// 资源所属工作中心
+        /// </summary>
+        public static string WorkCenter;
+        /// <summary>
+        /// 默认不良组别
+        /// </summary>
+        public static string DefaultBadGroup;
+    }
+}

+ 117 - 0
PLCDataReader/Login.Designer.cs

@@ -0,0 +1,117 @@
+namespace UAS_PLCDataReader
+{
+    partial class Login
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.UserName = new DevExpress.XtraEditors.TextEdit();
+            this.PassWord = new DevExpress.XtraEditors.TextEdit();
+            this.UserName_label = new DevExpress.XtraEditors.LabelControl();
+            this.PassWord_label = new DevExpress.XtraEditors.LabelControl();
+            this.LoginButton = new DevExpress.XtraEditors.SimpleButton();
+            ((System.ComponentModel.ISupportInitialize)(this.UserName.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PassWord.Properties)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // UserName
+            // 
+            this.UserName.Location = new System.Drawing.Point(144, 66);
+            this.UserName.Name = "UserName";
+            this.UserName.Properties.Appearance.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.UserName.Properties.Appearance.Options.UseFont = true;
+            this.UserName.Size = new System.Drawing.Size(145, 28);
+            this.UserName.TabIndex = 0;
+            // 
+            // PassWord
+            // 
+            this.PassWord.Location = new System.Drawing.Point(144, 114);
+            this.PassWord.Name = "PassWord";
+            this.PassWord.Properties.Appearance.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.PassWord.Properties.Appearance.Options.UseFont = true;
+            this.PassWord.Properties.PasswordChar = '*';
+            this.PassWord.Size = new System.Drawing.Size(145, 28);
+            this.PassWord.TabIndex = 1;
+            this.PassWord.KeyDown += new System.Windows.Forms.KeyEventHandler(this.PassWord_KeyDown);
+            // 
+            // UserName_label
+            // 
+            this.UserName_label.Appearance.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.UserName_label.Location = new System.Drawing.Point(71, 69);
+            this.UserName_label.Name = "UserName_label";
+            this.UserName_label.Size = new System.Drawing.Size(48, 21);
+            this.UserName_label.TabIndex = 2;
+            this.UserName_label.Text = "用户名";
+            // 
+            // PassWord_label
+            // 
+            this.PassWord_label.Appearance.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.PassWord_label.Location = new System.Drawing.Point(87, 117);
+            this.PassWord_label.Name = "PassWord_label";
+            this.PassWord_label.Size = new System.Drawing.Size(32, 21);
+            this.PassWord_label.TabIndex = 3;
+            this.PassWord_label.Text = "密码";
+            // 
+            // LoginButton
+            // 
+            this.LoginButton.Location = new System.Drawing.Point(171, 184);
+            this.LoginButton.Name = "LoginButton";
+            this.LoginButton.Size = new System.Drawing.Size(75, 23);
+            this.LoginButton.TabIndex = 4;
+            this.LoginButton.Text = "登录";
+            this.LoginButton.Click += new System.EventHandler(this.LoginButton_Click);
+            // 
+            // Login
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(414, 245);
+            this.Controls.Add(this.LoginButton);
+            this.Controls.Add(this.PassWord_label);
+            this.Controls.Add(this.UserName_label);
+            this.Controls.Add(this.PassWord);
+            this.Controls.Add(this.UserName);
+            this.FormBorderEffect = DevExpress.XtraEditors.FormBorderEffect.None;
+            this.Name = "Login";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+            this.Text = " 设备管理平台";
+            this.Load += new System.EventHandler(this.Login_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.UserName.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PassWord.Properties)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.TextEdit UserName;
+        private DevExpress.XtraEditors.TextEdit PassWord;
+        private DevExpress.XtraEditors.LabelControl UserName_label;
+        private DevExpress.XtraEditors.LabelControl PassWord_label;
+        private DevExpress.XtraEditors.SimpleButton LoginButton;
+    }
+}

+ 71 - 0
PLCDataReader/Login.cs

@@ -0,0 +1,71 @@
+using System;
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.Entity;
+using System.Data;
+using UAS_PLCDataReader.DataOperate;
+using UAS_PLCDataReader.PublicMethod;
+
+namespace UAS_PLCDataReader
+{
+    public partial class Login : XtraForm
+    {
+        DataHelper dh = new DataHelper();
+
+        public DataTable UserInf { get; private set; }
+
+        public Login()
+        {
+            InitializeComponent();
+        }
+
+        private void Login_Load(object sender, EventArgs e)
+        {
+            SystemInf.dh = dh;
+        }
+
+        private void LoginButton_Click(object sender, EventArgs e)
+        {
+            if (UserName.Text != "" && PassWord.Text != "")
+            {
+                string oErrMessage = "";
+                if (LogicHandler.CheckUserLogin(UserName.Text, PassWord.Text, out oErrMessage))
+                {
+                    SetInf();
+                    Main main = new Main();
+                    Hide();
+                    main.ShowDialog();
+                    Close();
+                }
+                else XtraMessageBox.Show(oErrMessage);
+            }
+            else XtraMessageBox.Show("用户名和密码不能为空!");
+        }
+
+        /// <summary>
+        ///设置User类的全局变量,类似于Session
+        /// </summary>
+        private void SetInf()
+        {
+            //设置全局用户信息
+            string[] field = { "em_code,em_depart,em_type,em_name,em_position,em_professname,em_type,ug_code,ug_name" };
+            UserInf = dh.getFieldsDataByCondition("Employee left join cs$userresource on ur_emcode=em_code left join cs$usergroup on ug_code=ur_groupcode", field, "upper(em_code)='" + UserName.Text.ToUpper() + "'");
+            //通过Source表关联岗位资源编号查询出当前的执行工序
+            User.UserCode = UserInf.Rows[0]["em_code"].ToString();
+            User.UserDepartment = UserInf.Rows[0]["em_depart"].ToString();
+            User.UserName = UserInf.Rows[0]["em_name"].ToString();
+            User.UserPosition = UserInf.Rows[0]["em_position"].ToString();
+            User.UserProfessName = UserInf.Rows[0]["em_professname"].ToString();
+            User.UserAccountType = UserInf.Rows[0]["em_type"].ToString();
+            User.UserGroupCode = UserInf.Rows[0]["ug_code"].ToString();
+            User.UserGroup = UserInf.Rows[0]["ug_name"].ToString();
+        }
+
+        private void PassWord_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
+        {
+            if (e.KeyCode == System.Windows.Forms.Keys.Enter)
+            {
+                LoginButton.PerformClick();
+            }
+        }
+    }
+}

+ 120 - 0
PLCDataReader/Login.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>

+ 1785 - 0
PLCDataReader/Main.Designer.cs

@@ -0,0 +1,1785 @@
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.CustomerControl.AutoDataGridControl;
+using UAS_PLCDataReader.CustomerControl;
+using UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum;
+
+namespace UAS_PLCDataReader 
+{
+    partial class Main
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
+            this.RibbonNav = new DevExpress.XtraBars.Ribbon.RibbonControl();
+            this.ButtonDeviceList = new DevExpress.XtraBars.BarButtonItem();
+            this.ButtonDeviceNetSetting = new DevExpress.XtraBars.BarButtonItem();
+            this.ButtonCommandSet = new DevExpress.XtraBars.BarButtonItem();
+            this.ButtonPollingSetting = new DevExpress.XtraBars.BarButtonItem();
+            this.ButtionPolling = new DevExpress.XtraBars.BarButtonItem();
+            this.ButtonDeviceStatus = new DevExpress.XtraBars.BarButtonItem();
+            this.ButtonWorkCenterStatus = new DevExpress.XtraBars.BarButtonItem();
+            this.DeviceInf = new DevExpress.XtraBars.Ribbon.RibbonPage();
+            this.RibDeviceInf = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+            this.DeviceCommandSetting = new DevExpress.XtraBars.Ribbon.RibbonPage();
+            this.RibDeviceCommand = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+            this.MainTabControl = new DevExpress.XtraTab.XtraTabControl();
+            this.PageDeviceList = new DevExpress.XtraTab.XtraTabPage();
+            this.ButtonAddDevice = new UAS_PLCDataReader.CustomerControl.Button.ButtonAddRow();
+            this.ButtonDeleteDevice = new UAS_PLCDataReader.CustomerControl.Button.ButtonDeleteRow();
+            this.ButtonSaveDevice = new UAS_PLCDataReader.CustomerControl.Button.ButtonSaveGrid();
+            this.ComBoxDeviceListMan = new DevExpress.XtraEditors.SearchLookUpEdit();
+            this.searchLookUpEdit1View = new DevExpress.XtraGrid.Views.Grid.GridView();
+            this.em_code = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.em_name = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.ComBoxDeviceListMan_label = new DevExpress.XtraEditors.LabelControl();
+            this.ComboxDeviceListWC = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.ComboxDeviceListLC = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.ComboxDeviceListLC_label = new DevExpress.XtraEditors.LabelControl();
+            this.ComboxDeviceListWC_label = new DevExpress.XtraEditors.LabelControl();
+            this.GridDeviceList = new UAS_PLCDataReader.CustomerControl.AutoDataGridControl.AutoDataGridControl();
+            this.GridViewDeviceList = new UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum.GridViewWithSerialNum();
+            this.DeviceListCheckedColumn = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_enableCheckEdit = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit();
+            this.de_id = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_code = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_name = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_runstatus = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_stepcode = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_stepname = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_indate = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_spec = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_inman = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_vendcode = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_vendname = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_address = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_linecode = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.de_wccode = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.PageCommandSet = new DevExpress.XtraTab.XtraTabPage();
+            this.ButtonDeleteCommand = new UAS_PLCDataReader.CustomerControl.Button.ButtonDeleteRow();
+            this.Brand_label = new DevExpress.XtraEditors.LabelControl();
+            this.Brand = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.ButtonNewCommand = new UAS_PLCDataReader.CustomerControl.Button.ButtonAddRow();
+            this.ButtonSaveCommand = new UAS_PLCDataReader.CustomerControl.Button.ButtonSaveGrid();
+            this.GridCommandSetting = new UAS_PLCDataReader.CustomerControl.AutoDataGridControl.AutoDataGridControl();
+            this.GridViewCommandSet = new UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum.GridViewWithSerialNum();
+            this.CommandSetCheckedColumn = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.CheckEditCommandSet = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit();
+            this.dc_id = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dc_code = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dc_name = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dc_type = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dc_value = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dc_sendcoding = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.CommandSetRepositoryItemComboBox1 = new DevExpress.XtraEditors.Repository.RepositoryItemComboBox();
+            this.dc_receivecoding = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dc_man = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dc_date = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.db_name = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.PageDeviceNetSetting = new DevExpress.XtraTab.XtraTabPage();
+            this.ButtonDeleteNetConfig = new UAS_PLCDataReader.CustomerControl.Button.ButtonDeleteRow();
+            this.ButtonAddNetConfig = new UAS_PLCDataReader.CustomerControl.Button.ButtonAddRow();
+            this.ButtonSaveNetConfig = new UAS_PLCDataReader.CustomerControl.Button.ButtonSaveGrid();
+            this.GridDeviceNetSetting = new UAS_PLCDataReader.CustomerControl.AutoDataGridControl.AutoDataGridControl();
+            this.GridViewDeviceNetSetting = new UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum.GridViewWithSerialNum();
+            this.NetSettingCheckedColumn = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dnc_id = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dnc_decode = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dnc_getway = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dnc_upperip = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dnc_port = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dnc_mac = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dnc_ip = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dnc_type = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.PagePollingSetting = new DevExpress.XtraTab.XtraTabPage();
+            this.ButtonDeleteCommandSet = new UAS_PLCDataReader.CustomerControl.Button.ButtonDeleteRow();
+            this.ButtonNewCommandSet = new UAS_PLCDataReader.CustomerControl.Button.ButtonAddRow();
+            this.ButtonSaveCommandSet = new UAS_PLCDataReader.CustomerControl.Button.ButtonSaveGrid();
+            this.ButtonPausePolling = new DevExpress.XtraEditors.SimpleButton();
+            this.ButtonStartPolling = new DevExpress.XtraEditors.SimpleButton();
+            this.GridPollingSetting = new UAS_PLCDataReader.CustomerControl.AutoDataGridControl.AutoDataGridControl();
+            this.GridViewPollSetting = new UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum.GridViewWithSerialNum();
+            this.PollSettingCheckedColumn = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_id = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_decode = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_interval = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_dccode = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.PollSettingItemSearchLookUpEdit = new DevExpress.XtraEditors.Repository.RepositoryItemSearchLookUpEdit();
+            this.PollSettingItemSearchLookUpEditView = new DevExpress.XtraGrid.Views.Grid.GridView();
+            this.gridColumn4 = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.gridColumn2 = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.gridColumn5 = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_function = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_enable = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.em_name1 = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_status = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_man = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.dpc_remark = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.POLLSETTINGSTATUSCOLUMN = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.PollingSetItemLookUpEdit = new DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit();
+            this.PagePolling = new DevExpress.XtraTab.XtraTabPage();
+            this.ButtonAddPolling = new UAS_PLCDataReader.CustomerControl.Button.ButtonAddRow();
+            this.ButtonDeletePolling = new UAS_PLCDataReader.CustomerControl.Button.ButtonDeleteRow();
+            this.ButtonSavePolling = new UAS_PLCDataReader.CustomerControl.Button.ButtonSaveGrid();
+            this.GridPolling = new UAS_PLCDataReader.CustomerControl.AutoDataGridControl.AutoDataGridControl();
+            this.GridViewPolling = new UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum.GridViewWithSerialNum();
+            this.PollingCheckedColumn = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.pl_id = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.pl_code = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.pl_name = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.pl_type = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.pl_dccode = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.pl_remark = new DevExpress.XtraGrid.Columns.GridColumn();
+            this.PageDeviceStatus = new DevExpress.XtraTab.XtraTabPage();
+            this.ComboxDeviceStatusWC = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.ComboxDeviceStatusLC = new DevExpress.XtraEditors.ComboBoxEdit();
+            this.CheckEditDeviceStatusEnable = new DevExpress.XtraEditors.CheckEdit();
+            this.ComboxDeviceStatusLC_label = new DevExpress.XtraEditors.LabelControl();
+            this.ComboxDeviceStatusWC_label = new DevExpress.XtraEditors.LabelControl();
+            this.PanelDeviceStatus = new DevExpress.XtraEditors.XtraScrollableControl();
+            this.PageWorkCenterStatus = new DevExpress.XtraTab.XtraTabPage();
+            this.GridWorkCenterStatus = new UAS_PLCDataReader.CustomerControl.AutoDataGridControl.AutoDataGridControl();
+            this.GridViewWorkCenterStatus = new UAS_PLCDataReader.CustomerControl.GridViewWithSerialNum.GridViewWithSerialNum();
+            this.TimerDeviceStatus = new System.Windows.Forms.Timer(this.components);
+            this.CommonTipController = new DevExpress.Utils.ToolTipController(this.components);
+            ((System.ComponentModel.ISupportInitialize)(this.RibbonNav)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.MainTabControl)).BeginInit();
+            this.MainTabControl.SuspendLayout();
+            this.PageDeviceList.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ComBoxDeviceListMan.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.searchLookUpEdit1View)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboxDeviceListWC.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboxDeviceListLC.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridDeviceList)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewDeviceList)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dpc_enableCheckEdit)).BeginInit();
+            this.PageCommandSet.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.Brand.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridCommandSetting)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewCommandSet)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CheckEditCommandSet)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CommandSetRepositoryItemComboBox1)).BeginInit();
+            this.PageDeviceNetSetting.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.GridDeviceNetSetting)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewDeviceNetSetting)).BeginInit();
+            this.PagePollingSetting.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.GridPollingSetting)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewPollSetting)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PollSettingItemSearchLookUpEdit)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PollSettingItemSearchLookUpEditView)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PollingSetItemLookUpEdit)).BeginInit();
+            this.PagePolling.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.GridPolling)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewPolling)).BeginInit();
+            this.PageDeviceStatus.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboxDeviceStatusWC.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboxDeviceStatusLC.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CheckEditDeviceStatusEnable.Properties)).BeginInit();
+            this.PageWorkCenterStatus.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.GridWorkCenterStatus)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewWorkCenterStatus)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // RibbonNav
+            // 
+            this.RibbonNav.ApplicationIcon = global::UAS_PLCDataReader.Properties.Resources.U_Letter_72px_1121581_easyicon_net;
+            this.RibbonNav.DrawGroupCaptions = DevExpress.Utils.DefaultBoolean.False;
+            this.RibbonNav.ExpandCollapseItem.Id = 0;
+            this.RibbonNav.Items.AddRange(new DevExpress.XtraBars.BarItem[] {
+            this.RibbonNav.ExpandCollapseItem,
+            this.ButtonDeviceList,
+            this.ButtonDeviceNetSetting,
+            this.ButtonCommandSet,
+            this.ButtonPollingSetting,
+            this.ButtionPolling,
+            this.ButtonDeviceStatus,
+            this.ButtonWorkCenterStatus});
+            this.RibbonNav.Location = new System.Drawing.Point(0, 0);
+            this.RibbonNav.MaxItemId = 15;
+            this.RibbonNav.Name = "RibbonNav";
+            this.RibbonNav.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] {
+            this.DeviceInf,
+            this.DeviceCommandSetting});
+            this.RibbonNav.Size = new System.Drawing.Size(1033, 128);
+            // 
+            // ButtonDeviceList
+            // 
+            this.ButtonDeviceList.Caption = "设备主档资料";
+            this.ButtonDeviceList.Id = 5;
+            this.ButtonDeviceList.LargeGlyph = global::UAS_PLCDataReader.Properties.Resources.netstatus_tx_64px_18991_easyicon_net;
+            this.ButtonDeviceList.Name = "ButtonDeviceList";
+            this.ButtonDeviceList.Tag = "PageDeviceList";
+            this.ButtonDeviceList.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.ButtonItem_ItemClick);
+            // 
+            // ButtonDeviceNetSetting
+            // 
+            this.ButtonDeviceNetSetting.Caption = "设备联网配置";
+            this.ButtonDeviceNetSetting.Glyph = ((System.Drawing.Image)(resources.GetObject("ButtonDeviceNetSetting.Glyph")));
+            this.ButtonDeviceNetSetting.Id = 8;
+            this.ButtonDeviceNetSetting.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("ButtonDeviceNetSetting.LargeGlyph")));
+            this.ButtonDeviceNetSetting.Name = "ButtonDeviceNetSetting";
+            this.ButtonDeviceNetSetting.Tag = "PageDeviceNetSetting";
+            this.ButtonDeviceNetSetting.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.ButtonItem_ItemClick);
+            // 
+            // ButtonCommandSet
+            // 
+            this.ButtonCommandSet.Caption = "设备指令设置";
+            this.ButtonCommandSet.Glyph = ((System.Drawing.Image)(resources.GetObject("ButtonCommandSet.Glyph")));
+            this.ButtonCommandSet.Id = 9;
+            this.ButtonCommandSet.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("ButtonCommandSet.LargeGlyph")));
+            this.ButtonCommandSet.Name = "ButtonCommandSet";
+            this.ButtonCommandSet.Tag = "PageCommandSet";
+            this.ButtonCommandSet.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.ButtonItem_ItemClick);
+            // 
+            // ButtonPollingSetting
+            // 
+            this.ButtonPollingSetting.Caption = "设备轮询配置";
+            this.ButtonPollingSetting.Glyph = ((System.Drawing.Image)(resources.GetObject("ButtonPollingSetting.Glyph")));
+            this.ButtonPollingSetting.Id = 11;
+            this.ButtonPollingSetting.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("ButtonPollingSetting.LargeGlyph")));
+            this.ButtonPollingSetting.Name = "ButtonPollingSetting";
+            this.ButtonPollingSetting.Tag = "PagePollingSetting";
+            this.ButtonPollingSetting.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.ButtonItem_ItemClick);
+            // 
+            // ButtionPolling
+            // 
+            this.ButtionPolling.Caption = "轮询业务定义";
+            this.ButtionPolling.Glyph = ((System.Drawing.Image)(resources.GetObject("ButtionPolling.Glyph")));
+            this.ButtionPolling.Id = 12;
+            this.ButtionPolling.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("ButtionPolling.LargeGlyph")));
+            this.ButtionPolling.Name = "ButtionPolling";
+            this.ButtionPolling.Tag = "PagePolling";
+            this.ButtionPolling.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.ButtonItem_ItemClick);
+            // 
+            // ButtonDeviceStatus
+            // 
+            this.ButtonDeviceStatus.Caption = "设备运行监控";
+            this.ButtonDeviceStatus.Glyph = ((System.Drawing.Image)(resources.GetObject("ButtonDeviceStatus.Glyph")));
+            this.ButtonDeviceStatus.Id = 13;
+            this.ButtonDeviceStatus.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("ButtonDeviceStatus.LargeGlyph")));
+            this.ButtonDeviceStatus.Name = "ButtonDeviceStatus";
+            this.ButtonDeviceStatus.Tag = "PageDeviceStatus";
+            this.ButtonDeviceStatus.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.ButtonItem_ItemClick);
+            // 
+            // ButtonWorkCenterStatus
+            // 
+            this.ButtonWorkCenterStatus.Caption = "车间全局监控";
+            this.ButtonWorkCenterStatus.Glyph = ((System.Drawing.Image)(resources.GetObject("ButtonWorkCenterStatus.Glyph")));
+            this.ButtonWorkCenterStatus.Id = 14;
+            this.ButtonWorkCenterStatus.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("ButtonWorkCenterStatus.LargeGlyph")));
+            this.ButtonWorkCenterStatus.Name = "ButtonWorkCenterStatus";
+            this.ButtonWorkCenterStatus.Tag = "PageWorkCenterStatus";
+            this.ButtonWorkCenterStatus.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.ButtonItem_ItemClick);
+            // 
+            // DeviceInf
+            // 
+            this.DeviceInf.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
+            this.RibDeviceInf});
+            this.DeviceInf.Name = "DeviceInf";
+            this.DeviceInf.Text = "设备参数配置";
+            // 
+            // RibDeviceInf
+            // 
+            this.RibDeviceInf.AllowTextClipping = false;
+            this.RibDeviceInf.ItemLinks.Add(this.ButtonCommandSet, true);
+            this.RibDeviceInf.ItemLinks.Add(this.ButtonDeviceList);
+            this.RibDeviceInf.ItemLinks.Add(this.ButtonDeviceNetSetting);
+            this.RibDeviceInf.ItemLinks.Add(this.ButtonPollingSetting);
+            this.RibDeviceInf.Name = "RibDeviceInf";
+            this.RibDeviceInf.ShowCaptionButton = false;
+            // 
+            // DeviceCommandSetting
+            // 
+            this.DeviceCommandSetting.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] {
+            this.RibDeviceCommand});
+            this.DeviceCommandSetting.Name = "DeviceCommandSetting";
+            this.DeviceCommandSetting.Text = "设备运行监控";
+            // 
+            // RibDeviceCommand
+            // 
+            this.RibDeviceCommand.ItemLinks.Add(this.ButtonDeviceStatus);
+            this.RibDeviceCommand.Name = "RibDeviceCommand";
+            this.RibDeviceCommand.Text = "ribbonPageGroup3";
+            // 
+            // MainTabControl
+            // 
+            this.MainTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.MainTabControl.Location = new System.Drawing.Point(0, 128);
+            this.MainTabControl.Name = "MainTabControl";
+            this.MainTabControl.SelectedTabPage = this.PageDeviceList;
+            this.MainTabControl.ShowTabHeader = DevExpress.Utils.DefaultBoolean.False;
+            this.MainTabControl.Size = new System.Drawing.Size(1033, 583);
+            this.MainTabControl.TabIndex = 3;
+            this.MainTabControl.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] {
+            this.PageDeviceList,
+            this.PageCommandSet,
+            this.PageDeviceNetSetting,
+            this.PagePollingSetting,
+            this.PagePolling,
+            this.PageDeviceStatus,
+            this.PageWorkCenterStatus});
+            // 
+            // PageDeviceList
+            // 
+            this.PageDeviceList.Controls.Add(this.ButtonAddDevice);
+            this.PageDeviceList.Controls.Add(this.ButtonDeleteDevice);
+            this.PageDeviceList.Controls.Add(this.ButtonSaveDevice);
+            this.PageDeviceList.Controls.Add(this.ComBoxDeviceListMan);
+            this.PageDeviceList.Controls.Add(this.ComBoxDeviceListMan_label);
+            this.PageDeviceList.Controls.Add(this.ComboxDeviceListWC);
+            this.PageDeviceList.Controls.Add(this.ComboxDeviceListLC);
+            this.PageDeviceList.Controls.Add(this.ComboxDeviceListLC_label);
+            this.PageDeviceList.Controls.Add(this.ComboxDeviceListWC_label);
+            this.PageDeviceList.Controls.Add(this.GridDeviceList);
+            this.PageDeviceList.Name = "PageDeviceList";
+            this.PageDeviceList.PageVisible = false;
+            this.PageDeviceList.Size = new System.Drawing.Size(1027, 577);
+            this.PageDeviceList.Text = "xtraTabPage1";
+            this.PageDeviceList.VisibleChanged += new System.EventHandler(this.PageDeviceList_VisibleChanged);
+            // 
+            // ButtonAddDevice
+            // 
+            this.ButtonAddDevice.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonAddDevice.Grid = null;
+            this.ButtonAddDevice.Location = new System.Drawing.Point(811, 4);
+            this.ButtonAddDevice.Name = "ButtonAddDevice";
+            this.ButtonAddDevice.Size = new System.Drawing.Size(64, 23);
+            this.ButtonAddDevice.TabIndex = 16;
+            this.ButtonAddDevice.Text = "新增";
+            // 
+            // ButtonDeleteDevice
+            // 
+            this.ButtonDeleteDevice.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonDeleteDevice.Grid = null;
+            this.ButtonDeleteDevice.Location = new System.Drawing.Point(951, 4);
+            this.ButtonDeleteDevice.Name = "ButtonDeleteDevice";
+            this.ButtonDeleteDevice.Size = new System.Drawing.Size(64, 23);
+            this.ButtonDeleteDevice.TabIndex = 15;
+            this.ButtonDeleteDevice.Text = "删除";
+            // 
+            // ButtonSaveDevice
+            // 
+            this.ButtonSaveDevice.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonSaveDevice.Grid = null;
+            this.ButtonSaveDevice.HandlerOtherFirst = true;
+            this.ButtonSaveDevice.Location = new System.Drawing.Point(881, 4);
+            this.ButtonSaveDevice.Name = "ButtonSaveDevice";
+            this.ButtonSaveDevice.Size = new System.Drawing.Size(64, 23);
+            this.ButtonSaveDevice.TabIndex = 14;
+            this.ButtonSaveDevice.Text = "保存";
+            this.ButtonSaveDevice.Click += new System.EventHandler(this.ButtonSaveDevice_Click);
+            // 
+            // ComBoxDeviceListMan
+            // 
+            this.ComBoxDeviceListMan.EditValue = "";
+            this.ComBoxDeviceListMan.Location = new System.Drawing.Point(360, 5);
+            this.ComBoxDeviceListMan.MenuManager = this.RibbonNav;
+            this.ComBoxDeviceListMan.Name = "ComBoxDeviceListMan";
+            this.ComBoxDeviceListMan.Properties.Appearance.Font = new System.Drawing.Font("微软雅黑", 8F);
+            this.ComBoxDeviceListMan.Properties.Appearance.Options.UseFont = true;
+            this.ComBoxDeviceListMan.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.ComBoxDeviceListMan.Properties.DisplayMember = "EM_NAME";
+            this.ComBoxDeviceListMan.Properties.NullText = "";
+            this.ComBoxDeviceListMan.Properties.ValueMember = "EM_CODE";
+            this.ComBoxDeviceListMan.Properties.View = this.searchLookUpEdit1View;
+            this.ComBoxDeviceListMan.Size = new System.Drawing.Size(100, 22);
+            this.ComBoxDeviceListMan.TabIndex = 12;
+            this.ComBoxDeviceListMan.Visible = false;
+            this.ComBoxDeviceListMan.EditValueChanged += new System.EventHandler(this.ComBoxDeviceListMan_EditValueChanged);
+            // 
+            // searchLookUpEdit1View
+            // 
+            this.searchLookUpEdit1View.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+            this.em_code,
+            this.em_name});
+            this.searchLookUpEdit1View.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
+            this.searchLookUpEdit1View.Name = "searchLookUpEdit1View";
+            this.searchLookUpEdit1View.OptionsSelection.EnableAppearanceFocusedCell = false;
+            this.searchLookUpEdit1View.OptionsView.ShowGroupPanel = false;
+            // 
+            // em_code
+            // 
+            this.em_code.Caption = "编号";
+            this.em_code.FieldName = "EM_CODE";
+            this.em_code.Name = "em_code";
+            this.em_code.Visible = true;
+            this.em_code.VisibleIndex = 0;
+            // 
+            // em_name
+            // 
+            this.em_name.Caption = "名称";
+            this.em_name.FieldName = "EM_NAME";
+            this.em_name.Name = "em_name";
+            this.em_name.Visible = true;
+            this.em_name.VisibleIndex = 1;
+            // 
+            // ComBoxDeviceListMan_label
+            // 
+            this.ComBoxDeviceListMan_label.Appearance.Font = new System.Drawing.Font("黑体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.ComBoxDeviceListMan_label.Location = new System.Drawing.Point(318, 8);
+            this.ComBoxDeviceListMan_label.Name = "ComBoxDeviceListMan_label";
+            this.ComBoxDeviceListMan_label.Size = new System.Drawing.Size(32, 16);
+            this.ComBoxDeviceListMan_label.TabIndex = 11;
+            this.ComBoxDeviceListMan_label.Text = "人员";
+            this.ComBoxDeviceListMan_label.Visible = false;
+            // 
+            // ComboxDeviceListWC
+            // 
+            this.ComboxDeviceListWC.Location = new System.Drawing.Point(49, 5);
+            this.ComboxDeviceListWC.MenuManager = this.RibbonNav;
+            this.ComboxDeviceListWC.Name = "ComboxDeviceListWC";
+            this.ComboxDeviceListWC.Properties.Appearance.Font = new System.Drawing.Font("黑体", 11F);
+            this.ComboxDeviceListWC.Properties.Appearance.Options.UseFont = true;
+            this.ComboxDeviceListWC.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.ComboxDeviceListWC.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+            this.ComboxDeviceListWC.Size = new System.Drawing.Size(100, 22);
+            this.ComboxDeviceListWC.TabIndex = 6;
+            this.ComboxDeviceListWC.SelectedIndexChanged += new System.EventHandler(this.ComboxDeviceListWC_SelectedIndexChanged);
+            // 
+            // ComboxDeviceListLC
+            // 
+            this.ComboxDeviceListLC.Location = new System.Drawing.Point(201, 5);
+            this.ComboxDeviceListLC.MenuManager = this.RibbonNav;
+            this.ComboxDeviceListLC.Name = "ComboxDeviceListLC";
+            this.ComboxDeviceListLC.Properties.Appearance.Font = new System.Drawing.Font("黑体", 11F);
+            this.ComboxDeviceListLC.Properties.Appearance.Options.UseFont = true;
+            this.ComboxDeviceListLC.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.ComboxDeviceListLC.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+            this.ComboxDeviceListLC.Size = new System.Drawing.Size(100, 22);
+            this.ComboxDeviceListLC.TabIndex = 7;
+            this.ComboxDeviceListLC.SelectedIndexChanged += new System.EventHandler(this.ComboxDeviceListLC_SelectedIndexChanged);
+            // 
+            // ComboxDeviceListLC_label
+            // 
+            this.ComboxDeviceListLC_label.Appearance.Font = new System.Drawing.Font("黑体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.ComboxDeviceListLC_label.Location = new System.Drawing.Point(161, 8);
+            this.ComboxDeviceListLC_label.Name = "ComboxDeviceListLC_label";
+            this.ComboxDeviceListLC_label.Size = new System.Drawing.Size(32, 16);
+            this.ComboxDeviceListLC_label.TabIndex = 9;
+            this.ComboxDeviceListLC_label.Text = "线别";
+            // 
+            // ComboxDeviceListWC_label
+            // 
+            this.ComboxDeviceListWC_label.Appearance.Font = new System.Drawing.Font("黑体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.ComboxDeviceListWC_label.Location = new System.Drawing.Point(10, 8);
+            this.ComboxDeviceListWC_label.Name = "ComboxDeviceListWC_label";
+            this.ComboxDeviceListWC_label.Size = new System.Drawing.Size(32, 16);
+            this.ComboxDeviceListWC_label.TabIndex = 8;
+            this.ComboxDeviceListWC_label.Text = "车间";
+            // 
+            // GridDeviceList
+            // 
+            this.GridDeviceList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.GridDeviceList.Condition = null;
+            this.GridDeviceList.GetDataSQL = null;
+            this.GridDeviceList.ID = null;
+            this.GridDeviceList.InsertSQL = null;
+            this.GridDeviceList.Location = new System.Drawing.Point(0, 31);
+            this.GridDeviceList.MainView = this.GridViewDeviceList;
+            this.GridDeviceList.MenuManager = this.RibbonNav;
+            this.GridDeviceList.Name = "GridDeviceList";
+            this.GridDeviceList.RowCount = 0;
+            this.GridDeviceList.Size = new System.Drawing.Size(1027, 546);
+            this.GridDeviceList.TabIndex = 0;
+            this.GridDeviceList.TableName = null;
+            this.GridDeviceList.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.GridViewDeviceList});
+            // 
+            // GridViewDeviceList
+            // 
+            this.GridViewDeviceList.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+            this.DeviceListCheckedColumn,
+            this.de_id,
+            this.de_code,
+            this.de_name,
+            this.de_runstatus,
+            this.de_stepcode,
+            this.de_stepname,
+            this.de_indate,
+            this.de_spec,
+            this.de_inman,
+            this.de_vendcode,
+            this.de_vendname,
+            this.de_address,
+            this.de_linecode,
+            this.de_wccode});
+            this.GridViewDeviceList.GridControl = this.GridDeviceList;
+            this.GridViewDeviceList.IndicatorWidth = 30;
+            this.GridViewDeviceList.Name = "GridViewDeviceList";
+            this.GridViewDeviceList.OptionsView.ShowGroupPanel = false;
+            this.GridViewDeviceList.RowCellClick += new DevExpress.XtraGrid.Views.Grid.RowCellClickEventHandler(this.GridViewDeviceList_RowCellClick);
+            // 
+            // DeviceListCheckedColumn
+            // 
+            this.DeviceListCheckedColumn.Caption = " ";
+            this.DeviceListCheckedColumn.ColumnEdit = this.dpc_enableCheckEdit;
+            this.DeviceListCheckedColumn.FieldName = "CHECKEDCOLUMN";
+            this.DeviceListCheckedColumn.Name = "DeviceListCheckedColumn";
+            this.DeviceListCheckedColumn.Visible = true;
+            this.DeviceListCheckedColumn.VisibleIndex = 0;
+            // 
+            // dpc_enableCheckEdit
+            // 
+            this.dpc_enableCheckEdit.AutoHeight = false;
+            this.dpc_enableCheckEdit.Name = "dpc_enableCheckEdit";
+            this.dpc_enableCheckEdit.NullStyle = DevExpress.XtraEditors.Controls.StyleIndeterminate.Unchecked;
+            this.dpc_enableCheckEdit.NullText = "0";
+            this.dpc_enableCheckEdit.ValueChecked = "-1";
+            this.dpc_enableCheckEdit.ValueUnchecked = "0";
+            // 
+            // de_id
+            // 
+            this.de_id.Caption = "de_id";
+            this.de_id.FieldName = "DE_ID";
+            this.de_id.Name = "de_id";
+            // 
+            // de_code
+            // 
+            this.de_code.Caption = "设备编号";
+            this.de_code.FieldName = "DE_CODE";
+            this.de_code.Name = "de_code";
+            this.de_code.Visible = true;
+            this.de_code.VisibleIndex = 1;
+            // 
+            // de_name
+            // 
+            this.de_name.Caption = "设备名称";
+            this.de_name.FieldName = "DE_NAME";
+            this.de_name.Name = "de_name";
+            this.de_name.Visible = true;
+            this.de_name.VisibleIndex = 2;
+            // 
+            // de_runstatus
+            // 
+            this.de_runstatus.Caption = "运行状态";
+            this.de_runstatus.FieldName = "DE_RUNSTATUS";
+            this.de_runstatus.Name = "de_runstatus";
+            this.de_runstatus.Visible = true;
+            this.de_runstatus.VisibleIndex = 3;
+            // 
+            // de_stepcode
+            // 
+            this.de_stepcode.Caption = "工序编号";
+            this.de_stepcode.FieldName = "DE_STEPCODE";
+            this.de_stepcode.Name = "de_stepcode";
+            this.de_stepcode.Visible = true;
+            this.de_stepcode.VisibleIndex = 5;
+            // 
+            // de_stepname
+            // 
+            this.de_stepname.Caption = "工序名称";
+            this.de_stepname.FieldName = "DE_STEPNAME";
+            this.de_stepname.Name = "de_stepname";
+            this.de_stepname.Visible = true;
+            this.de_stepname.VisibleIndex = 6;
+            // 
+            // de_indate
+            // 
+            this.de_indate.Caption = "录入日期";
+            this.de_indate.DisplayFormat.FormatString = "yyyy-MM-dd";
+            this.de_indate.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
+            this.de_indate.FieldName = "DE_INDATE";
+            this.de_indate.FilterMode = DevExpress.XtraGrid.ColumnFilterMode.DisplayText;
+            this.de_indate.Name = "de_indate";
+            this.de_indate.Visible = true;
+            this.de_indate.VisibleIndex = 4;
+            // 
+            // de_spec
+            // 
+            this.de_spec.Caption = "设备规格";
+            this.de_spec.FieldName = "DE_SPEC";
+            this.de_spec.Name = "de_spec";
+            this.de_spec.Visible = true;
+            this.de_spec.VisibleIndex = 7;
+            // 
+            // de_inman
+            // 
+            this.de_inman.Caption = "维护人员";
+            this.de_inman.FieldName = "DE_INMAN";
+            this.de_inman.Name = "de_inman";
+            this.de_inman.Visible = true;
+            this.de_inman.VisibleIndex = 8;
+            // 
+            // de_vendcode
+            // 
+            this.de_vendcode.Caption = "供应商编号";
+            this.de_vendcode.FieldName = "DE_VENDCODE";
+            this.de_vendcode.Name = "de_vendcode";
+            // 
+            // de_vendname
+            // 
+            this.de_vendname.Caption = "供应商名称";
+            this.de_vendname.FieldName = "DE_VENDNAME";
+            this.de_vendname.Name = "de_vendname";
+            this.de_vendname.Visible = true;
+            this.de_vendname.VisibleIndex = 9;
+            // 
+            // de_address
+            // 
+            this.de_address.Caption = "设备地点";
+            this.de_address.FieldName = "DE_ADDRESS";
+            this.de_address.Name = "de_address";
+            this.de_address.Visible = true;
+            this.de_address.VisibleIndex = 10;
+            // 
+            // de_linecode
+            // 
+            this.de_linecode.Caption = "线别";
+            this.de_linecode.FieldName = "DE_LINECODE";
+            this.de_linecode.Name = "de_linecode";
+            this.de_linecode.Visible = true;
+            this.de_linecode.VisibleIndex = 11;
+            // 
+            // de_wccode
+            // 
+            this.de_wccode.Caption = "工作中心";
+            this.de_wccode.FieldName = "DE_WCCODE";
+            this.de_wccode.Name = "de_wccode";
+            this.de_wccode.Visible = true;
+            this.de_wccode.VisibleIndex = 12;
+            // 
+            // PageCommandSet
+            // 
+            this.PageCommandSet.Controls.Add(this.ButtonDeleteCommand);
+            this.PageCommandSet.Controls.Add(this.Brand_label);
+            this.PageCommandSet.Controls.Add(this.Brand);
+            this.PageCommandSet.Controls.Add(this.ButtonNewCommand);
+            this.PageCommandSet.Controls.Add(this.ButtonSaveCommand);
+            this.PageCommandSet.Controls.Add(this.GridCommandSetting);
+            this.PageCommandSet.Name = "PageCommandSet";
+            this.PageCommandSet.PageVisible = false;
+            this.PageCommandSet.Size = new System.Drawing.Size(1027, 577);
+            this.PageCommandSet.Text = "xtraTabPage1";
+            this.PageCommandSet.VisibleChanged += new System.EventHandler(this.PageCommandSet_VisibleChanged);
+            // 
+            // ButtonDeleteCommand
+            // 
+            this.ButtonDeleteCommand.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonDeleteCommand.Grid = null;
+            this.ButtonDeleteCommand.Location = new System.Drawing.Point(945, 5);
+            this.ButtonDeleteCommand.Name = "ButtonDeleteCommand";
+            this.ButtonDeleteCommand.Size = new System.Drawing.Size(64, 23);
+            this.ButtonDeleteCommand.TabIndex = 6;
+            this.ButtonDeleteCommand.Text = "删除";
+            // 
+            // Brand_label
+            // 
+            this.Brand_label.Appearance.Font = new System.Drawing.Font("微软雅黑", 12F);
+            this.Brand_label.Location = new System.Drawing.Point(8, 5);
+            this.Brand_label.Name = "Brand_label";
+            this.Brand_label.Size = new System.Drawing.Size(32, 21);
+            this.Brand_label.TabIndex = 5;
+            this.Brand_label.Text = "品牌";
+            // 
+            // Brand
+            // 
+            this.Brand.Location = new System.Drawing.Point(47, 4);
+            this.Brand.MenuManager = this.RibbonNav;
+            this.Brand.Name = "Brand";
+            this.Brand.Properties.Appearance.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.Brand.Properties.Appearance.Options.UseFont = true;
+            this.Brand.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.Brand.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+            this.Brand.Size = new System.Drawing.Size(100, 24);
+            this.Brand.TabIndex = 4;
+            this.Brand.SelectedIndexChanged += new System.EventHandler(this.Brand_SelectedIndexChanged);
+            // 
+            // ButtonNewCommand
+            // 
+            this.ButtonNewCommand.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonNewCommand.Grid = null;
+            this.ButtonNewCommand.Location = new System.Drawing.Point(805, 5);
+            this.ButtonNewCommand.Name = "ButtonNewCommand";
+            this.ButtonNewCommand.Size = new System.Drawing.Size(64, 23);
+            this.ButtonNewCommand.TabIndex = 3;
+            this.ButtonNewCommand.Text = "新增";
+            // 
+            // ButtonSaveCommand
+            // 
+            this.ButtonSaveCommand.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonSaveCommand.Grid = null;
+            this.ButtonSaveCommand.HandlerOtherFirst = true;
+            this.ButtonSaveCommand.Location = new System.Drawing.Point(875, 5);
+            this.ButtonSaveCommand.Name = "ButtonSaveCommand";
+            this.ButtonSaveCommand.Size = new System.Drawing.Size(64, 23);
+            this.ButtonSaveCommand.TabIndex = 2;
+            this.ButtonSaveCommand.Text = "保存";
+            this.ButtonSaveCommand.Click += new System.EventHandler(this.ButtonSaveCommand_Click);
+            // 
+            // GridCommandSetting
+            // 
+            this.GridCommandSetting.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.GridCommandSetting.Condition = null;
+            this.GridCommandSetting.GetDataSQL = null;
+            this.GridCommandSetting.ID = null;
+            this.GridCommandSetting.InsertSQL = null;
+            this.GridCommandSetting.Location = new System.Drawing.Point(0, 31);
+            this.GridCommandSetting.MainView = this.GridViewCommandSet;
+            this.GridCommandSetting.MenuManager = this.RibbonNav;
+            this.GridCommandSetting.Name = "GridCommandSetting";
+            this.GridCommandSetting.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] {
+            this.CheckEditCommandSet,
+            this.CommandSetRepositoryItemComboBox1});
+            this.GridCommandSetting.RowCount = 0;
+            this.GridCommandSetting.Size = new System.Drawing.Size(1027, 546);
+            this.GridCommandSetting.TabIndex = 1;
+            this.GridCommandSetting.TableName = null;
+            this.GridCommandSetting.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.GridViewCommandSet});
+            // 
+            // GridViewCommandSet
+            // 
+            this.GridViewCommandSet.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+            this.CommandSetCheckedColumn,
+            this.dc_id,
+            this.dc_code,
+            this.dc_name,
+            this.dc_type,
+            this.dc_value,
+            this.dc_sendcoding,
+            this.dc_receivecoding,
+            this.dc_man,
+            this.dc_date,
+            this.db_name});
+            this.GridViewCommandSet.GridControl = this.GridCommandSetting;
+            this.GridViewCommandSet.IndicatorWidth = 30;
+            this.GridViewCommandSet.Name = "GridViewCommandSet";
+            this.GridViewCommandSet.OptionsView.ShowGroupPanel = false;
+            // 
+            // CommandSetCheckedColumn
+            // 
+            this.CommandSetCheckedColumn.Caption = " ";
+            this.CommandSetCheckedColumn.ColumnEdit = this.CheckEditCommandSet;
+            this.CommandSetCheckedColumn.FieldName = "CHECKEDCOLUMN";
+            this.CommandSetCheckedColumn.Name = "CommandSetCheckedColumn";
+            this.CommandSetCheckedColumn.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
+            this.CommandSetCheckedColumn.Tag = "0";
+            this.CommandSetCheckedColumn.Visible = true;
+            this.CommandSetCheckedColumn.VisibleIndex = 0;
+            this.CommandSetCheckedColumn.Width = 46;
+            // 
+            // CheckEditCommandSet
+            // 
+            this.CheckEditCommandSet.AutoHeight = false;
+            this.CheckEditCommandSet.Name = "CheckEditCommandSet";
+            this.CheckEditCommandSet.NullStyle = DevExpress.XtraEditors.Controls.StyleIndeterminate.Unchecked;
+            // 
+            // dc_id
+            // 
+            this.dc_id.FieldName = "DC_ID";
+            this.dc_id.Name = "dc_id";
+            // 
+            // dc_code
+            // 
+            this.dc_code.Caption = "指令编号";
+            this.dc_code.FieldName = "DC_CODE";
+            this.dc_code.Name = "dc_code";
+            this.dc_code.Visible = true;
+            this.dc_code.VisibleIndex = 1;
+            this.dc_code.Width = 64;
+            // 
+            // dc_name
+            // 
+            this.dc_name.Caption = "指令名称";
+            this.dc_name.FieldName = "DC_NAME";
+            this.dc_name.Name = "dc_name";
+            this.dc_name.Visible = true;
+            this.dc_name.VisibleIndex = 2;
+            this.dc_name.Width = 71;
+            // 
+            // dc_type
+            // 
+            this.dc_type.Caption = "指令类型";
+            this.dc_type.FieldName = "DC_TYPE";
+            this.dc_type.Name = "dc_type";
+            this.dc_type.Visible = true;
+            this.dc_type.VisibleIndex = 3;
+            this.dc_type.Width = 57;
+            // 
+            // dc_value
+            // 
+            this.dc_value.Caption = "发送指令";
+            this.dc_value.FieldName = "DC_VALUE";
+            this.dc_value.Name = "dc_value";
+            this.dc_value.Visible = true;
+            this.dc_value.VisibleIndex = 4;
+            this.dc_value.Width = 154;
+            // 
+            // dc_sendcoding
+            // 
+            this.dc_sendcoding.Caption = "发送编码";
+            this.dc_sendcoding.ColumnEdit = this.CommandSetRepositoryItemComboBox1;
+            this.dc_sendcoding.FieldName = "DC_SENDCODING";
+            this.dc_sendcoding.Name = "dc_sendcoding";
+            this.dc_sendcoding.Visible = true;
+            this.dc_sendcoding.VisibleIndex = 5;
+            this.dc_sendcoding.Width = 138;
+            // 
+            // CommandSetRepositoryItemComboBox1
+            // 
+            this.CommandSetRepositoryItemComboBox1.AutoHeight = false;
+            this.CommandSetRepositoryItemComboBox1.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.CommandSetRepositoryItemComboBox1.Name = "CommandSetRepositoryItemComboBox1";
+            // 
+            // dc_receivecoding
+            // 
+            this.dc_receivecoding.Caption = "接收编码";
+            this.dc_receivecoding.ColumnEdit = this.CommandSetRepositoryItemComboBox1;
+            this.dc_receivecoding.FieldName = "DC_RECEIVECODING";
+            this.dc_receivecoding.Name = "dc_receivecoding";
+            this.dc_receivecoding.Visible = true;
+            this.dc_receivecoding.VisibleIndex = 6;
+            this.dc_receivecoding.Width = 139;
+            // 
+            // dc_man
+            // 
+            this.dc_man.Caption = "维护人员";
+            this.dc_man.FieldName = "DC_MAN";
+            this.dc_man.Name = "dc_man";
+            this.dc_man.OptionsColumn.AllowEdit = false;
+            this.dc_man.Visible = true;
+            this.dc_man.VisibleIndex = 8;
+            this.dc_man.Width = 217;
+            // 
+            // dc_date
+            // 
+            this.dc_date.Caption = "维护时间";
+            this.dc_date.FieldName = "DC_DATE";
+            this.dc_date.Name = "dc_date";
+            this.dc_date.OptionsColumn.AllowEdit = false;
+            this.dc_date.Visible = true;
+            this.dc_date.VisibleIndex = 9;
+            this.dc_date.Width = 52;
+            // 
+            // db_name
+            // 
+            this.db_name.Caption = "品牌";
+            this.db_name.FieldName = "DB_NAME";
+            this.db_name.Name = "db_name";
+            this.db_name.Visible = true;
+            this.db_name.VisibleIndex = 7;
+            this.db_name.Width = 57;
+            // 
+            // PageDeviceNetSetting
+            // 
+            this.PageDeviceNetSetting.Controls.Add(this.ButtonDeleteNetConfig);
+            this.PageDeviceNetSetting.Controls.Add(this.ButtonAddNetConfig);
+            this.PageDeviceNetSetting.Controls.Add(this.ButtonSaveNetConfig);
+            this.PageDeviceNetSetting.Controls.Add(this.GridDeviceNetSetting);
+            this.PageDeviceNetSetting.Name = "PageDeviceNetSetting";
+            this.PageDeviceNetSetting.PageVisible = false;
+            this.PageDeviceNetSetting.Size = new System.Drawing.Size(1027, 577);
+            // 
+            // ButtonDeleteNetConfig
+            // 
+            this.ButtonDeleteNetConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonDeleteNetConfig.Grid = null;
+            this.ButtonDeleteNetConfig.Location = new System.Drawing.Point(942, 7);
+            this.ButtonDeleteNetConfig.Name = "ButtonDeleteNetConfig";
+            this.ButtonDeleteNetConfig.Size = new System.Drawing.Size(64, 23);
+            this.ButtonDeleteNetConfig.TabIndex = 12;
+            this.ButtonDeleteNetConfig.Text = "删除";
+            // 
+            // ButtonAddNetConfig
+            // 
+            this.ButtonAddNetConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonAddNetConfig.Grid = null;
+            this.ButtonAddNetConfig.Location = new System.Drawing.Point(802, 7);
+            this.ButtonAddNetConfig.Name = "ButtonAddNetConfig";
+            this.ButtonAddNetConfig.Size = new System.Drawing.Size(64, 23);
+            this.ButtonAddNetConfig.TabIndex = 11;
+            this.ButtonAddNetConfig.Text = "新增";
+            // 
+            // ButtonSaveNetConfig
+            // 
+            this.ButtonSaveNetConfig.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonSaveNetConfig.Grid = null;
+            this.ButtonSaveNetConfig.HandlerOtherFirst = false;
+            this.ButtonSaveNetConfig.Location = new System.Drawing.Point(872, 7);
+            this.ButtonSaveNetConfig.Name = "ButtonSaveNetConfig";
+            this.ButtonSaveNetConfig.Size = new System.Drawing.Size(64, 23);
+            this.ButtonSaveNetConfig.TabIndex = 10;
+            this.ButtonSaveNetConfig.Text = "保存";
+            // 
+            // GridDeviceNetSetting
+            // 
+            this.GridDeviceNetSetting.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.GridDeviceNetSetting.Condition = null;
+            this.GridDeviceNetSetting.GetDataSQL = null;
+            this.GridDeviceNetSetting.ID = null;
+            this.GridDeviceNetSetting.InsertSQL = null;
+            this.GridDeviceNetSetting.Location = new System.Drawing.Point(0, 34);
+            this.GridDeviceNetSetting.MainView = this.GridViewDeviceNetSetting;
+            this.GridDeviceNetSetting.MenuManager = this.RibbonNav;
+            this.GridDeviceNetSetting.Name = "GridDeviceNetSetting";
+            this.GridDeviceNetSetting.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] {
+            this.dpc_enableCheckEdit});
+            this.GridDeviceNetSetting.RowCount = 0;
+            this.GridDeviceNetSetting.Size = new System.Drawing.Size(1024, 543);
+            this.GridDeviceNetSetting.TabIndex = 0;
+            this.GridDeviceNetSetting.TableName = null;
+            this.GridDeviceNetSetting.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.GridViewDeviceNetSetting});
+            // 
+            // GridViewDeviceNetSetting
+            // 
+            this.GridViewDeviceNetSetting.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+            this.NetSettingCheckedColumn,
+            this.dnc_id,
+            this.dnc_decode,
+            this.dnc_getway,
+            this.dnc_upperip,
+            this.dnc_port,
+            this.dnc_mac,
+            this.dnc_ip,
+            this.dnc_type});
+            this.GridViewDeviceNetSetting.GridControl = this.GridDeviceNetSetting;
+            this.GridViewDeviceNetSetting.IndicatorWidth = 30;
+            this.GridViewDeviceNetSetting.Name = "GridViewDeviceNetSetting";
+            this.GridViewDeviceNetSetting.OptionsView.ShowGroupPanel = false;
+            // 
+            // NetSettingCheckedColumn
+            // 
+            this.NetSettingCheckedColumn.Caption = " ";
+            this.NetSettingCheckedColumn.ColumnEdit = this.dpc_enableCheckEdit;
+            this.NetSettingCheckedColumn.FieldName = "CHECKEDCOLUMN";
+            this.NetSettingCheckedColumn.Name = "NetSettingCheckedColumn";
+            this.NetSettingCheckedColumn.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
+            this.NetSettingCheckedColumn.OptionsFilter.AllowFilter = false;
+            this.NetSettingCheckedColumn.Tag = "0";
+            this.NetSettingCheckedColumn.Visible = true;
+            this.NetSettingCheckedColumn.VisibleIndex = 0;
+            // 
+            // dnc_id
+            // 
+            this.dnc_id.Caption = "ID";
+            this.dnc_id.FieldName = "DNC_ID";
+            this.dnc_id.Name = "dnc_id";
+            // 
+            // dnc_decode
+            // 
+            this.dnc_decode.Caption = "设备编号";
+            this.dnc_decode.FieldName = "DNC_DECODE";
+            this.dnc_decode.Name = "dnc_decode";
+            this.dnc_decode.Visible = true;
+            this.dnc_decode.VisibleIndex = 1;
+            // 
+            // dnc_getway
+            // 
+            this.dnc_getway.Caption = "网关";
+            this.dnc_getway.FieldName = "DNC_GATEWAY";
+            this.dnc_getway.Name = "dnc_getway";
+            this.dnc_getway.Visible = true;
+            this.dnc_getway.VisibleIndex = 2;
+            // 
+            // dnc_upperip
+            // 
+            this.dnc_upperip.Caption = "上级IP";
+            this.dnc_upperip.FieldName = "DNC_UPPERIP";
+            this.dnc_upperip.Name = "dnc_upperip";
+            this.dnc_upperip.Visible = true;
+            this.dnc_upperip.VisibleIndex = 3;
+            // 
+            // dnc_port
+            // 
+            this.dnc_port.Caption = "端口";
+            this.dnc_port.FieldName = "DNC_PORT";
+            this.dnc_port.Name = "dnc_port";
+            this.dnc_port.Visible = true;
+            this.dnc_port.VisibleIndex = 4;
+            // 
+            // dnc_mac
+            // 
+            this.dnc_mac.Caption = "MAC";
+            this.dnc_mac.FieldName = "DNC_MAC";
+            this.dnc_mac.Name = "dnc_mac";
+            this.dnc_mac.Visible = true;
+            this.dnc_mac.VisibleIndex = 5;
+            // 
+            // dnc_ip
+            // 
+            this.dnc_ip.Caption = "IP";
+            this.dnc_ip.FieldName = "DNC_IP";
+            this.dnc_ip.Name = "dnc_ip";
+            this.dnc_ip.Visible = true;
+            this.dnc_ip.VisibleIndex = 6;
+            // 
+            // dnc_type
+            // 
+            this.dnc_type.Caption = "类型";
+            this.dnc_type.FieldName = "DNC_TYPE";
+            this.dnc_type.Name = "dnc_type";
+            this.dnc_type.Visible = true;
+            this.dnc_type.VisibleIndex = 7;
+            // 
+            // PagePollingSetting
+            // 
+            this.PagePollingSetting.Controls.Add(this.ButtonDeleteCommandSet);
+            this.PagePollingSetting.Controls.Add(this.ButtonNewCommandSet);
+            this.PagePollingSetting.Controls.Add(this.ButtonSaveCommandSet);
+            this.PagePollingSetting.Controls.Add(this.ButtonPausePolling);
+            this.PagePollingSetting.Controls.Add(this.ButtonStartPolling);
+            this.PagePollingSetting.Controls.Add(this.GridPollingSetting);
+            this.PagePollingSetting.Name = "PagePollingSetting";
+            this.PagePollingSetting.PageVisible = false;
+            this.PagePollingSetting.Size = new System.Drawing.Size(1027, 577);
+            this.PagePollingSetting.Text = "xtraTabPage1";
+            this.PagePollingSetting.VisibleChanged += new System.EventHandler(this.PagePollingSetting_VisibleChanged);
+            // 
+            // ButtonDeleteCommandSet
+            // 
+            this.ButtonDeleteCommandSet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonDeleteCommandSet.Grid = null;
+            this.ButtonDeleteCommandSet.Location = new System.Drawing.Point(950, 6);
+            this.ButtonDeleteCommandSet.Name = "ButtonDeleteCommandSet";
+            this.ButtonDeleteCommandSet.Size = new System.Drawing.Size(64, 23);
+            this.ButtonDeleteCommandSet.TabIndex = 9;
+            this.ButtonDeleteCommandSet.Text = "删除";
+            // 
+            // ButtonNewCommandSet
+            // 
+            this.ButtonNewCommandSet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonNewCommandSet.Grid = null;
+            this.ButtonNewCommandSet.Location = new System.Drawing.Point(810, 6);
+            this.ButtonNewCommandSet.Name = "ButtonNewCommandSet";
+            this.ButtonNewCommandSet.Size = new System.Drawing.Size(64, 23);
+            this.ButtonNewCommandSet.TabIndex = 8;
+            this.ButtonNewCommandSet.Text = "新增";
+            // 
+            // ButtonSaveCommandSet
+            // 
+            this.ButtonSaveCommandSet.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonSaveCommandSet.Grid = null;
+            this.ButtonSaveCommandSet.HandlerOtherFirst = true;
+            this.ButtonSaveCommandSet.Location = new System.Drawing.Point(880, 6);
+            this.ButtonSaveCommandSet.Name = "ButtonSaveCommandSet";
+            this.ButtonSaveCommandSet.Size = new System.Drawing.Size(64, 23);
+            this.ButtonSaveCommandSet.TabIndex = 7;
+            this.ButtonSaveCommandSet.Text = "保存";
+            this.ButtonSaveCommandSet.Click += new System.EventHandler(this.ButtonSaveCommandSet_Click);
+            // 
+            // ButtonPausePolling
+            // 
+            this.ButtonPausePolling.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonPausePolling.Location = new System.Drawing.Point(729, 6);
+            this.ButtonPausePolling.Name = "ButtonPausePolling";
+            this.ButtonPausePolling.Size = new System.Drawing.Size(75, 23);
+            this.ButtonPausePolling.TabIndex = 2;
+            this.ButtonPausePolling.Text = "暂停轮询";
+            this.ButtonPausePolling.Click += new System.EventHandler(this.ButtonPausePolling_Click);
+            // 
+            // ButtonStartPolling
+            // 
+            this.ButtonStartPolling.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonStartPolling.Location = new System.Drawing.Point(648, 6);
+            this.ButtonStartPolling.Name = "ButtonStartPolling";
+            this.ButtonStartPolling.Size = new System.Drawing.Size(75, 23);
+            this.ButtonStartPolling.TabIndex = 1;
+            this.ButtonStartPolling.Text = "开启轮询";
+            this.ButtonStartPolling.Click += new System.EventHandler(this.ButtonStartPolling_Click);
+            // 
+            // GridPollingSetting
+            // 
+            this.GridPollingSetting.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.GridPollingSetting.Condition = null;
+            this.GridPollingSetting.GetDataSQL = null;
+            this.GridPollingSetting.ID = null;
+            this.GridPollingSetting.InsertSQL = null;
+            this.GridPollingSetting.Location = new System.Drawing.Point(0, 34);
+            this.GridPollingSetting.MainView = this.GridViewPollSetting;
+            this.GridPollingSetting.MenuManager = this.RibbonNav;
+            this.GridPollingSetting.Name = "GridPollingSetting";
+            this.GridPollingSetting.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] {
+            this.dpc_enableCheckEdit,
+            this.PollingSetItemLookUpEdit,
+            this.PollSettingItemSearchLookUpEdit});
+            this.GridPollingSetting.RowCount = 0;
+            this.GridPollingSetting.Size = new System.Drawing.Size(1027, 543);
+            this.GridPollingSetting.TabIndex = 0;
+            this.GridPollingSetting.TableName = null;
+            this.GridPollingSetting.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.GridViewPollSetting});
+            // 
+            // GridViewPollSetting
+            // 
+            this.GridViewPollSetting.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+            this.PollSettingCheckedColumn,
+            this.dpc_id,
+            this.dpc_decode,
+            this.dpc_interval,
+            this.dpc_dccode,
+            this.dpc_function,
+            this.dpc_enable,
+            this.em_name1,
+            this.dpc_status,
+            this.dpc_man,
+            this.dpc_remark,
+            this.POLLSETTINGSTATUSCOLUMN});
+            this.GridViewPollSetting.GridControl = this.GridPollingSetting;
+            this.GridViewPollSetting.IndicatorWidth = 30;
+            this.GridViewPollSetting.Name = "GridViewPollSetting";
+            this.GridViewPollSetting.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
+            this.GridViewPollSetting.OptionsView.ShowGroupPanel = false;
+            this.GridViewPollSetting.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.GridViewPollSetting_CellValueChanged);
+            this.GridViewPollSetting.CellValueChanging += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(this.GridViewPollSetting_CellValueChanging);
+            // 
+            // PollSettingCheckedColumn
+            // 
+            this.PollSettingCheckedColumn.Caption = " ";
+            this.PollSettingCheckedColumn.ColumnEdit = this.dpc_enableCheckEdit;
+            this.PollSettingCheckedColumn.FieldName = "CHECKEDCOLUMN";
+            this.PollSettingCheckedColumn.Name = "PollSettingCheckedColumn";
+            this.PollSettingCheckedColumn.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
+            this.PollSettingCheckedColumn.OptionsFilter.AllowFilter = false;
+            this.PollSettingCheckedColumn.Tag = "0";
+            this.PollSettingCheckedColumn.Visible = true;
+            this.PollSettingCheckedColumn.VisibleIndex = 0;
+            // 
+            // dpc_id
+            // 
+            this.dpc_id.Caption = "ID";
+            this.dpc_id.FieldName = "DPC_ID";
+            this.dpc_id.Name = "dpc_id";
+            // 
+            // dpc_decode
+            // 
+            this.dpc_decode.Caption = "设备编号";
+            this.dpc_decode.FieldName = "DPC_DECODE";
+            this.dpc_decode.Name = "dpc_decode";
+            this.dpc_decode.Visible = true;
+            this.dpc_decode.VisibleIndex = 1;
+            this.dpc_decode.Width = 90;
+            // 
+            // dpc_interval
+            // 
+            this.dpc_interval.Caption = "轮询间隔(秒)";
+            this.dpc_interval.FieldName = "DPC_INTERVAL";
+            this.dpc_interval.Name = "dpc_interval";
+            this.dpc_interval.Visible = true;
+            this.dpc_interval.VisibleIndex = 2;
+            this.dpc_interval.Width = 90;
+            // 
+            // dpc_dccode
+            // 
+            this.dpc_dccode.Caption = "指令编号";
+            this.dpc_dccode.ColumnEdit = this.PollSettingItemSearchLookUpEdit;
+            this.dpc_dccode.FieldName = "DPC_DCCODE";
+            this.dpc_dccode.Name = "dpc_dccode";
+            this.dpc_dccode.Visible = true;
+            this.dpc_dccode.VisibleIndex = 3;
+            this.dpc_dccode.Width = 90;
+            // 
+            // PollSettingItemSearchLookUpEdit
+            // 
+            this.PollSettingItemSearchLookUpEdit.AutoHeight = false;
+            this.PollSettingItemSearchLookUpEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.PollSettingItemSearchLookUpEdit.Name = "PollSettingItemSearchLookUpEdit";
+            this.PollSettingItemSearchLookUpEdit.NullText = "";
+            this.PollSettingItemSearchLookUpEdit.View = this.PollSettingItemSearchLookUpEditView;
+            // 
+            // PollSettingItemSearchLookUpEditView
+            // 
+            this.PollSettingItemSearchLookUpEditView.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+            this.gridColumn4,
+            this.gridColumn2,
+            this.gridColumn5});
+            this.PollSettingItemSearchLookUpEditView.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
+            this.PollSettingItemSearchLookUpEditView.Name = "PollSettingItemSearchLookUpEditView";
+            this.PollSettingItemSearchLookUpEditView.OptionsSelection.EnableAppearanceFocusedCell = false;
+            this.PollSettingItemSearchLookUpEditView.OptionsView.ShowGroupPanel = false;
+            // 
+            // gridColumn4
+            // 
+            this.gridColumn4.Caption = "指令编号";
+            this.gridColumn4.FieldName = "DC_CODE";
+            this.gridColumn4.Name = "gridColumn4";
+            this.gridColumn4.Visible = true;
+            this.gridColumn4.VisibleIndex = 0;
+            // 
+            // gridColumn2
+            // 
+            this.gridColumn2.Caption = "指令名称";
+            this.gridColumn2.FieldName = "DC_NAME";
+            this.gridColumn2.Name = "gridColumn2";
+            this.gridColumn2.Visible = true;
+            this.gridColumn2.VisibleIndex = 1;
+            // 
+            // gridColumn5
+            // 
+            this.gridColumn5.Caption = "备注";
+            this.gridColumn5.FieldName = "DC_REMARK";
+            this.gridColumn5.Name = "gridColumn5";
+            this.gridColumn5.Visible = true;
+            this.gridColumn5.VisibleIndex = 2;
+            // 
+            // dpc_function
+            // 
+            this.dpc_function.Caption = "解析函数";
+            this.dpc_function.FieldName = "DPC_FUNCTION";
+            this.dpc_function.Name = "dpc_function";
+            this.dpc_function.Visible = true;
+            this.dpc_function.VisibleIndex = 4;
+            this.dpc_function.Width = 90;
+            // 
+            // dpc_enable
+            // 
+            this.dpc_enable.Caption = "是否启用";
+            this.dpc_enable.ColumnEdit = this.dpc_enableCheckEdit;
+            this.dpc_enable.FieldName = "DPC_ENABLE";
+            this.dpc_enable.Name = "dpc_enable";
+            this.dpc_enable.Visible = true;
+            this.dpc_enable.VisibleIndex = 5;
+            this.dpc_enable.Width = 90;
+            // 
+            // em_name1
+            // 
+            this.em_name1.Caption = "维护人";
+            this.em_name1.FieldName = "EM_NAME";
+            this.em_name1.Name = "em_name1";
+            this.em_name1.OptionsColumn.AllowEdit = false;
+            this.em_name1.Visible = true;
+            this.em_name1.VisibleIndex = 9;
+            // 
+            // dpc_status
+            // 
+            this.dpc_status.Caption = "状态";
+            this.dpc_status.FieldName = "DPC_STATUS";
+            this.dpc_status.Name = "dpc_status";
+            this.dpc_status.OptionsColumn.AllowEdit = false;
+            this.dpc_status.Visible = true;
+            this.dpc_status.VisibleIndex = 6;
+            this.dpc_status.Width = 90;
+            // 
+            // dpc_man
+            // 
+            this.dpc_man.Caption = "维护人";
+            this.dpc_man.FieldName = "DPC_MAN";
+            this.dpc_man.Name = "dpc_man";
+            this.dpc_man.OptionsColumn.AllowEdit = false;
+            // 
+            // dpc_remark
+            // 
+            this.dpc_remark.Caption = "备注";
+            this.dpc_remark.FieldName = "DPC_REMARK";
+            this.dpc_remark.Name = "dpc_remark";
+            this.dpc_remark.Visible = true;
+            this.dpc_remark.VisibleIndex = 7;
+            this.dpc_remark.Width = 87;
+            // 
+            // POLLSETTINGSTATUSCOLUMN
+            // 
+            this.POLLSETTINGSTATUSCOLUMN.Caption = "运行状态";
+            this.POLLSETTINGSTATUSCOLUMN.FieldName = "POLLSETTINGSTATUSCOLUMN";
+            this.POLLSETTINGSTATUSCOLUMN.Name = "POLLSETTINGSTATUSCOLUMN";
+            this.POLLSETTINGSTATUSCOLUMN.OptionsColumn.ReadOnly = true;
+            this.POLLSETTINGSTATUSCOLUMN.Visible = true;
+            this.POLLSETTINGSTATUSCOLUMN.VisibleIndex = 8;
+            this.POLLSETTINGSTATUSCOLUMN.Width = 98;
+            // 
+            // PollingSetItemLookUpEdit
+            // 
+            this.PollingSetItemLookUpEdit.AutoHeight = false;
+            this.PollingSetItemLookUpEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.PollingSetItemLookUpEdit.Name = "PollingSetItemLookUpEdit";
+            this.PollingSetItemLookUpEdit.NullText = "";
+            this.PollingSetItemLookUpEdit.ShowFooter = false;
+            this.PollingSetItemLookUpEdit.ShowHeader = false;
+            // 
+            // PagePolling
+            // 
+            this.PagePolling.Controls.Add(this.ButtonAddPolling);
+            this.PagePolling.Controls.Add(this.ButtonDeletePolling);
+            this.PagePolling.Controls.Add(this.ButtonSavePolling);
+            this.PagePolling.Controls.Add(this.GridPolling);
+            this.PagePolling.Name = "PagePolling";
+            this.PagePolling.PageVisible = false;
+            this.PagePolling.Size = new System.Drawing.Size(1027, 577);
+            this.PagePolling.Text = "xtraTabPage1";
+            // 
+            // ButtonAddPolling
+            // 
+            this.ButtonAddPolling.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonAddPolling.Grid = null;
+            this.ButtonAddPolling.Location = new System.Drawing.Point(878, 551);
+            this.ButtonAddPolling.Name = "ButtonAddPolling";
+            this.ButtonAddPolling.Size = new System.Drawing.Size(64, 23);
+            this.ButtonAddPolling.TabIndex = 9;
+            this.ButtonAddPolling.Text = "新增";
+            // 
+            // ButtonDeletePolling
+            // 
+            this.ButtonDeletePolling.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonDeletePolling.Grid = null;
+            this.ButtonDeletePolling.Location = new System.Drawing.Point(807, 551);
+            this.ButtonDeletePolling.Name = "ButtonDeletePolling";
+            this.ButtonDeletePolling.Size = new System.Drawing.Size(64, 23);
+            this.ButtonDeletePolling.TabIndex = 8;
+            this.ButtonDeletePolling.Text = "删除";
+            // 
+            // ButtonSavePolling
+            // 
+            this.ButtonSavePolling.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+            this.ButtonSavePolling.Grid = null;
+            this.ButtonSavePolling.HandlerOtherFirst = false;
+            this.ButtonSavePolling.Location = new System.Drawing.Point(949, 551);
+            this.ButtonSavePolling.Name = "ButtonSavePolling";
+            this.ButtonSavePolling.Size = new System.Drawing.Size(64, 23);
+            this.ButtonSavePolling.TabIndex = 7;
+            this.ButtonSavePolling.Text = "保存";
+            // 
+            // GridPolling
+            // 
+            this.GridPolling.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.GridPolling.Condition = null;
+            this.GridPolling.GetDataSQL = null;
+            this.GridPolling.ID = null;
+            this.GridPolling.InsertSQL = null;
+            this.GridPolling.Location = new System.Drawing.Point(3, -3);
+            this.GridPolling.MainView = this.GridViewPolling;
+            this.GridPolling.MenuManager = this.RibbonNav;
+            this.GridPolling.Name = "GridPolling";
+            this.GridPolling.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] {
+            this.dpc_enableCheckEdit});
+            this.GridPolling.RowCount = 0;
+            this.GridPolling.Size = new System.Drawing.Size(1027, 549);
+            this.GridPolling.TabIndex = 0;
+            this.GridPolling.TableName = null;
+            this.GridPolling.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.GridViewPolling});
+            // 
+            // GridViewPolling
+            // 
+            this.GridViewPolling.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
+            this.PollingCheckedColumn,
+            this.pl_id,
+            this.pl_code,
+            this.pl_name,
+            this.pl_type,
+            this.pl_dccode,
+            this.pl_remark});
+            this.GridViewPolling.GridControl = this.GridPolling;
+            this.GridViewPolling.IndicatorWidth = 30;
+            this.GridViewPolling.Name = "GridViewPolling";
+            this.GridViewPolling.OptionsView.ShowGroupPanel = false;
+            // 
+            // PollingCheckedColumn
+            // 
+            this.PollingCheckedColumn.Caption = " ";
+            this.PollingCheckedColumn.ColumnEdit = this.dpc_enableCheckEdit;
+            this.PollingCheckedColumn.FieldName = "CHECKEDCOLUMN";
+            this.PollingCheckedColumn.Name = "PollingCheckedColumn";
+            this.PollingCheckedColumn.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
+            this.PollingCheckedColumn.Tag = "0";
+            this.PollingCheckedColumn.Visible = true;
+            this.PollingCheckedColumn.VisibleIndex = 0;
+            // 
+            // pl_id
+            // 
+            this.pl_id.Caption = "ID";
+            this.pl_id.FieldName = "PL_ID";
+            this.pl_id.Name = "pl_id";
+            // 
+            // pl_code
+            // 
+            this.pl_code.Caption = "业务编号";
+            this.pl_code.FieldName = "PL_CODE";
+            this.pl_code.Name = "pl_code";
+            this.pl_code.Visible = true;
+            this.pl_code.VisibleIndex = 1;
+            // 
+            // pl_name
+            // 
+            this.pl_name.Caption = "业务名称";
+            this.pl_name.FieldName = "PL_NAME";
+            this.pl_name.Name = "pl_name";
+            this.pl_name.Visible = true;
+            this.pl_name.VisibleIndex = 2;
+            // 
+            // pl_type
+            // 
+            this.pl_type.Caption = "业务类型";
+            this.pl_type.FieldName = "PL_TYPE";
+            this.pl_type.Name = "pl_type";
+            this.pl_type.Visible = true;
+            this.pl_type.VisibleIndex = 3;
+            // 
+            // pl_dccode
+            // 
+            this.pl_dccode.Caption = "指令编号";
+            this.pl_dccode.ColumnEdit = this.PollingSetItemLookUpEdit;
+            this.pl_dccode.FieldName = "PL_DCCODE";
+            this.pl_dccode.Name = "pl_dccode";
+            this.pl_dccode.Visible = true;
+            this.pl_dccode.VisibleIndex = 4;
+            // 
+            // pl_remark
+            // 
+            this.pl_remark.Caption = "备注";
+            this.pl_remark.FieldName = "PL_REMARK";
+            this.pl_remark.Name = "pl_remark";
+            this.pl_remark.Visible = true;
+            this.pl_remark.VisibleIndex = 5;
+            // 
+            // PageDeviceStatus
+            // 
+            this.PageDeviceStatus.Controls.Add(this.ComboxDeviceStatusWC);
+            this.PageDeviceStatus.Controls.Add(this.ComboxDeviceStatusLC);
+            this.PageDeviceStatus.Controls.Add(this.CheckEditDeviceStatusEnable);
+            this.PageDeviceStatus.Controls.Add(this.ComboxDeviceStatusLC_label);
+            this.PageDeviceStatus.Controls.Add(this.ComboxDeviceStatusWC_label);
+            this.PageDeviceStatus.Controls.Add(this.PanelDeviceStatus);
+            this.PageDeviceStatus.Name = "PageDeviceStatus";
+            this.PageDeviceStatus.PageVisible = false;
+            this.PageDeviceStatus.Size = new System.Drawing.Size(1027, 577);
+            this.PageDeviceStatus.Text = "xtraTabPage1";
+            this.PageDeviceStatus.VisibleChanged += new System.EventHandler(this.PageDeviceStatus_VisibleChanged);
+            // 
+            // ComboxDeviceStatusWC
+            // 
+            this.ComboxDeviceStatusWC.Location = new System.Drawing.Point(61, 10);
+            this.ComboxDeviceStatusWC.MenuManager = this.RibbonNav;
+            this.ComboxDeviceStatusWC.Name = "ComboxDeviceStatusWC";
+            this.ComboxDeviceStatusWC.Properties.Appearance.Font = new System.Drawing.Font("黑体", 11F);
+            this.ComboxDeviceStatusWC.Properties.Appearance.Options.UseFont = true;
+            this.ComboxDeviceStatusWC.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.ComboxDeviceStatusWC.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+            this.ComboxDeviceStatusWC.Size = new System.Drawing.Size(100, 22);
+            this.ComboxDeviceStatusWC.TabIndex = 0;
+            this.ComboxDeviceStatusWC.SelectedIndexChanged += new System.EventHandler(this.ComboxDeviceStatusWC_SelectedIndexChanged);
+            // 
+            // ComboxDeviceStatusLC
+            // 
+            this.ComboxDeviceStatusLC.Location = new System.Drawing.Point(213, 10);
+            this.ComboxDeviceStatusLC.MenuManager = this.RibbonNav;
+            this.ComboxDeviceStatusLC.Name = "ComboxDeviceStatusLC";
+            this.ComboxDeviceStatusLC.Properties.Appearance.Font = new System.Drawing.Font("黑体", 11F);
+            this.ComboxDeviceStatusLC.Properties.Appearance.Options.UseFont = true;
+            this.ComboxDeviceStatusLC.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+            this.ComboxDeviceStatusLC.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+            this.ComboxDeviceStatusLC.Size = new System.Drawing.Size(100, 22);
+            this.ComboxDeviceStatusLC.TabIndex = 0;
+            this.ComboxDeviceStatusLC.SelectedIndexChanged += new System.EventHandler(this.ComboxDeviceStatusLC_SelectedIndexChanged);
+            // 
+            // CheckEditDeviceStatusEnable
+            // 
+            this.CheckEditDeviceStatusEnable.Location = new System.Drawing.Point(332, 12);
+            this.CheckEditDeviceStatusEnable.MenuManager = this.RibbonNav;
+            this.CheckEditDeviceStatusEnable.Name = "CheckEditDeviceStatusEnable";
+            this.CheckEditDeviceStatusEnable.Properties.Appearance.Font = new System.Drawing.Font("黑体", 10F);
+            this.CheckEditDeviceStatusEnable.Properties.Appearance.Options.UseFont = true;
+            this.CheckEditDeviceStatusEnable.Properties.Caption = "只显示已启用设备";
+            this.CheckEditDeviceStatusEnable.Size = new System.Drawing.Size(142, 19);
+            this.CheckEditDeviceStatusEnable.TabIndex = 5;
+            this.CheckEditDeviceStatusEnable.CheckedChanged += new System.EventHandler(this.CheckEditDeviceStatusEnable_CheckedChanged);
+            // 
+            // ComboxDeviceStatusLC_label
+            // 
+            this.ComboxDeviceStatusLC_label.Appearance.Font = new System.Drawing.Font("黑体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.ComboxDeviceStatusLC_label.Location = new System.Drawing.Point(173, 13);
+            this.ComboxDeviceStatusLC_label.Name = "ComboxDeviceStatusLC_label";
+            this.ComboxDeviceStatusLC_label.Size = new System.Drawing.Size(32, 16);
+            this.ComboxDeviceStatusLC_label.TabIndex = 4;
+            this.ComboxDeviceStatusLC_label.Text = "线别";
+            // 
+            // ComboxDeviceStatusWC_label
+            // 
+            this.ComboxDeviceStatusWC_label.Appearance.Font = new System.Drawing.Font("黑体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.ComboxDeviceStatusWC_label.Location = new System.Drawing.Point(22, 13);
+            this.ComboxDeviceStatusWC_label.Name = "ComboxDeviceStatusWC_label";
+            this.ComboxDeviceStatusWC_label.Size = new System.Drawing.Size(32, 16);
+            this.ComboxDeviceStatusWC_label.TabIndex = 2;
+            this.ComboxDeviceStatusWC_label.Text = "车间";
+            // 
+            // PanelDeviceStatus
+            // 
+            this.PanelDeviceStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.PanelDeviceStatus.Location = new System.Drawing.Point(0, 35);
+            this.PanelDeviceStatus.Name = "PanelDeviceStatus";
+            this.PanelDeviceStatus.Size = new System.Drawing.Size(1027, 542);
+            this.PanelDeviceStatus.TabIndex = 0;
+            // 
+            // PageWorkCenterStatus
+            // 
+            this.PageWorkCenterStatus.Controls.Add(this.GridWorkCenterStatus);
+            this.PageWorkCenterStatus.Name = "PageWorkCenterStatus";
+            this.PageWorkCenterStatus.PageVisible = false;
+            this.PageWorkCenterStatus.Size = new System.Drawing.Size(1027, 577);
+            this.PageWorkCenterStatus.Text = "车间全局监控";
+            // 
+            // GridWorkCenterStatus
+            // 
+            this.GridWorkCenterStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.GridWorkCenterStatus.Condition = null;
+            this.GridWorkCenterStatus.GetDataSQL = null;
+            this.GridWorkCenterStatus.ID = null;
+            this.GridWorkCenterStatus.InsertSQL = null;
+            this.GridWorkCenterStatus.Location = new System.Drawing.Point(0, 0);
+            this.GridWorkCenterStatus.MainView = this.GridViewWorkCenterStatus;
+            this.GridWorkCenterStatus.MenuManager = this.RibbonNav;
+            this.GridWorkCenterStatus.Name = "GridWorkCenterStatus";
+            this.GridWorkCenterStatus.RowCount = 0;
+            this.GridWorkCenterStatus.Size = new System.Drawing.Size(1024, 574);
+            this.GridWorkCenterStatus.TabIndex = 0;
+            this.GridWorkCenterStatus.TableName = null;
+            this.GridWorkCenterStatus.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
+            this.GridViewWorkCenterStatus});
+            // 
+            // GridViewWorkCenterStatus
+            // 
+            this.GridViewWorkCenterStatus.GridControl = this.GridWorkCenterStatus;
+            this.GridViewWorkCenterStatus.IndicatorWidth = 30;
+            this.GridViewWorkCenterStatus.Name = "GridViewWorkCenterStatus";
+            this.GridViewWorkCenterStatus.OptionsView.ShowGroupPanel = false;
+            // 
+            // TimerDeviceStatus
+            // 
+            this.TimerDeviceStatus.Interval = 10000;
+            this.TimerDeviceStatus.Tick += new System.EventHandler(this.TimerDeviceStatus_Tick);
+            // 
+            // CommonTipController
+            // 
+            this.CommonTipController.AutoPopDelay = 10000;
+            // 
+            // Main
+            // 
+            this.AllowFormGlass = DevExpress.Utils.DefaultBoolean.False;
+            this.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(128)))));
+            this.Appearance.Options.UseForeColor = true;
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.ClientSize = new System.Drawing.Size(1033, 711);
+            this.Controls.Add(this.MainTabControl);
+            this.Controls.Add(this.RibbonNav);
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.Name = "Main";
+            this.Ribbon = this.RibbonNav;
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+            this.Text = "设备监控管理平台";
+            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing);
+            this.Load += new System.EventHandler(this.Main_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.RibbonNav)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.MainTabControl)).EndInit();
+            this.MainTabControl.ResumeLayout(false);
+            this.PageDeviceList.ResumeLayout(false);
+            this.PageDeviceList.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ComBoxDeviceListMan.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.searchLookUpEdit1View)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboxDeviceListWC.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboxDeviceListLC.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridDeviceList)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewDeviceList)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.dpc_enableCheckEdit)).EndInit();
+            this.PageCommandSet.ResumeLayout(false);
+            this.PageCommandSet.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.Brand.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridCommandSetting)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewCommandSet)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CheckEditCommandSet)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CommandSetRepositoryItemComboBox1)).EndInit();
+            this.PageDeviceNetSetting.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.GridDeviceNetSetting)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewDeviceNetSetting)).EndInit();
+            this.PagePollingSetting.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.GridPollingSetting)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewPollSetting)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PollSettingItemSearchLookUpEdit)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PollSettingItemSearchLookUpEditView)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.PollingSetItemLookUpEdit)).EndInit();
+            this.PagePolling.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.GridPolling)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewPolling)).EndInit();
+            this.PageDeviceStatus.ResumeLayout(false);
+            this.PageDeviceStatus.PerformLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboxDeviceStatusWC.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.ComboxDeviceStatusLC.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.CheckEditDeviceStatusEnable.Properties)).EndInit();
+            this.PageWorkCenterStatus.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.GridWorkCenterStatus)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.GridViewWorkCenterStatus)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraBars.Ribbon.RibbonControl RibbonNav;
+        private DevExpress.XtraBars.BarButtonItem ButtonDeviceList;
+        private DevExpress.XtraBars.Ribbon.RibbonPage DeviceInf;
+        private DevExpress.XtraBars.Ribbon.RibbonPageGroup RibDeviceInf;
+        private DevExpress.XtraTab.XtraTabControl MainTabControl;
+        private DevExpress.XtraBars.BarButtonItem ButtonDeviceNetSetting;
+        private DevExpress.XtraBars.Ribbon.RibbonPage DeviceCommandSetting;
+        private DevExpress.XtraBars.BarButtonItem ButtonCommandSet;
+        private DevExpress.XtraBars.Ribbon.RibbonPageGroup RibDeviceCommand;
+        private DevExpress.XtraTab.XtraTabPage PageDeviceList;
+        private DevExpress.XtraTab.XtraTabPage PageCommandSet;
+        private DevExpress.XtraTab.XtraTabPage PageDeviceNetSetting;
+        private AutoDataGridControl GridDeviceList;
+        private DevExpress.XtraBars.BarButtonItem ButtonPollingSetting;
+        private DevExpress.XtraBars.BarButtonItem ButtionPolling;
+        private DevExpress.XtraTab.XtraTabPage PagePollingSetting;
+        private DevExpress.XtraTab.XtraTabPage PagePolling;
+        private DevExpress.XtraGrid.Columns.GridColumn de_id;
+        private DevExpress.XtraGrid.Columns.GridColumn de_code;
+        private DevExpress.XtraGrid.Columns.GridColumn de_name;
+        private DevExpress.XtraGrid.Columns.GridColumn de_runstatus;
+        private DevExpress.XtraGrid.Columns.GridColumn de_indate;
+        private DevExpress.XtraGrid.Columns.GridColumn de_spec;
+        private DevExpress.XtraGrid.Columns.GridColumn de_vendcode;
+        private DevExpress.XtraGrid.Columns.GridColumn de_vendname;
+        private DevExpress.XtraGrid.Columns.GridColumn de_address;
+        private DevExpress.XtraGrid.Columns.GridColumn de_wccode;
+        private AutoDataGridControl GridCommandSetting;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_id;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_code;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_name;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_value;
+        private AutoDataGridControl GridPolling;
+        private AutoDataGridControl GridPollingSetting;
+        private DevExpress.XtraGrid.Columns.GridColumn pl_id;
+        private DevExpress.XtraGrid.Columns.GridColumn pl_code;
+        private DevExpress.XtraGrid.Columns.GridColumn pl_name;
+        private DevExpress.XtraGrid.Columns.GridColumn pl_type;
+        private DevExpress.XtraGrid.Columns.GridColumn pl_dccode;
+        private DevExpress.XtraGrid.Columns.GridColumn pl_remark;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_id;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_decode;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_interval;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_dccode;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_function;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_enable;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_status;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_remark;
+        private DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit dpc_enableCheckEdit;
+        private CustomerControl.Button.ButtonSaveGrid ButtonSaveCommand;
+        private CustomerControl.Button.ButtonAddRow ButtonNewCommand;
+        private GridViewWithSerialNum GridViewDeviceList;
+        private GridViewWithSerialNum GridViewCommandSet;
+        private GridViewWithSerialNum GridViewPolling;
+        private GridViewWithSerialNum GridViewPollSetting;
+        private LabelControl Brand_label;
+        private ComboBoxEdit Brand;
+        private DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit CheckEditCommandSet;
+        private CustomerControl.Button.ButtonDeleteRow ButtonDeleteCommand;
+        private CustomerControl.Button.ButtonDeleteRow ButtonDeletePolling;
+        private CustomerControl.Button.ButtonSaveGrid ButtonSavePolling;
+        private CustomerControl.Button.ButtonAddRow ButtonAddPolling;
+        private SimpleButton ButtonPausePolling;
+        private SimpleButton ButtonStartPolling;
+        private CustomerControl.Button.ButtonDeleteRow ButtonDeleteCommandSet;
+        private CustomerControl.Button.ButtonAddRow ButtonNewCommandSet;
+        private CustomerControl.Button.ButtonSaveGrid ButtonSaveCommandSet;
+        private DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit PollingSetItemLookUpEdit;
+        private DevExpress.XtraGrid.Columns.GridColumn POLLSETTINGSTATUSCOLUMN;
+        private DevExpress.XtraGrid.Columns.GridColumn PollSettingCheckedColumn;
+        private DevExpress.XtraGrid.Columns.GridColumn CommandSetCheckedColumn;
+        private DevExpress.XtraGrid.Columns.GridColumn PollingCheckedColumn;
+        private DevExpress.XtraEditors.Repository.RepositoryItemSearchLookUpEdit PollSettingItemSearchLookUpEdit;
+        private DevExpress.XtraGrid.Views.Grid.GridView PollSettingItemSearchLookUpEditView;
+        private DevExpress.XtraGrid.Columns.GridColumn gridColumn4;
+        private DevExpress.XtraGrid.Columns.GridColumn gridColumn5;
+        private DevExpress.XtraBars.BarButtonItem ButtonDeviceStatus;
+        private DevExpress.XtraBars.BarButtonItem ButtonWorkCenterStatus;
+        private AutoDataGridControl GridDeviceNetSetting;
+        private GridViewWithSerialNum GridViewDeviceNetSetting;
+        private DevExpress.XtraTab.XtraTabPage PageDeviceStatus;
+        private DevExpress.XtraTab.XtraTabPage PageWorkCenterStatus;
+        private DevExpress.XtraGrid.Columns.GridColumn dnc_id;
+        private DevExpress.XtraGrid.Columns.GridColumn dnc_decode;
+        private DevExpress.XtraGrid.Columns.GridColumn dnc_getway;
+        private DevExpress.XtraGrid.Columns.GridColumn dnc_upperip;
+        private DevExpress.XtraGrid.Columns.GridColumn dnc_port;
+        private DevExpress.XtraGrid.Columns.GridColumn dnc_mac;
+        private DevExpress.XtraGrid.Columns.GridColumn dnc_ip;
+        private DevExpress.XtraGrid.Columns.GridColumn dnc_type;
+        private CustomerControl.Button.ButtonDeleteRow ButtonDeleteNetConfig;
+        private CustomerControl.Button.ButtonAddRow ButtonAddNetConfig;
+        private CustomerControl.Button.ButtonSaveGrid ButtonSaveNetConfig;
+        private DevExpress.XtraGrid.Columns.GridColumn NetSettingCheckedColumn;
+        private DevExpress.XtraGrid.Columns.GridColumn gridColumn2;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_sendcoding;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_receivecoding;
+        private DevExpress.XtraEditors.Repository.RepositoryItemComboBox CommandSetRepositoryItemComboBox1;
+        private System.Windows.Forms.Timer TimerDeviceStatus;
+        private AutoDataGridControl GridWorkCenterStatus;
+        private GridViewWithSerialNum GridViewWorkCenterStatus;
+        private XtraScrollableControl PanelDeviceStatus;
+        private DevExpress.Utils.ToolTipController CommonTipController;
+        private LabelControl ComboxDeviceStatusWC_label;
+        private LabelControl ComboxDeviceStatusLC_label;
+        private CheckEdit CheckEditDeviceStatusEnable;
+        private ComboBoxEdit ComboxDeviceStatusLC;
+        private ComboBoxEdit ComboxDeviceStatusWC;
+        private LabelControl ComBoxDeviceListMan_label;
+        private ComboBoxEdit ComboxDeviceListWC;
+        private ComboBoxEdit ComboxDeviceListLC;
+        private LabelControl ComboxDeviceListLC_label;
+        private LabelControl ComboxDeviceListWC_label;
+        private SearchLookUpEdit ComBoxDeviceListMan;
+        private DevExpress.XtraGrid.Views.Grid.GridView searchLookUpEdit1View;
+        private DevExpress.XtraGrid.Columns.GridColumn em_code;
+        private DevExpress.XtraGrid.Columns.GridColumn em_name;
+        private DevExpress.XtraGrid.Columns.GridColumn de_inman;
+        private DevExpress.XtraGrid.Columns.GridColumn de_linecode;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_type;
+        private DevExpress.XtraGrid.Columns.GridColumn db_name;
+        private DevExpress.XtraGrid.Columns.GridColumn dpc_man;
+        private DevExpress.XtraGrid.Columns.GridColumn em_name1;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_man;
+        private DevExpress.XtraGrid.Columns.GridColumn dc_date;
+        private DevExpress.XtraGrid.Columns.GridColumn de_stepcode;
+        private DevExpress.XtraGrid.Columns.GridColumn de_stepname;
+        private CustomerControl.Button.ButtonAddRow ButtonAddDevice;
+        private CustomerControl.Button.ButtonDeleteRow ButtonDeleteDevice;
+        private CustomerControl.Button.ButtonSaveGrid ButtonSaveDevice;
+        private DevExpress.XtraGrid.Columns.GridColumn DeviceListCheckedColumn;
+    }
+}

+ 764 - 0
PLCDataReader/Main.cs

@@ -0,0 +1,764 @@
+using System;
+using System.Data;
+using System.Text;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Threading;
+using System.Windows.Forms;
+using DevExpress.XtraBars;
+using DevExpress.XtraGrid.Views.Grid;
+using DevExpress.XtraBars.Ribbon;
+using DevExpress.XtraEditors.Controls;
+using DevExpress.XtraEditors;
+using UAS_PLCDataReader.DataOperate;
+using UAS_PLCDataReader.Entity;
+using UAS_PLCDataReader.PublicMethod;
+using UAS_PLCDataReader.CustomerControl.PictureEditWithText;
+using UAS_PLCDataReader.Device.Infomation;
+
+namespace UAS_PLCDataReader
+{
+    public partial class Main : RibbonForm
+    {
+
+        StringBuilder sql = new StringBuilder();
+        //用于设备状态查询界面SQL查看
+        StringBuilder DeviceStatusQuerySQL = new StringBuilder();
+        //用于设备主档资料查询界面SQL查看
+        StringBuilder DeviceListQuerySQL = new StringBuilder();
+        DataHelper dh = SystemInf.dh;
+        ModeBusTCPServer mbt = new ModeBusTCPServer();
+        List<string> SQL = new List<string>();
+
+        #region 初始化代码
+        public Main()
+        {
+            InitializeComponent();
+            CheckForIllegalCrossThreadCalls = false;
+            dpc_enableCheckEdit.QueryCheckStateByValue += CheckedEdit_QueryCheckStateByValue;
+            CommandSetRepositoryItemComboBox1.ParseEditValue += CommandSetRepositoryItemComboBox1_ParseEditValue;
+            CheckEditCommandSet.QueryCheckStateByValue += CheckedEdit_QueryCheckStateByValue;
+            PollSettingItemSearchLookUpEdit.ParseEditValue += PollSettingItemSearchLookUpEdit_ParseEditValue;
+            GridViewPollSetting.RowCellStyle += GridViewPollSetting_RowCellStyle;
+            #region 添加发送接收编码规则的静态值
+            ComboBoxData cbd = new ComboBoxData();
+            cbd.Text = "UTF-8";
+            cbd.Value = "UTF-8";
+            ComboBoxData cbd1 = new ComboBoxData();
+            cbd1.Text = "Hexadecimal";
+            cbd1.Value = "Hexadecimal";
+            ComboBoxData cbd2 = new ComboBoxData();
+            cbd2.Text = "ASCII";
+            cbd2.Value = "ASCII";
+            CommandSetRepositoryItemComboBox1.Items.Add(cbd);
+            CommandSetRepositoryItemComboBox1.Items.Add(cbd1);
+            CommandSetRepositoryItemComboBox1.Items.Add(cbd2);
+            #endregion
+        }
+
+        private void CommandSetRepositoryItemComboBox1_ParseEditValue(object sender, ConvertEditValueEventArgs e)
+        {
+            string val = "";
+            if (e.Value != null)
+            {
+                val = e.Value.ToString();
+            }
+            else
+            {
+                val = "FALSE";//默认为不选   
+            }
+            e.Value = val;
+            e.Handled = true;
+        }
+
+        private void PollSettingItemSearchLookUpEdit_ParseEditValue(object sender, ConvertEditValueEventArgs e)
+        {
+            e.Handled = true;
+        }
+
+        private void Main_Load(object sender, EventArgs e)
+        {
+            //设备列表
+            GridDeviceList.GetDataSQL = "SELECT 0 CHECKEDCOLUMN,DE_ID,DE_CODE,DE_NAME,DE_SPEC,DE_INDATE,DE_RUNSTATUS,DE_ADDRESS,DE_INMAN,DE_LINECODE,DE_WCCODE,DE_VENDCODE,DE_VENDNAME,DE_STEPCODE,DE_STEPNAME FROM DEVICE ORDER BY DE_CODE".ToUpper();
+            GridDeviceList.TableName = "device";
+            GridDeviceList.ID = "de_id";
+            GridDeviceList.InsertSQL = "INSERT INTO DEVICE(DE_ID,DE_CODE,DE_NAME,DE_SPEC,DE_INDATE,DE_RUNSTATUS,DE_ADDRESS,DE_INMAN,DE_LINECODE,DE_WCCODE,DE_VENDCODE,DE_VENDNAME,DE_STEPCODE,DE_STEPNAME) VALUES(DEVICE_SEQ.NEXTVAL,:DE_CODE,:DE_NAME,:DE_SPEC,:DE_INDATE,:DE_RUNSTATUS,:DE_ADDRESS,:DE_INMAN,:DE_LINECODE,:DE_WCCODE,:DE_VENDCODE,:DE_VENDNAME,:DE_STEPCODE,:DE_STEPNAME)";
+            ButtonAddDevice.Grid = GridDeviceList;
+            ButtonSaveDevice.Grid = GridDeviceList;
+            ButtonDeleteDevice.Grid = GridDeviceList;
+            //ToolPageControlDeviceList.Gridcontrol = GridDeviceList;
+            //轮询业务
+            //GridPolling.GetDataSQL = "select 0 CHECKEDCOLUMN,pl_id,pl_code,pl_name,pl_type,pl_dccode,pl_remark from polling".ToUpper();
+            //GridPolling.ID = "pl_id";
+            //GridPolling.TableName = "polling";
+            //GridPolling.InsertSQL = "insert into polling(pl_id,pl_code,pl_name,pl_type,pl_dccode,pl_remark) values(polling_seq.nextval,:pl_code,:pl_name,:pl_type,:pl_dccode,:pl_remark)";
+            //ButtonDeletePolling.Grid = GridPolling;
+            //ButtonSavePolling.Grid = GridPolling;
+            //ButtonAddPolling.Grid = GridPolling;
+            //轮询配置界面
+            GridPollingSetting.GetDataSQL = "SELECT '' POLLSETTINGSTATUSCOLUMN,0 CHECKEDCOLUMN,DPC_MAN,DPC_ID,DPC_DECODE ,DPC_INTERVAL ,DPC_DCCODE ,DPC_FUNCTION , nvl(DPC_ENABLE,0)DPC_ENABLE,DPC_STATUS,DPC_REMARK,EM_NAME FROM DEVICEPOLLINGCONFIG left join EMPLOYEE on em_code=dpc_man WHERE DPC_MAN='" + User.UserCode + "' ORDER BY DPC_ID";
+            GridPollingSetting.ID = "DPC_ID";
+            GridPollingSetting.TableName = "DEVICEPOLLINGCONFIG";
+            GridPollingSetting.InsertSQL = "insert into DEVICEPOLLINGCONFIG(DPC_ID,DPC_DECODE ,DPC_INTERVAL ,DPC_DCCODE ,DPC_FUNCTION , DPC_ENABLE,DPC_STATUS ,DPC_REMARK,DPC_MAN) values(DEVICEPOLLINGCONFIG_seq.nextval,:DPC_DECODE  ,:DPC_INTERVAL ,:DPC_DCCODE ,:DPC_FUNCTION , :DPC_ENABLE,:DPC_STATUS ,:DPC_REMARK,'" + User.UserCode + "')";
+            ButtonSaveCommandSet.Grid = GridPollingSetting;
+            ButtonNewCommandSet.Grid = GridPollingSetting;
+            ButtonDeleteCommandSet.Grid = GridPollingSetting;
+
+            //指令设置界面
+            GridCommandSetting.GetDataSQL = "select 0 CHECKEDCOLUMN,dc_id,dc_code,dc_name,dc_type,dc_value,dc_sendcoding,dc_receivecoding,db_name,dc_man,to_char(dc_date,'YYYY-MM-DD HH:mi:ss')dc_date from devicecommand left join devicebrand on db_code=dc_debrand".ToUpper();
+            GridCommandSetting.TableName = "devicecommand";
+            GridCommandSetting.ID = "dc_id";
+            GridCommandSetting.InsertSQL = "insert into devicecommand(dc_id,dc_code,dc_name,dc_value,dc_debrand,dc_sendcoding,dc_receivecoding,dc_man,dc_date) values(devicecommand_seq.nextval,:dc_code,:dc_name,:dc_value,'" + BaseUtil.GetComboxEditValue(Brand) + "',:dc_sendcoding,:dc_receivecoding,'" + User.UserName + "',sysdate)";
+            ButtonSaveCommand.Grid = GridCommandSetting;
+            ButtonDeleteCommand.Grid = GridCommandSetting;
+            ButtonNewCommand.Grid = GridCommandSetting;
+
+            //设备联网配置界面
+            GridDeviceNetSetting.GetDataSQL = "SELECT 0 CHECKEDCOLUMN,DNC_ID,DNC_DECODE,DNC_GATEWAY,DNC_UPPERIP,DNC_PORT,DNC_MAC,DNC_IP,DNC_TYPE FROM DEVICENETCONFIG order by DNC_ID";
+            GridDeviceNetSetting.ID = "dnc_id";
+            GridDeviceNetSetting.TableName = "DEVICENETCONFIG";
+            GridDeviceNetSetting.InsertSQL = "insert into DEVICENETCONFIG(DNC_ID,DNC_DECODE,DNC_GATEWAY,DNC_UPPERIP,DNC_PORT,DNC_MAC,DNC_IP,DNC_TYPE) values(DEVICENETCONFIG_SEQ.NEXTVAL,:DNC_DECODE,:DNC_GATEWAY,:DNC_UPPERIP,:DNC_PORT,:DNC_MAC,:DNC_IP,:DNC_TYPE)";
+            ButtonDeleteNetConfig.Grid = GridDeviceNetSetting;
+            ButtonAddNetConfig.Grid = GridDeviceNetSetting;
+            ButtonSaveNetConfig.Grid = GridDeviceNetSetting;
+
+            Ptime = new Dictionary<int, PollingTimer>();
+        }
+        /// <summary>
+        /// 关闭前将所有设备离线,状态更新为离线
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Main_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            dh.ExecuteSql("update devicepollingconfig set dpc_status='Stop' where dpc_status='Running'", "update");
+            dh.ExecuteSql("update devicepollinglog set dpg_status='Stop' where dpg_status='Running'", "update");
+        }
+        #endregion
+
+        #region 设备列表界面
+        private void GridViewDeviceList_RowCellClick(object sender, RowCellClickEventArgs e)
+        {
+            string de_code = GridViewDeviceList.GetRowCellValue(e.RowHandle, "DE_CODE").ToString();
+            DeviceDetailInfo ddi = new DeviceDetailInfo(de_code);
+            ddi.StartPosition = FormStartPosition.CenterScreen;
+            ddi.ShowDialog();
+        }
+
+        private void PageDeviceList_VisibleChanged(object sender, EventArgs e)
+        {
+            if (PageDeviceList.PageVisible)
+            {
+                DataTable dt;
+                //填充人员资料,工作中心,线别下拉框
+                ComBoxDeviceListMan.Properties.DataSource = (DataTable)dh.ExecuteSql("select em_code,em_name from employee ", "select");
+                dt = (DataTable)dh.ExecuteSql("select wc_code,wc_name from workcenter", "select");
+                BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceListWC, "wc_name", "wc_code", dt, true);
+            }
+        }
+
+        private void ButtonSaveDevice_Click(object sender, EventArgs e)
+        {
+            ButtonSaveDevice.DoSaveAfterHandler();
+            sql.Clear();
+            sql.Append("update device set de_inman='" + User.UserName + "' where de_id=:de_id");
+            dh.BatchInsert(sql.ToString(), new string[] { "de_id" }, ButtonSaveDevice.LastSaveID);
+            GridDeviceList.RefreshData();
+        }
+
+        private void ComboxDeviceListWC_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            DeviceListQuerySQL.Clear();
+            string WC = BaseUtil.GetComboxEditValue(ComboxDeviceListWC);
+            DeviceListQuerySQL.Append("select  0 CHECKEDCOLUMN,de_id,de_code,de_name,de_spec,de_indate,de_runstatus,de_address,de_wccode,de_inman,de_linecode");
+            DeviceListQuerySQL.Append("de_vendcode,de_vendname,de_stepcode,de_stepname from device where de_wccode='" + WC + "' order by de_code");
+            sql.Clear();
+            if (WC == "全部")
+                sql.Append("select li_code,li_name from line");
+            else
+                sql.Append("select li_code,li_name from line where li_wccode='" + WC + "'");
+            DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
+            BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceListLC, "li_code", "li_name", dt, true);
+            RefreshDeviceData();
+        }
+
+        private void ComboxDeviceListLC_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            DeviceListQuerySQL.Clear();
+            string WC = BaseUtil.GetComboxEditValue(ComboxDeviceListWC);
+            string LC = BaseUtil.GetComboxEditValue(ComboxDeviceListLC);
+            DeviceListQuerySQL.Append("select 0 CHECKEDCOLUMN,de_id,de_code,de_name,de_spec,de_indate,de_runstatus,de_address,de_wccode, ");
+            DeviceListQuerySQL.Append("de_vendcode,de_vendname,de_inman,de_linecode,de_stepcode,de_stepname from device ");
+            if (WC != "全部" && LC != "全部")
+                DeviceListQuerySQL.Append(" where de_wccode='" + WC + "' and de_linecode='" + LC + "' ");
+            if (WC == "全部" && LC != "全部")
+                DeviceListQuerySQL.Append(" where de_linecode='" + LC + "' ");
+            if (WC != "全部" && LC == "全部")
+                DeviceListQuerySQL.Append(" where de_wccode='" + WC + "' ");
+            DeviceListQuerySQL.Append("order by de_code");
+            RefreshDeviceData();
+        }
+
+        private void ComBoxDeviceListMan_EditValueChanged(object sender, EventArgs e)
+        {
+
+        }
+
+        private void RefreshDeviceData()
+        {
+            GridDeviceList.GetDataSQL = DeviceListQuerySQL.ToString();
+            GridDeviceList.RefreshData();
+        }
+        #endregion
+
+        #region 界面通用事件
+        /// <summary>
+        /// 选项卡切换不同XPage
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ButtonItem_ItemClick(object sender, ItemClickEventArgs e)
+        {
+            HideXPage(e.Item.Tag.ToString());
+        }
+
+        /// <summary>
+        /// 根据点击按钮的Tag显示对应的XPage
+        /// </summary>
+        /// <param name="PageName"></param>
+        private void HideXPage(string PageName)
+        {
+            for (int i = 0; i < MainTabControl.TabPages.Count; i++)
+            {
+                if (MainTabControl.TabPages[i].Name == PageName)
+                    MainTabControl.TabPages[i].PageVisible = true;
+                else
+                    MainTabControl.TabPages[i].PageVisible = false;
+            }
+        }
+
+        /// <summary>
+        /// 勾选Grid的CheckBox
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void CheckedEdit_QueryCheckStateByValue(object sender, DevExpress.XtraEditors.Controls.QueryCheckStateByValueEventArgs e)
+        {
+            string val = "";
+            if (e.Value != null)
+            {
+                val = e.Value.ToString();
+            }
+            else
+            {
+                val = "FALSE";//默认为不选   
+            }
+            switch (val.ToUpper())
+            {
+                case "TRUE":
+                case "YES":
+                case "1":
+                    e.CheckState = CheckState.Checked;
+                    break;
+                case "FALSE":
+                case "NO":
+                case "0":
+                    e.CheckState = CheckState.Unchecked;
+                    break;
+                default:
+                    e.CheckState = CheckState.Checked;
+                    break;
+            }
+            e.Handled = true;
+        }
+        #endregion
+
+        #region PageCommandSet业务代码(指令设置)
+        /// <summary>
+        /// 判断指令编号不能重复
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ButtonSaveCommand_Click(object sender, EventArgs e)
+        {
+            GridCommandSetting.InsertSQL = "insert into devicecommand(dc_id,dc_code,dc_name,dc_value,dc_debrand,dc_sendcoding,dc_receivecoding,dc_man,dc_date) values(devicecommand_seq.nextval,:dc_code,:dc_name,:dc_value,'" + BaseUtil.GetComboxEditValue(Brand) + "',:dc_sendcoding,:dc_receivecoding,'" + User.UserName + "',sysdate)";
+            ButtonSaveCommand.DoSaveAfterHandler();
+            sql.Clear();
+            sql.Append("update devicecommand set dc_man='" + User.UserName + "',dc_date=sysdate where dc_id=:dc_id");
+            dh.BatchInsert(sql.ToString(), new string[] { "dc_id" }, ButtonSaveCommand.LastSaveID);
+            GridCommandSetting.RefreshData();
+        }
+
+        /// <summary>
+        /// 加载ComBox品牌数据
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void PageCommandSet_VisibleChanged(object sender, EventArgs e)
+        {
+            if (PageCommandSet.PageVisible)
+            {
+
+                DataTable dt = (DataTable)SystemInf.dh.ExecuteSql("select * from devicebrand", "select");
+                BaseUtil.FillComBoxEditWidthDataTable(Brand, "db_name", "db_code", dt);
+                GridCommandSetting.Condition = " where dc_debrand='" + BaseUtil.GetComboxEditValue(Brand) + "' order by dc_id";
+            }
+        }
+
+        private void Brand_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            GridCommandSetting.Condition = " where dc_debrand='" + BaseUtil.GetComboxEditValue(Brand) + "' order by dc_id";
+            GridCommandSetting.RefreshData();
+        }
+
+        #endregion
+
+        #region PagePollingSetting业务代码(轮询配置)
+
+        PollingTask pt = new PollingTask();
+        /// <summary>
+        /// 绘制轮询配置状态栏
+        /// </summary>
+        List<int> PollSettingPaintRowIndex = new List<int>();
+
+        private void ButtonStartPolling_Click(object sender, EventArgs e)
+        {
+            GridView grid = GridViewPollSetting;
+            for (int i = 0; i < GridPollingSetting.RowCount; i++)
+            {
+                Polling pl = new Polling();
+                pl.Id = int.Parse(GridViewPollSetting.GetRowCellValue(i, "DPC_ID").ToString());
+                pl.DeviceCode = GridViewPollSetting.GetRowCellValue(i, "DPC_DECODE").ToString();
+                pl.CommandCode = GridViewPollSetting.GetRowCellValue(i, "DPC_DCCODE").ToString();
+                pl.Interval = int.Parse(GridViewPollSetting.GetRowCellValue(i, "DPC_INTERVAL").ToString());
+                pl.Enable = GridViewPollSetting.GetRowCellValue(i, "DPC_ENABLE").ToString() != "0";
+                pl.Dh = new DataHelper();
+                if (pl.Enable)
+                {
+                    //插入轮询日志
+                    sql.Clear();
+                    sql.Append("insert into DEVICEPOLLINGLOG(dpg_id,dpg_decode,dpg_starttime,dpg_interval)values");
+                    sql.Append("(DEVICEPOLLINGLOG_seq.nextval,'" + pl.DeviceCode + "',sysdate,'" + pl.Interval + "')");
+                    dh.ExecuteSql(sql.ToString(), "insert");
+                    pt.AddTask(RunTask, pl);
+                    //添加到状态为运行的行
+                    PollSettingPaintRowIndex.Add(i);
+                    GridPollingSetting.Focus();
+                }
+            }
+        }
+
+        /// <summary>
+        /// 绘制轮询状态
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void GridViewPollSetting_RowCellStyle(object sender, RowCellStyleEventArgs e)
+        {
+            if (e.Column.Name.ToUpper() == "POLLSETTINGSTATUSCOLUMN" && PollSettingPaintRowIndex.Contains(e.RowHandle))
+            {
+                e.Appearance.BackColor = Color.Green;
+            }
+        }
+
+        Dictionary<int, PollingTimer> Ptime;
+
+        private void RunTask(object i)
+        {
+            PollingTimer timer = new PollingTimer();
+            Polling pl = (Polling)i;
+            timer.Polling = i;
+            timer.Interval = pl.Interval * 1000;
+            timer.Elapsed += Timer_Tick;
+            timer.Start();
+            try
+            {
+                if (!Ptime.ContainsKey(pl.Id))
+                    Ptime.Add(pl.Id, timer);
+            }
+            catch (Exception)
+            {
+                if (!Ptime.ContainsKey(pl.Id))
+                    Ptime.Add(pl.Id, timer);
+            }
+        }
+
+        /// <summary>
+        /// 轮询执行的业务
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Timer_Tick(object sender, EventArgs e)
+        {
+            PollingTimer timer = (PollingTimer)sender;
+            Polling pl = (Polling)timer.Polling;
+            DataHelper dh = pl.Dh;
+            string Decode = pl.DeviceCode;
+            string Dccode = pl.CommandCode;
+            DataTable dt = (DataTable)dh.ExecuteSql("select dnc_ip,dnc_port from DEVICENETCONFIG where dnc_decode='" + Decode + "'", "select");
+            DataTable dt1 = (DataTable)dh.ExecuteSql("select dc_sendcoding,dc_value,dc_receivecoding from devicecommand where dc_code='" + Dccode + "'", "select");
+            if (dt.Rows.Count > 0)
+            {
+                string IP = dt.Rows[0]["dnc_ip"].ToString() + ":" + dt.Rows[0]["dnc_port"].ToString();
+                string SendCoding = "";
+                string ReceiveCoding = "";
+                string Command = "";
+                int SendCommandByteSize = 0;
+                if (dt1.Rows.Count > 0)
+                {
+                    SendCoding = dt1.Rows[0]["dc_sendcoding"].ToString();
+                    ReceiveCoding = dt1.Rows[0]["dc_receivecoding"].ToString();
+                    Command = dt1.Rows[0]["dc_value"].ToString();
+                    SendCommandByteSize = Encoding.Default.GetBytes(Command.ToCharArray()).Length;
+                }
+                //mbt.Send(IP, SendCoding, ReceiveCoding, Command);
+                ////处理2秒之内返回的指令
+                ////Thread.Sleep(1000);
+                //if (mbt.Returnvalue.ContainsKey(IP))
+                //{
+                //    int ReceiveCommandByteSize = Encoding.Default.GetBytes(mbt.Returnvalue[IP].ToCharArray()).Length;
+                //    mbt.Returnvalue.Remove(IP);
+                //    SQL.Clear();
+                //    //更新轮询状态
+                //    sql.Clear();
+                //    sql.Append("update DEVICEPOLLINGCONFIG set dpc_status='Running' where dpc_decode='" + Decode + "' and dpc_dccode='" + Dccode + "'");
+                //    dh.ExecuteSql(sql.ToString(), "update");
+                //    //SQL.Add(sql.ToString());
+                //    //更新轮询日志状态
+                //    sql.Clear();
+                //    sql.Append("update DEVICEPOLLINGLOG set dpg_status='Running',dpg_senddatasize=nvl(dpg_senddatasize,0)+" + SendCommandByteSize);
+                //    sql.Append(",dpg_receivedatasize=nvl(dpg_receivedatasize,0)+" + ReceiveCommandByteSize + ",dpg_count=nvl(dpg_count,0)+1 ");
+                //    sql.Append(" where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + Decode + "')");
+                //    //SQL.Add(sql.ToString());
+                //    dh.ExecuteSql(sql.ToString(), "update");
+                //    //dh.ExecuteSQLTran(SQL.ToArray());
+                //}
+                //else
+                //{
+                //    SQL.Clear();
+                //    //更新轮询状态
+                //    sql.Clear();
+                //    sql.Append("update DEVICEPOLLINGCONFIG set dpc_status='Stop' where dpc_decode='" + Decode + "' and dpc_dccode='" + Dccode + "'");
+                //    //SQL.Add(sql.ToString());
+                //    dh.ExecuteSql(sql.ToString(), "update");
+                //    //更新轮询日志状态
+                //    sql.Clear();
+                //    sql.Append("update DEVICEPOLLINGLOG set dpg_status='Running',dpg_senddatasize=nvl(dpg_senddatasize,0)+");
+                //    sql.Append(SendCommandByteSize + ",dpg_count=nvl(dpg_count,0)+1 ");
+                //    sql.Append("where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + Decode + "')");
+                //    //SQL.Add(sql.ToString());
+                //    dh.ExecuteSql(sql.ToString(), "update");
+                //    //dh.ExecuteSQLTran(SQL.ToArray());
+                //}
+            }
+        }
+
+        /// <summary>
+        /// 停止全部轮询
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ButtonPausePolling_Click(object sender, EventArgs e)
+        {
+            foreach (var item in Ptime)
+            {
+                item.Value.Stop();
+            }
+            PollSettingPaintRowIndex.Clear();
+            GridPollingSetting.Focus();
+            Ptime.Clear();
+        }
+
+        private void GridViewPollSetting_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
+        {
+            if (e.Column.Name.ToUpper() == "DPC_ENABLE")
+            {
+                GridViewPollSetting.SetRowCellValue(e.RowHandle, e.Column, e.Value);
+                if (GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_ENABLE").ToString() == "0")
+                {
+                    //DialogResult cancel = XtraMessageBox.Show("确认禁用该轮询?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+                    //if (cancel.ToString() == "Yes")
+                    //{
+                    int id = int.Parse(GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_ID").ToString());
+                    if (Ptime.ContainsKey(id))
+                    {
+                        Ptime[id].Stop();
+                        Ptime.Remove(id);
+                        PollSettingPaintRowIndex.Remove(e.RowHandle);
+                    }
+                    //}
+                    //else
+                    //{
+                    //    Cancel = false;
+                    //    GridViewPollSetting.SetRowCellValue(e.RowHandle, e.Column, -1);
+                    //}
+                }
+                else
+                {
+                    Polling pl = new Polling();
+                    pl.Id = int.Parse(GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_ID").ToString());
+                    pl.DeviceCode = GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_DECODE").ToString();
+                    pl.Interval = int.Parse(GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_INTERVAL").ToString());
+                    pl.CommandCode = GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_DCCODE").ToString();
+                    pl.Enable = GridViewPollSetting.GetRowCellValue(e.RowHandle, "DPC_ENABLE").ToString() != "0";
+                    pl.Dh = new DataHelper();
+                    if (pl.Enable)
+                        pt.AddTask(RunTask, pl);
+                    PollSettingPaintRowIndex.Add(e.RowHandle);
+                }
+            }
+        }
+
+        private void GridViewPollSetting_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
+        {
+
+        }
+
+        private void ButtonSaveCommandSet_Click(object sender, EventArgs e)
+        {
+            ButtonSaveCommandSet.DoSaveAfterHandler();
+            sql.Clear();
+            sql.Append("update DEVICEPOLLINGCONFIG set dpc_man='" + User.UserCode + "' where dpc_id=:dpc_id");
+            dh.BatchInsert(sql.ToString(), new string[] { "dpc_id" }, ButtonSaveCommandSet.LastSaveID);
+            GridPollingSetting.RefreshData();
+        }
+        /// <summary>
+        /// 设置GridView多选放大镜
+        /// </summary>
+        /// <param name="sender"></param> 
+        /// <param name="e"></param>
+        private void PagePollingSetting_VisibleChanged(object sender, EventArgs e)
+        {
+            if (PagePollingSetting.PageVisible)
+            {
+                //如果未开启则进行开启
+                if (!mbt.IsOpen)
+                    mbt.Open();
+                DataTable dt = (DataTable)SystemInf.dh.ExecuteSql("SELECT DC_CODE,DC_NAME,DC_REMARK FROM DEVICECOMMAND", "select");
+                PollSettingItemSearchLookUpEdit.DataSource = dt;
+                PollSettingItemSearchLookUpEdit.DisplayMember = "DC_CODE";
+                PollSettingItemSearchLookUpEdit.ValueMember = "DC_CODE";
+            }
+        }
+        #endregion
+
+        #region 设备查看界面
+        private void PageDeviceStatus_VisibleChanged(object sender, EventArgs e)
+        {
+            if (PageDeviceStatus.PageVisible)
+            {
+                DeviceStatusQuerySQL.Clear();
+                DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG on dpc_decode=de_code order by de_code");
+                PaintDeviceStatusControl(DeviceStatusQuerySQL.ToString());
+                //填充筛选条件,车间和线体
+                DataTable dt = (DataTable)dh.ExecuteSql("select wc_code,wc_name from workcenter", "select");
+                BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceStatusWC, "wc_name", "wc_code", dt, true);
+            }
+        }
+
+        private void CheckEditDeviceStatusEnable_CheckedChanged(object sender, EventArgs e)
+        {
+            DeviceStatusQuerySQL.Clear();
+            if (CheckEditDeviceStatusEnable.Checked)
+            {
+                DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG ");
+                DeviceStatusQuerySQL.Append("on dpc_decode=de_code where nvl(dpc_enable,0)<>0 order by de_code");
+            }
+            else
+            {
+                DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG ");
+                DeviceStatusQuerySQL.Append("on dpc_decode=de_code order by de_code");
+            }
+            PaintDeviceStatusControl(DeviceStatusQuerySQL.ToString());
+        }
+
+        private void ComboxDeviceStatusWC_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            DeviceStatusQuerySQL.Clear();
+            string WC = BaseUtil.GetComboxEditValue(ComboxDeviceStatusWC);
+            if (CheckEditDeviceStatusEnable.Checked)
+            {
+                DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG ");
+                DeviceStatusQuerySQL.Append("on dpc_decode=de_code where nvl(dpc_enable,0)<>0 and de_wccode='" + WC + "' order by de_code");
+            }
+            else
+            {
+                DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join DEVICEPOLLINGCONFIG ");
+                DeviceStatusQuerySQL.Append("on dpc_decode=de_code where de_wccode='" + WC + "' order by de_code");
+            }
+            PaintDeviceStatusControl(DeviceStatusQuerySQL.ToString());
+            sql.Clear();
+            if (WC == "全部")
+                sql.Append("select li_code,li_name from line");
+            else
+                sql.Append("select li_code,li_name from line where li_wccode='" + WC + "'");
+            DataTable dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
+            BaseUtil.FillComBoxEditWidthDataTable(ComboxDeviceStatusLC, "li_code", "li_name", dt, true);
+        }
+
+        private void ComboxDeviceStatusLC_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            DeviceStatusQuerySQL.Clear();
+            string WC = BaseUtil.GetComboxEditValue(ComboxDeviceStatusWC);
+            string LC = BaseUtil.GetComboxEditValue(ComboxDeviceStatusLC);
+            if (CheckEditDeviceStatusEnable.Checked)
+            {
+                DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join ");
+                DeviceStatusQuerySQL.Append("DEVICEPOLLINGCONFIG on dpc_decode=de_code where nvl(dpc_enable,0)<>0");
+                if (WC != "全部")
+                    DeviceStatusQuerySQL.Append(" and de_wccode='" + WC + "' ");
+                if (LC != "全部")
+                    DeviceStatusQuerySQL.Append(" and de_linecode='" + LC + "' ");
+                DeviceStatusQuerySQL.Append(" order by de_code");
+            }
+            else
+            {
+                DeviceStatusQuerySQL.Append("select distinct de_code,de_name,dpc_status,dpc_id from device left join ");
+                DeviceStatusQuerySQL.Append("DEVICEPOLLINGCONFIG on dpc_decode=de_code ");
+                if (WC != "全部" && LC != "全部")
+                    DeviceStatusQuerySQL.Append(" where de_wccode='" + WC + "' and de_linecode='" + LC + "' ");
+                if (WC == "全部" && LC != "全部")
+                    DeviceStatusQuerySQL.Append(" where de_linecode='" + LC + "' ");
+                if (WC != "全部" && LC == "全部")
+                    DeviceStatusQuerySQL.Append(" where de_wccode='" + WC + "' ");
+                DeviceStatusQuerySQL.Append("order by de_code");
+            }
+            PaintDeviceStatusControl(DeviceStatusQuerySQL.ToString());
+        }
+
+        private void PaintDeviceStatusControl(string SQL)
+        {
+            DataTable dt = (DataTable)dh.ExecuteSql(SQL, "select");
+            //界面重新展示时如过数量不一致则重新绘制
+            if (PanelDeviceStatus.Controls.Count != dt.Rows.Count)
+            {
+                PanelDeviceStatus.Controls.Clear();
+                int CountPerRow = PanelDeviceStatus.Width / 110;
+                int RightPadding = PanelDeviceStatus.Width % 110;
+                int Count = dt.Rows.Count;
+                int RowCount = Count % CountPerRow == 0 ? Count / CountPerRow : Count / CountPerRow + 1;
+                int LastRowCount = 0;
+                for (int i = 0; i < PanelDeviceStatus.Controls.Count; i++)
+                {
+                    PanelDeviceStatus.Controls[i].Dispose();
+                }
+                ContextMenu ContextMenu = new ContextMenu();
+                for (int j = 0; j < RowCount; j++)
+                {
+                    //如果是最后一行则循环尾数
+                    if (j == RowCount - 1)
+                    {
+                        LastRowCount = Count % CountPerRow;
+                    }
+                    for (int i = 0; i < (j == RowCount - 1 ? LastRowCount : CountPerRow); i++)
+                    {
+                        PictureEditWithText pic = new PictureEditWithText();
+                        pic.DeviceName = dt.Rows[j * CountPerRow + i]["de_name"].ToString();
+                        pic.Picedit.ToolTipController = CommonTipController;
+                        pic.Picedit.ContextMenu = ContextMenu;
+                        pic.Picedit.Click += Pic_Click;
+                        pic.Name = dt.Rows[j * CountPerRow + i]["de_code"].ToString() + i + j;
+                        pic.Anchor = AnchorStyles.Left;
+                        pic.Anchor = AnchorStyles.Top;
+                        pic.Picedit.Name = dt.Rows[j * CountPerRow + i]["de_code"].ToString();
+                        pic.Picedit.MouseHover += Pic_MouseHover;
+                        pic.Picedit.Properties.SizeMode = PictureSizeMode.Squeeze;
+                        if (dt.Rows[j * CountPerRow + i]["dpc_status"].ToString() != "Running")
+                        {
+                            pic.Picedit.Image = Properties.Resources.network_offline;
+                        }
+                        else
+                        {
+                            pic.Picedit.Image = Properties.Resources.net_connected;
+                        }
+                        pic.Text = dt.Rows[j * CountPerRow + i]["de_code"].ToString();
+                        pic.Picedit.BorderStyle = BorderStyles.HotFlat;
+                        pic.Location = new Point((10 + RightPadding) / 2 + 110 * i, 10 + j * 150);
+                        PanelDeviceStatus.Controls.Add(pic);
+                    }
+                }
+                BaseUtil.CleanMemory();
+                TimerDeviceStatus.Start();
+            }
+        }
+
+        private void Pic_Click(object sender, EventArgs e)
+        {
+            PictureEdit pic = sender as PictureEdit;
+            DeviceStatusInfo dsi = new DeviceStatusInfo(pic.Name);
+            dsi.StartPosition = FormStartPosition.CenterScreen;
+            dsi.ShowDialog();
+        }
+
+        private void Pic_MouseHover(object sender, EventArgs e)
+        {
+            //使用Tip显示轮询数据
+            PictureEdit pic = sender as PictureEdit;
+            DataTable dt = (DataTable)dh.ExecuteSql("select * from DEVICEPOLLINGLOG where dpg_id=(select max(dpg_id) from DEVICEPOLLINGLOG where dpg_decode='" + pic.Name + "')", "select");
+            if (dt.Rows.Count > 0)
+            {
+                sql.Clear();
+                sql.Append("开始时间" + dt.Rows[0]["dpg_starttime"].ToString() + "\n");
+                sql.Append("发送数据大小" + dt.Rows[0]["dpg_senddatasize"].ToString() + "字节\n");
+                sql.Append("接收数据大小" + dt.Rows[0]["dpg_receivedatasize"].ToString() + "字节\n");
+                sql.Append("轮询次数" + dt.Rows[0]["dpg_count"].ToString() + "次\n");
+                CommonTipController.ShowHint(sql.ToString(), pic.Name);
+            }
+            else
+            {
+                CommonTipController.ShowHint("暂无信息", pic.Name);
+            }
+        }
+
+        //重新展示设备图像界面
+        private void ShowDeviceStatus()
+        {
+            DataTable dt = (DataTable)dh.ExecuteSql(DeviceStatusQuerySQL.ToString(), "select");
+            int CountPerRow = PanelDeviceStatus.Width / 110;
+            int RightPadding = PanelDeviceStatus.Width % 110;
+            int Count = dt.Rows.Count;
+            int RowCount = Count % CountPerRow == 0 ? Count / CountPerRow : Count / CountPerRow + 1;
+            int LastRowCount = 0;
+            //只更换现有控件的图片,不必重新绘制控件
+            for (int j = 0; j < RowCount; j++)
+            {
+                //如果是最后一行则循环尾数
+                if (j == RowCount - 1)
+                {
+                    LastRowCount = Count % CountPerRow;
+                }
+                for (int i = 0; i < (j == RowCount - 1 ? LastRowCount : CountPerRow); i++)
+                {
+                    if (dt.Rows[j * CountPerRow + i]["dpc_status"].ToString() != "Running")
+                    {
+                        (PanelDeviceStatus.Controls[dt.Rows[j * CountPerRow + i]["de_code"].ToString() + i + j] as PictureEditWithText).Picedit.Image = Properties.Resources.network_offline;
+                    }
+                    else
+                    {
+                        (PanelDeviceStatus.Controls[dt.Rows[j * CountPerRow + i]["de_code"].ToString() + i + j] as PictureEditWithText).Picedit.Image = Properties.Resources.net_connected;
+                    }
+                }
+            }
+            BaseUtil.CleanMemory();
+        }
+
+        //刷新界面
+        private void TimerDeviceStatus_Tick(object sender, EventArgs e)
+        {
+            if (PageDeviceStatus.PageVisible)
+            {
+                ShowDeviceStatus();
+            }
+        }
+
+        private void PanelDeviceStatus_SizeChanged(object sender, EventArgs e)
+        {
+            if (PageDeviceStatus.PageVisible)
+            {
+                ShowDeviceStatus();
+                TimerDeviceStatus.Start();
+            }
+        }
+        #endregion
+    }
+}

+ 766 - 0
PLCDataReader/Main.resx

@@ -0,0 +1,766 @@
+<?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>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="ButtonDeviceNetSetting.Glyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACx0RVh0VGl0
+        bGUARG9jdW1lbnQ7TWFwO1NjaGVtZTtEaWFncmFtO0hpZXJhcjtOZXRODypEAAAB80lEQVQ4T5WS3UtT
+        cRzGj261pakb+Er+IRa0i2ApEUvFWiFtShgrCodvF63RTsjEMYKCyhpE1C6ki1IQfLnaqmkZrBcw6GWW
+        V2GCVBj0Ij59Hz3I+d2dDnw4v+e75/c55+wcDcA259MfNTmKBJuwQ9hp4DBykblPlBC68046mj36sJCN
+        jS1hk/EtIg8+PKXI3CdK6Bh5S4FzYLSAzz838MlgcW0DA6OL0tbKzH2iBP/VNxSUBm8u4PXqOmaX/yL3
+        dR2ZL38QvL5AgdvcJ0o4kshTUO4bzuPR+zWkXv7A7VffcUvOvkSegkpznyjBqz+nwOWNzWPkxSrij1cQ
+        z65gSPDq8xRUm/tECZ6LcxTs3tc7nfNcmINkeCI57I/MYm944hnl5j5RQkP/Ewr4CsuFmkPH+tJNbT1p
+        WdcJbsHefFJX9miXp+u3aT+TxIlQEv7TCfi7hnH01BDaOuNo7RhES1CHbIav/RLY1af2aLHJenFufTjF
+        go2bjPUmrQE91RyIpcyzw8ej7PAumblXs4Xv1WXC92tw7m4tQqnarMwcFmd2ChxdN6qx9PsaCr+SCFyp
+        4hUqLM6cFJT4ByuR/xbGzHIjWqJu/lBlcVZKgbOx25Vp6nXhYE8FDpwt4625Lc52UcA/o0RwGXDNZ7My
+        K1be6f8D7R8bleevx1tLIwAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="ButtonDeviceNetSetting.LargeGlyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        YII=
+</value>
+  </data>
+  <data name="ButtonCommandSet.Glyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAcdEVYdFRpdGxlAExlZ2VuZDtMZWdlbmRMb2NhdGlv
+        bjteupJQAAACXElEQVQ4T43Sy1NSYRgG8DM1lV3+H/sLWtRUuxbViLWq1AyzGiBRykxRLhpOi2a6mNNM
+        mdaMXLwCgahTUqsmzJaZoCLKncPl6X2/Axi7Fj+eM3Pe9/k+GKShkaDHNvoNT16zr8LQSEUQg6+CsL5k
+        K7C8WIH5+Reh/9mSV5Kkg1LP00WUAAV9VLNGqQwoCiUYhvyggkNS93BAvHg87IZ76RfmFxVzAcUsmVkg
+        gTXKNUz711Cklk6rTyl4aFsQBY9s84hsJ/dtJREWEghvknJO+X6iQAV6i5cLDkt8Fb7Sg8HZ8mJC4OGN
+        f/yJxAXXp1UUCkXoTB4uOCLpLT5xJYN1pnaBkxZYZZk5vauQqUBjdCsFHSavciXzNA1XTto/sWKdheOw
+        e0KQ80Xc653jgjpJO+BBvlBCh2mqdri8wPmbk3BOukPIyQXc6ZlVCtrpISvTd+p3QWt0UTqhMzrpmTmg
+        7XNCQ7R9DkpFKiOjtcvFBUerBdG9LHbiiijby2B7NytsCRlsxghlTUFb9zQyuYIyTCVd4yHox0LQvf0h
+        llYs5/F54CyWe88gwgWxNBJpGS2dTi44JqkNU0hl82KYT7r75jtcoRgabUGxsNx3GqnVEThaTiK8k0aE
+        xJMymu7bueC41NrpQjKTF8P8ssEcwDmDWwjvZOA3nIKjuR72pnpsRNMkhd1kDjd05YJmvZOulEc8JVft
+        MTqF8bCQyCGWyJKc+J2uaSaVApX6nftq+0dcaf+ARqK6PQFV2wQa1OPC5VvvhUutFWO4eHMMF66Peqig
+        jtC/iZv2nfhPtCwd+At2xfPrFtRf5wAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="ButtonCommandSet.LargeGlyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        /wJFMIQs8XmmmQAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="ButtonPollingSetting.Glyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAATdEVYdFRpdGxlAFRhYmxlO0Zvcm1hdDvurMrjAAAC
+        2ElEQVQ4T3WRW0jTURzHj1musqcyKHwI7CEqEqF6KnoJRRMvb2UqJV5AnZuKRBYaWuYldJnibW7KZiqZ
+        lyxvU6emzqlTE3zRTVG836abltOXb+ccTUXsDx9+v/Pndz7nd36HRMv626LkOkTJdIgs1EEs7YeooA8R
+        eb0QUtg/UUFvOyHEGgA5CmHFTWNraBwzQq7S88iQNo7t5+G5WlpJTh0rCM3u4UXKwUUkKAdoXODEK3RQ
+        DiygYdSI4MwuJrA5VhAo6YKkTo+ooiGI5UMQyfaQDkJYMIjUmjE8+/CTCQTHCiRyLcyb21hdtyD/swYr
+        61u7eUk3zS0wbWwjObfz/4LUgm4Yzdu8uFVjwPKaheeGqVWsmi3Y/LMDdY+BCWwp1pSTe7D8BHmb1YHJ
+        WRNk9R+hnzKiXTuOZSpIKg3BxPwcphc3UFY7hOTsFkozkrIon1R4l6lCgqShncRnqPmJomxnyBvTMDw+
+        wgVecfYIkdxBU/83vl6lXZp+76C12wAzjebNHbxJrwd5mdrMBZHpfpDUuyMo4wYCM67D89VldMyE44X8
+        LhKKAzAxN8tFrZpxPiMmiU2pBYlMqFV3DkyjrFGBoLSb6FkRQrMcip5lEepmPNA27w9p5yM8T7mFH5oq
+        qDUT9Eq/oOrSIyaxis2GCCi21jZW5665n33vk3gFidVOUI7cR8X4A5Qb7iGu3BG3ve2hqCnhHfx7HXH8
+        l92noK2Rqy4C4uAisHJwFvg5PBRUusXYIafPEc7h5/FE7IXRyRl+hRY6AxZNdAahsaUHAreYi6RuypvU
+        TXqwrk67Rl+Ak+clKKpL+IYR/RLKvg9DUTlIGUB92yiCYpSHBNF2xDWKcYEJzrzO990/VdVpwJJxi1P8
+        VUejBWv0VQIiiw4Eh2GCNq0BKyYLFummogq2aWs/Z5HhJ5TtCo5CPxvfsDy1f4Qc/kI5L/QNZxRynoYV
+        widUisfBOeq/3Fy/M5QaWQYAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="ButtonPollingSetting.LargeGlyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        rkJggg==
+</value>
+  </data>
+  <data name="ButtionPolling.Glyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAMdEVYdFRpdGxlAFJlc2V0O2TPgGkAAAONSURBVDhP
+        fZN7TJNnFMbfMkFNkGqcDmYLQpFVUVa0SmmRghSYpSZGKl2hnahjClutbNbNQINFKIWKDgK1cll03rjo
+        gkwFOxiORHGXUDMwZUymbiMuKGMwNZayPfvexmSXP3aSX94v5z3Pc06+7zvkf4LF4PMfaO7fYT4nJWXN
+        iaS8ZQOxnk+iKdbe8pj5Ve2vFdd2bLx57Kp8xu6Qz9g65TdtHRtNBbY4Nq2p704j9d0KQgobxGRqpo88
+        +9NFxT4H7GJZ42fqn3sGy3Bn7CIm3f1eRsba0euqwMfXtD9VtspktPa4Q05IfrWQTHiuecX6SqHK1qbB
+        7dGzYEzxq+dzPHR34pHbgQnPF/j9j6/x3YMWtNzIxeHW5AyqIbvKoqiYpXiTF1RYJ3vy5XAdxp5dRvdg
+        KcynlFAXrPJiPpWBW6M1GJ/uYhqcQf3V15/oStcGEo2RTw1eyDrAP3yiU4/Rpy3ou1uC/Kp4t/ydEEOc
+        OognUQXykndzDuWWSzxdA8UYc1+Cw2lCyemECqLcx6MGflv3hQ+29++Ba9KK6jY1MvZH7Gfyvgz0zVP8
+        FPpQk7VZhR8e18F5346DJ6UDTJ7MZmBv0oVMXRzehE9/TILBJsWy6AVBz+98fvNcp3WseCVnqe5ILIYm
+        KzE0bkdhQ9w02W0WTuRZhHi7Yi3OuURouiNAQV0i9h6NQf5R0WOZKoz90N1FDXxS1bxgQ40Uvb9sx5W7
+        m/FejWiKrM8MfL+oMRW3xi1o+l6IM8ORcD46hIbObGw3CkoYoR/tzjA7x7TadPyKBs0jAtT3iZBXvmaQ
+        zFvoy07Ifule9fUInHCtwMmh5bB/swI7i6PvLwkPWCyID1wkTuMuzTKsNBQ1pLo/cb7BNFkFy/k4aD5Y
+        +SEdzTc6ja3JPMjFR7f5XvJtryJtZ4RWmh6ybkeRYHqPVYwjrem40J+DCyMbYHVE4q3S1U/FiiVh1ICO
+        578ufX6PsS0Y5o5XsEXH72Fyi5X65T1nb2xD76geHffUaBqWwHyZj12WKKRoQ3OYGj8i3BpATWbxRHNj
+        knNf9GiNkR5hysuxSZmh2jxLDBqdsaj+KhymSzzobDwo3132QLKFo2I0cxhYZI1yHjWgU8yNUvjXpmwL
+        q2WeA5Kzecb1GdxvE7KCkagJhlTNHZCkc6q4/AAOc+/9P1J2hDLH30HXlX53yqznJ3Wn20fxZ6Bd/7HW
+        hPwFT86a61YrcdEAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="ButtionPolling.LargeGlyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        ifbQIqnXAgAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="ButtonDeviceStatus.Glyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACF0RVh0VGl0
+        bGUARHJpbGw7RG93bjtDaGFydDtGYWxsO0Fycm93lyIucQAAArRJREFUOE+NUmtIk1EY/jan02lF9KPU
+        hstM1/JSEYkhJPnXG4r36XLmhVXTmVnz85K4xFsazUgJb7n1I+hGNeYE3cpapkiFlKkz0IqQ/KNmzktv
+        5/3cwGI/euDhPe/lec75zncoAGD4D1gO6BhbDWRND7jKO2Z5ac+widYMWxn2vDEpu81yMd3qSkZYpEbR
+        mhGK1g4zmq0GrOL212+NE3Mws7QKc+u/YXrBCi8s89BpnIILneZ3ufUPfXDu8/IGdbFrCDV/GbDlba/g
+        q3UDtIMWSKh4BJEFd+FcSz+Mfl+Ee0OzcL715Vik+BJv4uc6JW8zM3pK0RJCKdQhuGRJap+eCkq5ZRXG
+        N18RxagEh2KrBUfSbladlGmtxplFuK4bB2ljbxGZZeepB1HDAC+ITehEyLER1/bL4xxOVVdmNhhAM/IN
+        xHUG3JqT2ThAwibYsmuigbNNgZDfIDKSHMV2oIGz4ESWb3hON9y3LEGyyrBKah5Yt/UpTn7DQbDMd0Ne
+        vRAvw7lQHUwV3AhmelH0s/fR5XpIqOqDrvEFwHV0mR6iaN0kzuKQc05tAPRNSCG7xh8NuCi0NV2Oi5vD
+        0uuMa/ovK6CdXgHd7C+IyOtZ8wpTRJA+c1qXLNUB6P0kgdPVfmjgfqYmwJRbJ4Tsq/4mkvNCpR10bvso
+        3J5ahuQaA+wOVapIHTdiwM2o8gXdRzGIK/ehwY4slR9M/ugASfV+zN0IeUelmud07wzsOlZq5rh7byc1
+        5vsRrmnlAnjyIQVSy3xQsDO9QgD68UxIK2dyNHDih8v8gzK0Fld+XCDmHqISEjbhlqzkw+OxREi6vJcx
+        SCrlM4aJSiZHAwR+Lx57619i4BJX5NWfUOINsQrPfpJvwxhf7AkxhXsw59pfqyMi8BGhM+5k3wEjzxbZ
+        joR2Oiz+P4H6AyqzjUzILNpjAAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="ButtonDeviceStatus.LargeGlyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        OAos2gAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="ButtonWorkCenterStatus.Glyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+        dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAWdEVYdFRpdGxlAEV4cGxvZGVkUGllO1BpZTts02W8
+        AAADEklEQVQ4T2XS+0+TVxzH8ee/2Q/7B4zJpvGHZZoYoxCRi5eiKMikA+nKpdxUkAC1Cky2GAtMdNlw
+        zkRpwQvtWhkoN0cYagpKpdiWcofSO++d5zjwB394Pd/knO/zeb5PzlGaO0afCjTdUo1Ijb9sGeZa+0dX
+        21RDmFqHuGIelIw3XzxValr+ZhM+Eo/t+pnN/0FC2qSq0Yly6cc+uRgKx9kIx4Q4QVljsub9PEBZxzC3
+        eifxzAdZD8WkhEipuOpAudj8TAaozUHx8op3Dvft20yUlsjG3Ot99LxZos3ppqR9iGFXgLWNKHERUG6y
+        o6hjqOOozYF/xpgo0uE21TF6+pRszBb7Pw0E6BhdpOv1Mvqbz3HPrRKPJyg12lDKTQ45ztKsn/EfCvlw
+        3cSyuZFBjYbVYJSsK3YaHH4anH5MKosLs2WCqAgorutFKTPa5Tiu1namqitZaL6Mv6qA/vQMVtYjZNY9
+        obbXx2Wbl8pHHzDaZsm7ZicaS6CvfYJS0mAjFt9k8GwunroqfAYtfkMezpQUlkVA06/9ZNT3UmSZobhr
+        BoOoxy52E4nG0dU8RlFTIiLNeSQNX0UBXn0O3qIcBsQvTPe9YH4ljN7YxeHqHs4/cKPtdJFd+0ieUv6F
+        HpRCkRKOJvjr6AlcWanM5qbjyUljobGaZ6mpTDn6CSyHMLU5SLpgRdPUT9PvwwRDUbSV1k8Bg/UmhtKS
+        8ZxJYea0kHWYQH0ZtqQkXt5oFyFhjK12Dup+Y2J64VNAwaUeQpE4njfTPNy7j7EjB3CfTOb9ySTcmYeY
+        qyli5JSGkRYzc0shxt/Oi7ohj/hchQUlv6pbXiJ1zFePndzdvQf7N3sYS97Hu6P7GTv0Lfb9e7mz8yve
+        /juJT7zsX9xgdT1KruEhirbCKi+RX6SrG+/GJ+nWl9G6cxctX3yJecfXWHUGpsS6T+x7F1RBeUJnS0XA
+        d+UWMU5MXpotKyrxBZXauG0twtJaWIiwuBomu/gBSqbuvjWz8D6awj85IRw/f4/jBfc4lv+HlPH93W3p
+        2i2dpOWpOq3/AVs2K2Pf2Jb7AAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="ButtonWorkCenterStatus.LargeGlyph" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+</value>
+  </data>
+  <metadata name="TimerDeviceStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="CommonTipController.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>164, 18</value>
+  </metadata>
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAABMLAAATCwAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8S////Mv///1n///9+////n///
+        /7X////F////zf///83////F////tf///5////9+////Wf///zL///8S////AP///wD///8A////AP//
+        /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AP///wD///8B////Hf///1P///+S////xf//
+        /+b////3/////v///////////////////////////////////////////////v////f////m////xf//
+        /5L///9T////Hf///wH///8A////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wn///9A////k///
+        /9j////5////////////////////////////////////////////////////////////////////////
+        ////////////////////////////+f///9j///+T////QP///wn///8A////AP///wD///8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////Cf//
+        /0z///+w////8P////////////////////////////////////////////////7+/v7+/v79/f39/P39
+        /fz+/v79//////////////////////////////////////////////////////////D///+w////TP//
+        /wn///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP//
+        /wD///8B////Of///6n////0/////////////////////////////////Pz8+vDw8Ove3t7Vx8fHv66u
+        rqyZmZmfioqKl4GBgZKCgoKTjY2NmZ2dnaK0tLSxzMzMxOPj49v09PTv/f39/f//////////////////
+        //////////////////T///+p////Of///wH///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD///8A////AP///wD///8U////ff///+f///////////////////////////v7+/rn5+ffvb29uIGB
+        gZJCQkJ5FRUVawAAAGYAAABkAAAAZAAAAGQAAABjAAAAYwAAAGQAAABkAAAAZAMDA2ceHh5uUVFRfpGR
+        kZvJycnC7u7u6P7+/v3//////////////////////////////+f///99////FP///wD///8A////AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8z////t/////7/////////////////////9/f389HR
+        0cmEhISULCwscgAAAGUAAABkAAAAZQAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZQAAAGUAAABkBAQEZ0BAQHibm5ug3t7e1vv7+/n//////////////////////////v//
+        /7f///8z////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wH///9S////2v//////////////////
+        ///5+fn3z8/Px25ubooODg5pAAAAZAAAAGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlAAAAZB8fH26KioqX39/f1/39
+        /fz/////////////////////////2v///1L///8B////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wP///9n////6///
+        ///////////////////k5OTchoaGlRAQEGoAAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABlAAAAZCYmJnCkpKSm8PDw6v/////////////////////////r////Z////wP///8A////AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP//
+        /wP///9u////8f////////////////r6+vjBwcG7ODg4dgAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlAAAAZVxcXILX19fP/v7+/f//////////////////
+        //H///9u////A////wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD///8A////AP///wH///9n////8f////////////////Pz8++ampqgDAwMaQAAAGUAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkJiYmcLq6
+        urb5+fn3////////////////////8f///2f///8B////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD///8A////AP///wD///9S////6////////////////+7u7uh9fX2RAAAAZQAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGUMDAxppKSkpvj4+PT////////////////////r////Uv///wD///8A////AAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8z////2v///////////////+3t
+        7edxcXGLAAAAZQAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZQQEBGednZ2i+Pj49f//////////////////
+        /9r///8z////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8U////t///
+        //////////////Ly8u14eHiOAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmBAQEZ6Wl
+        paf7+/v5////////////////////t////xT///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP//
+        /wD///8B////ff////7///////////n5+faRkZGbAAAAZQAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZQAAAGQAAABkAAAAZAAAAGUAAABlAAAAZQAA
+        AGQAAABkAAAAZAAAAGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGUMDAxpu7u7tv7+/v7///////////////7///99////Af///wD///8AAAAAAAAA
+        AAAAAAAAAAAAAP///wD///8A////Of///+f///////////7+/v63t7ezBgYGZwAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlAAAAZSUlJXBmZmaGl5eXnrKy
+        srDAwMC6wcHBu8HBwbu6urq1oaGhpHV1dY00NDR0AAAAZgAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZSYmJnDX19fP////////////////////5///
+        /zn///8A////AAAAAAAAAAAAAAAAAP///wD///8A////Cf///6n////////////////c3NzUKSkpcQAA
+        AGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlQ0NDea+v
+        r67l5eXd+Pj49f7+/v7////////////////////////////////7+/v56+vr5cHBwbtfX1+EAQEBZgAA
+        AGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkXFxcgvDw
+        8Or///////////////////+p////Cf///wD///8AAAAAAAAAAAD///8A////AP///0z////0////////
+        ///29vbycXFxiwAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYEBARnjo6Omevr6+T/////////////////////////////////////////////////////////////
+        ////////9PT077Kysq8gICBuAAAAZQAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGWkpKSm/f39/P//////////////9P///0z///8A////AAAAAAD///8A////AP//
+        /wn///+w////////////////wMDAugQEBGcAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYBAQFmnZ2dovj4+PX/////////////////////////////////////////////
+        ///////////////////////////////////+/v7+zMzMxScnJ3AAAABlAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlJiYmcN/f39f///////////////////+w////Cf//
+        /wD///8A////AP///wD///9A////8P//////////8PDw61FRUX4AAABkAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkd3d3jvb29vL/////////////////////////////
+        ///////////////////////////////////////////////////////////////////BwcG7DAwMaQAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGSKioqX+/v7+f//
+        ////////////8P///0D///8A////AP///wD///8B////k////////////////729vbgAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlHR0dbdzc3NP/////////////
+        ////////////////////////8PDw6tnZ2dDLy8vEy8vLw9fX18/u7u7o/v7+/v//////////////////
+        ////////+vr6+IeHh5YAAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABlHx8fbt7e3tb///////////////////+T////Af///wD///8A////Hf///9j///////////b2
+        9vJiYmKFAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZHl5
+        eY/6+vr4///////////////////////////6+vr4urq6tkZGRnoMDAxpAgICZgEBAWYLCwtpPj4+eLOz
+        s7D5+fn2///////////////////////////e3t7VHR0dbgAAAGUAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGSbm5ug/v7+/f//////////////2P///x3///8A////AP//
+        /1P////5///////////W1tbOEBAQagAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGW7u7u2///////////////////////////+/v79srKysAUFBWcAAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGUBAQFmsrKysP7+/v7/////////////////////+vr6+Hh4eI4AAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlQEBAeO7u7uj/////////////
+        //n///9T////AP///wD///+S///////////+/v7+nZ2dogAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYTExNr3d3d1P//////////////////////////5+fn3y0t
+        LXIAAABlAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZTU1NXTq6urj////////////////////////
+        //+6urq2AAAAZQAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgQE
+        BGfJycnC////////////////////kv///wD///8S////xf//////////9PT08FVVVYAAAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlMjIydOzs7Ob/////////////
+        /////////////729vbgAAABlAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlxMTEvf//
+        ////////////////////////3Nzc0xISEmoAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABkkZGRm/39/f3//////////////8X///8S////Mv///+b//////////+Dg
+        4NgbGxttAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZUpK
+        Snv09PTv//////////////////////7+/v6YmJifAAAAYwAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZJ6enqL//////////////////////////+zs7OUxMTFzAAAAZQAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZVFRUX709PTv///////////////m////Mv//
+        /1n////3///////////Dw8O8AAAAZQAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGRTU1N+9fX18f/////////////////////9/f38goKCkwAAAGMAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGOEhISU/f39/P/////////////////////z8/PvSUlJewAA
+        AGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGUeHh5u4+Pj2///
+        ////////////9////1n///9+/////v//////////oKCgpAAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkUlJSfvX19fH//////////////////////Pz8+nl5
+        eY4AAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkfHx8kPz8/Pv/////////////
+        ////////9fX18VNTU34AAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAwMDZ83NzcX///////////////7///9+////n////////////Pz8+n5+fpEAAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZFJSUn719fXx////////
+        //////////////r6+vhycnKLAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZHNz
+        c4z7+/v4//////////////////////X19fFSUlJ+AAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGS0tLSx////////////////////n////7X///////////j4
+        +PViYmKFAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGRSUlJ+9fX18f/////////////////////6+vr4cnJyiwAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGRycnKL+vr6+P/////////////////////19fXxUlJSfgAAAGQAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABknZ2dov//////////////////
+        /7X////F///////////19fXwUFBQfQAAAGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABkUlJSfvX19fH/////////////////////+vr6+HJycosAAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkcnJyi/r6+vj/////////////////////9fX18VJS
+        Un4AAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZI2N
+        jZn+/v79///////////////F////zf//////////8/Pz7kNDQ3kAAABlAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZFJSUn719fXx//////////////////////r6
+        +vhycnKLAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZHJycov6+vr4////////
+        //////////////X19fFSUlJ+AAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGOCgoKT/f39/P//////////////zf///83///////////Ly8u1CQkJ5AAAAZQAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGRSUlJ+9fX18f//
+        ///////////////////6+vr4cnJyiwAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGRycnKL+vr6+P/////////////////////19fXxUlJSfgAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABjgYGBkv39/fz//////////////83////F////////
+        ///09PTvTExMfAAAAGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABkUlJSfvX19fH/////////////////////+vr6+HJycosAAABkAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABkcnJyi/r6+vj/////////////////////9fX18VJSUn4AAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZIqKipf+/v79////////
+        ///////F////tf//////////9/f3811dXYMAAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZFJSUn719fXx//////////////////////r6+vhycnKLAAAAZAAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZHJycov6+vr4//////////////////////X1
+        9fFSUlJ+AAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGSZmZmf/v7+/v//////////////tf///5////////////v7+/l2dnaNAAAAZAAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGRSUlJ+9fX18f//////////////////
+        ///6+vr4cnJyiwAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGRycnKL+vr6+P//
+        ///////////////////19fXxUlJSfgAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABkrq6urP///////////////////5////9+/////v/////+/v7+mJiYnwAA
+        AGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkUlJSfvX1
+        9fH/////////////////////+vr6+HJycosAAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABkcnJyi/r6+vj/////////////////////9fX18VJSUn4AAABkAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZsfHx7////////////////7///9+////Wf//
+        //f//////////7u7u7YAAABlAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZFJSUn719fXx//////////////////////r6+vhycnKLAAAAZAAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZHJycov6+vr4//////////////////////X19fFSUlJ+AAAAZAAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZhUVFWve3t7V////////
+        ///////3////Wf///zL////m///////////a2trRERERagAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGRSUlJ+9fX18f/////////////////////6+vr4cnJyiwAA
+        AGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGRycnKL+vr6+P//////////////////
+        ///19fXxUlJSfgAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGVCQkJ58PDw6///////////////5v///zL///8S////xf//////////8PDw60RERHoAAABlAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkUlJSfvX19fH/////////////
+        ////////+vr6+HJycosAAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkcnJyi/r6
+        +vj/////////////////////9fX18VJSUn4AAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABkgYGBkvz8/Pr//////////////8X///8S////AP///5L///////////39
+        /fuLi4uYAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZFJS
+        Un719fXx//////////////////////r6+vhycnKLAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZHJycov6+vr4//////////////////////X19fFSUlJ+AAAAZAAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZb29vbj///////////////////+S////AP//
+        /wD///9T////+f//////////ysrKwwUFBWcAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGRSUlJ+9fX18f/////////////////////6+vr4cnJyiwAAAGQAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGRycnKL+vr6+P/////////////////////19fXxUlJSfgAA
+        AGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZSwsLHLn5+ff////////
+        ///////5////U////wD///8A////Hf///9j///////////Dw8OpJSUl7AAAAZQAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkUlJSfvX19fH/////////////////////+vr6+HJy
+        cosAAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkcnJyi/r6+vj/////////////
+        ////////9fX18VJSUn4AAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGSEhISU+/v7+v//////////////2P///x3///8A////AP///wH///+T///////////////+qampqgAA
+        AGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZFJSUn719fXx////////
+        //////////////r6+vhycnKLAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZHJy
+        cov6+vr4//////////////////////X19fFSUlJ+AAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYODg5p0dHRyf///////////////////5P///8B////AP///wD///8A////QP//
+        //D//////////+jo6OA1NTV1AAAAZQAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGRSUlJ+9fX18f/////////////////////6+vr4cnJyiwAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGRycnKL+vr6+P/////////////////////19fXxUlJSfgAAAGQAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkbm5uivf39/P///////////////D///9A////AP//
+        /wD///8A////AP///wn///+w///////////+/v7+qKioqQAAAGUAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABkUlJSfvX19fH/////////////////////+vr6+HJycosAAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkcnJyi/r6+vj/////////////////////9fX18VJS
+        Un4AAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmEBAQas/Pz8f/////////////
+        //////+w////Cf///wD///8AAAAAAP///wD///8A////TP////T//////////+7u7udOTk59AAAAZAAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZFJSUn719fXx//////////////////////r6
+        +vhycnKLAAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZHJycov6+vr4////////
+        //////////////X19fFSUlJ+AAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZIWF
+        hZX5+fn3///////////////0////TP///wD///8AAAAAAAAAAAD///8A////AP///wn///+p////////
+        ////////ycnJwQ8PD2oAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGRTU1N+9fX18f//
+        ///////////////////7+/v5cnJyiwAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGRycnKL+/v7+f/////////////////////19fXxU1NTfgAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZTg4OHbk5OTc////////////////////qf///wn///8A////AAAAAAAAAAAAAAAAAP//
+        /wD///8A////Of///+f///////////v7+/mXl5eeAAAAZQAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABlTk5Ofe7u7uf4+Pj1+Pj49fj4+PX4+Pj18/Pz7mxsbIkAAABkAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABkbGxsifPz8+74+Pj1+Pj49fj4+PX4+Pj17u7u505OTn0AAABlAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgwMDGnBwcG7////////////////////5////zn///8A////AAAA
+        AAAAAAAAAAAAAAAAAAD///8A////AP///wH///99/////v//////////8PDw62hoaIcAAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZhQUFGtbW1uCY2NjhWNjY4VjY2OFY2NjhV9fX4QdHR1uAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZh0dHW5fX1+EY2NjhWNjY4VjY2OFY2NjhVtb
+        W4IUFBRrAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGWampqg+vr6+P///////////////v//
+        /33///8B////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////FP///7f/////////////
+        ///k5OTdTExMfAAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZAAAAGQAAABkAAAAZAAA
+        AGQAAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZAAA
+        AGQAAABkAAAAZAAAAGQAAABkAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGV9fX2R8/Pz7///
+        /////////////////7f///8U////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP//
+        /wD///8z////2v///////////////9zc3NRCQkJ5AAAAZAAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGRxcXGL7u7u6P///////////////////9r///8z////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP///wD///8A////AP///1L////r////////////////3Nzc1ExMTHwAAABkAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGV4eHiO7e3t5////////////////////+v///9S////AP///wD///8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8B////Z/////H/////////////
+        ///k5OTdaGhohwAAAGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZQYGBmeRkZGb8vLy7f////////////////////H///9n////Af//
+        /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP//
+        /wP///9u////8f////////////////Dw8OuXl5eeDw8PagAAAGQAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZCkpKXG3t7ez+fn59v//////////////////
+        //H///9u////A////wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP///wD///8A////A////2f////r////////////////+/v7+cnJycFOTk59AAAAZQAA
+        AGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkBAQEZ3FxcYvc3NzU/v7+/v//
+        /////////////////+v///9n////A////wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8B////Uv///9r/////////////
+        ////////7u7u56ioqKk1NTV1AAAAZAAAAGUAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGQAAABmUVFRfsDA
+        wLr29vby/////////////////////////9r///9S////Af///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP//
+        /wD///8z////t/////7////////////////+/v7+6Ojo4KmpqapJSUl7BQUFZwAAAGQAAABlAAAAZgAA
+        AGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABkAAAAZBAQ
+        EGpiYmKEvb29uPDw8Ov//////////////////////////v///7f///8z////AP///wD///8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP///wD///8A////AP///xT///99////5//////////////////////////+8PDw6srK
+        ysOLi4uYREREehEREWoAAABlAAAAZAAAAGQAAABkAAAAZQAAAGUAAABlAAAAZQAAAGQAAABkAAAAZAAA
+        AGUbGxttVVVVgJ2dnaLW1tbO9vb28f//////////////////////////////5////33///8U////AP//
+        /wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////Af///zn///+p////9P//
+        /////////////////////////f39+/Dw8Ova2trRu7u7tpiYmJ92dnaNXV1dg0xMTHxCQkJ5Q0NDeVBQ
+        UH1iYmKFfn5+kaCgoKTDw8O84ODg2PT09PD+/v7+///////////////////////////////0////qf//
+        /zn///8B////AP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP//
+        /wD///8A////Cf///0z///+w////8P/////////////////////////////////////+/v7++/v7+ff3
+        9/P09PTv8vLy7fPz8+719fXw+Pj49fz8/Pr/////////////////////////////////////////////
+        //D///+w////TP///wn///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////Cf///0D///+T////2P////n/////////////
+        ////////////////////////////////////////////////////////////////////////////////
+        ///////5////2P///5P///9A////Cf///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////Af//
+        /x3///9T////kv///8X////m////9/////7/////////////////////////////////////////////
+        //7////3////5v///8X///+S////U////x3///8B////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAD///8A////AP///wD///8A////AP///wD///8S////Mv///1n///9+////n////7X////F////zf//
+        /83////F////tf///5////9+////Wf///zL///8S////AP///wD///8A////AP///wD///8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAA///AAAAD/////wAAAAD////8AAAAAD////gAAAAAH///4AAAAAAH///AAAAAAAP//4AAAAAA
+        Af//AAAAAAAA//4AAAAAAAB//AAAAAAAAD/4AAAAAAAAH/AAAAAAAAAP8AAAAAAAAA/gAAAAAAAAB8AA
+        AAAAAAADwAAAAAAAAAOAAAAAAAAAAYAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAAAAAAABwAAAAAAAAAPAAAAAAAAAA+AAAAAAAAAH8AAAAAAA
+        AA/wAAAAAAAAD/gAAAAAAAAf/AAAAAAAAD/+AAAAAAAAf/8AAAAAAAD//4AAAAAAAf//wAAAAAAD///g
+        AAAAAAf///gAAAAAH////AAAAAA/////AAAAAP/////AAAAD//8=
+</value>
+  </data>
+</root>

+ 1 - 1
PLCDataReader/Program.cs

@@ -37,7 +37,7 @@ namespace UAS_PLCDataReader
                 FileStream fs = new FileStream(LogManager.LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
                 fs.Close();
                 if (principal.IsInRole(WindowsBuiltInRole.Administrator))
-                    Application.Run(new MainWindow());
+                    Application.Run(new Login());
                 else
                 {
                     //创建启动对象

+ 90 - 0
PLCDataReader/Properties/Resources.Designer.cs

@@ -59,5 +59,95 @@ namespace UAS_PLCDataReader.Properties {
                 resourceCulture = value;
             }
         }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap check_16px_1137507_easyicon_net {
+            get {
+                object obj = ResourceManager.GetObject("check_16px_1137507_easyicon_net", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap close_24px_1069872_easyicon_net {
+            get {
+                object obj = ResourceManager.GetObject("close_24px_1069872_easyicon_net", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap devicecontrol {
+            get {
+                object obj = ResourceManager.GetObject("devicecontrol", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap net_connected {
+            get {
+                object obj = ResourceManager.GetObject("net_connected", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap netstatus_tx_64px_18991_easyicon_net {
+            get {
+                object obj = ResourceManager.GetObject("netstatus_tx_64px_18991_easyicon_net", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap network_offline {
+            get {
+                object obj = ResourceManager.GetObject("network_offline", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap Png_Device {
+            get {
+                object obj = ResourceManager.GetObject("Png_Device", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap U_Letter_72px_1121581_easyicon_net {
+            get {
+                object obj = ResourceManager.GetObject("U_Letter_72px_1121581_easyicon_net", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap UIcon {
+            get {
+                object obj = ResourceManager.GetObject("UIcon", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
     }
 }

+ 36 - 5
PLCDataReader/Properties/Resources.resx

@@ -46,7 +46,7 @@
     
     mimetype: application/x-microsoft.net.object.binary.base64
     value   : The object must be serialized with 
-            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
             : and then encoded with base64 encoding.
     
     mimetype: application/x-microsoft.net.object.soap.base64
@@ -60,6 +60,7 @@
             : 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">
@@ -68,9 +69,10 @@
               <xsd:sequence>
                 <xsd:element name="value" type="xsd:string" minOccurs="0" />
               </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" />
+              <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">
@@ -85,9 +87,10 @@
                 <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" msdata:Ordinal="1" />
+              <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">
@@ -109,9 +112,37 @@
     <value>2.0</value>
   </resheader>
   <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="check_16px_1137507_easyicon_net" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\check_16px_1137507_easyicon.net.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="close_24px_1069872_easyicon_net" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\close_24px_1069872_easyicon.net.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="devicecontrol" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\devicecontrol.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="netstatus_tx_64px_18991_easyicon_net" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\netstatus_tx_64px_18991_easyicon.net.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="network_offline" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\network-offline.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="net_connected" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\net_connected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Png_Device" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\devices_84.078431372549px_1202965_easyicon.net.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="UIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\UIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="U_Letter_72px_1121581_easyicon_net" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\U_Letter_72px_1121581_easyicon.net.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>

+ 15 - 0
PLCDataReader/Properties/Settings.Designer.cs

@@ -22,5 +22,20 @@ namespace UAS_PLCDataReader.Properties {
                 return defaultInstance;
             }
         }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=UAS_MES_PROD;Pool" +
+            "ing=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=21" +
+            "8.17.158.219)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));" +
+            "")]
+        public string MES {
+            get {
+                return ((string)(this["MES"]));
+            }
+            set {
+                this["MES"] = value;
+            }
+        }
     }
 }

+ 8 - 6
PLCDataReader/Properties/Settings.settings

@@ -1,7 +1,9 @@
 <?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
-  <Profiles>
-    <Profile Name="(Default)" />
-  </Profiles>
-  <Settings />
-</SettingsFile>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="UAS_PLCDataReader.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="MES" Type="System.String" Scope="User">
+      <Value Profile="(Default)">Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=UAS_MES_PROD;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=218.17.158.219)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>

+ 273 - 0
PLCDataReader/PublicMethod/BaseUtil.cs

@@ -0,0 +1,273 @@
+using DevExpress.XtraEditors;
+using DevExpress.XtraEditors.Repository;
+using System;
+using System.Data;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Windows.Forms;
+using UAS_PLCDataReader.DataOperate;
+using DevExpress.Utils;
+using UAS_PLCDataReader.CustomerControl.ValueLabel;
+
+namespace UAS_PLCDataReader.PublicMethod
+{
+    class BaseUtil
+    {
+
+
+        [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
+        public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
+
+        public static void FillComBoxEditWidthDataTable(RepositoryItemComboBox combo, string TextField, string ValueField, DataTable dt)
+        {
+            combo.Items.Clear();
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                ComboBoxData item = new ComboBoxData();
+                item.Value = dt.Rows[i][ValueField].ToString();
+                item.Text = dt.Rows[i][TextField].ToString();
+                combo.Items.Add(item);
+            }
+        }
+
+        public static void FillComBoxEditWidthDataTable(ComboBoxEdit combo, string TextField, string ValueField, DataTable dt)
+        {
+            combo.Properties.Items.Clear();
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                ComboBoxData item = new ComboBoxData();
+                item.Value = dt.Rows[i][ValueField].ToString();
+                item.Text = dt.Rows[i][TextField].ToString();
+                combo.Properties.Items.Add(item);
+            }
+            combo.SelectedIndex = 0;
+        }
+
+        public static void FillComBoxEditWidthDataTable(ComboBoxEdit combo, string TextField, string ValueField, DataTable dt, bool AddAll)
+        {
+            combo.Properties.Items.Clear();
+            if (AddAll)
+            {
+                ComboBoxData item = new ComboBoxData();
+                item.Value = "全部";
+                item.Text = "全部";
+                combo.Properties.Items.Add(item);
+            }
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                ComboBoxData item = new ComboBoxData();
+                item.Value = dt.Rows[i][ValueField].ToString();
+                item.Text = dt.Rows[i][TextField].ToString();
+                combo.Properties.Items.Add(item);
+            }
+            combo.SelectedIndex = 0;
+        }
+
+        public static DataTable ToDataTable(DataRow[] rows)
+        {
+            if (rows == null || rows.Length == 0) return new DataTable();
+            DataTable tmp = rows[0].Table.Clone();  // 复制DataRow的表结构  
+            foreach (DataRow row in rows)
+                tmp.Rows.Add(row.ItemArray);  // 将DataRow添加到DataTable中  
+            return tmp;
+        }
+
+        public static string GetComboxEditValue(ComboBoxEdit ComBox)
+        {
+            if (ComBox.SelectedItem == null)
+                return ComBox.Text;
+            else
+                return (ComBox.SelectedItem as ComboBoxData).Value;
+        }
+
+        /// <summary>
+        /// 获取LRC
+        /// </summary>
+        /// <param name="SQL"></param>
+        public static string getLRC(string SENDMESSAGE)
+        {
+            string message = SENDMESSAGE.Trim();
+            if (message.Length % 2 != 0)
+            {
+                message = message + "0";
+            }
+
+            int LRC = 0x0;
+            for (int i = 0; i < message.Length; i = i + 2)
+            {
+                int inside = int.Parse(message.Substring(i, 1).ToString() + message.Substring(i + 1, 1).ToString(), System.Globalization.NumberStyles.HexNumber);
+                LRC += inside;
+            }
+            string _LRC = string.Format("{0:X2}", LRC);
+            string LRCre = "";
+            for (int i = 0; i < _LRC.Length; i++)
+            {
+                int index;
+                index = 0xF - int.Parse(_LRC.Substring(i, 1).ToString(), System.Globalization.NumberStyles.HexNumber);
+                LRCre += string.Format("{0:X}", index);
+            }
+
+            LRCre = string.Format("{0:X}", int.Parse(LRCre, System.Globalization.NumberStyles.HexNumber) + 1);
+
+            return LRCre;
+        }
+
+        public static string ByteToHexadecimalString(byte[] b, int length)
+        {
+            string returnStr = "";
+            if (b != null)
+            {
+                for (int i = 0; i < length; i++)
+                {
+                    returnStr += Convert.ToString(b[i], 16);//ToString("X2") 为C#中的字符串格式控制符
+                }
+            }
+            return returnStr;
+        }
+
+        public static void CleanMemory()
+        {
+            GC.Collect();
+            GC.WaitForPendingFinalizers();
+            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
+            {
+                SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
+            }
+        }
+
+        private static ToolTipControllerShowEventArgs args;
+
+        public static ToolTipController MyToolTipClt { get; private set; }
+
+        public static void NewToolTip(Control ctl, string title, string content, int showTime, ToolTipType toolTipType, ToolTipLocation tipLocation, bool isAutoHide, ToolTipIconType tipIconType, ImageList imgList, int imgIndex)
+        {
+            try
+            {
+                MyToolTipClt = new ToolTipController();
+                args = MyToolTipClt.CreateShowArgs();
+                content = (string.IsNullOrEmpty(content) ? "???" : content);
+                title = string.IsNullOrEmpty(title) ? "温馨提示" : title;
+                MyToolTipClt.ImageList = imgList;
+                MyToolTipClt.ImageIndex = (imgList == null ? 0 : imgIndex);
+                args.AutoHide = isAutoHide;
+                MyToolTipClt.ShowBeak = true;
+                MyToolTipClt.ShowShadow = true;
+                MyToolTipClt.Rounded = true;
+                MyToolTipClt.AutoPopDelay = (showTime == 0 ? 2000 : showTime);
+                MyToolTipClt.SetToolTip(ctl, content);
+                MyToolTipClt.SetTitle(ctl, title);
+                MyToolTipClt.SetToolTipIconType(ctl, tipIconType);
+                MyToolTipClt.Active = true;
+                MyToolTipClt.HideHint();
+                MyToolTipClt.ShowHint(content, title, ctl, tipLocation);
+            }
+            catch (Exception)
+            {
+
+            }
+        }
+
+        /// <summary>
+        ///  传入控件的集合和DataTable,通过判断控件的名称和数据源的列的描述来匹配,支持单层的GroupBox和Panel
+        /// </summary>
+        /// <param name="collection"></param>
+        /// <param name="dt"></param>
+        public static void SetFormValue(Control.ControlCollection collection, DataTable dt)
+        {
+            //DataTable存在数据才进行赋值操作
+            if (dt.Rows.Count > 0)
+            {
+                for (int i = 0; i < collection.Count; i++)
+                {
+                    //如果含有子控件则进行递归调用
+                    if (collection[i].Controls.Count > 0)
+                        SetFormValue(collection[i].Controls, dt);
+                    string controlName = collection[i].Name;
+                    string controlsTag = collection[i].Tag == null ? "" : collection[i].Tag.ToString();
+                    //默认给TextBox和Label赋值
+                    if (collection[i] is TextBox || collection[i] is ValueLabel || collection[i] is NumericUpDown)
+                    {
+                        for (int j = 0; j < dt.Columns.Count; j++)
+                        {
+                            if (controlName.ToUpper() == dt.Columns[j].Caption.ToUpper() || controlsTag.ToUpper() == dt.Columns[j].Caption.ToUpper())
+                            {
+                                //字段含有Status内容的才进行转换
+                                if (controlName.ToUpper().Contains("STATUS") || controlsTag.ToUpper().Contains("STATUS"))
+                                {
+                                    //对审批状态进行判断
+                                    switch (dt.Rows[0][j].ToString().ToUpper())
+                                    {
+                                        case "ENTERING":
+                                            collection[i].Text = "在录入";
+                                            break;
+                                        case "UNAPPROVED":
+                                            collection[i].Text = "未批准";
+                                            break;
+                                        case "COMMITED":
+                                            collection[i].Text = "已提交";
+                                            break;
+                                        case "APPROVE":
+                                            collection[i].Text = "已批准";
+                                            break;
+                                        case "AUDITED":
+                                            collection[i].Text = "已审核";
+                                            break;
+                                        case "STARTED":
+                                            collection[i].Text = "已下放";
+                                            break;
+                                        case "UNCHECK":
+                                            collection[i].Text = "待检验";
+                                            break;
+                                        case "CHECKING":
+                                            collection[i].Text = "检验中";
+                                            break;
+                                        default:
+                                            collection[i].Text = dt.Rows[0][j].ToString();
+                                            break;
+                                    }
+                                }
+                                else
+                                    collection[i].Text = dt.Rows[0][j].ToString();
+                            }
+                        }
+                    }
+                    //对封装在GroupBox的和Panel的控件进行批量赋值
+                    if (collection[i] is GroupControl || collection[i] is Panel)
+                    {
+                        for (int j = 0; j < collection[i].Controls.Count; j++)
+                        {
+                            controlName = collection[i].Controls[j].Name;
+                            if (collection[i].Controls[j] is TextBox || collection[i].Controls[j] is ValueLabel)
+                            {
+                                for (int k = 0; k < dt.Columns.Count; k++)
+                                {
+                                    if (controlName.ToUpper() == dt.Columns[k].Caption.ToUpper())
+                                    {
+                                        collection[i].Controls[j].Text = dt.Rows[0][k].ToString();
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            //如果没有记录的话,将dt中含有的列的对应值设置为空
+            else
+            {
+                for (int i = 0; i < collection.Count; i++)
+                {
+                    if (collection[i] is TextBox || collection[i] is ValueLabel)
+                    {
+                        for (int j = 0; j < dt.Columns.Count; j++)
+                        {
+                            if (collection[i].Name.ToUpper() == dt.Columns[j].Caption.ToUpper())
+                            {
+                                collection[i].Text = "";
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 63 - 0
PLCDataReader/PublicMethod/LogManager.cs

@@ -0,0 +1,63 @@
+using System;
+using System.IO;
+using UAS_PLCDataReader.Entity;
+
+namespace UAS_PLCDataReader.PublicMethod
+{
+    class LogManager
+    {
+        public static string LogAddress = SystemInf.LogFolder;
+        /// <summary>
+        /// 记录操作
+        /// </summary>
+        /// <param name="Message"></param>
+        public static void DoLog(string Message)
+        {
+            try
+            {
+                StreamWriter sw = File.AppendText(LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                sw.WriteLine("\n【时间】" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
+                sw.WriteLine("【消息】" + Message + "\n");
+                sw.WriteLine("---------------------------------------------------------------------------------------------------------------");
+                sw.Close();
+            }
+            catch (Exception) { }
+        }
+
+        /// <summary>
+        /// 记录操作和SQL
+        /// </summary>
+        /// <param name="Message"></param>
+        /// <param name="SQL"></param>
+        public static void DoLog(string Message, string SQL)
+        {
+            try
+            {
+                StreamWriter sw = File.AppendText(LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                sw.WriteLine("\n【时间】" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
+                sw.WriteLine("【消息】" + Message + "\n");
+                sw.WriteLine("【SQL】" + SQL + "\n");
+                sw.WriteLine("---------------------------------------------------------------------------------------------------------------");
+                sw.Close();
+            }
+            catch (Exception) { }
+        }
+
+        /// <summary>
+        /// 记录SQL
+        /// </summary>
+        /// <param name="SQL"></param>
+        public static void DoSQLLog(string SQL)
+        {
+            try
+            {
+                StreamWriter sw = File.AppendText(LogAddress + DateTime.Now.ToString("yyyy-MM-dd") + ".txt");
+                sw.WriteLine("\n【时间】" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
+                sw.WriteLine("【SQL】" + SQL + "\n");
+                sw.WriteLine("---------------------------------------------------------------------------------------------------------------");
+                sw.Close();
+            }
+            catch (Exception) { }
+        }
+    }
+}

+ 41 - 0
PLCDataReader/PublicMethod/LogicHandler.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using UAS_PLCDataReader.DataOperate;
+using UAS_PLCDataReader.Entity;
+
+namespace UAS_PLCDataReader.PublicMethod
+{
+    class LogicHandler
+    {
+        public LogicHandler() { }
+
+        static DataHelper dh = SystemInf.dh;
+        //用于拼接SQL
+        static StringBuilder sql = new StringBuilder();
+        //用于存放批量执行的SQL
+        static List<string> sqls = new List<string>();
+        /// <summary>
+        /// 验证用户身份信息
+        /// </summary>
+        /// <param name="iUserCode"></param>
+        /// <param name="oErrorMessage"></param>
+        /// <returns></returns>
+        public static bool CheckUserLogin(string iUserCode, string iPassWord, out string oErrorMessage)
+        {
+            oErrorMessage = "";
+            string SQL = "select em_code from employee where upper(em_code)=:UserName and em_password =:PassWord";
+            DataTable dt;
+            dt = (DataTable)dh.ExecuteSql(SQL, "select", iUserCode.ToUpper(), iPassWord);
+            if (dt.Rows.Count > 0)
+                return true;
+            else
+            {
+                oErrorMessage = "用户名或者密码不正确!";
+                return false;
+            }
+        }
+    }
+}

+ 316 - 0
PLCDataReader/PublicMethod/ModeBusTCPServer.cs

@@ -0,0 +1,316 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace UAS_PLCDataReader.PublicMethod
+{
+    class ModeBusTCPServer
+    {
+        private bool isOpen = false;
+
+        private bool receiveData;
+
+        private Dictionary<string, string> returnvalue = new Dictionary<string, string>();
+
+        Thread threadWatch = null; //负责监听客户端的线程
+        Socket socketWatch = null; //负责监听客户端的套接字
+
+        public bool IsOpen
+        {
+            get
+            {
+                return isOpen;
+            }
+
+            set
+            {
+                isOpen = value;
+            }
+        }
+
+        public string IP
+        {
+            get
+            {
+                return iP;
+            }
+
+            set
+            {
+                iP = value;
+            }
+        }
+
+        public string Port
+        {
+            get
+            {
+                return port;
+            }
+
+            set
+            {
+                port = value;
+            }
+        }
+
+        public bool ReceiveData
+        {
+            get
+            {
+                return receiveData;
+            }
+
+            set
+            {
+                receiveData = value;
+            }
+        }
+
+        public Dictionary<string, string> Returnvalue
+        {
+            get
+            {
+                return returnvalue;
+            }
+
+            set
+            {
+                returnvalue = value;
+            }
+        }
+
+        public Dictionary<string, string> ReceiveCoding = new Dictionary<string, string>();
+
+        private string iP;
+
+        private string port;
+
+        public List<Socket> list = new List<Socket>();
+
+
+        public ModeBusTCPServer()
+        {
+
+        }
+
+        public bool Open()
+        {
+            try
+            {
+                IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName());
+                for (int i = 0; i < IpEntry.AddressList.Length; i++)
+                {
+                    if (IpEntry.AddressList[i].AddressFamily == AddressFamily.InterNetwork) {
+                        if(IpEntry.AddressList[i].ToString().Contains("192.168.127.20"))
+                        iP = IpEntry.AddressList[i].ToString();
+                    }
+                }
+                //定义一个套接字用于监听客户端发来的信息  包含3个参数(IP4寻址协议,流式连接,TCP协议)
+                socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+                //服务端发送信息 需要1个IP地址和端口号
+                IPAddress ipaddress = IPAddress.Parse(iP);
+                //将IP地址和端口号绑定到网络节点endpoint上 
+                IPEndPoint endpoint = new IPEndPoint(ipaddress, 4001);
+                //监听绑定的网络节点
+                socketWatch.Bind(endpoint);
+                //将套接字的监听队列长度限制为20
+                socketWatch.Listen(20);
+                Task.Factory.StartNew(WatchConnecting,TaskCreationOptions.LongRunning);
+                ////创建一个监听线程 
+                //threadWatch = new Thread(WatchConnecting);
+                ////将窗体线程设置为与后台同步
+                //threadWatch.IsBackground = true;
+                ////启动线程
+                //threadWatch.Start();
+                isOpen = true;
+                return true;
+            }
+            catch (Exception e)
+            {
+                MessageBox.Show(e.Message);
+                return false;
+            }
+        }
+
+        public void Send(string IPAddress, string EnCoding, string receiveCoding, string Command)
+        {
+            if (!ReceiveCoding.ContainsKey(IPAddress))
+                ReceiveCoding.Add(IPAddress, receiveCoding);
+            foreach (Socket item in list)
+            {
+                if (item != null)
+                {
+                    if (item.RemoteEndPoint != null)
+                    {
+                        if (item.RemoteEndPoint.ToString() == IPAddress)
+                        {
+                            switch (EnCoding)
+                            {
+                                case "UTF-8":
+                                    item.Send(Encoding.UTF8.GetBytes(Command));
+                                    break;
+                                case "ASCII":
+                                    byte[] array = Encoding.ASCII.GetBytes(Command);
+                                    string str = null;
+                                    for (int i = 0; i < array.Length; i++)
+                                    {
+                                        int asciicode = (int)(array[i]);
+                                        str += Convert.ToString(asciicode) + " ";
+                                    }
+                                    item.Send(Encoding.ASCII.GetBytes(str));
+                                    break;
+                                case "Hexadecimal":
+                                    char[] values = Command.ToCharArray();
+                                    string strH = null;
+                                    foreach (char letter in values)
+                                    {
+                                        // Get the integral value of the character.
+                                        int value = Convert.ToInt32(letter);
+                                        // Convert the decimal value to a hexadecimal value in string form.
+                                        string hexOutput = String.Format("{0:X}", value);
+                                        strH += hexOutput + " ";
+                                    }
+                                    item.Send(Encoding.UTF8.GetBytes(strH));
+                                    break;
+                            }
+                        }
+                        receiveData = false;
+                    }
+                    else
+                    {
+                        if (list.Count > 0)
+                        {
+                            if (IPAddress == "")
+                                IPAddress = list[0].RemoteEndPoint.ToString();
+                        }
+                        else
+                            IPAddress = "";
+                        if (list.Contains(item))
+                        {
+                            list.Remove(item);
+                        }
+                        //关闭之前accept出来的和客户端进行通信的套接字 
+                        item.Close();
+                    }
+                }
+            }
+        }
+
+        private void WatchConnecting()
+        {
+            Socket connection = null;
+            while (true)  //持续不断监听客户端发来的请求
+            {
+                try
+                {
+                    connection = socketWatch.Accept();
+                }
+                catch (Exception)
+                {
+                    break;
+                }
+                //获取客户端的IP和端口号  
+                IPAddress clientIP = (connection.RemoteEndPoint as IPEndPoint).Address;
+                int clientPort = (connection.RemoteEndPoint as IPEndPoint).Port;
+                Console.WriteLine(clientIP);
+                Console.WriteLine(clientPort);
+                //让客户显示"连接成功的"的信息  
+                string sendmsg = "Connect Success!" + "LocalIP:" + clientIP + ",LocalPort" + clientPort.ToString();
+                byte[] arrSendMsg = Encoding.UTF8.GetBytes(sendmsg);
+                connection.Send(arrSendMsg);
+                //客户端网络结点号  
+                string remoteEndPoint = connection.RemoteEndPoint.ToString();
+                //显示与客户端连接情况
+                IPEndPoint netpoint = connection.RemoteEndPoint as IPEndPoint;
+                //创建一个通信线程      
+                ParameterizedThreadStart pts = new ParameterizedThreadStart(recv);
+                Thread thread = new Thread(pts);
+                //设置为后台线程,随着主线程退出而退出 
+                thread.IsBackground = true;
+                //启动线程     
+                thread.Start(connection);
+                list.Add(connection);
+            }
+        }
+
+
+        void recv(object socketclientpara)
+        {
+            Socket socketServer = socketclientpara as Socket;
+            while (true)
+            {
+                //创建一个内存缓冲区,其大小为1024*1024字节  即1M     
+                byte[] arrServerRecMsg = new byte[1024 * 1024];
+                //将接收到的信息存入到内存缓冲区,并返回其字节数组的长度    
+                try
+                {
+                    int length = socketServer.Receive(arrServerRecMsg);
+                    if (length == 0)
+                    {
+                        break;
+                    }
+                    if (ReceiveCoding.ContainsKey(socketServer.RemoteEndPoint.ToString()))
+                    {
+                        if (!returnvalue.ContainsKey(socketServer.RemoteEndPoint.ToString()))
+                        {
+                            switch (ReceiveCoding[socketServer.RemoteEndPoint.ToString()])
+                            {
+                                case "UTF-8":
+                                    returnvalue.Add(socketServer.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(arrServerRecMsg, 0, length));
+                                    break;
+                                case "ASCII":
+                                    returnvalue.Add(socketServer.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(arrServerRecMsg, 0, length));
+                                    break;
+                                case "Hexadecimal":
+                                    returnvalue.Add(socketServer.RemoteEndPoint.ToString(), BaseUtil.ByteToHexadecimalString(arrServerRecMsg, length));
+                                    break;
+                                default:
+                                    break;
+                            }
+                        }
+                    }
+                }
+                catch (Exception)
+                {
+                    if (socketServer.RemoteEndPoint != null)
+                    {
+
+                    }
+                    if (list.Contains(socketServer))
+                    {
+                        list.Remove(socketServer);
+                    }
+                    //关闭之前accept出来的和客户端进行通信的套接字 
+                    socketServer.Close();
+                    break;
+                }
+            }
+            receiveData = true;
+            if (socketServer != null)
+            {
+                if (socketServer.RemoteEndPoint != null)
+                {
+
+                }
+                if (list.Contains(socketServer))
+                {
+                    list.Remove(socketServer);
+                }
+                socketServer.Close();
+            }
+        }
+
+        public void Close()
+        {
+            threadWatch.Abort();
+            socketWatch.Close();
+            isOpen = false;
+        }
+    }
+}

+ 131 - 0
PLCDataReader/PublicMethod/PollingTask.cs

@@ -0,0 +1,131 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using UAS_PLCDataReader.Entity;
+
+namespace UAS_PLCDataReader.PublicMethod
+{
+    class PollingTask
+    {
+        /// <summary>
+        /// 内部调用的任务,添加了取消标识符号
+        /// </summary>
+        Dictionary<string, Task> InTask = new Dictionary<string, Task>();
+        /// <summary>
+        /// 获取任务
+        /// </summary>
+        /// <param name="TCode"></param>
+        /// <returns></returns>
+        public Task GetTask(int TID)
+        {
+            return null;
+        }
+
+        /// <summary>
+        /// 添加任务,默认添加后自动执行,返回创建的TASK的ID
+        /// </summary>
+        /// <param name="TCode"></param>
+        /// <returns></returns>
+        //public void AddTask(Action action, string Code)
+        //{
+        //    Task newTask = Task.Factory.StartNew(() => action);
+        //    InTask.Add(Code, newTask);
+        //}
+       
+        /// <summary>
+        /// 添加任务,默认添加后自动执行,返回创建的TASK的ID
+        /// </summary>
+        /// <param name="TCode"></param>
+        /// <returns></returns>
+        public void AddTask(Action<object> action, object obj)
+        {
+            Task.Factory.StartNew(action, obj);
+        }
+
+        /// 添加一系列任务
+        /// </summary>
+        /// <param name="action"></param>
+        public void AddTask(Action[] action)
+        {
+
+        }
+
+        /// <summary>
+        /// 添加任务
+        /// </summary>
+        /// <param name="TCode"></param>
+        /// <returns></returns> 
+        public int AddTask(Action action, bool AutoStart)
+        {
+            return 0;
+        }
+
+        /// <summary>
+        /// 移除任务
+        /// </summary>
+        /// <returns></returns>
+        public bool RemoveTask(string Code)
+        {
+            InTask.Remove(Code);
+            return true;
+        }
+
+        /// <summary>
+        /// 移除所有的任务
+        /// </summary>
+        /// <returns></returns>
+        public bool RemoveAllTask()
+        {
+            InTask.Clear();
+            return true;
+        }
+
+        /// <summary>
+        /// 暂停任务
+        /// </summary>
+        /// <param name="TID"></param>
+        /// <returns></returns>
+        public bool PauseTask(int TID)
+        {
+            return true;
+        }
+
+        /// <summary>
+        /// 开启所有任务
+        /// </summary>
+        public void StartAllTask()
+        {
+            foreach (var item in InTask)
+            {
+                item.Value.Start();
+            }
+        }
+
+        ///// <summary>
+        ///// 暂停所有任务
+        ///// </summary>
+        //public void PauseAllTask()
+        //{
+        //
+        //}
+
+        /// <summary>
+        /// 停止所有任务
+        /// </summary>
+        public void StopAllTask()
+        {
+
+        }
+
+        /// <summary>
+        /// 停止指定任务
+        /// </summary>
+        /// <param name="TID"></param>
+        /// <returns></returns>
+        public bool StopTask(int TID)
+        {
+            return true;
+        }
+    }
+}

+ 25 - 0
PLCDataReader/PublicMethod/PollingTimer.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace UAS_PLCDataReader.PublicMethod
+{
+    class PollingTimer : System.Timers.Timer
+    {
+        private object polling;
+
+        public object Polling
+        {
+            get
+            {
+                return polling;
+            }
+
+            set
+            {
+                polling = value;
+            }
+        }
+    }
+}

BIN
PLCDataReader/Resources/UIcon.png


BIN
PLCDataReader/Resources/U_Letter_72px_1121581_easyicon.net.png


BIN
PLCDataReader/Resources/check_16px_1137507_easyicon.net.png


BIN
PLCDataReader/Resources/close_24px_1069872_easyicon.net.png


BIN
PLCDataReader/Resources/devicecontrol.png


BIN
PLCDataReader/Resources/devices_84.078431372549px_1202965_easyicon.net.png


BIN
PLCDataReader/Resources/net_connected.png


BIN
PLCDataReader/Resources/netstatus_tx_64px_18991_easyicon.net.png


BIN
PLCDataReader/Resources/network-offline.png


+ 142 - 0
PLCDataReader/UAS_PLCDataReader.csproj

@@ -182,6 +182,90 @@
     <Compile Include="ClassFile\BaseUtil.cs" />
     <Compile Include="ClassFile\DataHelper.cs" />
     <Compile Include="ClassFile\LogManager.cs" />
+    <Compile Include="CustomerControl\AutoDataGridControl\AutoDataGridControl.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="CustomerControl\AutoDataGridControl\AutoDataGridControl.Designer.cs">
+      <DependentUpon>AutoDataGridControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CustomerControl\Button\ButtonAddRow.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="CustomerControl\Button\ButtonAddRow.Designer.cs">
+      <DependentUpon>ButtonAddRow.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CustomerControl\Button\ButtonDeleteRow.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="CustomerControl\Button\ButtonDeleteRow.Designer.cs">
+      <DependentUpon>ButtonDeleteRow.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CustomerControl\Button\ButtonSaveGrid.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="CustomerControl\Button\ButtonSaveGrid.Designer.cs">
+      <DependentUpon>ButtonSaveGrid.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CustomerControl\GridViewWithSerialNum\GridViewWithSerialNum.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="CustomerControl\GridViewWithSerialNum\GridViewWithSerialNum.Designer.cs">
+      <DependentUpon>GridViewWithSerialNum.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CustomerControl\PagingControl\PageControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="CustomerControl\PagingControl\PageControl.Designer.cs">
+      <DependentUpon>PageControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CustomerControl\PictureEditWithText\PictureEditWithText.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="CustomerControl\PictureEditWithText\PictureEditWithText.Designer.cs">
+      <DependentUpon>PictureEditWithText.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CustomerControl\ValueLabel\ValueLabel.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="CustomerControl\ValueLabel\ValueLabel.Designer.cs">
+      <DependentUpon>ValueLabel.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DataOperate\ComboBoxData.cs" />
+    <Compile Include="DataOperate\DataHelper.cs" />
+    <Compile Include="Device\Command\FormNewCommand.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Device\Command\FormNewCommand.Designer.cs">
+      <DependentUpon>FormNewCommand.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Device\Information\DeviceDetailInfo.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Device\Information\DeviceDetailInfo.Designer.cs">
+      <DependentUpon>DeviceDetailInfo.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Device\Information\DeviceStatusInfo.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Device\Information\DeviceStatusInfo.Designer.cs">
+      <DependentUpon>DeviceStatusInfo.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Entity\Polling.cs" />
+    <Compile Include="Entity\SocketObject.cs" />
+    <Compile Include="Entity\SystemInf.cs" />
+    <Compile Include="Entity\User.cs" />
+    <Compile Include="Login.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Login.Designer.cs">
+      <DependentUpon>Login.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Main.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Main.Designer.cs">
+      <DependentUpon>Main.cs</DependentUpon>
+    </Compile>
     <Compile Include="MainWindow.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -191,15 +275,60 @@
     <Compile Include="ClassFile\ModeBusTCPServer.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="PublicMethod\BaseUtil.cs" />
+    <Compile Include="PublicMethod\LogicHandler.cs" />
+    <Compile Include="PublicMethod\LogManager.cs" />
+    <Compile Include="PublicMethod\ModeBusTCPServer.cs" />
+    <Compile Include="PublicMethod\PollingTask.cs" />
+    <Compile Include="PublicMethod\PollingTimer.cs">
+      <SubType>Component</SubType>
+    </Compile>
     <Compile Include="RichTextAutoBottom.cs">
       <SubType>Component</SubType>
     </Compile>
     <Compile Include="RichTextAutoBottom.Designer.cs">
       <DependentUpon>RichTextAutoBottom.cs</DependentUpon>
     </Compile>
+    <EmbeddedResource Include="CustomerControl\AutoDataGridControl\AutoDataGridControl.resx">
+      <DependentUpon>AutoDataGridControl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="CustomerControl\Button\ButtonAddRow.resx">
+      <DependentUpon>ButtonAddRow.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="CustomerControl\Button\ButtonDeleteRow.resx">
+      <DependentUpon>ButtonDeleteRow.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="CustomerControl\Button\ButtonSaveGrid.resx">
+      <DependentUpon>ButtonSaveGrid.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="CustomerControl\GridViewWithSerialNum\GridViewWithSerialNum.resx">
+      <DependentUpon>GridViewWithSerialNum.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="CustomerControl\PagingControl\PageControl.resx">
+      <DependentUpon>PageControl.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="CustomerControl\PictureEditWithText\PictureEditWithText.resx">
+      <DependentUpon>PictureEditWithText.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Device\Command\FormNewCommand.resx">
+      <DependentUpon>FormNewCommand.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Device\Information\DeviceDetailInfo.resx">
+      <DependentUpon>DeviceDetailInfo.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Device\Information\DeviceStatusInfo.resx">
+      <DependentUpon>DeviceStatusInfo.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Login.resx">
+      <DependentUpon>Login.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Main.resx">
+      <DependentUpon>Main.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="MainWindow.resx">
       <DependentUpon>MainWindow.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="Properties\licenses.licx" />
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -210,6 +339,7 @@
       <DependentUpon>Resources.resx</DependentUpon>
       <DesignTime>True</DesignTime>
     </Compile>
+    <None Include="app.config" />
     <None Include="packages.config" />
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>
@@ -222,6 +352,15 @@
     </Compile>
   </ItemGroup>
   <ItemGroup>
+    <None Include="Resources\UIcon.png" />
+    <None Include="Resources\U_Letter_72px_1121581_easyicon.net.png" />
+    <None Include="Resources\devices_84.078431372549px_1202965_easyicon.net.png" />
+    <None Include="Resources\network-offline.png" />
+    <None Include="Resources\netstatus_tx_64px_18991_easyicon.net.png" />
+    <None Include="Resources\net_connected.png" />
+    <None Include="Resources\devicecontrol.png" />
+    <None Include="Resources\close_24px_1069872_easyicon.net.png" />
+    <None Include="Resources\check_16px_1137507_easyicon.net.png" />
     <Content Include="Tool\DevExpress.Charts.Designer.v15.2.dll" />
     <Content Include="Tool\DevExpress.Data.v15.2.dll" />
     <Content Include="Tool\DevExpress.Printing.v15.2.Core.dll" />
@@ -254,6 +393,9 @@
     <Content Include="Tool\zh-CHS\DevExpress.XtraGrid.v15.2.Design.resources.dll" />
     <Content Include="Tool\zh-CHS\DevExpress.XtraGrid.v15.2.resources.dll" />
   </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Device\Transfer\" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.

+ 15 - 0
PLCDataReader/app.config

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="UAS_PLCDataReader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <userSettings>
+        <UAS_PLCDataReader.Properties.Settings>
+            <setting name="MES" serializeAs="String">
+                <value>Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=UAS_MES_PROD;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=218.17.158.219)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));</value>
+            </setting>
+        </UAS_PLCDataReader.Properties.Settings>
+    </userSettings>
+</configuration>