浏览代码

广告调试,屏显排队,提示信息倒序,号牌机窗口缩减,PLC终端块启动号牌机,web初步处理各指令

yc_t 6 年之前
父节点
当前提交
659691bf05
共有 42 个文件被更改,包括 804 次插入499 次删除
  1. 二进制
      PLCLinker/PLCConnector/PLC/PLCS7.dll
  2. 5 0
      PLCLinker/PLCConnector/PLC/PLCS7.xml
  3. 二进制
      PLCLinker/PLCLinker/bin/Release/PLCLinker.exe
  4. 二进制
      PLCLinker/PLCLinker/bin/Release/PLCLinker.pdb
  5. 二进制
      PLCLinker/PLCLinker/obj/Release/PLCLinker.csprojResolveAssemblyReference.cache
  6. 二进制
      PLCLinker/PLCLinker/obj/Release/PLCLinker.exe
  7. 二进制
      PLCLinker/PLCLinker/obj/Release/PLCLinker.pdb
  8. 4 2
      PLCLinker/PLCS7/PLCS7.cs
  9. 二进制
      PLCLinker/PLCS7/bin/Release/PLCS7.dll
  10. 二进制
      PLCLinker/PLCS7/bin/Release/PLCS7.pdb
  11. 8 4
      PLCLinker/PLCS7/entity.cs
  12. 二进制
      PLCLinker/PLCS7/obj/Release/PLCS7.dll
  13. 二进制
      PLCLinker/PLCS7/obj/Release/PLCS7.pdb
  14. 3 3
      PLCLinker/centralController/App.config
  15. 166 144
      PLCLinker/centralController/FormCentralController.Designer.cs
  16. 26 11
      PLCLinker/centralController/FormCentralController.cs
  17. 3 0
      PLCLinker/centralController/FormCentralController.resx
  18. 131 123
      PLCLinker/centralController/FormRecordsManager.Designer.cs
  19. 3 0
      PLCLinker/centralController/FormRecordsManager.resx
  20. 14 7
      PLCLinker/centralController/Monitor/Monitor.cs
  21. 7 10
      PLCLinker/centralController/Monitor/SystemInitializer.cs
  22. 3 14
      PLCLinker/centralController/NumMachine/NumMachine.cs
  23. 149 145
      PLCLinker/centralController/Terminal/Terminal.cs
  24. 75 15
      PLCLinker/centralController/WebServer/CentralForWebSocketServer.cs
  25. 0 4
      PLCLinker/centralController/WebServer/IWebServer.cs
  26. 14 13
      PLCLinker/centralController/advert/AdvertManager.cs
  27. 183 0
      PLCLinker/centralController/allInOneMachine/broadcastModule.cs
  28. 二进制
      PLCLinker/centralController/bin/Release/centralController.exe
  29. 3 3
      PLCLinker/centralController/bin/Release/centralController.exe.config
  30. 二进制
      PLCLinker/centralController/bin/Release/centralController.pdb
  31. 1 0
      PLCLinker/centralController/centralController.csproj
  32. 1 1
      PLCLinker/centralController/obj/Release/centralController.csproj.CoreCompileInputs.cache
  33. 二进制
      PLCLinker/centralController/obj/Release/centralController.csproj.GenerateResource.Cache
  34. 二进制
      PLCLinker/centralController/obj/Release/centralController.csprojResolveAssemblyReference.cache
  35. 二进制
      PLCLinker/centralController/obj/Release/centralController.exe
  36. 二进制
      PLCLinker/centralController/obj/Release/centralController.pdb
  37. 二进制
      PLCLinker/centralController/sdk/PLC/PLCS7.dll
  38. 5 0
      PLCLinker/centralController/sdk/PLC/PLCS7.xml
  39. 二进制
      PLCLinker/socketTest/bin/Release/socketTest.exe
  40. 二进制
      PLCLinker/socketTest/bin/Release/socketTest.pdb
  41. 二进制
      PLCLinker/socketTest/obj/Release/socketTest.exe
  42. 二进制
      PLCLinker/socketTest/obj/Release/socketTest.pdb

二进制
PLCLinker/PLCConnector/PLC/PLCS7.dll


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

@@ -216,6 +216,11 @@
             地感信号
             </summary>
         </member>
+        <member name="F:PLCS7.TerminalStru.numMachineLaunch">
+            <summary>
+            启动对应号牌机
+            </summary>
+        </member>
         <member name="T:PLCS7.MainBlockStru">
             <summary>
             中控与PLC交互使用数据块的结构体

二进制
PLCLinker/PLCLinker/bin/Release/PLCLinker.exe


二进制
PLCLinker/PLCLinker/bin/Release/PLCLinker.pdb


二进制
PLCLinker/PLCLinker/obj/Release/PLCLinker.csprojResolveAssemblyReference.cache


二进制
PLCLinker/PLCLinker/obj/Release/PLCLinker.exe


二进制
PLCLinker/PLCLinker/obj/Release/PLCLinker.pdb


+ 4 - 2
PLCLinker/PLCS7/PLCS7.cs

@@ -29,6 +29,8 @@ namespace PLCS7
     {
         protected const int mainBlockOffset = 52;
         protected const int parkingSpaceOffset = 18;
+        protected const int terminalLength = 44;
+        protected const int parkingSpaceLength = 24;
         /// <summary>
         /// PLC 连接状态flag
         /// </summary>
@@ -366,7 +368,7 @@ namespace PLCS7
                 {
                     TerminalStru ts = (TerminalStru)abstractPLCMsg;
                     if (ts.terminalID <= 0 || ts.terminalID > terminalCount) { return false; }
-                    int offset = 42 * (ts.terminalID - 1);
+                    int offset = terminalLength * (ts.terminalID - 1);
                     if (whoami.Equals(PLCDataType.central))
                     {
                         if (ts.paymentStatus != (short)-1) { plc.WriteBytes(DataType.DataBlock, terminalDB, 28 + offset, BitConverter.GetBytes(BytesRevert(ts.paymentStatus))); }
@@ -399,7 +401,7 @@ namespace PLCS7
                 {
                     //只允许中控写入,中控只允许写车位状态
                     ParkingSpaceStru pss = (ParkingSpaceStru)abstractPLCMsg;
-                    int offset = 24 * (pss.parkingSpace - 1) + parkingSpaceOffset;
+                    int offset = parkingSpaceLength * (pss.parkingSpace - 1) + parkingSpaceOffset;
                     byte[] temp = BitConverter.GetBytes(BytesRevert(pss.spaceStatus));
                     ErrorCode ec = plc.WriteBytes(DataType.DataBlock, parkingSpaceDB, offset, temp);
                     if (!ec.Equals(ErrorCode.NoError)) { return false; }

二进制
PLCLinker/PLCS7/bin/Release/PLCS7.dll


二进制
PLCLinker/PLCS7/bin/Release/PLCS7.pdb


+ 8 - 4
PLCLinker/PLCS7/entity.cs

@@ -75,12 +75,16 @@ namespace PLCS7
         /// 地感信号
         /// </summary>
         public short groundStatus;
+        /// <summary>
+        /// 启动对应号牌机
+        /// </summary>
+        public short numMachineLaunch;
 
         public override string ToString()
         {
             return "[终端id(0):" + terminalID + ",终端状态(2):" + terminalStatus + ",按钮状态(4):" + btnStatus + ",终端指令(6):" + cmd + ",用户id(8):" + licenseCodeA + ","
                 + licenseCodeB + "," + licenseCodeC + "," + licenseCodeD + ",凭证号(24):" + receiptNum + ",支付状态(28):" + paymentStatus
-                + ",号牌验证(30):" + licVerification + ",停车费用(32):" + parkingFee + ",用户类型(34):" + userType  +",X坐标(36):"+coordX+",Y坐标(38):"+coordY + ",地感信号(40):" + groundStatus + "]";
+                + ",号牌验证(30):" + licVerification + ",停车费用(32):" + parkingFee + ",用户类型(34):" + userType + ",X坐标(36):" + coordX + ",Y坐标(38):" + coordY + ",地感信号(40):" + groundStatus + ",启动号牌机:" + numMachineLaunch + "]";
         }
 
         public override bool Equals(object obj)
@@ -155,7 +159,7 @@ namespace PLCS7
         /// 轮距雷达状态
         /// </summary>
         public short wheelbaseLaserStatus;
-        
+
         public short groundAStatus;//24
         public short groundBStatus;
         public short groundCStatus;
@@ -193,8 +197,8 @@ namespace PLCS7
         public override string ToString()
         {
             return "[id(0):" + terminalID + ",号牌(2):" + numMachineLaunch + ",摆扫(4):" + sweepLaserLaunch + ",轮距(6):" + wheelbaseLaserLaunch + ",急停(8):" + stop
-                + ",就绪(10):" + ready + ",停车启动(12):" + parkingRunning + ",取车启动(14):" + fetchingRunning + ",流程完成(16):" + processCompleted + ",流程中止(18):" + 
-                processStopped + ",摆扫状态(20):" + sweepLaserStatus + ",轮距状态(22):"+wheelbaseLaserStatus+",号牌获取(52):" + licenseReceived
+                + ",就绪(10):" + ready + ",停车启动(12):" + parkingRunning + ",取车启动(14):" + fetchingRunning + ",流程完成(16):" + processCompleted + ",流程中止(18):" +
+                processStopped + ",摆扫状态(20):" + sweepLaserStatus + ",轮距状态(22):" + wheelbaseLaserStatus + ",号牌获取(52):" + licenseReceived
                 + ",本地自动(54):" + localAutoMode + ",远程模式(56):" + remoteMode + ",本地手动(58):" + localManualMode + "," + groundAStatus
                 + "," + groundBStatus + "," + groundCStatus + "," + arriveAAndOpen + "," + arriveBAndOpen + "," + arriveCAndOpen
                  + "]";

二进制
PLCLinker/PLCS7/obj/Release/PLCS7.dll


二进制
PLCLinker/PLCS7/obj/Release/PLCS7.pdb


+ 3 - 3
PLCLinker/centralController/App.config

@@ -13,8 +13,8 @@
     <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.10.62" value="1"/>
-    <add key="192.168.10.61" value="2"/>
+    <add key="192.168.10.42" value="1"/>
+    <add key="192.168.10.41" value="2"/>
     <add key="filterRatio" value="0.7"/>
     <!--PLC基本配置-->
     <!--<add key="PLC_ip_address" value="192.168.0.10" />-->
@@ -23,7 +23,7 @@
     <add key="plcSlot" value="1" />
     <!--PLCdb块,分别对应终端、中控、车位-->
     <add key="plcDatablockId" value="18,41,20" />
-    <add key="plcTerminalCount" value="1" />
+    <add key="plcTerminalCount" value="6" />
     <add key="plcParkingSpaceCount" value="200" />
     <add key="plcRefreshInterval" value="200"/>
     <!--显示屏信息-->

+ 166 - 144
PLCLinker/centralController/FormCentralController.Designer.cs

@@ -35,18 +35,15 @@
             this.dockSite4 = new DevComponents.DotNetBar.DockSite();
             this.dockSite_mainView = new DevComponents.DotNetBar.DockSite();
             this.bar_mainWin = new DevComponents.DotNetBar.Bar();
+            this.NumMachineMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
+            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
+            this.paymentPanel = new DevComponents.DotNetBar.PanelDockContainer();
+            this.ParkingSpaceMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.testPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker();
             this.button1 = new System.Windows.Forms.Button();
             this.textBox2 = new System.Windows.Forms.TextBox();
             this.textBox1 = new System.Windows.Forms.TextBox();
-            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
-            this.pictureBox1 = new System.Windows.Forms.PictureBox();
-            this.labelX1 = new DevComponents.DotNetBar.LabelX();
-            this.paymentPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.ParkingSpaceMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.NumMachineMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
             this.dci_NumMachine = new DevComponents.DotNetBar.DockContainerItem();
             this.dci_payment = new DevComponents.DotNetBar.DockContainerItem();
             this.dci_ParkingSpace = new DevComponents.DotNetBar.DockContainerItem();
@@ -62,6 +59,7 @@
             this.realGetTime = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.receiptNum = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.parkingPrice = new System.Windows.Forms.DataGridViewTextBoxColumn();
+            this.paymentStatus = new System.Windows.Forms.DataGridViewTextBoxColumn();
             this.dci_ParkingRecords = new DevComponents.DotNetBar.DockContainerItem();
             this.bar_side = new DevComponents.DotNetBar.Bar();
             this.terminalMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
@@ -119,13 +117,15 @@
             this.dockContainerItem1 = new DevComponents.DotNetBar.DockContainerItem();
             this.panelDockContainer8 = new DevComponents.DotNetBar.PanelDockContainer();
             this.controlContainerItem1 = new DevComponents.DotNetBar.ControlContainerItem();
+            this.labelX1 = new DevComponents.DotNetBar.LabelX();
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+            this.button2 = new System.Windows.Forms.Button();
             this.dockSite_mainView.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.bar_mainWin)).BeginInit();
             this.bar_mainWin.SuspendLayout();
-            this.testPanel.SuspendLayout();
-            this.tableLayoutPanel1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
             this.NumMachineMonitorPanel.SuspendLayout();
+            this.testPanel.SuspendLayout();
             ((System.ComponentModel.ISupportInitialize)(this.bar_bottom)).BeginInit();
             this.bar_bottom.SuspendLayout();
             this.RecordsMonitorPanel.SuspendLayout();
@@ -141,6 +141,8 @@
             ((System.ComponentModel.ISupportInitialize)(this.bar_shortcut)).BeginInit();
             this.bar_shortcut.SuspendLayout();
             this.panel_freeSpace.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+            this.tableLayoutPanel1.SuspendLayout();
             this.SuspendLayout();
             // 
             // dotNetBarManager1
@@ -187,12 +189,12 @@
             this.dockSite_mainView.Dock = System.Windows.Forms.DockStyle.Fill;
             this.dockSite_mainView.DocumentDockContainer = new DevComponents.DotNetBar.DocumentDockContainer(new DevComponents.DotNetBar.DocumentBaseContainer[] {
             ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentDockContainer(new DevComponents.DotNetBar.DocumentBaseContainer[] {
-                        ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar_mainWin, 524, 324))),
-                        ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar_side, 344, 324)))}, DevComponents.DotNetBar.eOrientation.Horizontal))),
+                        ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar_mainWin, 672, 326))),
+                        ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar_side, 208, 326)))}, DevComponents.DotNetBar.eOrientation.Horizontal))),
             ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar_bottom, 871, 181)))}, DevComponents.DotNetBar.eOrientation.Vertical);
