ソースを参照

回退修复,号牌机微调,开启plc自动化用于测试

yc_t 7 年 前
コミット
50c56832b9

+ 12 - 10
App.txt

@@ -10,15 +10,15 @@
     <Equipment key="Core" value="parkMonitor.server.CoreThread.CoreThreadTest2" />
     <Equipment key="Monitor" value="parkMonitor.server.MonitorServer" />
     <Equipment key="PLC" value="parkMonitor.server.PLCLinker" />
-    <Equipment key="Num" value="parkMonitor.server.NumMachineSimul" />
+    <Equipment key="Num" value="parkMonitor.server.NumMachineManager" />
     <Equipment key="Web" value="parkMonitor.server.WebThread.CentralForWeb" />
     <Equipment key="Queue" value="parkMonitor.server.CoreThread.QueuingThread" />
   </Equipments>
   <appSettings>
     <!--数据库连接配置文件-->
     <add key="SqlConnectionLocation" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;max pool size=1024;pwd=yct;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;" />
-    <!--<add key="SqlConnectionStr" 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="SqlConnectionStr" 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="SqlConnectionStr" value="Data Source=120.79.20.70;port=3306;uid=jw;pooling=true;max pool size=1024;pwd=jingwang1995;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;" />-->
     <add key ="remoteDBIP" value ="59.175.148.85"/>
     <add key ="localDBIP" value ="127.0.0.1"/>
     <!--日志写入地址配置文件-->
@@ -35,7 +35,7 @@
     <add key="PLC_port" value="30000" />
     <add key="PLC_station" value="1" />
     <add key="PLC_start_address" value="0" />
-    <add key="PLC_address_length" value="104" />
+    <add key="PLC_address_length" value="110" />
     <add key="PLC_refresh_interval" value="200"/>
     <add key="equipmentStatus_address" value="20" />
     <!--PLC停取完成-->
@@ -54,12 +54,12 @@
     <add key="parkingSpaceY_address" value="18" />
     <add key="parkingSpaceZ_address" value="19" />
     <add key="parkingLaserCenterX_address" value="13" />
-    <add key="frontWheelbase_address" value="79" />
-    <add key="rearWheelbase_address" value="80" />
-    <add key="wheelbase_status_address" value="81" />
+    <add key="frontWheelbase_address" value="85" />
+    <add key="rearWheelbase_address" value="86" />
+    <add key="wheelbase_status_address" value="87" />
     <!--激光设备配置-->
     <add key="laser_start_address" value="10" />
-    <add key="laser1_status_address" value="83" />
+    <add key="laser1_status_address" value="89" />
     <!--决定激光编号-->
     <add key="laser_rescan_count" value="3" />
     <add key="laser_countdown" value="100" />
@@ -67,9 +67,10 @@
     <add key="fetch_store_ratio" value="3" />
     <add key="licenseTime" value="10" />
     <add key="userTime" value="10" />
+    <add key="bookTime" value="120" />
     <!--上位机(Web线程)IP地址及配置serverScoket的端口-->
     <add key="WebConfig" value="192.168.111.254:9000" />
-    <!--<add key ="WebConfig" value="127.0.0.1:9000"/>-->
+    <!--<add key ="WebConfig" value="192.168.0.197:9000"/>-->
 
     <!--车库入口-->
     <add key="parkingEntX" value="0" />
@@ -77,12 +78,13 @@
     <add key="parkingEntZ" value="0" />
     <!--监控线程-->
     <!--数据更新间隔(毫秒数)-->
-    <add key="monitor_timGap" value="200"/>
+    <add key="monitor_timGap" value="1000"/>
 
-    <!--ip位置映射表-->
+    <!--号牌机ip位置映射表-->
     <!--位置编号;基点横坐标;车位宽度;宽度补偿-->
     <add key="192.168.0.20" value="1" />
     <add key="192.168.0.21" value="2" />
+    <add key="filterRatio" value="0.7" />
     <!--车库基本信息-->
     <add key ="garageID" value ="1"/>
     <add key ="bufferCount" value ="2"/>

