Browse Source

中控停车流程(包括注册用户)已测试完成,取车待PLC空闲时继续测试

yc_t 6 years ago
parent
commit
fecb2d3531
76 changed files with 4161 additions and 676 deletions
  1. BIN
      PLCLinker/.vs/PLCLinker/v15/.suo
  2. BIN
      PLCLinker/.vs/PLCLinker/v15/Server/sqlite3/storage.ide
  3. 406 0
      PLCLinker/PLCConnector/Form1.Designer.cs
  4. 358 0
      PLCLinker/PLCConnector/Form1.cs
  5. 0 0
      PLCLinker/PLCConnector/Form1.resx
  6. BIN
      PLCLinker/PLCConnector/PLC/PLCS7.dll
  7. 345 0
      PLCLinker/PLCConnector/PLC/PLCS7.xml
  8. BIN
      PLCLinker/PLCConnector/PLC/S7.Net.dll
  9. 13 4
      PLCLinker/ParkController/ParkController.csproj
  10. 1 1
      PLCLinker/ParkController/Program.cs
  11. 3 3
      PLCLinker/ParkController/Properties/AssemblyInfo.cs
  12. 27 35
      PLCLinker/ParkController/Properties/Resources.Designer.cs
  13. 0 0
      PLCLinker/PLCConnector/Properties/Resources.resx
  14. 13 17
      PLCLinker/ParkController/Properties/Settings.Designer.cs
  15. 0 0
      PLCLinker/PLCConnector/Properties/Settings.settings
  16. 6 0
      PLCLinker/PLCLinker.sln
  17. 2 1
      PLCLinker/PLCLinker/PLCLinker.csproj
  18. 52 51
      PLCLinker/PLCLinker/Program.cs
  19. BIN
      PLCLinker/PLCLinker/bin/Release/PLCLinker.exe
  20. BIN
      PLCLinker/PLCLinker/bin/Release/PLCLinker.pdb
  21. BIN
      PLCLinker/PLCLinker/bin/Release/PLCS7.dll
  22. 1 0
      PLCLinker/PLCLinker/obj/Release/PLCLinker.csproj.FileListAbsolute.txt
  23. BIN
      PLCLinker/PLCLinker/obj/Release/PLCLinker.csprojResolveAssemblyReference.cache
  24. BIN
      PLCLinker/PLCLinker/obj/Release/PLCLinker.exe
  25. BIN
      PLCLinker/PLCLinker/obj/Release/PLCLinker.pdb
  26. 70 12
      PLCLinker/PLCS7/PLCS7.cs
  27. 1 0
      PLCLinker/PLCS7/PLCS7.csproj
  28. BIN
      PLCLinker/PLCS7/bin/Release/PLCS7.dll
  29. BIN
      PLCLinker/PLCS7/bin/Release/PLCS7.pdb
  30. 55 37
      PLCLinker/PLCS7/entity.cs
  31. 1 0
      PLCLinker/PLCS7/obj/Release/PLCS7.csproj.FileListAbsolute.txt
  32. BIN
      PLCLinker/PLCS7/obj/Release/PLCS7.dll
  33. BIN
      PLCLinker/PLCS7/obj/Release/PLCS7.pdb
  34. 0 47
      PLCLinker/ParkController/Form1.Designer.cs
  35. 0 20
      PLCLinker/ParkController/Form1.cs
  36. 6 4
      PLCLinker/centralController/App.config
  37. 0 81
      PLCLinker/centralController/Form1.cs
  38. 422 155
      PLCLinker/centralController/Form1.Designer.cs
  39. 256 0
      PLCLinker/centralController/FormCentralController.cs
  40. 24 3
      PLCLinker/centralController/Form1.resx
  41. 194 0
      PLCLinker/centralController/LOG/LogManager.cs
  42. 25 0
      PLCLinker/centralController/LOG/LogTest.cs
  43. 87 0
      PLCLinker/centralController/LOG/log.cs
  44. 2 0
      PLCLinker/centralController/Monitor/IMonitor.cs
  45. 177 5
      PLCLinker/centralController/Monitor/Monitor.cs
  46. 41 28
      PLCLinker/centralController/Monitor/SystemInitializer.cs
  47. 13 3
      PLCLinker/centralController/NumMachine/NumMachine.cs
  48. 0 4
      PLCLinker/centralController/Terminal/ITerminalDisplay.cs
  49. 486 152
      PLCLinker/centralController/Terminal/Terminal.cs
  50. BIN
      PLCLinker/centralController/bin/Release/centralController.exe
  51. 6 4
      PLCLinker/centralController/bin/Release/centralController.exe.config
  52. BIN
      PLCLinker/centralController/bin/Release/centralController.pdb
  53. 22 7
      PLCLinker/centralController/centralController.csproj
  54. 242 0
      PLCLinker/centralController/language/Language.cs
  55. 81 0
      PLCLinker/centralController/model/MainModel.cs
  56. 30 0
      PLCLinker/centralController/model/SysConst.cs
  57. BIN
      PLCLinker/centralController/obj/Release/DesignTimeResolveAssemblyReferences.cache
  58. BIN
      PLCLinker/centralController/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
  59. 1 1
      PLCLinker/centralController/obj/Release/centralController.csproj.CoreCompileInputs.cache
  60. 2 1
      PLCLinker/centralController/obj/Release/centralController.csproj.FileListAbsolute.txt
  61. BIN
      PLCLinker/centralController/obj/Release/centralController.csproj.GenerateResource.Cache
  62. BIN
      PLCLinker/centralController/obj/Release/centralController.csprojResolveAssemblyReference.cache
  63. BIN
      PLCLinker/centralController/obj/Release/centralController.exe
  64. BIN
      PLCLinker/centralController/obj/Release/centralController.pdb
  65. BIN
      PLCLinker/centralController/sdk/Microsoft.Office.Interop.Excel.dll
  66. BIN
      PLCLinker/centralController/sdk/PLC/PLCS7.dll
  67. 345 0
      PLCLinker/centralController/sdk/PLC/PLCS7.xml
  68. BIN
      PLCLinker/centralController/sdk/mysql/db.dll
  69. BIN
      PLCLinker/socketTest/bin/Release/socketTest.exe
  70. BIN
      PLCLinker/socketTest/bin/Release/socketTest.pdb
  71. BIN
      PLCLinker/socketTest/obj/Release/socketTest.exe
  72. BIN
      PLCLinker/socketTest/obj/Release/socketTest.pdb
  73. BIN
      resources/Microsoft.Office.Interop.Excel.dll
  74. BIN
      resources/PLCS7.dll
  75. 345 0
      resources/PLCS7.xml
  76. BIN
      resources/db.dll

BIN
PLCLinker/.vs/PLCLinker/v15/.suo


BIN
PLCLinker/.vs/PLCLinker/v15/Server/sqlite3/storage.ide


+ 406 - 0
PLCLinker/PLCConnector/Form1.Designer.cs

@@ -0,0 +1,406 @@
+namespace PLCConnector
+{
+    partial class Form1
+    {
+        /// <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 Windows 窗体设计器生成的代码
+
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.textBox2 = new System.Windows.Forms.TextBox();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.textBox4 = new System.Windows.Forms.TextBox();
+            this.button1 = new System.Windows.Forms.Button();
+            this.label3 = new System.Windows.Forms.Label();
+            this.textBox3 = new System.Windows.Forms.TextBox();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.textBox5 = new System.Windows.Forms.TextBox();
+            this.button2 = new System.Windows.Forms.Button();
+            this.textBox1 = new System.Windows.Forms.TextBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.textBox6 = new System.Windows.Forms.TextBox();
+            this.button3 = new System.Windows.Forms.Button();
+            this.textBox7 = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.groupBox4 = new System.Windows.Forms.GroupBox();
+            this.textBox8 = new System.Windows.Forms.TextBox();
+            this.button4 = new System.Windows.Forms.Button();
+            this.textBox9 = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.btn_clear = new System.Windows.Forms.Button();
+            this.button6 = new System.Windows.Forms.Button();
+            this.button5 = new System.Windows.Forms.Button();
+            this.button7 = new System.Windows.Forms.Button();
+            this.button8 = new System.Windows.Forms.Button();
+            this.button9 = new System.Windows.Forms.Button();
+            this.groupBox1.SuspendLayout();
+            this.groupBox2.SuspendLayout();
+            this.groupBox3.SuspendLayout();
+            this.groupBox4.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(6, 25);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(41, 12);
+            this.label1.TabIndex = 1;
+            this.label1.Text = "数据块";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(6, 88);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(41, 12);
+            this.label2.TabIndex = 3;
+            this.label2.Text = "偏移量";
+            // 
+            // textBox2
+            // 
+            this.textBox2.Location = new System.Drawing.Point(6, 103);
+            this.textBox2.Name = "textBox2";
+            this.textBox2.Size = new System.Drawing.Size(121, 21);
+            this.textBox2.TabIndex = 2;
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Controls.Add(this.textBox4);
+            this.groupBox1.Controls.Add(this.button1);
+            this.groupBox1.Controls.Add(this.label3);
+            this.groupBox1.Controls.Add(this.label2);
+            this.groupBox1.Controls.Add(this.textBox3);
+            this.groupBox1.Controls.Add(this.label1);
+            this.groupBox1.Controls.Add(this.textBox2);
+            this.groupBox1.Location = new System.Drawing.Point(12, 12);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Size = new System.Drawing.Size(155, 250);
+            this.groupBox1.TabIndex = 4;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "写入";
+            // 
+            // textBox4
+            // 
+            this.textBox4.Location = new System.Drawing.Point(8, 40);
+            this.textBox4.Name = "textBox4";
+            this.textBox4.Size = new System.Drawing.Size(121, 21);
+            this.textBox4.TabIndex = 7;
+            // 
+            // button1
+            // 
+            this.button1.Location = new System.Drawing.Point(23, 209);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 6;
+            this.button1.Text = "写入";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(6, 158);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(17, 12);
+            this.label3.TabIndex = 5;
+            this.label3.Text = "值";
+            // 
+            // textBox3
+            // 
+            this.textBox3.Location = new System.Drawing.Point(6, 173);
+            this.textBox3.Name = "textBox3";
+            this.textBox3.Size = new System.Drawing.Size(121, 21);
+            this.textBox3.TabIndex = 3;
+            // 
+            // groupBox2
+            // 
+            this.groupBox2.Controls.Add(this.textBox5);
+            this.groupBox2.Controls.Add(this.button2);
+            this.groupBox2.Controls.Add(this.textBox1);
+            this.groupBox2.Controls.Add(this.label4);
+            this.groupBox2.Location = new System.Drawing.Point(199, 12);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Size = new System.Drawing.Size(171, 418);
+            this.groupBox2.TabIndex = 5;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "读取";
+            // 
+            // textBox5
+            // 
+            this.textBox5.Location = new System.Drawing.Point(18, 40);
+            this.textBox5.Name = "textBox5";
+            this.textBox5.Size = new System.Drawing.Size(121, 21);
+            this.textBox5.TabIndex = 8;
+            // 
+            // button2
+            // 
+            this.button2.Location = new System.Drawing.Point(46, 389);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 7;
+            this.button2.Text = "读取";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.button2_Click);
+            // 
+            // textBox1
+            // 
+            this.textBox1.Location = new System.Drawing.Point(18, 78);
+            this.textBox1.Multiline = true;
+            this.textBox1.Name = "textBox1";
+            this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+            this.textBox1.Size = new System.Drawing.Size(133, 305);
+            this.textBox1.TabIndex = 8;
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(18, 25);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(41, 12);
+            this.label4.TabIndex = 6;
+            this.label4.Text = "数据块";
+            // 
+            // groupBox3
+            // 
+            this.groupBox3.Controls.Add(this.textBox6);
+            this.groupBox3.Controls.Add(this.button3);
+            this.groupBox3.Controls.Add(this.textBox7);
+            this.groupBox3.Controls.Add(this.label5);
+            this.groupBox3.Location = new System.Drawing.Point(397, 12);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.Size = new System.Drawing.Size(171, 418);
+            this.groupBox3.TabIndex = 6;
+            this.groupBox3.TabStop = false;
+            this.groupBox3.Text = "读取";
+            // 
+            // textBox6
+            // 
+            this.textBox6.Location = new System.Drawing.Point(18, 40);
+            this.textBox6.Name = "textBox6";
+            this.textBox6.Size = new System.Drawing.Size(121, 21);
+            this.textBox6.TabIndex = 8;
+            // 
+            // button3
+            // 
+            this.button3.Location = new System.Drawing.Point(46, 389);
+            this.button3.Name = "button3";
+            this.button3.Size = new System.Drawing.Size(75, 23);
+            this.button3.TabIndex = 7;
+            this.button3.Text = "读取";
+            this.button3.UseVisualStyleBackColor = true;
+            this.button3.Click += new System.EventHandler(this.button3_Click);
+            // 
+            // textBox7
+            // 
+            this.textBox7.Location = new System.Drawing.Point(18, 78);
+            this.textBox7.Multiline = true;
+            this.textBox7.Name = "textBox7";
+            this.textBox7.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+            this.textBox7.Size = new System.Drawing.Size(133, 305);
+            this.textBox7.TabIndex = 8;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(18, 25);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(41, 12);
+            this.label5.TabIndex = 6;
+            this.label5.Text = "数据块";
+            // 
+            // groupBox4
+            // 
+            this.groupBox4.Controls.Add(this.textBox8);
+            this.groupBox4.Controls.Add(this.button4);
+            this.groupBox4.Controls.Add(this.textBox9);
+            this.groupBox4.Controls.Add(this.label6);
+            this.groupBox4.Location = new System.Drawing.Point(587, 12);
+            this.groupBox4.Name = "groupBox4";
+            this.groupBox4.Size = new System.Drawing.Size(171, 418);
+            this.groupBox4.TabIndex = 9;
+            this.groupBox4.TabStop = false;
+            this.groupBox4.Text = "读取";
+            // 
+            // textBox8
+            // 
+            this.textBox8.Location = new System.Drawing.Point(18, 40);
+            this.textBox8.Name = "textBox8";
+            this.textBox8.Size = new System.Drawing.Size(121, 21);
+            this.textBox8.TabIndex = 8;
+            // 
+            // button4
+            // 
+            this.button4.Location = new System.Drawing.Point(46, 389);
+            this.button4.Name = "button4";
+            this.button4.Size = new System.Drawing.Size(75, 23);
+            this.button4.TabIndex = 7;
+            this.button4.Text = "读取";
+            this.button4.UseVisualStyleBackColor = true;
+            this.button4.Click += new System.EventHandler(this.button4_Click);
+            // 
+            // textBox9
+            // 
+            this.textBox9.Location = new System.Drawing.Point(18, 78);
+            this.textBox9.Multiline = true;
+            this.textBox9.Name = "textBox9";
+            this.textBox9.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+            this.textBox9.Size = new System.Drawing.Size(133, 305);
+            this.textBox9.TabIndex = 8;
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(18, 25);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(41, 12);
+            this.label6.TabIndex = 6;
+            this.label6.Text = "数据块";
+            // 
+            // btn_clear
+            // 
+            this.btn_clear.Location = new System.Drawing.Point(35, 297);
+            this.btn_clear.Name = "btn_clear";
+            this.btn_clear.Size = new System.Drawing.Size(75, 23);
+            this.btn_clear.TabIndex = 10;
+            this.btn_clear.Text = "终端1清零";
+            this.btn_clear.UseVisualStyleBackColor = true;
+            this.btn_clear.Click += new System.EventHandler(this.btn_clear_Click);
+            // 
+            // button6
+            // 
+            this.button6.Location = new System.Drawing.Point(35, 268);
+            this.button6.Name = "button6";
+            this.button6.Size = new System.Drawing.Size(75, 23);
+            this.button6.TabIndex = 11;
+            this.button6.Text = "自动刷新";
+            this.button6.UseVisualStyleBackColor = true;
+            this.button6.Click += new System.EventHandler(this.btn_refresh_Click);
+            // 
+            // button5
+            // 
+            this.button5.Location = new System.Drawing.Point(35, 326);
+            this.button5.Name = "button5";
+            this.button5.Size = new System.Drawing.Size(93, 23);
+            this.button5.TabIndex = 12;
+            this.button5.Text = "凭证写入车位";
+            this.button5.UseVisualStyleBackColor = true;
+            this.button5.Click += new System.EventHandler(this.button5_Click);
+            // 
+            // button7
+            // 
+            this.button7.Location = new System.Drawing.Point(35, 353);
+            this.button7.Name = "button7";
+            this.button7.Size = new System.Drawing.Size(75, 23);
+            this.button7.TabIndex = 13;
+            this.button7.Text = "启动地感";
+            this.button7.UseVisualStyleBackColor = true;
+            this.button7.Click += new System.EventHandler(this.button7_Click);
+            // 
+            // button8
+            // 
+            this.button8.Location = new System.Drawing.Point(35, 382);
+            this.button8.Name = "button8";
+            this.button8.Size = new System.Drawing.Size(75, 23);
+            this.button8.TabIndex = 14;
+            this.button8.Text = "启动号牌机";
+            this.button8.UseVisualStyleBackColor = true;
+            this.button8.Click += new System.EventHandler(this.button8_Click);
+            // 
+            // button9
+            // 
+            this.button9.Location = new System.Drawing.Point(35, 411);
+            this.button9.Name = "button9";
+            this.button9.Size = new System.Drawing.Size(75, 23);
+            this.button9.TabIndex = 15;
+            this.button9.Text = "停车完成";
+            this.button9.UseVisualStyleBackColor = true;
+            this.button9.Click += new System.EventHandler(this.button9_Click);
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(791, 474);
+            this.Controls.Add(this.button9);
+            this.Controls.Add(this.button8);
+            this.Controls.Add(this.button7);
+            this.Controls.Add(this.button5);
+            this.Controls.Add(this.button6);
+            this.Controls.Add(this.btn_clear);
+            this.Controls.Add(this.groupBox4);
+            this.Controls.Add(this.groupBox3);
+            this.Controls.Add(this.groupBox2);
+            this.Controls.Add(this.groupBox1);
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.groupBox1.ResumeLayout(false);
+            this.groupBox1.PerformLayout();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox2.PerformLayout();
+            this.groupBox3.ResumeLayout(false);
+            this.groupBox3.PerformLayout();
+            this.groupBox4.ResumeLayout(false);
+            this.groupBox4.PerformLayout();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox textBox2;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox textBox3;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private System.Windows.Forms.TextBox textBox1;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.TextBox textBox4;
+        private System.Windows.Forms.TextBox textBox5;
+        private System.Windows.Forms.GroupBox groupBox3;
+        private System.Windows.Forms.TextBox textBox6;
+        private System.Windows.Forms.Button button3;
+        private System.Windows.Forms.TextBox textBox7;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.GroupBox groupBox4;
+        private System.Windows.Forms.TextBox textBox8;
+        private System.Windows.Forms.Button button4;
+        private System.Windows.Forms.TextBox textBox9;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.Button btn_clear;
+        private System.Windows.Forms.Button button6;
+        private System.Windows.Forms.Button button5;
+        private System.Windows.Forms.Button button7;
+        private System.Windows.Forms.Button button8;
+        private System.Windows.Forms.Button button9;
+    }
+}
+

+ 358 - 0
PLCLinker/PLCConnector/Form1.cs

@@ -0,0 +1,358 @@
+using PLCS7;
+using S7.Net;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace PLCConnector
+{
+    public partial class Form1 : Form
+    {
+        PLCLinker pl;
+        public Form1()
+        {
+            InitializeComponent();
+            pl = new PLCLinker(CpuType.S71500, "192.168.0.1", 0, 1, 18, 41, 20, 6, 200);
+        }
+
+        public static void parkingSpaceDBTest(AbstractPLCLinker pl, Random rnd)
+        {
+            if (!pl.isConnected) { pl.PLCConnect(); }
+            else
+            {
+                //读车位表信息
+                List<object> psList = pl.ReadFromPLC(PLCDataType.parkingSpace, 1);
+                psList.AddRange(pl.ReadFromPLC(PLCDataType.parkingSpace, 2));
+                foreach (var ps in psList)
+                {
+                    Console.WriteLine(((ParkingSpaceStru)ps).ToString());
+                }
+                //写入车位状态信息
+                ParkingSpaceStru pss = new ParkingSpaceStru
+                {
+                    parkingSpace = (short)rnd.Next(1, 3),
+                    spaceStatus = (short)rnd.Next(0, 3)
+                };
+                pl.WriteToPLC(pss, PLCDataType.central);
+                Console.WriteLine("写入状态值");
+            }
+        }
+
+        public static void terminalDBTest(AbstractPLCLinker pl, Random rnd)
+        {
+            if (!pl.isConnected) { pl.PLCConnect(); }
+            else
+            {
+                //读终端块数据
+                List<object> tList = pl.ReadFromPLC(PLCDataType.terminal, 1);
+                foreach (var term in tList)
+                {
+                    Console.WriteLine(((TerminalStru)term).ToString());
+                }
+                //模拟中控写数据
+                TerminalStru tsCentral = new TerminalStru
+                {
+                    terminalID = 1,
+                    paymentStatus = (short)rnd.Next(100, 999),
+                    licVerification = -1,
+                    parkingFee = (short)rnd.Next(100, 999),
+                    userType = (short)rnd.Next(100, 999)
+                };
+                //模拟终端写数据
+                TerminalStru tsTerminal = new TerminalStru
+                {
+                    terminalID = 1,
+                    terminalStatus = (short)rnd.Next(100, 999),
+                    btnStatus = (short)rnd.Next(100, 999),
+                    licenseCodeA = (short)rnd.Next(100, 999),
+                    licenseCodeB = -1,
+                    licenseCodeC = (short)rnd.Next(100, 999),
+                    receiptNum = (short)rnd.Next(100, 999)
+                };
+                //pl.WriteToPLC(tsCentral, PLCDataType.central);
+                pl.WriteToPLC(tsTerminal, PLCDataType.terminal);
+            }
+        }
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            PLCDataType type = PLCDataType.parkingSpace;
+            int offset = 0;
+            int value = 0;
+            try
+            {
+                offset = Int32.Parse(textBox2.Text);
+                value = Int32.Parse(textBox3.Text);
+            }
+            catch { MessageBox.Show("异常"); return; }
+            switch (textBox4.Text)
+            {
+                case "中控":
+                    type = PLCDataType.central;
+                    break;
+                case "终端1":
+                    type = PLCDataType.terminal;
+                    break;
+                case "终端2":
+                    type = PLCDataType.terminal;
+                    offset += 42;
+                    break;
+                case "终端3":
+                    type = PLCDataType.terminal;
+                    offset += 42*2;
+                    break;
+                case "车位1":
+                    type = PLCDataType.parkingSpace;
+                    break;
+            }
+            if (value < 32768)
+            {
+                pl.WriteAccordingToOffset(type, offset, (short)value);
+            }
+            else
+            {
+                pl.WriteAccordingToOffset(type, offset, value);
+            }
+        }
+
+        private void button2_Click(object sender, EventArgs e)
+        {
+            PLCDataType type = PLCDataType.parkingSpace;
+            int id = -1;
+            switch ((string)textBox5.Text)
+            {
+                case "中控":
+                    type = PLCDataType.central;id = 0;
+                    break;
+                case "终端1":
+                    type = PLCDataType.terminal; id = 1;
+                    break;
+                case "终端2":
+                    type = PLCDataType.terminal; id = 2;
+                    break;
+                case "终端3":
+                    type = PLCDataType.terminal; id = 3;
+                    break;
+                case "车位1":
+                    type = PLCDataType.parkingSpace; id = 4;
+                    break;
+            }
+            string result = "";
+            try
+            {
+                if (id == 4)
+                {
+                    List<object> list = pl.ReadFromPLC(type, 1);
+                    result = ((ParkingSpaceStru)list[0]).ToString();
+                }
+                else if (id > 0)
+                {
+                    List<object> list = pl.ReadFromPLC(type, id);
+                    result = ((TerminalStru)list[0]).ToString();
+                }
+                else if (id == 0)
+                {
+                    List<object> list = pl.ReadFromPLC(type, id);
+                    result = ((MainBlockStru)list[0]).ToString();
+                }
+            }
+            catch { MessageBox.Show("异常"); return; }
+            textBox1.Text = result.Replace(",","\r\n");
+        }
+
+        private void button3_Click(object sender, EventArgs e)
+        {
+            PLCDataType type = PLCDataType.parkingSpace;
+            int id = -1;
+            switch ((string)textBox6.Text)
+            {
+                case "中控":
+                    type = PLCDataType.central; id = 0;
+                    break;
+                case "终端1":
+                    type = PLCDataType.terminal; id = 1;
+                    break;
+                case "终端2":
+                    type = PLCDataType.terminal; id = 2;
+                    break;
+                case "终端3":
+                    type = PLCDataType.terminal; id = 3;
+                    break;
+                case "车位1":
+                    type = PLCDataType.parkingSpace; id = 4;
+                    break;
+            }
+            string result = "";
+            try
+            {
+                if (id == 4)
+                {
+                    List<object> list = pl.ReadFromPLC(type, 1);
+                    result = ((ParkingSpaceStru)list[0]).ToString();
+                }
+                else if (id > 0)
+                {
+                    List<object> list = pl.ReadFromPLC(type, id);
+                    result = ((TerminalStru)list[0]).ToString();
+                }
+                else if (id == 0)
+                {
+                    List<object> list = pl.ReadFromPLC(type, id);
+                    result = ((MainBlockStru)list[0]).ToString();
+                }
+            }
+            catch { MessageBox.Show("异常"); return; }
+            textBox7.Text = result.Replace(",", "\r\n");
+        }
+
+        private void button4_Click(object sender, EventArgs e)
+        {
+            PLCDataType type = PLCDataType.parkingSpace;
+            int id = -1;
+            switch ((string)textBox8.Text)
+            {
+                case "中控":
+                    type = PLCDataType.central; id = 0;
+                    break;
+                case "终端1":
+                    type = PLCDataType.terminal; id = 1;
+                    break;
+                case "终端2":
+                    type = PLCDataType.terminal; id = 2;
+                    break;
+                case "终端3":
+                    type = PLCDataType.terminal; id = 3;
+                    break;
+                case "车位1":
+                    type = PLCDataType.parkingSpace; id = 4;
+                    break;
+            }
+            string result = "";
+            try
+            {
+                if (id == 4)
+                {
+                    List<object> list = pl.ReadFromPLC(type, 1);
+                    result = ((ParkingSpaceStru)list[0]).ToString();
+                }
+                else if (id > 0)
+                {
+                    List<object> list = pl.ReadFromPLC(type, id);
+                    result = ((TerminalStru)list[0]).ToString();
+                }
+                else if (id == 0)
+                {
+                    List<object> list = pl.ReadFromPLC(type, id);
+                    result = ((MainBlockStru)list[0]).ToString();
+                }
+            }
+            catch { MessageBox.Show("异常"); return; }
+            textBox9.Text = result.Replace(",", "\r\n");
+        }
+
+        private void btn_refresh_Click(object sender, EventArgs e)
+        {
+            Timer timer1 = new Timer();
+            timer1.Interval = 1000;
+            timer1.Tick += new EventHandler(button2_Click);
+            timer1.Start();
+            Timer timer2 = new Timer();
+            timer2.Interval = 1000;
+            timer2.Tick += new EventHandler(button3_Click);
+            timer2.Start();
+            Timer timer3 = new Timer();
+            timer3.Interval = 1000;
+            timer3.Tick += new EventHandler(button4_Click);
+            timer3.Start();
+        }
+
+        private void btn_clear_Click(object sender, EventArgs e)
+        {
+            TerminalStru tsFromCentral = new TerminalStru
+            {
+                terminalID = 1,
+                parkingFee = (short)32767,
+                paymentStatus = (short)0,
+                licVerification =(short)0,
+                userType = (short)0,
+            };
+            TerminalStru tsFromTerminal = new TerminalStru
+            {
+                terminalID = 1,
+                btnStatus = -1,
+                cmd = (short)0,
+                receiptNum = (short)0,
+            };
+            pl.WriteToPLC(tsFromCentral, PLCDataType.central);
+            pl.WriteToPLC(tsFromTerminal, PLCDataType.terminal);
+        }
+        /// <summary>
+        /// 凭证号写入车位
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void button5_Click(object sender, EventArgs e)
+        {
+            List<object> list = pl.ReadFromPLC(PLCDataType.terminal, 1);
+            int receipt = ((TerminalStru)list[0]).receiptNum;
+            pl.WriteAccordingToOffset(PLCDataType.parkingSpace, 14, receipt);
+        }
+        /// <summary>
+        /// 启动地感
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void button7_Click(object sender, EventArgs e)
+        {
+            List<object> list = pl.ReadFromPLC(PLCDataType.terminal, 1);
+            short ground = ((TerminalStru)list[0]).groundStatus;
+            if (ground == (short)1)
+            {
+                pl.WriteAccordingToOffset(PLCDataType.terminal, 36, (short)0);
+            }
+            else
+            {
+                pl.WriteAccordingToOffset(PLCDataType.terminal, 36, (short)1);
+            }
+        }
+        /// <summary>
+        /// 启动号牌机
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void button8_Click(object sender, EventArgs e)
+        {
+            pl.WriteAccordingToOffset(PLCDataType.central, 2, (short)1);
+        }
+        /// <summary>
+        /// 清空中控db
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void button9_Click(object sender, EventArgs e)
+        {
+            List<object> list = pl.ReadFromPLC(PLCDataType.central, 0);
+            short complete = ((MainBlockStru)list[0]).processCompleted;
+            if (complete == (short)0)
+            {
+                pl.WriteAccordingToOffset(PLCDataType.central, 2, (short)0);
+                pl.WriteAccordingToOffset(PLCDataType.central, 16, (short)1);
+                pl.WriteAccordingToOffset(PLCDataType.central, 52, (short)0);
+                
+            }
+            else
+            {
+                pl.WriteAccordingToOffset(PLCDataType.central, 2, (short)0);
+                pl.WriteAccordingToOffset(PLCDataType.central, 16, (short)0);
+                pl.WriteAccordingToOffset(PLCDataType.central, 52, (short)0);
+                
+            }
+        }
+    }
+}