-            this.dockSite_mainView.Location = new System.Drawing.Point(0, 127);
+            this.dockSite_mainView.Location = new System.Drawing.Point(0, 121);
             this.dockSite_mainView.Name = "dockSite_mainView";
-            this.dockSite_mainView.Size = new System.Drawing.Size(871, 541);
+            this.dockSite_mainView.Size = new System.Drawing.Size(883, 547);
             this.dockSite_mainView.TabIndex = 8;
             this.dockSite_mainView.TabStop = false;
             // 
@@ -210,9 +212,9 @@
             this.bar_mainWin.CanDockTop = false;
             this.bar_mainWin.CanHide = true;
             this.bar_mainWin.Controls.Add(this.testPanel);
-            this.bar_mainWin.Controls.Add(this.NumMachineMonitorPanel);
             this.bar_mainWin.Controls.Add(this.paymentPanel);
             this.bar_mainWin.Controls.Add(this.ParkingSpaceMonitorPanel);
+            this.bar_mainWin.Controls.Add(this.NumMachineMonitorPanel);
             this.bar_mainWin.DockTabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Top;
             this.bar_mainWin.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.bar_mainWin.IsMaximized = false;
@@ -226,15 +228,66 @@
             this.bar_mainWin.Name = "bar_mainWin";
             this.bar_mainWin.SelectedDockTab = 3;
             this.bar_mainWin.SingleLineColor = System.Drawing.SystemColors.ControlDarkDark;
-            this.bar_mainWin.Size = new System.Drawing.Size(524, 324);
+            this.bar_mainWin.Size = new System.Drawing.Size(672, 326);
             this.bar_mainWin.Stretch = true;
             this.bar_mainWin.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar_mainWin.TabIndex = 0;
             this.bar_mainWin.TabNavigation = true;
             this.bar_mainWin.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(666, 295);
+            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.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
+            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(666, 295);
+            this.flowLayoutPanel1.TabIndex = 1;
+            this.flowLayoutPanel1.Resize += new System.EventHandler(this.flowLayoutPanel1_Resize);
+            // 
+            // 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(666, 295);
+            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;
+            // 
+            // 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(666, 295);
+            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;
+            // 
             // testPanel
             // 
+            this.testPanel.Controls.Add(this.button2);
             this.testPanel.Controls.Add(this.dateTimePicker1);
             this.testPanel.Controls.Add(this.button1);
             this.testPanel.Controls.Add(this.textBox2);
@@ -243,7 +296,7 @@
             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(518, 293);
+            this.testPanel.Size = new System.Drawing.Size(666, 295);
             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;
@@ -282,92 +335,6 @@
             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(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));
-            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 80F));
-            this.tableLayoutPanel1.Size = new System.Drawing.Size(185, 168);
-            this.tableLayoutPanel1.TabIndex = 3;
-            // 
-            // pictureBox1
-            // 
-            this.pictureBox1.Location = new System.Drawing.Point(3, 36);
-            this.pictureBox1.Name = "pictureBox1";
-            this.pictureBox1.Size = new System.Drawing.Size(179, 127);
-            this.pictureBox1.TabIndex = 2;
-            this.pictureBox1.TabStop = false;
-            // 
-            // labelX1
-            // 
-            // 
-            // 
-            // 
-            this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
-            this.labelX1.Location = new System.Drawing.Point(3, 3);
-            this.labelX1.Name = "labelX1";
-            this.labelX1.Size = new System.Drawing.Size(179, 27);
-            this.labelX1.TabIndex = 3;
-            this.labelX1.Text = "label1\r\nlable2";
-            this.labelX1.TextAlignment = System.Drawing.StringAlignment.Center;
-            // 
-            // 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(518, 293);
-            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;
-            // 
-            // 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(518, 293);
-            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;
-            // 
-            // 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(518, 293);
-            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.BackColor = System.Drawing.SystemColors.GradientActiveCaption;
-            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(518, 293);
-            this.flowLayoutPanel1.TabIndex = 1;
-            this.flowLayoutPanel1.Resize += new System.EventHandler(this.flowLayoutPanel1_Resize);
-            // 
             // dci_NumMachine
             // 
             this.dci_NumMachine.Control = this.NumMachineMonitorPanel;
@@ -413,10 +380,10 @@
             this.bar_bottom.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
             this.dci_ParkingRecords});
             this.bar_bottom.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
-            this.bar_bottom.Location = new System.Drawing.Point(0, 327);
+            this.bar_bottom.Location = new System.Drawing.Point(0, 329);
             this.bar_bottom.Name = "bar_bottom";
             this.bar_bottom.SelectedDockTab = 0;
-            this.bar_bottom.Size = new System.Drawing.Size(871, 214);
+            this.bar_bottom.Size = new System.Drawing.Size(883, 218);
             this.bar_bottom.Stretch = true;
             this.bar_bottom.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar_bottom.TabIndex = 1;
@@ -428,7 +395,7 @@
             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(865, 183);
+            this.RecordsMonitorPanel.Size = new System.Drawing.Size(877, 187);
             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;
@@ -448,7 +415,8 @@
             this.realParkTime,
             this.realGetTime,
             this.receiptNum,
-            this.parkingPrice});
+            this.parkingPrice,
+            this.paymentStatus});
             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)));
@@ -462,12 +430,11 @@
             this.dgvx_parkingRecords.Location = new System.Drawing.Point(0, 0);
             this.dgvx_parkingRecords.Name = "dgvx_parkingRecords";
             this.dgvx_parkingRecords.RowTemplate.Height = 23;
-            this.dgvx_parkingRecords.Size = new System.Drawing.Size(865, 183);
+            this.dgvx_parkingRecords.Size = new System.Drawing.Size(877, 187);
             this.dgvx_parkingRecords.TabIndex = 0;
             // 
             // parkingRecordsID
             // 
-            this.parkingRecordsID.Frozen = true;
             this.parkingRecordsID.HeaderText = "停车记录ID";
             this.parkingRecordsID.MaxInputLength = 11;
             this.parkingRecordsID.Name = "parkingRecordsID";
@@ -476,7 +443,6 @@
             // 
             // userID
             // 
-            this.userID.Frozen = true;
             this.userID.HeaderText = "用户ID";
             this.userID.MaxInputLength = 8;
             this.userID.Name = "userID";
@@ -485,55 +451,62 @@
             // 
             // numberPlate
             // 
-            this.numberPlate.Frozen = true;
             this.numberPlate.HeaderText = "号牌";
             this.numberPlate.MaxInputLength = 9;
             this.numberPlate.Name = "numberPlate";
             this.numberPlate.ReadOnly = true;
+            this.numberPlate.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
             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.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
             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.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
             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.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
             this.realGetTime.Width = 140;
             // 
             // receiptNum
             // 
-            this.receiptNum.Frozen = true;
             this.receiptNum.HeaderText = "凭证号";
             this.receiptNum.MaxInputLength = 8;
             this.receiptNum.Name = "receiptNum";
             this.receiptNum.ReadOnly = true;
+            this.receiptNum.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
             // 
             // parkingPrice
             // 