+ 1 - 1
parkMonitor/Database2/ConnectionPoolManager.cs

@@ -117,7 +117,7 @@ namespace parkMonitor.Database2
                     if (result != null)
                     {
                         int r = Convert.ToInt32(result);
-                        Console.WriteLine("Number of garage in the database is: " + r);
+                        //Console.WriteLine("Number of garage in the database is: " + r);
                     }
                     ReleaseConnection(conn,bq);
                 }

+ 1 - 1
parkMonitor/Database2/DatabaseConnPoolFactory.cs

@@ -17,7 +17,7 @@ namespace parkMonitor.Database2
             {
                 conn = new MySql.Data.MySqlClient.MySqlConnection(connectionString);
                 conn.Open();
-                Console.WriteLine("连接成功");
+                //Console.WriteLine("连接成功");
                 connection.mySqlConnection = conn;
                 connection.mySqlConnFlag = true;
                 connection.state = conn.State;

+ 11 - 1
parkMonitor/entity/EntityForCore.cs

@@ -93,7 +93,17 @@ namespace parkMonitor.entity
             UILogServer.ins.info("系统初始化中......");
             bool initState = true;
             //数据库连接参数初始化及连接测试
-            Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "数据库初始配置");          
+            Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "数据库初始配置");
+            if(DBmode==0 || DBmode == 1)
+            {
+                ConnectionPoolManager.CloseAll(remoteBQ);
+                remoteBQ = ConnectionPoolManager.InitConnPooling(10, ConnectionPoolManager.remoteConf);
+            }
+            if (DBmode == 0 || DBmode == 2)
+            {
+                ConnectionPoolManager.CloseAll(localBQ);
+                localBQ = ConnectionPoolManager.InitConnPooling(10, ConnectionPoolManager.localConf);
+            }
             //车位管理初始化
             Log.WriteLog(LogType.NOT_DATABASE, LogFile.LOG, "初始化车位");
             ParkingSpaceManager.ins = new ParkingSpaceManager();

+ 14 - 57
parkMonitor/server/CoreThread/AbstractCmd.cs

@@ -194,15 +194,18 @@ namespace parkMonitor.server.CoreThread
         /// </summary>
         /// <param name="queueCmd"></param>
         /// <param name="parkingSpaceID"></param>
-        /// <param name="parkingSpaceUpdated"></param>
+        /// <param name="robotAllocated"></param>
         /// <param name="isParking"></param>
-        public void Rollback(Command queueCmd, int parkingSpaceID, bool parkingSpaceUpdated, bool isParking, LaserMessage lm)
+        public void Rollback(Command queueCmd, int parkingSpaceID, bool robotAllocated, bool isParking, LaserMessage lm)
         {
             //命令回退
             queueCmd.returnedCount += 1;
             queuingThread.SetMessage(queueCmd);
             //线程计数调整
-            Robot.robot1.occupied = false;
+            if (robotAllocated)
+            {
+                Robot.robot1.occupied = false;
+            }
             Robot.robot1.waitCount -= 1;
             //释放激光
             if (lm != null)
@@ -226,30 +229,6 @@ namespace parkMonitor.server.CoreThread
                         Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "车位分配出现异常,需要重启");
                         return;
                     }
-                    try
-                    {
-
-                        int temp;
-                        string updateParkingSpaceSql = "update parkingspace set parkingSpaceState = 0 where parkingSpaceID = '" + parkingSpaceID + "'";
-                        string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + ParkingSpaceManager.ins.GetFreeSpaceCount() + "' where garageID = '" + ParkingSpaceManager.garageID + "'";
-                        string updateVehicleStateSql = "update vehicle set vehiclepParkState = '" + 0 + "'where numberPlate = '" + queueCmd.LicenseNum + "'";
-                        List<string> strs = new List<string>();
-                        strs.Add(updateParkingSpaceSql);
-                        strs.Add(updateFreeSpaceSql);
-                        strs.Add(updateVehicleStateSql);
-                        if (!Operation.MyTransaction(EntityForCore.remoteBQ,strs, out temp))
-                        {
-                            //数据库操作失败写日志
-                            Log.WriteLog(LogType.DATABASE, updateParkingSpaceSql);
-                            Log.WriteLog(LogType.DATABASE, updateFreeSpaceSql);
-                            Log.WriteLog(LogType.DATABASE, updateVehicleStateSql);
-                            //Log.WriteLog(LogType.DATABASE, strs.ToArray().ToString());
-                        }
-                    }
-                    catch
-                    {
-                        throw;          //数据库异常待处理
-                    }
                 }
                 else
                 {
@@ -260,30 +239,6 @@ namespace parkMonitor.server.CoreThread
                         Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "车位分配出现异常,需要重启");
                         return;
                     }
