diff --git a/Rs.SkyLine/Entitys/Trays/TurnoverTrayManager.cs b/Rs.SkyLine/Entitys/Trays/TurnoverTrayManager.cs index 0815a73..15da153 100644 --- a/Rs.SkyLine/Entitys/Trays/TurnoverTrayManager.cs +++ b/Rs.SkyLine/Entitys/Trays/TurnoverTrayManager.cs @@ -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++; } } } diff --git a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs index 3cb3b2e..d3e4bac 100644 --- a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs @@ -924,44 +924,66 @@ 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.丢料检测: - //获取所有需要放料的吸嘴,检测真空是否还在,如果真空异常则报警 - List lostNozzles = new List(); - List toUnloadNozzles = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload); - foreach (var nozzle in toUnloadNozzles) + if (GlobalVar.RunSpace || GlobalVar.VirtualAxis) { - if(!nozzle.HasProduct()) - { - lostNozzles.Add(nozzle); - } + flowStep = EDischargeFlowStep.到放料位下方; } - if(lostNozzles.Count>0) + else { - //弹框报警 - 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) + //获取所有需要放料的吸嘴,检测真空是否还在,如果真空异常则报警 + List lostNozzles = new List(); + List toUnloadNozzles = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload); + if (toUnloadNozzles.Count > 0) { - case ETipButton.Skip: - lostNozzles.ForEach(ln => ln.Reset()); - break; - case ETipButton.Yes: - DischargeModuleGoSafePosFlow.Instance.GoSafePostion(); - break; - default: - break; + + foreach (var nozzle in toUnloadNozzles) + { + if (!nozzle.HasProduct()) + { + lostNozzles.Add(nozzle); + } + } + 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; //case EDischargeFlowStep.到放料位下方: // DischargeDumpFlow.Instance.Start(curNozzle.ToType, curNozzle.NozzleIndex, curNozzle.ToIndex); @@ -1090,24 +1112,29 @@ namespace Rs.MotionPlat.Flow curNozzle.VacSuction(EIoOperate.Open); if(curNozzle.HasProduct()) { - //粘料报警,提示用户粘料,移动到安全位,或者点击跳过 - alarmInfo = $"{curNozzle.NozzleIndex}号吸嘴可能粘料,请查看吸嘴状态后处理"; - TestCenterMessageBox.Show(AlarmConstID.NozzleTackinessAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText()); - msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzleTackinessAlarm); - switch (msgBox.Button) + bool skip = false; + while(!skip) { - case ETipButton.Skip: - 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; + //粘料报警,提示用户粘料,移动到安全位,或者点击跳过 + alarmInfo = $"{curNozzle.NozzleIndex}号吸嘴可能粘料,请查看吸嘴状态后处理"; + TestCenterMessageBox.Show(AlarmConstID.NozzleTackinessAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText()); + msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzleTackinessAlarm); + switch (msgBox.Button) + { + case ETipButton.Skip: + curNozzle.Reset(); + skip = true; + logInfo = GetClassName() + "选择了跳过按钮"; + MessageQueue.Instance.Insert(logInfo); + break; + case ETipButton.Yes: + logInfo = GetClassName() + "选择了移动到安全位按钮"; + MessageQueue.Instance.Insert(logInfo); + DischargeModuleGoSafePosFlow.Instance.GoSafePostion(); + break; + } } + } else { @@ -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.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.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) + if (curNozzle.Status == ENozzleStatus.ToUnload) { - 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); + 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.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(); - LoadAndUnloadTask.Instance.AddTurnoverResult(curNozzle); 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); diff --git a/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs b/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs index 89baf11..634a618 100644 --- a/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs @@ -453,38 +453,45 @@ namespace Rs.MotionPlat.Flow } break; case ETurnoverFlowStep.测试位上料丢料检测: - loseSlots.Clear(); - //检测是否丢料 - foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles()) + if(GlobalVar.VirtualAxis || GlobalVar.RunSpace) { - if (!nozzle.HasVacSignal()) - { - loseSlots.Add(nozzle.NozzleIndex); - } + Step = ETurnoverFlowStep.到测试放料位下方1; } - if (loseSlots.Count > 0) + else { - alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理"; - TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo,MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText()); - msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm); - switch (msgBox.Button) + loseSlots.Clear(); + //检测是否丢料 + foreach (var nozzle in TransitNozzleManager.Instance.GetHasProductNozzles()) { - case ETipButton.Skip: - MessageQueue.Instance.Insert($"{nameof(TurnoverFlow)}-点击了跳过按钮"); - break; - case ETipButton.Yes: - MessageQueue.Instance.Insert($"{nameof(TurnoverFlow)}-点击了移动到安全位按钮"); - TransitModuleSafePosFlow.Instance.GoSafePostion(); - break; - default: - break; + if (!nozzle.HasVacSignal()) + { + loseSlots.Add(nozzle.NozzleIndex); + } + } + if (loseSlots.Count > 0) + { + alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理"; + 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; @@ -1064,42 +1071,49 @@ namespace Rs.MotionPlat.Flow break; case ETurnoverFlowStep.周转盘放料前丢料检测: { - loseSlots.Clear(); - List hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles(); - foreach (var nozzle in hasProductNozzles.ToArray()) + if(GlobalVar.VirtualAxis|| GlobalVar.RunSpace) { - if (!nozzle.HasVacSignal()) - { - loseSlots.Add(nozzle.NozzleIndex); - } + Step = ETurnoverFlowStep.到周转盘放料位下方1; } - if (loseSlots.Count > 0) + else { - alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理"; - TestCenterMessageBox.Show(AlarmConstID.NozzlesLoseMaterialAlarm, alarmInfo, MessageButtonManager.GetSkip_MoveToSafe_Button(), MessageButtonManager.GetSkip_MoveToSafe_ButtonText()); - msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.NozzlesLoseMaterialAlarm); - switch (msgBox.Button) + loseSlots.Clear(); + List hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles(); + foreach (var nozzle in hasProductNozzles.ToArray()) { - case ETipButton.Skip: - logInfo = GetClassName() + $"点击了跳过按钮"; - 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; + if (!nozzle.HasVacSignal()) + { + loseSlots.Add(nozzle.NozzleIndex); + } + } + if (loseSlots.Count > 0) + { + alarmInfo = $"周转{string.Join(",", loseSlots)}号吸嘴真空异常丢料,请处理"; + 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 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;