-            this.parkingPrice.Frozen = true;
             this.parkingPrice.HeaderText = "停车费用";
             this.parkingPrice.MaxInputLength = 11;
             this.parkingPrice.Name = "parkingPrice";
             this.parkingPrice.ReadOnly = true;
+            this.parkingPrice.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            // 
+            // paymentStatus
+            // 
+            this.paymentStatus.HeaderText = "收费状态";
+            this.paymentStatus.MaxInputLength = 11;
+            this.paymentStatus.Name = "paymentStatus";
+            this.paymentStatus.ReadOnly = true;
             // 
             // dci_ParkingRecords
             // 
@@ -560,10 +533,10 @@
             this.bar_side.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
             this.dci_terminal});
             this.bar_side.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
-            this.bar_side.Location = new System.Drawing.Point(527, 0);
+            this.bar_side.Location = new System.Drawing.Point(675, 0);
             this.bar_side.Name = "bar_side";
             this.bar_side.SelectedDockTab = 0;
-            this.bar_side.Size = new System.Drawing.Size(344, 324);
+            this.bar_side.Size = new System.Drawing.Size(208, 326);
             this.bar_side.Stretch = true;
             this.bar_side.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar_side.TabIndex = 2;
@@ -574,7 +547,7 @@
             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(338, 293);
+            this.terminalMonitorPanel.Size = new System.Drawing.Size(202, 295);
             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;
@@ -607,10 +580,10 @@
             this.dockSite_notification.Controls.Add(this.bar_notification);
             this.dockSite_notification.Dock = System.Windows.Forms.DockStyle.Right;
             this.dockSite_notification.DocumentDockContainer = new DevComponents.DotNetBar.DocumentDockContainer(new DevComponents.DotNetBar.DocumentBaseContainer[] {
-            ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar_notification, 320, 541)))}, DevComponents.DotNetBar.eOrientation.Vertical);
-            this.dockSite_notification.Location = new System.Drawing.Point(871, 127);
+            ((DevComponents.DotNetBar.DocumentBaseContainer)(new DevComponents.DotNetBar.DocumentBarContainer(this.bar_notification, 308, 547)))}, DevComponents.DotNetBar.eOrientation.Vertical);
+            this.dockSite_notification.Location = new System.Drawing.Point(883, 121);
             this.dockSite_notification.Name = "dockSite_notification";
-            this.dockSite_notification.Size = new System.Drawing.Size(323, 541);
+            this.dockSite_notification.Size = new System.Drawing.Size(311, 547);
             this.dockSite_notification.TabIndex = 1;
             this.dockSite_notification.TabStop = false;
             // 
@@ -630,7 +603,7 @@
             this.bar_notification.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
             this.bar_notification.Location = new System.Drawing.Point(3, 0);
             this.bar_notification.Name = "bar_notification";
-            this.bar_notification.Size = new System.Drawing.Size(320, 541);
+            this.bar_notification.Size = new System.Drawing.Size(308, 547);
             this.bar_notification.Stretch = true;
             this.bar_notification.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar_notification.TabIndex = 1;
@@ -644,7 +617,7 @@
             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(314, 515);
+            this.warningPanel.Size = new System.Drawing.Size(302, 521);
             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;
@@ -670,15 +643,15 @@
             this.tbx_notification.PreventEnterBeep = true;
             this.tbx_notification.ReadOnly = true;
             this.tbx_notification.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
-            this.tbx_notification.Size = new System.Drawing.Size(314, 494);
+            this.tbx_notification.Size = new System.Drawing.Size(302, 500);
             this.tbx_notification.TabIndex = 0;
             // 
             // progressBar1
             // 
             this.progressBar1.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.progressBar1.Location = new System.Drawing.Point(0, 494);
+            this.progressBar1.Location = new System.Drawing.Point(0, 500);
             this.progressBar1.Name = "progressBar1";
-            this.progressBar1.Size = new System.Drawing.Size(314, 21);
+            this.progressBar1.Size = new System.Drawing.Size(302, 21);
             this.progressBar1.Step = 20;
             this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
             this.progressBar1.TabIndex = 0;
@@ -727,7 +700,7 @@
             this.dockSite_menu.Dock = System.Windows.Forms.DockStyle.Top;
             this.dockSite_menu.Location = new System.Drawing.Point(0, 0);
             this.dockSite_menu.Name = "dockSite_menu";
-            this.dockSite_menu.Size = new System.Drawing.Size(1194, 127);
+            this.dockSite_menu.Size = new System.Drawing.Size(1194, 121);
             this.dockSite_menu.TabIndex = 6;
             this.dockSite_menu.TabStop = false;
             // 
@@ -737,6 +710,7 @@
             this.bar_Menu.AccessibleName = "DotNetBar Bar";
             this.bar_Menu.AccessibleRole = System.Windows.Forms.AccessibleRole.MenuBar;
             this.bar_Menu.DockSide = DevComponents.DotNetBar.eDockSide.Top;
+            this.bar_Menu.Font = new System.Drawing.Font("微软雅黑", 9F);
             this.bar_Menu.IsMaximized = false;
             this.bar_Menu.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
             this.btn_system,
@@ -747,7 +721,7 @@
             this.bar_Menu.Location = new System.Drawing.Point(0, 0);
             this.bar_Menu.MenuBar = true;
             this.bar_Menu.Name = "bar_Menu";
-            this.bar_Menu.Size = new System.Drawing.Size(1194, 32);
+            this.bar_Menu.Size = new System.Drawing.Size(1194, 26);
             this.bar_Menu.Stretch = true;
             this.bar_Menu.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
             this.bar_Menu.TabIndex = 0;
@@ -933,7 +907,7 @@
             this.shortcut_sysInfo,
             this.shortcut_about,
             this.shortcut_close});
-            this.bar_shortcut.Location = new System.Drawing.Point(0, 33);
+            this.bar_shortcut.Location = new System.Drawing.Point(0, 27);
             this.bar_shortcut.MenuBar = true;
             this.bar_shortcut.Name = "bar_shortcut";
             this.bar_shortcut.Size = new System.Drawing.Size(1194, 93);
@@ -1133,6 +1107,52 @@
             this.controlContainerItem1.MenuVisibility = DevComponents.DotNetBar.eMenuVisibility.VisibleAlways;
             this.controlContainerItem1.Name = "controlContainerItem1";
             // 
+            // labelX1
+            // 
+            // 
+            // 
+            // 
+            this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX1.Location = new System.Drawing.Point(3, 3);
+            this.labelX1.Name = "labelX1";
+            this.labelX1.Size = new System.Drawing.Size(179, 27);
+            this.labelX1.TabIndex = 3;
+            this.labelX1.Text = "label1\r\nlable2";
+            this.labelX1.TextAlignment = System.Drawing.StringAlignment.Center;
+            // 
+            // pictureBox1
+            // 
+            this.pictureBox1.Location = new System.Drawing.Point(3, 36);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(179, 127);
+            this.pictureBox1.TabIndex = 2;
+            this.pictureBox1.TabStop = false;
+            // 
+            // 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(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));
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 80F));
+            this.tableLayoutPanel1.Size = new System.Drawing.Size(185, 168);
+            this.tableLayoutPanel1.TabIndex = 3;
+            // 
+            // button2
+            // 
+            this.button2.Location = new System.Drawing.Point(271, 44);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(75, 23);
+            this.button2.TabIndex = 8;
+            this.button2.Text = "button2";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.button2_Click);
+            // 
             // centralController
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@@ -1158,11 +1178,9 @@
             this.dockSite_mainView.ResumeLayout(false);
             ((System.ComponentModel.ISupportInitialize)(this.bar_mainWin)).EndInit();
             this.bar_mainWin.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.bar_bottom)).EndInit();
             this.bar_bottom.ResumeLayout(false);
             this.RecordsMonitorPanel.ResumeLayout(false);
@@ -1178,6 +1196,8 @@
             ((System.ComponentModel.ISupportInitialize)(this.bar_shortcut)).EndInit();
             this.bar_shortcut.ResumeLayout(false);
             this.panel_freeSpace.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+            this.tableLayoutPanel1.ResumeLayout(false);
             this.ResumeLayout(false);
 
         }
@@ -1238,9 +1258,6 @@
         private System.Windows.Forms.Button button1;
         private System.Windows.Forms.TextBox textBox2;
         private System.Windows.Forms.TextBox textBox1;
-        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
-        private System.Windows.Forms.PictureBox pictureBox1;
-        private DevComponents.DotNetBar.LabelX labelX1;
         private DevComponents.DotNetBar.PanelDockContainer ParkingSpaceMonitorPanel;
         private DevComponents.DotNetBar.DockContainerItem dci_ParkingSpace;
         private DevComponents.DotNetBar.DockContainerItem dci_NumMachine;
@@ -1248,14 +1265,6 @@
         private DevComponents.DotNetBar.DockContainerItem dci_Test;
         private DevComponents.DotNetBar.PanelDockContainer RecordsMonitorPanel;
         private DevComponents.DotNetBar.Controls.DataGridViewX dgvx_parkingRecords;
-        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.DockContainerItem dci_ParkingRecords;
         private DevComponents.DotNetBar.Bar bar_shortcut;
         private DevComponents.DotNetBar.Bar bar_side;
@@ -1272,6 +1281,19 @@
         private DevComponents.DotNetBar.ButtonItem shortcut_about;
         private DevComponents.DotNetBar.ButtonItem btn_advertUpdate;
         private System.Windows.Forms.DateTimePicker dateTimePicker1;
+        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 System.Windows.Forms.DataGridViewTextBoxColumn paymentStatus;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+        private System.Windows.Forms.PictureBox pictureBox1;
+        private DevComponents.DotNetBar.LabelX labelX1;
     }
 }
 

+ 26 - 11
PLCLinker/centralController/FormCentralController.cs

@@ -28,7 +28,7 @@ namespace centralController
             }
             Monitor.Monitor.ins.Start();
 
-            //进度条测试
+            //进度条显示
             Task.Factory.StartNew(() =>
             {
                 int temp = 0;
@@ -50,7 +50,7 @@ namespace centralController
 
             //定时器,定时更新停车记录
             System.Windows.Forms.Timer recordsTimer = new System.Windows.Forms.Timer();
-            recordsTimer.Interval = 5000;
+            recordsTimer.Interval = 10000;
             recordsTimer.Tick += new EventHandler(RefreshRecords);
             recordsTimer.Start();
 
@@ -97,6 +97,18 @@ namespace centralController
                 });
             }
         }
+
+        /// <summary>
+        /// 屏显测试
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void button2_Click(object sender, EventArgs e)
+        {
+            string disp = textBox1.Text;
+            string audio = textBox2.Text;
+            Monitor.Monitor.allInOneMachine.DispForAWhile(0, disp, 10, 1, audio);
+        }
         #endregion
 
         #region 系统