PLCLinker/ParkController/Form1.resx → PLCLinker/PLCConnector/Form1.resx


BIN
PLCLinker/PLCConnector/PLC/PLCS7.dll


+ 345 - 0
PLCLinker/PLCConnector/PLC/PLCS7.xml

@@ -0,0 +1,345 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>PLCS7</name>
+    </assembly>
+    <members>
+        <member name="F:PLCS7.AbstractPLCLinker.isConnected">
+            <summary>
+            PLC 连接状态flag
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.cpu">
+            <summary>
+            plc中cpu类型
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.ip">
+            <summary>
+            PLC的IP地址
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.rack">
+            <summary>
+            PLC的端口号
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.slot">
+            <summary>
+            工作站号
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.terminalDB">
+            <summary>
+            终端DB块iD
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.centralDB">
+            <summary>
+            中心DB块iD
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.parkingSpaceDB">
+            <summary>
+            车位DB块ID
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.terminalCount">
+            <summary>
+            终端个数
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.parkingSpaceCount">
+            <summary>
+            停车位个数
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.plc">
+            <summary>
+            PLC S7连接对象
+            </summary>
+        </member>
+        <member name="M:PLCS7.PLCLinker.#ctor(S7.Net.CpuType,System.String,System.Int16,System.Int16,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
+            <summary>
+            PLCLinker构造函数
+            </summary>
+            <param name="cpu"></param>
+            <param name="ip"></param>
+            <param name="rack"></param>
+            <param name="slot"></param>
+            <param name="terminalDB"></param>
+            <param name="centralDB"></param>
+            <param name="parkingSpaceDB"></param>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadMultipleBytes(System.Int32,System.Int32,System.Int32)">
+            <summary>
+            读取指定数据块中多个字节
+            </summary>
+            <param name="db"></param>
+            <param name="length"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteMultipleBytes(System.Int32,System.Collections.Generic.List{System.Byte},System.Int32)">
+            <summary>
+            写入指定数据块中多个字节
+            </summary>
+            <param name="db"></param>
+            <param name="bytesToWrite"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadStruFromPLC(System.Object,System.Int32,System.Int32)">
+            <summary>
+            从PLC中读取结构体
+            </summary>
+            <param name="obj"></param>
+            <param name="db"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteStruToPLC(System.Object,System.Int32,System.Int32)">
+            <summary>
+            向PLC中写入结构体
+            </summary>
+            <param name="obj"></param>
+            <param name="db"></param>
+            <param name="startAddr"></param>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadFromPLC(PLCS7.PLCDataType,System.Int32)">
+            <summary>
+            读取PLC数据块
+            </summary>
+            <param name="whichToRead"></param>
+            <param name="index"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteToPLC(System.Object,PLCS7.PLCDataType)">
+            <summary>
+            写入PLC,其中可写入但不需写入字段请赋值为-1
+            </summary>
+            <param name="abstractPLCMsg"></param>
+            <param name="whoami"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteAccordingToOffset(PLCS7.PLCDataType,System.Int32,System.Object)">
+            <summary>
+            根据地址偏移量写入PLC
+            </summary>
+            <param name="whichToWrite"></param>
+            <param name="offset"></param>
+            <param name="value"></param>
+            <returns></returns>
+        </member>
+        <member name="T:PLCS7.TerminalStru">
+            <summary>
+            终端数据块结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.terminalID">
+            <summary>
+            终端ID号
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.terminalStatus">
+            <summary>
+            终端状态,0暂停,1停车,2取车
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.btnStatus">
+            <summary>
+            按钮状态,0缺省,1非注册,2注册
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.cmd">
+            <summary>
+            停取指令,0缺省,1停车,2取车
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeA">
+            <summary>
+            注册用户UserID
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeB">
+            <summary>
+            注册用户号牌地域标记
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeC">
+            <summary>
+            注册用户号牌后半部分A
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeD">
+            <summary>
+            注册用户号牌后半部分B
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.receiptNum">
+            <summary>
+            凭证号
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.paymentStatus">
+            <summary>
+            支付状态,0-1失败-2成功-3管理员放行
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licVerification">
+            <summary>
+            1-成功,2-号牌比对不成功
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.parkingFee">
+            <summary>
+            停车费用,0-99999
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.userType">
+            <summary>
+            用户类型,0-1普通-2月卡-3季卡-4年卡VIP
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.groundStatus">
+            <summary>
+            地感信号
+            </summary>
+        </member>
+        <member name="T:PLCS7.MainBlockStru">
+            <summary>
+            中控与PLC交互使用数据块的结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.terminalID">
+            <summary>
+            终端ID号
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.numMachineLaunch">
+            <summary>
+            号牌机启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.sweepLaserLaunch">
+            <summary>
+            摆扫启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.wheelbaseLaserLaunch">
+            <summary>
+            轮距启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.stop">
+            <summary>
+            急停
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.ready">
+            <summary>
+            就绪
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.parkingRunning">
+            <summary>
+            停车运行
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.fetchingRunning">
+            <summary>
+            取车运行
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.processCompleted">
+            <summary>
+            流程完成
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.processStopped">
+            <summary>
+            流程中断
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.sweepLaserStatus">
+            <summary>
+            摆扫激光状态
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.wheelbaseLaserStatus">
+            <summary>
+            轮距雷达状态
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.licenseReceived">
+            <summary>
+            号牌机获取
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.localAutoMode">
+            <summary>
+            本地自动模式
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.remoteMode">
+            <summary>
+            云端模式
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.localManualMode">
+            <summary>
+            本地手动模式
+            </summary>
+        </member>
+        <member name="T:PLCS7.ParkingSpaceStru">
+            <summary>
+            车位单元结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.parkingSpace">
+            <summary>
+            车位编号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.length">
+            <summary>
+            长
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.width">
+            <summary>
+            宽
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.height">
+            <summary>
+            高
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.floorNo">
+            <summary>
+            楼层编号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.receiptNum">
+            <summary>
+            凭证号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.spaceStatus">
+            <summary>
+            车位状态,0空位-1占用-2保留-3故障
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.frontWheelbase">
+            <summary>
+            前轮距
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.rearWheelbase">
+            <summary>
+            后轮距
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
PLCLinker/PLCConnector/PLC/S7.Net.dll


+ 13 - 4
PLCLinker/ParkController/ParkController.csproj

@@ -4,13 +4,14 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{78435D52-0B74-4BE5-9E3D-F29B61CC7B04}</ProjectGuid>
+    <ProjectGuid>{12254714-E07B-4514-BD5B-EDD0A2C71D62}</ProjectGuid>
     <OutputType>WinExe</OutputType>
-    <RootNamespace>ParkController</RootNamespace>
-    <AssemblyName>ParkController</AssemblyName>
-    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <RootNamespace>PLCConnector</RootNamespace>
+    <AssemblyName>PLCConnector</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <TargetFrameworkProfile />
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -32,6 +33,13 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="DevComponents.DotNetBar2, Version=12.5.0.2, Culture=neutral, PublicKeyToken=c39c3242a43eee2b" />
+    <Reference Include="PLCS7">
+      <HintPath>PLC\PLCS7.dll</HintPath>
+    </Reference>
+    <Reference Include="S7.Net">
+      <HintPath>PLC\S7.Net.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
     <Reference Include="System.Xml.Linq" />
@@ -64,6 +72,7 @@
     <Compile Include="Properties\Resources.Designer.cs">
       <AutoGen>True</AutoGen>
       <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
     </Compile>
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>

+ 1 - 1
PLCLinker/ParkController/Program.cs

@@ -4,7 +4,7 @@ using System.Linq;
 using System.Threading.Tasks;
 using System.Windows.Forms;
 
-namespace ParkController
+namespace PLCConnector
 {
     static class Program
     {

+ 3 - 3
PLCLinker/ParkController/Properties/AssemblyInfo.cs

@@ -5,11 +5,11 @@ using System.Runtime.InteropServices;
 // 有关程序集的一般信息由以下
 // 控制。更改这些特性值可修改
 // 与程序集关联的信息。
-[assembly: AssemblyTitle("ParkController")]
+[assembly: AssemblyTitle("PLCConnector")]
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("Microsoft")]
-[assembly: AssemblyProduct("ParkController")]
+[assembly: AssemblyProduct("PLCConnector")]
 [assembly: AssemblyCopyright("Copyright © Microsoft 2018")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
 [assembly: ComVisible(false)]
 
 // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
-[assembly: Guid("78435d52-0b74-4be5-9e3d-f29b61cc7b04")]
+[assembly: Guid("12254714-e07b-4514-bd5b-edd0a2c71d62")]
 
 // 程序集的版本信息由下列四个值组成: 
 //

+ 27 - 35
PLCLinker/ParkController/Properties/Resources.Designer.cs

@@ -1,69 +1,61 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     此代码由工具生成。
-//     运行时版本: 4.0.30319.42000
+//     运行时版本:4.0.30319.42000
 //
-//     对此文件的更改可能导致不正确的行为,如果
-//     重新生成代码,则所做更改将丢失。
+//     对此文件的更改可能导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
 // </auto-generated>
 //------------------------------------------------------------------------------
 
-namespace ParkController.Properties
-{
-
-
+namespace PLCConnector.Properties {
+    using System;
+    
+    
     /// <summary>
-    ///   强类型资源类,用于查找本地化字符串等。
+    ///   一个强类型资源类,用于查找本地化字符串等。
     /// </summary>
     // 此类是由 StronglyTypedResourceBuilder
     // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
-    // 若要添加或除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // 若要添加或除成员,请编辑 .ResX 文件,然后重新运行 ResGen
     // (以 /str 作为命令选项),或重新生成 VS 项目。
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    internal class Resources
-    {
-
+    internal class Resources {
+        
         private static global::System.Resources.ResourceManager resourceMan;
-
+        
         private static global::System.Globalization.CultureInfo resourceCulture;
-
+        
         [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal Resources()
-        {
+        internal Resources() {
         }
-
+        
         /// <summary>
-        ///   返回此类使用的缓存 ResourceManager 实例。
+        ///   返回此类使用的缓存 ResourceManager 实例。
         /// </summary>
         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Resources.ResourceManager ResourceManager
-        {
-            get
-            {
-                if ((resourceMan == null))
-                {
-                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ParkController.Properties.Resources", typeof(Resources).Assembly);
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PLCConnector.Properties.Resources", typeof(Resources).Assembly);
                     resourceMan = temp;
                 }
                 return resourceMan;
             }
         }
-
+        
         /// <summary>
-        ///   覆盖当前线程的 CurrentUICulture 属性
-        ///   使用此强类型的资源类的资源查找
+        ///   使用此强类型资源类,为所有资源查找
+        ///   重写当前线程的 CurrentUICulture 属性
         /// </summary>
         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Globalization.CultureInfo Culture
-        {
-            get
-            {
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
                 return resourceCulture;
             }
-            set
-            {
+            set {
                 resourceCulture = value;
             }
         }

PLCLinker/ParkController/Properties/Resources.resx → PLCLinker/PLCConnector/Properties/Resources.resx


+ 13 - 17
PLCLinker/ParkController/Properties/Settings.Designer.cs

@@ -1,28 +1,24 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.42000
 //
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
 // </auto-generated>
 //------------------------------------------------------------------------------
 
-namespace ParkController.Properties
-{
-
-
+namespace PLCConnector.Properties {
+    
+    
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
-    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
-    {
-
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
         private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
-        public static Settings Default
-        {
-            get
-            {
+        
+        public static Settings Default {
+            get {
                 return defaultInstance;
             }
         }

PLCLinker/ParkController/Properties/Settings.settings → PLCLinker/PLCConnector/Properties/Settings.settings


+ 6 - 0
PLCLinker/PLCLinker.sln

@@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "socketTest", "socketTest\so
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfApp1", "WpfApp1\WpfApp1.csproj", "{4B52BB18-B89A-47C0-A20C-27FF628437FE}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PLCConnector", "PLCConnector\PLCConnector.csproj", "{12254714-E07B-4514-BD5B-EDD0A2C71D62}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -39,6 +41,10 @@ Global
 		{4B52BB18-B89A-47C0-A20C-27FF628437FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{4B52BB18-B89A-47C0-A20C-27FF628437FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{4B52BB18-B89A-47C0-A20C-27FF628437FE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{12254714-E07B-4514-BD5B-EDD0A2C71D62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{12254714-E07B-4514-BD5B-EDD0A2C71D62}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{12254714-E07B-4514-BD5B-EDD0A2C71D62}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{12254714-E07B-4514-BD5B-EDD0A2C71D62}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 2 - 1
PLCLinker/PLCLinker/PLCLinker.csproj

@@ -33,7 +33,8 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="PLCS7">
+    <Reference Include="PLCS7, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
       <HintPath>..\..\resources\PLCS7.dll</HintPath>
     </Reference>
     <Reference Include="S7.Net">

+ 52 - 51
PLCLinker/PLCLinker/Program.cs

@@ -16,7 +16,7 @@ namespace PLCTest
     {
         static void Main(string[] args)
         {
-            AbstractPLCLinker pl = new PLCLinker(CpuType.S71500, "192.168.0.1", 0, 1, 18, 22, 20, 6, 200);
+            AbstractPLCLinker pl = new PLCLinker(CpuType.S71500, "192.168.0.1", 0, 1, 18, 41, 20, 1, 200);
             Random rnd = new Random();
             Task t = Task.Factory.StartNew(() =>
             {
@@ -29,7 +29,7 @@ namespace PLCTest
                         Thread.Sleep(500);
                     }
                 }
-                catch (Exception e) { Console.WriteLine("test:"+e.Message); }
+                catch (Exception e) { Console.WriteLine("test:" + e.Message); }
             });
             t.Wait();
 
@@ -55,63 +55,64 @@ namespace PLCTest
             //}
             Console.ReadLine();
         }
-    public static void parkingSpaceDBTest(AbstractPLCLinker pl, Random rnd)
-    {
-        if (!pl.isConnected) { pl.PLCConnect(); }
-        else
+        public static void parkingSpaceDBTest(AbstractPLCLinker pl, Random rnd)
         {
-            //读车位表信息
-            List<object> psList = pl.ReadFromPLC(PLCDataType.parkingSpace, 1);
-            psList.AddRange(pl.ReadFromPLC(PLCDataType.parkingSpace, 2));
-            foreach (var ps in psList)
+            if (!pl.isConnected) { pl.PLCConnect(); }
+            else
             {
-                Console.WriteLine(((ParkingSpaceStru)ps).ToString());
+                //读车位表信息
+                List<object> psList = pl.ReadFromPLC(PLCDataType.parkingSpace, 1);
+                psList.AddRange(pl.ReadFromPLC(PLCDataType.parkingSpace, 2));
+                foreach (var ps in psList)
+                {
+                    Console.WriteLine(((ParkingSpaceStru)ps).ToString());
+                }
+                //写入车位状态信息
+                ParkingSpaceStru pss = new ParkingSpaceStru
+                {
+                    parkingSpace = (short)rnd.Next(1, 3),
+                    spaceStatus = (short)rnd.Next(0, 3)
+                };
+                pl.WriteToPLC(pss, PLCDataType.central);
+                Console.WriteLine("写入状态值");
             }
-            //写入车位状态信息
-            ParkingSpaceStru pss = new ParkingSpaceStru
-            {
-                parkingSpace = (short)rnd.Next(1, 3),
-                spaceStatus = (short)rnd.Next(0, 3)
-            };
-            pl.WriteToPLC(pss, PLCDataType.central);
-            Console.WriteLine("写入状态值");
         }
-    }
 
-    public static void terminalDBTest(AbstractPLCLinker pl, Random rnd)
-    {
-        if (!pl.isConnected) { pl.PLCConnect(); }
-        else
+        public static void terminalDBTest(AbstractPLCLinker pl, Random rnd)
         {
-            //读终端块数据
-            List<object> tList = pl.ReadFromPLC(PLCDataType.terminal, 1);
-            foreach (var term in tList)
+            if (!pl.isConnected) { pl.PLCConnect(); }
+            else
             {
-                Console.WriteLine(((TerminalStru)term).ToString());
+                //读终端块数据
+                List<object> tList = pl.ReadFromPLC(PLCDataType.terminal, 1);
+                foreach (var term in tList)
+                {
+                    Console.WriteLine(((TerminalStru)term).ToString());
+                }
+                //模拟中控写数据
+                TerminalStru tsCentral = new TerminalStru
+                {
+                    terminalID = 1,
+                    paymentStatus = (short)rnd.Next(100, 999),
+                    licVerification = -1,
+                    parkingFee = (short)rnd.Next(100, 999),
+                    userType = (short)rnd.Next(100, 999)
+                };
+                //模拟终端写数据
+                TerminalStru tsTerminal = new TerminalStru
+                {
+                    terminalID = 1,
+                    terminalStatus = (short)rnd.Next(100, 999),
+                    btnStatus = (short)rnd.Next(100, 999),
+                    licenseCodeA = (short)rnd.Next(100, 999),
+                    licenseCodeB = -1,
+                    licenseCodeC = (short)rnd.Next(100, 999),
+                    receiptNum = (short)rnd.Next(100, 999)
+                };
+                Console.WriteLine(tsCentral);
+                //pl.WriteToPLC(tsCentral, PLCDataType.central);
+                pl.WriteToPLC(tsTerminal, PLCDataType.terminal);
             }
-            //模拟中控写数据
-            TerminalStru tsCentral = new TerminalStru
-            {
-                terminalID = 1,
-                paymentStatus = (short)rnd.Next(100, 999),
-                licVerification = -1,
-                parkingFee = (short)rnd.Next(100, 999),
-                userType = (short)rnd.Next(100, 999)
-            };
-            //模拟终端写数据
-            TerminalStru tsTerminal = new TerminalStru
-            {
-                terminalID = 1,
-                terminalStatus = (short)rnd.Next(100, 999),
-                btnStatus = (short)rnd.Next(100, 999),
-                licenseCodeA = (short)rnd.Next(100, 999),
-                licenseCodeB = -1,
-                licenseCodeC = (short)rnd.Next(100, 999),
-                receiptNum = (short)rnd.Next(100, 999)
-            };
-            //pl.WriteToPLC(tsCentral, PLCDataType.central);
-            pl.WriteToPLC(tsTerminal, PLCDataType.terminal);
         }
     }
 }
-}

BIN
PLCLinker/PLCLinker/bin/Release/PLCLinker.exe


BIN
PLCLinker/PLCLinker/bin/Release/PLCLinker.pdb


BIN
PLCLinker/PLCLinker/bin/Release/PLCS7.dll


+ 1 - 0
PLCLinker/PLCLinker/obj/Release/PLCLinker.csproj.FileListAbsolute.txt

@@ -7,3 +7,4 @@ E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCLinker\bin\
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCLinker\obj\Release\PLCLinker.exe
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCLinker\obj\Release\PLCLinker.pdb
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCLinker\obj\Release\PLCLinker.csprojResolveAssemblyReference.cache
+E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCLinker\bin\Release\PLCS7.xml

BIN
PLCLinker/PLCLinker/obj/Release/PLCLinker.csprojResolveAssemblyReference.cache


BIN
PLCLinker/PLCLinker/obj/Release/PLCLinker.exe


BIN
PLCLinker/PLCLinker/obj/Release/PLCLinker.pdb


+ 70 - 12
PLCLinker/PLCS7/PLCS7.cs

@@ -27,7 +27,7 @@ namespace PLCS7
     }
     public abstract class AbstractPLCLinker : IPLCS7
     {
-        protected const int mainBlockOffset = 18;
+        protected const int mainBlockOffset = 52;
         protected const int parkingSpaceOffset = 18;
         /// <summary>
         /// PLC 连接状态flag
@@ -366,23 +366,24 @@ namespace PLCS7
                 {
                     TerminalStru ts = (TerminalStru)abstractPLCMsg;
                     if (ts.terminalID < 0 || ts.terminalID >= terminalCount) { return false; }
-                    int offset = 36 * (ts.terminalID - 1);
+                    int offset = 42 * (ts.terminalID - 1);
                     if (whoami.Equals(PLCDataType.central))
                     {
-                        if (ts.paymentStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 26 + offset, BitConverter.GetBytes(BytesRevert(ts.paymentStatus))); }
-                        if (ts.licVerification != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 28 + offset, BitConverter.GetBytes(BytesRevert(ts.licVerification))); }
-                        if (ts.parkingFee != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 30 + offset, BitConverter.GetBytes(BytesRevert(ts.parkingFee))); }
-                        if (ts.userType != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 32 + offset, BitConverter.GetBytes(BytesRevert(ts.userType))); }
+                        if (ts.paymentStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 28 + offset, BitConverter.GetBytes(BytesRevert(ts.paymentStatus))); }
+                        if (ts.licVerification != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 30 + offset, BitConverter.GetBytes(BytesRevert(ts.licVerification))); }
+                        if (ts.parkingFee != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 32 + offset, BitConverter.GetBytes(BytesRevert(ts.parkingFee))); }
+                        if (ts.userType != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 34 + offset, BitConverter.GetBytes(BytesRevert(ts.userType))); }
                     }
                     else if (whoami.Equals(PLCDataType.terminal))
                     {
-                        if (ts.terminalStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 2 + offset, BitConverter.GetBytes(BytesRevert(ts.terminalStatus))); }
+                        //if (ts.terminalStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 2 + offset, BitConverter.GetBytes(BytesRevert(ts.terminalStatus))); }
                         if (ts.btnStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 4 + offset, BitConverter.GetBytes(BytesRevert(ts.btnStatus))); }
-                        if (ts.licenseCodeA != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 6 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeA))); }
-                        if (ts.licenseCodeB != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 10 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeB))); }
-                        if (ts.licenseCodeC != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 14 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeC))); }
-                        if (ts.licenseCodeD != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 18 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeD))); }
-                        if (ts.receiptNum != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 22 + offset, BitConverter.GetBytes(BytesRevert(ts.receiptNum))); }
+                        if (ts.cmd != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 6 + offset, BitConverter.GetBytes(BytesRevert(ts.cmd))); }
+                        if (ts.licenseCodeA != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 8 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeA))); }
+                        if (ts.licenseCodeB != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 12 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeB))); }
+                        if (ts.licenseCodeC != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 16 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeC))); }
+                        if (ts.licenseCodeD != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 20 + offset, BitConverter.GetBytes(BytesRevert(ts.licenseCodeD))); }
+                        if (ts.receiptNum != -1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 24 + offset, BitConverter.GetBytes(BytesRevert(ts.receiptNum))); }
                     }
                 }
                 else if (abstractPLCMsg.GetType().Equals(typeof(MainBlockStru)) && whoami.Equals(PLCDataType.central))
