|
|
using Rs.Framework;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
namespace Rs.MotionPlat.Flow
|
|
|
{
|
|
|
enum EStockCheckStep
|
|
|
{
|
|
|
|
|
|
空闲,
|
|
|
Input料仓是否就绪,
|
|
|
Ok料仓是否就绪,
|
|
|
Ng料仓是否就绪,
|
|
|
Multi料仓是否就绪,
|
|
|
WaitEmpty2料仓就绪,
|
|
|
等待搬运料盘就绪,
|
|
|
等待所有料仓就绪
|
|
|
}
|
|
|
public class WorkEnvironment
|
|
|
{
|
|
|
EStockCheckStep step= EStockCheckStep.Input料仓是否就绪;
|
|
|
EStockCheckStep restoreStep;
|
|
|
public bool EnvironmentOk { get; set; } = false;
|
|
|
private static WorkEnvironment instance;
|
|
|
public static WorkEnvironment Instance
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (instance == null)
|
|
|
instance = new WorkEnvironment();
|
|
|
return instance;
|
|
|
}
|
|
|
}
|
|
|
public void Ready()
|
|
|
{
|
|
|
Task.Run(() =>
|
|
|
{
|
|
|
while(true && !EnvironmentOk)
|
|
|
{
|
|
|
switch (step)
|
|
|
{
|
|
|
case EStockCheckStep.Input料仓是否就绪:
|
|
|
if (!StockManager.Instance.HasTray(EStockType.Input))
|
|
|
{
|
|
|
LogHelper.Debug("Input料仓无料,开始给Input料仓上料");
|
|
|
StockManager.Instance.Load(EStockType.Input);
|
|
|
}
|
|
|
if (!StockManager.Instance.HasTray(EStockType.Empty2))
|
|
|
{
|
|
|
LogHelper.Debug("Empty2料仓无料,开始给Empty2料仓上料");
|
|
|
StockManager.Instance.Load(EStockType.Empty2);
|
|
|
}
|
|
|
step = EStockCheckStep.Ok料仓是否就绪;
|
|
|
break;
|
|
|
case EStockCheckStep.Ok料仓是否就绪:
|
|
|
if (!StockManager.Instance.HasTray(EStockType.Ok))
|
|
|
{
|
|
|
LogHelper.Debug("Ok料仓无料,开始给Ok料仓上料");
|
|
|
if (StockManager.Instance.HasTray(EStockType.Empty2))
|
|
|
{
|
|
|
LogHelper.Debug("Empty2料仓有料,开始搬运Empty2->Ok");
|
|
|
TakeTrayFlow.Instance.Take(EStockType.Empty2, EStockType.Ok);
|
|
|
step = EStockCheckStep.等待搬运料盘就绪;
|
|
|
restoreStep = EStockCheckStep.Ng料仓是否就绪;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
step = EStockCheckStep.Ng料仓是否就绪;
|
|
|
}
|
|
|
break;
|
|
|
case EStockCheckStep.Ng料仓是否就绪:
|
|
|
if (!StockManager.Instance.HasTray(EStockType.Ng))
|
|
|
{
|
|
|
LogHelper.Debug("Ng料仓无料,开始给Ng料仓上料");
|
|
|
if (StockManager.Instance.HasTray(EStockType.Empty2))
|
|
|
{
|
|
|
LogHelper.Debug("Empty2料仓有料,开始搬运Empty2->Ng");
|
|
|
TakeTrayFlow.Instance.Take(EStockType.Empty2, EStockType.Ng);
|
|
|
step = EStockCheckStep.等待搬运料盘就绪;
|
|
|
restoreStep = EStockCheckStep.Multi料仓是否就绪;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
step = EStockCheckStep.Multi料仓是否就绪;
|
|
|
}
|
|
|
break;
|
|
|
case EStockCheckStep.Multi料仓是否就绪:
|
|
|
if (!StockManager.Instance.HasTray(EStockType.Multi))
|
|
|
{
|
|
|
LogHelper.Debug("Multi料仓无料,开始给Multi料仓上料");
|
|
|
if (StockManager.Instance.HasTray(EStockType.Empty2))
|
|
|
{
|
|
|
LogHelper.Debug("Empty2料仓有料,开始搬运Empty2->Multi");
|
|
|
TakeTrayFlow.Instance.Take(EStockType.Empty2, EStockType.Multi);
|
|
|
step = EStockCheckStep.等待搬运料盘就绪;
|
|
|
restoreStep = EStockCheckStep.等待所有料仓就绪;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
step = EStockCheckStep.等待所有料仓就绪;
|
|
|
}
|
|
|
break;
|
|
|
case EStockCheckStep.WaitEmpty2料仓就绪:
|
|
|
if (StockManager.Instance.HasTray(EStockType.Empty2))
|
|
|
{
|
|
|
LogHelper.Debug("Empty2已料仓就绪");
|
|
|
step = restoreStep;
|
|
|
restoreStep = EStockCheckStep.空闲;
|
|
|
}
|
|
|
break;
|
|
|
case EStockCheckStep.等待搬运料盘就绪:
|
|
|
if(TakeTrayFlow.Instance.TakeStatus== ETakeStatus.TakeOK)
|
|
|
{
|
|
|
LogHelper.Debug("搬运OK");
|
|
|
step = restoreStep;
|
|
|
restoreStep = EStockCheckStep.空闲;
|
|
|
}
|
|
|
break;
|
|
|
case EStockCheckStep.等待所有料仓就绪:
|
|
|
if(StockManager.Instance.IsReady())
|
|
|
{
|
|
|
LogHelper.Debug("所有料仓准备就绪");
|
|
|
EnvironmentOk = true;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|