@@ -164,14 +176,17 @@ namespace centralController
         /// <param name="e"></param>
         private void btn_advertUpdate_Click(object sender, EventArgs e)
         {
-            if (Monitor.Monitor.advertMgr != null)
-            {
-                if (Monitor.Monitor.advertMgr.UpdateAdvert())
-                    MessageBox.Show("更新成功", "提示");
-                else
-                    MessageBox.Show("更新失败,请稍后重试", "提示");
-            }
-
+            Task.Factory.StartNew(()=> {
+                MessageBox.Show("更新中,请稍候。", "提示");
+                string adAlert = "";
+                if (Monitor.Monitor.advertMgr != null)
+                {
+                    if (Monitor.Monitor.advertMgr.UpdateAdvert(out adAlert))
+                        MessageBox.Show("更新成功\n"+adAlert, "提示");
+                    else
+                        MessageBox.Show("更新失败,请稍后重试", "提示");
+                }
+            });
         }
         #endregion
 
@@ -466,7 +481,7 @@ namespace centralController
         {
             Close();
         }
-        # endregion
+        #endregion
 
     }
 }

+ 3 - 0
PLCLinker/centralController/FormCentralController.resx

@@ -147,6 +147,9 @@
   <metadata name="parkingPrice.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="paymentStatus.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>25</value>
   </metadata>

+ 131 - 123
PLCLinker/centralController/FormRecordsManager.Designer.cs

@@ -33,27 +33,28 @@
             this.superTabControlPanel1 = new DevComponents.DotNetBar.SuperTabControlPanel();
             this.tlp_parkingRecord = new System.Windows.Forms.TableLayoutPanel();
             this.dgvx_parkingRecords = 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.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+            this.dtp_endDate = new System.Windows.Forms.DateTimePicker();
             this.lbx_startDate = new DevComponents.DotNetBar.LabelX();
             this.labelX1 = new DevComponents.DotNetBar.LabelX();
             this.btnx_parkingRecordSearch = new DevComponents.DotNetBar.ButtonX();
             this.btnx_export = new DevComponents.DotNetBar.ButtonX();
             this.labelX2 = new DevComponents.DotNetBar.LabelX();
             this.tb_license = new System.Windows.Forms.TextBox();
+            this.dtp_startDate = new System.Windows.Forms.DateTimePicker();
             this.sti_parkingRecords = new DevComponents.DotNetBar.SuperTabItem();
             this.superTabControlPanel3 = new DevComponents.DotNetBar.SuperTabControlPanel();
             this.sti_dailySummary = new DevComponents.DotNetBar.SuperTabItem();
             this.sti_carRecords = new DevComponents.DotNetBar.SuperTabItem();
-            this.dtp_startDate = new System.Windows.Forms.DateTimePicker();
-            this.dtp_endDate = new System.Windows.Forms.DateTimePicker();
+            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.paymentStatus = new System.Windows.Forms.DataGridViewTextBoxColumn();
             ((System.ComponentModel.ISupportInitialize)(this.stc_recordManager)).BeginInit();
             this.stc_recordManager.SuspendLayout();
             this.superTabControlPanel1.SuspendLayout();
@@ -87,7 +88,7 @@
             this.stc_recordManager.ReorderTabsEnabled = true;
             this.stc_recordManager.SelectedTabFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold);
             this.stc_recordManager.SelectedTabIndex = 0;
-            this.stc_recordManager.Size = new System.Drawing.Size(943, 464);
+            this.stc_recordManager.Size = new System.Drawing.Size(1031, 481);
             this.stc_recordManager.TabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Left;
             this.stc_recordManager.TabFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.stc_recordManager.TabIndex = 0;
@@ -100,9 +101,9 @@
             // 
             this.superTabControlPanel1.Controls.Add(this.tlp_parkingRecord);
             this.superTabControlPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.superTabControlPanel1.Location = new System.Drawing.Point(93, 0);
+            this.superTabControlPanel1.Location = new System.Drawing.Point(99, 0);
             this.superTabControlPanel1.Name = "superTabControlPanel1";
-            this.superTabControlPanel1.Size = new System.Drawing.Size(850, 464);
+            this.superTabControlPanel1.Size = new System.Drawing.Size(932, 481);
             this.superTabControlPanel1.TabIndex = 1;
             this.superTabControlPanel1.TabItem = this.sti_parkingRecords;
             // 
@@ -118,7 +119,7 @@
             this.tlp_parkingRecord.RowCount = 2;
             this.tlp_parkingRecord.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 15F));
             this.tlp_parkingRecord.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 85F));
-            this.tlp_parkingRecord.Size = new System.Drawing.Size(850, 464);
+            this.tlp_parkingRecord.Size = new System.Drawing.Size(932, 481);
             this.tlp_parkingRecord.TabIndex = 2;
             // 
             // dgvx_parkingRecords
@@ -133,7 +134,8 @@
             this.realParkTime,
             this.realGetTime,
             this.receiptNum,
-            this.parkingPrice});
+            this.parkingPrice,
+            this.paymentStatus});
             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)));
@@ -144,84 +146,14 @@
             this.dgvx_parkingRecords.DefaultCellStyle = dataGridViewCellStyle1;
             this.dgvx_parkingRecords.Dock = System.Windows.Forms.DockStyle.Fill;
             this.dgvx_parkingRecords.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229)))));
-            this.dgvx_parkingRecords.Location = new System.Drawing.Point(3, 72);
+            this.dgvx_parkingRecords.Location = new System.Drawing.Point(3, 75);
             this.dgvx_parkingRecords.MinimumSize = new System.Drawing.Size(389, 0);
             this.dgvx_parkingRecords.Name = "dgvx_parkingRecords";
             this.dgvx_parkingRecords.RowTemplate.Height = 23;
             this.dgvx_parkingRecords.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
-            this.dgvx_parkingRecords.Size = new System.Drawing.Size(844, 389);
+            this.dgvx_parkingRecords.Size = new System.Drawing.Size(926, 403);
             this.dgvx_parkingRecords.TabIndex = 1;
             // 
-            // 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;
-            // 
             // tableLayoutPanel1
             // 
             this.tableLayoutPanel1.ColumnCount = 8;
@@ -232,7 +164,7 @@
             this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 85F));
             this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
             this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 80F));
-            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 83F));
+            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 84F));
             this.tableLayoutPanel1.Controls.Add(this.dtp_endDate, 3, 0);
             this.tableLayoutPanel1.Controls.Add(this.lbx_startDate, 0, 0);
             this.tableLayoutPanel1.Controls.Add(this.labelX1, 2, 0);
@@ -247,9 +179,19 @@
             this.tableLayoutPanel1.Name = "tableLayoutPanel1";
             this.tableLayoutPanel1.RowCount = 1;
             this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
-            this.tableLayoutPanel1.Size = new System.Drawing.Size(844, 63);
+            this.tableLayoutPanel1.Size = new System.Drawing.Size(926, 66);
             this.tableLayoutPanel1.TabIndex = 2;
             // 
+            // dtp_endDate
+            // 
+            this.dtp_endDate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+            this.dtp_endDate.CalendarFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.dtp_endDate.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.dtp_endDate.Location = new System.Drawing.Point(342, 20);
+            this.dtp_endDate.Name = "dtp_endDate";
+            this.dtp_endDate.Size = new System.Drawing.Size(163, 26);
+            this.dtp_endDate.TabIndex = 12;
+            // 
             // lbx_startDate
             // 
             // 
@@ -260,7 +202,7 @@
             this.lbx_startDate.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.lbx_startDate.Location = new System.Drawing.Point(3, 3);
             this.lbx_startDate.Name = "lbx_startDate";
-            this.lbx_startDate.Size = new System.Drawing.Size(79, 57);
+            this.lbx_startDate.Size = new System.Drawing.Size(79, 60);
             this.lbx_startDate.TabIndex = 3;
             this.lbx_startDate.Text = "起始日期:";
             // 
@@ -272,9 +214,9 @@
             this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
             this.labelX1.Dock = System.Windows.Forms.DockStyle.Fill;
             this.labelX1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            this.labelX1.Location = new System.Drawing.Point(230, 3);
+            this.labelX1.Location = new System.Drawing.Point(257, 3);
             this.labelX1.Name = "labelX1";
-            this.labelX1.Size = new System.Drawing.Size(79, 57);
+            this.labelX1.Size = new System.Drawing.Size(79, 60);
             this.labelX1.TabIndex = 4;
             this.labelX1.Text = "截止日期:";
             // 
@@ -284,7 +226,7 @@
             this.btnx_parkingRecordSearch.Anchor = System.Windows.Forms.AnchorStyles.Left;
             this.btnx_parkingRecordSearch.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
             this.btnx_parkingRecordSearch.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            this.btnx_parkingRecordSearch.Location = new System.Drawing.Point(683, 14);
+            this.btnx_parkingRecordSearch.Location = new System.Drawing.Point(764, 15);
             this.btnx_parkingRecordSearch.Name = "btnx_parkingRecordSearch";
             this.btnx_parkingRecordSearch.Size = new System.Drawing.Size(74, 35);
             this.btnx_parkingRecordSearch.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
@@ -298,7 +240,7 @@
             this.btnx_export.Anchor = System.Windows.Forms.AnchorStyles.Left;
             this.btnx_export.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
             this.btnx_export.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            this.btnx_export.Location = new System.Drawing.Point(763, 14);
+            this.btnx_export.Location = new System.Drawing.Point(844, 15);
             this.btnx_export.Name = "btnx_export";
             this.btnx_export.Size = new System.Drawing.Size(75, 35);
             this.btnx_export.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
@@ -314,20 +256,30 @@
             this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
             this.labelX2.Dock = System.Windows.Forms.DockStyle.Fill;
             this.labelX2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            this.labelX2.Location = new System.Drawing.Point(457, 3);
+            this.labelX2.Location = new System.Drawing.Point(511, 3);
             this.labelX2.Name = "labelX2";
-            this.labelX2.Size = new System.Drawing.Size(79, 57);
+            this.labelX2.Size = new System.Drawing.Size(79, 60);
             this.labelX2.TabIndex = 9;
             this.labelX2.Text = "车辆号牌:";
             // 
             // tb_license
             // 
             this.tb_license.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
-            this.tb_license.Location = new System.Drawing.Point(542, 18);
+            this.tb_license.Location = new System.Drawing.Point(596, 20);
             this.tb_license.Name = "tb_license";
-            this.tb_license.Size = new System.Drawing.Size(135, 26);
+            this.tb_license.Size = new System.Drawing.Size(162, 26);
             this.tb_license.TabIndex = 10;
             // 
+            // dtp_startDate
+            // 
+            this.dtp_startDate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+            this.dtp_startDate.CalendarFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.dtp_startDate.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.dtp_startDate.Location = new System.Drawing.Point(88, 20);
+            this.dtp_startDate.Name = "dtp_startDate";
+            this.dtp_startDate.Size = new System.Drawing.Size(163, 26);
+            this.dtp_startDate.TabIndex = 11;
+            // 
             // sti_parkingRecords
             // 
             this.sti_parkingRecords.AttachedControl = this.superTabControlPanel1;
