优化丢料检测

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

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

@ -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);

@ -453,38 +453,45 @@ namespace Rs.MotionPlat.Flow
} }
break; break;
case ETurnoverFlowStep.: case ETurnoverFlowStep.:
loseSlots.Clear(); if(GlobalVar.VirtualAxis || GlobalVar.RunSpace)
//检测是否丢料
foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles())
{ {
if (!nozzle.HasVacSignal()) Step = ETurnoverFlowStep.1;
{
loseSlots.Add(nozzle.NozzleIndex);
}
} }
if (loseSlots.Count > 0) else
{ {
alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理"; loseSlots.Clear();
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo,MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText()); //检测是否丢料
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm); foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles())
switch (msgBox.Button)
{ {
case ETipButton.Skip: if (!nozzle.HasVacSignal())
MessageQueue.Instance.Insert($"{nameof(TurnoverFlow)}-点击了跳过按钮"); {
break; loseSlots.Add(nozzle.NozzleIndex);
case ETipButton.Yes: }
MessageQueue.Instance.Insert($"{nameof(TurnoverFlow)}-点击了移动到安全位按钮"); }
TransitModuleSafePosFlow.Instance.GoSafePostion(); if (loseSlots.Count > 0)
break; {
default: alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理";
break; TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
switch (msgBox.Button)
{
case ETipButton.Skip:
MessageQueue.Instance.Insert($"{nameof(TurnoverFlow)}-点击了跳过按钮");
break;
case ETipButton.Yes:
MessageQueue.Instance.Insert($"{nameof(TurnoverFlow)}-点击了移动到安全位按钮");
TransitModuleSafePosFlow.Instance.GoSafePostion();
break;
default:
break;
}
}
else
{
logInfo = $"已运动到测试放料位上方";
MessageQueue.Instance.Insert(logInfo);
Step = ETurnoverFlowStep.1;
} }
}
else
{
logInfo = $"已运动到测试放料位上方";
MessageQueue.Instance.Insert(logInfo);
Step = ETurnoverFlowStep.1;
} }
break; break;
@ -1064,42 +1071,49 @@ namespace Rs.MotionPlat.Flow
break; break;
case ETurnoverFlowStep.: case ETurnoverFlowStep.:
{ {
loseSlots.Clear(); if(GlobalVar.VirtualAxis|| GlobalVar.RunSpace)
List<TransitNozzle> hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
foreach (var nozzle in hasProductNozzles.ToArray())
{ {
if (!nozzle.HasVacSignal()) Step = ETurnoverFlowStep.1;
{
loseSlots.Add(nozzle.NozzleIndex);
}
} }
if (loseSlots.Count > 0) else
{ {
alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理"; loseSlots.Clear();
TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText()); List<TransitNozzle> hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles();
msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm); foreach (var nozzle in hasProductNozzles.ToArray())
switch (msgBox.Button)
{ {
case ETipButton.Skip: if (!nozzle.HasVacSignal())
logInfo = GetClassName() + $"点击了跳过按钮"; {
MessageQueue.Instance.Insert(logInfo); loseSlots.Add(nozzle.NozzleIndex);
foreach (var item in loseSlots) }
{ }
TransitNozzleManager.Instance.Nozzle(item).IsHasProduct = false; if (loseSlots.Count > 0)
} {
break; alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理";
case ETipButton.Yes: TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText());
logInfo = GetClassName() + $"点击了移动到安全位按钮"; msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm);
MessageQueue.Instance.Insert(logInfo); switch (msgBox.Button)
TransitModuleSafePosFlow.Instance.GoSafePostion(); {
break; case ETipButton.Skip:
default: logInfo = GetClassName() + $"点击了跳过按钮";
break; MessageQueue.Instance.Insert(logInfo);
foreach (var item in loseSlots)
{
TransitNozzleManager.Instance.Nozzle(item).IsHasProduct = false;
}
break;
case ETipButton.Yes:
logInfo = GetClassName() + $"点击了移动到安全位按钮";
MessageQueue.Instance.Insert(logInfo);
TransitModuleSafePosFlow.Instance.GoSafePostion();
break;
default:
break;
}
}
else
{
Step = ETurnoverFlowStep.1;
} }
}
else
{
Step = ETurnoverFlowStep.1;
} }
} }
break; break;

Loading…
Cancel
Save