Procházet zdrojové kódy

修改中间版,停取测试完成,数据库提示reader异常,操作需调整

yc_t před 6 roky
rodič
revize
23595630b0
35 změnil soubory, kde provedl 216 přidání a 127 odebrání
  1. binární
      PLCLinker/.vs/PLCLinker/v15/.suo
  2. binární
      PLCLinker/.vs/PLCLinker/v15/Server/sqlite3/storage.ide
  3. binární
      PLCLinker/PLCConnector/PLC/PLCS7.dll
  4. 18 3
      PLCLinker/PLCLinker/Program.cs
  5. binární
      PLCLinker/PLCLinker/bin/Release/PLCLinker.exe
  6. binární
      PLCLinker/PLCLinker/bin/Release/PLCLinker.pdb
  7. binární
      PLCLinker/PLCLinker/bin/Release/PLCS7.dll
  8. binární
      PLCLinker/PLCLinker/obj/Release/PLCLinker.exe
  9. binární
      PLCLinker/PLCLinker/obj/Release/PLCLinker.pdb
  10. 1 1
      PLCLinker/PLCS7/PLCS7.cs
  11. binární
      PLCLinker/PLCS7/bin/Release/PLCS7.dll
  12. binární
      PLCLinker/PLCS7/bin/Release/PLCS7.pdb
  13. 0 1
      PLCLinker/PLCS7/obj/Release/PLCS7.csproj.FileListAbsolute.txt
  14. binární
      PLCLinker/PLCS7/obj/Release/PLCS7.dll
  15. binární
      PLCLinker/PLCS7/obj/Release/PLCS7.pdb
  16. 1 1
      PLCLinker/centralController/App.config
  17. 31 31
      PLCLinker/centralController/FormCentralController.Designer.cs
  18. 5 5
      PLCLinker/centralController/FormCentralController.cs
  19. 40 16
      PLCLinker/centralController/Monitor/Monitor.cs
  20. 118 67
      PLCLinker/centralController/Terminal/Terminal.cs
  21. binární
      PLCLinker/centralController/bin/Release/centralController.exe
  22. 1 1
      PLCLinker/centralController/bin/Release/centralController.exe.config
  23. binární
      PLCLinker/centralController/bin/Release/centralController.pdb
  24. binární
      PLCLinker/centralController/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache
  25. 1 1
      PLCLinker/centralController/obj/Release/centralController.csproj.CoreCompileInputs.cache
  26. binární
      PLCLinker/centralController/obj/Release/centralController.csproj.GenerateResource.Cache
  27. binární
      PLCLinker/centralController/obj/Release/centralController.csprojResolveAssemblyReference.cache
  28. binární
      PLCLinker/centralController/obj/Release/centralController.exe
  29. binární
      PLCLinker/centralController/obj/Release/centralController.pdb
  30. binární
      PLCLinker/centralController/sdk/PLC/PLCS7.dll
  31. binární
      PLCLinker/centralController/sdk/mysql/db.dll
  32. binární
      PLCLinker/centralController/sdk/mysql/db2.dll
  33. binární
      resources/PLCS7.dll
  34. binární
      resources/db.dll
  35. binární
      resources/db2.dll

binární
PLCLinker/.vs/PLCLinker/v15/.suo


binární
PLCLinker/.vs/PLCLinker/v15/Server/sqlite3/storage.ide


binární
PLCLinker/PLCConnector/PLC/PLCS7.dll


+ 18 - 3
PLCLinker/PLCLinker/Program.cs