@@ -357,31 +309,86 @@
             this.sti_carRecords.Name = "sti_carRecords";
             this.sti_carRecords.Text = "车辆停取记录";
             // 
-            // dtp_startDate
+            // parkingRecordsID
             // 
-            this.dtp_startDate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
-            this.dtp_startDate.CalendarFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            this.dtp_startDate.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            this.dtp_startDate.Location = new System.Drawing.Point(88, 18);
-            this.dtp_startDate.Name = "dtp_startDate";
-            this.dtp_startDate.Size = new System.Drawing.Size(136, 26);
-            this.dtp_startDate.TabIndex = 11;
+            this.parkingRecordsID.HeaderText = "停车记录ID";
+            this.parkingRecordsID.MaxInputLength = 11;
+            this.parkingRecordsID.Name = "parkingRecordsID";
+            this.parkingRecordsID.ReadOnly = true;
+            this.parkingRecordsID.Width = 90;
             // 
-            // dtp_endDate
+            // userID
             // 
-            this.dtp_endDate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
-            this.dtp_endDate.CalendarFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            this.dtp_endDate.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            this.dtp_endDate.Location = new System.Drawing.Point(315, 18);
-            this.dtp_endDate.Name = "dtp_endDate";
-            this.dtp_endDate.Size = new System.Drawing.Size(136, 26);
-            this.dtp_endDate.TabIndex = 12;
+            this.userID.HeaderText = "用户ID";
+            this.userID.MaxInputLength = 8;
+            this.userID.Name = "userID";
+            this.userID.ReadOnly = true;
+            this.userID.Width = 70;
+            // 
+            // numberPlate
+            // 
+            this.numberPlate.HeaderText = "号牌";
+            this.numberPlate.MaxInputLength = 9;
+            this.numberPlate.Name = "numberPlate";
+            this.numberPlate.ReadOnly = true;
+            this.numberPlate.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            this.numberPlate.Width = 80;
+            // 
+            // parkingSpaceID
+            // 
+            this.parkingSpaceID.HeaderText = "车位编号";
+            this.parkingSpaceID.MaxInputLength = 4;
+            this.parkingSpaceID.Name = "parkingSpaceID";
+            this.parkingSpaceID.ReadOnly = true;
+            this.parkingSpaceID.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            this.parkingSpaceID.Width = 80;
+            // 
+            // realParkTime
+            // 
+            this.realParkTime.HeaderText = "实际停入时间";
+            this.realParkTime.MaxInputLength = 50;
+            this.realParkTime.Name = "realParkTime";
+            this.realParkTime.ReadOnly = true;
+            this.realParkTime.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            this.realParkTime.Width = 140;
+            // 
+            // realGetTime
+            // 
+            this.realGetTime.HeaderText = "实际取出时间";
+            this.realGetTime.MaxInputLength = 50;
+            this.realGetTime.Name = "realGetTime";
+            this.realGetTime.ReadOnly = true;
+            this.realGetTime.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            this.realGetTime.Width = 140;
+            // 
+            // receiptNum
+            // 
+            this.receiptNum.HeaderText = "凭证号";
+            this.receiptNum.MaxInputLength = 8;
+            this.receiptNum.Name = "receiptNum";
+            this.receiptNum.ReadOnly = true;
+            this.receiptNum.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            // 
+            // parkingPrice
+            // 
+            this.parkingPrice.HeaderText = "停车费用";
+            this.parkingPrice.MaxInputLength = 11;
+            this.parkingPrice.Name = "parkingPrice";
+            this.parkingPrice.ReadOnly = true;
+            this.parkingPrice.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
+            // 
+            // paymentStatus
+            // 
+            this.paymentStatus.HeaderText = "收费状态";
+            this.paymentStatus.MaxInputLength = 11;
+            this.paymentStatus.Name = "paymentStatus";
+            this.paymentStatus.ReadOnly = true;
             // 
             // FormRecordsManager
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(943, 464);
+            this.ClientSize = new System.Drawing.Size(1031, 481);
             this.Controls.Add(this.stc_recordManager);
             this.Name = "FormRecordsManager";
             this.Text = "FormRecordsManager";
@@ -403,14 +410,6 @@
         private DevComponents.DotNetBar.SuperTabItem sti_parkingRecords;
         private System.Windows.Forms.TableLayoutPanel tlp_parkingRecord;
         private DevComponents.DotNetBar.Controls.DataGridViewX dgvx_parkingRecords;
-        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 System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
         private DevComponents.DotNetBar.LabelX lbx_startDate;
         private DevComponents.DotNetBar.LabelX labelX1;
@@ -423,5 +422,14 @@
         private System.Windows.Forms.TextBox tb_license;
         private System.Windows.Forms.DateTimePicker dtp_endDate;
         private System.Windows.Forms.DateTimePicker dtp_startDate;
+        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 System.Windows.Forms.DataGridViewTextBoxColumn paymentStatus;
     }
 }

+ 3 - 0
PLCLinker/centralController/FormRecordsManager.resx

@@ -141,4 +141,7 @@
   <metadata name="parkingPrice.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
     <value>True</value>
   </metadata>
+  <metadata name="paymentStatus.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
 </root>

+ 14 - 7
PLCLinker/centralController/Monitor/Monitor.cs

@@ -1,4 +1,5 @@
-using BroadcastModule;
+using allInOneMachine;
+using BroadcastModule;
 using centralController.advert;
 using db;
 using Monitor;
@@ -58,7 +59,7 @@ namespace Monitor
         /// <summary>
         /// 显示板操作对象句柄
         /// </summary>
-        public static BroadcastBoard allInOneMachine;
+        public static BroadcastLinker allInOneMachine;
         public static string allInOneMachineIP { get; set; }
         public static int allInOneMachinePort { get; set; }
         /// <summary>
@@ -303,11 +304,17 @@ namespace Monitor
             StringBuilder notificationStr = new StringBuilder();
             lock (notificationQueue)
             {
-                Queue<string>.Enumerator notiEnumer = notificationQueue.GetEnumerator();
-                while (notiEnumer.MoveNext())
+                string[] strs = notificationQueue.ToArray();
+                Array.Reverse(strs);
+                for (int i = 0; i < strs.Length; i++)
                 {
-                    notificationStr.Append(notiEnumer.Current);
+                    notificationStr.Append(strs[i]);
                 }
+                //Queue<string>.Enumerator notiEnumer = notificationQueue.GetEnumerator();
+                //while (notiEnumer.MoveNext())
+                //{
+                //    notificationStr.Append(notiEnumer.Current);
+                //}
             }
             return notificationStr.ToString();
         }
@@ -376,12 +383,12 @@ namespace Monitor
             {
                 DateTime yesterday = DateTime.Now - (new TimeSpan(1, 0, 0, 0));
                 DateTime twoDaysAgo = DateTime.Now - (new TimeSpan(2, 0, 0, 0));
-                getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice " +
+                getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice,paymentStatus " +
                 "from parkingrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and (realParkTime like '" + now.ToString("yyyy-MM-dd") + "%' or realParkTime like '" + yesterday.ToString("yyyy-MM-dd") + "%' or realParkTime like '" + twoDaysAgo.ToString("yyyy-MM-dd") + "%');";
             }
             else
             {
-                getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice " +
+                getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice,paymentStatus " +
                 "from parkingrecords where numberPlate " + (license == "" ? "like '%" : "= '" + license) + "' and realParkTime >= '" + startTime + "' and realParkTime <= '" + endTime + "';";
             }
 

+ 7 - 10
PLCLinker/centralController/Monitor/SystemInitializer.cs

@@ -4,6 +4,7 @@ using System.Configuration;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using allInOneMachine;
 using BroadcastModule;
 using centralController.advert;
 using centralController.model;
@@ -51,8 +52,8 @@ namespace Monitor
                 Monitor.plcParkingSpaceCount = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcParkingSpaceCount"));
                 Monitor.plcRefreshInterval = Convert.ToInt32(ConfigurationManager.AppSettings.Get("plcRefreshInterval"));
                 //显示屏
-                Monitor.allInOneMachineIP = ConfigurationManager.AppSettings.Get("allInOneMachineIP");
-                Monitor.allInOneMachinePort = Convert.ToInt32(ConfigurationManager.AppSettings.Get("allInOneMachinePort"));
+                //Monitor.allInOneMachineIP = ConfigurationManager.AppSettings.Get("allInOneMachineIP");
+                //Monitor.allInOneMachinePort = Convert.ToInt32(ConfigurationManager.AppSettings.Get("allInOneMachinePort"));
                 //webServer端口
                 Monitor.webPort = Convert.ToInt32(ConfigurationManager.AppSettings.Get("webPort"));
                 //车库ID
@@ -125,13 +126,8 @@ namespace Monitor
             Monitor.numMachineLinker.Start();
             //初始化显示板对象,显示板udp面向无连接
             Monitor.SetNotification("初始化屏显...");
-            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();
+            BroadcastLinker.Start();
+            Monitor.allInOneMachine = BroadcastLinker.ins;//new BroadcastBoard(Monitor.allInOneMachineIP, Monitor.allInOneMachinePort);
             //初始化广告实例
             Monitor.advertMgr = new AdvertManager();
             //initStatus = initStatus && AdvertMgrInit(3);
@@ -204,12 +200,13 @@ namespace Monitor
         /// <returns></returns>
         internal bool AdvertMgrInit(int retryCount)
         {
+            string adAlert = "";
             int temp = retryCount;
             while (temp-- > 0)
             {
                 if (Monitor.advertMgr != null)
                 {
-                    if (Monitor.advertMgr.UpdateAdvert())
+                    if (Monitor.advertMgr.UpdateAdvert(out adAlert))
                         return true;
                 }
             }

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

@@ -23,7 +23,7 @@ namespace NumMachine
         /// <summary>
         /// 刷新时间间隔与个数
         /// </summary>
-        public const int REFRESHINGTIME = 500, FILTERINGNUMBER = 8;
+        public const int REFRESHINGTIME = 500, FILTERINGNUMBER = 4;
         ///<summary>通过设备句柄访问pic;链接时add,系统关闭时remove</summary>
         private static Dictionary<int, IntPtr> devPicMap = new Dictionary<int, IntPtr>();
         ///<summary>通过名字获取pic对象;创建pic时add,系统关闭remove</summary>
@@ -512,19 +512,8 @@ namespace NumMachine
                                     if (node != null && ipIdMap.TryGetValue(node.ip, out node.id))
                                     {
                                         LicBuffer.Enqueue((NumberMachineNode)node.Clone());
-                                        if (node.id == 1)
-                                        {
-                                            Task.Factory.StartNew(() =>
-                                            {
-                                                if (Monitor.Monitor.allInOneMachine != null)
-                                                {
-                                                    Monitor.Monitor.allInOneMachine.Play(1, BroadcastModule.BroadcastBoard.PlayMode.temporary, node.LicenseNum, 6);
-                                                    Monitor.Monitor.allInOneMachine.Play(1, BroadcastModule.BroadcastBoard.PlayMode.audio, node.LicenseNum + ",入场");
-                                                    Thread.Sleep(5000);
-                                                    Monitor.Monitor.allInOneMachine.Play(1, BroadcastModule.BroadcastBoard.PlayMode.readBuffer, "", 0, 0);
-                                                }
-                                            });
-                                        }
+                                        Monitor.Monitor.allInOneMachine.DispForAWhile(2, node.LicenseNum, 25, 1, node.LicenseNum + ",入场");
+                                        Monitor.Monitor.allInOneMachine.DispForAWhile(3, "号牌机编号:" + node.id, 25, 1, "");
                                     }
                                 }
                             }

