Browse Source

Merge remote-tracking branch 'anonymous/dev' into dev

# Conflicts:
#	parkMonitor/server/CoreThread/AbstractCmd.cs
yc_t 7 years ago
parent
commit
3cd430e0f5

+ 2 - 16
parkMonitor.sln

@@ -1,12 +1,10 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.27130.2026
+# Visual Studio 2013
+VisualStudioVersion = 12.0.21005.1
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "parkMonitor", "parkMonitor\parkMonitor.csproj", "{DD3DCAB1-41A7-4EED-ADEE-9E4BBCE6B4C0}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlugIn1", "PlugIn1\PlugIn1.csproj", "{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -29,18 +27,6 @@ Global
 		{DD3DCAB1-41A7-4EED-ADEE-9E4BBCE6B4C0}.Release|x64.Build.0 = Release|Any CPU
 		{DD3DCAB1-41A7-4EED-ADEE-9E4BBCE6B4C0}.Release|x86.ActiveCfg = Release|Any CPU
 		{DD3DCAB1-41A7-4EED-ADEE-9E4BBCE6B4C0}.Release|x86.Build.0 = Release|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Debug|x64.Build.0 = Debug|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Debug|x86.Build.0 = Debug|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Release|Any CPU.Build.0 = Release|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Release|x64.ActiveCfg = Release|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Release|x64.Build.0 = Release|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Release|x86.ActiveCfg = Release|Any CPU
-		{7E03B425-DF7A-4CB0-B6BD-B1E22F4A24A1}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 7 - 7
parkMonitor/App.config

@@ -16,7 +16,7 @@
   </Equipments>
   <appSettings>
     <!--数据库连接配置文件-->
-    <add key="SqlConnectionLocation" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;pwd=yct;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;" />
+    <add key="SqlConnectionLocation" value="Data Source=127.0.0.1;port=20000;uid=root;pooling=true;pwd=;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;" />
     <!--<add key="SqlConnectionStr" value="Data Source=52.77.33.102;port=3306;uid=Ubuntu1;pooling=true;pwd=12345678;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;" />-->
     <add key="SqlConnectionStr" value="Data Source=59.175.148.85;port=3306;uid=root;pooling=true;pwd=x5;database=zxpark;CharSet=utf8;Allow Zero Datetime=true;" />
     <add key="localGarageId" value="1"/>
@@ -30,7 +30,7 @@
     <add key="ClientSettingsProvider.ServiceUri" value="" />
     <!--PLC基本配置-->
     <!--<add key="PLC_ip_address" value="192.168.0.10" />-->
-    <add key="PLC_ip_address" value="127.0.0.1" />
+    <add key="PLC_ip_address" value="192.168.0.1" />
     <add key="PLC_port" value="30000" />
     <add key="PLC_station" value="1" />
     <add key="PLC_start_address" value="0" />
@@ -63,10 +63,10 @@
     <add key="laser_countdown" value="100" />
     <!--队列线程参数-->
     <add key="fetch_store_ratio" value="3" />
-    <add key="licenseTime" value="30" />
+    <add key="licenseTime" value="10" />
     <add key="userTime" value="30" />
     <!--上位机(Web线程)IP地址及配置serverScoket的端口-->
-    <add key="WebConfig" value="192.168.111.254:9000" />
+    <add key="WebConfig" value="192.168.0.164:9000" />
     <!--<add key ="WebConfig" value="127.0.0.1:9000"/>-->
 
     <!--车库入口-->
@@ -75,12 +75,12 @@
     <add key="parkingEntZ" value="0" />
     <!--监控线程-->
     <!--数据更新间隔(毫秒数)-->
-    <add key="monitor_timGap" value="500"/>
+    <add key="monitor_timGap" value="200"/>
 
     <!--ip位置映射表-->
     <!--位置编号;基点横坐标;车位宽度;宽度补偿-->
-    <add key="192.168.0.20" value="1" />
-    <add key="192.168.0.21" value="2" />
+    <add key="192.168.0.50" value="1" />
+    <add key="192.168.0.51" value="2" />
     <!--车库权重-->
     <add key="xWeight" value="1"/>
     <add key="yWeight" value="1"/>

+ 26 - 18
parkMonitor/server/CoreThread/AbstractCmd.cs

