Browse Source

队列匹配微调,plc停车完成位微调

yc_t 7 years ago
parent
commit
3c610a2542

+ 4 - 2
.gitignore

@@ -1,10 +1,12 @@
-## Ignore Visual Studio temporary files, build results, and
+## Ignore Visual Studio temporary files, build results, and
 ## files generated by popular Visual Studio add-ons.
 
 # User-specific files
 *.suo
 *.user
 *.sln.docstates
+*.mbs
+*.csv
 
 # Build results
 
@@ -164,4 +166,4 @@ $RECYCLE.BIN/
 .myeclipse/
 .mymetadata
 
-.vs
+.vs

+ 2 - 1
parkMonitor/App.config

@@ -39,6 +39,7 @@
     <!--PLC停取完成-->
     <add key="park_start_address" value="1" />
     <add key="park_completed_address" value="21" />
+    <add key="park_completed_acknowledge_address" value="5" />
     <add key="fetch_completed_address" value="22" />
     <!--启动机械手-->
     <add key="parking_startRobot_address" value="3" />
@@ -80,7 +81,7 @@
     <add key="parkingEntZ" value="0" />
     <add key="parkingEntZ" value="0" />
     <add key="parkingEntZ" value="0" />
-<add key="parkingEntZ" value="0" />
+    <add key="parkingEntZ" value="0" />
 
     <!-- 临时-->
     <add key="cx" value="" />

+ 60 - 150
parkMonitor/server/CoreThread/QueuingThread.cs

@@ -85,43 +85,13 @@ namespace parkMonitor.server.CoreThread
                     //停车先遍历
                     else if (cmd.commandType.Equals('s'))
                     {
-                        lock (StoreCmdQueue)
-                        {
-                            NumberMachineNode num = null;
-                            bool matched = false;
-                            num = new NumberMachineNode();
-                            lock (LicenseQueue)
-                            {
-                                for (int i = 0; i < LicenseQueue.Count; i++)
-                                {
-                                    num = LicenseQueue.Dequeue();
-                                    //匹配成功
-                                    if (NumMachineNodeValidation(num) && cmd.LicenseNum.Equals(num.LicenseNum))
-                                    {
-                                        cmd.TimeRecord = num.TimeRecord;
-                                        cmd.ip = num.ip;
-                                        cmd.id = num.id;
-                                        ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
-                                        matched = true;
-                                        break;
-                                    }
-                                    else
-                                    {
-                                        LicenseQueue.Enqueue((NumberMachineNode)num.Clone());
-                                    }
-                                }
-                            }
-                            if (!matched)
-                            {
-                                StoreCmdQueue.Enqueue((Command)cmd.Clone());
-                            }
-                        }
+                        UserCmdMatch(cmd);
                         UILogServer.ins.info("收到web停车指令:" + cmd.LicenseNum);
                     }
                     else
                     {
                         Console.WriteLine("invalid user command.");
-                        UILogServer.ins.error("无法识别用户指令");
+                        UILogServer.ins.error("无法识别用户指令,并非停取车");
                     }
                 }
                 Thread.Sleep(500);
@@ -139,7 +109,6 @@ namespace parkMonitor.server.CoreThread
             {
                 lock (LicenseQueue)
                 {
-                    bool matched = false;
                     //本地号牌已使用,则接收新的号牌消息
                     if (numMachineHandle != null && !NumMachineNodeValidation(license))
                     {
@@ -150,33 +119,7 @@ namespace parkMonitor.server.CoreThread
                             UILogServer.ins.info("已扫描到号牌:" + license.LicenseNum + ",匹配中");
                             Console.WriteLine("已扫描到号牌:" + license.LicenseNum + ",匹配中");
                             //先匹配指令
-                            cmd = new Command();
-                            lock (StoreCmdQueue)
-                            {
-                                for (int i = 0; NumMachineNodeValidation(license) && i < StoreCmdQueue.Count; i++)
-                                {
-                                    cmd = StoreCmdQueue.Dequeue();
-                                    //匹配成功
-                                    if (license.LicenseNum.Equals(cmd.LicenseNum))
-                                    {
-                                        cmd.TimeRecord = license.TimeRecord;
-                                        cmd.ip = license.ip;
-                                        cmd.id = license.id;
-                                        ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
-                                        matched = true;
-                                        break;
-                                    }
-                                    else
-                                    {
-                                        StoreCmdQueue.Enqueue((Command)cmd.Clone());
-                                    }
-                                }
-                            }
-                            if (!matched)
-                            {
-                                LicenseQueue.Enqueue((NumberMachineNode)license.Clone());
-                            }
-                            license.ip = "used";
+                            NumMatch(ref license);
                         }
                     }
 
@@ -200,9 +143,9 @@ namespace parkMonitor.server.CoreThread
                 }
                 lock (LicenseQueue)
                 {
-                    LicTimeOut();
+                    NumTimeOut();
                 }
