|
|
using log4net.Core;
|
|
|
using Rs.Controls;
|
|
|
using Rs.Framework;
|
|
|
using Rs.MotionPlat.Commom;
|
|
|
using Rs.MotionPlat.Entitys.Trays;
|
|
|
using Rs.MotionPlat.Flow.Camera;
|
|
|
using Rs.MotionPlat.Flow.NgFlow;
|
|
|
using Rs.MotionPlat.Flow.SafePosFlow;
|
|
|
using Rs.MotionPlat.Flow.SubFlow;
|
|
|
using System;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Windows.Forms;
|
|
|
using static Rs.MotionPlat.Commom.SchedulingMessageBox;
|
|
|
|
|
|
namespace Rs.MotionPlat.Flow
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 周转流程步序
|
|
|
/// </summary>
|
|
|
enum ETurnoverFlowStep
|
|
|
{
|
|
|
等待任务,
|
|
|
到周转盘取料位上方,
|
|
|
等待运动到周转盘取料位上方,
|
|
|
取料异常报警,
|
|
|
到周转盘下方取料位1,
|
|
|
等待运动到周转盘下方取料位1,
|
|
|
到周转盘下方取料位2,
|
|
|
等待运动到周转盘下方取料位2,
|
|
|
到周转盘取料破真空位,
|
|
|
等待到周转盘取料破真空位,
|
|
|
周转盘取料完成抬起,
|
|
|
等待周转盘取料完成抬起,
|
|
|
周转盘取料完成真空检测,
|
|
|
到测试放料位上方,
|
|
|
等待运动到测试放料位上方,
|
|
|
测试位上料丢料检测,
|
|
|
到测试放料位下方1,
|
|
|
等待运动到到测试放料位下方1,
|
|
|
到测试放料位下方2,
|
|
|
等待运动到到测试放料位下方2,
|
|
|
测试位放料完成抬起,
|
|
|
等待测试位放料完成抬起,
|
|
|
测试位放料完成粘料检测,
|
|
|
测试位放料完成真空检测,
|
|
|
到测试保压位上方,
|
|
|
等待到测试保压位上方,
|
|
|
到测试保压位下方1,
|
|
|
等待到测试保压位下方1,
|
|
|
到测试保压位下方2,
|
|
|
等待到测试保压位下方2,
|
|
|
通知中控开始测试,
|
|
|
等待测试完成,
|
|
|
测试完成抬起到高速位,
|
|
|
等待测试完成抬起到高速位,
|
|
|
测试完成抬起安全位,
|
|
|
等待测试完成抬起安全位,
|
|
|
测试完成到治具取料位上方,
|
|
|
等待测试完成到治具取料位上方,
|
|
|
/// <summary>
|
|
|
/// ///////////////////////////////////////////////////////////////////
|
|
|
/// </summary>
|
|
|
到测试取料位上方,
|
|
|
等待到测试取料位上方,
|
|
|
到测试取料位下方1,
|
|
|
测试治具取料失败报警,
|
|
|
等待到测试取料位下方1,
|
|
|
到测试取料位下方2,
|
|
|
等待到测试取料位下方2,
|
|
|
到测试破关真空位,
|
|
|
等待到测试关破真空位,
|
|
|
测试位取料完成抬起,
|
|
|
等待测试位取料完成抬起,
|
|
|
测试位取料完成后真空检测,
|
|
|
到周转盘放料位上方,
|
|
|
等待到周转盘放料位上方,
|
|
|
周转盘放料前丢料检测,
|
|
|
到周转盘放料位下方1,
|
|
|
等待到周转盘放料位下方1,
|
|
|
到周转盘放料位下方2,
|
|
|
等待到周转盘放料位下方2,
|
|
|
周转盘放料完成粘料检测,
|
|
|
周转盘放料完成后真空检测,
|
|
|
周转盘放料真空异常处理,
|
|
|
周转盘放料完成抬起1,
|
|
|
等待周转盘放料完成抬起1,
|
|
|
周转盘放料完成抬起2,
|
|
|
等待周转盘放料完成抬起2,
|
|
|
到安全位,
|
|
|
等待到安全位,
|
|
|
上报中控任务完成
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 周转流程
|
|
|
/// </summary>
|
|
|
public class TurnoverFlow:BaseFlow
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 周转盘取料是否完成
|
|
|
/// </summary>
|
|
|
bool turnoverTakeFinishe = false;
|
|
|
public EFlowStatus FlowStatus { get; set; } = EFlowStatus.Idle;
|
|
|
private static TurnoverFlow instance;
|
|
|
public static TurnoverFlow Instance
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if(instance == null)
|
|
|
instance = new TurnoverFlow();
|
|
|
return instance;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private TurnoverFlow(){ }
|
|
|
/// <summary>
|
|
|
/// 保压位上料
|
|
|
/// </summary>
|
|
|
private bool pressLoad = false;
|
|
|
/// <summary>
|
|
|
/// 保压位下料
|
|
|
/// </summary>
|
|
|
private bool pressUnload = false;
|
|
|
|
|
|
private bool loadOk = false;
|
|
|
private bool unloadOk = false;
|
|
|
//List<int> slots = new List<int>();
|
|
|
List<int> ngList = new List<int>();
|
|
|
ETurnoverFlowStep Step = ETurnoverFlowStep.等待任务;
|
|
|
double targetPos = 0.0;
|
|
|
Motion.ErrorCode errCode = Motion.ErrorCode.Ok;
|
|
|
List<TransitNozzle> hasProductNozzles = new List<TransitNozzle>();
|
|
|
/// <summary>
|
|
|
/// 重取次数
|
|
|
/// </summary>
|
|
|
private int retakeNum = 0;
|
|
|
List<int> slots;
|
|
|
/// <summary>
|
|
|
/// 丢料的吸嘴
|
|
|
/// </summary>
|
|
|
List<int> loseSlots = new List<int>();
|
|
|
/// <summary>
|
|
|
/// 粘料的吸嘴
|
|
|
/// </summary>
|
|
|
List<int> masticSlots = new List<int>();
|
|
|
/// <summary>
|
|
|
/// 获取未执行的任务
|
|
|
/// </summary>
|
|
|
private List<TurnoverInfo> undealTasks = new List<TurnoverInfo>();
|
|
|
public override void Run()
|
|
|
{
|
|
|
switch (Step)
|
|
|
{
|
|
|
case ETurnoverFlowStep.等待任务:
|
|
|
if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskType.TestLoad) > 0)
|
|
|
{
|
|
|
turnoverTakeFinishe = false;
|
|
|
FlowStatus = EFlowStatus.Running;
|
|
|
retakeNum = 0;
|
|
|
logInfo = GetClassName()+$"接收到测试工位上料任务";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到周转盘取料位上方;
|
|
|
}
|
|
|
else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskType.TestUnload) > 0)
|
|
|
{
|
|
|
FlowStatus = EFlowStatus.Running;
|
|
|
retakeNum = 0;
|
|
|
logInfo = GetClassName() + $"接收到测试工位下料任务";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
//Step = ETurnoverFlowStep.测试完成抬起到高速位;
|
|
|
Step = ETurnoverFlowStep.到测试取料位上方;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到周转盘取料位上方:
|
|
|
if(CanGoTurnoverTrayPos())
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeX");
|
|
|
errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeY");
|
|
|
errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到周转盘取料位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待运动到周转盘取料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverY, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverX, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Msg.ShowError("turnovery axis move is unsafe");
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待运动到周转盘取料位上方:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverX,AxisControl.TurnoverY) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到周转盘取料位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
if(retakeNum<3)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到周转盘下方取料位1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.取料异常报警;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.取料异常报警:
|
|
|
//查询周转盘中待测穴位中有料的穴位
|
|
|
List<TurnoverTraySlot> untestSlots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have);
|
|
|
if (untestSlots != null && untestSlots.Count > 0)
|
|
|
{
|
|
|
bool exit = false;
|
|
|
while (!exit)
|
|
|
{
|
|
|
alarmInfo = GetClassName() + $"周转盘{string.Join(",", untestSlots.Select(s => s.Index))}号穴位异常";
|
|
|
TestCenterMessageBox.Show(AlarmConstID.TurnoverTakeFailAlarm, alarmInfo, MessageButtonManager.GetRetry_Skip_MoveToSafe_Button(),
|
|
|
MessageButtonManager.GetRetry_Skip_MoveToSafe_ButtonText());
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.TurnoverTakeFailAlarm);
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Retry:
|
|
|
logInfo = $"选择了重试";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
retakeNum = 0;
|
|
|
exit = true;
|
|
|
Step = ETurnoverFlowStep.到周转盘取料位上方;
|
|
|
break;
|
|
|
case ETipButton.Skip:
|
|
|
logInfo = GetClassName() + $"选择了跳过";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
if (GlobalVar.EnableExceptionHandlingNozzle)
|
|
|
{
|
|
|
foreach (TurnoverTraySlot slot in untestSlots)
|
|
|
{
|
|
|
WarningSuckerNgFlow.Instance.DealNgProduct(ETrayType.Turnover, slot.Index);
|
|
|
slot.ClearProduct();
|
|
|
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, slot.Index);
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.NotHave);
|
|
|
}
|
|
|
exit = true;
|
|
|
Step = ETurnoverFlowStep.到测试放料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
untestSlots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have);
|
|
|
foreach (TurnoverTraySlot slot in untestSlots)
|
|
|
{
|
|
|
if (!LaserFlow.Instance.HasProduct(ETrayType.Turnover, slot.Index))
|
|
|
{
|
|
|
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, slot.Index);
|
|
|
slot.ClearProduct();
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.NotHave);
|
|
|
}
|
|
|
}
|
|
|
untestSlots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have);
|
|
|
if (untestSlots == null || untestSlots.Count == 0)
|
|
|
{
|
|
|
exit = true;
|
|
|
Step = ETurnoverFlowStep.到测试放料位上方;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Yes:
|
|
|
logInfo = $"选择了移动到安全位";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion(EExceptionSafePos.TurnoverTray);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case ETurnoverFlowStep.到周转盘下方取料位1:
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset;
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到周转盘下方取料位1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待运动到周转盘下方取料位1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case ETurnoverFlowStep.等待运动到周转盘下方取料位1:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+ $"已运动到周转盘下方取料位1 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到周转盘下方取料位2;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到周转盘下方取料位2:
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeZ");
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到周转盘下方取料位2";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待运动到周转盘下方取料位2;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待运动到周转盘下方取料位2:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到周转盘下方取料位2 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
undealTasks = LoadAndUnloadTask.Instance.GetTurnoverToTestTasks(ETaskDealStatus.Undeal);
|
|
|
/*打开周转吸嘴真空吸*/
|
|
|
VacManager.TransitNozzleVacSuction(EVacOperator.Open, undealTasks.Select(t => t.ToIndex + 1).ToArray());
|
|
|
/*关闭周转盘真空吸*/
|
|
|
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, undealTasks.Select(t => t.FromIndex + 1).ToArray());
|
|
|
/*打开周转盘真空破*/
|
|
|
VacManager.TurnoverTrayVacBreak(EVacOperator.Open, undealTasks.Select(t => t.FromIndex + 1).ToArray());
|
|
|
Step = ETurnoverFlowStep.到周转盘取料破真空位;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到周转盘取料破真空位:
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeZ")+GlobalVar.CloseVacOffsetHeight;
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到周转盘取料破真空位";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到周转盘取料破真空位;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到周转盘取料破真空位:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = $"已到周转盘取料破真空位";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
undealTasks = LoadAndUnloadTask.Instance.GetTurnoverToTestTasks(ETaskDealStatus.Undeal);
|
|
|
/*关闭周转盘真空破*/
|
|
|
VacManager.TurnoverTrayVacBreak(EVacOperator.Close, undealTasks.Select(t => t.FromIndex + 1).ToArray());
|
|
|
Step = ETurnoverFlowStep.周转盘取料完成抬起;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.周转盘取料完成抬起:
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverSafeZ");
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"周转盘取料完成抬起";
|
|
|
MessageQueue.Instance.Insert (logInfo);
|
|
|
Step = ETurnoverFlowStep.等待周转盘取料完成抬起;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待周转盘取料完成抬起:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"周转盘取料完成已抬起";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.周转盘取料完成真空检测;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.周转盘取料完成真空检测:
|
|
|
undealTasks = LoadAndUnloadTask.Instance.GetTurnoverToTestTasks(ETaskDealStatus.Undeal);
|
|
|
foreach (TurnoverInfo task in undealTasks)
|
|
|
{
|
|
|
if (Ops.IsOn($"周转{task.FromIndex + 1}号吸嘴真空吸检测") || GlobalVar.VirtualAxis || GlobalVar.RunSpace)
|
|
|
{
|
|
|
//如果真空检测OK,带料产品已经吸上了
|
|
|
TransitNozzleManager.Instance.Nozzle(task.ToIndex + 1).AddProduct(task);
|
|
|
TurnoverTrayManager.Instance.Slot(task.FromIndex + 1).ClearProduct();
|
|
|
//slot.ClearProduct();
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(task.FromIndex + 1, ESlotStatus.NotHave);
|
|
|
task.Dealed = true;
|
|
|
}
|
|
|
}
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
if (hasProductNozzles.Count > 0)
|
|
|
{
|
|
|
logInfo = GetClassName()+ $"周转吸头{hasProductNozzles.Select(n => n.NozzleIndex).ToJoinString()}真空检测OK";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到测试放料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
retakeNum++;
|
|
|
Step = ETurnoverFlowStep.到周转盘取料位上方;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到测试放料位上方:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressDumpX");
|
|
|
errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressDumpY");
|
|
|
errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到测试放料位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待运动到测试放料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverY, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverX, errCode);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待运动到测试放料位上方:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverX,AxisControl.TurnoverY) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (turnoverTakeFinishe==false && TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have).Count() == 0)
|
|
|
{
|
|
|
turnoverTakeFinishe = true;
|
|
|
string reportStr = LoadAndUnloadTask.Instance.GetTestLoadString();
|
|
|
TestCenter.Instance.Send(reportStr);
|
|
|
LoadAndUnloadTask.Instance.Clear(1);
|
|
|
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
|
|
|
MessageQueue.Instance.Insert("通知中控周转载盘产品已取走,可以继续排料");
|
|
|
}
|
|
|
Step = ETurnoverFlowStep.测试位上料丢料检测;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试位上料丢料检测:
|
|
|
if(GlobalVar.VirtualAxis || GlobalVar.RunSpace)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到测试放料位下方1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if(TransitNozzleManager.Instance.GetHasProductNozzles().Count>0)
|
|
|
{
|
|
|
loseSlots.Clear();
|
|
|
//检测是否丢料
|
|
|
foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles())
|
|
|
{
|
|
|
if (!nozzle.HasVacSignal())
|
|
|
{
|
|
|
loseSlots.Add(nozzle.NozzleIndex);
|
|
|
}
|
|
|
}
|
|
|
if (loseSlots.Count > 0)
|
|
|
{
|
|
|
bool exit = false;
|
|
|
while (!exit)
|
|
|
{
|
|
|
alarmInfo = $"周转{loseSlots.ToJoinString()}号吸嘴真空异常丢料,请处理";
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Skip:
|
|
|
logInfo = GetClassName() + $"点击了跳过按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
exit = true;
|
|
|
List<TransitNozzle> hasProducts = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
//把吸嘴的真空吸关闭
|
|
|
VacManager.TransitNozzleVacSuction(EVacOperator.Close, loseSlots.ToArray());
|
|
|
//打开周转吸嘴的真空破
|
|
|
VacManager.TransitNozzleVacBreak(EVacOperator.Open, loseSlots.ToArray());
|
|
|
//关闭周转吸嘴的真空破
|
|
|
VacManager.TransitNozzleVacBreak(EVacOperator.Close, loseSlots.ToArray());
|
|
|
foreach(int nozzleIndex in loseSlots)
|
|
|
{
|
|
|
TransitNozzleManager.Instance.Nozzle(nozzleIndex).Clear();
|
|
|
}
|
|
|
Step = ETurnoverFlowStep.到测试放料位上方;
|
|
|
break;
|
|
|
case ETipButton.Yes:
|
|
|
logInfo = GetClassName() + $"点击了移动到安全位按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion( EExceptionSafePos.TransitNozzle);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到测试放料位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到测试放料位下方1;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (!turnoverTakeFinishe)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到周转盘取料位上方;
|
|
|
retakeNum++;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Count > 0)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到测试保压位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.通知中控开始测试;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到测试放料位下方1:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressDumpZ")+GlobalVar.PressLowSpeedOffset;
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis )
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName()+$"到测试放料位下方1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待运动到到测试放料位下方1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待运动到到测试放料位下方1:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo =GetClassName()+ $"已运动到到测试放料位下方1 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到测试放料位下方2;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到测试放料位下方2:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressDumpZ");
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis )
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo =GetClassName()+ $"到测试放料位下方2";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
LogHelper.Debug(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待运动到到测试放料位下方2;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待运动到到测试放料位下方2:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
//获取需要放料的吸嘴
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
logInfo =GetClassName()+ $"已运动到到测试放料位下方2 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
/*打开测试穴位真空吸*/
|
|
|
VacManager.TestTrayVacSuction(EVacOperator.Open, hasProductNozzles.Select(n => n.NozzleIndex).ToArray());
|
|
|
/*关闭周转吸头真空吸*/
|
|
|
VacManager.TransitNozzleVacSuction(EVacOperator.Close, hasProductNozzles.Select(n => n.NozzleIndex).ToArray());
|
|
|
/*打开周转吸头真空破*/
|
|
|
VacManager.TransitNozzleVacBreak(EVacOperator.Open, hasProductNozzles.Select(n => n.NozzleIndex).ToArray());
|
|
|
/*关闭周转吸头真空破*/
|
|
|
VacManager.TransitNozzleVacBreak(EVacOperator.Close, hasProductNozzles.Select(n => n.NozzleIndex).ToArray());
|
|
|
Step = ETurnoverFlowStep.测试位放料完成抬起;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试位放料完成抬起:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressSafeZ");
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName()+$"测试位放料完成抬起";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待测试位放料完成抬起;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待测试位放料完成抬起:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+$"测试位放料完成抬起完成";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.测试位放料完成粘料检测;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试位放料完成粘料检测:
|
|
|
masticSlots.Clear();
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
//打开全部吸嘴的真空吸
|
|
|
VacManager.TransitNozzleVacSuction(EVacOperator.Open, hasProductNozzles.Select(n => n.NozzleIndex).ToArray());
|
|
|
foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles())
|
|
|
{
|
|
|
//nozzle.OpenVac();
|
|
|
if (nozzle.HasVacSignal() && !GlobalVar.RunSpace)
|
|
|
{
|
|
|
masticSlots.Add(nozzle.NozzleIndex);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
nozzle.CloseVac();
|
|
|
}
|
|
|
}
|
|
|
if(masticSlots.Count > 0)
|
|
|
{
|
|
|
//粘料报警
|
|
|
alarmInfo = $"周转吸头{masticSlots.ToJoinString()}号吸嘴真空异常粘料,请手工处理";
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Skip:
|
|
|
logInfo = GetClassName() + $"点击了跳过按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
foreach (int nozzleIndex in masticSlots)
|
|
|
{
|
|
|
TransitNozzle nozzle = TransitNozzleManager.Instance.Nozzle(nozzleIndex);
|
|
|
if (!nozzle.HasVacSignal())
|
|
|
{
|
|
|
nozzle.CloseVac();
|
|
|
nozzle.OpenBreak();
|
|
|
nozzle.CloseBreak();
|
|
|
nozzle.Clear();
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Yes:
|
|
|
MessageQueue.Instance.Insert(GetClassName() + $"点击了移动到安全位按钮");
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion( EExceptionSafePos.TransitNozzle);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.测试位放料完成真空检测;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试位放料完成真空检测:
|
|
|
/*检测逻辑(光纤优先原则)
|
|
|
1 先用光纤检测是否叠料,如果光纤跌料,则报警,如果光纤检测没有叠料,再用真空检测
|
|
|
2 真空检测正常则继续,真空检测异常,报真空报警
|
|
|
*/
|
|
|
foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles())
|
|
|
{
|
|
|
//先检测光纤
|
|
|
if(GlobalVar.EnableTestFixtureFiberCheck)//如果启用光纤
|
|
|
{
|
|
|
if (Ops.IsOn($"测试{nozzle.NozzleIndex}号穴位光纤检测") || GlobalVar.RunSpace)
|
|
|
{
|
|
|
bool exit = false;
|
|
|
while (!exit)
|
|
|
{
|
|
|
alarmInfo = $"测试治具{nozzle.NozzleIndex}号光纤异常,有可能叠料,请处理";
|
|
|
MessageQueue.Instance.Warn(GetClassName() + alarmInfo);
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetRetry_Skip_MoveToSafe_Button(), MessageButtonManager.GetRetry_Skip_MoveToSafe_ButtonText());
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Retry:
|
|
|
VacManager.TestTrayVacSuction(EVacOperator.Open, nozzle.NozzleIndex);
|
|
|
if (!Ops.IsOn($"测试{nozzle.NozzleIndex}号穴位光纤检测") || GlobalVar.RunSpace)
|
|
|
{
|
|
|
//GlobalTray.TestTray.ChangeStatus(nozzle.NozzleIndex, ESlotStatus.Have);
|
|
|
//TestTrayManager.Instance.Slot(nozzle.NozzleIndex).AddProduct(nozzle);
|
|
|
//nozzle.Clear();
|
|
|
exit = true;
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Skip:
|
|
|
//镭射头过来复检,有产品则继续报警,
|
|
|
if (!LaserFlow.Instance.HasProduct(ETrayType.Test, nozzle.NozzleIndex))
|
|
|
{
|
|
|
VacManager.TestTrayVacSuction(EVacOperator.Close, nozzle.NozzleIndex);
|
|
|
nozzle.Clear();
|
|
|
exit = true;
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Yes://移动到安全位
|
|
|
VacManager.TestTrayVacSuction(EVacOperator.Close, nozzle.NozzleIndex);
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion(EExceptionSafePos.Socket);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if(nozzle.IsHasProduct)
|
|
|
{
|
|
|
if (Ops.IsOn($"测试{nozzle.NozzleIndex}号穴位真空吸检测") || GlobalVar.RunSpace)
|
|
|
{
|
|
|
GlobalTray.TestTray.ChangeStatus(nozzle.NozzleIndex, ESlotStatus.Have);
|
|
|
TestTrayManager.Instance.Slot(nozzle.NozzleIndex).AddProduct(nozzle);
|
|
|
nozzle.Clear();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
bool exit = false;
|
|
|
while (!exit)
|
|
|
{
|
|
|
alarmInfo = $"测试治具{nozzle.NozzleIndex}号真空吸异常";
|
|
|
MessageQueue.Instance.Warn(GetClassName() + alarmInfo);
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetRetry_Skip_MoveToSafe_Button(), MessageButtonManager.GetRetry_Skip_MoveToSafe_ButtonText());
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Retry:
|
|
|
VacManager.TestTrayVacSuction(EVacOperator.Open, nozzle.NozzleIndex);
|
|
|
if (Ops.IsOn($"测试{nozzle.NozzleIndex}号穴位真空吸检测"))
|
|
|
{
|
|
|
GlobalTray.TestTray.ChangeStatus(nozzle.NozzleIndex, ESlotStatus.Have);
|
|
|
TestTrayManager.Instance.Slot(nozzle.NozzleIndex).AddProduct(nozzle);
|
|
|
nozzle.Clear();
|
|
|
exit = true;
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Skip:
|
|
|
//镭射头过来复检,有产品则继续报警,
|
|
|
if (!LaserFlow.Instance.HasProduct(ETrayType.Test, nozzle.NozzleIndex))
|
|
|
{
|
|
|
nozzle.Clear();
|
|
|
exit = true;
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Yes://移动到安全位
|
|
|
VacManager.TestTrayVacSuction(EVacOperator.Close, nozzle.NozzleIndex);
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion(EExceptionSafePos.Socket);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if (!turnoverTakeFinishe)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到周转盘取料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到测试保压位上方;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到测试保压位上方:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressDumpX");
|
|
|
errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if(errCode== Motion.ErrorCode.Ok|| GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressY");
|
|
|
errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到测试保压位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到测试保压位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverY, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverX, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到测试保压位上方:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if(TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Count>0)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到测试保压位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到测试保压位下方1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logInfo = GetClassName() + $"检测到测试治具中无产品需要测试";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.通知中控开始测试;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到测试保压位下方1:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressZ");
|
|
|
targetPos = targetPos + SysConfigParam.GetValue<double>("PressLowSpeedOffset");
|
|
|
errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis )
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到测试保压位下方1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到测试保压位下方1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.PressZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到测试保压位下方1:
|
|
|
if (Ops.IsStop(AxisControl.PressZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已到测试保压位下方1 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到测试保压位下方2;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case ETurnoverFlowStep.到测试保压位下方2:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressZ");
|
|
|
errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.PressLowSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到测试保压位下方2";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到测试保压位下方2;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.PressZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到测试保压位下方2:
|
|
|
if (Ops.IsStop(AxisControl.PressZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+$"已到测试保压位下方2 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
/*关闭测试穴位真空吸*/
|
|
|
List<TestTraySlot> willTestSlot = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have);
|
|
|
VacManager.TestTrayVacSuction(EVacOperator.Close, willTestSlot.Select(s => s.Index).ToArray());
|
|
|
Step = ETurnoverFlowStep.通知中控开始测试;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.通知中控开始测试:
|
|
|
MachineManage.Instance.TestStatus = ETestStatus.Testing;
|
|
|
loadOk = true;
|
|
|
HashSet<int> needTestSlot = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Select(s => s.Index-1).ToHashSet();
|
|
|
MachineManage.Instance.SetTesterState(new TesterInfo() { State = ETesterState.Ready, ReadySites = needTestSlot });
|
|
|
logInfo = GetClassName() + $"通知中控测试位就绪,可以开始测试{needTestSlot.ToJoinString()}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
//Thread.Sleep(1000 * 30);
|
|
|
Step = ETurnoverFlowStep.等待测试完成;
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待测试完成:
|
|
|
//if(MachineManage.Instance.tes)
|
|
|
if(MachineManage.Instance.TestStatus== ETestStatus.Finished)
|
|
|
{
|
|
|
|
|
|
Step = ETurnoverFlowStep.测试完成抬起到高速位;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
|
|
|
case ETurnoverFlowStep.测试完成抬起到高速位:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressZ")+GlobalVar.PressLowSpeedOffset;
|
|
|
double curPos = Ops.GetCurPosition(AxisAlias.PressZ);
|
|
|
if(Math.Abs(curPos-targetPos)<0.1)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.测试完成抬起安全位;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.PressLowSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName()+$"测试完成准备抬起";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待测试完成抬起到高速位;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.PressZ, errCode);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待测试完成抬起到高速位:
|
|
|
if (Ops.IsStop(AxisControl.PressZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+$"测试完成已抬起 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.测试完成抬起安全位;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试完成抬起安全位:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressSafeZ");
|
|
|
errCode = AxisControl.PressZ.MovePos(0, GlobalVar.WholeSpeed);
|
|
|
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"测试完成抬起安全位";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待测试完成抬起安全位;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.PressZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待测试完成抬起安全位:
|
|
|
if (Ops.IsStop(AxisControl.PressZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
//AxisControl.PressZ.Get_Target_Position(out double pos);
|
|
|
//double tpos = Ops.GetCurPosition(AxisControl.PressZ);
|
|
|
//AxisControl.PressZ.IsArrived(out bool isArrived);
|
|
|
if (Ops.IsArrived(AxisAlias.PressZ))
|
|
|
{
|
|
|
logInfo = GetClassName() + $"测试完成已抬起到安全位 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.测试完成到治具取料位上方;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试完成到治具取料位上方:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeX");
|
|
|
errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeY");
|
|
|
errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"测试完成到治具取料位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待测试完成到治具取料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverY, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverX, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待测试完成到治具取料位上方:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到治具取料位上方 TurnoverY at:{Ops.GetCurPosition(AxisAlias.TurnoverY)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待任务;
|
|
|
}
|
|
|
break;
|
|
|
//-----------------------------------------------测试位下料---------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
case ETurnoverFlowStep.到测试取料位上方:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeX");
|
|
|
errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeY");
|
|
|
errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到测试取料位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到测试取料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverY, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverX, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到测试取料位上方:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到测试取料位上方 TurnoverY at:{Ops.GetCurPosition(AxisAlias.TurnoverY)}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
if (retakeNum < 3)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到测试取料位下方1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.测试治具取料失败报警;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试治具取料失败报警:
|
|
|
//取三次之后还没有取起来的产品,这个时候需要弹框报警提示是否继续还是跳过
|
|
|
//获取还未执行完的任务
|
|
|
List<TestTraySlot> testedSlots = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have);
|
|
|
if (testedSlots != null && testedSlots.Count > 0)
|
|
|
{
|
|
|
bool exit = false;
|
|
|
while (!exit)
|
|
|
{
|
|
|
alarmInfo = GetClassName() + $"测试治具{testedSlots.Select(s => s.Index).ToJoinString()}号穴位取料失败";
|
|
|
TestCenterMessageBox.Show(AlarmConstID.TransitNozzlelTakeProductFailAlarm, alarmInfo, MessageButtonManager.GetRetry_Skip_MoveToSafe_Button(), MessageButtonManager.GetRetry_Skip_MoveToSafe_ButtonText());
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.TransitNozzlelTakeProductFailAlarm);
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Retry:
|
|
|
logInfo = GetClassName() + $"选择了重试按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
retakeNum = 0;
|
|
|
exit = true;
|
|
|
Step = ETurnoverFlowStep.到测试取料位上方;
|
|
|
break;
|
|
|
case ETipButton.Skip:
|
|
|
logInfo = GetClassName() + $"选择了跳过按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
testedSlots = testedSlots = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have);
|
|
|
foreach (TestTraySlot slot in testedSlots)
|
|
|
{
|
|
|
if (!LaserFlow.Instance.HasProduct(ETrayType.Test, slot.Index))
|
|
|
{
|
|
|
logInfo = GetClassName() + $"镭射头检测{slot.Index}号穴位无产品";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
TurnoverInfo ti = LoadAndUnloadTask.Instance.GetTestUnloadTask(slot.Index);
|
|
|
if(ti != null)
|
|
|
{
|
|
|
ti.Dealed = true;
|
|
|
}
|
|
|
slot.ClearProduct();
|
|
|
GlobalTray.TestTray.ChangeStatus(slot.Index, ESlotStatus.NotHave);
|
|
|
}
|
|
|
}
|
|
|
testedSlots = testedSlots = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have);
|
|
|
if (testedSlots == null || testedSlots.Count == 0)
|
|
|
{
|
|
|
exit = true;
|
|
|
Step = ETurnoverFlowStep.上报中控任务完成;
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Yes://移动到安全位
|
|
|
logInfo = GetClassName() + $"选择了移动到安全位按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion( EExceptionSafePos.Socket);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到测试取料位下方1:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeZ") + GlobalVar.PressLowSpeedOffset;
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到测试取料位下方1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到测试取料位下方1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到测试取料位下方1:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+ $"已运动到到测试取料位下方1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到测试取料位下方2;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到测试取料位下方2:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeZ");
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed);
|
|
|
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到测试取料位下方2";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到测试取料位下方2;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case ETurnoverFlowStep.等待到测试取料位下方2:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+$"已运动到测试取料位下方2 TurnoverZ at:{Ops.GetCurPosition("TurnoverZ")}";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
//int[] indexes = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Select(s=>s.Index).ToArray();
|
|
|
undealTasks = LoadAndUnloadTask.Instance.GetTestToTurnoverTasks(ETaskDealStatus.Undeal);
|
|
|
int[] indexes = undealTasks.Select(t => t.FromIndex + 1).ToArray();
|
|
|
/*打开周转吸头真空吸*/
|
|
|
VacManager.TransitNozzleVacSuction(EVacOperator.Open, indexes);
|
|
|
/*关闭测试穴位真空吸*/
|
|
|
VacManager.TestTrayVacSuction(EVacOperator.Close, indexes);
|
|
|
/*打开测试穴位真空破*/
|
|
|
VacManager.TestTrayVacBreak(EVacOperator.Open, indexes);
|
|
|
Step = ETurnoverFlowStep.到测试破关真空位;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到测试破关真空位:
|
|
|
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeZ")+GlobalVar.PressLowSpeedOffset;
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+ $"到测试破关真空位";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
Step = ETurnoverFlowStep.等待到测试关破真空位;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到测试关破真空位:
|
|
|
if(Ops.IsStop(AxisAlias.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+$"已运动到测试关破真空位";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
undealTasks = LoadAndUnloadTask.Instance.GetTestToTurnoverTasks(ETaskDealStatus.Undeal);
|
|
|
/*关闭测试穴位真空破*/
|
|
|
VacManager.TestTrayVacBreak(EVacOperator.Close, undealTasks.Select(t => t.FromIndex + 1).ToArray());
|
|
|
Step = ETurnoverFlowStep.测试位取料完成抬起;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试位取料完成抬起:
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressSafeZ");
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if(errCode== Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo =GetClassName()+ $"测试位取料完成抬起";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待测试位取料完成抬起;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待测试位取料完成抬起:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo =GetClassName()+ $"测试位取料完成已抬起";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.测试位取料完成后真空检测;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.测试位取料完成后真空检测:
|
|
|
/*
|
|
|
测试位取料完成真空检测,只要有吸嘴上有产品,就先把产品放到周转盘中
|
|
|
*/
|
|
|
undealTasks = LoadAndUnloadTask.Instance.GetTestToTurnoverTasks(ETaskDealStatus.Undeal);
|
|
|
if(undealTasks != null && undealTasks.Count>0)
|
|
|
{
|
|
|
foreach (TurnoverInfo task in undealTasks)
|
|
|
{
|
|
|
TestTraySlot testSlot = TestTrayManager.Instance.Slot(task.FromIndex + 1);
|
|
|
if (Ops.IsOn($"周转{task.FromIndex + 1}号吸嘴真空吸检测") || GlobalVar.VirtualAxis || GlobalVar.RunSpace)
|
|
|
{
|
|
|
testSlot.ClearProduct();
|
|
|
task.Dealed = true;
|
|
|
TransitNozzleManager.Instance.Nozzle(task.FromIndex + 1).AddProduct(task);
|
|
|
GlobalTray.TestTray.ChangeStatus(task.FromIndex + 1, ESlotStatus.NotHave);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Count == 0)
|
|
|
{
|
|
|
MachineManage.Instance.SetTesterState(new TesterInfo() { State = ETesterState.NotReady, ReadySites = null });
|
|
|
logInfo = GetClassName() + "通知中控产品全部已从治具中取出,状态变成NotReady";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
if (hasProductNozzles.Count > 0 || GlobalVar.RunSpace || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到周转盘放料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.上报中控任务完成;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
if (hasProductNozzles.Count > 0 || GlobalVar.RunSpace || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到周转盘放料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
retakeNum++;
|
|
|
Step = ETurnoverFlowStep.到测试取料位上方;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到周转盘放料位上方:
|
|
|
if(CanGoTurnoverTrayPos())
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverDumpX");
|
|
|
errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverDumpY");
|
|
|
errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到周转盘放料位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到周转盘放料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverY, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverX, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Msg.ShowError("turnovery axis move is unsafe");
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到周转盘放料位上方:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverY) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到周转盘放料位上方";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.周转盘放料前丢料检测;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.周转盘放料前丢料检测:
|
|
|
if(!GlobalVar.RunSpace)
|
|
|
{
|
|
|
loseSlots.Clear();
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
if (hasProductNozzles != null && hasProductNozzles.Count > 0)
|
|
|
{
|
|
|
foreach (var nozzle in hasProductNozzles.ToArray())
|
|
|
{
|
|
|
if (!nozzle.HasVacSignal())
|
|
|
{
|
|
|
loseSlots.Add(nozzle.NozzleIndex);
|
|
|
}
|
|
|
}
|
|
|
if (loseSlots.Count > 0)
|
|
|
{
|
|
|
bool exit = false;
|
|
|
while (!exit)
|
|
|
{
|
|
|
alarmInfo = $"周转{loseSlots.ToJoinString()}号吸嘴真空异常丢料,请处理";
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Skip:
|
|
|
logInfo = GetClassName() + $"点击了跳过按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
foreach (var slotIndex in loseSlots)
|
|
|
{
|
|
|
TransitNozzle nozzle = TransitNozzleManager.Instance.Nozzle(slotIndex);
|
|
|
//关闭吸嘴的真空吸
|
|
|
nozzle.CloseVac();
|
|
|
//打开吸嘴的真空破
|
|
|
nozzle.OpenBreak();
|
|
|
//关闭吸嘴的真空破
|
|
|
nozzle.CloseBreak();
|
|
|
//清空吸嘴上的产品
|
|
|
nozzle.Clear();
|
|
|
}
|
|
|
exit = true;
|
|
|
//循环退出,重新检测一下粘料
|
|
|
Step = ETurnoverFlowStep.到周转盘放料位上方;
|
|
|
break;
|
|
|
case ETipButton.Yes:
|
|
|
logInfo = GetClassName() + $"点击了移动到安全位按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion(EExceptionSafePos.TransitNozzle);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到周转盘放料位下方1;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//这里再次判断治具中是否还有产品未取出,如果都已取出,则到安全位,如果还有产品,则到治具位上放取料
|
|
|
if (TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Count > 0)
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到测试取料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到安全位;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到周转盘放料位下方1;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到周转盘放料位下方1:
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset;
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos+1, GlobalVar.WholeSpeed);
|
|
|
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到周转盘放料位下方1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到周转盘放料位下方1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到周转盘放料位下方1:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到周转盘放料位下方1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.到周转盘放料位下方2;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case ETurnoverFlowStep.到周转盘放料位下方2:
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeZ");
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"到周转盘放料位下方2";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到周转盘放料位下方2;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到周转盘放料位下方2:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"已运动到周转盘放料位下方2";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
/*打开周转盘真空吸*/
|
|
|
VacManager.TurnoverTrayVacSuction(EVacOperator.Open, hasProductNozzles.Select(n => n.ToIndex+1).ToArray());
|
|
|
/*关闭周转吸头真空吸*/
|
|
|
VacManager.TransitNozzleVacSuction( EVacOperator.Close,hasProductNozzles.Select(n=>n.FromIndex + 1).ToArray());
|
|
|
/*打开周转吸头真空破*/
|
|
|
VacManager.TransitNozzleVacBreak(EVacOperator.Open, hasProductNozzles.Select(n => n.FromIndex + 1).ToArray());
|
|
|
Step = ETurnoverFlowStep.周转盘放料完成抬起1;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case ETurnoverFlowStep.周转盘放料完成抬起1:
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset;
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed);
|
|
|
if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"周转盘放料完成准备抬起1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待周转盘放料完成抬起1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待周转盘放料完成抬起1:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
/*关闭周转吸头真空破*/
|
|
|
VacManager.TransitNozzleVacBreak(EVacOperator.Close, hasProductNozzles.Select(n => n.FromIndex + 1).ToArray());
|
|
|
logInfo = GetClassName() + $"周转盘放料完成已抬起1";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.周转盘放料完成抬起2;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.周转盘放料完成抬起2:
|
|
|
targetPos = SysConfigParam.GetValue<double>("TurnoverSafeZ");
|
|
|
errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"周转盘放料完成准备抬起2";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待周转盘放料完成抬起2;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode);
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待周转盘放料完成抬起2:
|
|
|
if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName() + $"周转盘放料完成已抬起2";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.周转盘放料完成粘料检测;
|
|
|
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.周转盘放料完成粘料检测:
|
|
|
masticSlots.Clear();
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
VacManager.TransitNozzleVacSuction(EVacOperator.Open, hasProductNozzles.Select(n => n.NozzleIndex).ToArray());
|
|
|
foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles())
|
|
|
{
|
|
|
//nozzle.OpenVac();
|
|
|
if (nozzle.HasVacSignal() && !GlobalVar.RunSpace)
|
|
|
{
|
|
|
masticSlots.Add(nozzle.NozzleIndex);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
nozzle.CloseVac();
|
|
|
}
|
|
|
}
|
|
|
if (masticSlots.Count > 0)
|
|
|
{
|
|
|
//粘料报警
|
|
|
bool exit = false;
|
|
|
while (!exit)
|
|
|
{
|
|
|
alarmInfo = $"周转{masticSlots.ToJoinString()}号吸嘴真空异常粘料,请手工处理";
|
|
|
MessageQueue.Instance.Warn(GetClassName()+ alarmInfo);
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Skip:
|
|
|
logInfo = GetClassName() + "点击了跳过按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
foreach (int nozzleIndex in masticSlots.ToArray())
|
|
|
{
|
|
|
TransitNozzle nozzle = TransitNozzleManager.Instance.Nozzle(nozzleIndex);
|
|
|
if (!nozzle.HasVacSignal())
|
|
|
{
|
|
|
nozzle.CloseVac();
|
|
|
nozzle.OpenBreak();
|
|
|
nozzle.CloseBreak();
|
|
|
nozzle.Clear();
|
|
|
masticSlots.Remove(nozzleIndex);
|
|
|
}
|
|
|
}
|
|
|
if(masticSlots.Count==0)
|
|
|
{
|
|
|
exit = true;
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Yes:
|
|
|
logInfo = GetClassName() + "点击了移动到安全位按钮";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion( EExceptionSafePos.TransitNozzle);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.周转盘放料完成后真空检测;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
case ETurnoverFlowStep.周转盘放料完成后真空检测:
|
|
|
hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
|
|
|
if (hasProductNozzles != null&&hasProductNozzles.Count>0)
|
|
|
{
|
|
|
foreach (var nozzle in hasProductNozzles)
|
|
|
{
|
|
|
TurnoverTraySlot slot = TurnoverTrayManager.Instance.Slot(nozzle.ToIndex + 1);
|
|
|
//GlobalTray.TurnoverTray.ChangeStatus(nozzle.ToIndex, ESlotStatus.Have);
|
|
|
//TurnoverTrayManager.Instance.Slot(nozzle.ToIndex).AddProduct(nozzle.SN, nozzle.NozzleIndex, TurnoverType.Turnover, nozzle.NozzleIndex);
|
|
|
if (slot.HasVac() || GlobalVar.VirtualAxis || GlobalVar.RunSpace)
|
|
|
{
|
|
|
slot.AddProduct(nozzle);
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.Have);
|
|
|
slot.VacException = false;
|
|
|
nozzle.Clear();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//1 退到安全位
|
|
|
TransitModuleSafePosFlow.Instance.GoSafePostion( EExceptionSafePos.Socket);
|
|
|
//2 排料轴上相机过来检测
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanSingle(slot.Index, true);
|
|
|
VisionResult vr = UpCameraScanBarCodeFlow.Instance.WaitSingle();
|
|
|
if (!UpCameraScanBarCodeFlow.Instance.CheckResult(vr))//如果不在穴位中,就弹框报警
|
|
|
{
|
|
|
bool exit = false;
|
|
|
while (!exit)
|
|
|
{
|
|
|
alarmInfo = $"周转盘{slot.Index}号穴位真空吸异常,请选择处理";
|
|
|
msgBox = MsgBox.ShowDialog(AlarmConstID.TurnoverDumpFailAlarm, alarmInfo, MessageButtonManager.GetRetry_Skip_MoveToSafe_Button(), MessageButtonManager.GetRetry_Skip_MoveToSafe_ButtonText());
|
|
|
switch (msgBox.Button)
|
|
|
{
|
|
|
case ETipButton.Retry:
|
|
|
logInfo = GetClassName() + "选择了重试";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
UpCameraScanBarCodeFlow.Instance.ScanSingle(slot.Index, true);
|
|
|
vr = UpCameraScanBarCodeFlow.Instance.WaitSingle();
|
|
|
if(UpCameraScanBarCodeFlow.Instance.CheckResult(vr))
|
|
|
{
|
|
|
slot.AddProduct(nozzle);
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.Have);
|
|
|
slot.VacException = false;
|
|
|
nozzle.Clear();
|
|
|
exit = true;
|
|
|
}
|
|
|
break;
|
|
|
case ETipButton.Skip:
|
|
|
logInfo = GetClassName() + "选择了跳过";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
if(GlobalVar.EnableExceptionHandlingNozzle)//启用大力吸嘴
|
|
|
{
|
|
|
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
|
|
|
WarningSuckerNgFlow.Instance.DealNgProduct(ETrayType.Turnover, slot.Index);
|
|
|
nozzle.Clear();
|
|
|
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, slot.Index);
|
|
|
exit = true;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//检测穴位中还是否有料
|
|
|
if (!UpCameraCheckFlow.Instance.CheckTurnoverTrayHasProduct(null, slot.Index, true))
|
|
|
{
|
|
|
nozzle.Clear();
|
|
|
VacManager.TurnoverTrayVacSuction(EVacOperator.Close, slot.Index);
|
|
|
exit = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
case ETipButton.Yes:
|
|
|
logInfo = GetClassName() + "选择了移动到安全位";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
slot.AddProduct(nozzle);
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(slot.Index, ESlotStatus.Have);
|
|
|
slot.VacException = false;
|
|
|
nozzle.Clear();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//排料轴回安全位
|
|
|
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
|
|
|
//检测治具盘中是否还有待取的料,如果有继续取,如果没有回安全位
|
|
|
if (TestTrayManager.Instance.GetSlots( ETestTraySlotStatus.Have).Count>0)
|
|
|
{
|
|
|
retakeNum++;
|
|
|
Step = ETurnoverFlowStep.到测试取料位上方;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Step = ETurnoverFlowStep.到安全位;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.周转盘放料真空异常处理:
|
|
|
{
|
|
|
if(GlobalVar.EnableExceptionHandlingNozzle)
|
|
|
{
|
|
|
List<TurnoverTraySlot> vacExceptionSlots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.Tested, ETurnoverTraySlotStatus.VacException);
|
|
|
if (vacExceptionSlots != null && vacExceptionSlots.Count > 0)
|
|
|
{
|
|
|
|
|
|
foreach (TurnoverTraySlot slot in vacExceptionSlots)
|
|
|
{
|
|
|
//通知大力吸嘴过来取料,如果取成功了,就把当前穴位的产品删除
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.到安全位:
|
|
|
MachineManage.Instance.TestStatus = ETestStatus.Idle;
|
|
|
//这里判断周转载盘还有没有待测的产品,如果有就不动,如果没有就退到安全位
|
|
|
List<TurnoverTraySlot> hasProductSlots= TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have);
|
|
|
if (hasProductSlots.Count > 0)
|
|
|
{
|
|
|
logInfo =GetClassName()+ $"周转盘{hasProductSlots.Select(s=>s.Index).ToJoinString()}穴位中有待测产品,就地等待周转盘取料指令";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.上报中控任务完成;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeX");
|
|
|
errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
targetPos = SysConfigParam.GetValue<double>("PressTakeY");
|
|
|
errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed);
|
|
|
if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
if (GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
Thread.Sleep(GlobalVar.VirtualAxisMoveTime);
|
|
|
}
|
|
|
logInfo = GetClassName() + $"周转吸头下料完成到安全位";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.等待到安全位;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverY, errCode);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverX, errCode);
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.等待到安全位:
|
|
|
if(Ops.IsStop("TurnoverX","TurnoverY") || GlobalVar.VirtualAxis)
|
|
|
{
|
|
|
logInfo = GetClassName()+$"已运动到安全位,任务结束";
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
Step = ETurnoverFlowStep.上报中控任务完成;
|
|
|
}
|
|
|
break;
|
|
|
case ETurnoverFlowStep.上报中控任务完成:
|
|
|
unloadOk = true;
|
|
|
TestCenter.Instance.LoadTestUnLoadResult();
|
|
|
LoadAndUnloadTask.Instance.Clear(1);
|
|
|
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
|
|
|
Step = ETurnoverFlowStep.等待任务;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public bool LoadFinished()
|
|
|
{
|
|
|
return loadOk;
|
|
|
}
|
|
|
|
|
|
public bool UnloadFinished()
|
|
|
{ return unloadOk; }
|
|
|
|
|
|
|
|
|
public string GetStep()
|
|
|
{
|
|
|
return Step.ToString();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 检测周转Y轴是否可以到周转盘位置
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
private bool CanGoTurnoverTrayPos()
|
|
|
{
|
|
|
double curPos = Ops.GetCurPosition(AxisControl.LoadY);
|
|
|
if(Math.Abs(GlobalVar.LoadYStartPos-curPos)<0.5)
|
|
|
{
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|