@@ -16,7 +16,7 @@ namespace PLCTest
     {
         static void Main(string[] args)
         {
-            AbstractPLCLinker pl = new PLCLinker(CpuType.S71500, "192.168.0.1", 0, 1, 18, 41, 20, 1, 200);
+            PLCLinker pl = new PLCLinker(CpuType.S71500, "192.168.0.1", 0, 1, 18, 41, 20, 1, 200);
             Random rnd = new Random();
             Task t = Task.Factory.StartNew(() =>
             {
@@ -26,6 +26,21 @@ namespace PLCTest
                     {
                         //parkingSpaceDBTest(pl, rnd);
                         terminalDBTest(pl, rnd);
+                        //if (!pl.isConnected) { pl.PLCConnect(); }
+                        //else
+                        //{
+                        //    //读终端块数据
+                        //    List<object> tList = pl.ReadFromPLC(PLCDataType.terminal, 1);
+                        //    foreach (var term in tList)
+                        //    {
+                        //        Console.WriteLine(((TerminalStru)term).ToString());
+                        //    }
+                        //    pl.WriteAccordingToOffset(PLCDataType.terminal, 6, (short)rnd.Next(1, 100));
+                        //    pl.WriteAccordingToOffset(PLCDataType.terminal, 8, (short)rnd.Next(1, 100));
+                        //    pl.WriteAccordingToOffset(PLCDataType.terminal, 10, (short)rnd.Next(1, 100));
+                        //    pl.WriteAccordingToOffset(PLCDataType.terminal, 12, (short)rnd.Next(1, 100));
+                        //    pl.WriteAccordingToOffset(PLCDataType.terminal, 14, (short)rnd.Next(1, 100));
+                        //}
                         Thread.Sleep(500);
                     }
                 }
@@ -110,8 +125,8 @@ namespace PLCTest
                     receiptNum = (short)rnd.Next(100, 999)
                 };
                 Console.WriteLine(tsCentral);
-                //pl.WriteToPLC(tsCentral, PLCDataType.central);
-                pl.WriteToPLC(tsTerminal, PLCDataType.terminal);
+                pl.WriteToPLC(tsCentral, PLCDataType.central);
+                //pl.WriteToPLC(tsTerminal, PLCDataType.terminal);
             }
         }
     }

binární
PLCLinker/PLCLinker/bin/Release/PLCLinker.exe


binární
PLCLinker/PLCLinker/bin/Release/PLCLinker.pdb


binární
PLCLinker/PLCLinker/bin/Release/PLCS7.dll


binární
PLCLinker/PLCLinker/obj/Release/PLCLinker.exe


binární
PLCLinker/PLCLinker/obj/Release/PLCLinker.pdb


+ 1 - 1
PLCLinker/PLCS7/PLCS7.cs