@@ -407,5 +408,62 @@ namespace PLCS7
             else { return false; }
             return true;
         }
+        /// <summary>
+        /// 根据地址偏移量写入PLC
+        /// </summary>
+        /// <param name="whichToWrite"></param>
+        /// <param name="offset"></param>
+        /// <param name="value"></param>
+        /// <returns></returns>
+        public bool WriteAccordingToOffset(PLCDataType whichToWrite, int offset, object value)
+        {
+            isConnected = plc.IsConnected;
+            if (value == null)
+                return false;
+            if (isConnected)
+            {
+                ErrorCode ec = ErrorCode.NoError;
+                switch (whichToWrite)
+                {
+                    case PLCDataType.terminal:
+                        if (value.GetType().Equals(typeof(int)))
+                        {
+                            ec = plc.WriteBytes(DataType.DataBlock, terminalDB, offset, BitConverter.GetBytes(BytesRevert((int)value)));
+                        }
+                        else if (value.GetType().Equals(typeof(short)))
+                        {
+                            ec = plc.WriteBytes(DataType.DataBlock, terminalDB, offset, BitConverter.GetBytes(BytesRevert((short)value)));
+                        }
+                        if (ec.Equals(ErrorCode.NoError)) { return true; }
+                        else { return false; }
+                        break;
+                    case PLCDataType.central:
+                        if (value.GetType().Equals(typeof(int)))
+                        {
+                            ec = plc.WriteBytes(DataType.DataBlock, centralDB, offset, BitConverter.GetBytes(BytesRevert((int)value)));
+                        }
+                        else if (value.GetType().Equals(typeof(short)))
+                        {
+                            ec = plc.WriteBytes(DataType.DataBlock, centralDB, offset, BitConverter.GetBytes(BytesRevert((short)value)));
+                        }
+                        if (ec.Equals(ErrorCode.NoError)) { return true; }
+                        else { return false; }
+                        break;
+                    case PLCDataType.parkingSpace:
+                        if (value.GetType().Equals(typeof(int)))
+                        {
+                            ec = plc.WriteBytes(DataType.DataBlock, parkingSpaceDB, offset, BitConverter.GetBytes(BytesRevert((int)value)));
+                        }
+                        else if (value.GetType().Equals(typeof(short)))
+                        {
+                            ec = plc.WriteBytes(DataType.DataBlock, parkingSpaceDB, offset, BitConverter.GetBytes(BytesRevert((short)value)));
+                        }
+                        if (ec.Equals(ErrorCode.NoError)) { return true; }
+                        else { return false; }
+                        break;
+                }
+            }
+            return false;
+        }
     }
 }

+ 1 - 0
PLCLinker/PLCS7/PLCS7.csproj

@@ -29,6 +29,7 @@
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\PLCS7.xml</DocumentationFile>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="S7.Net">

BIN
PLCLinker/PLCS7/bin/Release/PLCS7.dll


BIN
PLCLinker/PLCS7/bin/Release/PLCS7.pdb


+ 55 - 37
PLCLinker/PLCS7/entity.cs

@@ -16,14 +16,18 @@ namespace PLCS7
         /// </summary>
         public short terminalID;
         /// <summary>
-        /// 终端状态,0停,1取
+        /// 终端状态,0停,1停车,2
         /// </summary>
         public short terminalStatus;//终端写入
         /// <summary>
-        /// 按钮状态,0注册,1非注册
+        /// 按钮状态,0缺省,1非注册,2注册
         /// </summary>
         public short btnStatus;//终端写入
         /// <summary>
+        /// 停取指令,0缺省,1停车,2取车
+        /// </summary>
+        public short cmd;//终端写入
+        /// <summary>
         /// 注册用户UserID
         /// </summary>
         public int licenseCodeA;//终端写入
@@ -42,15 +46,15 @@ namespace PLCS7
         /// <summary>
         /// 凭证号
         /// </summary>
-        public int receiptNum;//终端写入
+        public int receiptNum;//终端写入,24
         /// <summary>
         /// 支付状态,0-1失败-2成功-3管理员放行
         /// </summary>
-        public short paymentStatus;//中控写入,26
+        public short paymentStatus;//中控写入,28
         /// <summary>
         /// 1-成功,2-号牌比对不成功
         /// </summary>
-        public short licVerification;//中控写入
+        public short licVerification;//中控写入,30
         /// <summary>
         /// 停车费用,0-99999
         /// </summary>
@@ -58,19 +62,19 @@ namespace PLCS7
         /// <summary>
         /// 用户类型,0-1普通-2月卡-3季卡-4年卡VIP
         /// </summary>
-        public short userType;//中控写入
-        public short coordX;//PLC
-        public short coordY;//PLC
+        public short userType;//中控写入,34
         /// <summary>
         /// 地感信号
         /// </summary>
         public short groundStatus;
+        public short coordX;//PLC
+        public short coordY;//PLC
 
         public override string ToString()
         {
-            return "[" + terminalID + "," + terminalStatus + "," + btnStatus + "," + licenseCodeA + "," 
-                + licenseCodeB + "," + licenseCodeC + "," + receiptNum + "," + paymentStatus
-                + "," + licVerification + "," + parkingFee + "," + userType + "," + groundStatus + "]";
+            return "[终端id:" + terminalID + ",终端状态:" + terminalStatus + ",按钮状态:" + btnStatus + ",终端指令:" + cmd + ",用户id:" + licenseCodeA + ","
+                + licenseCodeB + "," + licenseCodeC + "," + licenseCodeD + ",凭证号:" + receiptNum + ",支付状态:" + paymentStatus
+                + ",号牌验证:" + licVerification + ",停车费用:" + parkingFee + ",用户类型:" + userType + ",地感信号:" + groundStatus + "]";
         }
 
         public override bool Equals(object obj)
@@ -116,7 +120,7 @@ namespace PLCS7
         /// <summary>
         /// 急停
         /// </summary>
-        public short scram;
+        public short stop;
         /// <summary>
         /// 就绪
         /// </summary>
@@ -130,13 +134,43 @@ namespace PLCS7
         /// </summary>
         public short fetchingRunning;
         /// <summary>
+        /// 流程完成
+        /// </summary>
+        public short processCompleted;
+        /// <summary>
+        /// 流程中断
+        /// </summary>
+        public short processStopped;
+        /// <summary>
         /// 摆扫激光状态
         /// </summary>
         public short sweepLaserStatus;
         /// <summary>
+        /// 轮距雷达状态
+        /// </summary>
+        public short wheelbaseLaserStatus;
+        
+        public short groundAStatus;//24
+        public short groundBStatus;
+        public short groundCStatus;
+        public short groundDStatus;
+        public short groundEStatus;
+        public short groundFStatus;
+        public short arriveAAndOpen;
+        public short arriveBAndOpen;
+        public short arriveCAndOpen;
+        public short arriveDAndOpen;
+        public short arriveEAndOpen;
+        public short arriveFAndOpen;
+        //public short leaveAAndOpen;
+        //public short leaveBAndOpen;
+        //public short leaveCAndOpen;
+        public short bookParkCmd;
+        public short bookFetchCmd;
+        /// <summary>
         /// 号牌机获取
         /// </summary>
-        public short licenseReceived;//中控可写
+        public short licenseReceived;//中控可写,52
         /// <summary>
         /// 本地自动模式
         /// </summary>
@@ -149,31 +183,15 @@ namespace PLCS7
         /// 本地手动模式
         /// </summary>
         public short localManualMode;
-        /// <summary>
-        /// 流程中断
-        /// </summary>
-        public short processStopped;
-        public short groundAStatus;
-        public short groundBStatus;
-        public short groundCStatus;
-        public short arriveAAndOpen;
-        public short arriveBAndOpen;
-        public short arriveCAndOpen;
-        public short leaveAAndOpen;
-        public short leaveBAndOpen;
-        public short leaveCAndOpen;
-        /// <summary>
-        /// 流程完成
-        /// </summary>
-        public short processCompleted;
 
         public override string ToString()
         {
-            return "["+terminalID+","+","+ numMachineLaunch + ","+ sweepLaserLaunch + ","+ wheelbaseLaserLaunch + ","+ scram 
-                + ","+ ready + ","+ parkingRunning + ","+ fetchingRunning + ","+ sweepLaserStatus + ","+ licenseReceived 
-                + ","+ localAutoMode + ","+ remoteMode + ","+ localManualMode + ","+ processStopped + ","+ groundAStatus 
-                + ","+ groundBStatus + ","+ groundCStatus + ","+ arriveAAndOpen + ","+ arriveBAndOpen + ","+ arriveCAndOpen 
-                + ","+ leaveAAndOpen + ","+ leaveBAndOpen + ","+ leaveCAndOpen + ","+ processCompleted + "]";
+            return "[id:" + terminalID + ",号牌:" + numMachineLaunch + ",摆扫:" + sweepLaserLaunch + ",轮距:" + wheelbaseLaserLaunch + ",急停:" + stop
+                + ",就绪:" + ready + ",停车启动:" + parkingRunning + ",取车启动:" + fetchingRunning + ",流程完成:" + processCompleted + ",流程中止:" + 
+                processStopped + ",摆扫状态:" + sweepLaserStatus + ",轮距状态:"+wheelbaseLaserStatus+",号牌获取:" + licenseReceived
+                + ",本地自动:" + localAutoMode + ",远程模式:" + remoteMode + ",本地手动:" + localManualMode + "," + groundAStatus
+                + "," + groundBStatus + "," + groundCStatus + "," + arriveAAndOpen + "," + arriveBAndOpen + "," + arriveCAndOpen
+                 + "]";
         }
         public override int GetHashCode()
         {
@@ -239,8 +257,8 @@ namespace PLCS7
 
         public override string ToString()
         {
-            return "[" + parkingSpace + "," + length + "," + width + "," + height + "," + floorNo + "," + coordX + "," + coordY + "," + receiptNum
-                + "," + spaceStatus + "," + frontWheelbase + "," + rearWheelbase + "]";
+            return "[车位编号:" + parkingSpace + ",长:" + length + ",宽:" + width + ",高:" + height + ",楼层:" + floorNo + ",X坐标:" + coordX + ",Y坐标:" + coordY + ",凭证号:" + receiptNum
+                + ",车位状态:" + spaceStatus + ",前轮距:" + frontWheelbase + ",后轮距:" + rearWheelbase + "]";
         }
         public override int GetHashCode()
         {

+ 1 - 0
PLCLinker/PLCS7/obj/Release/PLCS7.csproj.FileListAbsolute.txt

@@ -4,4 +4,5 @@ E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCS7\bin\Rele
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCS7\obj\Release\PLCS7.csproj.CoreCompileInputs.cache
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCS7\obj\Release\PLCS7.dll
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCS7\obj\Release\PLCS7.pdb
+E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCS7\bin\Release\PLCS7.xml
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\PLCS7\obj\Release\PLCS7.csprojResolveAssemblyReference.cache

BIN
PLCLinker/PLCS7/obj/Release/PLCS7.dll


BIN
PLCLinker/PLCS7/obj/Release/PLCS7.pdb


+ 0 - 47
PLCLinker/ParkController/Form1.Designer.cs

@@ -1,47 +0,0 @@
-namespace ParkController
-{
-    partial class Form1
-    {
-        /// <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 Windows 窗体设计器生成的代码
-
-        /// <summary>
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.SuspendLayout();
-            // 
-            // Form1
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(644, 360);
-            this.Name = "Form1";
-            this.Text = "Form1";
-            this.ResumeLayout(false);
-
-        }
-
-        #endregion
-    }
-}
-

+ 0 - 20
PLCLinker/ParkController/Form1.cs

@@ -1,20 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace ParkController
-{
-    public partial class Form1 : Form
-    {
-        public Form1()
-        {
-            InitializeComponent();
-        }
-    }
-}

+ 6 - 4
PLCLinker/centralController/App.config

@@ -7,8 +7,8 @@
     <add key="retryCount" value="3"/>
     <!--数据库信息-->
     <!--<add key="remoteDBConnStr" value="Data Source=59.175.148.85;port=3306;uid=root;pooling=true;max pool size=1024;pwd=x5;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>-->
-    <add key="remoteDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_remote;CharSet=utf8;Allow Zero Datetime=true;"/>
-    <add key="localDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>
+    <add key="remoteDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_cloud;CharSet=utf8;Allow Zero Datetime=true;"/>
+    <add key="localDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_local;CharSet=utf8;Allow Zero Datetime=true;"/>
     <add key="DBtimeout" value="3"/>
     <!--号牌机信息-->
     <add key="192.168.0.20" value="2"/>
@@ -20,8 +20,8 @@
     <add key="plcRack" value="0" />
     <add key="plcSlot" value="1" />
     <!--分别对终端、中控、车位-->
-    <add key="plcDatablockId" value="18,22,20" />
-    <add key="plcTerminalCount" value="6" />
+    <add key="plcDatablockId" value="18,41,20" />
+    <add key="plcTerminalCount" value="1" />
     <add key="plcParkingSpaceCount" value="200" />
     <add key="plcRefreshInterval" value="200"/>
     <!--显示屏信息-->
@@ -31,5 +31,7 @@
     <add key="webPort" value="9000"/>
     <!--车库信息-->
     <add key="garageID" value="1"/>
+    <!--日志写入地址配置文件-->
+    <add key="LogAddress" value="c:\\c#workspace\\LogDemo\\LoggerTest" />
   </appSettings>
 </configuration>

+ 0 - 81
PLCLinker/centralController/Form1.cs

@@ -1,81 +0,0 @@
-using Monitor;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Net;
-using System.Reflection;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace centralController
-{
-    public partial class centralController : Form
-    {
-
-        public centralController()
-        {
-            InitializeComponent();
-            if (Monitor.Monitor.ins == null)
-            {
-                Monitor.Monitor.ins = new Monitor.Monitor(flowLayoutPanel1.Handle);
-                Monitor.Monitor.ins.Start();
-            }
-            //进度条测试
-            Task.Factory.StartNew(() =>
-            {
-                int temp = 0;
-                while (true)
-                {
-                    if (temp != Monitor.Monitor.initializeState)
-                    {
-                        temp = Monitor.Monitor.initializeState;
-                        progressBar1.Invoke(new Action(()=> { progressBar1.Value = temp * 20; }));
-                    }
-                    if (temp == 5) { break; }
-                    Thread.Sleep(200);
-                }
-            });
-        }
-
-        private void btn_exit_Click(object sender, EventArgs e)
-        {
-            DialogResult result = MessageBox.Show("确定退出系统吗?", "温馨提示", MessageBoxButtons.OKCancel);
-            if (result.Equals(DialogResult.OK))
-            {
-                Monitor.Monitor.ins.Stop();
-                Close();
-            }
-        }
-
-        private void button1_Click(object sender, EventArgs e)
-        {
-            string ip = textBox1.Text;
-            IPAddress temp;
-            if (IPAddress.TryParse(ip, out temp))
-            {
-                string license = "";
-                Task.Factory.StartNew(() =>
-                {
-                    license = Monitor.Monitor.numMachineLinker.GetLicensePlate(1);
-                    if (textBox2.InvokeRequired)
-                    {
-                        textBox2.Invoke(new Action(() => { textBox2.Text = license; }));
-                    }
-                    else
-                    {
-                        textBox2.Text = license;
-                    }
-
-                });
-
-
-            }
-        }
-    }
-
-}

+ 422 - 155
PLCLinker/centralController/Form1.Designer.cs

@@ -29,10 +29,15 @@
         private void InitializeComponent()
         {
             this.components = new System.ComponentModel.Container();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
             this.dotNetBarManager1 = new DevComponents.DotNetBar.DotNetBarManager(this.components);
             this.dockSite4 = new DevComponents.DotNetBar.DockSite();
             this.dockSite9 = new DevComponents.DotNetBar.DockSite();
             this.bar2 = new DevComponents.DotNetBar.Bar();
+            this.NumMachineMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
+            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
+            this.ParkingSpaceMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
+            this.paymentPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.testPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.button1 = new System.Windows.Forms.Button();
             this.textBox2 = new System.Windows.Forms.TextBox();
@@ -40,25 +45,34 @@
             this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
             this.pictureBox1 = new System.Windows.Forms.PictureBox();
             this.labelX1 = new DevComponents.DotNetBar.LabelX();
-            this.progressBar1 = new System.Windows.Forms.ProgressBar();
-            this.PLCMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.NumMachineMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
-            this.ParkingSpaceMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.RecordsMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.paymentPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.dci_PLC = new DevComponents.DotNetBar.DockContainerItem();
-            this.dci_NumMachine = new DevComponents.DotNetBar.DockContainerItem();
             this.dci_ParkingSpace = new DevComponents.DotNetBar.DockContainerItem();
-            this.dci_ParkingRecords = new DevComponents.DotNetBar.DockContainerItem();
+            this.dci_NumMachine = new DevComponents.DotNetBar.DockContainerItem();
             this.dci_payment = new DevComponents.DotNetBar.DockContainerItem();
             this.dci_Test = new DevComponents.DotNetBar.DockContainerItem();
+            this.bar4 = new DevComponents.DotNetBar.Bar();
+            this.RecordsMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
+            this.dataGridViewX1 = new DevComponents.DotNetBar.Controls.DataGridViewX();
+            this.parkingRecordsID = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.userID = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.numberPlate = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.parkingSpaceID = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.realParkTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.realGetTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.receiptNum = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.parkingPrice = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.dci_ParkingRecords = new DevComponents.DotNetBar.DockContainerItem();
+            this.bar5 = new DevComponents.DotNetBar.Bar();
+            this.terminalMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
+            this.dci_terminal = new DevComponents.DotNetBar.DockContainerItem();
             this.dockSite1 = new DevComponents.DotNetBar.DockSite();
             this.dockSite2 = new DevComponents.DotNetBar.DockSite();
             this.bar3 = new DevComponents.DotNetBar.Bar();
             this.basicInfoPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.warningPanel = new DevComponents.DotNetBar.PanelDockContainer();
+            this.tbx_sysInfo = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.progressBar1 = new System.Windows.Forms.ProgressBar();
             this.dci_basicInfo = new DevComponents.DotNetBar.DockContainerItem();
+            this.bar6 = new DevComponents.DotNetBar.Bar();
+            this.warningPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.dci_warning = new DevComponents.DotNetBar.DockContainerItem();
             this.dockSite8 = new DevComponents.DotNetBar.DockSite();
             this.dockSite5 = new DevComponents.DotNetBar.DockSite();
@@ -71,6 +85,8 @@
             this.btn_exit = new DevComponents.DotNetBar.ButtonItem();
             this.btn_files = new DevComponents.DotNetBar.ButtonItem();
             this.btn_openFile = new DevComponents.DotNetBar.ButtonItem();
+            this.btn_refreshRecords = new DevComponents.DotNetBar.ButtonItem();
+            this.btn_exportRecords = new DevComponents.DotNetBar.ButtonItem();
             this.btn_devices = new DevComponents.DotNetBar.ButtonItem();
             this.btn_linkPLC = new DevComponents.DotNetBar.ButtonItem();
             this.dockSite3 = new DevComponents.DotNetBar.DockSite();
@@ -81,20 +97,27 @@
             this.panelDockContainer7 = new DevComponents.DotNetBar.PanelDockContainer();
             this.dockContainerItem1 = new DevComponents.DotNetBar.DockContainerItem();
             this.panelDockContainer8 = new DevComponents.DotNetBar.PanelDockContainer();
-            this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
             this.dockSite9.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.bar2)).BeginInit();
             this.bar2.SuspendLayout();
+            this.NumMachineMonitorPanel.SuspendLayout();
             this.testPanel.SuspendLayout();
             this.tableLayoutPanel1.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
-            this.NumMachineMonitorPanel.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.bar4)).BeginInit();
+            this.bar4.SuspendLayout();
+            this.RecordsMonitorPanel.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridViewX1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.bar5)).BeginInit();
+            this.bar5.SuspendLayout();
             this.dockSite2.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.bar3)).BeginInit();
             this.bar3.SuspendLayout();
+            this.basicInfoPanel.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.bar6)).BeginInit();
+            this.bar6.SuspendLayout();
             this.dockSite7.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.bar1)).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
             this.SuspendLayout();
             // 
             // dotNetBarManager1
@@ -126,9 +149,9 @@
             this.dockSite4.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
             this.dockSite4.Dock = System.Windows.Forms.DockStyle.Bottom;
             this.dockSite4.DocumentDockContainer = new DevComponents.DotNetBar.DocumentDockContainer();
-            this.dockSite4.Location = new System.Drawing.Point(0, 449);
+            this.dockSite4.Location = new System.Drawing.Point(0, 668);
             this.dockSite4.Name = "dockSite4";
-            this.dockSite4.Size = new System.Drawing.Size(778, 0);
+            this.dockSite4.Size = new System.Drawing.Size(1194, 0);
             this.dockSite4.TabIndex = 3;
             this.dockSite4.TabStop = false;
             // 
@@ -136,12 +159,17 @@
             // 
             this.dockSite9.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
             this.dockSite9.Controls.Add(this.bar2);
+            this.dockSite9.Controls.Add(this.bar4);
+            this.dockSite9.Controls.Add(this.bar5);
             this.dockSite9.Dock = System.Windows.Forms.DockStyle.Fill;
             this.dockSite9.DocumentDockContainer = new DevComponents.DotNetBar.DocumentDockContainer(new DevComponents.DotNetBar.DocumentBaseContainer[] {
-            ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar2, 593, 424)))}, DevComponents.DotNetBar.eOrientation.Horizontal);
+            ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentDockContainer(new DevComponents.DotNetBar.DocumentBaseContainer[] {
+                        ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar2, 698, 459))),
+                        ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar5, 213, 459)))}, DevComponents.DotNetBar.eOrientation.Horizontal))),
+            ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar4, 871, 181)))}, DevComponents.DotNetBar.eOrientation.Vertical);
             this.dockSite9.Location = new System.Drawing.Point(0, 25);
             this.dockSite9.Name = "dockSite9";
-            this.dockSite9.Size = new System.Drawing.Size(593, 424);
+            this.dockSite9.Size = new System.Drawing.Size(871, 643);
             this.dockSite9.TabIndex = 8;
             this.dockSite9.TabStop = false;
             // 
@@ -159,20 +187,16 @@
             this.bar2.CanDockTop = false;
             this.bar2.CanHide = true;
             this.bar2.CanUndock = false;
-            this.bar2.Controls.Add(this.PLCMonitorPanel);
-            this.bar2.Controls.Add(this.testPanel);
-            this.bar2.Controls.Add(this.paymentPanel);
-            this.bar2.Controls.Add(this.RecordsMonitorPanel);
             this.bar2.Controls.Add(this.ParkingSpaceMonitorPanel);
             this.bar2.Controls.Add(this.NumMachineMonitorPanel);
+            this.bar2.Controls.Add(this.testPanel);
+            this.bar2.Controls.Add(this.paymentPanel);
             this.bar2.DockTabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Top;
             this.bar2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.bar2.IsMaximized = false;
             this.bar2.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
-            this.dci_PLC,
-            this.dci_NumMachine,
             this.dci_ParkingSpace,
-            this.dci_ParkingRecords,
+            this.dci_NumMachine,
             this.dci_payment,
             this.dci_Test});
             this.bar2.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
@@ -180,24 +204,72 @@
             this.bar2.Name = "bar2";
             this.bar2.SelectedDockTab = 0;
             this.bar2.SingleLineColor = System.Drawing.SystemColors.ControlDarkDark;
-            this.bar2.Size = new System.Drawing.Size(593, 424);
+            this.bar2.Size = new System.Drawing.Size(665, 408);
             this.bar2.Stretch = true;
             this.bar2.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar2.TabIndex = 0;
             this.bar2.TabNavigation = true;
             this.bar2.TabStop = false;
             // 
+            // NumMachineMonitorPanel
+            // 
+            this.NumMachineMonitorPanel.Controls.Add(this.flowLayoutPanel1);
+            this.NumMachineMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
+            this.NumMachineMonitorPanel.Location = new System.Drawing.Point(3, 28);
+            this.NumMachineMonitorPanel.Name = "NumMachineMonitorPanel";
+            this.NumMachineMonitorPanel.Size = new System.Drawing.Size(659, 377);
+            this.NumMachineMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
+            this.NumMachineMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
+            this.NumMachineMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
+            this.NumMachineMonitorPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
+            this.NumMachineMonitorPanel.Style.GradientAngle = 90;
+            this.NumMachineMonitorPanel.TabIndex = 0;
+            // 
+            // flowLayoutPanel1
+            // 
+            this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+            this.flowLayoutPanel1.Name = "flowLayoutPanel1";
+            this.flowLayoutPanel1.Size = new System.Drawing.Size(659, 377);
+            this.flowLayoutPanel1.TabIndex = 1;
+            this.flowLayoutPanel1.Resize += new System.EventHandler(this.flowLayoutPanel1_Resize);
+            // 
+            // ParkingSpaceMonitorPanel
+            // 
+            this.ParkingSpaceMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
+            this.ParkingSpaceMonitorPanel.Location = new System.Drawing.Point(3, 28);
+            this.ParkingSpaceMonitorPanel.Name = "ParkingSpaceMonitorPanel";
+            this.ParkingSpaceMonitorPanel.Size = new System.Drawing.Size(659, 377);
+            this.ParkingSpaceMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
+            this.ParkingSpaceMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
+            this.ParkingSpaceMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
+            this.ParkingSpaceMonitorPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
+            this.ParkingSpaceMonitorPanel.Style.GradientAngle = 90;
+            this.ParkingSpaceMonitorPanel.TabIndex = 9;
+            // 
+            // paymentPanel
+            // 
+            this.paymentPanel.DisabledBackColor = System.Drawing.Color.Empty;
+            this.paymentPanel.Location = new System.Drawing.Point(3, 28);
+            this.paymentPanel.Name = "paymentPanel";
+            this.paymentPanel.Size = new System.Drawing.Size(659, 377);
+            this.paymentPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
+            this.paymentPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
+            this.paymentPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
+            this.paymentPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
+            this.paymentPanel.Style.GradientAngle = 90;
+            this.paymentPanel.TabIndex = 24;
+            // 
             // testPanel
             // 
             this.testPanel.Controls.Add(this.button1);
             this.testPanel.Controls.Add(this.textBox2);
             this.testPanel.Controls.Add(this.textBox1);
             this.testPanel.Controls.Add(this.tableLayoutPanel1);
