소스 검색

车位锁机制debug

yc_t 7 년 전
부모
커밋
4eff6b3aad
3개의 변경된 파일26개의 추가작업 그리고 17개의 파일을 삭제
  1. 4 4
      parkMonitor/manualParking/ManualParkingSimul.cs
  2. 13 7
      parkMonitor/server/CoreThread/AbstractCmd.cs
  3. 9 6
      parkMonitor/server/PLCLinker/PLCLinker.cs

+ 4 - 4
parkMonitor/manualParking/ManualParkingSimul.cs

@@ -70,12 +70,12 @@ namespace parkMonitor
                     if (executableCmd.userID != "" && executableCmd.LicenseNum != "")
                     {
                         queue.SetMessage((Command)executableCmd.Clone());
-                        UILogServer.ins.info("发送成功");
+                        //UILogServer.ins.info("发送成功");
                     }
                 }
                 else
                 {
-                    UILogServer.ins.error("该车库没有剩余车位");
+                    UILogServer.ins.error(lic+"该车库没有剩余车位");
                 }
             }
         }
@@ -101,7 +101,7 @@ namespace parkMonitor
             }
             else if (isNumberPlate == false)
             {
-                UILogServer.ins.error("车库中查无此车");
+                UILogServer.ins.error(lic+"车库中查无此车");
             }
             else
             {
@@ -109,7 +109,7 @@ namespace parkMonitor
                 if (executableCmd.userID != "" && executableCmd.LicenseNum != "" && executableCmd.parkingRecordsID != 0)
                 {
                     queue.SetMessage((Command)executableCmd.Clone());
-                    UILogServer.ins.info("发送成功");
+                    //UILogServer.ins.info("发送成功");
                 }
                 else
                 {

+ 13 - 7
parkMonitor/server/CoreThread/AbstractCmd.cs

@@ -278,7 +278,7 @@ namespace parkMonitor.server.CoreThread
                 }
                 if (ppp != null)
                 {
-                    UILogServer.ins.log("停车流程:"+queueCmd.LicenseNum + "已分配车位");
+                    UILogServer.ins.log("停车流程:" + queueCmd.LicenseNum + "已分配车位");
                     break;
                 }
                 Thread.Sleep(200);
@@ -363,6 +363,7 @@ namespace parkMonitor.server.CoreThread
                                 }
                             }
                         }
+                        Thread.Sleep(500);
                     }
                     if (jumpOut)
                     {
@@ -515,6 +516,14 @@ namespace parkMonitor.server.CoreThread
             Data dataReal = new Data();
             int garageID;
             string realParkTime;
+
+            dataReal = WaitForLaserResource(queueCmd, disappeared);
+            //判断激光资源有效性,无效则回滚
+            if (dataReal == null)
+            {
+                Rollback(queueCmd, ppp.parkingSpaceID, false, true);
+                return;
+            }
             lock (Parking_Space.spaceLock)
             {
                 //获取车位资源
@@ -556,10 +565,8 @@ namespace parkMonitor.server.CoreThread
                 //    }
                 //});
 
-                dataReal = WaitForLaserResource(queueCmd, disappeared);
-
-                //判断车位与激光资源有效性,无效则回滚
-                if (ppp == null || dataReal == null)
+                //判断车位资源有效性,无效则回滚
+                if (ppp == null)
                 {
                     Rollback(queueCmd, ppp.parkingSpaceID, false, true);
                     return;
@@ -782,7 +789,6 @@ namespace parkMonitor.server.CoreThread
             int rearwheelbase;
             int garageID;
             bool robotError = false;
-            //车位更新数据库操作加锁,直到启动机械手
             if (queueCmd.manual)
             {
                 connectionStr = "SqlConnectionLocation";
@@ -831,7 +837,7 @@ namespace parkMonitor.server.CoreThread
             PLC.SetMessage(cm);
 
             Log.WriteLog("取车流程:" + queueCmd.LicenseNum + "取车");
-            UILogServer.ins.info("取车流程:" + queueCmd.LicenseNum+"取车");
+            UILogServer.ins.info("取车流程:" + queueCmd.LicenseNum + "取车");
             //等待PLC取车完成信号
             if (!waitForFetchCompletionSignal(queueCmd, ps.parkingSpaceID, ref robotError, 1))
             {

+ 9 - 6
parkMonitor/server/PLCLinker/PLCLinker.cs

@@ -483,12 +483,15 @@ namespace parkMonitor.server
                         foreach (PLCNode node in plcMsg.originalPlcList)
                         {
                             //判断激光空闲状态
-                            if (node.Address.Equals(lpuTemp.laser_status_address.ToString()) && (node.Value.Equals("254") || node.Value.Equals("255")) && !lpuTemp.laserMsg.occupied)
+                            lock (lpuTemp.laserMsg)
                             {
-                                lpuTemp.laserMsg.occupied = true;
-                                jumpOut = true;
-                                UILogServer.ins.log("获取摆扫激光空闲状态,准备启动激光");
-                                break;
+                                if (node.Address.Equals(lpuTemp.laser_status_address.ToString()) && (node.Value.Equals("254") || node.Value.Equals("255")) && !lpuTemp.laserMsg.occupied)
+                                {
+                                    lpuTemp.laserMsg.occupied = true;
+                                    jumpOut = true;
+                                    UILogServer.ins.log("获取摆扫激光空闲状态,准备启动激光");
+                                    break;
+                                }
                             }
                         }
                     }
@@ -503,7 +506,7 @@ namespace parkMonitor.server
                         if (MyTimer.restart && !mt.rolledBack)
                         {
                             mt.rolledBack = true;
-                            UILogServer.ins.error("启动前超时未能获取摆扫激光心跳,请检查设备");
+                            UILogServer.ins.error("启动前超时未能获取摆扫空闲状态,请检查设备");
                         }
                     }
                 }