+ 149 - 145
PLCLinker/centralController/Terminal/Terminal.cs

@@ -400,96 +400,96 @@ namespace Terminal
         /// </summary>
         private static void ParkNumSubProcess()
         {
-            int numMachineLaunch = Monitor.Monitor.mainBlockInfo.numMachineLaunch;
-            if (numMachineLaunch != 0)
+            //int numMachineLaunch = Monitor.Monitor.mainBlockInfo.numMachineLaunch;
+            //if (numMachineLaunch != 0)
+            //{
+            for (int i = 0; i < terminalInfo.Count; i++)
             {
-                for (int i = 0; i < terminalInfo.Count; i++)
+                //启动指令与终端id匹配
+                //if (numMachineLaunch == terminalInfo[i].terminalID)
+                if (terminalInfo[i].numMachineLaunch == 1 && !idLicMap.ContainsKey(terminalInfo[i].terminalID) && terminalInfo[i].licVerification == 0)
                 {
-                    //启动指令与终端id匹配
-                    if (numMachineLaunch == terminalInfo[i].terminalID)
+                    int numReceivedStatus = 0;//1获得,2终止
+                    TerminalStru term = terminalInfo[i];
+                    if (term.terminalStatus == (short)1)
                     {
-                        int numReceivedStatus = 0;//1获得,2终止
-                        TerminalStru term = terminalInfo[i];
-                        if (term.terminalStatus == (short)1)
+                        string license = Monitor.Monitor.numMachineLinker.GetLicensePlate(terminalInfo[i].terminalID);
+                        Monitor.Monitor.SetNotification("启动" + terminalInfo[i].terminalID + "号号牌机,号牌:" + license);
+                        //未获得号牌,告知PLC终止,告诉终端提示用户重新操作
+                        if (license == "")
                         {
-                            string license = Monitor.Monitor.numMachineLinker.GetLicensePlate(numMachineLaunch);
-                            Monitor.Monitor.SetNotification("启动" + numMachineLaunch + "号号牌机,号牌:" + license);
-                            //未获得号牌,告知PLC终止,告诉终端提示用户重新操作
-                            if (license == "")
+                            MainBlockStru mb = new MainBlockStru
                             {
-                                MainBlockStru mb = new MainBlockStru
-                                {
-                                    licenseReceived = (short)2
-                                };
-                                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
+                                licenseReceived = (short)2
+                            };
+                            Monitor.Monitor.PLC.WriteToPLC(mb, PLCDataType.central);
+                            TerminalStru ts = new TerminalStru
+                            {
+                                terminalID = (short)terminalInfo[i].terminalID,
+                                paymentStatus = -1,
+                                parkingFee = -1,
+                                userType = -1,
+                                licVerification = (short)2
+                            };
+                            Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
+                            Log.WriteLog(LogType.process, LogFile.ERROR, "未获得号牌");
+                        }
+                        else
+                        {
+                            //记录或更新当前号牌
+                            lock (idLicMap)
                             {
-                                //记录或更新当前号牌
-                                lock (idLicMap)
+                                if (idLicMap.ContainsKey(terminalInfo[i].terminalID))
                                 {
-                                    if (idLicMap.ContainsKey(numMachineLaunch))
-                                    {
-                                        idLicMap[numMachineLaunch] = license;
-                                    }
-                                    else
-                                    {
-                                        idLicMap.Add(numMachineLaunch, license);
-                                    }
+                                    idLicMap[terminalInfo[i].terminalID] = license;
                                 }
-                                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)
+                                else
                                 {
-                                    int userID = term.licenseCodeA;
-                                    string userLicense = GetLicenseFromTerm(term);
-                                    //与云端数据比对
-                                    ValidateUserInfo(ts, userID, userLicense, out numReceivedStatus);
-                                    if (numReceivedStatus == 2)
-                                    {
-                                        idLicMap.Remove(numMachineLaunch);
-                                    }
+                                    idLicMap.Add(terminalInfo[i].terminalID, license);
                                 }
-                                //非注册用户
-                                else if (term.btnStatus == (short)1)
+                            }
+                            Log.WriteLog(LogType.process, LogFile.ERROR, "号牌" + license + "已记录");
+
+                            TerminalStru ts = new TerminalStru
+                            {
+                                terminalID = (short)terminalInfo[i].terminalID,
+                                paymentStatus = -1,
+                                parkingFee = -1,
+                                userType = -1
+                            };
+                            //注册用户
+                            if (term.btnStatus == (short)2)
+                            {
+                                int userID = term.licenseCodeA;
+                                string userLicense = GetLicenseFromTerm(term);
+                                //与云端数据比对
+                                ValidateUserInfo(ts, userID, userLicense, out numReceivedStatus);
+                                if (numReceivedStatus == 2)
                                 {
-                                    numReceivedStatus = 1;
-                                    ts.licVerification = 1;
-                                    Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
+                                    idLicMap.Remove(terminalInfo[i].terminalID);
                                 }
-                                //无论是否注册,皆告知PLC,已获取号牌或比对异常、终止流程
-                                MainBlockStru mb = new MainBlockStru
-                                {
-                                    licenseReceived = (short)numReceivedStatus
-                                };
-                                Monitor.Monitor.PLC.WriteToPLC(mb, PLCDataType.central);
-                                //号牌获取结果被清零才跳出
-                                Monitor.Monitor.SetNotification("已写入号牌获取结果,等待号牌机启动指令清零");
                             }
-                            while (Monitor.Monitor.mainBlockInfo.numMachineLaunch != 0)
+                            //非注册用户
+                            else if (term.btnStatus == (short)1)
                             {
-                                Thread.Sleep(1000);
+                                numReceivedStatus = 1;
+                                ts.licVerification = 1;
+                                Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
                             }
-                            Monitor.Monitor.SetNotification("号牌机启动指令已被清零");
+                            //无论是否注册,皆告知PLC,已获取号牌或比对异常、终止流程
+                            MainBlockStru mb = new MainBlockStru
+                            {
+                                licenseReceived = (short)numReceivedStatus
+                            };
+                            Monitor.Monitor.PLC.WriteToPLC(mb, PLCDataType.central);
+                            //号牌获取结果被清零才跳出
+                            Monitor.Monitor.SetNotification("已写入号牌获取结果,等待号牌机启动指令清零");
+                        }
+                        while (Monitor.Monitor.mainBlockInfo.numMachineLaunch != 0)
+                        {
+                            Thread.Sleep(1000);
                         }
+                        Monitor.Monitor.SetNotification("号牌机启动指令已被清零");
                     }
                 }
             }
@@ -510,88 +510,85 @@ namespace Terminal
                 //等待完成信号
                 while (Monitor.Monitor.mainBlockInfo.processCompleted != 1)
                 {
-                    Thread.Sleep(100);
+                    Thread.Sleep(200);
                     if (Monitor.Monitor.mainBlockInfo.processStopped == 1)
                         return;
                     Thread.Sleep(200);
                 }
                 //找到终端号,判断是否注册用户
-                for (int i = 0; i < terminalInfo.Count; i++)
+                //拿到号牌
+                if (/*terminalInfo[i].terminalID == currentTerm && */idLicMap.TryGetValue(currentTerm, out license) && license != "")
                 {
-                    //拿到号牌
-                    if (/*terminalInfo[i].terminalID == currentTerm && */idLicMap.TryGetValue(currentTerm, out license) && license != "")
+                    term = terminalInfo[currentTerm - 1];
+                    Thread.Sleep(1500);
+                    //找到停车位置
+                    for (int s = 0; s < Monitor.Monitor.parkingSpaceInfo.Count; s++)
                     {
-                        term = terminalInfo[i];
-                        Thread.Sleep(1500);
-                        //找到停车位置
-                        for (int s = 0; s < Monitor.Monitor.parkingSpaceInfo.Count; s++)
+                        Console.WriteLine(Monitor.Monitor.parkingSpaceInfo[s].receiptNum + "," + term.receiptNum);
+                        if (Monitor.Monitor.parkingSpaceInfo[s].receiptNum == term.receiptNum)
                         {
-                            Console.WriteLine(Monitor.Monitor.parkingSpaceInfo[s].receiptNum + "," + term.receiptNum);
-                            if (Monitor.Monitor.parkingSpaceInfo[s].receiptNum == term.receiptNum)
-                            {
-                                parkingSpaceID = Monitor.Monitor.parkingSpaceInfo[s].parkingSpace;
-                                break;
-                            }
-                        }
-                        //无车位信息则跳出当前循环
-                        if (parkingSpaceID == 0)
-                        {
-                            try { idLicMap.Remove(currentTerm); } catch { }
+                            parkingSpaceID = Monitor.Monitor.parkingSpaceInfo[s].parkingSpace;
                             break;
                         }
-                        UpdateVehicle(license, 0, 0, true, false, 0);
-                        UpdateVehicle(license, 0, 0, true, true, 0);
-                        //插入停车记录
-                        string parkingRecordsSql = "";
-                        if (term.licenseCodeA != 0)
-                        {
-                            parkingRecordsSql = "INSERT INTO parkingrecords (userID, numberPlate,parkingSpaceID,garageID,parkingRecordsState,realParkTime,receiptNum,parkingPrice)" +
-                                "values ('" + term.licenseCodeA + "','" + license + "','" + parkingSpaceID + "','" + Monitor.Monitor.garageID + "',3,'" + DateTime.Now.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") + "','" + term.receiptNum + "',NULL);";
-                        }
-                        else
-                        {
-                            parkingRecordsSql = "INSERT INTO parkingrecords (userID, numberPlate,parkingSpaceID,garageID,parkingRecordsState,realParkTime,receiptNum,parkingPrice)" +
-                                "values ('" + 1 + "','" + license + "','" + parkingSpaceID + "','" + Monitor.Monitor.garageID + "',3,'" + DateTime.Now.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") + "','" + term.receiptNum + "',NULL);";
-                        }
-                        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, "停车记录已插入," + license + "停在" + parkingSpaceID + ",凭证号:" + term.receiptNum);
-                        Monitor.Monitor.SetNotification("停车记录已插入");
-                        ////注册用户记录插入云端
-                        //if (term.btnStatus == 0)
-                        //{
-                        //Monitor.Monitor.remoteDBOper.Insert(list);
-                        //}
-                        //查询记录ID号
-                        string findRecordSql = "select parkingRecordsID from parkingrecords where receiptNum = " + term.receiptNum + ";";
-                        int parkingRecordsID = 0;
-                        int remoteParkingRecordsID = 0;
-                        QueryParkingRecordsID(findRecordSql, out parkingRecordsID, false);
-                        QueryParkingRecordsID(findRecordSql, out remoteParkingRecordsID, true);
-                        //更新本地车辆表
-                        if (parkingRecordsID != 0)
-                        {
-                            UpdateVehicle(license, 1, parkingRecordsID, true, false, parkingSpaceID);
-                        }
-                        if (remoteParkingRecordsID != 0)
-                        {
-                            UpdateVehicle(license, 1, remoteParkingRecordsID, true, true, parkingSpaceID);
-                        }
-                        Log.WriteLog(LogType.process, LogFile.INFO, "停车记录表已更新");
-                        //更新本地车位
-                        UpdateAllParkingSpace();
-                        //Monitor.Monitor.AddNotification("停车数据库已更新,等待流程结束状态清零。");
-                        //while (Monitor.Monitor.mainBlockInfo.processCompleted != 0)
-                        //{
-                        //    Thread.Sleep(1000);
-                        //}
-                        //中控清除车牌、凭证号、号牌验证等信息
-                        ClearTerminal(term.terminalID);
+                    }
+                    //无车位信息则跳出当前循环
+                    if (parkingSpaceID == 0)
+                    {
                         try { idLicMap.Remove(currentTerm); } catch { }
-                        Monitor.Monitor.SetNotification(license + " 数据库已更新,停车流程结束");
+                        return;
                     }