@@ -144,13 +144,17 @@ namespace parkMonitor.server.CoreThread
         /// <param name="parkingSpaceID"></param>
         /// <param name="parkingSpaceUpdated"></param>
         /// <param name="isParking"></param>
-        public void Rollback(Command queueCmd, int parkingSpaceID, bool parkingSpaceUpdated, bool isParking)
+        public void Rollback(Command queueCmd, int parkingSpaceID, bool parkingSpaceUpdated, bool isParking, LaserMessage lm)
         {
             string connectionStr = null;
             //命令回退
             queueCmd.returnedCount += 1;
             queuingThread.SetMessage(queueCmd);
             Robot.robot1.occupied = false;
+            if (lm != null)
+            {
+                lm.occupied = false;
+            }
             //复位车辆状态;若已更新过车位则还需复位总车位数,车位状态
             if (!queueCmd.manual)
             {
@@ -306,7 +310,7 @@ namespace parkMonitor.server.CoreThread
         /// <param name="queueCmd">传入的命令</param>
         /// <param name="disappeared">车辆是否已驶离</param>
         /// <returns></returns>
-        private Data WaitForLaserResource(Command queueCmd, bool disappeared)
+        private Data WaitForLaserResource(Command queueCmd, bool disappeared, out LaserMessage lmRelease)
         {
             //激光数据
             Data data = new Data();
@@ -315,6 +319,7 @@ namespace parkMonitor.server.CoreThread
             int laserID = queueCmd.id / 6 + 1;
             PLCMessage PLCMsg = null;
             jumpOut = false;
+            lmRelease = null;
             MyTimer mt = new MyTimer();
             mt.StartTiming();
             while (!isClosing)
@@ -346,7 +351,8 @@ namespace parkMonitor.server.CoreThread
                                     data.height = lm.data.height;
                                     jumpOut = true;
                                     lm.recorded = false;
-                                    lm.occupied = false;
+                                    //lm.occupied = false;
+                                    lmRelease = lm;
                                     lm.licenseNum = "";
                                     break;
                                 }
@@ -516,12 +522,12 @@ namespace parkMonitor.server.CoreThread
             Data dataReal = new Data();
             int garageID;
             string realParkTime;
-
-            dataReal = WaitForLaserResource(queueCmd, disappeared);
+            LaserMessage lmToBeReleased;
+            dataReal = WaitForLaserResource(queueCmd, disappeared, out lmToBeReleased);
             //判断激光资源有效性,无效则回滚
             if (dataReal == null)
             {
-                Rollback(queueCmd, ppp.parkingSpaceID, false, true);
+                Rollback(queueCmd, ppp.parkingSpaceID, false, true, lmToBeReleased);
                 return;
             }
             lock (Parking_Space.spaceLock)
@@ -568,7 +574,7 @@ namespace parkMonitor.server.CoreThread
                 //判断车位资源有效性,无效则回滚
                 if (ppp == null)
                 {
-                    Rollback(queueCmd, ppp.parkingSpaceID, false, true);
+                    Rollback(queueCmd, ppp.parkingSpaceID, false, true, lmToBeReleased);
                     return;
                 }
 
@@ -625,7 +631,7 @@ namespace parkMonitor.server.CoreThread
 
             if (!WaitForRobotResource(robotID))
             {
-                Rollback(queueCmd, ppp.parkingSpaceID, true, true);
+                Rollback(queueCmd, ppp.parkingSpaceID, true, true, lmToBeReleased);
                 return;
             }
 
@@ -651,12 +657,12 @@ namespace parkMonitor.server.CoreThread
 
             if (!WaitWheelbase(ref frontWheelbase, ref rearWheelbase))
             {
-                Rollback(queueCmd, ppp.parkingSpaceID, true, true);
+                Rollback(queueCmd, ppp.parkingSpaceID, true, true, lmToBeReleased);
                 return;
             }
             if (!WaitForStoreCompletionSignal(queueCmd, ppp.parkingSpaceID, ref robotError, 1))
             {
-                Rollback(queueCmd, ppp.parkingSpaceID, true, true);
+                Rollback(queueCmd, ppp.parkingSpaceID, true, true, lmToBeReleased);
                 return;
             }
 
@@ -667,7 +673,7 @@ namespace parkMonitor.server.CoreThread
             //机械手异常则回滚
             if (!WaitForStoreCompletionSignal(queueCmd, ppp.parkingSpaceID, ref robotError, 0))
             {
-                Rollback(queueCmd, ppp.parkingSpaceID, true, true);
+                Rollback(queueCmd, ppp.parkingSpaceID, true, true, lmToBeReleased);
                 return;
             }
 
@@ -675,11 +681,13 @@ namespace parkMonitor.server.CoreThread
             NumReset(queueCmd);
             Log.WriteLog("停车流程:" + queueCmd.LicenseNum + "停车完成,状态复位");
             UILogServer.ins.info("停车流程:" + queueCmd.LicenseNum + "停车完成,状态复位");
+            if (lmToBeReleased != null)
+            {
+                lmToBeReleased.occupied = false;
+            }
             Robot.robot1.occupied = false;
-
             //自动化测试用
-            ManualParkingSimul.ins.Update(Int32.Parse(queueCmd.LicenseNum.Substring(2, 1)));
-
+            //ManualParkingSimul.ins.Update(Int32.Parse(queueCmd.LicenseNum.Substring(2, 1)));
             //根据号牌查找车型
             //int vehicleTypeID = oper.getVehicleTypeID(numberPlate);
             //判断测量数据是否准确
@@ -828,10 +836,10 @@ namespace parkMonitor.server.CoreThread
             cm = new ControlMessage();
 
             int robotID = 0;
-            robotID = parkingSpaceID / 15 + 1;
+            robotID = parkingSpaceID / 50 + 1;
             if (!WaitForRobotResource(robotID))
             {
-                Rollback(queueCmd, parkingSpaceID, false, false);
+                Rollback(queueCmd, parkingSpaceID, true, false, null);
                 return;
             }
             //取车
@@ -853,7 +861,7 @@ namespace parkMonitor.server.CoreThread
             //等待PLC取车完成信号
             if (!waitForFetchCompletionSignal(queueCmd, ps.parkingSpaceID, ref robotError, 1))
             {
-                Rollback(queueCmd, ps.parkingSpaceID, false, false);
+                Rollback(queueCmd, ps.parkingSpaceID, true, false, null);
                 return;
             }
             //取车完成
@@ -865,7 +873,7 @@ namespace parkMonitor.server.CoreThread
             PLC.SetMessage(cm2);
             if (!waitForFetchCompletionSignal(queueCmd, ps.parkingSpaceID, ref robotError, 0))
             {
-                Rollback(queueCmd, ps.parkingSpaceID, false, false);
+                Rollback(queueCmd, ps.parkingSpaceID, true, false, null);
                 return;
             }
             Robot.robot1.occupied = false;

+ 31 - 19
parkMonitor/server/NumMachine/NumMachine.cs

@@ -535,15 +535,21 @@ namespace parkMonitor.server
             int count = 0;
             if (filter.ContainsKey(nmn) && filter.TryGetValue(nmn, out count))//存在则数量+1
             {
-                filter.Remove(nmn);
-                filter.Add(nmn, count + 1);
+                filter[nmn] = count + 1;
             }
             else//不存在则计数1
             {
                 filter.Add(nmn, 1);
             }
 
-            filterCount += 1;
+            //计算总数
+            filterCount =0;
+            Dictionary<NumberMachineNode, int>.Enumerator countEnumer = filter.GetEnumerator();
+            do
+            {
+                filterCount += countEnumer.Current.Value;
+            } while (countEnumer.MoveNext());
+            
             //达到计数限制,计算众数是否达标,达标则入队
             if (filterCount >= FILTERINGNUMBER)
             {
@@ -553,7 +559,7 @@ namespace parkMonitor.server
                     do
                     {
                         //遍历,筛到号牌则入队
-                        if (enumer.Current.Value >= (int)(filterCount * 0.5) && enumer.Current.Key != null && !LicBuffer.Contains(enumer.Current.Key))
+                        if (enumer.Current.Value >= (int)(filterCount * 0.7) && enumer.Current.Key != null && !LicBuffer.Contains(enumer.Current.Key))
                         {
                             if (nmMsg.aNode == null || nmMsg.aNode.LicenseNum == null || nmMsg.aNode.LicenseNum != enumer.Current.Key.LicenseNum)
                             {
@@ -655,18 +661,24 @@ namespace parkMonitor.server
                 Run();
             });
 
-            //Task imgTest = Task.Factory.StartNew(() =>
-            //{
-            //    while (!isClosing)
-            //    {
-            //        Command cmd = new Command
-            //        {
-            //            id = 1
-            //        };
-            //        SetMessage(cmd);
-            //        Thread.Sleep(3000000);
-            //    }
-            //});
+            Task imgTest = Task.Factory.StartNew(() =>
+            {
+                while (!isClosing)
+                {
+                    Command cmd = new Command
+                    {
+                        id = 1
+                    };
+                    SetMessage(cmd);
+                    Thread.Sleep(30000);
+                    Command cmd2 = new Command
+                    {
+                        id = 2
+                    };
+                    SetMessage(cmd2);
+                    Thread.Sleep(30000);
+                }
+            });
 
         }
 
@@ -691,9 +703,9 @@ namespace parkMonitor.server
                 isClosing = true;
                 devPicMap.Clear();
             }
-            lock (namePicMap) { namePicMap.Clear();}
-            lock (ipIdMap) { ipIdMap.Clear();}
-            lock (ipHandleMap) { ipHandleMap.Clear();}
+            lock (namePicMap) { namePicMap.Clear(); }
+            lock (ipIdMap) { ipIdMap.Clear(); }
+            lock (ipHandleMap) { ipHandleMap.Clear(); }
             //this.Close();
         }
 

+ 59 - 61
parkMonitor/server/PLCLinker/PLCLinker.cs

@@ -588,7 +588,7 @@ namespace parkMonitor.server
                                     Thread.Sleep(300);
                                     SendtoPLC(laser_start_addr, "1");
                                     Thread.Sleep(100);
-                                    SendtoPLC("1", "1");//停车指令置1
+                                    //SendtoPLC("1", "1");//停车指令置1
                                     Log.WriteLog("已发送激光" + lpuTemp.id + "启动指令");
                                     UILogServer.ins.info("已发送激光" + lpuTemp.id + "启动指令");
                                 }