-            this.testPanel.Controls.Add(this.progressBar1);
             this.testPanel.DisabledBackColor = System.Drawing.Color.Empty;
             this.testPanel.Location = new System.Drawing.Point(3, 28);
             this.testPanel.Name = "testPanel";
-            this.testPanel.Size = new System.Drawing.Size(587, 393);
+            this.testPanel.Size = new System.Drawing.Size(659, 377);
             this.testPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
             this.testPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
             this.testPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
@@ -207,7 +279,7 @@
             // 
             // button1
             // 
-            this.button1.Location = new System.Drawing.Point(151, 113);
+            this.button1.Location = new System.Drawing.Point(151, 43);
             this.button1.Name = "button1";
             this.button1.Size = new System.Drawing.Size(75, 23);
             this.button1.TabIndex = 6;
@@ -217,25 +289,26 @@
             // 
             // textBox2
             // 
-            this.textBox2.Location = new System.Drawing.Point(204, 67);
+            this.textBox2.Location = new System.Drawing.Point(205, 16);
             this.textBox2.Name = "textBox2";
             this.textBox2.Size = new System.Drawing.Size(100, 21);
             this.textBox2.TabIndex = 5;
             // 
             // textBox1
             // 
-            this.textBox1.Location = new System.Drawing.Point(73, 67);
+            this.textBox1.Location = new System.Drawing.Point(74, 16);
             this.textBox1.Name = "textBox1";
             this.textBox1.Size = new System.Drawing.Size(100, 21);
             this.textBox1.TabIndex = 4;
             // 
             // tableLayoutPanel1
             // 
+            this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
             this.tableLayoutPanel1.ColumnCount = 1;
             this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
             this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 1);
             this.tableLayoutPanel1.Controls.Add(this.labelX1, 0, 0);
-            this.tableLayoutPanel1.Location = new System.Drawing.Point(345, 150);
+            this.tableLayoutPanel1.Location = new System.Drawing.Point(9, 72);
             this.tableLayoutPanel1.Name = "tableLayoutPanel1";
             this.tableLayoutPanel1.RowCount = 2;
             this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20F));
@@ -264,68 +337,66 @@
             this.labelX1.Text = "label1\r\nlable2";
             this.labelX1.TextAlignment = System.Drawing.StringAlignment.Center;
             // 
-            // progressBar1
-            // 
-            this.progressBar1.Location = new System.Drawing.Point(402, 57);
-            this.progressBar1.Name = "progressBar1";
-            this.progressBar1.Size = new System.Drawing.Size(125, 31);
-            this.progressBar1.Step = 20;
-            this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
-            this.progressBar1.TabIndex = 0;
+            // dci_ParkingSpace
             // 
-            // PLCMonitorPanel
+            this.dci_ParkingSpace.Control = this.ParkingSpaceMonitorPanel;
+            this.dci_ParkingSpace.Name = "dci_ParkingSpace";
+            this.dci_ParkingSpace.Text = "车位状态";
             // 
-            this.PLCMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
-            this.PLCMonitorPanel.Location = new System.Drawing.Point(3, 28);
-            this.PLCMonitorPanel.Name = "PLCMonitorPanel";
-            this.PLCMonitorPanel.Size = new System.Drawing.Size(587, 393);
-            this.PLCMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
-            this.PLCMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
-            this.PLCMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
-            this.PLCMonitorPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
-            this.PLCMonitorPanel.Style.GradientAngle = 90;
-            this.PLCMonitorPanel.TabIndex = 0;
+            // dci_NumMachine
             // 
-            // NumMachineMonitorPanel
+            this.dci_NumMachine.Control = this.NumMachineMonitorPanel;
+            this.dci_NumMachine.Name = "dci_NumMachine";
+            this.dci_NumMachine.Text = "号牌机监控";
             // 
-            this.NumMachineMonitorPanel.Controls.Add(this.flowLayoutPanel1);
-            this.NumMachineMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
-            this.NumMachineMonitorPanel.Location = new System.Drawing.Point(3, 28);
-            this.NumMachineMonitorPanel.Name = "NumMachineMonitorPanel";
-            this.NumMachineMonitorPanel.Size = new System.Drawing.Size(587, 393);
-            this.NumMachineMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
-            this.NumMachineMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
-            this.NumMachineMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
-            this.NumMachineMonitorPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
-            this.NumMachineMonitorPanel.Style.GradientAngle = 90;
-            this.NumMachineMonitorPanel.TabIndex = 0;
+            // dci_payment
             // 
-            // flowLayoutPanel1
+            this.dci_payment.Control = this.paymentPanel;
+            this.dci_payment.Name = "dci_payment";
+            this.dci_payment.Text = "支付信息";
             // 
-            this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 6);
-            this.flowLayoutPanel1.Name = "flowLayoutPanel1";
-            this.flowLayoutPanel1.Size = new System.Drawing.Size(581, 380);
-            this.flowLayoutPanel1.TabIndex = 1;
+            // dci_Test
             // 
-            // ParkingSpaceMonitorPanel
+            this.dci_Test.Control = this.testPanel;
+            this.dci_Test.Name = "dci_Test";
+            this.dci_Test.Text = "测试";
             // 
-            this.ParkingSpaceMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
-            this.ParkingSpaceMonitorPanel.Location = new System.Drawing.Point(3, 28);
-            this.ParkingSpaceMonitorPanel.Name = "ParkingSpaceMonitorPanel";
-            this.ParkingSpaceMonitorPanel.Size = new System.Drawing.Size(587, 393);
-            this.ParkingSpaceMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
-            this.ParkingSpaceMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
-            this.ParkingSpaceMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
-            this.ParkingSpaceMonitorPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
-            this.ParkingSpaceMonitorPanel.Style.GradientAngle = 90;
-            this.ParkingSpaceMonitorPanel.TabIndex = 9;
+            // bar4
+            // 
+            this.bar4.AccessibleDescription = "DotNetBar Bar (bar4)";
+            this.bar4.AccessibleName = "DotNetBar Bar";
+            this.bar4.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this.bar4.AlwaysDisplayDockTab = true;
+            this.bar4.CanDockBottom = false;
+            this.bar4.CanDockDocument = true;
+            this.bar4.CanDockLeft = false;
+            this.bar4.CanDockRight = false;
+            this.bar4.CanDockTop = false;
+            this.bar4.CanHide = true;
+            this.bar4.CanUndock = false;
+            this.bar4.Controls.Add(this.RecordsMonitorPanel);
+            this.bar4.DockTabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Top;
+            this.bar4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.bar4.IsMaximized = false;
+            this.bar4.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
+            this.dci_ParkingRecords});
+            this.bar4.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
+            this.bar4.Location = new System.Drawing.Point(0, 411);
+            this.bar4.Name = "bar4";
+            this.bar4.SelectedDockTab = 0;
+            this.bar4.Size = new System.Drawing.Size(871, 232);
+            this.bar4.Stretch = true;
+            this.bar4.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
+            this.bar4.TabIndex = 1;
+            this.bar4.TabStop = false;
             // 
             // RecordsMonitorPanel
             // 
+            this.RecordsMonitorPanel.Controls.Add(this.dataGridViewX1);
             this.RecordsMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
             this.RecordsMonitorPanel.Location = new System.Drawing.Point(3, 28);
             this.RecordsMonitorPanel.Name = "RecordsMonitorPanel";
-            this.RecordsMonitorPanel.Size = new System.Drawing.Size(587, 393);
+            this.RecordsMonitorPanel.Size = new System.Drawing.Size(865, 201);
             this.RecordsMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
             this.RecordsMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
             this.RecordsMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
@@ -333,36 +404,103 @@
             this.RecordsMonitorPanel.Style.GradientAngle = 90;
             this.RecordsMonitorPanel.TabIndex = 13;
             // 
-            // paymentPanel
-            // 
-            this.paymentPanel.DisabledBackColor = System.Drawing.Color.Empty;
-            this.paymentPanel.Location = new System.Drawing.Point(3, 28);
-            this.paymentPanel.Name = "paymentPanel";
-            this.paymentPanel.Size = new System.Drawing.Size(587, 393);
-            this.paymentPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
-            this.paymentPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
-            this.paymentPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
-            this.paymentPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
-            this.paymentPanel.Style.GradientAngle = 90;
-            this.paymentPanel.TabIndex = 24;
-            // 
-            // dci_PLC
-            // 
-            this.dci_PLC.Control = this.PLCMonitorPanel;
-            this.dci_PLC.Name = "dci_PLC";
-            this.dci_PLC.Text = "PLC监控";
-            // 
-            // dci_NumMachine
-            // 
-            this.dci_NumMachine.Control = this.NumMachineMonitorPanel;
-            this.dci_NumMachine.Name = "dci_NumMachine";
-            this.dci_NumMachine.Text = "号牌机监控";
-            // 
-            // dci_ParkingSpace
-            // 
-            this.dci_ParkingSpace.Control = this.ParkingSpaceMonitorPanel;
-            this.dci_ParkingSpace.Name = "dci_ParkingSpace";
-            this.dci_ParkingSpace.Text = "车位状态";
+            // dataGridViewX1
+            // 
+            this.dataGridViewX1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+            this.dataGridViewX1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
+            this.parkingRecordsID,
+            this.userID,
+            this.numberPlate,
+            this.parkingSpaceID,
+            this.realParkTime,
+            this.realGetTime,
+            this.receiptNum,
+            this.parkingPrice});
+            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+            dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
+            dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+            dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+            this.dataGridViewX1.DefaultCellStyle = dataGridViewCellStyle1;
+            this.dataGridViewX1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.dataGridViewX1.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229)))));
+            this.dataGridViewX1.Location = new System.Drawing.Point(0, 0);
+            this.dataGridViewX1.Name = "dataGridViewX1";
+            this.dataGridViewX1.RowTemplate.Height = 23;
+            this.dataGridViewX1.Size = new System.Drawing.Size(865, 201);
+            this.dataGridViewX1.TabIndex = 0;
+            // 
+            // parkingRecordsID
+            // 
+            this.parkingRecordsID.Frozen = true;
+            this.parkingRecordsID.HeaderText = "停车记录ID";
+            this.parkingRecordsID.MaxInputLength = 11;
+            this.parkingRecordsID.Name = "parkingRecordsID";
+            this.parkingRecordsID.ReadOnly = true;
+            this.parkingRecordsID.Width = 90;
+            // 
+            // userID
+            // 
+            this.userID.Frozen = true;
+            this.userID.HeaderText = "用户ID";
+            this.userID.MaxInputLength = 8;
+            this.userID.Name = "userID";
+            this.userID.ReadOnly = true;
+            this.userID.Width = 70;
+            // 
+            // numberPlate
+            // 
+            this.numberPlate.Frozen = true;
+            this.numberPlate.HeaderText = "号牌";
+            this.numberPlate.MaxInputLength = 9;
+            this.numberPlate.Name = "numberPlate";
+            this.numberPlate.ReadOnly = true;
+            this.numberPlate.Width = 80;
+            // 
+            // parkingSpaceID
+            // 
+            this.parkingSpaceID.Frozen = true;
+            this.parkingSpaceID.HeaderText = "车位编号";
+            this.parkingSpaceID.MaxInputLength = 4;
+            this.parkingSpaceID.Name = "parkingSpaceID";
+            this.parkingSpaceID.ReadOnly = true;
+            this.parkingSpaceID.Width = 80;
+            // 
+            // realParkTime
+            // 
+            this.realParkTime.Frozen = true;
+            this.realParkTime.HeaderText = "实际停入时间";
+            this.realParkTime.MaxInputLength = 50;
+            this.realParkTime.Name = "realParkTime";
+            this.realParkTime.ReadOnly = true;
+            this.realParkTime.Width = 140;
+            // 
+            // realGetTime
+            // 
+            this.realGetTime.Frozen = true;
+            this.realGetTime.HeaderText = "实际取出时间";
+            this.realGetTime.MaxInputLength = 50;
+            this.realGetTime.Name = "realGetTime";
+            this.realGetTime.ReadOnly = true;
+            this.realGetTime.Width = 140;
+            // 
+            // receiptNum
+            // 
+            this.receiptNum.Frozen = true;
+            this.receiptNum.HeaderText = "凭证号";
+            this.receiptNum.MaxInputLength = 8;
+            this.receiptNum.Name = "receiptNum";
+            this.receiptNum.ReadOnly = true;
+            // 
+            // parkingPrice
+            // 
+            this.parkingPrice.Frozen = true;
+            this.parkingPrice.HeaderText = "停车费用";
+            this.parkingPrice.MaxInputLength = 11;
+            this.parkingPrice.Name = "parkingPrice";
+            this.parkingPrice.ReadOnly = true;
             // 
             // dci_ParkingRecords
             // 
@@ -370,17 +508,53 @@
             this.dci_ParkingRecords.Name = "dci_ParkingRecords";
             this.dci_ParkingRecords.Text = "进出记录";
             // 
-            // dci_payment
-            // 
-            this.dci_payment.Control = this.paymentPanel;
-            this.dci_payment.Name = "dci_payment";
-            this.dci_payment.Text = "支付信息";
-            // 
-            // dci_Test
-            // 
-            this.dci_Test.Control = this.testPanel;
-            this.dci_Test.Name = "dci_Test";
-            this.dci_Test.Text = "测试";
+            // bar5
+            // 
+            this.bar5.AccessibleDescription = "DotNetBar Bar (bar5)";
+            this.bar5.AccessibleName = "DotNetBar Bar";
+            this.bar5.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this.bar5.AlwaysDisplayDockTab = true;
+            this.bar5.CanDockBottom = false;
+            this.bar5.CanDockDocument = true;
+            this.bar5.CanDockLeft = false;
+            this.bar5.CanDockRight = false;
+            this.bar5.CanDockTop = false;
+            this.bar5.CanHide = true;
+            this.bar5.CanUndock = false;
+            this.bar5.Controls.Add(this.terminalMonitorPanel);
+            this.bar5.DockTabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Top;
+            this.bar5.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.bar5.IsMaximized = false;
+            this.bar5.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
+            this.dci_terminal});
+            this.bar5.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
+            this.bar5.Location = new System.Drawing.Point(668, 0);
+            this.bar5.Name = "bar5";
+            this.bar5.SelectedDockTab = 0;
+            this.bar5.Size = new System.Drawing.Size(203, 408);
+            this.bar5.Stretch = true;
+            this.bar5.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
+            this.bar5.TabIndex = 2;
+            this.bar5.TabStop = false;
+            // 
+            // terminalMonitorPanel
+            // 
+            this.terminalMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
+            this.terminalMonitorPanel.Location = new System.Drawing.Point(3, 28);
+            this.terminalMonitorPanel.Name = "terminalMonitorPanel";
+            this.terminalMonitorPanel.Size = new System.Drawing.Size(197, 377);
+            this.terminalMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
+            this.terminalMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
+            this.terminalMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
+            this.terminalMonitorPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
+            this.terminalMonitorPanel.Style.GradientAngle = 90;
+            this.terminalMonitorPanel.TabIndex = 0;
+            // 
+            // dci_terminal
+            // 
+            this.dci_terminal.Control = this.terminalMonitorPanel;
+            this.dci_terminal.Name = "dci_terminal";
+            this.dci_terminal.Text = "终端监控";
             // 
             // dockSite1
             // 
@@ -389,7 +563,7 @@
             this.dockSite1.DocumentDockContainer = new DevComponents.DotNetBar.DocumentDockContainer();
             this.dockSite1.Location = new System.Drawing.Point(0, 25);
             this.dockSite1.Name = "dockSite1";
-            this.dockSite1.Size = new System.Drawing.Size(0, 424);
+            this.dockSite1.Size = new System.Drawing.Size(0, 643);
             this.dockSite1.TabIndex = 0;
             this.dockSite1.TabStop = false;
             // 
@@ -397,12 +571,14 @@
             // 
             this.dockSite2.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
             this.dockSite2.Controls.Add(this.bar3);
+            this.dockSite2.Controls.Add(this.bar6);
             this.dockSite2.Dock = System.Windows.Forms.DockStyle.Right;
             this.dockSite2.DocumentDockContainer = new DevComponents.DotNetBar.DocumentDockContainer(new DevComponents.DotNetBar.DocumentBaseContainer[] {
-            ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar3, 182, 424)))}, DevComponents.DotNetBar.eOrientation.Horizontal);
-            this.dockSite2.Location = new System.Drawing.Point(593, 25);
+            ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar3, 320, 223))),
+            ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar6, 320, 417)))}, DevComponents.DotNetBar.eOrientation.Vertical);
+            this.dockSite2.Location = new System.Drawing.Point(871, 25);
             this.dockSite2.Name = "dockSite2";
-            this.dockSite2.Size = new System.Drawing.Size(185, 424);
+            this.dockSite2.Size = new System.Drawing.Size(323, 643);
             this.dockSite2.TabIndex = 1;
             this.dockSite2.TabStop = false;
             // 
@@ -413,31 +589,30 @@
             this.bar3.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
             this.bar3.AutoSyncBarCaption = true;
             this.bar3.CloseSingleTab = true;
-            this.bar3.Controls.Add(this.warningPanel);
             this.bar3.Controls.Add(this.basicInfoPanel);
             this.bar3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.bar3.GrabHandleStyle = DevComponents.DotNetBar.eGrabHandleStyle.Caption;
             this.bar3.IsMaximized = false;
             this.bar3.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
-            this.dci_basicInfo,
-            this.dci_warning});
+            this.dci_basicInfo});
             this.bar3.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
             this.bar3.Location = new System.Drawing.Point(3, 0);
             this.bar3.Name = "bar3";
-            this.bar3.SelectedDockTab = 1;
-            this.bar3.Size = new System.Drawing.Size(182, 424);
+            this.bar3.Size = new System.Drawing.Size(320, 223);
             this.bar3.Stretch = true;
             this.bar3.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar3.TabIndex = 0;
             this.bar3.TabStop = false;
-            this.bar3.Text = "警告与提示";
+            this.bar3.Text = "基本信息";
             // 
             // basicInfoPanel
             // 
+            this.basicInfoPanel.Controls.Add(this.tbx_sysInfo);
+            this.basicInfoPanel.Controls.Add(this.progressBar1);
             this.basicInfoPanel.DisabledBackColor = System.Drawing.Color.Empty;
             this.basicInfoPanel.Location = new System.Drawing.Point(3, 23);
             this.basicInfoPanel.Name = "basicInfoPanel";
-            this.basicInfoPanel.Size = new System.Drawing.Size(176, 373);
+            this.basicInfoPanel.Size = new System.Drawing.Size(314, 197);
             this.basicInfoPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
             this.basicInfoPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
             this.basicInfoPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
@@ -445,12 +620,70 @@
             this.basicInfoPanel.Style.GradientAngle = 90;
             this.basicInfoPanel.TabIndex = 21;
             // 
+            // tbx_sysInfo
+            // 
+            // 
+            // 
+            // 
+            this.tbx_sysInfo.Border.Class = "TextBoxBorder";
+            this.tbx_sysInfo.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.tbx_sysInfo.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.tbx_sysInfo.Location = new System.Drawing.Point(0, 0);
+            this.tbx_sysInfo.Multiline = true;
+            this.tbx_sysInfo.Name = "tbx_sysInfo";
+            this.tbx_sysInfo.PreventEnterBeep = true;
+            this.tbx_sysInfo.ReadOnly = true;
+            this.tbx_sysInfo.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+            this.tbx_sysInfo.Size = new System.Drawing.Size(314, 170);
+            this.tbx_sysInfo.TabIndex = 1;
+            this.tbx_sysInfo.Text = "sample\r\nsample";
+            this.tbx_sysInfo.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+            // 
+            // progressBar1
+            // 
+            this.progressBar1.Dock = System.Windows.Forms.DockStyle.Bottom;
+            this.progressBar1.Location = new System.Drawing.Point(0, 170);
+            this.progressBar1.Name = "progressBar1";
+            this.progressBar1.Size = new System.Drawing.Size(314, 27);
+            this.progressBar1.Step = 20;
+            this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
+            this.progressBar1.TabIndex = 0;
+            // 
+            // dci_basicInfo
+            // 
+            this.dci_basicInfo.Control = this.basicInfoPanel;
+            this.dci_basicInfo.Name = "dci_basicInfo";
+            this.dci_basicInfo.Text = "基本信息";
+            // 
+            // bar6
+            // 
+            this.bar6.AccessibleDescription = "DotNetBar Bar (bar6)";
+            this.bar6.AccessibleName = "DotNetBar Bar";
+            this.bar6.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
+            this.bar6.AutoSyncBarCaption = true;
+            this.bar6.CloseSingleTab = true;
+            this.bar6.Controls.Add(this.warningPanel);
+            this.bar6.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.bar6.GrabHandleStyle = DevComponents.DotNetBar.eGrabHandleStyle.Caption;
+            this.bar6.IsMaximized = false;
+            this.bar6.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
+            this.dci_warning});
+            this.bar6.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
+            this.bar6.Location = new System.Drawing.Point(3, 226);
+            this.bar6.Name = "bar6";
+            this.bar6.Size = new System.Drawing.Size(320, 417);
+            this.bar6.Stretch = true;
+            this.bar6.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
+            this.bar6.TabIndex = 1;
+            this.bar6.TabStop = false;
+            this.bar6.Text = "警告与提示";
+            // 
             // warningPanel
             // 
             this.warningPanel.DisabledBackColor = System.Drawing.Color.Empty;
             this.warningPanel.Location = new System.Drawing.Point(3, 23);
             this.warningPanel.Name = "warningPanel";
-            this.warningPanel.Size = new System.Drawing.Size(176, 373);
+            this.warningPanel.Size = new System.Drawing.Size(314, 391);
             this.warningPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
             this.warningPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
             this.warningPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
@@ -458,12 +691,6 @@
             this.warningPanel.Style.GradientAngle = 90;
             this.warningPanel.TabIndex = 26;
             // 
-            // dci_basicInfo
-            // 
-            this.dci_basicInfo.Control = this.basicInfoPanel;
-            this.dci_basicInfo.Name = "dci_basicInfo";
-            this.dci_basicInfo.Text = "基本信息";
-            // 
             // dci_warning
             // 
             this.dci_warning.Control = this.warningPanel;
@@ -474,9 +701,9 @@
             // 
             this.dockSite8.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
             this.dockSite8.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.dockSite8.Location = new System.Drawing.Point(0, 449);
+            this.dockSite8.Location = new System.Drawing.Point(0, 668);
             this.dockSite8.Name = "dockSite8";
-            this.dockSite8.Size = new System.Drawing.Size(778, 0);
+            this.dockSite8.Size = new System.Drawing.Size(1194, 0);
             this.dockSite8.TabIndex = 7;
             this.dockSite8.TabStop = false;
             // 
@@ -486,7 +713,7 @@
             this.dockSite5.Dock = System.Windows.Forms.DockStyle.Left;
             this.dockSite5.Location = new System.Drawing.Point(0, 25);
             this.dockSite5.Name = "dockSite5";
-            this.dockSite5.Size = new System.Drawing.Size(0, 424);
+            this.dockSite5.Size = new System.Drawing.Size(0, 643);
             this.dockSite5.TabIndex = 4;
             this.dockSite5.TabStop = false;
             // 
@@ -494,9 +721,9 @@
             // 
             this.dockSite6.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
             this.dockSite6.Dock = System.Windows.Forms.DockStyle.Right;
-            this.dockSite6.Location = new System.Drawing.Point(778, 25);
+            this.dockSite6.Location = new System.Drawing.Point(1194, 25);
             this.dockSite6.Name = "dockSite6";
-            this.dockSite6.Size = new System.Drawing.Size(0, 424);
+            this.dockSite6.Size = new System.Drawing.Size(0, 643);
             this.dockSite6.TabIndex = 5;
             this.dockSite6.TabStop = false;
             // 
@@ -507,7 +734,7 @@
             this.dockSite7.Dock = System.Windows.Forms.DockStyle.Top;
             this.dockSite7.Location = new System.Drawing.Point(0, 0);
             this.dockSite7.Name = "dockSite7";
-            this.dockSite7.Size = new System.Drawing.Size(778, 25);
+            this.dockSite7.Size = new System.Drawing.Size(1194, 25);
             this.dockSite7.TabIndex = 6;
             this.dockSite7.TabStop = false;
             // 
@@ -526,7 +753,7 @@
             this.bar1.Location = new System.Drawing.Point(0, 0);
             this.bar1.MenuBar = true;
             this.bar1.Name = "bar1";
-            this.bar1.Size = new System.Drawing.Size(778, 24);
+            this.bar1.Size = new System.Drawing.Size(1194, 24);
             this.bar1.Stretch = true;
             this.bar1.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar1.TabIndex = 0;