+                    UpdateVehicle(license, 0, 0, true, false, 0);
+                    UpdateVehicle(license, 0, 0, true, true, 0);
+                    //插入停车记录
+                    string parkingRecordsSql = "";
+                    if (term.licenseCodeA != 0)
+                    {
+                        parkingRecordsSql = "INSERT INTO parkingrecords (userID, numberPlate,parkingSpaceID,garageID,parkingRecordsState,realParkTime,receiptNum,parkingPrice)" +
+                            "values ('" + term.licenseCodeA + "','" + license + "','" + parkingSpaceID + "','" + Monitor.Monitor.garageID + "',3,'" + DateTime.Now.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") + "','" + term.receiptNum + "',NULL);";
+                    }
+                    else
+                    {
+                        parkingRecordsSql = "INSERT INTO parkingrecords (userID, numberPlate,parkingSpaceID,garageID,parkingRecordsState,realParkTime,receiptNum,parkingPrice)" +
+                            "values ('" + 1 + "','" + license + "','" + parkingSpaceID + "','" + Monitor.Monitor.garageID + "',3,'" + DateTime.Now.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") + "','" + term.receiptNum + "',NULL);";
+                    }
+                    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, "停车记录已插入," + license + "停在" + parkingSpaceID + ",凭证号:" + term.receiptNum);
+                    Monitor.Monitor.SetNotification("停车记录已插入");
+                    ////注册用户记录插入云端
+                    //if (term.btnStatus == 0)
+                    //{
+                    //Monitor.Monitor.remoteDBOper.Insert(list);
+                    //}
+                    //查询记录ID号
+                    string findRecordSql = "select parkingRecordsID from parkingrecords where receiptNum = " + term.receiptNum + ";";
+                    int parkingRecordsID = 0;
+                    int remoteParkingRecordsID = 0;
+                    QueryParkingRecordsID(findRecordSql, out parkingRecordsID, false);
+                    QueryParkingRecordsID(findRecordSql, out remoteParkingRecordsID, true);
+                    //更新本地车辆表
+                    if (parkingRecordsID != 0)
+                    {
+                        UpdateVehicle(license, 1, parkingRecordsID, true, false, parkingSpaceID);
+                    }
+                    if (remoteParkingRecordsID != 0)
+                    {
+                        UpdateVehicle(license, 1, remoteParkingRecordsID, true, true, parkingSpaceID);
+                    }
+                    Log.WriteLog(LogType.process, LogFile.INFO, "停车记录表已更新");
+                    //更新本地车位
+                    UpdateAllParkingSpace();
+                    //Monitor.Monitor.AddNotification("停车数据库已更新,等待流程结束状态清零。");
+                    //while (Monitor.Monitor.mainBlockInfo.processCompleted != 0)
+                    //{
+                    //    Thread.Sleep(1000);
+                    //}
+                    //中控清除车牌、凭证号、号牌验证等信息
+                    ClearTerminal(term.terminalID);
+                    try { idLicMap.Remove(currentTerm); } catch { }
+                    Monitor.Monitor.SetNotification(license + " 数据库已更新,停车流程结束");
                 }
             }
         }
@@ -959,10 +956,17 @@ namespace Terminal
                         }
                         Monitor.Monitor.SetNotification("用户类型:" + monthCardType + ",费用:" + fee + ",等待凭证号被清除且流程结束后更新车辆状态");
                         //4.等待终端获得收费完成信号且将凭证号清除后,清除收费完成信号并将信息写入数据库
+                        int count = 0;
                         while (!isClosing && termIndex != -1)
                         {
-                            if (terminalInfo[termIndex - 1].receiptNum == 0 && Monitor.Monitor.mainBlockInfo.processCompleted == 1)
+                            if (Monitor.Monitor.mainBlockInfo.processCompleted == 1)
                             {
+                                while (terminalInfo[termIndex - 1].receiptNum != 0)
+                                {
+                                    count++;
+                                    if (count == 1)
+                                        Monitor.Monitor.SetNotification("等待凭证号清除");
+                                }
                                 int paymentStatus = 0;
                                 for (int i = 0; i < terminalInfo.Count; i++)
                                 {

+ 75 - 15
PLCLinker/centralController/WebServer/CentralForWebSocketServer.cs

@@ -19,6 +19,8 @@ namespace WebServer
     {
         public MultiSocketThread multiSocketThread { set; get; }
         public static BlockingQueue blockingQueue = new BlockingQueue();
+        private Queue<MessageUTF8> reserveQueue = null;
+        private object reserveLock = new object();
         Int32 port;
         IPAddress localAddr;
         bool isClosing;
@@ -56,6 +58,7 @@ namespace WebServer
         private void Run()
         {
             bool linked = false;
+            //web重连机制
             Task.Factory.StartNew(() =>
             {
                 TcpListener listener = null;
@@ -113,6 +116,76 @@ namespace WebServer
                 if (multiSocketThread != null)
                     multiSocketThread.Close();
             });
+            //处理接收到的指令
+            Task.Factory.StartNew(() =>
+            {
+                while (!isClosing)
+                {
+                    object obj = blockingQueue.Dequeue();
+                    if (obj.GetType().Equals(typeof(MessageUTF8)))
+                    {
+                        MessageUTF8 msg = (MessageUTF8)obj;
+                        switch (msg.cmd)
+                        {
+                            //预约停
+                            case 'a':
+                                lock (reserveLock)
+                                {
+                                    reserveQueue.Enqueue(msg);
+                                }
+                                //通知PLC减少可预约车位数
+                                break;
+                            //预约取
+                            case 'b':
+                                break;
+                            //更新广告
+                            case 'c':
+                                string adAlert = "";
+                                bool result = Monitor.Monitor.advertMgr.UpdateAdvert(out adAlert);
+                                if (!result)
+                                {
+                                    Monitor.Monitor.SetNotification("广告更新失败,请尝试手动更新");
+                                }
+                                else
+                                {
+                                    Monitor.Monitor.SetNotification("广告更新成功\n" + adAlert);
+                                }
+                                break;
+                            default:
+                                Monitor.Monitor.SetNotification("接收到无法识别的指令");
+                                break;
+                        }
+                    }
+                }
+            });
+            //处理超时预约指令
+            Task.Factory.StartNew(() =>
+            {
+                while (!isClosing)
+                {
+                    lock (reserveLock)
+                    {
+                        for (int i = 0; i < reserveQueue.Count; i++)
+                        {
+                            try
+                            {
+                                MessageUTF8 msg = reserveQueue.Dequeue();
+                                DateTime startTime = DateTime.Parse(msg.bookTime);
+                                if ((DateTime.Now - startTime).TotalMinutes > msg.bookLength * 60)
+                                {
+                                    //通知PLC将可预约车位数恢复一个
+                                }
+                                else
+                                {
+                                    reserveQueue.Enqueue(msg);
+                                }
+                            }
+                            catch { }
+                        }
+                    }
+                    Thread.Sleep(5000);
+                }
+            });
         }
 
         private void DownloadAds()
@@ -138,9 +211,10 @@ namespace WebServer
                 client.Close();
                 localAddr = IPAddress.Parse(ip);
                 this.port = port;//Convert.ToInt32(ConfigurationManager.AppSettings["webPort"]);
+                reserveQueue = new Queue<MessageUTF8>();
                 Console.WriteLine(ip.ToString());
             }
-            catch (Exception e) { Console.WriteLine("wrong ipAddr");return false; }
+            catch (Exception e) { Console.WriteLine("wrong ipAddr"); return false; }
             Run();
             return true;
         }
@@ -150,20 +224,6 @@ namespace WebServer
         public void Stop()
         {
             isClosing = true;
-        }
-        /// <summary>
-        /// 停车预约
-        /// </summary>
-        public void ParkBooking()
-        {
-
-        }
-        /// <summary>
-        /// 取车预约
-        /// </summary>
-        public void FetchBooking()
-        {
-
         }
         /// <summary>
         /// 预约停车记录

+ 0 - 4
PLCLinker/centralController/WebServer/IWebServer.cs

@@ -12,10 +12,6 @@ namespace WebServer
 
         void Stop();
 
-        void ParkBooking();
-
-        void FetchBooking();
-
         void bookParkRecord();
 
         void bookFetchRecord();

+ 14 - 13
PLCLinker/centralController/advert/AdvertManager.cs

@@ -16,9 +16,10 @@ namespace centralController.advert
         /// 从数据库获取URL,更新本地广告文件
         /// </summary>
         /// <returns></returns>
-        public bool UpdateAdvert()
+        public bool UpdateAdvert(out string notification)
         {
             bool result = true;
+            notification = "";
             List<string> urls = new List<string>();
             if (Monitor.Monitor.remoteDBOper != null)
             {
@@ -42,6 +43,7 @@ namespace centralController.advert
                     }
                     catch { result = false; }
                 }
+                notification += "url读取结果:\n";
                 //删除本地文件,下载url中文件到本地
                 try
                 {
@@ -61,26 +63,25 @@ namespace centralController.advert
                             File.Delete(fileList[i]);
                         }
                     }
-                }catch(Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "未找到需删除文件或删除文件异常\n"+e.Message); }
+                }
+                catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "未找到需删除文件或删除文件异常\n" + e.Message); }
                 try
                 {
                     if (Directory.Exists(Monitor.Monitor.advertPath + @"\temp"))
-                        Directory.Delete(Monitor.Monitor.advertPath + @"\temp",true);
+                        Directory.Delete(Monitor.Monitor.advertPath + @"\temp", true);
                 }
