From 68dca5647aa040fa0a383e027f1e66c2e90fa5de Mon Sep 17 00:00:00 2001 From: lhiven <236881222@qq.com> Date: Sat, 27 Jan 2024 13:46:55 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=87=8D=E6=8E=92=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=BD=93=E5=8F=96=E6=96=99=E5=A4=B1=E8=B4=A5=E6=97=B6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8A=A5=E8=AD=A6=E5=A4=84=E7=90=86=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Commom/Ops.cs | 14 + Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs | 2 +- Rs.SkyLine/Flow/RearrangeFlow.cs | 344 +++++++++----------- 3 files changed, 175 insertions(+), 185 deletions(-) diff --git a/Rs.SkyLine/Commom/Ops.cs b/Rs.SkyLine/Commom/Ops.cs index 0a50528..1b00b30 100644 --- a/Rs.SkyLine/Commom/Ops.cs +++ b/Rs.SkyLine/Commom/Ops.cs @@ -562,5 +562,19 @@ namespace Rs.MotionPlat.Commom return false; } } + + /// + /// 判断轴是否在原点 + /// + /// + /// + public static bool IsInOrg(string axisName) + { + IAxis axis=AxisControl.GetAxis(axisName); + axis.GetOrgStatus(out bool isInOrg); + if (isInOrg) + return true; + return false; + } } } diff --git a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs index 32b714b..51537f8 100644 --- a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs @@ -373,7 +373,7 @@ namespace Rs.MotionPlat.Flow } else { - logInfo = GetClassName()+ $"NozzleZ{curNozzle.NozzleIndex} 不在原点,请手动回原后点击确定"; + logInfo = GetClassName()+ $"NozzleZ{curNozzle.NozzleIndex} 轴状态未回原,请手动回原后点击确定"; MessageQueue.Instance.Warn(logInfo); MsgBox.ShowDialog(AlarmConstID.AxisNotAtHomeAlarm, logInfo, ETipButton.Ok); } diff --git a/Rs.SkyLine/Flow/RearrangeFlow.cs b/Rs.SkyLine/Flow/RearrangeFlow.cs index 2efe4a3..ccabc43 100644 --- a/Rs.SkyLine/Flow/RearrangeFlow.cs +++ b/Rs.SkyLine/Flow/RearrangeFlow.cs @@ -1,8 +1,15 @@ -using Rs.Camera; +using Rs.AutoDischarge.V3.Flow; +using Rs.Camera; using Rs.Controls; using Rs.Framework; using Rs.Motion; using Rs.MotionPlat.Commom; +using Rs.MotionPlat.Entitys; +using Rs.MotionPlat.Entitys.Trays; +using Rs.MotionPlat.Flow.Camera; +using Rs.MotionPlat.Flow.NgFlow; +using Rs.MotionPlat.Flow.SafePosFlow; +using Rs.MotionPlat.Flow.SubFlow; using System; using System.Collections.Generic; using System.Diagnostics; @@ -11,6 +18,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using static Rs.MotionPlat.Commom.SchedulingMessageBox; namespace Rs.MotionPlat.Flow { @@ -23,6 +31,7 @@ namespace Rs.MotionPlat.Flow 等待到取料位下方, 开真空, 取料真空检测, + 取料失败报警, 取料完成抬起, 等待取料完成抬起, 到放料位上方, @@ -64,6 +73,8 @@ namespace Rs.MotionPlat.Flow double targetY = 0.0; int FetchNum = 0;//取料次数 ErrorCode errCode = ErrorCode.Ok; + string alarmInfo = string.Empty; + ETrayType traytype; public void Rearrange() { bool finished = false; @@ -78,7 +89,6 @@ namespace Rs.MotionPlat.Flow DischargeFlow.Instance.Stop(); logInfo = $"接收重排任务"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.到取料位上方; } break; @@ -87,10 +97,10 @@ namespace Rs.MotionPlat.Flow curNozzle = NozzleManager.GetIdelNozzle(true); if (curTask != null && curNozzle != null) { - if (SafeControl.Instance.XYCanMove() || GlobalVar.VirtualAxis) + if (DischargeFlow.Instance.XYCanGoLocalArea() || GlobalVar.VirtualAxis) { curSlotPoint = null; - ETrayType traytype = ETrayType.Ok; + traytype = ETrayType.Ok; switch (curTask.FromType) { case TurnoverType.Passed: @@ -107,8 +117,7 @@ namespace Rs.MotionPlat.Flow } logInfo = $"吸嘴{curNozzle.NozzleIndex} 去{traytype}盘 {curTask.FromIndex + 1} 号穴位取料"; curSlotPoint = TrayPointManager.GetSlotPoint(traytype, curTask.FromIndex + 1); - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); + MessageQueue.Instance.Insert(logInfo); if (curSlotPoint != null) { nozzleDist = TrayPointManager.GetDistToNozzle1(curNozzle.NozzleIndex); @@ -128,9 +137,8 @@ namespace Rs.MotionPlat.Flow } else { - logInfo = "x y move isn't safe"; + logInfo = "loady move isn't safe"; Msg.ShowError(logInfo); - LogHelper.Error(logInfo); MessageQueue.Instance.Warn(logInfo); } } @@ -142,63 +150,39 @@ namespace Rs.MotionPlat.Flow logInfo = "已运动到取料位上方"; Thread.Sleep(100); MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.到取料位下方; } break; case ERearrangeFlowStep.到取料位下方: - if (GlobalVar.VirtualAxis) + if (AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").HomeStatus == EHomeStatus.Finished || GlobalVar.VirtualAxis) { - Thread.Sleep(GlobalVar.VirtualAxisMoveTime); - flowStep = ERearrangeFlowStep.等待到取料位下方; + 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.等待到取料位下方; + } } else { - if (AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").HomeStatus == EHomeStatus.Finished) - { - logInfo = "准备运动到取料位下方"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(GetVacOffsetHeight(FetchNum) + SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed); - if (errCode == ErrorCode.Ok) - { - flowStep = ERearrangeFlowStep.等待到取料位下方; - } - } - else - { - logInfo = $"NozzleZ{curNozzle.NozzleIndex} 不在原点,请手动回原后点击确定"; - Msg.ShowError(logInfo); - LogHelper.Error(logInfo); - } + logInfo = $"NozzleZ{curNozzle.NozzleIndex} 轴状态未回原,请手动回原后点击确定"; + Msg.ShowError(logInfo); + LogHelper.Error(logInfo); } - break; case ERearrangeFlowStep.等待到取料位下方: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { logInfo = "已运动到取料位下方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.开真空; } break; case ERearrangeFlowStep.开真空: - if (GlobalVar.VirtualAxis) - { - flowStep = ERearrangeFlowStep.取料完成抬起; - } - else - { - Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); - Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime); - logInfo = $"打开{curNozzle.NozzleIndex}号吸嘴真空吸"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - flowStep = ERearrangeFlowStep.取料完成抬起; - } - + VacManager.DischargeVacSuction(EVacOperator.Open, true, curNozzle.NozzleIndex); + flowStep = ERearrangeFlowStep.取料完成抬起; break; case ERearrangeFlowStep.取料完成抬起: @@ -207,7 +191,6 @@ namespace Rs.MotionPlat.Flow { logInfo = "取料完成准备抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.等待取料完成抬起; } break; @@ -216,7 +199,6 @@ namespace Rs.MotionPlat.Flow { logInfo = "取料完成已运动到抬起位,准备真空检测"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.取料真空检测; } break; @@ -271,111 +253,115 @@ namespace Rs.MotionPlat.Flow } else { - //FetchNum++; - //if (FetchNum == 6) - //{ - // //DialogResult dr = Msg.ShowError($"吸嘴{curNozzle.NozzleIndex}取料{FetchNum}次失败报警,请处理后点击确定", MessageBoxButtons.RetryCancel); - // CloseResult cr = new TakeFailMsg().ShowMsg($"吸嘴{curNozzle.NozzleIndex}取料{FetchNum}次失败报警,请处理后点击确定"); - // if (cr.Result == ECloseButton.Retry) - // { - // FetchNum = 0; - // flowStep = ERearrangeFlowStep.到取料位下方; - // } - // else if (cr.Result == ECloseButton.Skip)//switch - // { - // FetchNum = 0; - // if (curTask.FromType == TurnoverType.Turnover) - // { - // GlobalTray.TurnoverTray.ChangeStatus(curTask.FromIndex + 1, ESlotStatus.NotHave); - // } - // else if (curTask.FromType == TurnoverType.ToBeTested) - // { - // GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave); - // } - // if (LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode) > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) - // { - // flowStep = ERearrangeFlowStep.到取料位上方; - // } - // else - // { - // flowStep = ERearrangeFlowStep.到下相机拍照起始位; - // } - // } - // else if (cr.Result == ECloseButton.EndInput) - // { - // FetchNum = 0; - // TestCenter.Instance.EndInput(); - // LoadAndUnloadTask.Instance.ClearUndoTask(); - // if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count > 0) - // { - // flowStep = ERearrangeFlowStep.到下相机拍照起始位; - // } - // else - // { - // flowStep = ERearrangeFlowStep.任务结束到安全位; - // } - // } - // else if (cr.Result == ECloseButton.Continue) - // { - // FetchNum = 0; - // curNozzle.Status = ENozzleStatus.ToUnload; - // curNozzle.FromType = curTask.FromType; - // curNozzle.FromFloor = curTask.FromFloor; - - // curNozzle.ToType = curTask.ToType; - // curNozzle.ToIndex = curTask.ToIndex; - // curTask.SuckerNo = curNozzle.NozzleIndex; - // curNozzle.TurnoverGUID = curTask.GUID; - // if (curTask.FromType == TurnoverType.Turnover) - // { - // curNozzle.SN = curTask.SN; - // curNozzle.FromIndex = curTask.FromIndex; - // GlobalTray.TurnoverTray.ChangeStatus(curTask.FromIndex + 1, ESlotStatus.NotHave); - // } - // else if (curTask.FromType == TurnoverType.ToBeTested) - // { - // curNozzle.FromIndex = GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index; - // GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave); - // } - // curNozzle.Update(); - // curTask.Dealed = true; - // if (LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode) > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) - // { - // flowStep = ERearrangeFlowStep.到取料位上方; - // } - // else - // { - // if (GlobalVar.VirtualAxis) - // { - // foreach (Nozzle nl in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)) - // { - // if (string.IsNullOrEmpty(nl.SN)) - // nl.SN = nl.FromIndex.ToString().PadLeft(18, '0'); - // //nl.SN = GuidHelper.Create(); - // } - // mrs = new List(); - // for (int i = 0; i < needGrabNum; i++) - // { - // mrs.Add(new MatchResult()); - // } - // flowStep = ERearrangeFlowStep.到放料位上方; - // } - // else - // { - // flowStep = ERearrangeFlowStep.到下相机拍照起始位; - // } + if (FetchNum == 0) + { + //这个时候Z&R回原一次,然后再重新取料 + ZRHomeFlow.Instance.GoHome(curNozzle.NozzleIndex); + } + FetchNum++; + if (FetchNum >= GlobalVar.DischargeRetakeNum) + { + DischargeDumpFlow.Instance.Start(curTask.FromType, curNozzle.NozzleIndex, curNozzle.FromIndex); + alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.料仓tray盘取料报警), curNozzle.NozzleIndex, curNozzle.FromIndex + 1); + flowStep = ERearrangeFlowStep.取料失败报警; + } + else + { + flowStep = ERearrangeFlowStep.到取料位下方; + } + } + break; + //TestCenterMessageBox.Show(AlarmConstID.TrayTakeFailAlarm, alarmInfo, btnText, buttonText); + case ERearrangeFlowStep.取料失败报警: + ETipButton btnText = (ETipButton.Retry | ETipButton.Skip | ETipButton.Yes); + Dictionary buttonText = new Dictionary(); + buttonText.Add(ETipButton.Retry, "重试|Retry"); + buttonText.Add(ETipButton.Skip, "跳过|Skip"); + buttonText.Add(ETipButton.Yes, "移动到安全位|MoveToSafePos"); + int alarmid = AlarmConstID.料仓tray盘取料报警; + SchedulingMessageBox box = MsgBox.ShowDialog(alarmid, alarmInfo, btnText, buttonText); + switch (box.Button) + { + case ETipButton.Retry: + logInfo = GetClassName() + $"选择了重试,继续取料"; + MessageQueue.Instance.Insert(logInfo); + if (curTask.FromType == TurnoverType.ToBeTested) + { + //检测料盘是否在上料位,在上料位则继续取料,不在上料位,则通知料仓把料盘送到上料位 + if (!StockManager.Instance.GetStock(ETrayType.Input).HasTray()) + { + logInfo = GetClassName() + $"检测到料盘不在就绪状态,上料盘"; + MessageQueue.Instance.Insert(logInfo); + StockManager.Instance.GetStock(ETrayType.Input).Load(EStockTrayLoadMode.AfterBacked, null);//.Load(EStockType.Input, EStockTrayLoadMode.AfterBacked); + } + } + FetchNum = 0; + flowStep = ERearrangeFlowStep.到取料位上方; + break; + case ETipButton.Skip: + SlotProductHasOrNotResult haveProduct = null; + logInfo = GetClassName() + "选择了跳过"; + MessageQueue.Instance.Insert(logInfo); + if (!StockManager.Instance.GetStock(traytype).HasTray()) + { + logInfo = GetClassName() + $"检测到料盘不在上料位"; + MessageQueue.Instance.Insert(logInfo); + StockManager.Instance.GetStock(traytype).Load(EStockTrayLoadMode.AfterBacked, null);//.Load(EStockType.Input, EStockTrayLoadMode.AfterBacked); + logInfo = GetClassName() + $"上料完成,通知相机拍照,检测产品是否已拿走"; + MessageQueue.Instance.Insert(logInfo); + } + haveProduct = UpCameraCheckFlow.Instance.CheckStockTrayHasProduct(traytype, curNozzle.FromIndex + 1, true); + if (!haveProduct.HasProduct) + { + logInfo = GetClassName() + "检测到产品已拿走,流程继续"; + MessageQueue.Instance.Insert(logInfo); + FetchNum = 0; + //执行料仓Tray取料NG时的处理流程,流程处理结束后,流程继续 + GlobalTray.GetTray(traytype).ChangeStatus(curNozzle.FromIndex + 1, ESlotStatus.NotHave); + if (RearrangeTask.HasTask() && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) + { + flowStep = ERearrangeFlowStep.到取料位上方; + } + else + { + flowStep = ERearrangeFlowStep.到放料位上方; + } + } + else + { + alarmInfo = $"检测到{curNozzle.FromIndex + 1}号穴位产品未取出,请处理"; + flowStep = ERearrangeFlowStep.取料失败报警; + } - // } - // } - //} - //else - //{ - // flowStep = ERearrangeFlowStep.到取料位下方; - //} + break; + case ETipButton.Yes://移动到安全位 + //通知料仓把料盘退回到安全位 + if (curTask.FromType == TurnoverType.ToBeTested) + { + logInfo = GetClassName() + $"通知料仓把料盘退回到安全位"; + MessageQueue.Instance.Insert(logInfo); + StockManager.Instance.GetStock(ETrayType.Input).Unload(EStockTrayUnLoadMode.Back, null);//.UnLoad(EStockType.Input, EStockTrayUnLoadMode.Back); + //StockManager.Instance.Wait(EStockType.Input); + logInfo = GetClassName() + $"料仓已退回到安全位"; + MessageQueue.Instance.Insert(logInfo); + } + else if (curTask.FromType == TurnoverType.Turnover) + { + logInfo = GetClassName() + $"通知排料头回安全位"; + MessageQueue.Instance.Insert(logInfo); + DischargeModuleGoSafePosFlow.Instance.GoSafePostion(); + logInfo = GetClassName() + $"排料头已回到安全位"; + MessageQueue.Instance.Insert(logInfo); + } + alarmInfo = $"已运动到安全位,{curNozzle.NozzleIndex}号排料吸嘴取{curNozzle.FromIndex}号穴位产品次失败,请处理"; + flowStep = ERearrangeFlowStep.取料失败报警; + break; + default: + break; } break; case ERearrangeFlowStep.到放料位上方: - if (SafeControl.Instance.XYCanMove() || GlobalVar.VirtualAxis) + if (DischargeFlow.Instance.XYCanGoLocalArea() || GlobalVar.VirtualAxis) { targetX = 0.0; targetY = 0.0; @@ -408,7 +394,7 @@ namespace Rs.MotionPlat.Flow } else { - Msg.ShowError("x y move isn't safe"); + Msg.ShowError("loady move isn't safe"); } break; case ERearrangeFlowStep.等待到放料位上方: @@ -417,7 +403,6 @@ namespace Rs.MotionPlat.Flow Thread.Sleep(100); logInfo = "已运动到放料位上方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.到放料位下方; } @@ -425,7 +410,6 @@ namespace Rs.MotionPlat.Flow case ERearrangeFlowStep.到放料位下方: logInfo = "到放料位下方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight") + 3, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { @@ -435,15 +419,9 @@ namespace Rs.MotionPlat.Flow case ERearrangeFlowStep.等待到放料位下方: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "已运动到放料位下方"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); - Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); - Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); - Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime); - Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); - Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime); + VacManager.DischargeVacSuction(EVacOperator.Close, true, curNozzle.NozzleIndex); + VacManager.DischargeVacBreak(EVacOperator.Open, true, curNozzle.NozzleIndex); + VacManager.DischargeVacBreak(EVacOperator.Close, false, curNozzle.NozzleIndex); flowStep = ERearrangeFlowStep.放料完成抬起; } @@ -454,7 +432,6 @@ namespace Rs.MotionPlat.Flow { logInfo = "放料完成抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.等待放料完成抬起; } break; @@ -463,7 +440,6 @@ namespace Rs.MotionPlat.Flow { logInfo = "放料完成已运动到抬起位,准备真空检测"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = ERearrangeFlowStep.放料真空检测; } break; @@ -473,7 +449,6 @@ namespace Rs.MotionPlat.Flow case ERearrangeFlowStep.放料任务完成: logInfo = "放料任务完成"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").Home(); if (curNozzle.ToType == TurnoverType.Passed) { @@ -510,7 +485,6 @@ namespace Rs.MotionPlat.Flow case ERearrangeFlowStep.任务结束到安全位: logInfo = "任务结束到安全位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue("LoadXStartPos"), GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { @@ -526,17 +500,14 @@ namespace Rs.MotionPlat.Flow { logInfo = "任务结束已回到安全位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); if (RearrangeTask.ReportCenter() > 0) { logInfo = "通知中控任务完成"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); RearrangeTask.RemoveAll(); logInfo = "任务完成,清除任务"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); } MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); finished = true; @@ -550,25 +521,24 @@ namespace Rs.MotionPlat.Flow private double GetVacOffsetHeight(int fetchNum) { - switch (fetchNum) + if (fetchNum == 0) return 0; + //先判断是奇数还是偶数 + int count = 0; + int oddOrEven = fetchNum & 0x01; + + double offsetDisct = 0.0; + if (oddOrEven == 1) { - case 0: - return 0; - case 1: - return -0.1; - case 2: - return -0.2; - case 3: - return -0.3; - case 4: - return 0.1; - case 5: - return 0.2; - case 6: - return 0.3; - default: - return 0; + count = (fetchNum / 2) + 1; + offsetDisct = -0.1 * count; } + + else if (oddOrEven == 0) + { + count = (fetchNum / 2); + offsetDisct = 0.1 * count; + } + return offsetDisct; } private SlotPoint GetSlotPoint(TurnoverType trayType) @@ -593,5 +563,11 @@ namespace Rs.MotionPlat.Flow } return pt; } + private string GetClassName() + { + return string.Empty; + } } + + }