@@ -562,7 +789,9 @@
             // 
             this.btn_files.Name = "btn_files";
             this.btn_files.SubItems.AddRange(new DevComponents.DotNetBar.BaseItem[] {
-            this.btn_openFile});
+            this.btn_openFile,
+            this.btn_refreshRecords,
+            this.btn_exportRecords});
             this.btn_files.Text = "文件";
             // 
             // btn_openFile
@@ -570,6 +799,18 @@
             this.btn_openFile.Name = "btn_openFile";
             this.btn_openFile.Text = "打开日志";
             // 
+            // btn_refreshRecords
+            // 
+            this.btn_refreshRecords.Name = "btn_refreshRecords";
+            this.btn_refreshRecords.Text = "刷新出入记录";
+            this.btn_refreshRecords.Click += new System.EventHandler(this.btn_refreshRecords_Click);
+            // 
+            // btn_exportRecords
+            // 
+            this.btn_exportRecords.Name = "btn_exportRecords";
+            this.btn_exportRecords.Text = "导出最近记录";
+            this.btn_exportRecords.Click += new System.EventHandler(this.btn_exportRecords_Click);
+            // 
             // btn_devices
             // 
             this.btn_devices.Name = "btn_devices";
@@ -581,6 +822,7 @@
             // 
             this.btn_linkPLC.Name = "btn_linkPLC";
             this.btn_linkPLC.Text = "连接PLC";
+            this.btn_linkPLC.Click += new System.EventHandler(this.btn_linkPLC_Click);
             // 
             // dockSite3
             // 
@@ -589,7 +831,7 @@
             this.dockSite3.DocumentDockContainer = new DevComponents.DotNetBar.DocumentDockContainer();
             this.dockSite3.Location = new System.Drawing.Point(0, 25);
             this.dockSite3.Name = "dockSite3";
-            this.dockSite3.Size = new System.Drawing.Size(778, 0);
+            this.dockSite3.Size = new System.Drawing.Size(1194, 0);
             this.dockSite3.TabIndex = 2;
             this.dockSite3.TabStop = false;
             // 
@@ -691,7 +933,9 @@
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(778, 449);
+            this.AutoSize = true;
+            this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+            this.ClientSize = new System.Drawing.Size(1194, 668);
             this.Controls.Add(this.dockSite9);
             this.Controls.Add(this.dockSite2);
             this.Controls.Add(this.dockSite1);
@@ -701,23 +945,32 @@
             this.Controls.Add(this.dockSite6);
             this.Controls.Add(this.dockSite7);
             this.Controls.Add(this.dockSite8);
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
             this.Name = "centralController";
             this.Text = "Form1";
+            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
             this.dockSite9.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.bar2)).EndInit();
             this.bar2.ResumeLayout(false);
+            this.NumMachineMonitorPanel.ResumeLayout(false);
             this.testPanel.ResumeLayout(false);
             this.testPanel.PerformLayout();
             this.tableLayoutPanel1.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
-            this.NumMachineMonitorPanel.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.bar4)).EndInit();
+            this.bar4.ResumeLayout(false);
+            this.RecordsMonitorPanel.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.dataGridViewX1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.bar5)).EndInit();
+            this.bar5.ResumeLayout(false);
             this.dockSite2.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.bar3)).EndInit();
             this.bar3.ResumeLayout(false);
+            this.basicInfoPanel.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.bar6)).EndInit();
+            this.bar6.ResumeLayout(false);
             this.dockSite7.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.bar1)).EndInit();
-            ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
             this.ResumeLayout(false);
 
         }
@@ -747,9 +1000,9 @@
         private DevComponents.DotNetBar.DockContainerItem dci_PaymentRecords;
         private DevComponents.DotNetBar.Bar bar2;
         private DevComponents.DotNetBar.PanelDockContainer ParkingSpaceMonitorPanel;
-        private DevComponents.DotNetBar.PanelDockContainer PLCMonitorPanel;
+        private DevComponents.DotNetBar.PanelDockContainer terminalMonitorPanel;
         private DevComponents.DotNetBar.PanelDockContainer RecordsMonitorPanel;
-        private DevComponents.DotNetBar.DockContainerItem dci_PLC;
+        private DevComponents.DotNetBar.DockContainerItem dci_terminal;
         private DevComponents.DotNetBar.DockContainerItem dci_NumMachine;
         private DevComponents.DotNetBar.DockContainerItem dci_ParkingSpace;
         private DevComponents.DotNetBar.DockContainerItem dci_ParkingRecords;
@@ -761,7 +1014,6 @@
         private DevComponents.DotNetBar.PanelDockContainer NumMachineMonitorPanel;
         private DevComponents.DotNetBar.PanelDockContainer panelDockContainer10;
         private DevComponents.DotNetBar.DockContainerItem dci_basicInfo;
-        private System.Windows.Forms.BindingSource bindingSource1;
         private DevComponents.DotNetBar.PanelDockContainer paymentPanel;
         private DevComponents.DotNetBar.DockContainerItem dci_payment;
         private DevComponents.DotNetBar.ButtonItem btn_exit;
@@ -777,6 +1029,21 @@
         private System.Windows.Forms.Button button1;
         private System.Windows.Forms.TextBox textBox2;
         private System.Windows.Forms.TextBox textBox1;
+        private DevComponents.DotNetBar.Controls.DataGridViewX dataGridViewX1;
+        private DevComponents.DotNetBar.ButtonItem btn_refreshRecords;
+        private DevComponents.DotNetBar.ButtonItem btn_exportRecords;
+        private System.Windows.Forms.DataGridViewTextBoxColumn parkingRecordsID;
+        private System.Windows.Forms.DataGridViewTextBoxColumn userID;
+        private System.Windows.Forms.DataGridViewTextBoxColumn numberPlate;
+        private System.Windows.Forms.DataGridViewTextBoxColumn parkingSpaceID;
+        private System.Windows.Forms.DataGridViewTextBoxColumn realParkTime;
+        private System.Windows.Forms.DataGridViewTextBoxColumn realGetTime;
+        private System.Windows.Forms.DataGridViewTextBoxColumn receiptNum;
+        private System.Windows.Forms.DataGridViewTextBoxColumn parkingPrice;
+        private DevComponents.DotNetBar.Bar bar4;
+        private DevComponents.DotNetBar.Bar bar5;
+        private DevComponents.DotNetBar.Bar bar6;
+        private DevComponents.DotNetBar.Controls.TextBoxX tbx_sysInfo;
     }
 }
 

+ 256 - 0
PLCLinker/centralController/FormCentralController.cs

@@ -0,0 +1,256 @@
+using DevComponents.DotNetBar.Controls;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Net;
+using System.Runtime.InteropServices;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Excel = Microsoft.Office.Interop.Excel;
+
+namespace centralController
+{
+    public partial class centralController : Form
+    {
+        /// <summary>
+        /// 窗体初始化
+        /// </summary>
+        public centralController()
+        {
+            InitializeComponent();
+            if (Monitor.Monitor.ins == null)
+            {
+                Monitor.Monitor.ins = new Monitor.Monitor(flowLayoutPanel1.Handle);
+                Monitor.Monitor.ins.Start();
+            }
+            //进度条测试
+            Task.Factory.StartNew(() =>
+            {
+                int temp = 0;
+                while (true)
+                {
+                    if (temp != Monitor.Monitor.initializeState)
+                    {
+                        temp = Monitor.Monitor.initializeState;
+                        progressBar1.Invoke(new Action(() => { progressBar1.Value = temp * 20; }));
+                    }
+                    if (temp == 5) { break; }
+                    Thread.Sleep(200);
+                }
+            });
+            //TimerCallback tc = new TimerCallback(RefreshRecords);
+            //System.Threading.Timer t = new System.Threading.Timer(tc,null,5000,1000);
+            System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
+            timer.Interval = 5000;
+            timer.Tick += new EventHandler(RefreshRecords);
+            timer.Start();
+            UpdateBasicInfo();
+        }
+
+        /// <summary>
+        /// 结束按钮
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void btn_exit_Click(object sender, EventArgs e)
+        {
+            DialogResult result = MessageBox.Show("确定退出系统吗?", "温馨提示", MessageBoxButtons.OKCancel);
+            if (result.Equals(DialogResult.OK))
+            {
+                Monitor.Monitor.ins.Stop();
+                Close();
+            }
+        }
+        /// <summary>
+        /// 获取号牌测试
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void button1_Click(object sender, EventArgs e)
+        {
+            string ip = textBox1.Text;
+            IPAddress temp;
+            if (IPAddress.TryParse(ip, out temp))
+            {
+                string license = "";
+                Task.Factory.StartNew(() =>
+                {
+                    license = Monitor.Monitor.numMachineLinker.GetLicensePlate(1);
+                    if (textBox2.InvokeRequired)
+                    {
+                        textBox2.Invoke(new Action(() => { textBox2.Text = license; }));
+                    }
+                    else
+                    {
+                        textBox2.Text = license;
+                    }
+
+                });
+
+
+            }
+        }
+        /// <summary>
+        /// 手动连接PLC
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void btn_linkPLC_Click(object sender, EventArgs e)
+        {
+            if (!Monitor.Monitor.PLC.isConnected)
+            {
+                Monitor.Monitor.PLC.PLCConnect();
+            }
+        }
+        /// <summary>
+        /// 刷新停车记录按钮
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void btn_refreshRecords_Click(object sender, EventArgs e)
+        {
+            RefreshRecords(null, null);
+        }
+        /// <summary>
+        /// 刷新停车记录显示
+        /// </summary>
+        /// <param name="data"></param>
+        private void RefreshRecords(object data, EventArgs e)
+        {
+            dataGridViewX1.Rows.Clear();
+            List<object[]> list = Monitor.Monitor.GetParkingRecords();
+            List<object[]>.Enumerator listEnumer = list.GetEnumerator();
+            while (listEnumer.MoveNext())
+            {
+                dataGridViewX1.Rows.Add(listEnumer.Current);
+            }
+        }
+        /// <summary>
+        /// 导出excel文件
+        /// </summary>
+        /// <param name="dataGridView1"></param>
+        /// <param name="path">绝对路径,"D:\\abc\\xxx.xls"</param>
+        private void Export(DataGridViewX dataGridView1, string path)
+        {
+            try
+            {
+                if (dataGridView1.Rows.Count == 0)
+                {
+                    return;
+                }
+                Excel.Application excel = new Excel.Application();
+                excel.Visible = false;
+                Excel.Workbook workbook = excel.Workbooks.Add(true);
+                Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
+                for (int i = 0; i < dataGridView1.Columns.Count; i++)
+                {
+                    if (dataGridView1.Columns[i].Visible == true)
+                    {
+                        worksheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
+                    }
+                }
+                for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
+                {
+                    System.Windows.Forms.Application.DoEvents();
+                    for (int j = 0; j < dataGridView1.Columns.Count; j++)
+                    {
+                        if (dataGridView1.Columns[j].Visible == true)
+                        {
+                            if (dataGridView1[j, i].ValueType == typeof(string))
+                            {
+                                worksheet.Cells[i + 2, j + 1] = "'" + dataGridView1[j, i].Value.ToString();
+                            }
+                            else
+                            {
+                                worksheet.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString();
+                            }
+                        }
+                    }
+                }
+                //设置禁止弹出保存和覆盖的询问提示框  
+                excel.DisplayAlerts = false;
+                excel.AlertBeforeOverwriting = false;
+                worksheet.Cells.Columns.AutoFit();
+                //保存写入的数据,这里还没有保存到磁盘
+                workbook.Saved = true;
+                if (Directory.Exists(path))
+                {
+
+                    //设置新建文件路径及名称
+                    string savePath = path + DateTime.Now.ToString("yyyy-MM-dd") + "停车记录.xls";
+
+                    //创建文件
+                    FileStream file = new FileStream(savePath, FileMode.CreateNew);
+
+                    //关闭释放流,不然没办法写入数据
+                    file.Close();
+                    file.Dispose();
+
+                    //保存到指定的路径
+                    workbook.SaveCopyAs(savePath);
+                }
+
+                workbook.Close(false, Type.Missing, Type.Missing);
+
+                //确保Excel进程关闭  
+                excel.Quit();
+                //释放 COM 对象
+                Marshal.ReleaseComObject(worksheet);
+                Marshal.ReleaseComObject(workbook);
+                Marshal.ReleaseComObject(excel);
+                excel = null;
+                worksheet = null;
+                workbook = null;
+                GC.Collect();//如果不使用这条语,excel会无法正常退出
+            }
+            catch (Exception e) { Console.WriteLine("导出excel文件异常," + e.Message); }
+
+        }
+        /// <summary>
+        /// 更新基本信息
+        /// </summary>
+        private void UpdateBasicInfo()
+        {
+            string sysInfo = Monitor.Monitor.GetSysInfo();
+            tbx_sysInfo.Text = sysInfo;
+        }
+        /// <summary>
+        /// 导出停车记录按钮
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void btn_exportRecords_Click(object sender, EventArgs e)
+        {
+            Export(dataGridViewX1, Directory.GetCurrentDirectory()+"\\");
+            Console.WriteLine(Directory.GetCurrentDirectory()+"\\");
+        }
+
+        private void flowLayoutPanel1_Resize(object sender, EventArgs e)
+        {
+            Control.ControlCollection flpCC = flowLayoutPanel1.Controls;
+            try
+            {
+                for(int i = 0; i < flpCC.Count; i++)
+                {
+                    flpCC[i].Width = (int)(flowLayoutPanel1.Width * 0.3);
+                    flpCC[i].Height = (int)(flowLayoutPanel1.Height * 0.49);
+                    Console.WriteLine("flp::"+flowLayoutPanel1.Width+","+flowLayoutPanel1.Height);
+                    //Console.WriteLine("tlp--"+flpCC[i].Width + "," + flpCC[i].Height);
+                    Control.ControlCollection tlpCC = flpCC[i].Controls;
+                    if (tlpCC.Count == 2)
+                    {
+                        tlpCC[0].Width = flpCC[i].Width - 5;
+                        tlpCC[0].Height = (int)(flpCC[i].Height * 0.79);
+                        tlpCC[1].Width = flpCC[i].Width - 5;
+                        tlpCC[1].Height = (int)(flpCC[i].Height * 0.19);
+                        //Console.WriteLine(tlpCC[0].Width + "," + tlpCC[0].Height);
+                        //Console.WriteLine(tlpCC[1].Width + "," + tlpCC[1].Height);
+                    }
+                }
+            }
+            catch (Exception ex) { Console.WriteLine(ex.Message); }
+
+        }
+    }
+}

+ 24 - 3
PLCLinker/centralController/Form1.resx

@@ -120,10 +120,31 @@
   <metadata name="dotNetBarManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
+  <metadata name="parkingRecordsID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="userID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="numberPlate.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="parkingSpaceID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="realParkTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="realGetTime.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="receiptNum.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <metadata name="parkingPrice.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>100</value>
   </metadata>
-  <metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>190, 17</value>
-  </metadata>
 </root>

+ 194 - 0
PLCLinker/centralController/LOG/LogManager.cs

@@ -0,0 +1,194 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+using System.Configuration;
+
+namespace parkMonitor.LOG
+{
+    /// <summary>
+    /// 日志管理
+    /// </summary>
+    public class LogManager
+    {
+        public static string logAddressStr = "LogAddress";
+        public static string logAddress;
+        DateTime time;                                        //文件创建时间
+        private string logFileExtName = "log";     //日志文件扩展名
+        private Encoding logFileEncoding = Encoding.UTF8;   //日志文件编码格式
+        private string logFileName = string.Empty;  //日志文件名
+        private string logPath = "";            //日志文件路径
+        private bool writeLogTime = true;     //log文件是否写时间
+        private bool writeStatus = false;        //是否写入标志位
+        private static object obj = new object();
+        /// <summary>
+        /// 配置文件初始化
+        /// </summary>
+        public static void Init()
+        {
+            try
+            {
+                logAddress = ConfigurationManager.AppSettings[logAddressStr];
+            }
+            catch
+            {
+                Console.WriteLine("配置文件有误");
+            }
+        }
+        /// <summary>
+        /// 日志文件路径
+        /// </summary>
+        public string CreateLogPath()
+        {
+            if (logPath == null || logPath == string.Empty || time.ToString("yyyy-MM-dd") != System.DateTime.Now.ToString("yyyy-MM-dd"))
+            {
+                try
+                {
+                    time = System.DateTime.Now;
+                    logPath = System.IO.Path.Combine(logAddress, time.ToString("yyyy-MM-dd"));
+                }
+                catch
+                {
+                    Console.WriteLine("路径合成失败");
+                }
+            }
+            if (!logPath.EndsWith(@"\"))
+            {
+                logPath += @"\";
+            }
+            if (!Directory.Exists(logPath))
+            {
+                try
+                {
+                    Directory.CreateDirectory(logPath);
+                }
+                catch
+                {
+                    Console.WriteLine("创建文件路径失败");
+                }
+            }
+            return logPath;
+        }
+        /// <summary>
+        /// 写日志
+        /// </summary>
+        public void WriteLog(LogType logType, string logFile, string msg)
+        {
+            CreateLogPath();
+            lock (obj)
+            {
+                try
+                {
+                    //创建log文件
+                    logFileName = string.Format("{0}{1}.{2}", logPath, logType, this.logFileExtName);
+                    using (StreamWriter sw = new StreamWriter(logFileName, true, logFileEncoding))
+                    {
+                        //是否写时间
+                        if (logType == LogType.database)
+                        {
+                            writeLogTime = false;
+                        }
+                        else
+                        {
+                            writeLogTime = true;
+                        }
+                        ////sql类型
+                        //if (logType == LogType.DATABASE)
+                        //{
+                        //    writeStatus = true;
+                        //}
+                        //else
+                        //{
+                        //    writeStatus = false;
+                        //}
+                        if (writeLogTime)
+                        {
+                            sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:") + logFile + ":" + msg);
+                        }
+                        else
+                        {
+                            sw.WriteLine(logFile + ":" + msg);
+
+                        }
+                    }
+                }
+                catch { }
+            }
+        }
+        /// <summary>
+        /// log类型不定
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="logFile"></param>
+        /// <param name="msg"></param>
+        public void WriteLog(LogType logType, LogFile logFile, string msg)
+        {
+            this.WriteLog(logType, logFile.ToString(), msg);
+        }
+        /// <summary>
+        /// log类型为null
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="msg"></param>
+        public void WriteLog(LogType logType, string msg)
+        {
+            this.WriteLog(logType, string.Empty, msg);
+        }
+        /// <summary>
+        /// 读日志文件
+        /// </summary>
+        /// <param name="sqlStatus"></param>
+        /// <param name="sqlMsg"></param>
+        public void ReadLog(out string sqlStatus, out string sqlMsg, out int count)
+        {
+            sqlStatus = null;
+            sqlMsg = null;
+            count = 0;
+            string date = System.DateTime.Now.ToString("yyyy-MM-dd");
+            string filePath = logAddress + "\\\\" + date + "\\\\" + "DATABASE.log";
+            try
+            {
+                List<string> logLines = null;
+                if (File.Exists(filePath))
+                {
+                    logLines = new List<string>(File.ReadAllLines(filePath));
+                }
+                if (logLines != null)
+                {
+                    count = logLines.Count;
+                    string logLine = logLines[0];
+                    sqlStatus = logLine.Substring(0, 1);
+                    sqlMsg = logLine.Substring(2, logLine.Length - 2);
+                    logLines.RemoveAt(0);
+                    File.WriteAllLines(filePath, logLines.ToArray());
+                }
+            }
+            catch (Exception e) { Console.WriteLine(e.Message); }
+        }
+
+
+
+    }
+    /// <summary>
+    /// log类型
+    /// </summary>
+    public enum LogFile
+    {
+        LOG,
+        RESET,
+        ERROR,
+        WARNING,
+        INFO,
+        ERROR_NUMBERPLATE
+    }
+    /// <summary>
+    /// log文件类型
+    /// </summary>
+    public enum LogType
+    {
+        database,
+        process
+    }
+}

+ 25 - 0
PLCLinker/centralController/LOG/LogTest.cs

@@ -0,0 +1,25 @@
+//using System;
+//using System.Collections.Generic;
+//using System.Linq;
+//using System.Text;
+//using System.Threading.Tasks;
+
+//namespace parkMonitor.LOG
+//{
+//    //日志测试用例
+//    class LogTest
+//    {
+//        public void TestMethod()
+//        {
+//            //三种方式写入文件
+//            //第一种:WriteLog( string msg) 默认是INFO类型
+//            //第二种:WriteLog(string logFile,string msg) log类型和信息
+//            //第三种:WriteLog(LogFile logFile,string msg) 枚举的log类型以及相应信息
+//            LogFile logFile = LogFile.ERROR;
+//            string msg = "2";
+//            Log.WriteLog("",logFile, msg);
+//            Log.WriteLog("",msg);
+//            Log.WriteLog("WARNING", "22");
+//        }
+//    }
+//}

+ 87 - 0
PLCLinker/centralController/LOG/log.cs

@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace parkMonitor.LOG
+{
+    public static class Log
+    {
+        private static LogManager logManager;
+        static Log()
+        {
+            LogManager.Init();
+            logManager = new LogManager();
+        }
+        /// <summary>
+        /// 写文件类型
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="logFile"></param>
+        /// <param name="msg"></param>
+        public static void WriteLog(LogType logType, LogFile logFile, string msg)
+        {
+            try
+            {
+                logManager.WriteLog(logType, logFile, msg);
+            }
+            catch
+            {
+
+            }
+        }
+        /// <summary>
+        /// 文件类型为null
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="msg"></param>
+        public static void WriteLog(LogType logType, string msg)
+        {
+            try
+            {
+                logManager.WriteLog(logType, string.Empty, msg);
+            }
+            catch
+            {
+
+            }
+        }
+        /// <summary>
+        /// 数据库异常的标志位
+        /// 0表示update,1表示insert
+        /// </summary>
+        /// <param name="logType"></param>
+        /// <param name="status"></param>
+        /// <param name="msg"></param>
+        public static void WriteLog(LogType logType, string status, string msg)
+        {
+            try
+            {
+                logManager.WriteLog(logType, status, msg);
+            }
+            catch
+            {
+
+            }
+        }
+        /// <summary>
+        /// 读日志文件
+        /// </summary>
+        /// <param name="sqlStatus"></param>
+        /// <param name="sqlMsg"></param>
+        /// <param name="count"></param>      
+        public static void ReadLog(out string sqlStatus, out string sqlMsg,out int count)
+        {
+            sqlStatus = null;
+            sqlMsg = null;
+            count = 0;
+            try
+            {
+                logManager.ReadLog(out sqlStatus,out sqlMsg,out count);
+            }
+            catch { }
+        }
+
+    }
+}

+ 2 - 0
PLCLinker/centralController/Monitor/IMonitor.cs

@@ -1,3 +1,5 @@
+using System.Collections.Generic;
+
 namespace Monitor
 {
 	public interface IMonitor

+ 177 - 5
PLCLinker/centralController/Monitor/Monitor.cs

@@ -1,10 +1,16 @@
 using BroadcastModule;
-using DatabaseDLL;
+using db;
 using Monitor;
+using MySql.Data.MySqlClient;
 using NumMachine;
+using parkMonitor.language;
+using parkMonitor.model;
 using PLCS7;
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
+using System.Management;
+using System.Net;
 using System.Threading;
 using System.Threading.Tasks;
 using WebServer;
@@ -99,10 +105,12 @@ namespace Monitor
                         }
                         else
                         {
+                            //初始化终端信息列表
                             Terminal.Terminal.terminalInfo.Clear();
                             for (int i = 0; i < plcTerminalCount; i++)
                             {
                                 Terminal.Terminal.terminalInfo.Add((TerminalStru)received[i]);
+                                Terminal.Terminal.termUsedMap.Add(((TerminalStru)received[i]).terminalID, false);
                             }
                         }
                     }
@@ -111,15 +119,17 @@ namespace Monitor
                     try
                     {
                         received = PLC.ReadFromPLC(PLCDataType.central, 0);
-                        if (received.Count>0&&!mainBlockInfo.Equals(received[0]))
+                        if (received.Count > 0 && !mainBlockInfo.Equals(received[0]))
                         {
                             mainBlockInfo = (MainBlockStru)received[0];
                         }
-                    }catch(Exception e) { Console.WriteLine("PLC监控中控数据," + e.Message); }
+                    }
+                    catch (Exception e) { Console.WriteLine("PLC监控中控数据," + e.Message); }
                     //最后获得所有车位信息
                     try
                     {
                         received = PLC.ReadFromPLC(PLCDataType.parkingSpace, 0);
+                        //Console.WriteLine(parkingSpaceInfo.Count+","+ plcParkingSpaceCount);
                         //车位总数相同
                         if (parkingSpaceInfo.Count == plcParkingSpaceCount)
                         {
@@ -147,6 +157,106 @@ namespace Monitor
             }
         }
 