@@ -599,6 +599,8 @@ namespace parkMonitor.server
                         case 2:
                             if (cm.RobotID == 1)
                             {
+                                //停车指令置1
+                                SendtoPLC("1", "1");
                                 //停车启动机械手
                                 SendtoPLC(rpu1.parking_startRobot_address.ToString(), "1");
                                 //自动或手动输入激光雷达数据
@@ -690,19 +692,20 @@ namespace parkMonitor.server
                     UpdateLaserStatus();
                 }
             });
+
             //模拟plc与激光自动操作
-            Task.Factory.StartNew(() =>
-            {
-                laserAnim();
-            });
-            Task.Factory.StartNew(() =>
-            {
-                wheelbaseAnim();
-            });
-            Task.Factory.StartNew(() =>
-            {
-                autoCycling();
-            });
+            //Task.Factory.StartNew(() =>
+            //{
+            //    laserAnim();
+            //});
+            //Task.Factory.StartNew(() =>
+            //{
+            //    wheelbaseAnim();
+            //});
+            //Task.Factory.StartNew(() =>
+            //{
+            //    autoCycling();
+            //});
         }
 
         /// <summary>
@@ -864,7 +867,7 @@ namespace parkMonitor.server
         public int laser_status_address { get; set; }
         public int id { get; set; }
         private int LASER_RESCAN_COUNT, LASER_HEARTBEAT_PERIOD, laser_rescan_countdown, laser_heartbeat_countdown;
