From 0b617e22e15bca0b3dbaebdc55015cc2792f6840 Mon Sep 17 00:00:00 2001
From: C3031 <shitiangui@lanpucloud.cn>
Date: 星期二, 06 一月 2026 16:15:01 +0800
Subject: [PATCH] 增加S7通讯界面

---
 LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.Designer.cs |  116 ++++++--
 LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.resx        |  166 ++++++++++++
 LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.cs          |  144 ++++++++++-
 LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs                      |   81 ++++++
 LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.Designer.cs       |  144 +++++++++-
 LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs                |   47 +++
 LB_VisionProcesses/Communicators/MES/LBMES.cs                                  |   16 +
 LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.resx              |   24 +
 LB_VisionProcesses/Communicators/CommunicatorForm.cs                           |   21 +
 9 files changed, 692 insertions(+), 67 deletions(-)

diff --git a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.Designer.cs b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.Designer.cs
index fee0cbb..e470852 100644
--- a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.Designer.cs
+++ b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.Designer.cs
@@ -28,33 +28,44 @@
         /// </summary>
         private void InitializeComponent()
         {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CommunicatorForm));
             label3 = new Label();
             tableLayoutPanel1 = new TableLayoutPanel();
             grpReceive = new GroupBox();
             txtReceiveMsg = new TextBox();
             txtSendMsg = new TextBox();
             grpSetting = new GroupBox();
+            txtAddress = new TextBox();
+            cmbType = new ComboBox();
             txtIP = new TextBox();
             txtPort = new TextBox();
             lblPort = new Label();
             cmbIP = new ComboBox();
+            lblType = new Label();
+            lblAddress = new Label();
             lblIP = new Label();
             tableLayoutPanel2 = new TableLayoutPanel();
             btnRuleSend = new Button();
             btnSend = new Button();
+            themeForm_Communicator = new ReaLTaiizor.Forms.ThemeForm();
+            controlBox1 = new ReaLTaiizor.Controls.ControlBox();
+            panel_CommunicatorForm = new Panel();
             tableLayoutPanel1.SuspendLayout();
             grpReceive.SuspendLayout();
             grpSetting.SuspendLayout();
             tableLayoutPanel2.SuspendLayout();
+            themeForm_Communicator.SuspendLayout();
+            panel_CommunicatorForm.SuspendLayout();
             SuspendLayout();
             // 
             // label3
             // 
             label3.AutoSize = true;
             label3.Dock = DockStyle.Fill;
+            label3.ForeColor = Color.CornflowerBlue;
             label3.Location = new Point(3, 100);
             label3.Name = "label3";
-            label3.Size = new Size(669, 20);
+            label3.Size = new Size(655, 20);
             label3.TabIndex = 18;
             label3.Text = "鍙戦�佷俊鎭�";
             label3.TextAlign = ContentAlignment.BottomLeft;
@@ -69,7 +80,7 @@
             tableLayoutPanel1.Controls.Add(tableLayoutPanel2, 0, 3);
             tableLayoutPanel1.Controls.Add(label3, 0, 1);
             tableLayoutPanel1.Dock = DockStyle.Fill;
-            tableLayoutPanel1.Location = new Point(3, 64);
+            tableLayoutPanel1.Location = new Point(0, 0);
             tableLayoutPanel1.Name = "tableLayoutPanel1";
             tableLayoutPanel1.RowCount = 5;
             tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 100F));
@@ -77,16 +88,17 @@
             tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 30F));
             tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 40F));
             tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
-            tableLayoutPanel1.Size = new Size(675, 334);
+            tableLayoutPanel1.Size = new Size(661, 322);
             tableLayoutPanel1.TabIndex = 26;
             // 
             // grpReceive
             // 
             grpReceive.Controls.Add(txtReceiveMsg);
             grpReceive.Dock = DockStyle.Fill;
+            grpReceive.ForeColor = Color.CornflowerBlue;
             grpReceive.Location = new Point(3, 193);
             grpReceive.Name = "grpReceive";
-            grpReceive.Size = new Size(669, 138);
+            grpReceive.Size = new Size(655, 126);
             grpReceive.TabIndex = 30;
             grpReceive.TabStop = false;
             grpReceive.Text = "閫氳璁板綍";
@@ -94,12 +106,12 @@
             // txtReceiveMsg
             // 
             txtReceiveMsg.Dock = DockStyle.Fill;
-            txtReceiveMsg.Location = new Point(3, 19);
+            txtReceiveMsg.Location = new Point(3, 17);
             txtReceiveMsg.Multiline = true;
             txtReceiveMsg.Name = "txtReceiveMsg";
             txtReceiveMsg.ReadOnly = true;
             txtReceiveMsg.ScrollBars = ScrollBars.Both;
-            txtReceiveMsg.Size = new Size(663, 116);
+            txtReceiveMsg.Size = new Size(649, 106);
             txtReceiveMsg.TabIndex = 0;
             // 
             // txtSendMsg
@@ -107,36 +119,59 @@
             txtSendMsg.Dock = DockStyle.Fill;
             txtSendMsg.Location = new Point(3, 123);
             txtSendMsg.Name = "txtSendMsg";
-            txtSendMsg.Size = new Size(669, 23);
+            txtSendMsg.Size = new Size(655, 21);
             txtSendMsg.TabIndex = 29;
             // 
             // grpSetting
             // 
+            grpSetting.BackColor = Color.FromArgb(32, 41, 50);
+            grpSetting.Controls.Add(txtAddress);
+            grpSetting.Controls.Add(cmbType);
             grpSetting.Controls.Add(txtIP);
             grpSetting.Controls.Add(txtPort);
             grpSetting.Controls.Add(lblPort);
             grpSetting.Controls.Add(cmbIP);
+            grpSetting.Controls.Add(lblType);
+            grpSetting.Controls.Add(lblAddress);
             grpSetting.Controls.Add(lblIP);
             grpSetting.Dock = DockStyle.Fill;
+            grpSetting.ForeColor = Color.CornflowerBlue;
             grpSetting.Location = new Point(3, 3);