@@ -365,7 +365,7 @@ namespace PLCS7
                 if (abstractPLCMsg.GetType().Equals(typeof(TerminalStru)))
                 {
                     TerminalStru ts = (TerminalStru)abstractPLCMsg;
-                    if (ts.terminalID < 0 || ts.terminalID >= terminalCount) { return false; }
+                    if (ts.terminalID <= 0 || ts.terminalID > terminalCount) { return false; }
                     int offset = 42 * (ts.terminalID - 1);
                     if (whoami.Equals(PLCDataType.central))
                     {

binární
PLCLinker/PLCS7/bin/Release/PLCS7.dll


binární
PLCLinker/PLCS7/bin/Release/PLCS7.pdb


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

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

binární
PLCLinker/PLCS7/obj/Release/PLCS7.dll


binární
PLCLinker/PLCS7/obj/Release/PLCS7.pdb


+ 1 - 1
PLCLinker/centralController/App.config

@@ -7,7 +7,7 @@
     <add key="retryCount" value="3"/>
     <!--数据库信息-->
     <!--<add key="remoteDBConnStr" value="Data Source=59.175.148.85;port=3306;uid=root;pooling=true;max pool size=1024;pwd=x5;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>-->
-    <add key="remoteDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_cloud;CharSet=utf8;Allow Zero Datetime=true;"/>
+    <add key="remoteDBConnStr" value="Data Source=192.168.111.61;port=3306;uid=remote;pooling=true;max pool size=1024;pwd=x5;database=zxpark_cloud_2;CharSet=utf8;Allow Zero Datetime=true;"/>
     <add key="localDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_local;CharSet=utf8;Allow Zero Datetime=true;"/>
     <add key="DBtimeout" value="3"/>
     <!--号牌机信息-->

+ 31 - 31
PLCLinker/centralController/FormCentralController.Designer.cs

@@ -34,10 +34,9 @@
             this.dockSite4 = new DevComponents.DotNetBar.DockSite();
             this.dockSite9 = new DevComponents.DotNetBar.DockSite();
             this.bar2 = new DevComponents.DotNetBar.Bar();
+            this.ParkingSpaceMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.NumMachineMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
-            this.ParkingSpaceMonitorPanel = new DevComponents.DotNetBar.PanelDockContainer();
-            this.paymentPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.testPanel = new DevComponents.DotNetBar.PanelDockContainer();
             this.button1 = new System.Windows.Forms.Button();
             this.textBox2 = new System.Windows.Forms.TextBox();
@@ -45,6 +44,7 @@
             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.dci_ParkingSpace = new DevComponents.DotNetBar.DockContainerItem();
             this.dci_NumMachine = new DevComponents.DotNetBar.DockContainerItem();
             this.dci_payment = new DevComponents.DotNetBar.DockContainerItem();
@@ -187,10 +187,10 @@
             this.bar2.CanDockTop = false;
             this.bar2.CanHide = true;
             this.bar2.CanUndock = false;
-            this.bar2.Controls.Add(this.ParkingSpaceMonitorPanel);
             this.bar2.Controls.Add(this.NumMachineMonitorPanel);
-            this.bar2.Controls.Add(this.testPanel);
             this.bar2.Controls.Add(this.paymentPanel);
+            this.bar2.Controls.Add(this.testPanel);
+            this.bar2.Controls.Add(this.ParkingSpaceMonitorPanel);
             this.bar2.DockTabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Top;
             this.bar2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.bar2.IsMaximized = false;
@@ -202,7 +202,7 @@
             this.bar2.LayoutType = DevComponents.DotNetBar.eLayoutType.DockContainer;
             this.bar2.Location = new System.Drawing.Point(0, 0);
             this.bar2.Name = "bar2";
-            this.bar2.SelectedDockTab = 0;
+            this.bar2.SelectedDockTab = 1;
             this.bar2.SingleLineColor = System.Drawing.SystemColors.ControlDarkDark;
             this.bar2.Size = new System.Drawing.Size(665, 408);
             this.bar2.Stretch = true;
@@ -211,6 +211,19 @@
             this.bar2.TabNavigation = true;
             this.bar2.TabStop = false;
             // 
+            // ParkingSpaceMonitorPanel
+            // 
+            this.ParkingSpaceMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
+            this.ParkingSpaceMonitorPanel.Location = new System.Drawing.Point(3, 28);
+            this.ParkingSpaceMonitorPanel.Name = "ParkingSpaceMonitorPanel";
+            this.ParkingSpaceMonitorPanel.Size = new System.Drawing.Size(659, 377);
+            this.ParkingSpaceMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
+            this.ParkingSpaceMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
+            this.ParkingSpaceMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
+            this.ParkingSpaceMonitorPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
+            this.ParkingSpaceMonitorPanel.Style.GradientAngle = 90;
+            this.ParkingSpaceMonitorPanel.TabIndex = 9;
+            // 
             // NumMachineMonitorPanel
             // 
             this.NumMachineMonitorPanel.Controls.Add(this.flowLayoutPanel1);
@@ -234,32 +247,6 @@
             this.flowLayoutPanel1.TabIndex = 1;
             this.flowLayoutPanel1.Resize += new System.EventHandler(this.flowLayoutPanel1_Resize);
             // 
-            // ParkingSpaceMonitorPanel
-            // 
-            this.ParkingSpaceMonitorPanel.DisabledBackColor = System.Drawing.Color.Empty;
-            this.ParkingSpaceMonitorPanel.Location = new System.Drawing.Point(3, 28);
-            this.ParkingSpaceMonitorPanel.Name = "ParkingSpaceMonitorPanel";
-            this.ParkingSpaceMonitorPanel.Size = new System.Drawing.Size(659, 377);
-            this.ParkingSpaceMonitorPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
-            this.ParkingSpaceMonitorPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
-            this.ParkingSpaceMonitorPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
-            this.ParkingSpaceMonitorPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
-            this.ParkingSpaceMonitorPanel.Style.GradientAngle = 90;
-            this.ParkingSpaceMonitorPanel.TabIndex = 9;
-            // 
-            // paymentPanel
-            // 
-            this.paymentPanel.DisabledBackColor = System.Drawing.Color.Empty;
-            this.paymentPanel.Location = new System.Drawing.Point(3, 28);
-            this.paymentPanel.Name = "paymentPanel";
-            this.paymentPanel.Size = new System.Drawing.Size(659, 377);
-            this.paymentPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
-            this.paymentPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
-            this.paymentPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
-            this.paymentPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
-            this.paymentPanel.Style.GradientAngle = 90;
-            this.paymentPanel.TabIndex = 24;
-            // 
             // testPanel
             // 
             this.testPanel.Controls.Add(this.button1);
@@ -337,6 +324,19 @@
             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(659, 377);
+            this.paymentPanel.Style.Alignment = System.Drawing.StringAlignment.Center;
+            this.paymentPanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
+            this.paymentPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarDockedBorder;
+            this.paymentPanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
+            this.paymentPanel.Style.GradientAngle = 90;
+            this.paymentPanel.TabIndex = 24;
+            // 
             // dci_ParkingSpace
             // 
             this.dci_ParkingSpace.Control = this.ParkingSpaceMonitorPanel;

+ 5 - 5
PLCLinker/centralController/FormCentralController.cs

@@ -42,7 +42,7 @@ namespace centralController
             //TimerCallback tc = new TimerCallback(RefreshRecords);
             //System.Threading.Timer t = new System.Threading.Timer(tc,null,5000,1000);
             System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
-            timer.Interval = 5000;
+            timer.Interval = 10000;
             timer.Tick += new EventHandler(RefreshRecords);
             timer.Start();
             UpdateBasicInfo();
@@ -222,8 +222,8 @@ namespace centralController
         /// <param name="e"></param>
         private void btn_exportRecords_Click(object sender, EventArgs e)
         {
-            Export(dataGridViewX1, Directory.GetCurrentDirectory()+"\\");
-            Console.WriteLine(Directory.GetCurrentDirectory()+"\\");
+            Export(dataGridViewX1, Directory.GetCurrentDirectory() + "\\");
+            Console.WriteLine(Directory.GetCurrentDirectory() + "\\");
         }
 
         private void flowLayoutPanel1_Resize(object sender, EventArgs e)
@@ -231,11 +231,11 @@ namespace centralController
             Control.ControlCollection flpCC = flowLayoutPanel1.Controls;
             try
             {
-                for(int i = 0; i < flpCC.Count; i++)
+                for (int i = 0; i < flpCC.Count; i++)
                 {
                     flpCC[i].Width = (int)(flowLayoutPanel1.Width * 0.3);
                     flpCC[i].Height = (int)(flowLayoutPanel1.Height * 0.49);
-                    Console.WriteLine("flp::"+flowLayoutPanel1.Width+","+flowLayoutPanel1.Height);
+                    Console.WriteLine("flp::" + flowLayoutPanel1.Width + "," + flowLayoutPanel1.Height);
                     //Console.WriteLine("tlp--"+flpCC[i].Width + "," + flpCC[i].Height);
                     Control.ControlCollection tlpCC = flpCC[i].Controls;
                     if (tlpCC.Count == 2)

+ 40 - 16
PLCLinker/centralController/Monitor/Monitor.cs

@@ -8,6 +8,7 @@ using parkMonitor.model;
 using PLCS7;
 using System;
 using System.Collections.Generic;
+using System.Data;
 using System.Diagnostics;
 using System.Management;
 using System.Net;
@@ -292,7 +293,7 @@ namespace Monitor
             try
             {
                 string endl = "\r\n";
-                info += lng.autoPackSys + " " + lng.centralPort + endl+ endl;
+                info += lng.autoPackSys + " " + lng.centralPort + endl + endl;
                 info += lng.version + "£º" + SysConst.version() + endl + endl;
 
                 info += lng.hostNmae + "£º" + Dns.GetHostName() + endl + endl;
@@ -310,26 +311,49 @@ namespace Monitor
             DateTime now = DateTime.Now;
             DateTime yesterday = DateTime.Now - (new TimeSpan(1, 0, 0, 0));
             DateTime twoDaysAgo = DateTime.Now - (new TimeSpan(2, 0, 0, 0));
-            string getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice from parkingrecords where realParkTime like '" + yesterday.ToString("yyyy-MM-dd") + "' or '" + now.ToString("yyyy-MM-dd") + "' or '" + twoDaysAgo.ToString("yyyy-MM-dd") + "';";
-            MySqlDataReader reader = localDBOper.Query(getParkingRecordsSql);
             List<object[]> result = new List<object[]>();
-            while (reader != null && reader.Read())
+            string getParkingRecordsSql = "select parkingRecordsID,userID,numberPlate,parkingSpaceID,realParkTime,realGetTime,receiptNum,parkingPrice from parkingrecords where realParkTime like '" + yesterday.ToString("yyyy-MM-dd") + "' or '" + now.ToString("yyyy-MM-dd") + "' or '" + twoDaysAgo.ToString("yyyy-MM-dd") + "';";
+            //MySqlDataReader reader = localDBOper.Query(getParkingRecordsSql);
+            lock (localDBOper)
             {
-                if (reader.HasRows)
+                try
                 {
-                    object[] temp = new object[reader.FieldCount];
-                    reader.GetValues(temp);
-                    result.Add(temp);
-                }
-            }
-            try
-            {
-                if (reader != null) {
-                    reader.Close();
-                    reader.Dispose();
+                    MySqlDataAdapter adapter = localDBOper.Display(getParkingRecordsSql);
+                    DataSet ds = new DataSet();
+                    adapter.Fill(ds);
+                    DataTable dt = ds.Tables[0];
+                    for (int i = 0; i < dt.Rows.Count; i++)
+                    {
+                        object[] objArray = new object[10];
+                        for (int j = 0; j < dt.Columns.Count; j++)
+                        {
+                            objArray[j] = dt.Rows[i][j];
+                        }
+                        result.Add(objArray);
+                    }
+                    adapter.Dispose();
                 }
+                catch (Exception e) { Console.WriteLine(e.Message); }
             }
-            catch { }
+            //while (reader != null && reader.Read())
+            //{
+            //    if (reader.HasRows)
+            //    {
+            //        object[] temp = new object[reader.FieldCount];
+            //        reader.GetValues(temp);
+            //        result.Add(temp);
+            //    }
+            //}
+            //try
+            //{
+            //    if (reader != null)
+            //    {
+            //        reader.Close();
+            //        reader.Dispose();
+            //    }
+            //}
+            //catch { }
+            result.Reverse();
             return result;
         }
 

+ 118 - 67
PLCLinker/centralController/Terminal/Terminal.cs

@@ -60,20 +60,25 @@ namespace Terminal
             string province = header.Substring(0, 2);
             string provinceIndex = header.Substring(2);
             string provinceQuerySql = "select NumberPlateHeader from numberplatemapping where mappedString = " + province + ";";
-            MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(provinceQuerySql);
-            try
+            lock (Monitor.Monitor.localDBOper)
             {
-                if (reader != null && reader.Read() && reader.HasRows)
+                object[] result = Monitor.Monitor.localDBOper.Query(provinceQuerySql);
+                //MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(provinceQuerySql);
+                try
                 {
-                    province = reader.GetString("NumberPlateHeader");
-                    //Console.WriteLine(province);
+                    //if (reader != null && reader.Read() && reader.HasRows)
+                    //{
+                    //    province = reader.GetString("NumberPlateHeader");
+                    //    //Console.WriteLine(province);
+                    //}
+                    if (result!=null && result.Length > 0) { province = (string)result[0]; }
                 }
-            }
-            catch { }
-            if (reader != null)
-            {
-                reader.Close();
-                reader.Dispose();
+                catch { }
+                //if (reader != null)
+                //{
+                //    reader.Close();
+                //    reader.Dispose();
+                //}
             }
             return province + provinceIndex + identityA + identityB;
         }
@@ -83,27 +88,38 @@ namespace Terminal
         private static void UpdateAllParkingSpace()
         {
             string findParkingSpace = "select parkingSpaceID from parkingspace;";
-            MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(findParkingSpace);
             HashSet<int> recordsIDSet = new HashSet<int>();
-            if (reader != null)
+            lock (Monitor.Monitor.localDBOper)
             {
-                while (reader.Read())
+                object[] result = Monitor.Monitor.localDBOper.Query(findParkingSpace);
+                if(result!=null && result.Length > 0)
                 {
-                    if (reader.HasRows)
+                    for (int i = 0; i < result.Length; i++)
                     {
-                        recordsIDSet.Add(reader.GetInt32("parkingSpaceID"));
+                        recordsIDSet.Add((int)result[i]);
                     }
                 }
+                //MySqlDataReader reader = Monitor.Monitor.localDBOper.Query(findParkingSpace);
+                //if (reader != null)
+                //{
+                //    while (reader.Read())
+                //    {
+                //        if (reader.HasRows)
+                //        {
+                //            recordsIDSet.Add(reader.GetInt32("parkingSpaceID"));
+                //        }
+                //    }
+                //}
+                //try
+                //{
+                //    if (reader != null)
+                //    {
+                //        reader.Close();
+                //        reader.Dispose();
+                //    }
+                //}
+                //catch { }
             }
-            try
-            {
-                if (reader != null)
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-            }
-            catch { }
             List<string> updateSpaceList = new List<string>();
             List<string> insertSpaceList = new List<string>();
             string updateParkingSpace = "";
@@ -125,8 +141,11 @@ namespace Terminal
             }
             try
             {
-                Monitor.Monitor.localDBOper.UpdateTransaction(updateSpaceList);
-                Monitor.Monitor.localDBOper.Insert(insertSpaceList);
+                lock (Monitor.Monitor.localDBOper)
+                {
+                    Monitor.Monitor.localDBOper.UpdateTransaction(updateSpaceList);
+                    Monitor.Monitor.localDBOper.Insert(insertSpaceList);
+                }
             }
             catch (Exception e) { Log.WriteLog(LogType.process, LogFile.ERROR, "更新本地所有车位异常"); Console.WriteLine("更新本地所有车位异常" + e.Message); }
         }
@@ -135,7 +154,7 @@ namespace Terminal
         /// </summary>
         /// <param name="lic"></param>
         /// <param name="state"></param>
-        private static void UpdateVehicle(string lic, int state, int parkingRecordsID, bool park, bool remote)
+        private static void UpdateVehicle(string lic, int state, int parkingRecordsID, bool park, bool remote, int parkingSpaceID)
         {
             if (lic != "")
             {
@@ -152,18 +171,40 @@ namespace Terminal
                 }
                 if (reader != null && reader.Read() && reader.HasRows)
                 {
+                    try
+                    {
+                        reader.Close();
+                        reader.Dispose();
+                    }
+                    catch { }
                     //更新车辆状态
                     string updateVehicleState = "";
+                    string updateRemoteVehicleState = "";
                     if (park)
                     {
                         if (parkingRecordsID > 0)
-                            updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + " where numberPlate = '" + lic + "';";
+                        {
+                            if (parkingSpaceID == 0)
+                            {
+                                updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + " where numberPlate = '" + lic + "';";
+                                updateRemoteVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",garageID = " + Monitor.Monitor.garageID + "where numberPlate = '" + lic + "';";
+                            }
+                            else
+                            {
+                                updateVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",parkingSpaceID = " + parkingSpaceID + " where numberPlate = '" + lic + "';";
+                                updateRemoteVehicleState = "update vehicle set vehiclepParkState = " + state + " ,parkingRecordsID = " + parkingRecordsID + ",parkingSpaceID = " + parkingSpaceID + ",garageID = " + Monitor.Monitor.garageID + "where numberPlate = '" + lic + "';";
+                            }
+                        }
                         else
+                        {
                             updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
+                            updateRemoteVehicleState = updateVehicleState;
+                        }
                     }
                     else
                     {
                         updateVehicleState = "update vehicle set vehiclepParkState = " + state + " where numberPlate = '" + lic + "';";
+                        updateRemoteVehicleState = updateVehicleState;
                     }
                     List<string> list = new List<string>();
                     list.Add(updateVehicleState);
@@ -175,6 +216,7 @@ namespace Terminal
                     {
                         Monitor.Monitor.remoteDBOper.UpdateTransaction(list);
                     }
+                    
                 }
                 else
                 {
@@ -207,12 +249,7 @@ namespace Terminal
                         Monitor.Monitor.remoteDBOper.Insert(list);
                     }
                 }
-                try
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-                catch { }
+                
             }
         }
         /// <summary>