-                    try
-                    {
-
-                        int temp;
-                        string updateParkingSpaceSql = "update parkingspace set parkingSpaceState = 1 where parkingSpaceID = '" + parkingSpaceID + "'";
-                        string updateFreeSpaceSql = "update garage set garageFreeSpace = '" + ParkingSpaceManager.ins.GetFreeSpaceCount() + "' where garageID = '" + ParkingSpaceManager.garageID + "'";
-                        string updateVehicleStateSql = "update vehicle set vehiclepParkState = '" + 1 + "'where numberPlate = '" + queueCmd.LicenseNum + "'";
-                        List<string> strs = new List<string>();
-                        strs.Add(updateParkingSpaceSql);
-                        strs.Add(updateFreeSpaceSql);
-                        strs.Add(updateVehicleStateSql);
-                        if (!Operation.MyTransaction(EntityForCore.remoteBQ,strs, out temp))
-                        {
-                            //数据库操作失败写日志
-                            Log.WriteLog(LogType.DATABASE, updateParkingSpaceSql);
-                            Log.WriteLog(LogType.DATABASE, updateFreeSpaceSql);
-                            Log.WriteLog(LogType.DATABASE, updateVehicleStateSql);
-                            //Log.WriteLog(LogType.DATABASE, strs.ToArray().ToString());
-                        }
-                    }
-                    catch
-                    {
-                        throw;          //数据库异常待处理
-                    }
                 }
             }
             else
@@ -291,7 +246,7 @@ namespace parkMonitor.server.CoreThread
                 if (isParking)
                 {
                     oper.UpdateVehicleParkState(EntityForCore.remoteBQ, queueCmd.LicenseNum, 0);
-                    if (parkingSpaceUpdated)
+                    if (robotAllocated)
                     {
                         oper.UpdateParkingSpaceState(EntityForCore.remoteBQ, parkingSpaceID, 0);
                     }
@@ -299,7 +254,7 @@ namespace parkMonitor.server.CoreThread
                 else
                 {
                     oper.UpdateVehicleParkState(EntityForCore.remoteBQ, queueCmd.LicenseNum, 1);
-                    if (parkingSpaceUpdated)
+                    if (robotAllocated)
                     {
                         oper.UpdateParkingSpaceState(EntityForCore.remoteBQ, parkingSpaceID, 1);
                     }
@@ -770,7 +725,7 @@ namespace parkMonitor.server.CoreThread
             //需要先遍历robot数组,根据id找到对应机械手
             if (!WaitForRobotResource(robotID))
             {
-                Rollback(queueCmd, ppp.parkingSpaceID, true, true, lmToBeReleased);
+                Rollback(queueCmd, ppp.parkingSpaceID, false, true, lmToBeReleased);
                 return;
             }
 
@@ -872,9 +827,10 @@ namespace parkMonitor.server.CoreThread
                                 Log.WriteLog(LogType.DATABASE, "0", updateVehicleSql);
                             }
                         }
-                        catch
+                        catch(Exception e)
                         {
                             UILogServer.ins.error("停车数据库操作失败");
+                            Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "\n"+e.StackTrace + "\n" + e.Message);
                             //throw;//数据库操作失败异常待处理
                         }
                     }
@@ -907,9 +863,10 @@ namespace parkMonitor.server.CoreThread
                                 Log.WriteLog(LogType.DATABASE, "0", updateVehicleSql);
                             }
                         }
