You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

198 lines
10 KiB
C#

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