@@ -302,8 +339,15 @@ namespace Terminal
                                     string userLicense = GetLicenseFromTerm(term);
                                     //与云端数据比对
                                     string checkNetSql = "select * from user where userID = 1;";
-                                    if (Monitor.Monitor.remoteDBOper.Query(checkNetSql) != null)
+                                    MySqlDataReader readerTest = Monitor.Monitor.remoteDBOper.Query(checkNetSql);
+                                    if ( readerTest!= null && readerTest.Read() && readerTest.HasRows)
                                     {
+                                        try
+                                        {
+                                            readerTest.Close();
+                                            readerTest.Dispose();
+                                        }
+                                        catch { }
                                         string userInfoCheckSql = "select * from usercarrelation where userID = '" + userID + "'and numberPlate = '" + userLicense + "';";
                                         MySqlDataReader reader = Monitor.Monitor.remoteDBOper.Query(userInfoCheckSql);
                                         if (reader != null && reader.Read() && reader.HasRows && userID != 0 && userLicense != "")
@@ -312,12 +356,6 @@ namespace Terminal
                                             Monitor.Monitor.PLC.WriteToPLC(ts, PLCDataType.central);
                                             numReceivedStatus = 1;
                                             Log.WriteLog(LogType.process, LogFile.INFO, "号牌验证成功");
-                                            try
-                                            {
-                                                reader.Close();
-                                                reader.Dispose();
-                                            }
-                                            catch { }
                                         }
                                         else
                                         {
@@ -326,6 +364,12 @@ namespace Terminal
                                             numReceivedStatus = 2;
                                             Log.WriteLog(LogType.process, LogFile.WARNING, "号牌验证失败");
                                         }