-                        catch
+                        catch(Exception e)
                         {
                             UILogServer.ins.error("停车数据库操作失败");
+                            Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "\n" + e.StackTrace + "\n" + e.Message);
                             //throw;//数据库操作失败异常待处理
                         }
                     }
@@ -1066,7 +1023,7 @@ namespace parkMonitor.server.CoreThread
             robotID = parkingSpaceID / 50 + 1;
             if (!WaitForRobotResource(robotID))
             {
-                Rollback(queueCmd, parkingSpaceID, true, false, null);
+                Rollback(queueCmd, parkingSpaceID, false, false, null);
                 return;
             }
             //取车

+ 2 - 2
parkMonitor/server/CoreThread/QueuingThread.cs

@@ -158,8 +158,8 @@ namespace parkMonitor.server.CoreThread
                     }
                     else
                     {
-                        Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "从web收到无法识别的用户指令");
-                        UILogServer.ins.error("从web收到无法识别的用户指令,并非停取车");
+                        Log.WriteLog(LogType.NOT_DATABASE, LogFile.WARNING, "从web收到无法识别的用户指令");
+                        UILogServer.ins.warn("从web收到无法识别的用户指令,并非停取车");
                     }
                 }
                 Thread.Sleep(500);

+ 9 - 2
parkMonitor/server/NumMachine/NumMachine.cs

@@ -142,18 +142,25 @@ namespace parkMonitor.server
         //******************************************************************************************************************
         private void UpdateStatus(NumberMachineNode nmn)
         {
+            //提示次数计数
+            int count = 0;
             while (!isClosing)
             {
                 if (GetStatus(nmn.ip) == 1)
                 {
                     nmn.status = EnumNumberMachineStatus.Normal;
+                    count = 0;
                 }
                 else
                 {
+                    count++;
                     //号牌机断线写日志
                     nmn.status = EnumNumberMachineStatus.Offline;
-                    Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "正在与ip为 " + nmn.ip + " 的号牌机 进行连接。");
-                    UILogServer.ins.info("正在与ip为 " + nmn.ip + " 的号牌机 进行连接。");
+                    if (count == 1)
+                    {
+                        Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "正在与ip为 " + nmn.ip + " 的号牌机 进行连接。");
+                        UILogServer.ins.info("正在与ip为 " + nmn.ip + " 的号牌机 进行连接。");
+                    }
                     Thread.Sleep(10000);
                 }
                 Thread.Sleep(REFRESHINGTIME);

+ 57 - 57
parkMonitor/server/PLCLinker/PLCLinker.cs

@@ -451,35 +451,32 @@ namespace parkMonitor.server
         /// </summary>
         private void LaserMonitor()
         {
-            while (!isClosing)
+            try
             {
-                try
+                if (plcMsg.originalPlcList != null && plcMsg.originalPlcList.Count != 0)
                 {
-                    if (plcMsg.originalPlcList != null && plcMsg.originalPlcList.Count != 0)
+                    foreach (LaserProcessUnit lds in laserMgmtList)
                     {
-                        foreach (LaserProcessUnit lds in laserMgmtList)
+                        foreach (PLCNode p in plcMsg.originalPlcList)
                         {
-                            foreach (PLCNode p in plcMsg.originalPlcList)
-                            {
-                                int addr = Int32.Parse(p.Address);
-                                int value = Int32.Parse(p.Value);
-                                lds.LaserStatusChecking(addr, value);
-                            }
-                            lds.LaserRecord(plcMsg.originalPlcList);
+                            int addr = Int32.Parse(p.Address);
+                            int value = Int32.Parse(p.Value);
+                            lds.LaserStatusChecking(addr, value);
                         }
+                        lds.LaserRecord(plcMsg.originalPlcList);
                     }
-                    else
-                    {
-                        AsyncCmdServer.ins.send(AsyncCmdType.PLCReadException);
-                        return;
-                    }
-                    Thread.Sleep(200);
                 }
-                catch (Exception)
+                else
                 {
                     AsyncCmdServer.ins.send(AsyncCmdType.PLCReadException);
                     return;
                 }
+                Thread.Sleep(200);
+            }
+            catch (Exception)
+            {
+                AsyncCmdServer.ins.send(AsyncCmdType.PLCReadException);
+                return;
             }
         }
         /// <summary>
