using Rs.Controls;
using Rs.Framework;
using Rs.Motion;
using Rs.MotionPlat.Commom;
using Rs.MotionPlat.Entitys;
using Rs.MotionPlat.Flow.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static Rs.MotionPlat.Commom.SchedulingMessageBox;
namespace Rs.MotionPlat.Flow.SubFlow
{
enum ETurnoverDumpFlowStep
{
到放料位下方,
等待到放料位下方,
放料完成抬起,
等待放料完成抬起
}
///
/// 当周转吸嘴在治具或者周转盘取料失败时,自动把产品放下去,然后再报警
///
public class TurnoverDumpFlow
{
private TurnoverDumpFlow() { }
private static TurnoverDumpFlow instance;
public static TurnoverDumpFlow Instance
{
get
{
if(instance==null)
instance = new TurnoverDumpFlow();
return instance;
}
}
private ETurnoverDumpFlowStep step = ETurnoverDumpFlowStep.到放料位下方;
//double targetPos = 0.0;
TargetPosition targetPosition = new TargetPosition();
AlarmEntity alarmEntity = null;
ErrorCode errCode = ErrorCode.Ok;
string logInfo = string.Empty;
ManualResetEvent dumpFinished = new ManualResetEvent(true);
bool finished = true;
public bool Dump(ETrayType trayType, List transitNozzleList)
{
step = ETurnoverDumpFlowStep.到放料位下方;
if (finished)
{
dumpFinished.Reset();
finished = false;
}
else
return false;
Task.Run(() => {
while (!finished)
{
if (MachineManage.Instance.MachineStatus == EMachineStatus.Stop)
{
Thread.Sleep(10);
continue;
}
switch (step)
{
case ETurnoverDumpFlowStep.到放料位下方:
targetPosition.TurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset * 1.5;
errCode = AxisControl.TurnoverZ.MovePos(targetPosition.TurnoverZ, GlobalVar.WholeSpeed);
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
{
logInfo = GetClassName() + $"到放料位下方";
MessageQueue.Instance.Insert(logInfo);
step = ETurnoverDumpFlowStep.等待到放料位下方;
}
else
{
//PromptMessageBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
alarmEntity = AlarmCollection.Get(AlarmConstID.TurnoverZ运动异常).Transform(errCode.ToString());
AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null);
}
break;
case ETurnoverDumpFlowStep.等待到放料位下方:
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
{
//if (Ops.IsArrived(AxisControl.TurnoverZ))
if(AxisArrived.TurnoverZIsInTargetPos(targetPosition.TurnoverZ))
{
logInfo = GetClassName() + $"已运动到放料位下方";
MessageQueue.Instance.Insert(logInfo);
////关闭真空吸
VacManager.TransitNozzleVacSuction(EVacOperator.Close, true, transitNozzleList.ToArray());
//打开真空破
VacManager.TransitNozzleVacBreak(EVacOperator.Open, true, transitNozzleList.ToArray());
//关闭真空破
VacManager.TransitNozzleVacBreak(EVacOperator.Close, false, transitNozzleList.ToArray());
step = ETurnoverDumpFlowStep.放料完成抬起;
}
else
{
step = ETurnoverDumpFlowStep.到放料位下方;
}
}
break;
case ETurnoverDumpFlowStep.放料完成抬起:
errCode = AxisControl.TurnoverZ.MovePos(0, GlobalVar.WholeSpeed);
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
{
logInfo = GetClassName() + $"放料完成抬起";
MessageQueue.Instance.Insert(logInfo);
step = ETurnoverDumpFlowStep.等待放料完成抬起;
}
else
{
///PromptMessageBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
alarmEntity = AlarmCollection.Get(AlarmConstID.TurnoverZ运动异常).Transform(errCode.ToString());
AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null);
}
break;
case ETurnoverDumpFlowStep.等待放料完成抬起:
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
{
//if (Ops.IsArrived(AxisControl.TurnoverZ))
if(AxisArrived.TurnoverZIsInTargetPos(targetPosition.TurnoverZ))
{
finished = true;
logInfo = GetClassName() + $"放料完成已抬起";
MessageQueue.Instance.Insert(logInfo);
dumpFinished.Set();
break;
}
else
{
step = ETurnoverDumpFlowStep.放料完成抬起;
}
}
break;
}
Thread.Sleep(10);
}
});
return true;
}
public void Wait()
{
dumpFinished.WaitOne();
}
string GetClassName()
{
return "TurnoverDumpFlow-";
}
}
}