+            grpSetting.MinimumSize = new Size(261, 61);
             grpSetting.Name = "grpSetting";
-            grpSetting.Size = new Size(669, 94);
+            grpSetting.Size = new Size(655, 94);
             grpSetting.TabIndex = 28;
             grpSetting.TabStop = false;
             grpSetting.Text = "閫氳閰嶇疆";
+            // 
+            // txtAddress
+            // 
+            txtAddress.Location = new Point(251, 60);
+            txtAddress.Name = "txtAddress";
+            txtAddress.Size = new Size(100, 21);
+            txtAddress.TabIndex = 9;
+            // 
+            // cmbType
+            // 
+            cmbType.DropDownStyle = ComboBoxStyle.DropDownList;
+            cmbType.FormattingEnabled = true;
+            cmbType.Location = new Point(251, 23);
+            cmbType.Name = "cmbType";
+            cmbType.Size = new Size(100, 23);
+            cmbType.TabIndex = 8;
             // 
             // txtIP
             // 
             txtIP.Location = new Point(79, 22);
             txtIP.Name = "txtIP";
-            txtIP.Size = new Size(100, 23);
+            txtIP.Size = new Size(100, 21);
             txtIP.TabIndex = 7;
             // 
             // txtPort
             // 
             txtPort.Location = new Point(79, 60);
             txtPort.Name = "txtPort";
-            txtPort.Size = new Size(100, 23);
+            txtPort.Size = new Size(100, 21);
             txtPort.TabIndex = 6;
             // 
             // lblPort
@@ -144,7 +179,7 @@
             lblPort.AutoSize = true;
             lblPort.Location = new Point(13, 63);
             lblPort.Name = "lblPort";
-            lblPort.Size = new Size(32, 17);
+            lblPort.Size = new Size(31, 15);
             lblPort.TabIndex = 4;
             lblPort.Text = "绔彛";
             // 
@@ -153,15 +188,33 @@
             cmbIP.FormattingEnabled = true;
             cmbIP.Location = new Point(79, 21);
             cmbIP.Name = "cmbIP";
-            cmbIP.Size = new Size(100, 25);
+            cmbIP.Size = new Size(100, 23);
             cmbIP.TabIndex = 1;
+            // 
+            // lblType
+            // 
+            lblType.AutoSize = true;
+            lblType.Location = new Point(205, 26);
+            lblType.Name = "lblType";
+            lblType.Size = new Size(31, 15);
+            lblType.TabIndex = 0;
+            lblType.Text = "鍨嬪彿";
+            // 
+            // lblAddress
+            // 
+            lblAddress.AutoSize = true;
+            lblAddress.Location = new Point(205, 63);
+            lblAddress.Name = "lblAddress";
+            lblAddress.Size = new Size(31, 15);
+            lblAddress.TabIndex = 0;
+            lblAddress.Text = "鍦板潃";
             // 
             // lblIP
             // 
             lblIP.AutoSize = true;
             lblIP.Location = new Point(13, 26);
             lblIP.Name = "lblIP";
-            lblIP.Size = new Size(32, 17);
+            lblIP.Size = new Size(31, 15);
             lblIP.TabIndex = 0;
             lblIP.Text = "鍦板潃";
             // 
@@ -178,12 +231,13 @@
             tableLayoutPanel2.Name = "tableLayoutPanel2";
             tableLayoutPanel2.RowCount = 1;
             tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
-            tableLayoutPanel2.Size = new Size(669, 34);
+            tableLayoutPanel2.Size = new Size(655, 34);
             tableLayoutPanel2.TabIndex = 27;
             // 
             // btnRuleSend
             // 
             btnRuleSend.Dock = DockStyle.Fill;
+            btnRuleSend.ForeColor = Color.CornflowerBlue;
             btnRuleSend.Location = new Point(83, 3);
             btnRuleSend.Name = "btnRuleSend";
             btnRuleSend.Size = new Size(74, 28);
@@ -195,6 +249,7 @@
             // btnSend
             // 
             btnSend.Dock = DockStyle.Fill;
+            btnSend.ForeColor = Color.CornflowerBlue;
             btnSend.Location = new Point(3, 3);
             btnSend.Name = "btnSend";
             btnSend.Size = new Size(74, 28);
@@ -203,13 +258,63 @@
             btnSend.UseVisualStyleBackColor = true;
             btnSend.Click += btnSend_Click;
             // 
+            // themeForm_Communicator
+            // 
+            themeForm_Communicator.BackColor = Color.FromArgb(32, 41, 50);
+            themeForm_Communicator.Controls.Add(controlBox1);
+            themeForm_Communicator.Controls.Add(panel_CommunicatorForm);
+            themeForm_Communicator.Dock = DockStyle.Fill;
+            themeForm_Communicator.Font = new Font("Microsoft Sans Serif", 9F);
+            themeForm_Communicator.Image = (Image)resources.GetObject("themeForm_Communicator.Image");
+            themeForm_Communicator.Location = new Point(0, 0);
+            themeForm_Communicator.Name = "themeForm_Communicator";
+            themeForm_Communicator.Padding = new Padding(10, 70, 10, 9);
+            themeForm_Communicator.RoundCorners = true;
+            themeForm_Communicator.Sizable = true;
+            themeForm_Communicator.Size = new Size(681, 401);
+            themeForm_Communicator.SmartBounds = true;
+            themeForm_Communicator.StartPosition = FormStartPosition.WindowsDefaultLocation;
+            themeForm_Communicator.TabIndex = 27;
+            themeForm_Communicator.Text = "閫氳璁剧疆";
+            // 
+            // controlBox1
+            // 
+            controlBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
+            controlBox1.BackColor = Color.FromArgb(32, 34, 37);
+            controlBox1.CloseHoverColor = Color.FromArgb(230, 17, 35);
+            controlBox1.DefaultLocation = true;
+            controlBox1.EnableHoverHighlight = true;
+            controlBox1.EnableMaximizeButton = true;
+            controlBox1.EnableMinimizeButton = true;
+            controlBox1.ForeColor = Color.FromArgb(155, 155, 155);
+            controlBox1.Location = new Point(581, 18);
+            controlBox1.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
+            controlBox1.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
+            controlBox1.Name = "controlBox1";
+            controlBox1.Size = new Size(90, 25);
+            controlBox1.TabIndex = 28;
+            controlBox1.Text = "controlBox1";
+            // 
+            // panel_CommunicatorForm
+            // 
+            panel_CommunicatorForm.Controls.Add(tableLayoutPanel1);
+            panel_CommunicatorForm.Dock = DockStyle.Fill;
+            panel_CommunicatorForm.Location = new Point(10, 70);
+            panel_CommunicatorForm.Name = "panel_CommunicatorForm";
+            panel_CommunicatorForm.Size = new Size(661, 322);
+            panel_CommunicatorForm.TabIndex = 27;
+            // 
             // CommunicatorForm
             // 
             AutoScaleDimensions = new SizeF(96F, 96F);
             AutoScaleMode = AutoScaleMode.Dpi;
             ClientSize = new Size(681, 401);
