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.

180 lines
8.4 KiB
C#

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
{
,
,
,
,
,
,
}
/// <summary>
/// 清料处理流程
/// </summary>
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<Nozzle> 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;
}
}
}