-                catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "未找到需删除文件夹或删除文件夹异常\n"+e.Message); }
+                catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "未找到需删除文件夹或删除文件夹异常\n" + e.Message); }
 
                 if (result && urls.Count() > 0)
                 {
-                    Task.Factory.StartNew(() =>
+                    List<string>.Enumerator enumer = urls.GetEnumerator();
+                    while (enumer.MoveNext())
                     {
-                        List<string>.Enumerator enumer = urls.GetEnumerator();
-                        while (enumer.MoveNext())
-                        {
-                            string fileName = Path.GetFileName(enumer.Current);
-                            bool response = HttpDownload(enumer.Current, Monitor.Monitor.advertPath + @"\" + fileName);
-                            result = result && response;
-                        }
-                    });
+                        string fileName = Path.GetFileName(enumer.Current);
+                        bool response = HttpDownload(enumer.Current, Monitor.Monitor.advertPath + @"\" + fileName);
+                        result = result || response;
+                        notification += (response?"成功:":"失败:")+fileName+"\n";
+                    }
                 }
             }
             return result;

+ 183 - 0
PLCLinker/centralController/allInOneMachine/broadcastModule.cs

@@ -0,0 +1,183 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using BroadcastModule;
+
+namespace allInOneMachine
+{
+    public class BroadcastLinker
+    {
+        public static BroadcastLinker ins = new BroadcastLinker();
+        static BroadcastBoard board;
+        static string ip;
+        static int port;
+        static int minimumInterval = 5;
+        static DisplayedMsg[] displayedMsg = new DisplayedMsg[4];
+        static Queue<DisplayedMsg>[] msgQueue = new Queue<DisplayedMsg>[4];
+        static object msgLock = new object();
+
+        /// <summary>
+        /// 初始化单例
+        /// </summary>
+        public static void Start()
+        {
+            Task.Factory.StartNew(() =>
+            {
+                try
+                {
+                    ip = ConfigurationManager.AppSettings["allInOneMachineIP"];
+                    port = Int32.Parse(ConfigurationManager.AppSettings["allInOneMachinePort"]);
+                    board = new BroadcastBoard(ip, port, 5);
+                    board.UpdateTime();
+                    //ins.VolumeControl(100);
+                    board.Play(0, BroadcastBoard.PlayMode.download, "欢迎光临");
+                    board.Play(1, BroadcastBoard.PlayMode.download, "智象停车");
+                    board.Play(2, BroadcastBoard.PlayMode.download, "date");
+                    board.Play(3, BroadcastBoard.PlayMode.download, "time");
+                    //ins.Refresh();
+                    board.Play(0, BroadcastBoard.PlayMode.audio, "欢迎光临");
+                    OriginState();
+                    for (int i = 0; i < 4; i++)
+                    {
+                        displayedMsg[i] = null;
+                        msgQueue[i] = new Queue<DisplayedMsg>();
+                    }
+                }
+                catch (Exception e) { Console.WriteLine(e.Message); ins = null; }
+                Run();
+            });
+        }
+
+        static void Run()
+        {
+            Task.Factory.StartNew(() =>
+            {
+                while (true)
+                {
+                    lock (msgLock)
+                    {
+                        for (int i = 0; i < 4; i++)
+                        {
+                            try
+                            {
+                                //若存在信息显示,则更新剩余时间,超时恢复默认状态
+                                if (displayedMsg[i] != null)
+                                {
+                                    int existTime = (int)(DateTime.Now - displayedMsg[i].enteringTime).TotalSeconds;
+                                    //有消息等待且最短时间间隔已过
+                                    if (msgQueue[i].Count != 0 && existTime > minimumInterval)
+                                    {
+                                        displayedMsg[i] = msgQueue[i].Dequeue();
+                                        displayedMsg[i].enteringTime = DateTime.Now;
+                                        board.Play(displayedMsg[i].winID, BroadcastBoard.PlayMode.temporary, displayedMsg[i].str, 3);
+                                        if (displayedMsg[i].audio != "")
+                                        {
+                                            board.Play(0, BroadcastBoard.PlayMode.audio, displayedMsg[i].audio);
+                                        }
+                                    }
+                                    //判断消息剩余时间,不足则恢复默认
+                                    else
+                                    {
+                                        int timeLeft = displayedMsg[i].delay - existTime;
+                                        if (timeLeft <= 0)
+                                        {
+                                            if (displayedMsg[i].switchMode == 1)
+                                                board.Play(displayedMsg[i].winID, BroadcastBoard.PlayMode.readBuffer, "", 0, 0);
+                                            else if (displayedMsg[i].switchMode == 2)
+                                                OriginState();
+                                            displayedMsg[i] = null;
+                                        }
+                                    }
+                                }
+                                else if (msgQueue[i].Count != 0)
+                                {
+                                    displayedMsg[i] = msgQueue[i].Dequeue();
+                                    displayedMsg[i].enteringTime = DateTime.Now;
+                                    board.Play(displayedMsg[i].winID, BroadcastBoard.PlayMode.temporary, displayedMsg[i].str, 3);
+                                    if (displayedMsg[i].audio != "")
+                                    {
+                                        board.Play(0, BroadcastBoard.PlayMode.audio, displayedMsg[i].audio);
+                                    }
+                                }
+                            }
+                            catch (Exception e) { Console.WriteLine("更新异常," + e.Message); }
+                        }
+
+                    }
+                    Thread.Sleep(500);
+                }
+            });
+        }
+
+        public void DispForAWhile(int winID, string str, int delay, int switchMode, string audio)
+        {
+            if (ins != null)
+            {
+                lock (msgLock)
+                {
+                    DisplayedMsg msg = new DisplayedMsg(winID, str, delay, switchMode, audio);
+                    try
+                    {
+                        if (msgQueue[winID] != null)
+                        {
+                            msgQueue[winID].Enqueue(msg);
+                        }
+                    }
+                    catch { Console.WriteLine("入队异常"); }
+                }
+                //ins.Play(winID, BroadcastBoard.PlayMode.temporary, str, 1);
+                //Task.Factory.StartNew(() =>
+                //{
+                //    if (switchMode == 1)
+                //    {
+                //        Thread.Sleep(delay * 1000);
+                //        ins.Play(winID, BroadcastBoard.PlayMode.readBuffer, "", 0, 0);
+                //    }
+                //    else if (switchMode == 2)
+                //    {
+                //        Thread.Sleep(delay * 1000);
+                //        OriginState();
+                //    }
+                //});
+            }
+        }
+
+        static void OriginState()
+        {
+            if (ins != null)
+            {
+                board.Play(0, BroadcastBoard.PlayMode.readBuffer, "", 0, 0);
+                board.Play(1, BroadcastBoard.PlayMode.readBuffer, "", 0, 0);
+                board.Play(2, BroadcastBoard.PlayMode.readBuffer, "", 0, 0);
+                board.Play(3, BroadcastBoard.PlayMode.readBuffer, "", 0, 0);
+            }
+        }
+
+        private class DisplayedMsg
+        {
+            public string str;
+            public string audio;
+            public int winID;
+            public int delay;
+            /// <summary>
+            /// 播放完成后处理方式,0不做操作,1当前恢复默认,2整体恢复默认
+            /// </summary>
+            public int switchMode;
+            public DateTime enteringTime;
+
+            public DisplayedMsg(int winID, string str, int delay, int switchMode, string audio)
+            {
+                this.winID = winID;
+                this.str = str;
+                this.delay = delay;
+                this.switchMode = switchMode;
+                this.audio = audio;
+                enteringTime = DateTime.Now;
+            }
+        }
+    }
+}

二进制
PLCLinker/centralController/bin/Release/centralController.exe


+ 3 - 3
PLCLinker/centralController/bin/Release/centralController.exe.config

@@ -13,8 +13,8 @@
     <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.10.62" value="1"/>
-    <add key="192.168.10.61" value="2"/>
+    <add key="192.168.10.42" value="1"/>
+    <add key="192.168.10.41" value="2"/>
     <add key="filterRatio" value="0.7"/>
     <!--PLC基本配置-->
     <!--<add key="PLC_ip_address" value="192.168.0.10" />-->
@@ -23,7 +23,7 @@
     <add key="plcSlot" value="1" />
     <!--PLCdb块,分别对应终端、中控、车位-->
     <add key="plcDatablockId" value="18,41,20" />
-    <add key="plcTerminalCount" value="1" />
+    <add key="plcTerminalCount" value="6" />
     <add key="plcParkingSpaceCount" value="200" />
     <add key="plcRefreshInterval" value="200"/>
     <!--显示屏信息-->

二进制
PLCLinker/centralController/bin/Release/centralController.pdb


+ 1 - 0
PLCLinker/centralController/centralController.csproj

@@ -92,6 +92,7 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="advert\AdvertManager.cs" />
+    <Compile Include="allInOneMachine\broadcastModule.cs" />
     <Compile Include="entity\AbstractMessage.cs" />
     <Compile Include="entity\Jsonhelper.cs" />
     <Compile Include="FormModbus\BaseConfig_From.cs">

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

@@ -1 +1 @@
-bdf3534b2e97a64f40b4607852bf58a95837cff9
+1461c5acb167a00704424600260eab23d49b0d91

二进制
PLCLinker/centralController/obj/Release/centralController.csproj.GenerateResource.Cache


二进制
PLCLinker/centralController/obj/Release/centralController.csprojResolveAssemblyReference.cache


二进制
PLCLinker/centralController/obj/Release/centralController.exe


二进制
PLCLinker/centralController/obj/Release/centralController.pdb


二进制
PLCLinker/centralController/sdk/PLC/PLCS7.dll


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

@@ -216,6 +216,11 @@
             地感信号
             </summary>
         </member>
+        <member name="F:PLCS7.TerminalStru.numMachineLaunch">
+            <summary>
+            启动对应号牌机
+            </summary>
+        </member>
         <member name="T:PLCS7.MainBlockStru">
             <summary>
             中控与PLC交互使用数据块的结构体

二进制
PLCLinker/socketTest/bin/Release/socketTest.exe


二进制
PLCLinker/socketTest/bin/Release/socketTest.pdb


二进制
PLCLinker/socketTest/obj/Release/socketTest.exe


二进制
PLCLinker/socketTest/obj/Release/socketTest.pdb