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.

159 lines
7.0 KiB
C#

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
{
,
,
,
}
/// <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;
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<int> 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<double>("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-";
}
}
}