-            Controls.Add(tableLayoutPanel1);
+            Controls.Add(themeForm_Communicator);
+            FormBorderStyle = FormBorderStyle.None;
+            MinimumSize = new Size(261, 61);
             Name = "CommunicatorForm";
+            Text = "閫氳璁剧疆";
+            TransparencyKey = Color.Fuchsia;
             FormClosing += CommunicatorForm_FormClosing;
             tableLayoutPanel1.ResumeLayout(false);
             tableLayoutPanel1.PerformLayout();
@@ -218,6 +323,8 @@
             grpSetting.ResumeLayout(false);
             grpSetting.PerformLayout();
             tableLayoutPanel2.ResumeLayout(false);
+            themeForm_Communicator.ResumeLayout(false);
+            panel_CommunicatorForm.ResumeLayout(false);
             ResumeLayout(false);
         }
 
@@ -236,5 +343,12 @@
         private TextBox txtReceiveMsg;
         private Button btnSend;
         private Button btnRuleSend;
+        private ReaLTaiizor.Forms.ThemeForm themeForm_Communicator;
+        private ReaLTaiizor.Controls.ControlBox controlBox1;
+        private Panel panel_CommunicatorForm;
+        private Label lblType;
+        private ComboBox cmbType;
+        private Label lblAddress;
+        private TextBox txtAddress;
     }
 }
\ No newline at end of file
diff --git a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs
index c582b42..08c07a7 100644
--- a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs
+++ b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.cs
@@ -1,4 +1,5 @@
 锘縰sing LB_VisionProcesses.Communicators;
+using LB_VisionProcesses.Communicators.SiemensS7;
 using LB_VisionProcesses.Communicators.TCom;
 using ReaLTaiizor.Forms;
 using RJCP.IO.Ports;
@@ -6,13 +7,19 @@
 
 namespace LB_SmartVision.Forms.Pages.CommunicatorPage
 {
-    public partial class CommunicatorForm : MaterialForm
+    public partial class CommunicatorForm : Form
     {
         BaseCommunicator communicator { get; set; }
 
         public CommunicatorForm()
         {
             InitializeComponent();
+            cmbType.Items.Clear();
+
+            if (communicator != null && !string.IsNullOrEmpty(communicator.CommunicatorConnections["鍨嬪彿"]?.ToString()))
+            {
+                cmbType.Items.Add(communicator.CommunicatorConnections["鍨嬪彿"]?.ToString());
+            }
         }
 
         public CommunicatorForm(BaseCommunicator communicator, string name)
@@ -24,6 +31,14 @@
             cmbIP.Enabled = false;
             txtIP.Enabled = false;
             txtPort.Enabled = false;
+
+
+            lblType.Visible = false;
+            lblAddress.Visible = false;
+            cmbType.Visible = false;
+            txtAddress.Visible = false;
+
+
             this.Text = name;
 
             if (communicator is UARTPort)
@@ -39,28 +54,50 @@
                 txtIP.Visible = false;
                 cmbIP.Visible = true;
 
+                lblType.Visible = false;
+                lblAddress.Visible = false;
+                cmbType.Visible = false;
+                txtAddress.Visible = false;
+
                 lblIP.Text = "COM鍙�";
                 lblPort.Text = "娉㈢壒鐜�";
             }
             else if (communicator is TCPClient || communicator is TCPServer)
             {
                 txtIP.Text = communicator.CommunicatorConnections["鍦板潃"]?.ToString();
-                txtPort.Text = communicator.CommunicatorConnections["绔彛"]?.ToString();
+                txtPort.SelectedText = communicator.CommunicatorConnections["绔彛"]?.ToString();
                 txtIP.Visible = true;
                 cmbIP.Visible = false;
+
+                lblType.Visible = false;
+                lblAddress.Visible = false;
+                cmbType.Visible = false;
+                txtAddress.Visible = false;
 
                 lblIP.Text = "鍦板潃";
                 lblPort.Text = "绔彛";
             }
-            else if (communicator is LocalMonitor)
+            else if (communicator is SiemensLBS7)
             {
                 txtIP.Text = communicator.CommunicatorConnections["鍦板潃"]?.ToString();
                 txtPort.Text = communicator.CommunicatorConnections["绔彛"]?.ToString();
+                cmbType.Items.Clear();
+
+                if (!string.IsNullOrEmpty(communicator.CommunicatorConnections["鍨嬪彿"]?.ToString()))
+                {
+                    cmbType.Items.Add(communicator.CommunicatorConnections["鍨嬪彿"]?.ToString());
+                }
+                cmbType.Text = communicator.CommunicatorConnections["鍨嬪彿"]?.ToString();
                 txtIP.Visible = true;
                 cmbIP.Visible = false;
 
-                lblIP.Text = "鐩戞帶鏂囦欢";
-                lblPort.Text = "鍐欏叆鏂囦欢";
+                lblType.Visible = true;
+                lblAddress.Visible = true;
+                cmbType.Visible = true;
+                txtAddress.Visible = true;
+
+                lblIP.Text = "IP";
+                lblPort.Text = "妲�";
             }
 
             this.communicator = communicator;
diff --git a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.resx b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.resx
index 8b2ff64..8f8bd20 100644
--- a/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.resx
+++ b/LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.resx
@@ -117,4 +117,28 @@
   <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="themeForm_Communicator.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        vAAADrwBlbxySQAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
+        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
+        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
+        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
+        NNs5DgaTKLinEQYVO4Trf1mkV81wixLUslPmA3bzF2XcKeP+hWY/u3n0fCXcrQwLyjAvjNsb1dI6N05P
+        mFAIHlHG73sEypPgGwnhfpn0zzH7jzddcK4Q7kqfKNMI4a9K+MwBDgbdeF04MBWsFYYdQvhbLlBvfhKT
+        f+vMtLfG7C0JJXxKGY67WnvCmPAFGRs7z42boul5AzHBfdK6TjdQtzPGk8oos5F/5Y7sfVvPhg+lp+1h
+        0yIsxARPmtaN78WEl8eEX+SNclxUhne0glUrNrN9zfMGlPAuZTzaQ99FYfwuDv3ruoLvq5bWaQSvZCfL
+        GXUYLwrj240Qxtu2lkSN4FpdWfKZH9jb9RQ1Cq62f9sVOlxUxn3KQXnJ0PO8QxU/jBm1h74v7ZniEG9K
+        Hdg/quzvXO709k0Y3u08ucGqWgheX862H4XgxbR47SqU8D1X0EXC2VmGizqDz0xPr0kYH9eO360gNe0b
+        jWppozB+1kOQEb5MCLa0C64NoeGrhOGrvH6lhK81GiIvnggmrDLzgvTkvwvDA+5wsU4nhG/m9AUoBD/F
+        HFzWN4H0XQn2vF8eXN8Z3FAPYasl59oUYjuB+sTImDB+nhfgYQ39STf4fmu1DHtz+oIUgiM1KkWtwcFw
+        sOujVT3hrnaL7UQc+hcL5W+sKIXhw0OVjaW0iwnBc47gqIQ45QY32PKRzv8eTguRYM9SS5YouEEZjv37
+        EffbzbjBDdZyxZYQ12EB2qS0bWrJqRVazPDWkojwZbuZrsgZtDJ0iY1g12khEtTicMTvclwn2CKE32YJ
+        7G5PORfZ1HtMCH7MOV4BrQ3XCe92+4onk5Nn2PolDAvWXnuOzAwzo6Nnx4Q3SrojwqfKeMxWMpsXWVs+
+        2WrfKRdbW1W6Hf0shM/33Y7my4PrleFZIfhAaWjU/e5ivlw+y3S2FySMtynjvcrwsFiLJv/RhPBB2ws1
+        hK2WcBLBFf1qawlplwvxaQlxe786OOU4PBWsjSO85mBlQ8n99r/BisSdAas4FfgHpdEUZpwUX7sAAAAA
+        SUVORK5CYII=
+</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.Designer.cs b/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.Designer.cs
index fc94b76..3fb0581 100644
--- a/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.Designer.cs
+++ b/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.Designer.cs
@@ -28,6 +28,7 @@
         /// </summary>
         private void InitializeComponent()
         {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CreateCommunicatorForm));
             uiLabelIP = new Label();
             uiLabelPort = new Label();
             uiButtonCancel = new Button();
