|
|
|
@ -0,0 +1,139 @@
|
|
|
|
|
using Rs.Controls;
|
|
|
|
|
using Rs.Framework;
|
|
|
|
|
using Rs.Motion;
|
|
|
|
|
using Rs.MotionPlat.Commom;
|
|
|
|
|
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 ETurnoverDumpFlowStep
|
|
|
|
|
{
|
|
|
|
|
到放料位下方,
|
|
|
|
|
等待到放料位下方,
|
|
|
|
|
放料完成抬起,
|
|
|
|
|
等待放料完成抬起
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 当周转吸嘴在治具或者周转盘取料失败时,自动把产品放下去,然后再报警
|
|
|
|
|
/// </summary>
|
|
|
|
|
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;
|
|
|
|
|
ErrorCode errCode = ErrorCode.Ok;
|
|
|
|
|
string logInfo = string.Empty;
|
|
|
|
|
ManualResetEvent dumpFinished = new ManualResetEvent(true);
|
|
|
|
|
bool finished = false;
|
|
|
|
|
|
|
|
|
|
public bool Dump(ETrayType trayType, List<int> transitNozzleList)
|
|
|
|
|
{
|
|
|
|
|
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.到放料位下方:
|
|
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset * 2;
|
|
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
|
|
{
|
|
|
|
|
logInfo = GetClassName() + $"到放料位下方";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
step = ETurnoverDumpFlowStep.等待到放料位下方;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ETurnoverDumpFlowStep.等待到放料位下方:
|
|
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
|
|
{
|
|
|
|
|
if (Ops.IsArrived(AxisControl.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.放料完成抬起;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ETurnoverDumpFlowStep.等待放料完成抬起:
|
|
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
|
|
{
|
|
|
|
|
if (Ops.IsArrived(AxisControl.TurnoverZ))
|
|
|
|
|
{
|
|
|
|
|
finished = true;
|
|
|
|
|
dumpFinished.Set();
|
|
|
|
|
logInfo = GetClassName() + $"放料完成已抬起";
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
Thread.Sleep(10);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Wait()
|
|
|
|
|
{
|
|
|
|
|
dumpFinished.WaitOne();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string GetClassName()
|
|
|
|
|
{
|
|
|
|
|
return "TurnoverDumpFlow-";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|