优化丢料检测

修改周转盘初始化时序号错误的问题
master
lhiven 2 years ago
parent ca92b46256
commit fd901f4685

@ -54,20 +54,22 @@ namespace Rs.MotionPlat.Entitys.Trays
private TurnoverTrayManager() {
slots = new TurnoverTraySlot[32];
int index = 0;
for(int row=1;row<=4;row++)
{
for(int col=1;col<=8;col++)
{
slots[row*col-1] = new TurnoverTraySlot()
slots[index] = new TurnoverTraySlot()
{
Row = row,
Index = row * col,
Index = index+1,
IsHasProduct = false,
SN = "",
FromIndex = 0,
SuckerNo = 0,
SlotType = (row%2==0) ? ETurnoverTraySlotType.Tested : ETurnoverTraySlotType.WaitTest
};
index++;
}
}
}

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

@ -453,6 +453,12 @@ namespace Rs.MotionPlat.Flow
}
break;
case ETurnoverFlowStep.:
if(GlobalVar.VirtualAxis || GlobalVar.RunSpace)
{
Step = ETurnoverFlowStep.1;
}
else
{
loseSlots.Clear();
//检测是否丢料
foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles())
@ -465,7 +471,7 @@ namespace Rs.MotionPlat.Flow
if (loseSlots.Count > 0)
{
alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理";
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo,MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
switch (msgBox.Button)
{
@ -486,6 +492,7 @@ namespace Rs.MotionPlat.Flow
MessageQueue.Instance.Insert(logInfo);
Step = ETurnoverFlowStep.1;
}
}
break;
case ETurnoverFlowStep.1:
@ -1063,6 +1070,12 @@ namespace Rs.MotionPlat.Flow
}
break;
case ETurnoverFlowStep.:
{
if(GlobalVar.VirtualAxis|| GlobalVar.RunSpace)
{
Step = ETurnoverFlowStep.1;
}
else
{
loseSlots.Clear();
List<TransitNozzle> hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
@ -1099,7 +1112,8 @@ namespace Rs.MotionPlat.Flow
}
else
{
Step = ETurnoverFlowStep.1;
Step = ETurnoverFlowStep.1;
}
}
}
break;

Loading…
Cancel
Save