@@ -40,14 +41,18 @@
             uiComboBoxPort = new ComboBox();
             uiIPTextBox = new TextBox();
             uiTextBoxPath = new TextBox();
-            rButtonMonitor = new RadioButton();
+            rButtonS7 = new RadioButton();
+            themeForm1 = new ReaLTaiizor.Forms.ThemeForm();
+            uiLabelS7Type = new Label();
+            uiComboBoxS7Type = new ComboBox();
+            themeForm1.SuspendLayout();
             SuspendLayout();
             // 
             // uiLabelIP
             // 
             uiLabelIP.Font = new Font("瀹嬩綋", 12F);
-            uiLabelIP.ForeColor = Color.FromArgb(48, 48, 48);
-            uiLabelIP.Location = new Point(84, 111);
+            uiLabelIP.ForeColor = SystemColors.Control;
+            uiLabelIP.Location = new Point(84, 169);
             uiLabelIP.Name = "uiLabelIP";
             uiLabelIP.Size = new Size(100, 23);
             uiLabelIP.TabIndex = 1;
@@ -56,8 +61,8 @@
             // uiLabelPort
             // 
             uiLabelPort.Font = new Font("瀹嬩綋", 12F);
-            uiLabelPort.ForeColor = Color.FromArgb(48, 48, 48);
-            uiLabelPort.Location = new Point(84, 177);
+            uiLabelPort.ForeColor = SystemColors.Control;
+            uiLabelPort.Location = new Point(84, 235);
             uiLabelPort.Name = "uiLabelPort";
             uiLabelPort.Size = new Size(100, 23);
             uiLabelPort.TabIndex = 2;
@@ -66,7 +71,8 @@
             // uiButtonCancel
             // 
             uiButtonCancel.Font = new Font("瀹嬩綋", 12F);
-            uiButtonCancel.Location = new Point(343, 234);
+            uiButtonCancel.ForeColor = SystemColors.Control;
+            uiButtonCancel.Location = new Point(343, 351);
             uiButtonCancel.MinimumSize = new Size(1, 1);
             uiButtonCancel.Name = "uiButtonCancel";
             uiButtonCancel.Size = new Size(100, 35);
@@ -77,7 +83,7 @@
             // uiTextBoxPort
             // 
             uiTextBoxPort.Font = new Font("瀹嬩綋", 12F);
-            uiTextBoxPort.Location = new Point(191, 175);
+            uiTextBoxPort.Location = new Point(191, 233);
             uiTextBoxPort.Margin = new Padding(4, 5, 4, 5);
             uiTextBoxPort.MinimumSize = new Size(1, 16);
             uiTextBoxPort.Name = "uiTextBoxPort";
@@ -88,7 +94,8 @@
             // rButtonUART
             // 
             rButtonUART.Font = new Font("瀹嬩綋", 12F);