-                Thread.Sleep(100);
+                Thread.Sleep(500);
             }
         }
 
@@ -250,7 +193,7 @@ namespace parkMonitor.server.CoreThread
         /// <summary>
         /// 号牌超时处理
         /// </summary>
-        private void LicTimeOut()
+        private void NumTimeOut()
         {
             for (int i = 0; i < LicenseQueue.Count; i++)
             {
@@ -270,106 +213,84 @@ namespace parkMonitor.server.CoreThread
                         numberMachineMessage.aNode.LicenseNum = node.LicenseNum;
                         numMachineHandle.SetMessage(numberMachineMessage);
                         node.ip = "used";
-
-                        //Command cmd = new Command();
-                        //cmd.ip = node.ip;
-                        //cmd.commandType = 's';
-                        //cmd.LicenseNum = node.LicenseNum;
-                        //cmd.userID = "";
-                        //cmd.garageID = 0;
-                        //cmd.parkingRecordsID = 0;
-                        //cmd.TimeRecord = node.TimeRecord;
-                        //lock (ValidStoreCmdQueue)
-                        //{
-                        //    ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
-                        //}
-                        ////numMachineHandle.SetMessage((AbstractMessage)cmd.Clone());
                     }
                 }
                 LicenseQueue.Enqueue(node);
             }
         }
 