@@ -487,37 +484,34 @@ namespace parkMonitor.server
         /// </summary>
         private void UpdateLaserStatus()
         {
-            while (!isClosing)
+            try
             {
-                try
+                lock (plcMsg)
                 {
-                    lock (plcMsg)
+                    if (plcMsg.originalPlcList != null && plcMsg.originalPlcList.Count != 0)
                     {
-                        if (plcMsg.originalPlcList != null && plcMsg.originalPlcList.Count != 0)
+                        foreach (LaserProcessUnit lds in laserMgmtList)
                         {
-                            foreach (LaserProcessUnit lds in laserMgmtList)
+                            foreach (PLCNode p in plcMsg.originalPlcList)
                             {
-                                foreach (PLCNode p in plcMsg.originalPlcList)
-                                {
-                                    int addr = Int32.Parse(p.Address);
-                                    int value = Int32.Parse(p.Value);
-                                    lds.UpdateLaserStatus(addr, value);
-                                }
+                                int addr = Int32.Parse(p.Address);
+                                int value = Int32.Parse(p.Value);
+                                lds.UpdateLaserStatus(addr, value);
                             }
                         }
-                        else
-                        {
-                            AsyncCmdServer.ins.send(AsyncCmdType.PLCReadException);
-                            return;
-                        }
                     }
-                }
-                catch (Exception)
-                {
-                    AsyncCmdServer.ins.send(AsyncCmdType.PLCReadException);
-                    return;
+                    else
+                    {
+                        AsyncCmdServer.ins.send(AsyncCmdType.PLCReadException);
+                        return;
+                    }
                 }
             }
+            catch (Exception)
+            {
+                AsyncCmdServer.ins.send(AsyncCmdType.PLCReadException);
+                return;
+            }
         }
         /// <summary>
         /// 等待激光空闲状态/心跳状态
@@ -737,26 +731,32 @@ namespace parkMonitor.server
 
             Task.Factory.StartNew(() =>
             {
-                LaserMonitor();
+                while (!isClosing)
+                {
+                    LaserMonitor();
+                }
             });
             Task.Factory.StartNew(() =>
             {
-                UpdateLaserStatus();
+                while (!isClosing)
+                {
+                    UpdateLaserStatus();
+                }
             });
 
-            ////模拟plc与激光自动操作
-            //Task.Factory.StartNew(() =>
-            //{
-            //    laserAnim();
-            //});
-            //Task.Factory.StartNew(() =>
-            //{
-            //    wheelbaseAnim();
-            //});
-            //Task.Factory.StartNew(() =>
-            //{
-            //    autoCycling();
-            //});
+            //模拟plc与激光自动操作
+            Task.Factory.StartNew(() =>
+            {
+                laserAnim();
+            });
+            Task.Factory.StartNew(() =>
+            {
+                wheelbaseAnim();
+            });
+            Task.Factory.StartNew(() =>
+            {
+                autoCycling();
+            });
         }
 
         /// <summary>
@@ -850,16 +850,16 @@ namespace parkMonitor.server
                                     SendtoPLC(frontWheelbase_address.ToString(), (new Random(DateTime.Now.Millisecond).Next(100, 300)).ToString());
                                     Thread.Sleep(1);
                                     SendtoPLC(rearWheelbase_address.ToString(), (new Random(DateTime.Now.Millisecond).Next(100, 300)).ToString());
-                                    SendtoPLC("81", "3");
+                                    SendtoPLC("87", "3");
                                     Thread.Sleep(500);
                                 }
                             }
                             else
                             {
                                 working = false;
-                                SendtoPLC("81", "254");
+                                SendtoPLC("87", "254");
                                 Thread.Sleep(500);
-                                SendtoPLC("81", "255");
+                                SendtoPLC("87", "255");
                                 Thread.Sleep(500);
                             }
                         }