+        /// <summary>
+        /// CPU名
+        /// </summary>
+        /// <returns></returns>
+        private static string getCPUName()
+        {
+            try
+            {
+                string str = string.Empty;
+                ManagementClass mcCPU = new ManagementClass("Win32_Processor");
+                ManagementObjectCollection mocCPU = mcCPU.GetInstances();
+                foreach (ManagementObject m in mocCPU)
+                {
+                    string name = m["Name"].ToString();
+                    return name;
+                }
+            }
+            catch { }
+
+            return "";
+        }
+
+        /// <summary>
+        /// 操作系统版本
+        /// </summary>
+        public static string getOsVersion()
+        {
+            string str = "Windows 10";
+            try
+            {
+                string hdId = string.Empty;
+                ManagementClass hardDisk = new ManagementClass("Win32_OperatingSystem");
+                ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
+                foreach (ManagementObject m in hardDiskC)
+                {
+                    str = m["Name"].ToString().Split('|')[0].Replace("Microsoft", "").Trim();
+                    break;
+                }
+            }
+            catch
+            {
+
+            }
+            return str;
+        }
+
+        /// <summary>
+        /// 显卡名
+        /// </summary>
+        public static string getGPUName()
+        {
+            string result = "";
+            try
+            {
+
+                ManagementClass hardDisk = new ManagementClass("Win32_VideoController");
+                ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
+                foreach (ManagementObject m in hardDiskC)
+                {
+                    result = m["VideoProcessor"].ToString();
+                    break;
+                }
+            }
+            catch
+            {
+
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 获取系统内存大小
+        /// </summary>
+        public static string getMenSize()
+        {
+            ManagementObjectSearcher searcher = new ManagementObjectSearcher();   //用于查询一些如系统信息的管理对象 
+            searcher.Query = new SelectQuery("Win32_PhysicalMemory", "", new string[] { "Capacity" });//设置查询条件 
+            ManagementObjectCollection collection = searcher.Get();   //获取内存容量 
+            ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator();
+
+            long capacity = 0;
+            while (em.MoveNext())
+            {
+                ManagementBaseObject baseObj = em.Current;
+                if (baseObj.Properties["Capacity"].Value != null)
+                {
+                    try
+                    {
+                        capacity += long.Parse(baseObj.Properties["Capacity"].Value.ToString());
+                    }
+                    catch
+                    {
+                        return "-GB";
+                    }
+                }
+            }
+            int gb = 1024 * 1024 * 1024;
+            return ((double)capacity / gb).ToString("0.0") + "GB";
+        }
+
         //************************************ 公有方法 **********************************
         public Monitor(IntPtr flpHandle)
         {
@@ -175,6 +285,59 @@ namespace Monitor
 
         }
 
+        public static string GetSysInfo()
+        {
+            string info = "";
+            Language lng = Language.ins;
+            try
+            {
+                string endl = "\r\n";
+                info += lng.autoPackSys + " " + lng.centralPort + endl+ endl;
+                info += lng.version + ":" + SysConst.version() + endl + endl;
+
+                info += lng.hostNmae + ":" + Dns.GetHostName() + endl + endl;
+                info += lng.os + ":" + getOsVersion() + endl + endl;
+                info += lng.cpu + ":" + getCPUName() + endl + endl;
+                info += lng.mem + ":" + getMenSize() + endl + endl;
+                info += lng.gpu + ":" + getGPUName() + endl + endl;
+            }
+            catch (Exception) { }
+            return info;
+        }
+
+        public static List<object[]> GetParkingRecords()
+        {
+            DateTime now = DateTime.Now;
+            DateTime yesterday = DateTime.Now - (new TimeSpan(1, 0, 0, 0));
+            DateTime twoDaysAgo = DateTime.Now - (new TimeSpan(2, 0, 0, 0));
+            string getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice from parkingrecords where realParkTime like '" + yesterday.ToString("yyyy-MM-dd") + "' or '" + now.ToString("yyyy-MM-dd") + "' or '" + twoDaysAgo.ToString("yyyy-MM-dd") + "';";
+            MySqlDataReader reader = localDBOper.Query(getParkingRecordsSql);
+            List<object[]> result = new List<object[]>();
+            while (reader != null && reader.Read())
+            {
+                if (reader.HasRows)
+                {
+                    object[] temp = new object[reader.FieldCount];
+                    reader.GetValues(temp);
+                    result.Add(temp);
+                }
+            }
+            try
+            {
+                if (reader != null) {
+                    reader.Close();
+                    reader.Dispose();
+                }
+            }
+            catch { }
+            return result;
+        }
+
+        public static List<object[]> GetOrderRecords()
+        {
+            return null;
+        }
+
         public void Start()
         {
             if (flpHandle != IntPtr.Zero)
@@ -188,9 +351,10 @@ namespace Monitor
                 {
                     sysInitializer.Init(flpHandle);
                 });
-                
+
                 //更新PLC数据
-                Task.Factory.StartNew(()=> {
+                Task.Factory.StartNew(() =>
+                {
                     PLCUpdate();
                 });
             }
@@ -202,5 +366,13 @@ namespace Monitor
         }
     }
 
+    //public class ParkingRecord
+    //{
+    //    int parkingRecordsID;
+    //    int userID;
+    //    string numberPlate;
+    //    int parkingSpaceID;
+
+    //}
 }
 

+ 41 - 28
PLCLinker/centralController/Monitor/SystemInitializer.cs

@@ -5,9 +5,10 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using BroadcastModule;
-using DatabaseDLL;
+using db;
 using MySql.Data.MySqlClient;
 using NumMachine;
+using parkMonitor.LOG;
 using parkMonitor.tools;
 using PLCS7;
 using S7.Net;
@@ -24,6 +25,7 @@ namespace Monitor
         /// <returns></returns>
         internal void Init(IntPtr flpHandle)
         {
+            Log.WriteLog(LogType.process, LogFile.INFO, "***************** 初始化开始 ****************");
             bool initStatus = false;
             int retryCount = 0;
             string remoteDBConnStr, localDBConnStr;
@@ -58,10 +60,10 @@ namespace Monitor
             }
             catch (Exception e) { Console.WriteLine("初始化," + e.Message); return; }
 
-            //initStatus = initStatus && PLCInit(retryCount);
+            initStatus = initStatus && PLCInit(retryCount);
             //PLC初始化结束,进入状态2
-            //if (!initStatus) { return; }
-            //else { Monitor.initializeState = 2; }
+            if (!initStatus) { return; }
+            else { Monitor.initializeState = 2; }
 
             //初始化数据库对象
             Monitor.remoteDBOper = new DBOperation(remoteDBConnStr, DBtimeout);
@@ -79,25 +81,32 @@ namespace Monitor
             if (!initStatus) { return; }
             else { Monitor.initializeState = 4; }
 
+            #region 测试数据库操作
             ////*******测试数据库操作
-            string sql = "select vehicleTypeID,numberPlate from vehicle where numberPlate = '鄂A11111';";
-            MySqlDataReader reader = null;
-            object[] objs = null;
-            try
-            {
-                reader = Monitor.remoteDBOper.Query(sql);
-                if (reader!= null && reader.Read())
-                {
-                    objs = new object[reader.FieldCount]; 
-                    reader.GetValues(objs);
-                    Console.WriteLine("-------------");
-                    for (int i = 0; i < objs.Length; i++)
-                    {
-                        Console.WriteLine(objs[i] + ",");
-                    }
-                }
-            }
-            catch (Exception e) { Console.WriteLine(e.Message); }
+            //string sql = "select * from parkingrecords where userID = 1;";
+            //MySqlDataReader reader = null;
+            //object[] objs = null;
+            //try
+            //{
+            //    reader = Monitor.remoteDBOper.Query(sql);
+            //    if (reader != null && reader.Read())
+            //    {
+            //        objs = new object[reader.FieldCount];
+            //        reader.GetValues(objs);
+            //        Console.WriteLine("-------------");
+            //        for (int i = 0; i < objs.Length; i++)
+            //        {
+            //            Console.WriteLine(objs[i] + ",");
+            //        }
+            //    }
+            //}
+            //catch (Exception e) { Console.WriteLine(e.Message); }
+            //string updateParkingRecordsSql = "update parkingrecords set parkingRecordsState = 6,realGetTime = '"
+            //                        + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',parkingPrice = '233' where receiptNum='11221122';";
+            //List<string> list = new List<string>();
+            //list.Add(updateParkingRecordsSql);
+            //Monitor.localDBOper.UpdateTransaction(list);
+            #endregion
 
             //初始化计费策略
             PaymentScheme.ins = PaymentScheme.GetCurrentPaymentScheme(1);
@@ -106,17 +115,20 @@ namespace Monitor
             Monitor.numMachineLinker.Start();
             //初始化显示板对象,显示板udp面向无连接
             Monitor.allInOneMachine = new BroadcastBoard(Monitor.allInOneMachineIP, Monitor.allInOneMachinePort);
-            Monitor.allInOneMachine.UpdateTime();
-            Monitor.allInOneMachine.Play(0, BroadcastBoard.PlayMode.download, "欢迎光临");
-            Monitor.allInOneMachine.Play(1, BroadcastBoard.PlayMode.download, "智象停车");
-            Monitor.allInOneMachine.Play(2, BroadcastBoard.PlayMode.download, "date");
-            Monitor.allInOneMachine.Play(3, BroadcastBoard.PlayMode.download, "time");
-            Monitor.allInOneMachine.Refresh();
+            //Monitor.allInOneMachine.UpdateTime();
+            //Monitor.allInOneMachine.Play(0, BroadcastBoard.PlayMode.download, "欢迎光临");
+            //Monitor.allInOneMachine.Play(1, BroadcastBoard.PlayMode.download, "智象停车");
+            //Monitor.allInOneMachine.Play(2, BroadcastBoard.PlayMode.download, "date");
+            //Monitor.allInOneMachine.Play(3, BroadcastBoard.PlayMode.download, "time");
+            //Monitor.allInOneMachine.Refresh();
+
+            Terminal.Terminal.Start();
             //系统初始化结束,进入状态5
             if (!initStatus) { return; }
             else { Monitor.initializeState = 5; }
             mt.EndTiming();
             Console.WriteLine("初始化耗时:" + mt.GetInterval().TotalSeconds);
+            Log.WriteLog(LogType.process, LogFile.INFO, "初始化完成");
             switch (Monitor.initializeState)
             {
                 case 0:
@@ -176,6 +188,7 @@ namespace Monitor
             //关闭数据库
             if (Monitor.remoteDBOper != null) { Monitor.remoteDBOper.DBClose(); }
             if (Monitor.localDBOper != null) { Monitor.localDBOper.DBClose(); }
+            Terminal.Terminal.Stop();
         }
 
     }

+ 13 - 3
PLCLinker/centralController/NumMachine/NumMachine.cs

@@ -605,11 +605,11 @@ namespace NumMachine
                         ipIdMap.TryGetValue(ip, out id);
                         TableLayoutPanel tlp = new TableLayoutPanel()
                         {
-                            Name = "tlp"+ Convert.ToString(id),
+                            Name = "tlp" + Convert.ToString(id),
                             ColumnCount = 1,
                             RowCount = 2,
                             Size = new Size(185, 168),
-                            TabIndex = 3
+                            TabIndex = 3,
                         };
                         Label lb_numMachine = new Label()
                         {
@@ -624,11 +624,21 @@ namespace NumMachine
                         //Control.FromHandle(flowLayoutPanel1).Controls.Add(temp);
                         if (flp.InvokeRequired)
                         {
-                            flp.Invoke(new Action(() => { flp.Controls.Add(tlp); picHandle = temp.Handle; }));
+                            flp.Invoke(new Action(() => {
+                                tlp.Width = (int)(flp.Width * 0.3);
+                                tlp.Height = (int)(flp.Height * 0.49);
+                                temp.Width = tlp.Width - 5;
+                                temp.Height = (int)(tlp.Height * 0.79);
+                                lb_numMachine.Width = tlp.Width - 5;
+                                lb_numMachine.Height = (int)(tlp.Height * 0.19);
+                                flp.Controls.Add(tlp);
+                                picHandle = temp.Handle;
+                            }));
                         }
                         else
                         {
                             flp.Controls.Add(pb);
+                            picHandle = temp.Handle;
                         }
                     }
                     catch (Exception e) { Console.WriteLine(e.Message); }

+ 0 - 4
PLCLinker/centralController/Terminal/ITerminalDisplay.cs

@@ -8,10 +8,6 @@ namespace Terminal
 	{
 		void GetTerminalState();
 
-		List<object> GetParkingRecords();
-
-		List<object> GetOrderRecords();
-
         void Start();
 
         void Stop();

+ 486 - 152
PLCLinker/centralController/Terminal/Terminal.cs

@@ -1,5 +1,5 @@
 using Terminal;
-using DatabaseDLL;
+using db;
 using System.Collections.Generic;
 using System.Threading.Tasks;
 using PLCS7;
@@ -7,13 +7,16 @@ using System;
 using System.Text;
 using MySql.Data.MySqlClient;
 using System.Threading;
+using BroadcastModule;
+using parkMonitor.LOG;
 
 namespace Terminal
 {
-    public class Terminal : ITerminalDisplay
+    public class Terminal
     {
         public static List<TerminalStru> terminalInfo = new List<PLCS7.TerminalStru>();
         public static Dictionary<int, string> idLicMap = new Dictionary<int, string>();
+        public static Dictionary<int, bool> termUsedMap = new Dictionary<int, bool>();
         public static bool isClosing = false;
 
         public void FeeCal()
@@ -26,16 +29,6 @@ namespace Terminal
 
         }
 
-        public List<object> GetParkingRecords()
-        {
-            return null;
-        }
-
-        public List<object> GetOrderRecords()
-        {
-            return null;
-        }
-
         private object SearchPaymentScheme()
         {
             return null;
@@ -51,7 +44,7 @@ namespace Terminal
         /// </summary>
         /// <param name="ts"></param>
         /// <returns></returns>
-        private string GetLicenseFromTerm(TerminalStru ts)
+        private static string GetLicenseFromTerm(TerminalStru ts)
         {
             string header = Encoding.ASCII.GetString(BitConverter.GetBytes(ts.licenseCodeB));
             string identityA = Encoding.ASCII.GetString(BitConverter.GetBytes(ts.licenseCodeC));
@@ -62,12 +55,32 @@ namespace Terminal
                 if (bytes[i] != 0x00) { newBytes.Add(bytes[i]); }
             }
             string identityB = Encoding.ASCII.GetString(newBytes.ToArray());
-            return header + identityA + identityB;
+            Log.WriteLog(LogType.process, LogFile.INFO, "已从终端" + ts.terminalID + "获得号牌:" + header + identityA + identityB);
+            //根据省份对应的两位数字查找汉字
+            string province = header.Substring(0, 2);
+            string provinceIndex = header.Substring(2);
+            string provinceQuerySql = "select NumberPlateHeader from numberplatemapping where mappedString = " + province + ";";
+            MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(provinceQuerySql);
+            try
+            {
+                if (reader != null && reader.Read() && reader.HasRows)
+                {
+                    province = reader.GetString("NumberPlateHeader");
+                    //Console.WriteLine(province);
+                }
+            }
+            catch { }
+            if (reader != null)
+            {
+                reader.Close();
+                reader.Dispose();
+            }
+            return province + provinceIndex + identityA + identityB;
         }
         /// <summary>
         /// 更新所有车位信息
         /// </summary>
-        private void UpdateAllParkingSpace()
+        private static void UpdateAllParkingSpace()
         {
             string findParkingSpace = "select parkingSpaceID from parkingspace;";
             MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(findParkingSpace);
@@ -82,6 +95,15 @@ namespace Terminal
                     }
                 }
             }
+            try
+            {
+                if (reader != null)
+                {
+                    reader.Close();
+                    reader.Dispose();
+                }
+            }
+            catch { }
             List<string> updateSpaceList = new List<string>();
             List<string> insertSpaceList = new List<string>();
             string updateParkingSpace = "";
@@ -106,80 +128,117 @@ namespace Terminal
                 Monitor.Monitor.localDBOper.UpdateTransaction(updateSpaceList);
                 Monitor.Monitor.localDBOper.Insert(insertSpaceList);
             }
-            catch (Exception e) { Console.WriteLine("更新本地所有车位异常" + e.Message); }
+            catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "更新本地所有车位异常"); Console.WriteLine("更新本地所有车位异常" + e.Message); }
         }
         /// <summary>
         /// 更新车辆状态
         /// </summary>
         /// <param name="lic"></param>
         /// <param name="state"></param>
-        private void UpdateVehicle(string lic, int state, int parkingRecordsID, bool park, bool remote)
+        private static void UpdateVehicle(string lic, int state, int parkingRecordsID, bool park, bool remote)
         {
-            MySqlDataReader reader;
-            //查询车辆是否在车辆表中
-            string checkVehicleState = "select * from vehicle where numberPlate = '" + lic + "';";
-            if (!remote)
-            {
-                reader = Monitor.Monitor.localDBOper.Query(checkVehicleState);
-            }
-            else
-            {
-                reader = Monitor.Monitor.remoteDBOper.Query(checkVehicleState);
-            }
-            if (reader != null)
+            if (lic != "")
             {
-                //更新车辆状态
-                string updateVehicleState = "";
-                if (park)
-                {
-                    updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + " where numberPlate = '" + lic + "';";
-                }
-                else
-                {
-                    updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
-                }
-                List<string> list = new List<string>();
-                list.Add(updateVehicleState);
+                MySqlDataReader reader;
+                //查询车辆是否在车辆表中
+                string checkVehicleState = "select * from vehicle where numberPlate = '" + lic + "';";
                 if (!remote)
                 {
-                    Monitor.Monitor.localDBOper.UpdateTransaction(list);
+                    reader = Monitor.Monitor.localDBOper.Query(checkVehicleState);
                 }
                 else
                 {
-                    Monitor.Monitor.localDBOper.UpdateTransaction(list);
+                    reader = Monitor.Monitor.remoteDBOper.Query(checkVehicleState);
                 }
-            }
-            else
-            {
-                //插入车辆
-                string insertVehicleWithState = "";
-                if (park)
+                if (reader != null && reader.Read() && reader.HasRows)
                 {
-                    insertVehicleWithState = "insert into vehicle (numberPlate,vehicleTypeID,vehiclepParkState,parkingRecordsID) values " +
-                    "('" + lic + "',NULL,'" + state + "'," + parkingRecordsID + ");";
+                    //更新车辆状态
+                    string updateVehicleState = "";
+                    if (park)
+                    {
+                        if (parkingRecordsID > 0)
+                            updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + " where numberPlate = '" + lic + "';";
+                        else
+                            updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
+                    }
+                    else
+                    {
+                        updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
+                    }
+                    List<string> list = new List<string>();
+                    list.Add(updateVehicleState);
+                    if (!remote)
+                    {
+                        Monitor.Monitor.localDBOper.UpdateTransaction(list);
+                    }
+                    else
+                    {
+                        Monitor.Monitor.remoteDBOper.UpdateTransaction(list);
+                    }
                 }
                 else
                 {
-                    Console.WriteLine("明显异常,取车发现无车辆");
-                    return;
-                }
+                    //插入车辆
+                    string insertVehicleWithState = "";
+                    if (park)
+                    {
+                        if (parkingRecordsID > 0)
+                            insertVehicleWithState = "insert into vehicle (numberPlate,vehicleTypeID,vehiclepParkState,parkingRecordsID) values " +
+                        "('" + lic + "',NULL,'" + state + "'," + parkingRecordsID + ");";
+                        else
+                            insertVehicleWithState = "insert into vehicle (numberPlate,vehicleTypeID,vehiclepParkState) values " +
+                        "('" + lic + "',NULL,'" + state + "');";
+                    }
+                    else
+                    {
+                        Log.WriteLog(LogType.process, LogFile.ERROR, "取车无法获得车辆信息");
+                        Console.WriteLine("明显异常,取车发现无车辆");
+                        return;
+                    }
 
-                List<string> list = new List<string>();
-                list.Add(insertVehicleWithState);
-                if (!remote)
-                {
-                    Monitor.Monitor.localDBOper.Insert(list);
+                    List<string> list = new List<string>();
+                    list.Add(insertVehicleWithState);
+                    if (!remote)
+                    {
+                        Monitor.Monitor.localDBOper.Insert(list);
+                    }
+                    else
+                    {
+                        Monitor.Monitor.remoteDBOper.Insert(list);
+                    }
                 }
-                else
+                try
                 {
-                    Monitor.Monitor.remoteDBOper.Insert(list);
+                    reader.Close();
+                    reader.Dispose();
                 }
+                catch { }
             }
         }
+        /// <summary>
+        /// 流程结束清除终端相关信息
+        /// </summary>
+        /// <param name="id"></param>
+        private static void ClearTerminal(int id)
+        {
+            TerminalStru tsFromCentral = new TerminalStru
+            {
+                terminalID = (short)id,
+                parkingFee = (short)32767,
+            };
+            TerminalStru tsFromTerminal = new TerminalStru
+            {
+                terminalID = (short)id,
+                btnStatus = -1,
+            };
+            Monitor.Monitor.PLC.WriteToPLC(tsFromCentral, PLCDataType.central);
+            Monitor.Monitor.PLC.WriteToPLC(tsFromTerminal, PLCDataType.terminal);
+        }
+
         /// <summary>
         /// 停车流程,收到号牌机启动后操作过程
         /// </summary>
-        private void ParkNumSubProcess()
+        private static void ParkNumSubProcess()
         {
             int numMachineLaunch = Monitor.Monitor.mainBlockInfo.numMachineLaunch;
             if (numMachineLaunch != 0)
@@ -191,7 +250,7 @@ namespace Terminal
                     {
                         int numReceivedStatus = 0;//1获得,2终止
                         TerminalStru term = terminalInfo[i];
-                        if (term.terminalStatus == (short)0)
+                        if (term.terminalStatus == (short)1)
                         {
                             string license = Monitor.Monitor.numMachineLinker.GetLicensePlate(numMachineLaunch);
                             //未获得号牌,告知PLC终止,告诉终端提示用户重新操作
@@ -204,12 +263,14 @@ namespace Terminal
                                 Monitor.Monitor.PLC.WriteToPLC(mb, PLCDataType.central);
                                 TerminalStru ts = new TerminalStru
                                 {
+                                    terminalID = (short)numMachineLaunch,
                                     paymentStatus = -1,
                                     parkingFee = -1,
                                     userType = -1,
                                     licVerification = (short)2
                                 };
                                 Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
+                                Log.WriteLog(LogType.process, LogFile.ERROR, "未获得号牌");
                             }
                             else
                             {
@@ -225,34 +286,45 @@ namespace Terminal
                                         idLicMap.Add(numMachineLaunch, license);
                                     }
                                 }
-                                //注册
-                                if (term.btnStatus == (short)0)
+                                Log.WriteLog(LogType.process, LogFile.ERROR, "号牌" + license + "已记录");
+
+                                TerminalStru ts = new TerminalStru
+                                {
+                                    terminalID = (short)numMachineLaunch,
+                                    paymentStatus = -1,
+                                    parkingFee = -1,
+                                    userType = -1
+                                };
+                                //注册用户
+                                if (term.btnStatus == (short)2)
                                 {
                                     int userID = term.licenseCodeA;
                                     string userLicense = GetLicenseFromTerm(term);
-                                    TerminalStru ts = new TerminalStru
-                                    {
-                                        paymentStatus = -1,
-                                        parkingFee = -1,
-                                        userType = -1
-                                    };
                                     //与云端数据比对
-                                    string checkNetSql = "select * from user where userID=1;";
+                                    string checkNetSql = "select * from user where userID = 1;";
                                     if (Monitor.Monitor.remoteDBOper.Query(checkNetSql) != null)
                                     {
                                         string userInfoCheckSql = "select * from usercarrelation where userID = '" + userID + "'and numberPlate = '" + userLicense + "';";
                                         MySqlDataReader reader = Monitor.Monitor.remoteDBOper.Query(userInfoCheckSql);
-                                        if (reader == null)
+                                        if (reader != null && reader.Read() && reader.HasRows && userID != 0 && userLicense != "")
                                         {
-                                            ts.licVerification = 2;//验证失败
+                                            ts.licVerification = 1;//验证成功
                                             Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
-                                            numReceivedStatus = 2;
+                                            numReceivedStatus = 1;
+                                            Log.WriteLog(LogType.process, LogFile.INFO, "号牌验证成功");
+                                            try
+                                            {
+                                                reader.Close();
+                                                reader.Dispose();
+                                            }
+                                            catch { }
                                         }
                                         else
                                         {
-                                            ts.licVerification = 1;//验证成功
+                                            ts.licVerification = 2;//验证失败
                                             Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
-                                            numReceivedStatus = 1;
+                                            numReceivedStatus = 2;
+                                            Log.WriteLog(LogType.process, LogFile.WARNING, "号牌验证失败");
                                         }
                                     }
                                     else
@@ -260,8 +332,15 @@ namespace Terminal
                                         ts.licVerification = 1;//网络异常,跳过验证
                                         Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
                                         numReceivedStatus = 1;
+                                        Log.WriteLog(LogType.process, LogFile.ERROR, "网络异常,无法验证号牌");
                                     }
-
+                                }
+                                //非注册用户
+                                else if (term.btnStatus == (short)1)
+                                {
+                                    numReceivedStatus = 1;
+                                    ts.licVerification = 1;
+                                    Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
                                 }
                                 //无论是否注册,皆告知PLC,已获取号牌或比对异常、终止流程
                                 MainBlockStru mb = new MainBlockStru
@@ -269,7 +348,11 @@ namespace Terminal
                                     licenseReceived = (short)numReceivedStatus
                                 };
                                 Monitor.Monitor.PLC.WriteToPLC(mb, PLCDataType.central);
-
+                                //号牌获取结果被清零才跳出
+                                while (Monitor.Monitor.mainBlockInfo.numMachineLaunch != 0)
+                                {
+                                    Thread.Sleep(2000);
+                                }
                             }
                         }
                     }
@@ -279,7 +362,7 @@ namespace Terminal
         /// <summary>
         /// 停车流程,收到PLC停车完成信号后操作过程
         /// </summary>
-        private void ParkCompleteSubProcess()
+        private static void ParkCompleteSubProcess()
         {
             int processAttrib = Monitor.Monitor.mainBlockInfo.parkingRunning;
             int processCompleted = Monitor.Monitor.mainBlockInfo.processCompleted;
@@ -307,6 +390,8 @@ namespace Terminal
                         }
                         //无车位信息则跳出当前循环
                         if (parkingSpaceID == 0) break;
+                        UpdateVehicle(license, 0, 0, true, false);
+                        UpdateVehicle(license, 0, 0, true, true);
                         //插入停车记录
                         string parkingRecordsSql = "";
                         if (term.licenseCodeA != 0)
@@ -322,27 +407,72 @@ namespace Terminal
                         List<string> list = new List<string>();
                         list.Add(parkingRecordsSql);
                         Monitor.Monitor.localDBOper.Insert(list);