-        /*/// <summary>
-        /// 注:匹配已分别在获得号牌与指令时进行!!!
-        /// 停车匹配,一轮中从停车指令队列取一个,遍历号牌队列;之后反之,以号牌遍历停车指令队列
-        /// 匹配上则入合法指令队列,并标记号牌队列相应元素为已使用
+        /// <summary>
+        /// 单用户指令匹配号牌队列
         /// </summary>
-        private void UserCmdMatch()
+        private void UserCmdMatch(Command cmd)
         {
-            Command cmd = null;
-            NumberMachineNode num = null;
-
-            //以单用户指令遍历号牌队列
             lock (StoreCmdQueue)
             {
-                if (StoreCmdQueue.Count != 0)
+                NumberMachineNode num = null;
+                bool matched = false;
+                num = new NumberMachineNode();
+                lock (LicenseQueue)
                 {
-                    cmd = StoreCmdQueue.Dequeue();
-                    num = new NumberMachineNode();
-                    lock (LicenseQueue)
+                    for (int i = 0; i < LicenseQueue.Count; i++)
                     {
-                        for (int i = 0; i < LicenseQueue.Count; i++)
+                        num = LicenseQueue.Dequeue();
+                        //匹配成功
+                        if (NumMachineNodeValidation(num) && cmd.LicenseNum.Equals(num.LicenseNum))
                         {
-                            num = LicenseQueue.Dequeue();
-                            //匹配成功
-                            if (NumMachineNodeValidation(num) && cmd.LicenseNum.Equals(num.LicenseNum))
-                            {
-                                cmd.TimeRecord = num.TimeRecord;
-                                cmd.ip = num.ip;
-                                cmd.id = num.id;
-                                ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
-                                cmd = null;
-                                break;
-                            }
-                            else
-                            {
-                                LicenseQueue.Enqueue((NumberMachineNode)num.Clone());
-                            }
+                            cmd.TimeRecord = num.TimeRecord;
+                            cmd.ip = num.ip;
+                            cmd.id = num.id;
+                            ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
+                            matched = true;
+                            break;
+                        }
+                        else
+                        {
+                            LicenseQueue.Enqueue((NumberMachineNode)num.Clone());
                         }
                     }
-                    if (cmd != null)
-                    {
-                        StoreCmdQueue.Enqueue(cmd);
-                    }
+                }
+                if (!matched)
+                {
+                    StoreCmdQueue.Enqueue((Command)cmd.Clone());
                 }
             }
+        }
 
-            //以单号牌遍历停车指令队列
-            lock (LicenseQueue)
+        /// <summary>
+        /// 单号牌匹配用户指令队列
+        /// </summary>
+        private void NumMatch(ref NumberMachineNode license)
+        {
+            Command cmd = new Command();
+            bool matched = false;
+            lock (StoreCmdQueue)
             {
-                if (LicenseQueue.Count != 0)
+                for (int i = 0; NumMachineNodeValidation(license) && i < StoreCmdQueue.Count; i++)
                 {
-                    num = LicenseQueue.Dequeue();
-                    cmd = new Command();
-                    lock (StoreCmdQueue)
+                    cmd = StoreCmdQueue.Dequeue();
+                    //匹配成功
+                    if (license.LicenseNum.Equals(cmd.LicenseNum))
                     {
-                        for (int i = 0; NumMachineNodeValidation(num) && i < StoreCmdQueue.Count; i++)
-                        {
-                            cmd = StoreCmdQueue.Dequeue();
-                            //匹配成功
-                            if (num.LicenseNum.Equals(cmd.LicenseNum))
-                            {
-                                cmd.TimeRecord = num.TimeRecord;
-                                cmd.ip = num.ip;
-                                cmd.id = num.id;
-                                ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
-                                cmd = null;
-                                break;
-                            }
-                            else
-                            {
-                                StoreCmdQueue.Enqueue((Command)cmd.Clone());
-                            }
-                        }
+                        cmd.TimeRecord = license.TimeRecord;
+                        cmd.ip = license.ip;
+                        cmd.id = license.id;
+                        ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
+                        matched = true;
+                        break;
                     }
-                    if (cmd != null)
+                    else
                     {
-                        LicenseQueue.Enqueue(num);
+                        StoreCmdQueue.Enqueue((Command)cmd.Clone());
                     }
                 }
             }
-        }*/
+            if (!matched)
+            {
+                LicenseQueue.Enqueue((NumberMachineNode)license.Clone());
+            }
+            license.ip = "used";
+        }
 
         /// <summary>
         /// 停取车调度,控制停取车比例,可多取一停,也可一取一停
@@ -414,14 +335,6 @@ namespace parkMonitor.server.CoreThread
         /// 功能一:由核心线程调用,传入已存车完成需要标记的号牌
         /// 功能二:添加手动停取车指令
         /// </summary>
-        /// <example>
-        /// NumberMachineMessage numberMachineMessage = new NumberMachineMessage();
-        /// numberMachineMessage.aNode = new NumberMachineNode();
-        /// numberMachineMessage.aNode.ip = "";
-        /// numberMachineMessage.aNode.LicenseNum = "the number plate that has been used";
-        /// QueueingHandle.SetMessage(numberMachineMessage);
-        /// </example>
-        /// <param name="message"></param>
         public void SetMessage(AbstractMessage message)
         {
             //号牌机重置消息
@@ -462,16 +375,13 @@ namespace parkMonitor.server.CoreThread
                         }
                         else if (command.commandType.Equals('s'))
                         {
-                            lock (StoreCmdQueue)
-                            {
-                                StoreCmdQueue.Enqueue((Command)command.Clone());
-                            }
+                            UserCmdMatch(command);
                             UILogServer.ins.info("收到手动的停车指令:" + command.LicenseNum);
                         }
                         else
                         {
                             Console.WriteLine("invalid user command.");
-                            UILogServer.ins.error("无法识别用户指令");
+                            UILogServer.ins.error("收到无法识别的手动用户指令");
                         }
                     }
                 }

+ 8 - 3
parkMonitor/server/PLCLinker/PLCLinker.cs

@@ -74,6 +74,7 @@ namespace parkMonitor.server
         private int frontWheelbase_address;
         private int rearWheelbase_address;
         private int park_completed_address;
