diff --git a/Rs.SkyLine/Flow/RearrangeFlow.cs b/Rs.SkyLine/Flow/RearrangeFlow.cs index 6aac4e7..17d71aa 100644 --- a/Rs.SkyLine/Flow/RearrangeFlow.cs +++ b/Rs.SkyLine/Flow/RearrangeFlow.cs @@ -7,6 +7,7 @@ using Rs.MotionPlat.Commom; using Rs.MotionPlat.Entitys; using Rs.MotionPlat.Entitys.Trays; using Rs.MotionPlat.Flow.Camera; +using Rs.MotionPlat.Flow.Common; using Rs.MotionPlat.Flow.NgFlow; using Rs.MotionPlat.Flow.SafePosFlow; using Rs.MotionPlat.Flow.SubFlow; @@ -69,12 +70,14 @@ namespace Rs.MotionPlat.Flow TurnoverInfo curTask; SlotPoint curSlotPoint; SlotPoint nozzleDist; - double targetX = 0.0; - double targetY = 0.0; + //double targetX = 0.0; + //double targetY = 0.0; int FetchNum = 0;//取料次数 ErrorCode errCode = ErrorCode.Ok; string alarmInfo = string.Empty; ETrayType traytype; + AlarmEntity alarmEntity = null; + TargetPosition targetPosition = new TargetPosition(); public void Rearrange() { bool finished = false; @@ -87,7 +90,7 @@ namespace Rs.MotionPlat.Flow if (RearrangeTask.HasTask() && WorkEnvironment.Instance.EnvironmentOk) { DischargeFlow.Instance.Stop(); - logInfo = $"接收重排任务"; + logInfo = GetClassName()+$"接收重排任务"; MessageQueue.Instance.Insert(logInfo); flowStep = ERearrangeFlowStep.到取料位上方; } @@ -115,31 +118,51 @@ namespace Rs.MotionPlat.Flow default: break; } - logInfo = $"吸嘴{curNozzle.NozzleIndex} 去{traytype}盘 {curTask.FromIndex + 1} 号穴位取料"; + logInfo = GetClassName() + $"吸嘴{curNozzle.NozzleIndex} 去{traytype}盘 {curTask.FromIndex + 1} 号穴位取料"; curSlotPoint = TrayPointManager.GetSlotPoint(traytype, curTask.FromIndex + 1); MessageQueue.Instance.Insert(logInfo); if (curSlotPoint != null) { nozzleDist = TrayPointManager.GetDistToNozzle1(curNozzle.NozzleIndex); - targetX = curSlotPoint.X + nozzleDist.X; - targetY = curSlotPoint.Y + nozzleDist.Y; - errCode = AxisControl.LoadX.MovePos(targetX, GlobalVar.WholeSpeed); + targetPosition.X = curSlotPoint.X + nozzleDist.X; + targetPosition.Y = curSlotPoint.Y + nozzleDist.Y; + errCode = AxisControl.LoadX.MovePos(targetPosition.X, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - errCode = AxisControl.GetAxis($"NozzleR{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"NozzleR{curNozzle.NozzleIndex}StartPos"), (int)(GlobalVar.WholeSpeed)); - errCode = AxisControl.LoadY.MovePos(targetY, (int)(GlobalVar.WholeSpeed)); - if (errCode == ErrorCode.Ok | GlobalVar.VirtualAxis) + errCode = AxisControl.LoadY.MovePos(targetPosition.Y, (int)(GlobalVar.WholeSpeed)); + if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - flowStep = ERearrangeFlowStep.等待到取料位上方; + errCode = AxisControl.GetAxis($"NozzleR{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"NozzleR{curNozzle.NozzleIndex}StartPos"), (int)(GlobalVar.WholeSpeed)); + if(errCode== ErrorCode.Ok || GlobalVar.VirtualAxis) + { + flowStep = ERearrangeFlowStep.等待到取料位上方; + } + else + { + alarmEntity = AlarmCollection.Get($"NozzleR{curNozzle.NozzleIndex}运动异常").Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); + } } + else + { + alarmEntity = AlarmCollection.Get(AlarmConstID.LoadY运动异常).Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); + } + } + else + { + alarmEntity = AlarmCollection.Get(AlarmConstID.LoadX运动异常).Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); } } } else { - logInfo = "loady move isn't safe"; - Msg.ShowError(logInfo); - MessageQueue.Instance.Warn(logInfo); + //logInfo = "loady move isn't safe"; + alarmEntity = AlarmCollection.Get(AlarmConstID.运动不安全).Transform("LoadY","TurnoverY"); + //Msg.ShowError(logInfo); + MessageQueue.Instance.Warn(GetClassName()+ alarmEntity.CN); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); } } @@ -147,57 +170,67 @@ namespace Rs.MotionPlat.Flow case ERearrangeFlowStep.等待到取料位上方: if (Ops.IsStop("LoadX", "LoadY", $"NozzleR{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "已运动到取料位上方"; - Thread.Sleep(100); - MessageQueue.Instance.Insert(logInfo); - flowStep = ERearrangeFlowStep.到取料位下方; - + if(AxisArrived.LoadXYIsArrived(targetPosition.X,targetPosition.Y)) + { + logInfo = GetClassName() + "已运动到取料位上方"; + MessageQueue.Instance.Insert(logInfo); + flowStep = ERearrangeFlowStep.到取料位下方; + } + else + { + flowStep = ERearrangeFlowStep.到取料位上方; + } } break; case ERearrangeFlowStep.到取料位下方: - if (AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").HomeStatus == EHomeStatus.Finished || GlobalVar.VirtualAxis) + logInfo = GetClassName() + "准备运动到取料位下方"; + MessageQueue.Instance.Insert(logInfo); + targetPosition.Z = GetVacOffsetHeight(FetchNum) + SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight"); + errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPosition.Z, GlobalVar.WholeSpeed); + if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - logInfo = "准备运动到取料位下方"; - MessageQueue.Instance.Insert(logInfo); - errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(GetVacOffsetHeight(FetchNum) + SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed); - if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) - { - flowStep = ERearrangeFlowStep.等待到取料位下方; - } + flowStep = ERearrangeFlowStep.等待到取料位下方; } else { - logInfo = $"NozzleZ{curNozzle.NozzleIndex} 轴状态未回原,请手动回原后点击确定"; - Msg.ShowError(logInfo); - LogHelper.Error(logInfo); + alarmEntity = AlarmCollection.Get($"NozzleZ{curNozzle.NozzleIndex}运动异常").Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); } break; case ERearrangeFlowStep.等待到取料位下方: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "已运动到取料位下方"; + logInfo = GetClassName() + "已运动到取料位下方"; MessageQueue.Instance.Insert(logInfo); - flowStep = ERearrangeFlowStep.开真空; + VacManager.DischargeVacSuction(EVacOperator.Open, true, curNozzle.NozzleIndex); + flowStep = ERearrangeFlowStep.取料完成抬起; + //flowStep = ERearrangeFlowStep.开真空; } break; - case ERearrangeFlowStep.开真空: - VacManager.DischargeVacSuction(EVacOperator.Open, true, curNozzle.NozzleIndex); - flowStep = ERearrangeFlowStep.取料完成抬起; - break; + //case ERearrangeFlowStep.开真空: + // VacManager.DischargeVacSuction(EVacOperator.Open, true, curNozzle.NozzleIndex); + // flowStep = ERearrangeFlowStep.取料完成抬起; + // break; case ERearrangeFlowStep.取料完成抬起: - errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(0, GlobalVar.WholeSpeed); + targetPosition.Z = 0; + errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPosition.Z, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - logInfo = "取料完成准备抬起"; + logInfo = GetClassName() + "取料完成准备抬起"; MessageQueue.Instance.Insert(logInfo); flowStep = ERearrangeFlowStep.等待取料完成抬起; } + else + { + alarmEntity = AlarmCollection.Get($"NozzleZ{curNozzle.NozzleIndex}运动异常").Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); + } break; case ERearrangeFlowStep.等待取料完成抬起: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "取料完成已运动到抬起位,准备真空检测"; + logInfo = GetClassName() + "取料完成已运动到抬起位"; MessageQueue.Instance.Insert(logInfo); flowStep = ERearrangeFlowStep.取料真空检测; } @@ -206,9 +239,8 @@ namespace Rs.MotionPlat.Flow if (Ops.IsOn($"{curNozzle.NozzleIndex}号吸嘴真空吸检测") || GlobalVar.RunSpace || GlobalVar.VirtualAxis) { FetchNum = 0; - logInfo = $"吸嘴{curNozzle.NozzleIndex}真空检测 OK"; + logInfo = GetClassName() + $"吸嘴{curNozzle.NozzleIndex}真空检测 OK"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); curNozzle.Status = ENozzleStatus.ToUnload; curNozzle.FromType = curTask.FromType; @@ -241,7 +273,7 @@ namespace Rs.MotionPlat.Flow curTask.Dealed = true; if (RearrangeTask.HasTask() && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) { - logInfo = $"检测到还有条任务未执行,继续执行"; + logInfo = GetClassName() + $"检测到还有条任务未执行,继续执行"; MessageQueue.Instance.Insert(logInfo); flowStep = ERearrangeFlowStep.到取料位上方; } @@ -360,8 +392,6 @@ namespace Rs.MotionPlat.Flow case ERearrangeFlowStep.到放料位上方: if (DischargeFlow.Instance.XYCanGoLocalArea() || GlobalVar.VirtualAxis) { - targetX = 0.0; - targetY = 0.0; ///获取需要放料的吸嘴 curSlotPoint = null; curNozzle = NozzleManager.GetToUnloadNozzle(); @@ -371,13 +401,15 @@ namespace Rs.MotionPlat.Flow } if (curSlotPoint != null) { + logInfo = GetClassName() + "到放料位上方"; + MessageQueue.Instance.Insert(logInfo); nozzleDist = TrayPointManager.GetDistToNozzle1(curNozzle.NozzleIndex); - targetX = curSlotPoint.X + nozzleDist.X; - targetY = curSlotPoint.Y + nozzleDist.Y; - errCode = AxisControl.LoadX.MovePos(targetX, GlobalVar.WholeSpeed); + targetPosition.X = curSlotPoint.X + nozzleDist.X; + targetPosition.Y = curSlotPoint.Y + nozzleDist.Y; + errCode = AxisControl.LoadX.MovePos(targetPosition.X, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - errCode = AxisControl.LoadY.MovePos(targetY, GlobalVar.WholeSpeed); + errCode = AxisControl.LoadY.MovePos(targetPosition.Y, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { errCode = AxisControl.GetAxis($"NozzleR{curNozzle.NozzleIndex}").MoveOffset(0, GlobalVar.WholeSpeed); @@ -385,57 +417,97 @@ namespace Rs.MotionPlat.Flow { flowStep = ERearrangeFlowStep.等待到放料位上方; } + else + { + alarmEntity = AlarmCollection.Get($"NozzleR{curNozzle.NozzleIndex}运动异常").Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); + } + } + else + { + alarmEntity = AlarmCollection.Get(AlarmConstID.LoadY运动异常).Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); } } + else + { + alarmEntity = AlarmCollection.Get(AlarmConstID.LoadX运动异常).Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); + } } } else { - Msg.ShowError("loady move isn't safe"); + alarmEntity = AlarmCollection.Get(AlarmConstID.运动不安全).Transform("LoadY", "TurnoverY"); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); } break; case ERearrangeFlowStep.等待到放料位上方: if (Ops.IsStop("LoadX", "LoadY", $"NozzleR{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - Thread.Sleep(100); - logInfo = "已运动到放料位上方"; - MessageQueue.Instance.Insert(logInfo); - flowStep = ERearrangeFlowStep.到放料位下方; - + if(AxisArrived.LoadXYIsArrived(targetPosition.X,targetPosition.Y)) + { + logInfo = GetClassName() + "已运动到放料位上方"; + MessageQueue.Instance.Insert(logInfo); + flowStep = ERearrangeFlowStep.到放料位下方; + } + else + { + flowStep = ERearrangeFlowStep.到放料位上方; + } } break; case ERearrangeFlowStep.到放料位下方: - logInfo = "到放料位下方"; + logInfo = GetClassName() + "到放料位下方"; MessageQueue.Instance.Insert(logInfo); - errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight") + 3, GlobalVar.WholeSpeed); + targetPosition.Z = SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight") + 3; + errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPosition.Z, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { flowStep = ERearrangeFlowStep.等待到放料位下方; } + else + { + alarmEntity = AlarmCollection.Get($"NozzleZ{curNozzle.NozzleIndex}运动异常").Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); + } break; case ERearrangeFlowStep.等待到放料位下方: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - VacManager.DischargeVacSuction(EVacOperator.Close, true, curNozzle.NozzleIndex); - VacManager.DischargeVacBreak(EVacOperator.Open, true, curNozzle.NozzleIndex); - VacManager.DischargeVacBreak(EVacOperator.Close, false, curNozzle.NozzleIndex); - flowStep = ERearrangeFlowStep.放料完成抬起; - + if(AxisArrived.LoadXYIsArrived(targetPosition.X,targetPosition.Y)) + { + logInfo = GetClassName() + "已运动到放料位下方"; + VacManager.DischargeVacSuction(EVacOperator.Close, true, curNozzle.NozzleIndex); + VacManager.DischargeVacBreak(EVacOperator.Open, true, curNozzle.NozzleIndex); + VacManager.DischargeVacBreak(EVacOperator.Close, false, curNozzle.NozzleIndex); + flowStep = ERearrangeFlowStep.放料完成抬起; + } + else + { + flowStep = ERearrangeFlowStep.到放料位上方; + } } break; case ERearrangeFlowStep.放料完成抬起: - errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(0, GlobalVar.WholeSpeed); + targetPosition.Z = 0; + errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPosition.Z, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - logInfo = "放料完成抬起"; + logInfo = GetClassName() + "放料完成抬起"; MessageQueue.Instance.Insert(logInfo); flowStep = ERearrangeFlowStep.等待放料完成抬起; } + else + { + alarmEntity = AlarmCollection.Get($"NozzleZ{curNozzle.NozzleIndex}运动异常").Transform(errCode); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); + } break; case ERearrangeFlowStep.等待放料完成抬起: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "放料完成已运动到抬起位,准备真空检测"; + logInfo = GetClassName() + "放料完成已运动到抬起位"; MessageQueue.Instance.Insert(logInfo); flowStep = ERearrangeFlowStep.放料真空检测; } @@ -444,9 +516,9 @@ namespace Rs.MotionPlat.Flow flowStep = ERearrangeFlowStep.放料任务完成; break; case ERearrangeFlowStep.放料任务完成: - logInfo = "放料任务完成"; + logInfo = GetClassName() + "放料任务完成"; MessageQueue.Instance.Insert(logInfo); - AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").Home(); + //AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").Home(); if (curNozzle.ToType == TurnoverType.Passed) { GlobalTray.OkTary.ChangeStatus(curNozzle.ToIndex + 1, ESlotStatus.Have); @@ -480,34 +552,53 @@ namespace Rs.MotionPlat.Flow break; case ERearrangeFlowStep.任务结束到安全位: - logInfo = "任务结束到安全位"; + logInfo = GetClassName() + "任务结束到安全位"; MessageQueue.Instance.Insert(logInfo); - errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue("LoadXStartPos"), GlobalVar.WholeSpeed); + targetPosition.X = SysConfigParam.GetValue("LoadXStartPos"); + targetPosition.Y = SysConfigParam.GetValue("LoadYStartPos"); + errCode = AxisControl.LoadX.MovePos(targetPosition.X, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - errCode = AxisControl.LoadY.MovePos(SysConfigParam.GetValue("LoadYStartPos"), GlobalVar.WholeSpeed); + errCode = AxisControl.LoadY.MovePos(targetPosition.Y, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { flowStep = ERearrangeFlowStep.等待任务结束到安全位; } + else + { + alarmEntity = AlarmCollection.Get(AlarmConstID.LoadY运动异常).Transform(errCode.ToString()); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); + } + } + else + { + alarmEntity = AlarmCollection.Get(AlarmConstID.LoadX运动异常).Transform(errCode.ToString()); + AlarmMessageBox.ShowDialog(alarmEntity, ETipButton.Ok, null); } break; case ERearrangeFlowStep.等待任务结束到安全位: if (Ops.IsStop("LoadX", "LoadY") || GlobalVar.VirtualAxis) { - logInfo = "任务结束已回到安全位"; - MessageQueue.Instance.Insert(logInfo); - if (RearrangeTask.ReportCenter() > 0) + if(AxisArrived.LoadXYIsArrived(targetPosition.X,targetPosition.Y)) { - logInfo = "通知中控任务完成"; + logInfo = GetClassName() + "任务结束已回到安全位"; MessageQueue.Instance.Insert(logInfo); + if (RearrangeTask.ReportCenter() > 0) + { + logInfo = "通知中控任务完成"; + MessageQueue.Instance.Insert(logInfo); - RearrangeTask.RemoveAll(); - logInfo = "任务完成,清除任务"; - MessageQueue.Instance.Insert(logInfo); + RearrangeTask.RemoveAll(); + logInfo = "任务完成,清除任务"; + MessageQueue.Instance.Insert(logInfo); + } + MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); + finished = true; + } + else + { + flowStep = ERearrangeFlowStep.任务结束到安全位; } - MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); - finished = true; } break; default: @@ -562,7 +653,7 @@ namespace Rs.MotionPlat.Flow } private string GetClassName() { - return string.Empty; + return "RearrangeFlow_"; } }