-            rButtonUART.Location = new Point(51, 12);
+            rButtonUART.ForeColor = SystemColors.Control;
+            rButtonUART.Location = new Point(51, 71);
             rButtonUART.MinimumSize = new Size(1, 1);
             rButtonUART.Name = "rButtonUART";
             rButtonUART.Size = new Size(150, 29);
@@ -99,7 +106,8 @@
             // rButtonTCPServer
             // 
             rButtonTCPServer.Font = new Font("瀹嬩綋", 12F);
-            rButtonTCPServer.Location = new Point(51, 47);
+            rButtonTCPServer.ForeColor = SystemColors.Control;
+            rButtonTCPServer.Location = new Point(51, 106);
             rButtonTCPServer.MinimumSize = new Size(1, 1);
             rButtonTCPServer.Name = "rButtonTCPServer";
             rButtonTCPServer.Size = new Size(150, 29);
@@ -110,7 +118,8 @@
             // rButtonTCPClient
             // 
             rButtonTCPClient.Font = new Font("瀹嬩綋", 12F);
-            rButtonTCPClient.Location = new Point(293, 47);
+            rButtonTCPClient.ForeColor = SystemColors.Control;
+            rButtonTCPClient.Location = new Point(293, 106);
             rButtonTCPClient.MinimumSize = new Size(1, 1);
             rButtonTCPClient.Name = "rButtonTCPClient";
             rButtonTCPClient.Size = new Size(150, 29);
@@ -122,7 +131,8 @@
             // 
             uiButtonCreate.Enabled = false;
             uiButtonCreate.Font = new Font("瀹嬩綋", 12F);
-            uiButtonCreate.Location = new Point(191, 234);
+            uiButtonCreate.ForeColor = SystemColors.Control;
+            uiButtonCreate.Location = new Point(191, 351);
             uiButtonCreate.MinimumSize = new Size(1, 1);
             uiButtonCreate.Name = "uiButtonCreate";
             uiButtonCreate.Size = new Size(100, 35);
@@ -133,7 +143,8 @@
             // uiButtonTest
             // 
             uiButtonTest.Font = new Font("瀹嬩綋", 12F);
-            uiButtonTest.Location = new Point(31, 234);
+            uiButtonTest.ForeColor = SystemColors.Control;
+            uiButtonTest.Location = new Point(31, 351);
             uiButtonTest.MinimumSize = new Size(1, 1);
             uiButtonTest.Name = "uiButtonTest";
             uiButtonTest.Size = new Size(100, 35);
@@ -144,7 +155,7 @@
             // uiComboBoxPort
             // 
             uiComboBoxPort.Font = new Font("瀹嬩綋", 12F);
-            uiComboBoxPort.Location = new Point(191, 108);
+            uiComboBoxPort.Location = new Point(191, 167);
             uiComboBoxPort.Margin = new Padding(4, 5, 4, 5);
             uiComboBoxPort.MinimumSize = new Size(63, 0);
             uiComboBoxPort.Name = "uiComboBoxPort";
@@ -155,7 +166,7 @@
             // uiIPTextBox
             // 
             uiIPTextBox.Font = new Font("瀹嬩綋", 12F);
-            uiIPTextBox.Location = new Point(191, 108);
+            uiIPTextBox.Location = new Point(191, 168);
             uiIPTextBox.Margin = new Padding(4, 5, 4, 5);
             uiIPTextBox.MinimumSize = new Size(1, 1);
             uiIPTextBox.Name = "uiIPTextBox";
@@ -166,31 +177,74 @@
             // uiTextBoxPath
             // 
             uiTextBoxPath.Font = new Font("瀹嬩綋", 12F);
-            uiTextBoxPath.Location = new Point(191, 108);
+            uiTextBoxPath.Location = new Point(191, 168);
             uiTextBoxPath.Margin = new Padding(4, 5, 4, 5);
             uiTextBoxPath.MinimumSize = new Size(1, 16);
             uiTextBoxPath.Name = "uiTextBoxPath";
             uiTextBoxPath.Size = new Size(205, 26);
             uiTextBoxPath.TabIndex = 13;
             // 
-            // rButtonMonitor
+            // rButtonS7
             // 
-            rButtonMonitor.Font = new Font("瀹嬩綋", 12F);
-            rButtonMonitor.Location = new Point(293, 12);
-            rButtonMonitor.MinimumSize = new Size(1, 1);
-            rButtonMonitor.Name = "rButtonMonitor";
-            rButtonMonitor.Size = new Size(150, 29);
-            rButtonMonitor.TabIndex = 14;
-            rButtonMonitor.Text = "鏈湴鐩戞帶";
-            rButtonMonitor.CheckedChanged += rButtonMonitor_CheckedChanged;
+            rButtonS7.Font = new Font("瀹嬩綋", 12F);
+            rButtonS7.ForeColor = SystemColors.Control;
+            rButtonS7.Location = new Point(293, 71);
+            rButtonS7.MinimumSize = new Size(1, 1);
+            rButtonS7.Name = "rButtonS7";
+            rButtonS7.Size = new Size(150, 29);
+            rButtonS7.TabIndex = 14;
+            rButtonS7.Text = "瑗块棬瀛怱7";
+            rButtonS7.CheckedChanged += rButtonS7_CheckedChanged;
+            // 
+            // themeForm1
+            // 
+            themeForm1.BackColor = Color.FromArgb(32, 41, 50);
+            themeForm1.Controls.Add(uiLabelS7Type);
+            themeForm1.Controls.Add(uiComboBoxS7Type);
+            themeForm1.Dock = DockStyle.Fill;
+            themeForm1.Font = new Font("Microsoft Sans Serif", 9F);
+            themeForm1.Image = (Image)resources.GetObject("themeForm1.Image");
+            themeForm1.Location = new Point(0, 0);
+            themeForm1.Name = "themeForm1";
+            themeForm1.Padding = new Padding(10, 70, 10, 9);
+            themeForm1.RoundCorners = true;
+            themeForm1.Sizable = true;
+            themeForm1.Size = new Size(480, 413);
+            themeForm1.SmartBounds = true;
+            themeForm1.StartPosition = FormStartPosition.WindowsDefaultLocation;
+            themeForm1.TabIndex = 15;
+            themeForm1.Text = "鍒涘缓閫氳";
+            // 
+            // uiLabelS7Type
+            // 
+            uiLabelS7Type.Font = new Font("瀹嬩綋", 12F);
+            uiLabelS7Type.ForeColor = SystemColors.Control;
+            uiLabelS7Type.Location = new Point(84, 302);
+            uiLabelS7Type.Name = "uiLabelS7Type";
+            uiLabelS7Type.Size = new Size(100, 23);
+            uiLabelS7Type.TabIndex = 2;
+            uiLabelS7Type.Text = "鍨嬪彿";
+            // 
+            // uiComboBoxS7Type
+            // 
+            uiComboBoxS7Type.DropDownStyle = ComboBoxStyle.DropDownList;
+            uiComboBoxS7Type.Font = new Font("瀹嬩綋", 12F);
+            uiComboBoxS7Type.Location = new Point(191, 299);
+            uiComboBoxS7Type.Margin = new Padding(4, 5, 4, 5);
+            uiComboBoxS7Type.MinimumSize = new Size(63, 0);
+            uiComboBoxS7Type.Name = "uiComboBoxS7Type";
+            uiComboBoxS7Type.Size = new Size(205, 24);
+            uiComboBoxS7Type.TabIndex = 11;
+            uiComboBoxS7Type.SelectedIndexChanged += uiComboBoxS7Type_SelectedIndexChanged;
+            uiComboBoxS7Type.MouseClick += uiComboBoxPort_MouseClick;
             // 
             // CreateCommunicatorForm
             // 
             AutoScaleDimensions = new SizeF(96F, 96F);
             AutoScaleMode = AutoScaleMode.Dpi;
