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; } } }); } } }