+                                        try
+                                        {
+                                            reader.Close();
+                                            reader.Dispose();
+                                        }
+                                        catch { }
                                     }
                                     else
                                     {
@@ -390,8 +434,8 @@ namespace Terminal
                         }
                         //无车位信息则跳出当前循环
                         if (parkingSpaceID == 0) break;
-                        UpdateVehicle(license, 0, 0, true, false);
-                        UpdateVehicle(license, 0, 0, true, true);
+                        UpdateVehicle(license, 0, 0, true, false,0);
+                        UpdateVehicle(license, 0, 0, true, true,0);
                         //插入停车记录
                         string parkingRecordsSql = "";
                         if (term.licenseCodeA != 0)
@@ -453,11 +497,11 @@ namespace Terminal
                         //更新本地车辆表
                         if (parkingRecordsID != 0)
                         {
-                            UpdateVehicle(license, 1, parkingRecordsID, true, false);
+                            UpdateVehicle(license, 1, parkingRecordsID, true, false, parkingSpaceID);
                         }
                         if (remoteParkingRecordsID != 0)
                         {
-                            UpdateVehicle(license, 1, remoteParkingRecordsID, true, true);
+                            UpdateVehicle(license, 1, remoteParkingRecordsID, true, true, parkingSpaceID);
                         }
                         Log.WriteLog(LogType.process, LogFile.INFO, "停车记录表已更新");
                         //更新本地车位
