From 16907982e8eaf2b38e71297df9797b84a0735356 Mon Sep 17 00:00:00 2001 From: lhiven <236881222@qq.com> Date: Tue, 5 Mar 2024 13:47:28 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=AE=BE=E5=A4=87=E6=9A=82=E5=81=9C?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E6=89=8B=E5=8A=A8=E7=A7=BB=E5=8A=A8=E8=BD=B4?= =?UTF-8?q?=E5=90=8E=E8=AE=BE=E5=A4=87=E5=8F=AF=E4=BB=A5=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=202=E3=80=81=E5=A2=9E=E5=8A=A0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7:2.20.24.25?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Commom/Ops.cs | 2 +- Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs | 166 +++++--- Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs | 405 +++++++++++++------- Rs.SkyLine/Properties/AssemblyInfo.cs | 2 +- 4 files changed, 380 insertions(+), 195 deletions(-) diff --git a/Rs.SkyLine/Commom/Ops.cs b/Rs.SkyLine/Commom/Ops.cs index c451c08..c28bee6 100644 --- a/Rs.SkyLine/Commom/Ops.cs +++ b/Rs.SkyLine/Commom/Ops.cs @@ -72,7 +72,7 @@ namespace Rs.MotionPlat.Commom { errNum++; //MessageQueue.Instance.Warn(ceCode.ToString()); - Msg.ShowError("Camera open fail!!!"); + Msg.ShowError("Camera open fail!!!Please try again in 30 seconds"); System.Environment.Exit(0); } else diff --git a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs index 1944788..9cc5ac5 100644 --- a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs @@ -351,9 +351,16 @@ namespace Rs.MotionPlat.Flow case EDischargeFlowStep.等待到取料位上方: if (Ops.IsStop("LoadX", "LoadY", $"NozzleR{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = GetClassName()+$"已运动到{WitchTrayWitchSlot(curNozzle.FromType,curNozzle.FromIndex)}取料位上方"; - MessageQueue.Instance.Insert(logInfo); - flowStep = EDischargeFlowStep.到取料位下方; + if(XYIsInTargetPos(targetX,targetY)) + { + logInfo = GetClassName() + $"已运动到{WitchTrayWitchSlot(curNozzle.FromType, curNozzle.FromIndex)}取料位上方"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EDischargeFlowStep.到取料位下方; + } + else + { + flowStep = EDischargeFlowStep.到取料位上方; + } } break; @@ -398,9 +405,25 @@ namespace Rs.MotionPlat.Flow case EDischargeFlowStep.等待到取料位下方: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = GetClassName()+ $"已运动到{WitchTrayWitchSlot(curNozzle.FromType, curNozzle.FromIndex)}号穴位取料位下方"; - MessageQueue.Instance.Insert(logInfo); - flowStep = EDischargeFlowStep.开真空; + if (XYIsInTargetPos(targetX, targetY)) + { + logInfo = GetClassName() + $"已运动到{WitchTrayWitchSlot(curNozzle.FromType, curNozzle.FromIndex)}号穴位取料位下方"; + MessageQueue.Instance.Insert(logInfo); + if (curTask.FromType == TurnoverType.Turnover) + { + VacManager.TurnoverTrayVacBreak(EVacOperator.Open, true, curNozzle.FromIndex + 1); + } + else + { + VacManager.DischargeVacSuction(EVacOperator.Open, true, curNozzle.NozzleIndex); + } + flowStep = EDischargeFlowStep.取料完成抬起; + //flowStep = EDischargeFlowStep.开真空; + } + else + { + flowStep = EDischargeFlowStep.到取料位上方; + } } break; @@ -703,10 +726,12 @@ namespace Rs.MotionPlat.Flow if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)[0].ToType == TurnoverType.Turnover) { needGrabNum = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count(); - errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle{needGrabNum}CenterX") - 30, GlobalVar.WholeSpeed); + targetX = SysConfigParam.GetValue($"Nozzle{needGrabNum}CenterX") - 30; + targetY = SysConfigParam.GetValue($"Nozzle8CenterY"); + errCode = AxisControl.LoadX.MovePos(targetX, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - errCode = AxisControl.LoadY.MovePos(SysConfigParam.GetValue($"Nozzle8CenterY"), GlobalVar.WholeSpeed); + errCode = AxisControl.LoadY.MovePos(targetY, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { flowStep = EDischargeFlowStep.等待到下相机拍照起始位; @@ -715,10 +740,12 @@ namespace Rs.MotionPlat.Flow } else { - errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue("Nozzle1CenterX") + 30, GlobalVar.WholeSpeed); + targetX = SysConfigParam.GetValue("Nozzle1CenterX") + 30; + targetY = SysConfigParam.GetValue($"Nozzle1CenterY"); + errCode = AxisControl.LoadX.MovePos(targetX, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - errCode = AxisControl.LoadY.MovePos(SysConfigParam.GetValue("Nozzle1CenterY"), GlobalVar.WholeSpeed); + errCode = AxisControl.LoadY.MovePos(targetY, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { flowStep = EDischargeFlowStep.等待到下相机拍照起始位; @@ -770,7 +797,7 @@ namespace Rs.MotionPlat.Flow grabPoints.Add(SysConfigParam.GetValue($"Nozzle{i}CenterX")); } } - + //LogHelper.Debug(GetClassName()+$"拍照点位:{grabPoints.ToJoinString(",")}"); errCode = AxisControl.LoadX.SetPosCompare(1, grabPoints.ToArray()); if(errCode== ErrorCode.Ok || GlobalVar.VirtualAxis) { @@ -1206,15 +1233,22 @@ namespace Rs.MotionPlat.Flow case EDischargeFlowStep.等待到放料位上方: if (Ops.IsStop("LoadX", "LoadY",$"NozzleR{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - //当放料到tray盘区域时,并且周转再盘已经没有要下料的穴位时,通知周转模组可以运动了 - if(curNozzle.ToType!= TurnoverType.Turnover && TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.Tested, ETurnoverTraySlotStatus.Have).Count()==0) + if(XYIsInTargetPos(targetX, targetY)) { - LogHelper.Debug("通知周转模组可以运动"); - TurnoverFlow.Instance.CanMoveFromTestTrayToTurnoverTray(); + //当放料到tray盘区域时,并且周转再盘已经没有要下料的穴位时,通知周转模组可以运动了 + if (curNozzle.ToType != TurnoverType.Turnover && TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.Tested, ETurnoverTraySlotStatus.Have).Count() == 0) + { + LogHelper.Debug("通知周转模组可以运动"); + TurnoverFlow.Instance.CanMoveFromTestTrayToTurnoverTray(); + } + logInfo = GetClassName() + $"排料吸嘴{curNozzle.NozzleIndex}号已运动到{WitchTrayWitchSlot(curNozzle.ToType, curNozzle.ToIndex)}放料位上方"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EDischargeFlowStep.丢料检测; + } + else + { + flowStep = EDischargeFlowStep.到放料位上方; } - logInfo = GetClassName()+$"排料吸嘴{curNozzle.NozzleIndex}号已运动到{WitchTrayWitchSlot(curNozzle.ToType,curNozzle.ToIndex)}放料位上方"; - MessageQueue.Instance.Insert(logInfo); - flowStep = EDischargeFlowStep.丢料检测; } break; case EDischargeFlowStep.丢料检测: @@ -1366,46 +1400,53 @@ namespace Rs.MotionPlat.Flow case EDischargeFlowStep.等待到放料位下方: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = GetClassName()+ $"排料吸嘴{curNozzle.NozzleIndex}号已运动到{WitchTrayWitchSlot(curNozzle.ToType, curNozzle.ToIndex)}放料位下方"; - MessageQueue.Instance.Insert(logInfo); - if (curNozzle.ToType == TurnoverType.Turnover) + if(XYIsInTargetPos(targetX,targetY)) { - /*关闭排料吸嘴真空吸*/ - //logInfo = GetClassName() + $"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸"; - //MessageQueue.Instance.Insert(logInfo); - //Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");//关闭真空 - //Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); - VacManager.DischargeVacSuction(EVacOperator.Close, true, curNozzle.NozzleIndex); - /*打开排料吸嘴真空破*/ - //logInfo = GetClassName() + $"打开{curNozzle.NozzleIndex}号排料吸嘴真空破"; - //MessageQueue.Instance.Insert(logInfo); - //Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); - //Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime); - VacManager.DischargeVacBreak(EVacOperator.Open, true,curNozzle.NozzleIndex); - flowStep = EDischargeFlowStep.到放料关破真空位; + logInfo = GetClassName() + $"排料吸嘴{curNozzle.NozzleIndex}号已运动到{WitchTrayWitchSlot(curNozzle.ToType, curNozzle.ToIndex)}放料位下方"; + MessageQueue.Instance.Insert(logInfo); + if (curNozzle.ToType == TurnoverType.Turnover) + { + /*关闭排料吸嘴真空吸*/ + //logInfo = GetClassName() + $"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸"; + //MessageQueue.Instance.Insert(logInfo); + //Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");//关闭真空 + //Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); + VacManager.DischargeVacSuction(EVacOperator.Close, true, curNozzle.NozzleIndex); + /*打开排料吸嘴真空破*/ + //logInfo = GetClassName() + $"打开{curNozzle.NozzleIndex}号排料吸嘴真空破"; + //MessageQueue.Instance.Insert(logInfo); + //Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); + //Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime); + VacManager.DischargeVacBreak(EVacOperator.Open, true, curNozzle.NozzleIndex); + flowStep = EDischargeFlowStep.到放料关破真空位; + } + else + { + GlobalTray.DischargeNozzle.ChangeStatus(curNozzle.NozzleIndex, ESlotStatus.NotHave); + /*关闭排料吸嘴真空吸*/ + //logInfo = GetClassName() + $"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸"; + //MessageQueue.Instance.Insert(logInfo); + //Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); + //Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); + VacManager.DischargeVacSuction(EVacOperator.Close, true, curNozzle.NozzleIndex); + /*打开排料吸嘴真空破*/ + //logInfo = GetClassName() + $"打开{curNozzle.NozzleIndex}号排料吸嘴真空破"; + //MessageQueue.Instance.Insert(logInfo); + //Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); + //Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime); + VacManager.DischargeVacBreak(EVacOperator.Open, true, curNozzle.NozzleIndex); + /*关闭排料吸嘴真空破*/ + //logInfo = GetClassName() + $"关闭{curNozzle.NozzleIndex}号排料吸嘴真空破"; + //MessageQueue.Instance.Insert(logInfo); + //Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); + //Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime); + VacManager.DischargeVacBreak(EVacOperator.Close, false, curNozzle.NozzleIndex); + flowStep = EDischargeFlowStep.放料完成抬起; + } } else { - GlobalTray.DischargeNozzle.ChangeStatus(curNozzle.NozzleIndex, ESlotStatus.NotHave); - /*关闭排料吸嘴真空吸*/ - //logInfo = GetClassName() + $"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸"; - //MessageQueue.Instance.Insert(logInfo); - //Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); - //Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); - VacManager.DischargeVacSuction(EVacOperator.Close, true, curNozzle.NozzleIndex); - /*打开排料吸嘴真空破*/ - //logInfo = GetClassName() + $"打开{curNozzle.NozzleIndex}号排料吸嘴真空破"; - //MessageQueue.Instance.Insert(logInfo); - //Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); - //Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime); - VacManager.DischargeVacBreak(EVacOperator.Open,true, curNozzle.NozzleIndex); - /*关闭排料吸嘴真空破*/ - //logInfo = GetClassName() + $"关闭{curNozzle.NozzleIndex}号排料吸嘴真空破"; - //MessageQueue.Instance.Insert(logInfo); - //Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); - //Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime); - VacManager.DischargeVacBreak(EVacOperator.Close,false, curNozzle.NozzleIndex); - flowStep = EDischargeFlowStep.放料完成抬起; + flowStep = EDischargeFlowStep.到放料位上方; } } break; @@ -2248,6 +2289,23 @@ namespace Rs.MotionPlat.Flow flowStep = EDischargeFlowStep.等待任务; } + + /// + /// 检测XY是否在目标位置上 + /// + /// + /// + /// + private bool XYIsInTargetPos(double xTargetPos, double yTargetPos) + { + double xCurPos = Ops.GetCurPosition(AxisControl.LoadX); + double yCurPos = Ops.GetCurPosition(AxisControl.LoadY); + if (Math.Abs(xTargetPos - xCurPos) < 1 && Math.Abs(yTargetPos - yCurPos) < 1) + { + return true; + } + return false; + } } } diff --git a/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs b/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs index 08c33ff..8b5da40 100644 --- a/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs @@ -140,7 +140,7 @@ namespace Rs.MotionPlat.Flow //List slots = new List(); List ngList = new List(); ETurnoverFlowStep Step = ETurnoverFlowStep.等待任务; - double targetPos = 0.0; + //double targetPos = 0.0; Motion.ErrorCode errCode = Motion.ErrorCode.Ok; List hasProductNozzles = new List(); /// @@ -159,6 +159,10 @@ namespace Rs.MotionPlat.Flow bool bTakeFlag = false; bool hasUnloadFlag = false; int turnoverTrayToTestTrayNum = 1; + double targetTurnoverX = 0.0; + double targetTurnoverY = 0.0; + double targetTurnoverZ = 0.0; + double targetPressZ = 0.0; /// /// 可以下料到周转盘 /// @@ -211,12 +215,12 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.到周转盘取料位上方: if(CanGoTurnoverTrayPos()) { - targetPos = SysConfigParam.GetValue("TurnoverTakeX"); - errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverX = SysConfigParam.GetValue("TurnoverTakeX"); + errCode = AxisControl.TurnoverX.MovePos(targetTurnoverX, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - targetPos = SysConfigParam.GetValue("TurnoverTakeY"); - errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverY = SysConfigParam.GetValue("TurnoverTakeY"); + errCode = AxisControl.TurnoverY.MovePos(targetTurnoverY, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -245,7 +249,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到周转盘取料位上方: if (Ops.IsStop(AxisControl.TurnoverX,AxisControl.TurnoverY) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { logInfo = GetClassName() + $"已运动到周转盘取料位上方"; MessageQueue.Instance.Insert(logInfo); @@ -261,6 +266,10 @@ namespace Rs.MotionPlat.Flow Step = ETurnoverFlowStep.取料异常报警; } } + else + { + Step = ETurnoverFlowStep.到周转盘取料位上方; + } } break; case ETurnoverFlowStep.取料异常报警: @@ -337,13 +346,13 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.到周转盘下方取料位1: if(GlobalVar.EnableTwoSpeed) { - targetPos = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset; + targetTurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset; } else { - targetPos = SysConfigParam.GetValue("TurnoverTakeZ"); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ"); } - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { undealTasks = LoadAndUnloadTask.Instance.GetTurnoverToTestTasks(ETaskDealStatus.Undeal); @@ -366,14 +375,21 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到周转盘下方取料位1: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = GetClassName()+ $"已运动到周转盘下方取料位1 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; - MessageQueue.Instance.Insert(logInfo); - Step = ETurnoverFlowStep.到周转盘下方取料位2; + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) + { + logInfo = GetClassName() + $"已运动到周转盘下方取料位1 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.到周转盘下方取料位2; + } + else + { + Step = ETurnoverFlowStep.到周转盘取料位上方; + } } break; case ETurnoverFlowStep.到周转盘下方取料位2: - targetPos = SysConfigParam.GetValue("TurnoverTakeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.PressLowSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -392,7 +408,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到周转盘下方取料位2: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + if (TurnoverXYIsInTargetPos(targetTurnoverX, targetTurnoverY)) { logInfo = GetClassName() + $"已运动到周转盘下方取料位2 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; MessageQueue.Instance.Insert(logInfo); @@ -403,18 +420,22 @@ namespace Rs.MotionPlat.Flow VacManager.TurnoverTrayVacBreak(EVacOperator.Open, true, undealTasks.Select(t => t.FromIndex + 1).ToArray()); Step = ETurnoverFlowStep.到周转盘取料破真空位; } + else + { + Step = ETurnoverFlowStep.到周转盘取料位上方; + } } break; case ETurnoverFlowStep.到周转盘取料破真空位: if(GlobalVar.EnableTwoSpeed) { - targetPos = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.CloseVacOffsetHeight; - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.CloseVacOffsetHeight; + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.PressLowSpeed); } else { - targetPos = SysConfigParam.GetValue("TurnoverSafeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverSafeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); } if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) @@ -444,8 +465,8 @@ namespace Rs.MotionPlat.Flow } break; case ETurnoverFlowStep.周转盘取料完成抬起: - targetPos = SysConfigParam.GetValue("TurnoverSafeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverSafeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -511,12 +532,12 @@ namespace Rs.MotionPlat.Flow } break; case ETurnoverFlowStep.到测试放料位上方: - targetPos = SysConfigParam.GetValue("PressDumpX"); - errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverX = SysConfigParam.GetValue("PressDumpX"); + errCode = AxisControl.TurnoverX.MovePos(targetTurnoverX, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - targetPos = SysConfigParam.GetValue("PressDumpY"); - errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverY = SysConfigParam.GetValue("PressDumpY"); + errCode = AxisControl.TurnoverY.MovePos(targetTurnoverY, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -545,8 +566,10 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到测试放料位上方: if (Ops.IsStop(AxisControl.TurnoverX,AxisControl.TurnoverY) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { + LogHelper.Debug(GetClassName()+ $"turnoverxy in target curx={Ops.GetCurPosition(AxisControl.TurnoverX)}, x={targetTurnoverX},cury={Ops.GetCurPosition(AxisControl.TurnoverY)},y={targetTurnoverY}"); if (turnoverTrayToTestTrayNum == 1) { testTrayHasProductCheckEvent.WaitOne(); @@ -613,6 +636,10 @@ namespace Rs.MotionPlat.Flow } Step = ETurnoverFlowStep.测试位上料丢料检测; } + else + { + Step = ETurnoverFlowStep.到测试放料位上方; + } } break; case ETurnoverFlowStep.测试位上料丢料检测: @@ -701,45 +728,59 @@ namespace Rs.MotionPlat.Flow break; case ETurnoverFlowStep.到测试放料位下方1: - if(GlobalVar.EnableTwoSpeed) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { - targetPos = SysConfigParam.GetValue("PressDumpZ") + GlobalVar.PressLowSpeedOffset; - } - else - { - targetPos = SysConfigParam.GetValue("PressDumpZ"); - } - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); - if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis ) - { - //获取需要放料的吸嘴 - hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles(); - /*打开测试穴位真空吸*/ - VacManager.TestTrayVacSuction(EVacOperator.Open,false, hasProductNozzles.Select(n => n.NozzleIndex).ToArray()); - if (GlobalVar.VirtualAxis) + if (GlobalVar.EnableTwoSpeed) { - Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + targetTurnoverZ = SysConfigParam.GetValue("PressDumpZ") + GlobalVar.PressLowSpeedOffset; + } + else + { + targetTurnoverZ = SysConfigParam.GetValue("PressDumpZ"); + } + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); + if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) + { + //获取需要放料的吸嘴 + hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles(); + /*打开测试穴位真空吸*/ + VacManager.TestTrayVacSuction(EVacOperator.Open, false, hasProductNozzles.Select(n => n.NozzleIndex).ToArray()); + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + logInfo = GetClassName() + $"到测试放料位下方1"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.等待运动到到测试放料位下方1; + } + else + { + MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode); } - logInfo = GetClassName()+$"到测试放料位下方1"; - MessageQueue.Instance.Insert(logInfo); - Step = ETurnoverFlowStep.等待运动到到测试放料位下方1; } else { - MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode); + Step = ETurnoverFlowStep.到测试放料位上方; } break; case ETurnoverFlowStep.等待运动到到测试放料位下方1: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo =GetClassName()+ $"已运动到到测试放料位下方1 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; - MessageQueue.Instance.Insert(logInfo); - Step = ETurnoverFlowStep.到测试放料位下方2; + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) + { + logInfo = GetClassName() + $"已运动到到测试放料位下方1 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.到测试放料位下方2; + } + else + { + Step = ETurnoverFlowStep.到测试放料位上方; + } } break; case ETurnoverFlowStep.到测试放料位下方2: - targetPos = SysConfigParam.GetValue("PressDumpZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); + targetTurnoverZ = SysConfigParam.GetValue("PressDumpZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.PressLowSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis ) { if (GlobalVar.VirtualAxis) @@ -758,7 +799,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到到测试放料位下方2: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + if (TurnoverXYIsInTargetPos(targetTurnoverX, targetTurnoverY)) { //获取需要放料的吸嘴 hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles(); @@ -777,18 +819,22 @@ namespace Rs.MotionPlat.Flow //TransitNozzleManager.Instance.Transi Step = ETurnoverFlowStep.测试位放料完成抬起1; } + else + { + Step = ETurnoverFlowStep.到测试放料位上方; + } } break; case ETurnoverFlowStep.测试位放料完成抬起1: if(GlobalVar.EnableTwoSpeed) { - targetPos = SysConfigParam.GetValue("PressDumpZ") + GlobalVar.PressLowSpeedOffset; + targetTurnoverZ = SysConfigParam.GetValue("PressDumpZ") + GlobalVar.PressLowSpeedOffset; } else { - targetPos = SysConfigParam.GetValue("PressSafeZ"); + targetTurnoverZ = SysConfigParam.GetValue("PressSafeZ"); } - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -821,8 +867,8 @@ namespace Rs.MotionPlat.Flow } break; case ETurnoverFlowStep.测试位放料完成抬起2: - targetPos = SysConfigParam.GetValue("PressSafeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverZ = SysConfigParam.GetValue("PressSafeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -1037,12 +1083,12 @@ namespace Rs.MotionPlat.Flow break; case ETurnoverFlowStep.到测试保压位上方: - targetPos = SysConfigParam.GetValue("PressDumpX"); - errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverX = SysConfigParam.GetValue("PressDumpX"); + errCode = AxisControl.TurnoverX.MovePos(targetTurnoverX, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok|| GlobalVar.VirtualAxis) { - targetPos = SysConfigParam.GetValue("PressY"); - errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverY = SysConfigParam.GetValue("PressY"); + errCode = AxisControl.TurnoverY.MovePos(targetTurnoverY, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { turnoverTrayToTestTrayNum = 1; @@ -1067,7 +1113,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到测试保压位上方: if (Ops.IsStop(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { if (TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have).Count > 0) { @@ -1082,55 +1129,80 @@ namespace Rs.MotionPlat.Flow Step = ETurnoverFlowStep.通知中控开始测试; } } + else + { + Step = ETurnoverFlowStep.到测试保压位上方; + } } break; case ETurnoverFlowStep.到测试保压位下方1: - targetPos = SysConfigParam.GetValue("PressZ"); - if (GlobalVar.EnableTwoSpeed) - { - targetPos = targetPos + SysConfigParam.GetValue("PressLowSpeedOffset"); - } - errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.WholeSpeed); - if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis ) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { - if (GlobalVar.VirtualAxis) + targetPressZ = SysConfigParam.GetValue("PressZ"); + if (GlobalVar.EnableTwoSpeed) { - Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + targetPressZ = targetPressZ + SysConfigParam.GetValue("PressLowSpeedOffset"); + } + errCode = AxisControl.PressZ.MovePos(targetPressZ, GlobalVar.WholeSpeed); + if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) + { + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + logInfo = GetClassName() + $"到测试保压位下方1"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.等待到测试保压位下方1; + } + else + { + MsgBox.ShowAxisAlarmDialog(AxisControl.PressZ, errCode); } - logInfo = GetClassName() + $"到测试保压位下方1"; - MessageQueue.Instance.Insert(logInfo); - Step = ETurnoverFlowStep.等待到测试保压位下方1; } else { - MsgBox.ShowAxisAlarmDialog(AxisControl.PressZ, errCode); + Step = ETurnoverFlowStep.到测试保压位上方; } break; case ETurnoverFlowStep.等待到测试保压位下方1: if (Ops.IsStop(AxisControl.PressZ) || GlobalVar.VirtualAxis) { - logInfo = GetClassName() + $"已到测试保压位下方1 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; - MessageQueue.Instance.Insert(logInfo); - Step = ETurnoverFlowStep.到测试保压位下方2; + if (TurnoverXYIsInTargetPos(targetTurnoverX, targetTurnoverY)) + { + logInfo = GetClassName() + $"已到测试保压位下方1 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.到测试保压位下方2; + } + else + { + Step = ETurnoverFlowStep.到测试保压位上方; + } } break; case ETurnoverFlowStep.到测试保压位下方2: - targetPos = SysConfigParam.GetValue("PressZ"); - errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.PressLowSpeed); - if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) + if (TurnoverXYIsInTargetPos(targetTurnoverX, targetTurnoverY)) { - if (GlobalVar.VirtualAxis) + targetPressZ = SysConfigParam.GetValue("PressZ"); + errCode = AxisControl.PressZ.MovePos(targetPressZ, GlobalVar.PressLowSpeed); + if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + logInfo = GetClassName() + $"到测试保压位下方2"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.等待到测试保压位下方2; + } + else + { + MsgBox.ShowAxisAlarmDialog(AxisControl.PressZ, errCode); } - logInfo = GetClassName() + $"到测试保压位下方2"; - MessageQueue.Instance.Insert(logInfo); - Step = ETurnoverFlowStep.等待到测试保压位下方2; } else { - MsgBox.ShowAxisAlarmDialog(AxisControl.PressZ, errCode); + Step = ETurnoverFlowStep.到测试保压位上方; } break; case ETurnoverFlowStep.等待到测试保压位下方2: @@ -1138,6 +1210,7 @@ namespace Rs.MotionPlat.Flow { Thread.Sleep(100); //if(Ops.IsArrived(AxisControl.PressZ) || GlobalVar.VirtualAxis) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { logInfo = GetClassName() + $"已到测试保压位下方2 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; MessageQueue.Instance.Insert(logInfo); @@ -1146,6 +1219,10 @@ namespace Rs.MotionPlat.Flow VacManager.TestTrayVacSuction(EVacOperator.Close, false, willTestSlot.Select(s => s.Index).ToArray()); Step = ETurnoverFlowStep.通知中控开始测试; } + else + { + Step = ETurnoverFlowStep.到测试保压位上方; + } } break; case ETurnoverFlowStep.通知中控开始测试: @@ -1179,7 +1256,7 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.测试完成抬起到高速位: double curPos = Ops.GetCurPosition(AxisAlias.PressZ); - if(Math.Abs(curPos-targetPos)<0.1) + if(Math.Abs(curPos- SysConfigParam.GetValue("PressSafeZ")) <1) { Step = ETurnoverFlowStep.测试完成抬起安全位; } @@ -1187,13 +1264,13 @@ namespace Rs.MotionPlat.Flow { if (GlobalVar.EnableTwoSpeed) { - targetPos = SysConfigParam.GetValue("PressZ") + GlobalVar.PressLowSpeedOffset; - errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.PressLowSpeed); + targetPressZ = SysConfigParam.GetValue("PressZ") + GlobalVar.PressLowSpeedOffset; + errCode = AxisControl.PressZ.MovePos(targetPressZ, GlobalVar.PressLowSpeed); } else { - targetPos = SysConfigParam.GetValue("PressSafeZ"); - errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetPressZ = SysConfigParam.GetValue("PressSafeZ"); + errCode = AxisControl.PressZ.MovePos(targetPressZ, GlobalVar.WholeSpeed); } if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { @@ -1220,8 +1297,8 @@ namespace Rs.MotionPlat.Flow } break; case ETurnoverFlowStep.测试完成抬起安全位: - targetPos = SysConfigParam.GetValue("PressSafeZ"); - errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetPressZ = SysConfigParam.GetValue("PressSafeZ"); + errCode = AxisControl.PressZ.MovePos(targetPressZ, GlobalVar.WholeSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -1294,12 +1371,12 @@ namespace Rs.MotionPlat.Flow //-----------------------------------------------测试位下料--------------------------------------------------------------------------------------------------------- case ETurnoverFlowStep.到测试取料位上方: - targetPos = SysConfigParam.GetValue("PressTakeX"); - errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverX = SysConfigParam.GetValue("PressTakeX"); + errCode = AxisControl.TurnoverX.MovePos(targetTurnoverX, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - targetPos = SysConfigParam.GetValue("PressTakeY"); - errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverY = SysConfigParam.GetValue("PressTakeY"); + errCode = AxisControl.TurnoverY.MovePos(targetTurnoverY, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -1323,7 +1400,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到测试取料位上方: if (Ops.IsStop(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { logInfo = GetClassName() + $"已运动到测试取料位上方 TurnoverY at:{Ops.GetCurPosition(AxisAlias.TurnoverY)}"; MessageQueue.Instance.Insert(logInfo); @@ -1340,6 +1418,10 @@ namespace Rs.MotionPlat.Flow Step = ETurnoverFlowStep.测试治具取料失败报警; } } + else + { + Step = ETurnoverFlowStep.到测试取料位上方; + } } break; case ETurnoverFlowStep.测试治具取料失败报警: @@ -1418,12 +1500,12 @@ namespace Rs.MotionPlat.Flow } break; case ETurnoverFlowStep.到测试取料位下方1: - targetPos = SysConfigParam.GetValue("PressTakeZ"); + targetTurnoverZ = SysConfigParam.GetValue("PressTakeZ"); if (GlobalVar.EnableTwoSpeed) { - targetPos = targetPos + GlobalVar.PressLowSpeedOffset; + targetTurnoverZ = targetTurnoverZ + GlobalVar.PressLowSpeedOffset; } - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { undealTasks = LoadAndUnloadTask.Instance.GetTestToTurnoverTasks(ETaskDealStatus.Undeal); @@ -1445,14 +1527,21 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到测试取料位下方1: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = GetClassName()+ $"已运动到到测试取料位下方1"; - MessageQueue.Instance.Insert(logInfo); - Step = ETurnoverFlowStep.到测试取料位下方2; + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) + { + logInfo = GetClassName() + $"已运动到到测试取料位下方1"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.到测试取料位下方2; + } + else + { + Step = ETurnoverFlowStep.到测试取料位上方; + } } break; case ETurnoverFlowStep.到测试取料位下方2: - targetPos = SysConfigParam.GetValue("PressTakeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); + targetTurnoverZ = SysConfigParam.GetValue("PressTakeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.PressLowSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -1472,7 +1561,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到测试取料位下方2: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { logInfo = GetClassName() + $"已运动到测试取料位下方2 TurnoverZ at:{Ops.GetCurPosition("TurnoverZ")}"; MessageQueue.Instance.Insert(logInfo); @@ -1486,18 +1576,22 @@ namespace Rs.MotionPlat.Flow VacManager.TestTrayVacBreak(EVacOperator.Open, true, undealTasks.Select(t => t.FromIndex + 1).ToArray()); Step = ETurnoverFlowStep.到测试破关真空位; } + else + { + Step = ETurnoverFlowStep.到测试取料位上方; + } } break; case ETurnoverFlowStep.到测试破关真空位: if(GlobalVar.EnableTwoSpeed) { - targetPos = SysConfigParam.GetValue("PressTakeZ") + GlobalVar.PressLowSpeedOffset; - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); + targetTurnoverZ = SysConfigParam.GetValue("PressTakeZ") + GlobalVar.PressLowSpeedOffset; + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.PressLowSpeed); } else { - targetPos = SysConfigParam.GetValue("PressSafeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverZ = SysConfigParam.GetValue("PressSafeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); } if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) @@ -1527,8 +1621,8 @@ namespace Rs.MotionPlat.Flow } break; case ETurnoverFlowStep.测试位取料完成抬起: - targetPos = SysConfigParam.GetValue("PressSafeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverZ = SysConfigParam.GetValue("PressSafeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); if(errCode== Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -1626,12 +1720,12 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.到周转盘放料位上方: if (CanGoTurnoverTrayPos()) { - targetPos = SysConfigParam.GetValue("TurnoverDumpX"); - errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverX = SysConfigParam.GetValue("TurnoverDumpX"); + errCode = AxisControl.TurnoverX.MovePos(targetTurnoverX, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - targetPos = SysConfigParam.GetValue("TurnoverDumpY"); - errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverY = SysConfigParam.GetValue("TurnoverDumpY"); + errCode = AxisControl.TurnoverY.MovePos(targetTurnoverY, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -1661,12 +1755,17 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到周转盘放料位上方: if (Ops.IsStop(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverX, AxisControl.TurnoverY) || GlobalVar.VirtualAxis) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { logInfo = GetClassName() + $"已运动到周转盘放料位上方"; MessageQueue.Instance.Insert(logInfo); Step = ETurnoverFlowStep.周转盘放料前丢料检测; } + else + { + Step = ETurnoverFlowStep.到周转盘放料位上方; + } } break; case ETurnoverFlowStep.周转盘放料前丢料检测: @@ -1749,13 +1848,13 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.到周转盘放料位下方1: if(GlobalVar.EnableTwoSpeed) { - targetPos = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset; + targetTurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset; } else { - targetPos = SysConfigParam.GetValue("TurnoverTakeZ"); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ"); } - errCode = AxisControl.TurnoverZ.MovePos(targetPos+1, GlobalVar.WholeSpeed); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ + 1, GlobalVar.WholeSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { hasProductNozzles = TransitNozzleManager.Instance.GetHasProductNozzles(); @@ -1777,15 +1876,22 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到周转盘放料位下方1: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = GetClassName() + $"已运动到周转盘放料位下方1"; - MessageQueue.Instance.Insert(logInfo); - Step = ETurnoverFlowStep.到周转盘放料位下方2; + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) + { + logInfo = GetClassName() + $"已运动到周转盘放料位下方1"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.到周转盘放料位下方2; + } + else + { + Step = ETurnoverFlowStep.到周转盘放料位上方; + } } break; case ETurnoverFlowStep.到周转盘放料位下方2: - targetPos = SysConfigParam.GetValue("TurnoverTakeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.PressLowSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -1804,7 +1910,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到周转盘放料位下方2: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - if(Ops.IsArrived(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + //if(Ops.IsArrived(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + if(TurnoverXYIsInTargetPos(targetTurnoverX,targetTurnoverY)) { foreach (TransitNozzle nozzle in hasProductNozzles) { @@ -1822,20 +1929,23 @@ namespace Rs.MotionPlat.Flow VacManager.TransitNozzleVacBreak(EVacOperator.Close, true, hasProductNozzles.Select(n => n.FromIndex + 1).ToArray()); Step = ETurnoverFlowStep.周转盘放料完成抬起1; } - + else + { + Step = ETurnoverFlowStep.到周转盘放料位上方; + } } break; case ETurnoverFlowStep.周转盘放料完成抬起1: if(GlobalVar.EnableTwoSpeed) { - targetPos = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset; - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset; + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.PressLowSpeed); } else { - targetPos = SysConfigParam.GetValue("TurnoverSafeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverSafeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); } if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) @@ -1865,8 +1975,8 @@ namespace Rs.MotionPlat.Flow } break; case ETurnoverFlowStep.周转盘放料完成抬起2: - targetPos = SysConfigParam.GetValue("TurnoverSafeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverZ = SysConfigParam.GetValue("TurnoverSafeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetTurnoverZ, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -2124,12 +2234,12 @@ namespace Rs.MotionPlat.Flow } else { - targetPos = SysConfigParam.GetValue("PressTakeX"); - errCode = AxisControl.TurnoverX.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverX = SysConfigParam.GetValue("PressTakeX"); + errCode = AxisControl.TurnoverX.MovePos(targetTurnoverX, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - targetPos = SysConfigParam.GetValue("PressTakeY"); - errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); + targetTurnoverY = SysConfigParam.GetValue("PressTakeY"); + errCode = AxisControl.TurnoverY.MovePos(targetTurnoverY, GlobalVar.WholeSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -2241,5 +2351,22 @@ namespace Rs.MotionPlat.Flow testTrayHasProductCheckEvent.Set(); }); } + + /// + /// 检测XY是否在目标位置上 + /// + /// + /// + /// + private bool TurnoverXYIsInTargetPos(double xTargetPos, double yTargetPos) + { + double xCurPos = Ops.GetCurPosition(AxisControl.TurnoverX); + double yCurPos = Ops.GetCurPosition(AxisControl.TurnoverY); + if (Math.Abs(xTargetPos - xCurPos) <1 && Math.Abs(yTargetPos - yCurPos) < 1) + { + return true; + } + return false; + } } } diff --git a/Rs.SkyLine/Properties/AssemblyInfo.cs b/Rs.SkyLine/Properties/AssemblyInfo.cs index a8d7b4f..c6f379e 100644 --- a/Rs.SkyLine/Properties/AssemblyInfo.cs +++ b/Rs.SkyLine/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ using System.Runtime.InteropServices; // //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: - [assembly: AssemblyVersion("2.20.24.24")] + [assembly: AssemblyVersion("2.20.24.25")] //[assembly: AssemblyVersion("1.0.0.0")] //[assembly: AssemblyFileVersion("1.0.0.0")]