|
@@ -11,6 +11,7 @@ using System.Configuration;
|
|
|
using System.Threading;
|
|
|
using parkMonitor.server.uiLogServer;
|
|
|
using parkMonitor.DBLocation;
|
|
|
+using parkMonitor.tools;
|
|
|
|
|
|
namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
@@ -81,6 +82,8 @@ namespace parkMonitor.server.CoreThread
|
|
|
public void WaitForRobotResource(int robotID)
|
|
|
{
|
|
|
PLCMessage PLCMsg = null;
|
|
|
+ MyTimer mt = new MyTimer();
|
|
|
+ mt.StartTiming();
|
|
|
while (!isClosing)
|
|
|
{
|
|
|
lock (robot)
|
|
@@ -114,9 +117,15 @@ namespace parkMonitor.server.CoreThread
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ UILogServer.ins.log("获得机械手资源");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ mt.EndTiming();
|
|
|
+ if (mt.IsLonger(4, 1, true))
|
|
|
+ {
|
|
|
+ UILogServer.ins.info("无空闲机械手资源,继续等待");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -159,7 +168,6 @@ namespace parkMonitor.server.CoreThread
|
|
|
numberCheck.Wait();
|
|
|
return result;
|
|
|
}
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 号牌复位
|
|
|
/// </summary>
|
|
@@ -183,6 +191,8 @@ namespace parkMonitor.server.CoreThread
|
|
|
cEntrance.parkingEntY = parkingEntY;
|
|
|
cEntrance.parkingEntZ = parkingEntZ;
|
|
|
Parking_Space ppp = new Parking_Space();
|
|
|
+ MyTimer mt = new MyTimer();
|
|
|
+ mt.StartTiming();
|
|
|
while (!isClosing)
|
|
|
{
|
|
|
if (!queueCmd.manual)
|
|
@@ -195,16 +205,24 @@ namespace parkMonitor.server.CoreThread
|
|
|
}
|
|
|
if (ppp != null)
|
|
|
{
|
|
|
+ UILogServer.ins.log("已分配车位");
|
|
|
break;
|
|
|
}
|
|
|
- if (isClosing)
|
|
|
+ Thread.Sleep(200);
|
|
|
+ mt.EndTiming();
|
|
|
+ if (mt.IsLonger(1, 1, true))
|
|
|
{
|
|
|
- break;
|
|
|
+ UILogServer.ins.info("未获得车位,继续等待");
|
|
|
}
|
|
|
- Thread.Sleep(200);
|
|
|
}
|
|
|
return ppp;
|
|
|
}
|
|
|
+ /// <summary>
|
|
|
+ /// 等待激光数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="queueCmd">传入的命令</param>
|
|
|
+ /// <param name="disappeared">车辆是否已驶离</param>
|
|
|
+ /// <returns></returns>
|
|
|
private Data WaitForLaserResource(Command queueCmd, bool disappeared)
|
|
|
{
|
|
|
//激光数据
|
|
@@ -212,6 +230,8 @@ namespace parkMonitor.server.CoreThread
|
|
|
bool jumpOut = false;
|
|
|
PLCMessage PLCMsg = null;
|
|
|
jumpOut = false;
|
|
|
+ MyTimer mt = new MyTimer();
|
|
|
+ mt.StartTiming();
|
|
|
while (!isClosing)
|
|
|
{
|
|
|
PLCMsg = (PLCMessage)PLC.GetMessage();
|
|
@@ -255,19 +275,27 @@ namespace parkMonitor.server.CoreThread
|
|
|
}
|
|
|
if (jumpOut)
|
|
|
{
|
|
|
+ UILogServer.ins.log("激光数据已获得");
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
Thread.Sleep(1000);
|
|
|
+ mt.EndTiming();
|
|
|
+ if (mt.IsLonger(4, 1, true))
|
|
|
+ {
|
|
|
+ UILogServer.ins.info("未获取激光数据,继续等待");
|
|
|
+ }
|
|
|
}
|
|
|
return data;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 停车完成
|
|
|
/// </summary>
|
|
|
- private void WaitForStoreSignal(Command queueCmd, ref int parkingSpaceID, ref bool robotError)
|
|
|
+ private void WaitForStoreCompletionSignal(Command queueCmd, ref int parkingSpaceID, ref bool robotError)
|
|
|
{
|
|
|
PLCMessage PLCMsg = null;
|
|
|
+ MyTimer mt = new MyTimer();
|
|
|
+ mt.StartTiming();
|
|
|
while (!isClosing)
|
|
|
{
|
|
|
Thread.Sleep(1000);
|
|
@@ -276,9 +304,10 @@ namespace parkMonitor.server.CoreThread
|
|
|
//停车完成信号
|
|
|
if (storeStatus == 1)
|
|
|
{
|
|
|
+ UILogServer.ins.log("已获得停车完成信号");
|
|
|
break;
|
|
|
}
|
|
|
- else if (1 == 2)//机械手异常,则退指令,写数据库归位
|
|
|
+ else if (1 == 2)//机械手异常,则退指令,写数据库归位,判断条件需之后补充
|
|
|
{
|
|
|
robotError = true;
|
|
|
queueCmd.returnedCount += 1;
|
|
@@ -293,11 +322,23 @@ namespace parkMonitor.server.CoreThread
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
+ mt.EndTiming();
|
|
|
+ if (mt.IsLonger(4, 1, true))
|
|
|
+ {
|
|
|
+ UILogServer.ins.info("未获得停车完成信号,继续等待");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ /// <summary>
|
|
|
+ /// 等待轮距信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="frontWheelbase">前轮距</param>
|
|
|
+ /// <param name="rearWheelbase">后轮距</param>
|
|
|
private void WaitWheelbase(ref int frontWheelbase, ref int rearWheelbase)
|
|
|
{
|
|
|
PLCMessage PLCMsg = null;
|
|
|
+ MyTimer mt = new MyTimer();
|
|
|
+ mt.StartTiming();
|
|
|
while (!isClosing)
|
|
|
{
|
|
|
PLCMsg = (PLCMessage)PLC.GetMessage();
|
|
@@ -307,9 +348,15 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
frontWheelbase = Convert.ToInt32(PLCMsg.originalPlcList[frontWheelbase_address].Value);
|
|
|
rearWheelbase = Convert.ToInt32(PLCMsg.originalPlcList[rearWheelbase_address].Value);
|
|
|
+ UILogServer.ins.log("轮距雷达完成状态已获取");
|
|
|
break;
|
|
|
}
|
|
|
Thread.Sleep(1000);
|
|
|
+ mt.EndTiming();
|
|
|
+ if (mt.IsLonger(4, 1, true))
|
|
|
+ {
|
|
|
+ UILogServer.ins.info("未获取轮距雷达完成状态,继续等待");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
/// <summary>
|
|
@@ -324,7 +371,6 @@ namespace parkMonitor.server.CoreThread
|
|
|
cm.status = status;
|
|
|
cm.laserID = queueCmd.id;//启动对应激光
|
|
|
PLC.SetMessage(cm);
|
|
|
- Console.WriteLine("停车,开激光:" + queueCmd.LicenseNum);
|
|
|
Log.WriteLog("停车,开激光:" + queueCmd.LicenseNum);
|
|
|
UILogServer.ins.info("停车,开激光:" + queueCmd.LicenseNum);
|
|
|
|
|
@@ -439,15 +485,15 @@ namespace parkMonitor.server.CoreThread
|
|
|
int rearWheelbase = 0;
|
|
|
Task dataFromWheelbase = Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
- WaitWheelbase(ref frontWheelbase,ref rearWheelbase);
|
|
|
+ WaitWheelbase(ref frontWheelbase, ref rearWheelbase);
|
|
|
});
|
|
|
-
|
|
|
- Task storeSignal = Task.Factory.StartNew(() =>
|
|
|
+
|
|
|
+ Task storeCompletionSignal = Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
- WaitForStoreSignal(queueCmd, ref parkingSpaceID, ref robotError);
|
|
|
+ WaitForStoreCompletionSignal(queueCmd, ref parkingSpaceID, ref robotError);
|
|
|
});
|
|
|
//storeSignal.Wait();
|
|
|
- Task.WaitAll(dataFromWheelbase, storeSignal);
|
|
|
+ Task.WaitAll(dataFromWheelbase, storeCompletionSignal);
|
|
|
//第三步:
|
|
|
status = 3;
|
|
|
cm.status = status;
|
|
@@ -549,6 +595,47 @@ namespace parkMonitor.server.CoreThread
|
|
|
/// </summary>
|
|
|
public class FetchCmd : AbstractCmd
|
|
|
{
|
|
|
+ private void waitForFetchCompletionSignal(Command queueCmd, ref int parkingSpaceID, ref bool robotError)
|
|
|
+ {
|
|
|
+ PLCMessage PLCMsg = null;
|
|
|
+ MyTimer mt = new MyTimer();
|
|
|
+ mt.StartTiming();
|
|
|
+ while (!isClosing)
|
|
|
+ {
|
|
|
+ Thread.Sleep(2000);
|
|
|
+ PLCMsg = (PLCMessage)PLC.GetMessage();
|
|
|
+ int fetchingStatus = Convert.ToInt32(PLCMsg.originalPlcList[fetch_completed_address].Value);
|
|
|
+ //取车完成信号
|
|
|
+ if (fetchingStatus == 1)
|
|
|
+ {
|
|
|
+ //取车完成后或可归零
|
|
|
+ UILogServer.ins.log("获得取车完成信号");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else if (1 == 2)//机械手异常,则退指令,写数据库归位,判断条件需之后补充
|
|
|
+ {
|
|
|
+ robotError = true;
|
|
|
+ queueCmd.returnedCount += 1;
|
|
|
+ queuingThread.SetMessage(queueCmd);
|
|
|
+ if (!queueCmd.manual)
|
|
|
+ {
|
|
|
+ oper.UpdateParkingSpaceState(parkingSpaceID, 0);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ locationOper.UpdateParkingSpaceState(parkingSpaceID, 0);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ mt.EndTiming();
|
|
|
+ if (mt.IsLonger(4, 1, true))
|
|
|
+ {
|
|
|
+ UILogServer.ins.info("未获得取车完成信号,继续等待");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
public override void executeCmd(Command queueCmd)
|
|
|
{
|
|
|
PLCMessage PLCMsg = null;
|
|
@@ -565,6 +652,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
int garageID = vehiclelist.garageID;
|
|
|
int frontwheelbase = vehiclelist.frontwheelbase;
|
|
|
int rearwheelbase = vehiclelist.rearwheelbase;
|
|
|
+ bool robotError = false;
|
|
|
Fetching_Space fslist = null;
|
|
|
if (queueCmd.manual)
|
|
|
{
|
|
@@ -604,23 +692,12 @@ namespace parkMonitor.server.CoreThread
|
|
|
Log.WriteLog("取车:" + queueCmd.LicenseNum);
|
|
|
UILogServer.ins.info("取车:" + queueCmd.LicenseNum);
|
|
|
//等待PLC取车完成信号
|
|
|
- Task signalFromPLC = Task.Factory.StartNew(() =>
|
|
|
+ Task FetchCompletionSignal = Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
- while (!isClosing)
|
|
|
- {
|
|
|
- Thread.Sleep(2000);
|
|
|
- PLCMsg = (PLCMessage)PLC.GetMessage();
|
|
|
- int fetchingStatus = Convert.ToInt32(PLCMsg.originalPlcList[fetch_completed_address].Value);
|
|
|
- //取车完成信号
|
|
|
- if (fetchingStatus == 1)
|
|
|
- {
|
|
|
- //取车完成后或可归零
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
+ waitForFetchCompletionSignal(queueCmd,ref parkingSpaceID,ref robotError);
|
|
|
});
|
|
|
//Task.WaitAll(signalFromPLC);
|
|
|
- signalFromPLC.Wait();
|
|
|
+ FetchCompletionSignal.Wait();
|
|
|
//取车完成
|
|
|
status = 5;
|
|
|
ControlMessage cm2 = new ControlMessage();
|