@@ -740,26 +784,27 @@ namespace Terminal
                             {
                                 fee = FeeCalc(PaymentScheme.ins, parkTime, orderTimeLength);
                             }
-
-                            if (Monitor.Monitor.PLC != null)
+                            try
                             {
-                                TerminalStru FeeMsg = new TerminalStru
+                                if (Monitor.Monitor.PLC != null)
                                 {
-                                    terminalID = (short)termIndex,
-                                    paymentStatus = (short)-1,
-                                    licVerification = (short)-1,
-                                    parkingFee = (short)fee,
-                                    userType = (short)(monthCardType + 1)
-                                };
-                                Console.WriteLine(FeeMsg);
-                                Monitor.Monitor.PLC.WriteToPLC(FeeMsg, PLCDataType.central);
-                                Log.WriteLog(LogType.process, LogFile.INFO, "停车费用已发送至PLC");
+                                    TerminalStru FeeMsg = new TerminalStru();
+                                    FeeMsg.terminalID = (short)termIndex;
+                                    FeeMsg.paymentStatus = (short)-1;
+                                    FeeMsg.licVerification = (short)-1;
+                                    FeeMsg.parkingFee = (short)fee;
+                                    FeeMsg.userType = (short)(monthCardType + 1);
+                                    Console.WriteLine(FeeMsg);
+                                    Monitor.Monitor.PLC.WriteToPLC(FeeMsg, PLCDataType.central);
+                                    Log.WriteLog(LogType.process, LogFile.INFO, "停车费用已发送至PLC");
+                                }
                             }
