using Rs.Framework;
using Rs.MotionPlat.Commom;
using Rs.MotionPlat.Entitys.Trays;
using Rs.MotionPlat.Recipe;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Rs.MotionPlat.Flow.SubFlow
{
enum ECleanOutFlowStep
{
排料吸嘴检测,
等待排料吸嘴处理完成,
周转盘检测,
等待周转盘处理完成,
周转吸嘴测试治具检测,
等待周转吸嘴测试治具处理完成,
}
///
/// 清料处理流程
///
public class CleanOutFlow
{
string logInfo = string.Empty;
bool run = false;
ECleanOutFlowStep step = ECleanOutFlowStep.排料吸嘴检测;
private static CleanOutFlow _instance;
public static CleanOutFlow Instance
{
get
{
if(_instance==null)
_instance = new CleanOutFlow();
return _instance;
}
}
private CleanOutFlow() { }
public void CleanOut()
{
if (run)
return;
else
run = true;
ECleanOutFlowStep step = ECleanOutFlowStep.排料吸嘴检测;
Task.Run(() => {
while (run)
{
switch (step)
{
case ECleanOutFlowStep.排料吸嘴检测:
if(MachineManage.Instance.MachineStatus== EMachineStatus.Working)
{
List unloadNozzles = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload);
if (unloadNozzles != null && unloadNozzles.Count > 0)
{
LogHelper.Debug(GetClassName() + $"检测到排料吸嘴有料{unloadNozzles.Count}");
GlobalVar.DischargeNozzleHasProduct = true;
//生成下料任务
LoadAndUnloadTask.Instance.CreateDischargeNozzleCleanOutTask();
Thread.Sleep(100);
step = ECleanOutFlowStep.等待排料吸嘴处理完成;
}
else
{
LogHelper.Debug(GetClassName() + $"检测到排料吸嘴无料");
step = ECleanOutFlowStep.周转盘检测;
}
}
break;
case ECleanOutFlowStep.等待排料吸嘴处理完成:
if(DischargeFlow.Instance.GetCurStep()=="等待任务")
{
GlobalVar.DischargeNozzleHasProduct = false;
step = ECleanOutFlowStep.周转盘检测;
}
break;
case ECleanOutFlowStep.周转盘检测:
//检测周转盘是否有任务
int num = TurnoverTrayManager.Instance.Slots.Where(s => s.IsHasProduct).Count();
if (num > 0)
{
LogHelper.Debug(GetClassName() + $"检测到周转盘有料{num}");
LoadAndUnloadTask.Instance.CreateTurnoverTrayCleanTask();
Thread.Sleep(1000);
step = ECleanOutFlowStep.等待周转盘处理完成;
}
else
{
LogHelper.Debug(GetClassName() + $"检测到周转盘无料");
//检测周转吸嘴是否有料
if (TransitNozzleManager.Instance.GetHasProductNozzles().Count > 0 || TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Count > 0)
{
step = ECleanOutFlowStep.周转吸嘴测试治具检测;
}
else
{
//清料结束
run = false;
logInfo = $"CleanOut finished";
MessageQueue.Instance.Insert(logInfo);
//清料结束
GlobalVar.CleanOut = false;
GlobalVar.DischargeNozzleHasProduct = false;
GlobalVar.TurnoverNozzleHasProduct = false;
Ops.Stop();
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
}
}
break;
case ECleanOutFlowStep.等待周转盘处理完成:
if(DischargeFlow.Instance.GetCurStep()=="等待任务")
{
//检测周转吸嘴是否有料
if (TransitNozzleManager.Instance.GetHasProductNozzles().Count > 0 || TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Count > 0)
{
step = ECleanOutFlowStep.周转吸嘴测试治具检测;
}
else
{
logInfo = $"CleanOut finished";
MessageQueue.Instance.Insert(logInfo);
//清料结束
GlobalVar.CleanOut = false;
GlobalVar.DischargeNozzleHasProduct = false;
GlobalVar.TurnoverNozzleHasProduct = false;
Ops.Stop();
run = false;
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
}
}
break;
case ECleanOutFlowStep.周转吸嘴测试治具检测:
//检测周转吸嘴是否有料
if (TransitNozzleManager.Instance.GetHasProductNozzles().Count > 0 || TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Count > 0)
{
if(TransitNozzleManager.Instance.GetHasProductNozzles().Count > 0)
{
GlobalVar.TurnoverNozzleHasProduct = true;
}
LogHelper.Debug(GetClassName() + $"检测到周转吸嘴有料{TransitNozzleManager.Instance.GetHasProductNozzles().Count}");
LoadAndUnloadTask.Instance.CreateTurnoverNozzleTestTrayCleanTask();
Thread.Sleep(1000);
step = ECleanOutFlowStep.等待周转吸嘴测试治具处理完成;
}
else
{
LogHelper.Debug(GetClassName() + $"检测到周转吸嘴无料");
step = ECleanOutFlowStep.周转盘检测;
}
break;
case ECleanOutFlowStep.等待周转吸嘴测试治具处理完成:
if (TurnoverFlow.Instance.GetStep() == "等待任务")
{
step = ECleanOutFlowStep.周转盘检测;
}
break;
default:
break;
}
}
});
}
private string GetClassName()
{
return "CleanOutFlow_";
}
public void Quit()
{
run = false;
}
}
}