|
|
using Rs.AutoDischarge.V3.Flow;
|
|
|
using Rs.Framework;
|
|
|
using Rs.MotionPlat.Commom;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
namespace Rs.MotionPlat.Flow
|
|
|
{
|
|
|
enum EStockCheckStep
|
|
|
{
|
|
|
|
|
|
空闲,
|
|
|
Input料仓是否就绪,
|
|
|
Ok料仓是否就绪,
|
|
|
Ng料仓是否就绪,
|
|
|
Multi料仓是否就绪,
|
|
|
等待搬运料盘就绪,
|
|
|
等待所有料仓就绪
|
|
|
}
|
|
|
public class WorkEnvironment
|
|
|
{
|
|
|
string logInfo = string.Empty;
|
|
|
EStockCheckStep step= EStockCheckStep.Input料仓是否就绪;
|
|
|
EStockCheckStep restoreStep;
|
|
|
public bool EnvironmentOk { get; set; } = false;
|
|
|
public ManualResetEvent EnvReadyOkEvent = new ManualResetEvent(false);
|
|
|
private static WorkEnvironment instance;
|
|
|
private bool isRunning = false;
|
|
|
public static WorkEnvironment Instance
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (instance == null)
|
|
|
instance = new WorkEnvironment();
|
|
|
return instance;
|
|
|
}
|
|
|
}
|
|
|
public void Ready()
|
|
|
{
|
|
|
if (!isRunning)
|
|
|
{
|
|
|
isRunning = true;
|
|
|
}
|
|
|
else
|
|
|
return;
|
|
|
step = EStockCheckStep.Input料仓是否就绪;
|
|
|
EnvReadyOkEvent.Reset();
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
EnvironmentOk = false;
|
|
|
while(isRunning)
|
|
|
{
|
|
|
Thread.Sleep(5);
|
|
|
switch (step)
|
|
|
{
|
|
|
case EStockCheckStep.Input料仓是否就绪:
|
|
|
if ((!StockManager.Instance.GetStock(ETrayType.Input).HasTray() && StockManager.Instance.GetStock(ETrayType.Input).Status!= EStockTrayStatus.Backed)
|
|
|
|| GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Input}料仓无料盘,开始给{ETrayType.Input}料仓上料";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Task.Run(() => {
|
|
|
StockManager.Instance.GetStock(ETrayType.Input).Load(EStockTrayLoadMode.Whole, null);//.Load(EStockType.Input, EStockTrayLoadMode.Whole);
|
|
|
});
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Input}料仓有料盘";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
}
|
|
|
if (!StockManager.Instance.GetStock(ETrayType.Empty2).HasTray() || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Empty2}料仓无料盘,开始给{ETrayType.Empty2}料仓上料";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Task.Run(() => {
|
|
|
StockManager.Instance.GetStock(ETrayType.Empty2).Load(EStockTrayLoadMode.Whole, null);//.Load(EStockType.Empty2, EStockTrayLoadMode.Whole);
|
|
|
});
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Empty2}料仓有料盘";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
}
|
|
|
step = EStockCheckStep.Ok料仓是否就绪;
|
|
|
break;
|
|
|
case EStockCheckStep.Ok料仓是否就绪:
|
|
|
if (!StockManager.Instance.GetStock(ETrayType.Ok).HasTray() || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Ok}料仓无料盘,开始给{ETrayType.Ok}料仓上料";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
//if (StockManager.Instance.HasTray(EStockType.Empty2))
|
|
|
{
|
|
|
//LogHelper.Debug("Empty2料仓有料,开始搬运Empty2->Ok");
|
|
|
//if(
|
|
|
TakeTrayFlow.Instance.Take(ETrayType.Empty2, ETrayType.Ok,
|
|
|
() =>
|
|
|
{
|
|
|
GlobalTray.GetTray(ETrayType.Empty2).ChangeStatus(Controls.ESlotStatus.Null);
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
StockManager.Instance.GetStock(ETrayType.Empty2).Load(EStockTrayLoadMode.Whole, null);
|
|
|
});
|
|
|
}, null,
|
|
|
() =>
|
|
|
{
|
|
|
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
StockManager.Instance.GetStock(ETrayType.Ok).Load(EStockTrayLoadMode.AfterTakeTray, null);
|
|
|
});
|
|
|
});
|
|
|
//)
|
|
|
//{
|
|
|
step = EStockCheckStep.Ng料仓是否就绪;
|
|
|
//}
|
|
|
|
|
|
//restoreStep = EStockCheckStep.Ng料仓是否就绪;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Ok}料仓有料盘";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
step = EStockCheckStep.Ng料仓是否就绪;
|
|
|
}
|
|
|
break;
|
|
|
case EStockCheckStep.Ng料仓是否就绪:
|
|
|
if (!StockManager.Instance.GetStock(ETrayType.Ng).HasTray() || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Ng}料仓无料,开始给{ETrayType.Ng}料仓上料";
|
|
|
MessageQueue .Instance.Insert(logInfo);
|
|
|
//if (StockManager.Instance.HasTray(EStockType.Empty2))
|
|
|
{
|
|
|
//LogHelper.Debug("Empty2料仓有料,开始搬运Empty2->Ng");
|
|
|
//if (
|
|
|
TakeTrayFlow.Instance.Take(ETrayType.Empty2, ETrayType.Ng,
|
|
|
() =>
|
|
|
{
|
|
|
GlobalTray.GetTray(ETrayType.Empty2).ChangeStatus(Controls.ESlotStatus.Null);
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
StockManager.Instance.GetStock(ETrayType.Empty2).Load(EStockTrayLoadMode.Whole, null);
|
|
|
});
|
|
|
|
|
|
}, null,
|
|
|
() =>
|
|
|
{
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
StockManager.Instance.GetStock(ETrayType.Ng).Load(EStockTrayLoadMode.AfterTakeTray, null);
|
|
|
});
|
|
|
});
|
|
|
//)
|
|
|
//{
|
|
|
step = EStockCheckStep.Multi料仓是否就绪;
|
|
|
//}
|
|
|
|
|
|
//restoreStep = EStockCheckStep.Multi料仓是否就绪;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Ng}料仓有料盘";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
step = EStockCheckStep.Multi料仓是否就绪;
|
|
|
}
|
|
|
break;
|
|
|
case EStockCheckStep.Multi料仓是否就绪:
|
|
|
if (!StockManager.Instance.GetStock(ETrayType.Multi).HasTray() || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Multi}料仓无料,开始给{ETrayType.Multi}料仓上料";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
//if (StockManager.Instance.HasTray(EStockType.Empty2))
|
|
|
{
|
|
|
//LogHelper.Debug("Empty2料仓有料,开始搬运Empty2->Multi");
|
|
|
//if (
|
|
|
TakeTrayFlow.Instance.Take(ETrayType.Empty2, ETrayType.Multi,
|
|
|
() =>
|
|
|
{
|
|
|
GlobalTray.GetTray(ETrayType.Empty2).ChangeStatus(Controls.ESlotStatus.Null);
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
StockManager.Instance.GetStock(ETrayType.Empty2).Load(EStockTrayLoadMode.Whole, null);
|
|
|
});
|
|
|
}, null,
|
|
|
() =>
|
|
|
{
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
StockManager.Instance.GetStock(ETrayType.Multi).Load(EStockTrayLoadMode.AfterTakeTray, null);
|
|
|
});
|
|
|
});
|
|
|
//)
|
|
|
//{
|
|
|
step = EStockCheckStep.等待所有料仓就绪;
|
|
|
//}
|
|
|
|
|
|
//restoreStep = EStockCheckStep.等待所有料仓就绪;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logInfo = GetClassName() + $"{ETrayType.Multi}料仓有料盘";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
step = EStockCheckStep.等待所有料仓就绪;
|
|
|
}
|
|
|
break;
|
|
|
//case EStockCheckStep.等待搬运料盘就绪:
|
|
|
// if(TakeTrayFlow.Instance.TakeStatus == ETakeStatus.TakeOK)
|
|
|
// {
|
|
|
// MessageQueue.Instance.Insert("搬运OK");
|
|
|
// step = restoreStep;
|
|
|
// restoreStep = EStockCheckStep.空闲;
|
|
|
// }
|
|
|
// break;
|
|
|
case EStockCheckStep.等待所有料仓就绪:
|
|
|
if(StockManager.Instance.IsReady())
|
|
|
{
|
|
|
MessageQueue.Instance.Insert("所有料仓准备就绪");
|
|
|
EnvironmentOk = true;
|
|
|
isRunning = false;
|
|
|
EnvReadyOkEvent.Set();
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
private string GetClassName()
|
|
|
{
|
|
|
return this.GetType().Name + "-";
|
|
|
}
|
|
|
|
|
|
public bool IsRunning()
|
|
|
{
|
|
|
return isRunning;
|
|
|
}
|
|
|
}
|
|
|
}
|