+                            catch { Console.WriteLine("error"); }
                         }
                         //4.等待终端获得收费完成信号且将凭证号清除后,清除收费完成信号并将信息写入数据库
                         while (!isClosing && termIndex != -1)
                         {
-                            if (terminalInfo[termIndex-1].receiptNum == 0)
+                            if (terminalInfo[termIndex - 1].receiptNum == 0)
                             {
                                 Log.WriteLog(LogType.process, LogFile.INFO, "检测到凭证号已被清除");
                                 TerminalStru fetchReset = new TerminalStru
@@ -771,16 +816,22 @@ namespace Terminal
                                     userType = (short)0
                                 };
                                 Monitor.Monitor.PLC.WriteToPLC(fetchReset, PLCDataType.central);
-                                //更新停车记录
-                                string updateParkingRecordsSql = "update parkingrecords set parkingRecordsState = 6,realGetTime = '"
-                        + currentTime.ToString("yyyy-MM-dd HH:mm:ss") + "',parkingPrice = " + fee + " where receiptNum = '" + receiptNum + "';";
+                                //更新停车记录与车辆状态
+                                string updateParkingRecordsSql = "update parkingrecords set parkingRecordsState = 6,realGetTime = '" + currentTime.ToString("yyyy-MM-dd HH:mm:ss") + 
+                                "',parkingPrice = " + fee + " where receiptNum = '" + receiptNum + "';";
                                 List<string> list = new List<string>();
                                 list.Add(updateParkingRecordsSql);
-                                Monitor.Monitor.localDBOper.UpdateTransaction(list);
-                                Monitor.Monitor.remoteDBOper.UpdateTransaction(list);
-                                //更新车辆状态
-                                UpdateVehicle(numberPlate, 0, parkingRecordsID, false, false);
-                                UpdateVehicle(numberPlate, 0, remoteParkingRecordsID, false, true);
+
+                                lock (Monitor.Monitor.localDBOper)
+                                {
+                                    Monitor.Monitor.localDBOper.UpdateTransaction(list);
+                                    UpdateVehicle(numberPlate, 0, parkingRecordsID, false, false, 0);
+                                }
+                                lock (Monitor.Monitor.remoteDBOper)
+                                {
+                                    Monitor.Monitor.remoteDBOper.UpdateTransaction(list);
+                                    UpdateVehicle(numberPlate, 0, remoteParkingRecordsID, false, true, 0);
+                                }
                                 break;
                             }
                             Thread.Sleep(1000);