+                        Monitor.Monitor.remoteDBOper.Insert(list);
+                        Log.WriteLog(LogType.process, LogFile.INFO, "停车记录已插入");
+                        ////注册用户记录插入云端
+                        //if (term.btnStatus == 0)
+                        //{
+                        //Monitor.Monitor.remoteDBOper.Insert(list);
+                        //}
                         //查询记录ID号
                         string findRecordSql = "select parkingRecordsID from parkingrecords where receiptNum = " + term.receiptNum + ";";
                         MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(findRecordSql);
+                        MySqlDataReader remoteReader = Monitor.Monitor.remoteDBOper.Query(findRecordSql);
                         int parkingRecordsID = 0;
-                        try {
-                            if (reader!=null && reader.Read()) { parkingRecordsID = reader.GetInt32("parkingRecordsID"); }
-                        } catch (Exception) { break; };
+                        int remoteParkingRecordsID = 0;
+                        try
+                        {
+                            if (reader != null && reader.Read())
+                            {
+                                parkingRecordsID = reader.GetInt32("parkingRecordsID");
+                                try
+                                {
+                                    if (reader != null)
+                                    {
+                                        reader.Close();
+                                        reader.Dispose();
+                                    }
+                                }
+                                catch { }
+                            }
+                            if (remoteReader != null && remoteReader.Read())
+                            {
+                                remoteParkingRecordsID = remoteReader.GetInt32("parkingRecordsID");
+                                try
+                                {
+                                    if (remoteReader != null)
+                                    {
+                                        remoteReader.Close();
+                                        remoteReader.Dispose();
+                                    }
+                                }
+                                catch { }
+                            }
+                        }
+                        catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "查询停车记录id失败"); ; Console.WriteLine(e.Message); };
                         //更新本地车辆表
-                        UpdateVehicle(license, parkingRecordsID, 1, true, false);
+                        if (parkingRecordsID != 0)
+                        {
+                            UpdateVehicle(license, 1, parkingRecordsID, true, false);
+                        }
+                        if (remoteParkingRecordsID != 0)
+                        {
+                            UpdateVehicle(license, 1, remoteParkingRecordsID, true, true);
+                        }
+                        Log.WriteLog(LogType.process, LogFile.INFO, "停车记录表已更新");
                         //更新本地车位
                         UpdateAllParkingSpace();
-                        //注册用户加入云端操作
-                        if (term.btnStatus == 0)
+                        while (Monitor.Monitor.mainBlockInfo.processCompleted != 0)
                         {
-                            //string
-                            //Monitor.Monitor.remoteDBOper()
+                            Thread.Sleep(1000);
                         }
+                        //中控清除车牌、凭证号、号牌验证等信息
+                        ClearTerminal(term.terminalID);
                     }
                 }
             }
         }
+
         /// <summary>
         /// 停车相关操作
         /// 1.读取到号牌机启动指令,启动号牌机并根据是否注册用户进行操作
@@ -350,9 +480,9 @@ namespace Terminal
         ///     注册用户,核对号牌与用户关联信息
         /// 2.停车流程结束,写数据库
         /// </summary>
-        private void ParkProcess()
+        /// 
+        private static void ParkProcess()
         {
-            //1.号牌机启动
             Task.Factory.StartNew(() =>
             {
                 while (!isClosing)
@@ -372,7 +502,53 @@ namespace Terminal
             });
         }
 
-        private int FeeCalc(PaymentScheme scheme, DateTime parkTime, TimeSpan orderTimeLength)
+        /// <summary>
+        /// 根据凭证号查询停车记录
+        /// </summary>
+        /// <param name="receipt"></param>
+        /// <param name="recordID"></param>
+        /// <param name="userID"></param>
+        /// <param name="numberPlate"></param>
+        /// <param name="realParkTime"></param>
+        private static bool FindLocalParkingRecord(int receipt, out int recordID, out int userID, out string numberPlate, out string realParkTime)
+        {
+            recordID = 0;
+            userID = 0;
+            numberPlate = "";
+            realParkTime = "";
+            string parkRecordsSql = "select parkingRecordsID,userID,numberPlate,realParkTime from parkingrecords where receiptNum = " + receipt + ";";
+            try
+            {
+                MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(parkRecordsSql);
+                if (reader != null && reader.Read())
+                {
+                    object[] receiver = new object[4];
+                    reader.GetValues(receiver);
+                    recordID = (int)receiver[0];
+                    userID = (int)receiver[1];
+                    numberPlate = (string)receiver[2];
+                    realParkTime = (string)receiver[3];
+                }
+                if (reader != null)
+                {
+                    reader.Close();
+                    reader.Dispose();
+                }
+
+            }
+            catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "根据凭证号查询停车记录失败"); Console.WriteLine(e.Message); return false; }
+            Log.WriteLog(LogType.process, LogFile.INFO, "根据凭证号查询停车记录成功");
+            return true;
+        }
+
+        /// <summary>
+        /// 预约与停车费用计算
+        /// </summary>
+        /// <param name="scheme"></param>
+        /// <param name="parkTime"></param>
+        /// <param name="orderTimeLength"></param>
+        /// <returns></returns>
+        private static int FeeCalc(PaymentScheme scheme, DateTime parkTime, TimeSpan orderTimeLength)
         {
             try
             {
@@ -410,81 +586,235 @@ namespace Terminal
                         parkFee = (days * (int)countingHoursOfDay + previousOffset + currentOffset) * scheme.chargeStandard;
                         break;
                 }
+                Log.WriteLog(LogType.process, LogFile.INFO, "停车费用" + parkFee);
                 return parkFee;
             }
             catch (Exception e) { Console.WriteLine("费用计算异常"); return -1; }
         }
 
         /// <summary>
-        /// 取车相关操作
-        /// 
+        /// 取车计费子操作
         /// </summary>
-        private void FetchProcess()
+        private static void FetchFeeCalcSubProcess()
         {
             int fetchState = Monitor.Monitor.mainBlockInfo.fetchingRunning;
             int receiptNum = 0;
+            int termIndex = -1;
             TerminalStru ts = new TerminalStru();
             for (int i = 0; i < terminalInfo.Count; i++)
             {
                 if (terminalInfo[i].terminalID == Monitor.Monitor.mainBlockInfo.terminalID)
                 {
                     ts = terminalInfo[i];
+                    termIndex = ts.terminalID;
                     receiptNum = ts.receiptNum;
                     break;
                 }
             }
-            //取车状态凭证号不为空,查询数据库计费
-            if (fetchState == 1 && receiptNum != 0)
+            //取车状态凭证号不为空,查询数据库计费
+            if (termIndex != -1 && termUsedMap.Count >= termIndex && termUsedMap.TryGetValue(termIndex, out bool value) && !value && fetchState == 1 && receiptNum != 0)
             {
-                int userID = 0;
-                string numberPlate = "";
-                string realParkTime = "";
-                //1.根据凭证号查询停车记录
-                string parkRecordsSql = "select userID,numberPlate,realParkTime from parkingrecords where receiptNum = "+ receiptNum + ";";
-                try
+                termUsedMap[termIndex] = true;
+                Console.WriteLine("终端编号" + termIndex);
+                Task.Factory.StartNew(() =>
                 {
-                    MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(parkRecordsSql);
-                    if(reader!=null && reader.Read())
+                    int parkingRecordsID = 0;
+                    int remoteParkingRecordsID = 0;
+                    int userID = 0;
+                    string numberPlate = "";
+                    string realParkTime = "";
+                    //1.根据凭证号查询停车记录
+                    if (!FindLocalParkingRecord(receiptNum, out parkingRecordsID, out userID, out numberPlate, out realParkTime))
                     {
-                        object[] receiver = new object[3];
-                        reader.GetValues(receiver);
-                        userID = (int)receiver[0];
-                        numberPlate = (string)receiver[1];
-                        realParkTime = (string)receiver[2];
+                        return;
                     }
-                }
-                catch (Exception e) { Console.WriteLine(e.Message); }
-                //2.根据号牌查询预约记录
-                //3.获取停车时刻并计费发送给PLC,暂时认为皆为普通用户
-                DateTime parkTime = DateTime.Parse(realParkTime);
-                if (PaymentScheme.ins != null)
-                {
-                    int fee = FeeCalc(PaymentScheme.ins, parkTime, new TimeSpan(0));
-                    if (Monitor.Monitor.PLC != null)
+                    string remoteParkRecordsSql = "select parkingRecordsID from parkingrecords where receiptNum = " + receiptNum + ";";
+                    try
                     {
-                        TerminalStru FeeMsg = new TerminalStru {
-                            paymentStatus = (short)-1,
-                            licVerification = (short)-1,
-                            parkingFee = (short)fee,
-                            userType = (short)1
-                        };
-                        Monitor.Monitor.PLC.WriteToPLC(FeeMsg,PLCDataType.central);
+                        MySqlDataReader reader = Monitor.Monitor.remoteDBOper.Query(remoteParkRecordsSql);
+                        if (reader != null && reader.Read())
+                        {
+                            object[] receiver = new object[1];
+                            reader.GetValues(receiver);
+                            remoteParkingRecordsID = (int)receiver[0];
+                        }
+                        if (reader != null)
+                        {
+                            reader.Close();
+                            reader.Dispose();
+                        }
                     }
-                }
-                
-            }
+                    catch (Exception e) { Console.WriteLine(e.Message); }
+                    //本地存在号牌,后续操作
+                    if (numberPlate != "")
+                    {
+                        //2.根据号牌查询车辆月卡信息与预约记录
+                        int orderRecordsID = 0;
+                        int monthCardType = -1;
+                        string monthCardTime = "";
+                        TimeSpan monthCardTimeLength = new TimeSpan(0);
+                        TimeSpan orderTimeLength = new TimeSpan(0);
+                        //本地VIP信息
+                        string vipInfoSql = "select orderRecordsID,monthCardType,monthCardTime from vehicle where numberPlate = '" + numberPlate + "';";
+                        try
+                        {
+                            MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(vipInfoSql);
+                            if (reader != null && reader.Read())
+                            {
+                                object[] receiver = new object[3];
+                                reader.GetValues(receiver);
+                                Console.WriteLine(receiver[2].GetType());
+                                if (!receiver[0].GetType().Equals(typeof(DBNull)))
+                                {
+                                    orderRecordsID = (int)receiver[0];
+                                }
+                                if (!receiver[1].GetType().Equals(typeof(DBNull)))
+                                {
+                                    monthCardType = (int)(UInt32)receiver[1];
+                                }
+                                if (!receiver[2].GetType().Equals(typeof(DBNull)))
+                                {
+                                    monthCardTime = (string)receiver[2];
+                                }
+                                //orderRecordsID = (Int32)receiver[0];
+                                //monthCardType = (Int32)receiver[1];
+                                //monthCardTime = (string)receiver[2];
+                                monthCardTimeLength = DateTime.Parse(monthCardTime) - DateTime.Now;
+                                if (monthCardTimeLength.TotalHours <= 0)
+                                {
+                                    monthCardType = 0;
+                                }
+                                Log.WriteLog(LogType.process, LogFile.INFO, "已获取本地预约与月卡信息");
+                            }
+                            if (reader != null)
+                            {
+                                reader.Close();
+                                reader.Dispose();
+                            }
+                        }
+                        catch (Exception e) { Console.WriteLine(e.Message); }
+                        //云端VIP信息
+                        try
+                        {
+                            MySqlDataReader reader = Monitor.Monitor.remoteDBOper.Query(vipInfoSql);
+                            if (reader != null && reader.Read())
+                            {
+                                object[] receiver = new object[3];
+                                reader.GetValues(receiver);
+                                int cardType = (int)(UInt32)receiver[1];
+                                string CardTime = (string)receiver[2];
+                                TimeSpan t = DateTime.Parse(CardTime) - DateTime.Now;
+                                //云端
+                                if (t.TotalHours > 0 && cardType > monthCardType)
+                                {
+                                    monthCardType = cardType;
+                                    monthCardTimeLength = t;
+                                }
+                                Log.WriteLog(LogType.process, LogFile.INFO, "已获取云端预约与月卡信息");
+                            }
+                            if (reader != null)
+                            {
+                                reader.Close();
+                                reader.Dispose();
+                            }
+                        }
+                        catch (Exception e) { Console.WriteLine(e.Message); }
+
+                        //有预约记录,判断记录有效性,有效则获取预约时长
+                        if (orderRecordsID != 0)
+                        {
+                            //修改orderTimeLength
+                        }
 
+                        //3.获取停车时刻,根据用户类型计费发送给PLC,暂认为无预约
+                        DateTime parkTime = DateTime.Parse(realParkTime);
+                        DateTime currentTime = DateTime.Now;
+                        int fee = 32767;
+                        if (PaymentScheme.ins != null && monthCardType != -1)
+                        {
+                            if (monthCardTimeLength.TotalHours > 0)
+                            {
+                                fee = 0;
+                            }
+                            else
+                            {
+                                fee = FeeCalc(PaymentScheme.ins, parkTime, orderTimeLength);
+                            }
+
+                            if (Monitor.Monitor.PLC != null)
+                            {
+                                TerminalStru FeeMsg = new TerminalStru
+                                {
+                                    terminalID = (short)termIndex,
+                                    paymentStatus = (short)-1,
+                                    licVerification = (short)-1,
+                                    parkingFee = (short)fee,
+                                    userType = (short)(monthCardType + 1)
+                                };
+                                Console.WriteLine(FeeMsg);
+                                Monitor.Monitor.PLC.WriteToPLC(FeeMsg, PLCDataType.central);
+                                Log.WriteLog(LogType.process, LogFile.INFO, "停车费用已发送至PLC");
+                            }
+                        }
+                        //4.等待终端获得收费完成信号且将凭证号清除后,清除收费完成信号并将信息写入数据库
+                        while (!isClosing && termIndex != -1)
+                        {
+                            if (terminalInfo[termIndex-1].receiptNum == 0)
+                            {
+                                Log.WriteLog(LogType.process, LogFile.INFO, "检测到凭证号已被清除");
+                                TerminalStru fetchReset = new TerminalStru
+                                {
+                                    terminalID = (short)termIndex,
+                                    paymentStatus = (short)0,
+                                    licVerification = (short)0,
+                                    parkingFee = (short)32767,
+                                    userType = (short)0
+                                };
+                                Monitor.Monitor.PLC.WriteToPLC(fetchReset, PLCDataType.central);
+                                //更新停车记录
+                                string updateParkingRecordsSql = "update parkingrecords set parkingRecordsState = 6,realGetTime = '"
+                        + currentTime.ToString("yyyy-MM-dd HH:mm:ss") + "',parkingPrice = " + fee + " where receiptNum = '" + receiptNum + "';";
+                                List<string> list = new List<string>();
+                                list.Add(updateParkingRecordsSql);
+                                Monitor.Monitor.localDBOper.UpdateTransaction(list);
+                                Monitor.Monitor.remoteDBOper.UpdateTransaction(list);
+                                //更新车辆状态
+                                UpdateVehicle(numberPlate, 0, parkingRecordsID, false, false);
+                                UpdateVehicle(numberPlate, 0, remoteParkingRecordsID, false, true);
+                                break;
+                            }
+                            Thread.Sleep(1000);
+                        }
+                    }
+                    termUsedMap[termIndex] = false;
+                });
+            }
         }
 
-        public void Start()
+        /// <summary>
+        /// 取车相关操作
+        /// 
+        /// </summary>
+        private static void FetchProcess()
         {
-            //Task.Factory.StartNew(() =>
-            //{
+            Task.Factory.StartNew(() =>
+            {
+                while (!isClosing)
+                {
+                    FetchFeeCalcSubProcess();
+                    Thread.Sleep(Monitor.Monitor.plcRefreshInterval);
+                }
+            });
 
-            //});
         }
 
-        public void Stop()
+        public static void Start()
+        {
+            ParkProcess();
+            FetchProcess();
+        }
+
+        public static void Stop()
         {
             isClosing = true;
         }
@@ -568,24 +898,23 @@ namespace Terminal
 
         public PaymentScheme()
         {
-            ins = new PaymentScheme();
-            ins.paymentSchemeID = 0;
-            ins.schemeType = 0;
-            ins.freeTime = 0;
-            ins.firstChargeTime = 0;
-            ins.firstCharge = 0;
-            ins.chargeInterval = 0;
-            ins.upperBound = 0;
-            ins.eachCharge = 0;
-            ins.overnightCharge = 0;
-            ins.startChargeTime = "";
-            ins.endChargeTime = "";
-            ins.chargeStandard = 0;
-            ins.monthCardCharge = 0;
-            ins.seasonCardCharge = 0;
-            ins.halfYearCardCharge = 0;
-            ins.yearCardCharge = 0;
-            ins.bookCharge = 0;
+            this.paymentSchemeID = 0;
+            this.schemeType = 0;
+            this.freeTime = 0;
+            this.firstChargeTime = 0;
+            this.firstCharge = 0;
+            this.chargeInterval = 0;
+            this.upperBound = 0;
+            this.eachCharge = 0;
+            this.overnightCharge = 0;
+            this.startChargeTime = "";
+            this.endChargeTime = "";
+            this.chargeStandard = 0;
+            this.monthCardCharge = 0;
+            this.seasonCardCharge = 0;
+            this.halfYearCardCharge = 0;
+            this.yearCardCharge = 0;
+            this.bookCharge = 0;
         }
         public PaymentScheme(int pID, int type, int freeTime, int firstChargeTime, int firstCharge, int chargeInterval, int intervalCharge,
             int upperBound, int eachCharge, int overnightCharge, string startChargeTime, string endChargeTime, int chargeStandard,
@@ -625,7 +954,7 @@ namespace Terminal
                     paramArray = new object[reader.FieldCount];
                     reader.GetValues(paramArray);
                     scheme.paymentSchemeID = index;
-                    scheme.schemeType = (int)paramArray[1];
+                    scheme.schemeType = (int)((UInt32)paramArray[1]);
                     scheme.freeTime = (int)paramArray[2];
                     scheme.firstChargeTime = (int)paramArray[3];
                     scheme.firstCharge = (int)paramArray[4];
@@ -643,6 +972,11 @@ namespace Terminal
                     scheme.yearCardCharge = (int)paramArray[16];
                     scheme.bookCharge = (int)paramArray[17];
                 }
+                if (reader != null)
+                {
+                    reader.Close();
+                    reader.Dispose();
+                }
             }
             catch (Exception e) { Console.WriteLine("读取本地计费策略," + e.Message); }
             return scheme;

BIN
PLCLinker/centralController/bin/Release/centralController.exe


+ 6 - 4
PLCLinker/centralController/bin/Release/centralController.exe.config

@@ -7,8 +7,8 @@
     <add key="retryCount" value="3"/>
     <!--数据库信息-->
     <!--<add key="remoteDBConnStr" value="Data Source=59.175.148.85;port=3306;uid=root;pooling=true;max pool size=1024;pwd=x5;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>-->
-    <add key="remoteDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_remote;CharSet=utf8;Allow Zero Datetime=true;"/>
-    <add key="localDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>
+    <add key="remoteDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_cloud;CharSet=utf8;Allow Zero Datetime=true;"/>
+    <add key="localDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_local;CharSet=utf8;Allow Zero Datetime=true;"/>
     <add key="DBtimeout" value="3"/>
     <!--号牌机信息-->
     <add key="192.168.0.20" value="2"/>
@@ -20,8 +20,8 @@
     <add key="plcRack" value="0" />
     <add key="plcSlot" value="1" />
     <!--分别对终端、中控、车位-->
-    <add key="plcDatablockId" value="18,22,20" />
-    <add key="plcTerminalCount" value="6" />
+    <add key="plcDatablockId" value="18,41,20" />
+    <add key="plcTerminalCount" value="1" />
     <add key="plcParkingSpaceCount" value="200" />
     <add key="plcRefreshInterval" value="200"/>
     <!--显示屏信息-->
@@ -31,5 +31,7 @@
     <add key="webPort" value="9000"/>
     <!--车库信息-->
     <add key="garageID" value="1"/>
+    <!--日志写入地址配置文件-->
+    <add key="LogAddress" value="c:\\c#workspace\\LogDemo\\LoggerTest" />
   </appSettings>
 </configuration>

BIN
PLCLinker/centralController/bin/Release/centralController.pdb


+ 22 - 7
PLCLinker/centralController/centralController.csproj

@@ -37,13 +37,15 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>sdk\broadcast\broadcastDLL.dll</HintPath>
     </Reference>
-    <Reference Include="DatabaseDLL">
-      <HintPath>sdk\mysql\DatabaseDLL.dll</HintPath>
+    <Reference Include="db">
+      <HintPath>sdk\mysql\db.dll</HintPath>
     </Reference>
+    <Reference Include="DevComponents.DotNetBar.SuperGrid, Version=12.5.0.2, Culture=neutral, PublicKeyToken=c39c3242a43eee2b" />
     <Reference Include="DevComponents.DotNetBar2, Version=12.5.0.2, Culture=neutral, PublicKeyToken=c39c3242a43eee2b, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>D:\program_files\DotNetBar for Windows Forms\DevComponents.DotNetBar2.dll</HintPath>
     </Reference>
+    <Reference Include="DevComponents.Instrumentation, Version=12.5.0.2, Culture=neutral, PublicKeyToken=bc4a9d761ea44ef0" />
     <Reference Include="HslCommunication">
       <HintPath>sdk\VZ_Sdk\HslCommunication.dll</HintPath>
     </Reference>
@@ -51,6 +53,11 @@
       <SpecificVersion>False</SpecificVersion>
       <HintPath>sdk\log4net\log4net.dll</HintPath>
     </Reference>
+    <Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+      <HintPath>sdk\Microsoft.Office.Interop.Excel.dll</HintPath>
+    </Reference>
     <Reference Include="MySql.Data, Version=6.7.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>sdk\mysql\MySql.Data.dll</HintPath>
@@ -69,6 +76,7 @@
     <Reference Include="System" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -82,12 +90,18 @@
   <ItemGroup>
     <Compile Include="entity\AbstractMessage.cs" />
     <Compile Include="entity\Jsonhelper.cs" />
+    <Compile Include="language\Language.cs" />
+    <Compile Include="LOG\log.cs" />
+    <Compile Include="LOG\LogManager.cs" />
+    <Compile Include="LOG\LogTest.cs" />
+    <Compile Include="model\MainModel.cs" />
+    <Compile Include="model\SysConst.cs" />
     <Compile Include="Monitor\SystemInitializer.cs" />
-    <Compile Include="Form1.cs">
+    <Compile Include="FormCentralController.cs">
       <SubType>Form</SubType>
     </Compile>
-    <Compile Include="Form1.Designer.cs">
-      <DependentUpon>Form1.cs</DependentUpon>
+    <Compile Include="FormCentralController.Designer.cs">
+      <DependentUpon>FormCentralController.cs</DependentUpon>
     </Compile>
     <Compile Include="Monitor\IMonitor.cs" />
     <Compile Include="Monitor\Monitor.cs" />
@@ -107,8 +121,9 @@
     <Compile Include="WebServer\IWebServer.cs" />
     <Compile Include="WebServer\LazySingleton.cs" />
     <Compile Include="WebServer\MultiSocketThread.cs" />
-    <EmbeddedResource Include="Form1.resx">
-      <DependentUpon>Form1.cs</DependentUpon>
+    <EmbeddedResource Include="FormCentralController.resx">
+      <DependentUpon>FormCentralController.cs</DependentUpon>
+      <SubType>Designer</SubType>
     </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>

+ 242 - 0
PLCLinker/centralController/language/Language.cs