+        private int park_completed_acknowledge_address;
         private int LASER_RESCAN_COUNT;
         private int LASER_HEARTBEAT_PERIOD;
         private int PLC_refresh_interval;
@@ -98,6 +99,7 @@ namespace parkMonitor.server
                 parkingLaserCenterX_address = Int32.Parse(ConfigurationManager.AppSettings.Get("parkingLaserCenterX_address"));
                 parkingSpaceID_address = Int32.Parse(ConfigurationManager.AppSettings.Get("parkingSpaceID_address"));
                 park_completed_address = Int32.Parse(ConfigurationManager.AppSettings.Get("park_completed_address"));
+                park_completed_acknowledge_address = Int32.Parse(ConfigurationManager.AppSettings.Get("park_completed_acknowledge_address")); 
                 //parkingSpaceX_address = Int32.Parse(ConfigurationManager.AppSettings.Get("parkingSpaceX_address"));
                 //parkingSpaceY_address = Int32.Parse(ConfigurationManager.AppSettings.Get("parkingSpaceY_address"));
                 //parkingSpaceZ_address = Int32.Parse(ConfigurationManager.AppSettings.Get("parkingSpaceZ_address"));
@@ -110,7 +112,7 @@ namespace parkMonitor.server
 
                 laser_start_address = Int32.Parse(ConfigurationManager.AppSettings.Get("park_command_address"));
 
-                rpu1 = new RobotProcessUnit(1, parking_startRobot_address, parkingLaserCenterX_address, parkingSpaceID_address, park_completed_address, fetching_startRobot_address, fetch_to_address, fetch_completed_address, frontWheelbase_address, rearWheelbase_address);
+                rpu1 = new RobotProcessUnit(1, parking_startRobot_address, parkingLaserCenterX_address, parkingSpaceID_address, park_completed_address, park_completed_acknowledge_address, fetching_startRobot_address, fetch_to_address, fetch_completed_address, frontWheelbase_address, rearWheelbase_address);
 
                 //激光管理
                 for (int i = 1; i < 20; i++)
@@ -588,7 +590,8 @@ namespace parkMonitor.server
                         case 3:
                             if (pm.RobotID == 1)
                             {
-                                SendtoPLC(rpu1.park_completed_address.ToString(), "0");//停车完成复位
+                                //SendtoPLC(rpu1.park_completed_address.ToString(), "0");//停车完成复位
+                                SendtoPLC(rpu1.park_completed_acknowledge_address.ToString(), "0");
                                 SendtoPLC("1", "0");//停车指令置0
                                 //Console.WriteLine("停车完成");
                             }
@@ -901,19 +904,21 @@ namespace parkMonitor.server
         public int parking_laserCenterX_address { get; set; }
         public int parkingSpaceID_address { get; set; }
         public int park_completed_address { get; set; }
+        public int park_completed_acknowledge_address { get; set; }
         public int fetching_startRobot_address { get; set; }
         public int fetch_completed_address { get; set; }
         public int fetch_to_address { get; set; }
         public int frontWheelbase { get; set; }
         public int rearWheelbase { get; set; }
 
-        public RobotProcessUnit(int id, int parking_startRobot_address, int parking_laserCenterX_address, int parkingSpaceID_address, int park_completed_address, int fetching_startRobot_address, int fetch_to_address, int fetch_completed_address, int frontWheelbase, int rearWheelbase)
+        public RobotProcessUnit(int id, int parking_startRobot_address, int parking_laserCenterX_address, int parkingSpaceID_address, int park_completed_address,int park_completed_acknowledge_address, int fetching_startRobot_address, int fetch_to_address, int fetch_completed_address, int frontWheelbase, int rearWheelbase)
         {
             this.id = id;
             this.parking_startRobot_address = parking_startRobot_address;
             this.parking_laserCenterX_address = parking_laserCenterX_address;
             this.parkingSpaceID_address = parkingSpaceID_address;
             this.park_completed_address = park_completed_address;
+            this.park_completed_acknowledge_address = park_completed_acknowledge_address;
             this.fetching_startRobot_address = fetching_startRobot_address;
             this.fetch_completed_address = fetch_completed_address;
             this.fetch_to_address = fetch_to_address;