-        private bool laser_record, laser_heartbeat_test, enable_status_check = true, disconnected = false;
+        private bool laser_record, laser_heartbeat_test, enable_status_check = true, disconnected = false, disordered = false;
         private HashSet<int> laser_heartbeat = new HashSet<int>();
         private IEquipments plc = null;
         public LaserMessage laserMsg = new LaserMessage();
@@ -896,16 +899,15 @@ namespace parkMonitor.server
         /// <param name="value"></param>
         public void UpdateLaserStatus(int addr, int value)
         {
-            if (enable_status_check)
+            int status_addr = laser_status_address;
+            if (addr == status_addr)
             {
-                int status_addr = laser_status_address;
-                if (addr == status_addr)
+                laserMsg.status = value;
+                //UILogServer.ins.log(value.ToString());
+                //系统异常状态复位
+                if (value != 5 && disordered)
                 {
-                    if (!disconnected)
-                    {
-                        laserMsg.status = value;
-                        //UILogServer.ins.log(value.ToString());
-                    }
+                    disordered = false;
                 }
             }
         }
@@ -977,53 +979,45 @@ namespace parkMonitor.server
                                 }
                                 if (plc != null)
                                 {
-                                    lock (laserMsg)
+                                    laser_rescan_countdown--;
+                                    //停车指令置0
+                                    PLCNode pn = new PLCNode(laser_start_address.ToString(), "0");
+                                    plc.SetMessage(pn);
+                                    //未终止重测,车未开走,停车指令归零后置1
+                                    if (!laserMsg.abort_rescan)
                                     {
-                                        laser_rescan_countdown--;
-                                        //停车指令置0
-                                        PLCNode pn = new PLCNode(laser_start_address.ToString(), "0");
-                                        plc.SetMessage(pn);
-                                        //未终止重测,车未开走,停车指令归零后置1
-                                        if (!laserMsg.abort_rescan)
+                                        UILogServer.ins.error("激光" + laserMsg.id + "计算异常,重新测量");
+                                        //重测检测心跳
+                                        Task rescan_wait_heartbeat = Task.Factory.StartNew(() =>
                                         {
-                                            UILogServer.ins.error("激光" + laserMsg.id + "计算异常,重新测量");
-                                            //重测检测心跳
-                                            Task rescan_wait_heartbeat = Task.Factory.StartNew(() =>
+                                            MyTimer mt = new MyTimer();
+                                            mt.StartTiming();
+                                            while (laserMsg.status != 254 && laserMsg.status != 255)
                                             {
-                                                MyTimer mt = new MyTimer();
-                                                mt.StartTiming();
-                                                while (laserMsg.status != 254 && laserMsg.status != 255)
+                                                Thread.Sleep(1000);
+                                                mt.EndTiming();
+                                                int activationCount = 0;
+                                                if (mt.IsLonger(15, 1, false, out activationCount))
                                                 {
-                                                    Thread.Sleep(1000);
-                                                    mt.EndTiming();
-                                                    int activationCount = 0;
-                                                    if (mt.IsLonger(15, 1, false, out activationCount))
+                                                    if (activationCount == 1)
+                                                    {
+                                                        UILogServer.ins.info("重测前未获得心跳,继续等待");
+                                                    }
+                                                    if (MyTimer.restart && !mt.rolledBack)
                                                     {
-                                                        if (activationCount == 1)
-                                                        {
-                                                            UILogServer.ins.info("重测前未获得心跳,继续等待");
-                                                        }
-                                                        if (MyTimer.restart && !mt.rolledBack)
-                                                        {
-                                                            mt.rolledBack = true;
-                                                            UILogServer.ins.error("发起重测前超时未能获取摆扫激光心跳,请检查设备");
-                                                        }
+                                                        mt.rolledBack = true;
+                                                        UILogServer.ins.error("发起重测前超时未能获取摆扫激光心跳,请检查设备");
                                                     }
                                                 }
-                                            });
-                                            UILogServer.ins.log("获得心跳,准备发起重测");
-                                            rescan_wait_heartbeat.Wait();
-                                            pn = new PLCNode(laser_start_address.ToString(), "1");
-                                            plc.SetMessage(pn);
-                                            laserMsg.status = value;
-                                        }
-                                        else
-                                        {
-                                            laserMsg.status = 6;
-                                        }
+                                            }
+                                        });
+                                        UILogServer.ins.log("获得心跳,准备发起重测");
+                                        rescan_wait_heartbeat.Wait();
+                                        pn = new PLCNode(laser_start_address.ToString(), "1");
+                                        plc.SetMessage(pn);
                                     }
-                                    Thread.Sleep(500);
                                 }
+                                Thread.Sleep(500);
                                 enable_status_check = true;
                             });
                         }
@@ -1042,7 +1036,11 @@ namespace parkMonitor.server
                         lock (laserMsg)
                         {
                             laser_heartbeat_test = false;
-                            UILogServer.ins.error("激光系统异常,请检查");
+                            if (!disordered)
+                            {
+                                UILogServer.ins.error("激光系统异常,请检查");
+                            }
+                            disordered = true;
                         }
                     }