@@ -0,0 +1,242 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace parkMonitor.language {
+
+	public enum LangType {
+		zh_cn = 1,
+		en_us = 2
+	}
+
+	public class Language : INotifyPropertyChanged {
+		public static Language ins = new Language();
+
+		public LangType lngType = LangType.zh_cn;
+
+		Dictionary<string, string> mapLng = new Dictionary<string, string>();
+
+		string[] lng = new string[0];
+
+		public Language() {
+			//		key				zh-cn					eu-us
+			lng = new string[] {
+				"autoPackSys"	, "智能泊车系统", "Intelligent Pack System"	,
+
+				"central"		, "中控"		, "Central"					,
+				"centralPort"	, "中控端"		, "Central"                 ,
+				"webServer"		, "Web服务器"	, "Web Server"				,
+				"plc"			, "PLC"			, "PLC"						,
+				"numMachinePort", "号牌机端"	, "Num Plate Machine"		,
+				"numMachine"	, "号牌机"		, "Num Plate Machine"		,
+				"measurePort"	, "测量端"		, "measuring"				,
+				"laser"			, "激光"		, "Laser"					,
+				"trayPort"		, "托盘端"		, "Tray"					,
+				"tray"			, "托盘"		, "Tray"					,
+				"robotPort"		, "机械手端"    , "Robot"					,
+				"robot"			, "机械手"		, "Robot"					,
+				"robotTongs"	, "机械手"		, "Robot"					,
+				"raster"		, "光栅"		, "Raster"					,
+				"ultrasonic"	, "超声波"		, "Ultrasonic"				,
+				"sensor"		, "传感器"		, "Sensor"                  ,
+				"garage"		, "车库"		, "Central"					,
+				"car"			, "车辆"		, "Car"						,
+				"carObject"		, "车辆物体"	, "Car"						,
+				"ortherObject"	, "其他物体"	, "Orther Object"			,
+
+				"cpu"			, "CPU"			, "CPU"						,
+				"mem"			, "内存"		, "Mem"                     ,
+				"hostNmae"		, "主机名"		, "Host Name"				,
+				"gpu"			, "显卡"		, "GPU"				        ,
+				"os"			, "操作系统"	, "OS"					    ,
+				"version"		, "版本"		, "Version"                 ,
+
+				"mainPanel"		, "主界面"		, "Main Panel"				,
+				"name"			, "名称"		, "Name"                    ,
+				"info"			, "信息"		, "Info"					,
+				"detail"		, "详细信息"	, "Details"					,
+				"alarmInfo"		, "报警信息"	, "Alarm Info"				,
+				"serNum"		, "编号"		, "SN"						,
+				"log"			, "日志"		, "Log"                     ,
+				"ok"			, "确定"		, "Ok"						,
+				"cancel"		, "取消"		, "Cancel"                  ,
+				"sureExit"		, "确定退出?"	, "Sure Exit?"              ,
+				"devInfo"       , "设备信息"    , "Device Info"             ,
+				"devList"       , "设备列表"    , "Device List"             ,
+				"devName"       , "设备名"		, "Device Name"             ,
+				"reset"			, "复位"		, "Reset"					,
+				"write"			, "写入"		, "Write"                   ,
+
+				"file"			, "文件"		, "File"                    ,
+				"open"			, "打开"		, "Open"                    ,
+				"close"			, "关闭"		, "Close"                   ,
+				"import"		, "导入"		, "Import"                  ,
+				"exit"			, "退出"		, "Exit"					,
+
+				"noDev"			, "无设备"		, "No Device"				,
+				"run"			, "启动"		, "Run"                     ,
+				"all"			, "全部"		, "All"                     ,
+				"transferSys"	, "转运系统"	, "Transfer Sys"			,
+				"laserRadar"	, "激光雷达"    , "Laser & Radar"           ,
+				"robotHand"		, "机械手"		, "Robot Hand"				,
+				"measureSys"	, "测量系统"    , "Measure Sys"				,
+                "restartProcess", "重启上次流程", "restart last process"    ,
+
+				"view"			, "视图"		, "View"                    ,
+				"carView"       , "车位视图"    , "Car View"                ,
+				"robotView"     , "机械手"    , "Robot View"				,
+
+				"alarm"			, "预警"		, "Alarm"                   ,
+
+				"check"			, "检查"		, "Check"                   ,
+
+				"help"			, "帮助"		, "Help"                    ,
+				"sysInfo"		, "系统信息"	, "Sys Info"                ,
+				"helpDoc"		, "使用帮助"	, "Help Doc"                ,
+				"aboutUs"		, "关于我们"	, "About Us"                ,
+
+				"cmd"			, "命令"		, "Command"                 ,
+				"startClient"   , "启动客户端"  , "Start Client"            ,
+				"startServer"   , "启动服务器"  , "Start Server"            ,
+				"server"		, "服务器"		, "Server"					,
+				"client"		, "客户端"		, "Client"					,
+
+				"offline"		, "离线"		, "Offline"					,
+				"normal"		, "正常"		, "Normal"                  ,
+				"canReset"		, "可复位"		, "Can Reset"               ,
+				"warning"		, "警告"		, "Warn"					,
+				"error"			, "错误"		, "Error"					,
+				"aFrew"			, "个"			, " "						,
+				"connect"		, "连接"        , "Connect"                 ,
+				"disconnect"    , "断开"        , "Disconnect"              ,
+				"search"		, "搜索"        , "Search"					,
+			};
+
+			//mapLng = new Dictionary<string, string>() {
+			//	{ "central", "中控" },
+			//	{ "garage", "车库" }
+			//};
+
+			int splitSize = 3;
+			//int zhIdx = 1;
+			//int enIdx = 2;
+			int keyIdx = 0;
+			int lngIdx = (int)lngType;
+			for(int i = 0; i < lng.Length; i += splitSize) {
+				mapLng[lng[i + keyIdx]] = lng[i + lngIdx];
+			}
+
+			mapLng["aboutWinText"] = @"智能泊车系统 中控端
+
+武汉大学
+
+CopyRight(C) 2013 - 2018
+保留所有权利";
+
+		}
+
+		//public void swithLanguage(string lngName) {
+
+		//}
+
+		public string autoPackSys { get { return mapLng["autoPackSys"]; } }
+		public string central { get { return mapLng["central"]; } }
+		public string centralPort { get { return mapLng["centralPort"]; } }
+		public string webServer { get { return mapLng["webServer"]; } }
+		public string plc { get { return mapLng["plc"]; } }
+		public string numMachinePort { get { return mapLng["numMachinePort"]; } }
+		public string numMachine { get { return mapLng["numMachine"]; } }
+		public string measurePort { get { return mapLng["measurePort"]; } }
+		public string laser { get { return mapLng["laser"]; } }
+		public string trayPort { get { return mapLng["trayPort"]; } }
+		public string tray { get { return mapLng["tray"]; } }
+		public string robotPort { get { return mapLng["robotPort"]; } }
+		public string robot { get { return mapLng["robot"]; } }
+		public string robotTongs { get { return mapLng["robotTongs"]; } }
+		public string raster { get { return mapLng["raster"]; } }
+		public string ultrasonic { get { return mapLng["ultrasonic"]; } }
+		public string sensor { get { return mapLng["sensor"]; } }
+		public string garage { get { return mapLng["garage"]; } }
+		public string car { get { return mapLng["car"]; } }
+		public string carObject { get { return mapLng["carObject"]; } }
+		public string ortherObject { get { return mapLng["ortherObject"]; } }
+
+		public string cpu { get { return mapLng["cpu"]; } }
+		public string mem { get { return mapLng["mem"]; } }
+		public string hostNmae { get { return mapLng["hostNmae"]; } }
+		public string gpu { get { return mapLng["gpu"]; } }
+		public string os { get { return mapLng["os"]; } }
+		public string version { get { return mapLng["version"]; } }
+
+		public string mainPanel { get { return mapLng["mainPanel"]; } }
+		public string name { get { return mapLng["name"]; } }
+		public string info { get { return mapLng["info"]; } }
+		public string detail { get { return mapLng["detail"]; } }
+		public string alarmInfo { get { return mapLng["alarmInfo"]; } }
+		public string serNum { get { return mapLng["serNum"]; } }
+		public string log { get { return mapLng["log"]; } }
+		public string ok { get { return mapLng["ok"]; } }
+		public string cancel { get { return mapLng["cancel"]; } }
+		public string sureExit { get { return mapLng["sureExit"]; } }
+		public string devInfo { get { return mapLng["devInfo"]; } }
+		public string devList { get { return mapLng["devList"]; } }
+		public string devName { get { return mapLng["devName"]; } }
+		public string reset { get { return mapLng["reset"]; } }
+		public string write { get { return mapLng["write"]; } }
+
+		public string file { get { return mapLng["file"]; } }
+		public string open { get { return mapLng["open"]; } }
+		public string close { get { return mapLng["close"]; } }
+		public string import { get { return mapLng["import"]; } }
+		public string exit { get { return mapLng["exit"]; } }
+
+		public string noDev { get { return mapLng["noDev"]; } }
+		public string run { get { return mapLng["run"]; } }
+		public string all { get { return mapLng["all"]; } }
+		public string transferSys { get { return mapLng["transferSys"]; } }
+		public string laserRadar { get { return mapLng["laserRadar"]; } }
+		public string robotHand { get { return mapLng["robotHand"]; } }
+		public string measureSys { get { return mapLng["measureSys"]; } }
+        public string restartProcess { get { return mapLng["restartProcess"]; } }
+
+        public string view { get { return mapLng["view"]; } }
+		public string carView { get { return mapLng["carView"]; } }
+
+		public string alarm { get { return mapLng["alarm"]; } }
+
+		public string check { get { return mapLng["check"]; } }
+
+		public string help { get { return mapLng["help"]; } }
+		public string sysInfo { get { return mapLng["sysInfo"]; } }
+		public string helpDoc { get { return mapLng["helpDoc"]; } }
+		public string aboutUs { get { return mapLng["aboutUs"]; } }
+
+		public string cmd { get { return mapLng["cmd"]; } }
+		public string startClient { get { return mapLng["startClient"]; } }
+		public string startServer { get { return mapLng["startServer"]; } }
+		public string server { get { return mapLng["server"]; } }
+		public string client { get { return mapLng["client"]; } }
+
+		public string offline { get { return mapLng["offline"]; } }
+		public string normal { get { return mapLng["normal"]; } }
+		public string canReset { get { return mapLng["canReset"]; } }
+		public string warning { get { return mapLng["warning"]; } }
+		public string error { get { return mapLng["error"]; } }
+		public string aFrew { get { return mapLng["aFrew"]; } }
+		public string connect { get { return mapLng["connect"]; } }
+		public string disconnect { get { return mapLng["disconnect"]; } }
+		public string search { get { return mapLng["search"]; } }
+
+		public string aboutWinText { get { return mapLng["aboutWinText"]; } }
+
+		public virtual event PropertyChangedEventHandler PropertyChanged;
+		public virtual void FirePropertyChanged(string propertyName) {
+			if(PropertyChanged != null) {
+				PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
+			}
+		}
+	}
+}

+ 81 - 0
PLCLinker/centralController/model/MainModel.cs

@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace parkMonitor.model {
+	public enum DeviceType {
+		/// <summary>未知</summary>
+		Unknown,
+		/// <summary>Web Server</summary>
+		WebServer,
+		/// <summary>手机端</summary>
+		Mobile,
+		/// <summary>中控</summary>
+		Central,
+		/// <summary>PLC</summary>
+		PLC,
+		/// <summary>号牌机</summary>
+		NumMachine,
+		/// <summary>激光</summary>
+		Laser,
+		/// <summary>托盘</summary>
+		Tray,
+		/// <summary>抓手</summary>
+		Robot,
+		/// <summary>光栅</summary>
+		Raster,
+		/// <summary>超声波</summary>
+		Ultrasonic,
+		/// <summary>传感器</summary>
+		Sensor,
+		/// <summary>车库</summary>
+		Garage,
+		/// <summary>车辆</summary>
+		Car,
+		/// <summary>其他物体</summary>
+		OrtherObject,
+		/// <summary>其他设备</summary>
+		OrtherDevice,
+	}
+	
+	/// <summary>设备状态</summary>
+	public enum ComInfoStatus {
+		/// <summary>无状态</summary>
+		None,
+		/// <summary>离线</summary>
+		Offline,
+		/// <summary>正常</summary>
+		Normal,
+		/// <summary>警告</summary>
+		Warning,
+		/// <summary>错误</summary>
+		Error,
+
+		/// <summary>待机</summary>
+		Wait,
+		/// <summary>工作中</summary>
+		Working,
+		/// <summary>维护</summary>
+		Maintain,
+	}
+
+	/// <summary>报警状态</summary>
+	public enum AlarmStatus {
+		/// <summary>无状态</summary>
+		None,
+		/// <summary>正常</summary>
+		Normal,
+		/// <summary>离线</summary>
+		Offline,
+		/// <summary>信息</summary>
+		Info,
+		/// <summary>复位</summary>
+		Reset,
+		/// <summary>警告</summary>
+		Warning,
+		/// <summary>错误</summary>
+		Error
+	}
+}

+ 30 - 0
PLCLinker/centralController/model/SysConst.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace parkMonitor.model {
+	/// <summary>系统常量</summary>
+	public class SysConst {
+		public static string rootPath() {
+			return AppDomain.CurrentDomain.BaseDirectory;
+		}
+
+		/// <summary>配置文件夹</summary>
+		public static string configPath() {
+			return rootPath() + "/config/";
+		}
+
+		/// <summary>版本号</summary>
+		public static string version() {
+			return "1.0.0";
+		}
+
+		/// <summary>内嵌资源路径</summary>
+		public static string inlineResPath() {
+			return "parkMonitor.resource.inlineRes.";
+		}
+
+	}
+}

BIN
PLCLinker/centralController/obj/Release/DesignTimeResolveAssemblyReferences.cache


BIN
PLCLinker/centralController/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache


+ 1 - 1
PLCLinker/centralController/obj/Release/centralController.csproj.CoreCompileInputs.cache

@@ -1 +1 @@
-1eea268df2f7d9686ddf11f4b45f5a0ad8c4323b
+ec57ee3b8371b9008a7e95d2f89d9f907d88a07e

+ 2 - 1
PLCLinker/centralController/obj/Release/centralController.csproj.FileListAbsolute.txt

@@ -9,7 +9,6 @@ E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralControl
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\obj\Release\centralController.exe
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\obj\Release\centralController.pdb
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\bin\Release\broadcastDLL.dll
-E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\bin\Release\DatabaseDLL.dll
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\bin\Release\HslCommunication.dll
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\bin\Release\log4net.dll
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\bin\Release\MySql.Data.dll
@@ -19,4 +18,6 @@ E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralControl
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\bin\Release\log4net.xml
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\obj\Release\centralController.g.resources
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\obj\Release\centralController.centralController.resources
+E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\bin\Release\db.dll
+E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\bin\Release\PLCS7.xml
 E:\superScene\智能停车项目\智能停车项目v2.0\PLCLinker\centralController\obj\Release\centralController.csprojResolveAssemblyReference.cache

BIN
PLCLinker/centralController/obj/Release/centralController.csproj.GenerateResource.Cache


BIN
PLCLinker/centralController/obj/Release/centralController.csprojResolveAssemblyReference.cache


BIN
PLCLinker/centralController/obj/Release/centralController.exe


BIN
PLCLinker/centralController/obj/Release/centralController.pdb


BIN
PLCLinker/centralController/sdk/Microsoft.Office.Interop.Excel.dll


BIN
PLCLinker/centralController/sdk/PLC/PLCS7.dll


+ 345 - 0
PLCLinker/centralController/sdk/PLC/PLCS7.xml

@@ -0,0 +1,345 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>PLCS7</name>
+    </assembly>
+    <members>
+        <member name="F:PLCS7.AbstractPLCLinker.isConnected">
+            <summary>
+            PLC 连接状态flag
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.cpu">
+            <summary>
+            plc中cpu类型
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.ip">
+            <summary>
+            PLC的IP地址
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.rack">
+            <summary>
+            PLC的端口号
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.slot">
+            <summary>
+            工作站号
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.terminalDB">
+            <summary>
+            终端DB块iD
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.centralDB">
+            <summary>
+            中心DB块iD
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.parkingSpaceDB">
+            <summary>
+            车位DB块ID
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.terminalCount">
+            <summary>
+            终端个数
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.parkingSpaceCount">
+            <summary>
+            停车位个数
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.plc">
+            <summary>
+            PLC S7连接对象
+            </summary>
+        </member>
+        <member name="M:PLCS7.PLCLinker.#ctor(S7.Net.CpuType,System.String,System.Int16,System.Int16,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
+            <summary>
+            PLCLinker构造函数
+            </summary>
+            <param name="cpu"></param>
+            <param name="ip"></param>
+            <param name="rack"></param>
+            <param name="slot"></param>
+            <param name="terminalDB"></param>
+            <param name="centralDB"></param>
+            <param name="parkingSpaceDB"></param>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadMultipleBytes(System.Int32,System.Int32,System.Int32)">
+            <summary>
+            读取指定数据块中多个字节
+            </summary>
+            <param name="db"></param>
+            <param name="length"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteMultipleBytes(System.Int32,System.Collections.Generic.List{System.Byte},System.Int32)">
+            <summary>
+            写入指定数据块中多个字节
+            </summary>
+            <param name="db"></param>
+            <param name="bytesToWrite"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadStruFromPLC(System.Object,System.Int32,System.Int32)">
+            <summary>
+            从PLC中读取结构体
+            </summary>
+            <param name="obj"></param>
+            <param name="db"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteStruToPLC(System.Object,System.Int32,System.Int32)">
+            <summary>
+            向PLC中写入结构体
+            </summary>
+            <param name="obj"></param>
+            <param name="db"></param>
+            <param name="startAddr"></param>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadFromPLC(PLCS7.PLCDataType,System.Int32)">
+            <summary>
+            读取PLC数据块
+            </summary>
+            <param name="whichToRead"></param>
+            <param name="index"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteToPLC(System.Object,PLCS7.PLCDataType)">
+            <summary>
+            写入PLC,其中可写入但不需写入字段请赋值为-1
+            </summary>
+            <param name="abstractPLCMsg"></param>
+            <param name="whoami"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteAccordingToOffset(PLCS7.PLCDataType,System.Int32,System.Object)">
+            <summary>
+            根据地址偏移量写入PLC
+            </summary>
+            <param name="whichToWrite"></param>
+            <param name="offset"></param>
+            <param name="value"></param>
+            <returns></returns>
+        </member>
+        <member name="T:PLCS7.TerminalStru">
+            <summary>
+            终端数据块结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.terminalID">
+            <summary>
+            终端ID号
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.terminalStatus">
+            <summary>
+            终端状态,0暂停,1停车,2取车
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.btnStatus">
+            <summary>
+            按钮状态,0缺省,1非注册,2注册
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.cmd">
+            <summary>
+            停取指令,0缺省,1停车,2取车
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeA">
+            <summary>
+            注册用户UserID
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeB">
+            <summary>
+            注册用户号牌地域标记
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeC">
+            <summary>
+            注册用户号牌后半部分A
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeD">
+            <summary>
+            注册用户号牌后半部分B
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.receiptNum">
+            <summary>
+            凭证号
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.paymentStatus">
+            <summary>
+            支付状态,0-1失败-2成功-3管理员放行
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licVerification">
+            <summary>
+            1-成功,2-号牌比对不成功
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.parkingFee">
+            <summary>
+            停车费用,0-99999
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.userType">
+            <summary>
+            用户类型,0-1普通-2月卡-3季卡-4年卡VIP
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.groundStatus">
+            <summary>
+            地感信号
+            </summary>
+        </member>
+        <member name="T:PLCS7.MainBlockStru">
+            <summary>
+            中控与PLC交互使用数据块的结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.terminalID">
+            <summary>
+            终端ID号
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.numMachineLaunch">
+            <summary>
+            号牌机启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.sweepLaserLaunch">
+            <summary>
+            摆扫启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.wheelbaseLaserLaunch">
+            <summary>
+            轮距启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.stop">
+            <summary>
+            急停
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.ready">
+            <summary>
+            就绪
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.parkingRunning">
+            <summary>
+            停车运行
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.fetchingRunning">
+            <summary>
+            取车运行
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.processCompleted">
+            <summary>
+            流程完成
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.processStopped">
+            <summary>
+            流程中断
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.sweepLaserStatus">
+            <summary>
+            摆扫激光状态
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.wheelbaseLaserStatus">
+            <summary>
+            轮距雷达状态
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.licenseReceived">
+            <summary>
+            号牌机获取
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.localAutoMode">
+            <summary>
+            本地自动模式
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.remoteMode">
+            <summary>
+            云端模式
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.localManualMode">
+            <summary>
+            本地手动模式
+            </summary>
+        </member>
+        <member name="T:PLCS7.ParkingSpaceStru">
+            <summary>
+            车位单元结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.parkingSpace">
+            <summary>
+            车位编号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.length">
+            <summary>
+            长
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.width">
+            <summary>
+            宽
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.height">
+            <summary>
+            高
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.floorNo">
+            <summary>
+            楼层编号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.receiptNum">
+            <summary>
+            凭证号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.spaceStatus">
+            <summary>
+            车位状态,0空位-1占用-2保留-3故障
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.frontWheelbase">
+            <summary>
+            前轮距
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.rearWheelbase">
+            <summary>
+            后轮距
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
PLCLinker/centralController/sdk/mysql/db.dll


BIN
PLCLinker/socketTest/bin/Release/socketTest.exe


BIN
PLCLinker/socketTest/bin/Release/socketTest.pdb


BIN
PLCLinker/socketTest/obj/Release/socketTest.exe


BIN
PLCLinker/socketTest/obj/Release/socketTest.pdb


BIN
resources/Microsoft.Office.Interop.Excel.dll


BIN
resources/PLCS7.dll


+ 345 - 0
resources/PLCS7.xml

@@ -0,0 +1,345 @@
+<?xml version="1.0"?>
+<doc>
+    <assembly>
+        <name>PLCS7</name>
+    </assembly>
+    <members>
+        <member name="F:PLCS7.AbstractPLCLinker.isConnected">
+            <summary>
+            PLC 连接状态flag
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.cpu">
+            <summary>
+            plc中cpu类型
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.ip">
+            <summary>
+            PLC的IP地址
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.rack">
+            <summary>
+            PLC的端口号
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.slot">
+            <summary>
+            工作站号
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.terminalDB">
+            <summary>
+            终端DB块iD
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.centralDB">
+            <summary>
+            中心DB块iD
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.parkingSpaceDB">
+            <summary>
+            车位DB块ID
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.terminalCount">
+            <summary>
+            终端个数
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.parkingSpaceCount">
+            <summary>
+            停车位个数
+            </summary>
+        </member>
+        <member name="F:PLCS7.AbstractPLCLinker.plc">
+            <summary>
+            PLC S7连接对象
+            </summary>
+        </member>
+        <member name="M:PLCS7.PLCLinker.#ctor(S7.Net.CpuType,System.String,System.Int16,System.Int16,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)">
+            <summary>
+            PLCLinker构造函数
+            </summary>
+            <param name="cpu"></param>
+            <param name="ip"></param>
+            <param name="rack"></param>
+            <param name="slot"></param>
+            <param name="terminalDB"></param>
+            <param name="centralDB"></param>
+            <param name="parkingSpaceDB"></param>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadMultipleBytes(System.Int32,System.Int32,System.Int32)">
+            <summary>
+            读取指定数据块中多个字节
+            </summary>
+            <param name="db"></param>
+            <param name="length"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteMultipleBytes(System.Int32,System.Collections.Generic.List{System.Byte},System.Int32)">
+            <summary>
+            写入指定数据块中多个字节
+            </summary>
+            <param name="db"></param>
+            <param name="bytesToWrite"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadStruFromPLC(System.Object,System.Int32,System.Int32)">
+            <summary>
+            从PLC中读取结构体
+            </summary>
+            <param name="obj"></param>
+            <param name="db"></param>
+            <param name="startAddr"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteStruToPLC(System.Object,System.Int32,System.Int32)">
+            <summary>
+            向PLC中写入结构体
+            </summary>
+            <param name="obj"></param>
+            <param name="db"></param>
+            <param name="startAddr"></param>
+        </member>
+        <member name="M:PLCS7.PLCLinker.ReadFromPLC(PLCS7.PLCDataType,System.Int32)">
+            <summary>
+            读取PLC数据块
+            </summary>
+            <param name="whichToRead"></param>
+            <param name="index"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteToPLC(System.Object,PLCS7.PLCDataType)">
+            <summary>
+            写入PLC,其中可写入但不需写入字段请赋值为-1
+            </summary>
+            <param name="abstractPLCMsg"></param>
+            <param name="whoami"></param>
+            <returns></returns>
+        </member>
+        <member name="M:PLCS7.PLCLinker.WriteAccordingToOffset(PLCS7.PLCDataType,System.Int32,System.Object)">
+            <summary>
+            根据地址偏移量写入PLC
+            </summary>
+            <param name="whichToWrite"></param>
+            <param name="offset"></param>
+            <param name="value"></param>
+            <returns></returns>
+        </member>
+        <member name="T:PLCS7.TerminalStru">
+            <summary>
+            终端数据块结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.terminalID">
+            <summary>
+            终端ID号
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.terminalStatus">
+            <summary>
+            终端状态,0暂停,1停车,2取车
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.btnStatus">
+            <summary>
+            按钮状态,0缺省,1非注册,2注册
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.cmd">
+            <summary>
+            停取指令,0缺省,1停车,2取车
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeA">
+            <summary>
+            注册用户UserID
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeB">
+            <summary>
+            注册用户号牌地域标记
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeC">
+            <summary>
+            注册用户号牌后半部分A
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licenseCodeD">
+            <summary>
+            注册用户号牌后半部分B
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.receiptNum">
+            <summary>
+            凭证号
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.paymentStatus">
+            <summary>
+            支付状态,0-1失败-2成功-3管理员放行
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.licVerification">
+            <summary>
+            1-成功,2-号牌比对不成功
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.parkingFee">
+            <summary>
+            停车费用,0-99999
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.userType">
+            <summary>
+            用户类型,0-1普通-2月卡-3季卡-4年卡VIP
+            </summary>
+        </member>
+        <member name="F:PLCS7.TerminalStru.groundStatus">
+            <summary>
+            地感信号
+            </summary>
+        </member>
+        <member name="T:PLCS7.MainBlockStru">
+            <summary>
+            中控与PLC交互使用数据块的结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.terminalID">
+            <summary>
+            终端ID号
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.numMachineLaunch">
+            <summary>
+            号牌机启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.sweepLaserLaunch">
+            <summary>
+            摆扫启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.wheelbaseLaserLaunch">
+            <summary>
+            轮距启动指令
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.stop">
+            <summary>
+            急停
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.ready">
+            <summary>
+            就绪
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.parkingRunning">
+            <summary>
+            停车运行
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.fetchingRunning">
+            <summary>
+            取车运行
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.processCompleted">
+            <summary>
+            流程完成
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.processStopped">
+            <summary>
+            流程中断
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.sweepLaserStatus">
+            <summary>
+            摆扫激光状态
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.wheelbaseLaserStatus">
+            <summary>
+            轮距雷达状态
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.licenseReceived">
+            <summary>
+            号牌机获取
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.localAutoMode">
+            <summary>
+            本地自动模式
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.remoteMode">
+            <summary>
+            云端模式
+            </summary>
+        </member>
+        <member name="F:PLCS7.MainBlockStru.localManualMode">
+            <summary>
+            本地手动模式
+            </summary>
+        </member>
+        <member name="T:PLCS7.ParkingSpaceStru">
+            <summary>
+            车位单元结构体
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.parkingSpace">
+            <summary>
+            车位编号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.length">
+            <summary>
+            长
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.width">
+            <summary>
+            宽
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.height">
+            <summary>
+            高
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.floorNo">
+            <summary>
+            楼层编号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.receiptNum">
+            <summary>
+            凭证号
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.spaceStatus">
+            <summary>
+            车位状态,0空位-1占用-2保留-3故障
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.frontWheelbase">
+            <summary>
+            前轮距
+            </summary>
+        </member>
+        <member name="F:PLCS7.ParkingSpaceStru.rearWheelbase">
+            <summary>
+            后轮距
+            </summary>
+        </member>
+    </members>
+</doc>

BIN
resources/db.dll