-            ClientSize = new Size(484, 285);
+            ClientSize = new Size(480, 413);
             ControlBox = false;
-            Controls.Add(rButtonMonitor);
+            Controls.Add(rButtonS7);
             Controls.Add(uiTextBoxPath);
             Controls.Add(uiIPTextBox);
             Controls.Add(uiComboBoxPort);
@@ -203,10 +257,15 @@
             Controls.Add(uiButtonCancel);
             Controls.Add(uiLabelPort);
             Controls.Add(uiLabelIP);
+            Controls.Add(themeForm1);
+            FormBorderStyle = FormBorderStyle.None;
             MaximizeBox = false;
             MinimizeBox = false;
+            MinimumSize = new Size(261, 61);
             Name = "CreateCommunicatorForm";
             Text = "鍒涘缓閫氳";
+            TransparencyKey = Color.Fuchsia;
+            themeForm1.ResumeLayout(false);
             ResumeLayout(false);
             PerformLayout();
         }
@@ -224,6 +283,9 @@
         private ComboBox uiComboBoxPort;
         private TextBox uiIPTextBox;
         private TextBox uiTextBoxPath;
-        private RadioButton rButtonMonitor;
+        private RadioButton rButtonS7;
+        private ReaLTaiizor.Forms.ThemeForm themeForm1;
+        private Label uiLabelS7Type;
+        private ComboBox uiComboBoxS7Type;
     }
 }
\ No newline at end of file
diff --git a/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.cs b/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.cs
index 0865a23..a9fc8ab 100644
--- a/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.cs
+++ b/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.cs
@@ -1,4 +1,6 @@
-锘縰sing LB_VisionProcesses.Communicators;
+锘縰sing LB_SmartVisionCommon;
+using LB_VisionProcesses.Communicators;
+using LB_VisionProcesses.Communicators.SiemensS7;
 using LB_VisionProcesses.Communicators.TCom;
 using RJCP.IO.Ports;
 using System;
@@ -30,17 +32,18 @@
                 communicator = new UARTPort();
 
             rButtonUART.Checked = true;
+            uiLabelS7Type.Visible = false;
+            uiComboBoxS7Type.Visible = false;
             uiButtonCreate.Enabled = false;
         }
 
         private void uiButtonTest_Click(object sender, EventArgs e)
         {
             uiButtonCreate.Enabled = false;
-
             rButtonUART.Enabled = false;
             rButtonTCPServer.Enabled = false;
             rButtonTCPClient.Enabled = false;
-            rButtonMonitor.Enabled = false;
+            rButtonS7.Enabled = false;
 
             if (communicator != null)
                 communicator.Disconnect();
@@ -51,6 +54,8 @@
 
                 IP = uiComboBoxPort.Text;
                 PORT = uiTextBoxPort.Text;
+                communicator.CommunicatorConnections.Add("鍦板潃", IP);
+                communicator.CommunicatorConnections.Add("绔彛", PORT);
             }
             else if (rButtonTCPServer.Checked)
             {
@@ -58,6 +63,8 @@
 
                 IP = uiIPTextBox.Text;
                 PORT = uiTextBoxPort.Text;
+                communicator.CommunicatorConnections.Add("鍦板潃", IP);
+                communicator.CommunicatorConnections.Add("绔彛", PORT);
             }
             else if (rButtonTCPClient.Checked)
             {
@@ -65,23 +72,66 @@
 
                 IP = uiIPTextBox.Text;
                 PORT = uiTextBoxPort.Text;
+                communicator.CommunicatorConnections.Add("鍦板潃", IP);
+                communicator.CommunicatorConnections.Add("绔彛", PORT);
             }
