|
|
@ -924,44 +924,66 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
case EDischargeFlowStep.等待到放料位上方:
|
|
|
|
case EDischargeFlowStep.等待到放料位上方:
|
|
|
|
if (Ops.IsStop("LoadX", "LoadY",$"NozzleR{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis)
|
|
|
|
if (Ops.IsStop("LoadX", "LoadY",$"NozzleR{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
logInfo = $"{nameof(DischargeFlow)}-{curNozzle.NozzleIndex}号排料吸嘴已运动到放料位上方";
|
|
|
|
logInfo = GetClassName()+$"{curNozzle.NozzleIndex}号排料吸嘴已运动到放料位上方";
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
flowStep = EDischargeFlowStep.丢料检测;
|
|
|
|
flowStep = EDischargeFlowStep.丢料检测;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case EDischargeFlowStep.丢料检测:
|
|
|
|
case EDischargeFlowStep.丢料检测:
|
|
|
|
//获取所有需要放料的吸嘴,检测真空是否还在,如果真空异常则报警
|
|
|
|
if (GlobalVar.RunSpace || GlobalVar.VirtualAxis)
|
|
|
|
List<Nozzle> lostNozzles = new List<Nozzle>();
|
|
|
|
|
|
|
|
List<Nozzle> toUnloadNozzles = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload);
|
|
|
|
|
|
|
|
foreach (var nozzle in toUnloadNozzles)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(!nozzle.HasProduct())
|
|
|
|
flowStep = EDischargeFlowStep.到放料位下方;
|
|
|
|
{
|
|
|
|
|
|
|
|
lostNozzles.Add(nozzle);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(lostNozzles.Count>0)
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
//弹框报警
|
|
|
|
//获取所有需要放料的吸嘴,检测真空是否还在,如果真空异常则报警
|
|
|
|
alarmInfo = $"{lostNozzles.Select(ln=>ln.NozzleIndex).ToJoinString()}丢料报警";
|
|
|
|
List<Nozzle> lostNozzles = new List<Nozzle>();
|
|
|
|
TestCenterMessageBox.Show(AlarmConstID.DischargeNozzleLostProductAlarm,alarmInfo,MessageButtonManager.GetSkip_MoveToSafe_Button(),MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
|
List<Nozzle> toUnloadNozzles = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload);
|
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.DischargeNozzleLostProductAlarm);
|
|
|
|
if (toUnloadNozzles.Count > 0)
|
|
|
|
switch (msgBox.Button)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case ETipButton.Skip:
|
|
|
|
|
|
|
|
lostNozzles.ForEach(ln => ln.Reset());
|
|
|
|
foreach (var nozzle in toUnloadNozzles)
|
|
|
|
break;
|
|
|
|
{
|
|
|
|
case ETipButton.Yes:
|
|
|
|
if (!nozzle.HasProduct())
|
|
|
|
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
lostNozzles.Add(nozzle);
|
|
|
|
default:
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lostNozzles.Count > 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
bool bSkip = false;
|
|
|
|
|
|
|
|
while (!bSkip)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
//弹框报警
|
|
|
|
|
|
|
|
alarmInfo = $"检测到{lostNozzles.Select(ln => ln.NozzleIndex).ToJoinString()}吸嘴真空吸异常,可能丢料,请检查吸嘴的状态";
|
|
|
|
|
|
|
|
TestCenterMessageBox.Show(AlarmConstID.DischargeNozzleLostProductAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
|
|
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.DischargeNozzleLostProductAlarm);
|
|
|
|
|
|
|
|
switch (msgBox.Button)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
case ETipButton.Skip:
|
|
|
|
|
|
|
|
bSkip = true;
|
|
|
|
|
|
|
|
lostNozzles.ForEach(ln => ln.Reset());
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ETipButton.Yes:
|
|
|
|
|
|
|
|
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
flowStep = EDischargeFlowStep.到放料位下方;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
flowStep = EDischargeFlowStep.放料任务完成;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
flowStep = EDischargeFlowStep.到放料位下方;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
//case EDischargeFlowStep.到放料位下方:
|
|
|
|
//case EDischargeFlowStep.到放料位下方:
|
|
|
|
// DischargeDumpFlow.Instance.Start(curNozzle.ToType, curNozzle.NozzleIndex, curNozzle.ToIndex);
|
|
|
|
// DischargeDumpFlow.Instance.Start(curNozzle.ToType, curNozzle.NozzleIndex, curNozzle.ToIndex);
|
|
|
@ -1090,24 +1112,29 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
curNozzle.VacSuction(EIoOperate.Open);
|
|
|
|
curNozzle.VacSuction(EIoOperate.Open);
|
|
|
|
if(curNozzle.HasProduct())
|
|
|
|
if(curNozzle.HasProduct())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
//粘料报警,提示用户粘料,移动到安全位,或者点击跳过
|
|
|
|
bool skip = false;
|
|
|
|
alarmInfo = $"{curNozzle.NozzleIndex}号吸嘴可能粘料,请查看吸嘴状态后处理";
|
|
|
|
while(!skip)
|
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzleTackinessAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
|
|
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzleTackinessAlarm);
|
|
|
|
|
|
|
|
switch (msgBox.Button)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
case ETipButton.Skip:
|
|
|
|
//粘料报警,提示用户粘料,移动到安全位,或者点击跳过
|
|
|
|
logInfo =GetClassName()+ "选择了跳过按钮";
|
|
|
|
alarmInfo = $"{curNozzle.NozzleIndex}号吸嘴可能粘料,请查看吸嘴状态后处理";
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzleTackinessAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
|
break;
|
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzleTackinessAlarm);
|
|
|
|
case ETipButton.Yes:
|
|
|
|
switch (msgBox.Button)
|
|
|
|
logInfo = GetClassName() + "选择了移动到安全位按钮";
|
|
|
|
{
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
case ETipButton.Skip:
|
|
|
|
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
|
|
|
|
curNozzle.Reset();
|
|
|
|
TestCenterMessageBox.Show(AlarmConstID.NozzleTackinessAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
|
|
|
|
skip = true;
|
|
|
|
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzleTackinessAlarm);
|
|
|
|
logInfo = GetClassName() + "选择了跳过按钮";
|
|
|
|
break;
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ETipButton.Yes:
|
|
|
|
|
|
|
|
logInfo = GetClassName() + "选择了移动到安全位按钮";
|
|
|
|
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
|
|
|
|
DischargeModuleGoSafePosFlow.Instance.GoSafePostion();
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -1202,37 +1229,41 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
//AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").Home();
|
|
|
|
//AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").Home();
|
|
|
|
//MessageQueue.Instance.Insert($"{curNozzle.NozzleIndex}号排料吸嘴回原");
|
|
|
|
//MessageQueue.Instance.Insert($"{curNozzle.NozzleIndex}号排料吸嘴回原");
|
|
|
|
//Ops.HomeAndGoStartPos($"NozzleR{NozzleIndex}");
|
|
|
|
//Ops.HomeAndGoStartPos($"NozzleR{NozzleIndex}");
|
|
|
|
if (curNozzle.ToType == TurnoverType.Turnover)
|
|
|
|
if (curNozzle.Status == ENozzleStatus.ToUnload)
|
|
|
|
{
|
|
|
|
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(curNozzle.ToIndex + 1, ESlotStatus.Have);
|
|
|
|
|
|
|
|
TurnoverTrayManager.Instance.Slot(curNozzle.ToIndex + 1).AddProduct(curNozzle);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.ToBeTested)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
curNozzle.ToIndex = downSlot.Index-1;
|
|
|
|
|
|
|
|
curNozzle.ToFloor = StockManager.Instance.GetStock(ETrayType.Input).GetFloor();
|
|
|
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(downSlot.Index, ESlotStatus.Have);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Passed)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
curNozzle.ToIndex = downSlot.Index-1;
|
|
|
|
|
|
|
|
curNozzle.ToFloor = StockManager.Instance.GetStock(ETrayType.Ok).GetFloor();
|
|
|
|
|
|
|
|
GlobalTray.OkTary.ChangeStatus(downSlot.Index, ESlotStatus.Ok);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Failed)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
curNozzle.ToIndex = downSlot.Index-1;
|
|
|
|
if (curNozzle.ToType == TurnoverType.Turnover)
|
|
|
|
curNozzle.ToFloor = StockManager.Instance.GetStock(ETrayType.Ng).GetFloor();
|
|
|
|
{
|
|
|
|
GlobalTray.NgTray.ChangeStatus(downSlot.Index, ESlotStatus.Ng);
|
|
|
|
GlobalTray.TurnoverTray.ChangeStatus(curNozzle.ToIndex + 1, ESlotStatus.Have);
|
|
|
|
}
|
|
|
|
TurnoverTrayManager.Instance.Slot(curNozzle.ToIndex + 1).AddProduct(curNozzle);
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Multifunction)
|
|
|
|
|
|
|
|
{
|
|
|
|
}
|
|
|
|
curNozzle.ToIndex = downSlot.Index-1;
|
|
|
|
else if (curNozzle.ToType == TurnoverType.ToBeTested)
|
|
|
|
curNozzle.ToFloor = StockManager.Instance.GetStock(ETrayType.Multi).GetFloor();
|
|
|
|
{
|
|
|
|
GlobalTray.MultiTray.ChangeStatus(downSlot.Index, ESlotStatus.Have);
|
|
|
|
curNozzle.ToIndex = downSlot.Index - 1;
|
|
|
|
|
|
|
|
curNozzle.ToFloor = StockManager.Instance.GetStock(ETrayType.Input).GetFloor();
|
|
|
|
|
|
|
|
GlobalTray.InputTray.ChangeStatus(downSlot.Index, ESlotStatus.Have);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Passed)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
curNozzle.ToIndex = downSlot.Index - 1;
|
|
|
|
|
|
|
|
curNozzle.ToFloor = StockManager.Instance.GetStock(ETrayType.Ok).GetFloor();
|
|
|
|
|
|
|
|
GlobalTray.OkTary.ChangeStatus(downSlot.Index, ESlotStatus.Ok);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Failed)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
curNozzle.ToIndex = downSlot.Index - 1;
|
|
|
|
|
|
|
|
curNozzle.ToFloor = StockManager.Instance.GetStock(ETrayType.Ng).GetFloor();
|
|
|
|
|
|
|
|
GlobalTray.NgTray.ChangeStatus(downSlot.Index, ESlotStatus.Ng);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (curNozzle.ToType == TurnoverType.Multifunction)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
curNozzle.ToIndex = downSlot.Index - 1;
|
|
|
|
|
|
|
|
curNozzle.ToFloor = StockManager.Instance.GetStock(ETrayType.Multi).GetFloor();
|
|
|
|
|
|
|
|
GlobalTray.MultiTray.ChangeStatus(downSlot.Index, ESlotStatus.Have);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
LoadAndUnloadTask.Instance.AddTurnoverResult(curNozzle);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
curNozzle.Reset();
|
|
|
|
curNozzle.Reset();
|
|
|
|
LoadAndUnloadTask.Instance.AddTurnoverResult(curNozzle);
|
|
|
|
|
|
|
|
if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count > 0)
|
|
|
|
if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count > 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
flowStep = EDischargeFlowStep.到放料位上方;
|
|
|
|
flowStep = EDischargeFlowStep.到放料位上方;
|
|
|
@ -1310,14 +1341,14 @@ namespace Rs.MotionPlat.Flow
|
|
|
|
case EDischargeFlowStep.等待任务结束到安全位:
|
|
|
|
case EDischargeFlowStep.等待任务结束到安全位:
|
|
|
|
if(Ops.IsStop("LoadX", "LoadY") || GlobalVar.VirtualAxis)
|
|
|
|
if(Ops.IsStop("LoadX", "LoadY") || GlobalVar.VirtualAxis)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
logInfo = $"{nameof(DischargeFlow)}-任务结束已回到安全位";
|
|
|
|
logInfo = GetClassName()+ $"任务结束已回到安全位";
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
if (TestCenter.Instance.LoadResult())
|
|
|
|
if (TestCenter.Instance.LoadResult())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
logInfo = $"{nameof(DischargeFlow)}-通知中控任务完成";
|
|
|
|
logInfo = GetClassName()+ $"通知中控任务完成";
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
LoadAndUnloadTask.Instance.Clear();
|
|
|
|
LoadAndUnloadTask.Instance.Clear();
|
|
|
|
logInfo = $"{nameof(DischargeFlow)}-任务完成,清除任务";
|
|
|
|
logInfo = GetClassName()+$"任务完成,清除任务";
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
MessageQueue.Instance.Insert(logInfo);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
|
|
|
|
MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting);
|
|
|
|