binární
PLCLinker/centralController/bin/Release/centralController.exe


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

@@ -7,7 +7,7 @@
     <add key="retryCount" value="3"/>
     <!--数据库信息-->
     <!--<add key="remoteDBConnStr" value="Data Source=59.175.148.85;port=3306;uid=root;pooling=true;max pool size=1024;pwd=x5;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;"/>-->
-    <add key="remoteDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_cloud;CharSet=utf8;Allow Zero Datetime=true;"/>
+    <add key="remoteDBConnStr" value="Data Source=192.168.111.61;port=3306;uid=remote;pooling=true;max pool size=1024;pwd=x5;database=zxpark_cloud_2;CharSet=utf8;Allow Zero Datetime=true;"/>
     <add key="localDBConnStr" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark_local;CharSet=utf8;Allow Zero Datetime=true;"/>
     <add key="DBtimeout" value="3"/>
     <!--号牌机信息-->

binární
PLCLinker/centralController/bin/Release/centralController.pdb


binární
PLCLinker/centralController/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache


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

@@ -1 +1 @@
-ec57ee3b8371b9008a7e95d2f89d9f907d88a07e
+736407c1bb7205d83159d990240ecaf9ff4c65b4

binární
PLCLinker/centralController/obj/Release/centralController.csproj.GenerateResource.Cache


binární
PLCLinker/centralController/obj/Release/centralController.csprojResolveAssemblyReference.cache


binární
PLCLinker/centralController/obj/Release/centralController.exe


binární
PLCLinker/centralController/obj/Release/centralController.pdb


binární
PLCLinker/centralController/sdk/PLC/PLCS7.dll


binární
PLCLinker/centralController/sdk/mysql/db.dll


binární
PLCLinker/centralController/sdk/mysql/db2.dll


binární
resources/PLCS7.dll


binární
resources/db.dll


binární
resources/db2.dll