-            else if (rButtonMonitor.Checked)
+            else if (rButtonS7.Checked)
             {
-                communicator = new LocalMonitor();
+                communicator = new SiemensLBS7();
 
                 IP = uiTextBoxPath.Text;
                 PORT = uiTextBoxPort.Text;
+                switch (uiComboBoxS7Type.Text)
+                {
+                    case "S7200":
+                        {
+                            cpuType = S7.Net.CpuType.S7200;
+                            break;
+                        }
+                    case "Logo0BA8":
+                        {
+                            cpuType = S7.Net.CpuType.Logo0BA8;
+                            break;
+                        }
+                    case "S7200Smart":
+                        {
+                            cpuType = S7.Net.CpuType.S7200Smart;
+                            break;
+                        }
+                    case "S7300":
+                        {
+                            cpuType = S7.Net.CpuType.S7300;
+                            break;
+                        }
+                    case "S7400":
+                        {
+                            cpuType = S7.Net.CpuType.S7400;
+                            break;
+                        }
+                    case "S71200":
+                        {
+                            cpuType = S7.Net.CpuType.S71200;
+                            break;
+                        }
+                    case "S71500":
+                        {
+                            cpuType = S7.Net.CpuType.S71500;
+                            break;
+                        }
+                    default:
+                        cpuType = S7.Net.CpuType.S71500;
+                        break;
+                }
+                communicator.CommunicatorConnections.Add("鍦板潃", IP);
+                communicator.CommunicatorConnections.Add("绔彛", PORT);
+                communicator.CommunicatorConnections.Add("鍨嬪彿", cpuType);
             }
             else
             {
                 MessageBox.Show("鏈�夋嫨閫氳绫诲瀷!", "寮傚父");
                 return;
             }
-
-            communicator.CommunicatorConnections.Add("鍦板潃", IP);
-            communicator.CommunicatorConnections.Add("绔彛", PORT);
-            if (communicator.Connect())
+            if (!communicator.Connect())
             {
                 uiButtonCreate.Enabled = true;
                 communicator.Disconnect();
@@ -92,10 +142,11 @@
 
         public string IP = string.Empty;
         public string PORT = string.Empty;
+        public S7.Net.CpuType cpuType = S7.Net.CpuType.S71500;
 
         private void uiButtonCreate_Click(object sender, EventArgs e)
         {
-            if (communicator.Connect())
+            if (!communicator.Connect())
             {
                 bCreate = true;
                 this.Close();
@@ -131,6 +182,10 @@
                 uiLabelPort.Text = "娉㈢壒鐜�";
                 uiTextBoxPort.Visible = true;
 
+                uiLabelS7Type.Visible = false;
+                uiComboBoxS7Type.Visible = false;
+
+
                 uiButtonCreate.Enabled = false;
             }
         }
@@ -153,6 +208,9 @@
                 uiLabelPort.Text = "绔彛";
                 uiTextBoxPort.Visible = true;
 
+                uiLabelS7Type.Visible = false;
+                uiComboBoxS7Type.Visible = false;
+
                 uiButtonCreate.Enabled = false;
             }
         }
@@ -174,26 +232,39 @@
                 uiLabelPort.Visible = true;
                 uiLabelPort.Text = "绔彛";
                 uiTextBoxPort.Visible = true;
+
+                uiLabelS7Type.Visible = false;
+                uiComboBoxS7Type.Visible = false;
+
             }
         }
 
-        private void rButtonMonitor_CheckedChanged(object sender, EventArgs e)
+        private void rButtonS7_CheckedChanged(object sender, EventArgs e)
         {
             uiButtonCreate.Enabled = false;
             if (communicator != null)
                 communicator.Disconnect();
 
-            if (rButtonMonitor.Checked)
+            if (rButtonS7.Checked)
             {
                 uiLabelIP.Visible = true;
-                uiLabelIP.Text = "鐩戞帶鏂囦欢";
+                uiLabelIP.Text = "鍦板潃";
                 uiIPTextBox.Visible = false;
                 uiComboBoxPort.Visible = false;
                 uiTextBoxPath.Visible = true;
 
                 uiLabelPort.Visible = true;
-                uiLabelPort.Text = "鍐欏叆鏂囦欢";
+                uiLabelPort.Text = "妲�";
                 uiTextBoxPort.Visible = true;
+
+                uiLabelS7Type.Visible = true;
+                uiComboBoxS7Type.Visible = true;
+                uiComboBoxS7Type.Items.Clear();
+
+                foreach (var c in Enum.GetValues(typeof(S7.Net.CpuType)))
+                {
+                    uiComboBoxS7Type.Items.Add(c.ToString());
+                }
             }
         }
 
@@ -219,5 +290,50 @@
         {
             uiButtonCreate.Enabled = false;
         }
+
+        private void uiComboBoxS7Type_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            switch (uiComboBoxS7Type.Text)
+            {
+                case "S7200":
+                    {
+                        cpuType = S7.Net.CpuType.S7200;
+                        break;
+                    }
+                case "Logo0BA8":
+                    {
+                        cpuType = S7.Net.CpuType.Logo0BA8;
+                        break;
+                    }
+                case "S7200Smart":
+                    {
+                        cpuType = S7.Net.CpuType.S7200Smart;
+                        break;
+                    }
+                case "S7300":
+                    {
+                        cpuType = S7.Net.CpuType.S7300;
+                        break;
+                    }
+                case "S7400":
+                    {
+                        cpuType = S7.Net.CpuType.S7400;
+                        break;
+                    }
+                case "S71200":
+                    {
+                        cpuType = S7.Net.CpuType.S71200;
+                        break;
+                    }
+                case "S71500":
+                    {
+                        cpuType = S7.Net.CpuType.S71500;
+                        break;
+                    }
+                default:
+                    cpuType = S7.Net.CpuType.S71500;
+                    break;
+            }
+        }
     }
 }
diff --git a/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.resx b/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.resx
index 8b2ff64..d7d46a5 100644
--- a/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.resx
+++ b/LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.resx
@@ -117,4 +117,170 @@
   <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="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        mdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltM
+        aotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1
+        xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9pi
+        UltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGp
+        LRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACO
+        mdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltM
+        aotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1
+        xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9pi
+        UltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGp
+        LRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACO
+        mdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltM
+        aotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1
+        xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9pi
+        UltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGp
+        LRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACO
+        mdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltM
+        aotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1
+        xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9pi
+        UltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGp
+        LR9+/fOfSPvHP/tm2nf+/Ftpv/ypj6d9Me6f/+Lbaf/xN3+Y9pXPfZS2AThmUltMaotJbTGpLSa1xaS2
+        bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThm
+        UltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGp
+        LSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQW
+        k9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJ
+        bTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2
+        bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThm
+        UltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGp
+        LSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQW
+        k9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJ
+        bTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2
+        bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThm
+        UltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGp
+        LSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQW
+        k9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJ
+        bTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2
+        bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThm
+        UltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGp
+        LSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQW
+        k9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJ
+        bTGpLRuAYya1xaS2mNQWk9piUltMasuHL33m+9P8pJYvf7btu//z33PoS5/5KM2LaPnVT388bQNwzKS2
+        mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEt
+        JrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaY
+        pHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0m
+        tWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpik
+        ecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1
+        ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5
+        yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVl
+        A3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJ
+        pLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUD
+        cMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmk
+        tngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNw
+        zKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2
+        eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DM
+        pLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4
+        ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyk
+        tpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngR
+        LSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2
+        mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa15cM3fuHH0n77lz6T9rWf
+        /VTaVz73ibRf++xHaV//uU+nffVnfngObQCOmdQWk9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuA
+        Yya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9pi
+        UltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdM
+        aotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2
+        mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQW
+        k9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ
+        89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1
+        xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikual
+        DcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJ
+        bTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuA
+        Yya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9pi
+        UltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdM
+        aotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2
+        mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQW
+        k9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ
+        89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1
+        xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikual
+        DcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJ
+        bTGpLSZpXvp/N+2H12uZAHMAAAAASUVORK5CYII=
+</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/LB_VisionProcesses/Communicators/CommunicatorForm.cs b/LB_VisionProcesses/Communicators/CommunicatorForm.cs
index ca5526d..c5298b1 100644
--- a/LB_VisionProcesses/Communicators/CommunicatorForm.cs
+++ b/LB_VisionProcesses/Communicators/CommunicatorForm.cs
@@ -1,4 +1,7 @@
-锘縰sing System;
+锘縰sing LB_VisionProcesses.Communicators.SiemensS7;
+using LB_VisionProcesses.Communicators.TCom;
+using RJCP.IO.Ports;
+using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -11,8 +14,6 @@
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
-using LB_VisionProcesses.Communicators.TCom;
-using RJCP.IO.Ports;
 
 namespace LB_VisionProcesses.Communicators
 {
@@ -135,6 +136,20 @@
                 txtIP.Text = communicator.CommunicatorConnections["鍦板潃"].ToString();
                 txtPort.Text = communicator.CommunicatorConnections["绔彛"].ToString();
             }
+            else if (communicator is SiemensLBS7)
+            {
+                btnSend.Enabled = communicator.bConnected;
+                btnRuleSend.Enabled = communicator.bConnected;
+
+                cmbIP.Visible = false;
+                txtIP.Visible = true;
+
+                lblIP.Text = "IP";
+                lblIP.Text = "妲�";
+
+                txtIP.Text = communicator.CommunicatorConnections["鍦板潃"].ToString();
+                txtPort.Text = communicator.CommunicatorConnections["妲�"].ToString();
+            }
             else
             {
                 btnSend.Enabled = communicator.bConnected;
diff --git a/LB_VisionProcesses/Communicators/MES/LBMES.cs b/LB_VisionProcesses/Communicators/MES/LBMES.cs
index 87d0086..597c605 100644
--- a/LB_VisionProcesses/Communicators/MES/LBMES.cs
+++ b/LB_VisionProcesses/Communicators/MES/LBMES.cs
@@ -6,7 +6,21 @@
 
 namespace LB_VisionProcesses.Communicators.MES
 {
-    internal class LBMES
+    internal class LBMES : BaseCommunicator
     {
+        public override bool Connect()
+        {
+            throw new NotImplementedException();
+        }
+
+        public override bool Disconnect()
+        {
+            throw new NotImplementedException();
+        }
+
+        public override bool SendMessage(string message)
+        {
+            throw new NotImplementedException();
+        }
     }
 }
diff --git a/LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs b/LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs
index f9fac67..b82d523 100644
--- a/LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs
+++ b/LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs
@@ -1,4 +1,6 @@
-锘縰sing System;
+锘縰sing LB_SmartVisionCommon;
+using S7.Net;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -6,7 +8,82 @@
 
 namespace LB_VisionProcesses.Communicators.SiemensS7
 {
-    internal class SiemensLBS7
+    public class SiemensLBS7 : BaseCommunicator
     {
+        private Plc plc;
+        public string variable = string.Empty;
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="name"></param>
+        public SiemensLBS7(string name = "瑗块棬瀛怱7")
+        {
+            CommunicatorConnections.Add("鍦板潃", "127.0.0.1");
+            CommunicatorConnections.Add("绔彛", "1");
+            CommunicatorConnections.Add("鍨嬪彿", S7.Net.CpuType.S71500);
+            CommunicatorBrand = CommunicatorBrand.SiemensS7;
+            CommunicatorName = name;
+        }
+        public override bool Connect()
+        {
+            try
+            {
+                string IP = CommunicatorConnections["鍦板潃"].ToString();
+                short slot;
+                short.TryParse(CommunicatorConnections["绔彛"].ToString(), out slot);
+                S7.Net.CpuType cpuType = (CpuType)CommunicatorConnections["鍨嬪彿"];
+                plc = new Plc(cpuType, IP, 0, slot);
+                plc.Open();
+                return true;
+
+            }
+            catch
+            {
+                return false;
+            }
+        }
+
+        public override bool Disconnect()
+        {
+            try
+            {
+                plc?.Close();
+                return true;
+            }
+            catch
+            {
+                return false;
+            }
+        }
+
+        public override bool SendMessage(string message)
+        {
+            try
+            {
+                plc.Write(variable, message);
+                return true;
+            }
+            catch
+            {
+                return false;
+            }
+        }
+
+        public override void Dispose()
+        {
+            try
+            {
+                AsyncLogHelper.Info($"Device:[{CommunicatorName}],Dispose()");
+
+                plc = null;
+
+                // Suppress finalization.
+                GC.SuppressFinalize(this);
+            }
+            catch (Exception ex)
+            {
+                AsyncLogHelper.Error($"Device:[{CommunicatorName}],Dispose(),Error" + ex);
+            }
+        }
     }
 }

--
Gitblit v1.9.3