From 3c83d01715a28654c66f6c3558cf9d5c04a41694 Mon Sep 17 00:00:00 2001 From: lhiven <236881222@qq.com> Date: Sat, 7 Oct 2023 07:25:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=92=8C=E4=B8=AD=E6=8E=A7?= =?UTF-8?q?=E9=80=9A=E4=BF=A1=E5=BC=B9=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Commom/NozzleCollection.cs | 16 +- Rs.SkyLine/Flow/AlarmConstID.cs | 15 + Rs.SkyLine/Flow/LoadAndUnloadTask.cs | 2 +- Rs.SkyLine/Flow/WorkFlow.cs | 800 ++++++++++++++------------ Rs.SkyLine/Program.cs | 2 - 5 files changed, 454 insertions(+), 381 deletions(-) diff --git a/Rs.SkyLine/Commom/NozzleCollection.cs b/Rs.SkyLine/Commom/NozzleCollection.cs index d215417..e6e7348 100644 --- a/Rs.SkyLine/Commom/NozzleCollection.cs +++ b/Rs.SkyLine/Commom/NozzleCollection.cs @@ -117,11 +117,23 @@ namespace Rs.MotionPlat.Commom return null; } - public static Nozzle GetIdelNozzle() + /// + /// 获取空闲的吸嘴 + /// + /// + /// + public static Nozzle GetIdelNozzle(bool turnoverToTray=false) { if (nozzles != null && nozzles.Count > 0) { - return nozzles.Where(n => n.Status == ENozzleStatus.IDLE).First(); + if(turnoverToTray) + { + return nozzles.Where(n => n.NozzleIndex!=1 && n.Status == ENozzleStatus.IDLE).First(); + } + else + { + return nozzles.Where(n => n.Status == ENozzleStatus.IDLE).First(); + } } return null; } diff --git a/Rs.SkyLine/Flow/AlarmConstID.cs b/Rs.SkyLine/Flow/AlarmConstID.cs index c817e31..00fbec7 100644 --- a/Rs.SkyLine/Flow/AlarmConstID.cs +++ b/Rs.SkyLine/Flow/AlarmConstID.cs @@ -62,5 +62,20 @@ namespace Rs.MotionPlat.Flow /// Empty2缺料报警 /// public const int Empty2NullAlarm = 11; + + /// + /// 下相机飞拍失败报警 + /// + public const int DownCameraFlyFailAlarm = 12; + + /// + /// 运动不安全报警 + /// + public const int MoveUnsafeAlarm = 13; + + /// + /// 运动失败报警 + /// + public const int MoveFailAlarm = 14; } } diff --git a/Rs.SkyLine/Flow/LoadAndUnloadTask.cs b/Rs.SkyLine/Flow/LoadAndUnloadTask.cs index 65e5a52..81053d8 100644 --- a/Rs.SkyLine/Flow/LoadAndUnloadTask.cs +++ b/Rs.SkyLine/Flow/LoadAndUnloadTask.cs @@ -532,7 +532,7 @@ namespace Rs.MotionPlat.Flow public TurnoverInfo GetUnLoadTask() { - if (unloadTaskList == null) + if (unloadTaskList == null || unloadTaskList.Where(t => t.Dealed == false).Count()==0) return null; else { diff --git a/Rs.SkyLine/Flow/WorkFlow.cs b/Rs.SkyLine/Flow/WorkFlow.cs index a87dee4..98b7ee0 100644 --- a/Rs.SkyLine/Flow/WorkFlow.cs +++ b/Rs.SkyLine/Flow/WorkFlow.cs @@ -28,7 +28,7 @@ namespace Rs.MotionPlat.Flow 到取料位下方, 等待到取料位下方, 开真空, - 取料真空检测, + 取料完成后真空检测, 取料完成抬起, 等待取料完成抬起, 到下相机拍照起始位, @@ -41,8 +41,8 @@ namespace Rs.MotionPlat.Flow 等待到放料位上方, 到放料位下方, 等待到放料位下方, - 到放料破真空位, - 等待到放料破真空位, + 到放料关破真空位, + 等待到放料关破真空位, 周转盘放料位真空检测, 放料完成抬起, 等待放料完成抬起, @@ -64,10 +64,11 @@ namespace Rs.MotionPlat.Flow 等待Multi料盘搬运完成, IDLE } - + public class WorkFlow : BaseFlow { - private bool grabOK = false; + private WorkFlow() { } + private static WorkFlow instance; public event Action> OnMatchResult; @@ -83,31 +84,15 @@ namespace Rs.MotionPlat.Flow } } - enum ELoadUnloadAction - { - /// - /// 上料 - /// - LOAD, - /// - /// 下料 - /// - UNLOAD - } - private WorkFlow() - { - //HikCamera.Instance.GrabOkEvent += (camIndex,img) => { - // grabOK = true; - //}; - } EWorkFlowStep flowStep = EWorkFlowStep.等待任务; EWorkFlowStep restoreFlowStep = EWorkFlowStep.IDLE; HObject[] imgs = new HObject[2]; List mrs = new List(); - int FetchNum = 0;//取料次数 + int reFetchNum = 0;//重取料次数 bool bFetchBack = false; double targetX = 0.0; double targetY = 0.0; + double targetPos = 0.0; TraySlot tray = new TraySlot(); // List totalTask = new List(); List dealTask = new List(); @@ -125,52 +110,45 @@ namespace Rs.MotionPlat.Flow ErrorCode errCode = ErrorCode.Ok; List testLoadList = new List(); List testUnLoadList = new List(); + private bool turnoverToTray = true; public override void Run() { switch (flowStep) { case EWorkFlowStep.等待任务: - if (LoadAndUnloadTask.Instance.Count > 0 && WorkEnvironment.Instance.EnvironmentOk) - { - if(LoadAndUnloadTask.Instance.CanRunTask()) - { - if(LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestLoad)>0) - { - logInfo = $"接收到测试工位上料任务"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - flowStep = EWorkFlowStep.测试工位上料; - } - else if(LoadAndUnloadTask.Instance.GetTaskNum( ETaskMode.TestUnload)>0) - { - logInfo = $"接收到测试工位下料任务"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - flowStep = EWorkFlowStep.测试工位下料; - } - else - { - logInfo = $"接收到排料任务"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - flowStep = EWorkFlowStep.到取料位上方; - } - } - } + WaitTask(); break; case EWorkFlowStep.到取料位上方: //先取下料任务,再取上料任务,最后取换料任务 - if(LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Unload)>0) - { - curTask = LoadAndUnloadTask.Instance.GetUnLoadTask(); - } - else if(LoadAndUnloadTask.Instance.GetTaskNum( ETaskMode.Load)>0) + if(turnoverToTray) { - curTask = LoadAndUnloadTask.Instance.GetLoadTask(); + if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Unload) > 0) + { + curTask = LoadAndUnloadTask.Instance.GetUnLoadTask(); + } + else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Load) > 0) + { + curTask = LoadAndUnloadTask.Instance.GetLoadTask(); + } + else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Change) > 0) + { + curTask = LoadAndUnloadTask.Instance.GetChangeTask(); + } } - else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Change) > 0) + else { - curTask = LoadAndUnloadTask.Instance.GetChangeTask(); + if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Load) > 0) + { + curTask = LoadAndUnloadTask.Instance.GetLoadTask(); + } + else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Unload) > 0) + { + curTask = LoadAndUnloadTask.Instance.GetUnLoadTask(); + } + else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Change) > 0) + { + curTask = LoadAndUnloadTask.Instance.GetChangeTask(); + } } curNozzle = NozzleManager.GetIdelNozzle(); if (curTask!=null && curNozzle != null) @@ -180,35 +158,28 @@ namespace Rs.MotionPlat.Flow curSlotPoint = null; if (curTask.FromType == TurnoverType.Turnover) { - logInfo = $"吸嘴 {curNozzle.NozzleIndex} 去周转盘 {curTask.FromIndex + 1} 号穴位取料"; curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Turnover", curTask.FromIndex + 1, EPointType.RUN); + logInfo = $"[{curNozzle.NozzleIndex}]号排料吸嘴到周转盘[{curTask.FromIndex + 1}]号穴位取料"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); } else if (curTask.FromType == TurnoverType.ToBeTested) { TraySlot slot = GlobalTray.InputTray.GetSlot(ESlotStatus.Have); if (slot != null) { - logInfo = $"吸嘴{curNozzle.NozzleIndex} 去Input盘 {slot.Index} 号穴位取料"; curSlotPoint = TrayPointManager.GetSlotPoint(GlobalVar.CurRecipe, "Input", slot.Index, EPointType.BASE); - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); + logInfo = $"[{curNozzle.NozzleIndex}]吸排料嘴去Input盘[{slot.Index}]号穴位取料"; + MessageQueue.Instance.Insert(logInfo); } else { - // Msg.ShowInfo("Input料盘缺料,请手动切盘后点击确定"); - // GlobalTray.InputTray.ResetTray(); - // GlobalTray.InputTray.Fill(); - logInfo = "检测到Input料盘无料,准备上料盘"; + logInfo = "检测到Input料盘无料,准备上切盘"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); TakeTrayFlow.Instance.Take(EStockType.Input, EStockType.Empty1, ELoadUnloadType.Unload); restoreFlowStep = EWorkFlowStep.到取料位上方; flowStep = EWorkFlowStep.等待Input料盘搬运完成; } } - if (curSlotPoint != null) { nozzleDist = TrayPointManager.GetDistToNozzle1(curNozzle.NozzleIndex); @@ -219,11 +190,26 @@ namespace Rs.MotionPlat.Flow { //if(Ops.IsHomedAndNearStartPos($"NozzleR{NozzleIndex}")) { - 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) + if(errCode== ErrorCode.Ok|| GlobalVar.VirtualAxis) + { + errCode = AxisControl.GetAxis($"NozzleR{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"NozzleR{curNozzle.NozzleIndex}StartPos"), (int)(GlobalVar.WholeSpeed)); + if (errCode == ErrorCode.Ok | GlobalVar.VirtualAxis) + { + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + flowStep = EWorkFlowStep.等待到取料位上方; + } + else + { + //TestCenterMessageBox.Show(1, $"轴NozzleR{curNozzle.NozzleIndex}点位运动失败,ret={errCode},请单独复位该轴后点击确定", ETipButton.Yes); + } + } + else { - flowStep = EWorkFlowStep.等待到取料位上方; + //TestCenterMessageBox.Show(1, $"轴LoadY点位运动失败,ret={errCode},请单独复位该轴后点击确定", ETipButton.Yes); } } //else @@ -231,163 +217,136 @@ namespace Rs.MotionPlat.Flow // Msg.ShowError($"吸头 NozzleR{NozzleIndex} 不在起始位,请手动手动回原后运动到起始位"); // } } + else + { + //TestCenterMessageBox.Show(1, $"轴LoadX点位运动失败,ret={errCode},请单独复位该轴后点击确定", ETipButton.Yes); + } } } else { - logInfo = "x y move isn't safe"; + logInfo = "x y r move isn't safe"; Msg.ShowError(logInfo); - LogHelper.Error(logInfo); MessageQueue.Instance.Warn(logInfo); } } break; + case EWorkFlowStep.等待到取料位上方: if (Ops.IsStop("LoadX", "LoadY", $"NozzleR{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "已运动到取料位上方"; - Thread.Sleep(100); + logInfo = "已运动到取料位上方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = EWorkFlowStep.到取料位下方; - } break; + case EWorkFlowStep.到取料位下方: - if(GlobalVar.VirtualAxis) - { - Thread.Sleep(GlobalVar.VirtualAxisMoveTime); - flowStep = EWorkFlowStep.等待到取料位下方; - } - else + if (AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").HomeStatus == EHomeStatus.Finished || GlobalVar.VirtualAxis) { - if (AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").HomeStatus == EHomeStatus.Finished) + logInfo = "准备运动到取料位下方"; + MessageQueue.Instance.Insert(logInfo); + if (curTask.FromType == TurnoverType.Turnover) { - logInfo = "准备运动到取料位下方"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - if (curTask.FromType == TurnoverType.Turnover) - { - errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(GetVacOffsetHeight(FetchNum) + SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed); - } - else if (curTask.FromType == TurnoverType.ToBeTested) - { - errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(GetVacOffsetHeight(FetchNum) + SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed); - } - if (errCode == ErrorCode.Ok) - { - flowStep = EWorkFlowStep.等待到取料位下方; - } + targetPos = GetVacOffsetHeight(reFetchNum) + SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"); } - else + else if (curTask.FromType == TurnoverType.ToBeTested) { - logInfo = $"NozzleZ{curNozzle.NozzleIndex} 不在原点,请手动回原后点击确定"; - Msg.ShowError(logInfo); - LogHelper.Error(logInfo); - + targetPos = GetVacOffsetHeight(reFetchNum) + SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight"); + } + errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPos, GlobalVar.WholeSpeed); + if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) + { + if(GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + flowStep = EWorkFlowStep.等待到取料位下方; } } - + else + { + logInfo = $"NozzleZ{curNozzle.NozzleIndex} 不在原点,请手动回原后点击确定"; + MessageQueue.Instance.Warn(logInfo); + TestCenterMessageBox.Show(1111, logInfo, ETipButton.Ok); + TestCenterMessageBox.WaitResult(1111); + } break; + case EWorkFlowStep.等待到取料位下方: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { logInfo = "已运动到取料位下方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); flowStep = EWorkFlowStep.开真空; } break; + case EWorkFlowStep.开真空: - if(GlobalVar.VirtualAxis) - { - flowStep = EWorkFlowStep.取料完成抬起; - } - else + /*打开排料吸嘴真空吸*/ + Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); + Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime); + logInfo = $"打开{curNozzle.NozzleIndex}号排料吸嘴真空吸"; + MessageQueue.Instance.Insert(logInfo); + if (curTask.FromType == TurnoverType.Turnover) { - Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); - Thread.Sleep(GlobalVar.LoadNozzleOpenVacSuctionDelaytime); - logInfo = $"打开{curNozzle.NozzleIndex}号吸嘴真空吸"; + /*关闭周转盘真空吸*/ + logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空吸"; + Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空吸"); + Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime); + MessageQueue.Instance.Insert(logInfo); + /*打开周转盘真空破*/ + logInfo = $"打开周转盘{curTask.FromIndex + 1}号穴位真空破"; + Ops.On($"周转盘{curTask.FromIndex + 1}号穴位真空破"); + Thread.Sleep(GlobalVar.TurnoverTrayOpenVacBreakDelaytime); + MessageQueue.Instance.Insert(logInfo); + /*关闭周转盘真空破*/ + logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空破"; + Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空破"); + Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime); MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - if (curTask.FromType == TurnoverType.Turnover) - { - logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空吸"; - Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空吸"); - Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime); - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - logInfo = $"打开周转盘{curTask.FromIndex + 1}号穴位真空破"; - Ops.On($"周转盘{curTask.FromIndex + 1}号穴位真空破"); - Thread.Sleep(GlobalVar.TurnoverTrayOpenVacBreakDelaytime); - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - logInfo = $"关闭周转盘{curTask.FromIndex + 1}号穴位真空破"; - Ops.Off($"周转盘{curTask.FromIndex + 1}号穴位真空破"); - Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime); - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - } - flowStep = EWorkFlowStep.取料完成抬起; } - + flowStep = EWorkFlowStep.取料完成抬起; break; case EWorkFlowStep.取料完成抬起: errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(0, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { + if(GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } logInfo = "取料完成准备抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug (logInfo); flowStep = EWorkFlowStep.等待取料完成抬起; } + else + { + //TestCenterMessageBox.Show(, $"轴NozzleZ{curNozzle.NozzleIndex}运动异常,ret={errCode}", ETipButton.Ok); + } break; case EWorkFlowStep.等待取料完成抬起: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "取料完成已运动到抬起位,准备真空检测"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - flowStep = EWorkFlowStep.取料真空检测; + logInfo = "取料完成已运动到安全位,准备真空检测"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EWorkFlowStep.取料完成后真空检测; } break; - case EWorkFlowStep.取料真空检测: + case EWorkFlowStep.取料完成后真空检测: if (Ops.IsOn($"{curNozzle.NozzleIndex}号吸嘴真空吸检测") || GlobalVar.RunSpace || GlobalVar.VirtualAxis) { - FetchNum = 0; - logInfo = $"吸嘴{curNozzle.NozzleIndex}真空检测 OK"; + reFetchNum = 0; + logInfo = $"【{curNozzle.NozzleIndex}】号排料吸嘴真空检测OK"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - curNozzle.Status = ENozzleStatus.ToUnload; - curNozzle.FromType = curTask.FromType; - curNozzle.ToType = curTask.ToType; - curNozzle.ToIndex = curTask.ToIndex; - curTask.SuckerNo = curNozzle.NozzleIndex ; - curNozzle.TurnoverGUID = curTask.GUID; - if (curTask.FromType == TurnoverType.Turnover) - { - curNozzle.FromFloor = curTask.FromFloor; - curNozzle.SN = curTask.SN; - curNozzle.FromIndex = curTask.FromIndex; - GlobalTray.TurnoverTray.ChangeStatus(curTask.FromIndex+1, ESlotStatus.NotHave); - } - else if (curTask.FromType == TurnoverType.ToBeTested) - { - curNozzle.FromFloor = StockManager.Instance.GetTray(EStockType.Input).GetFloor(); - curNozzle.SN = ""; - curNozzle.FromIndex = GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index-1; - GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave); - } - curNozzle.Update(); - curTask.Dealed = true; + TakeFinishedUpdateNozzleStatus(curNozzle, curTask); int undoTaskNum = LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode); if (undoTaskNum > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) { - logInfo = $"检测到还有{undoTaskNum}条任务未执行,继续执行"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); + logInfo = $"检测到还有{undoTaskNum}条任务未执行,继续取料"; + MessageQueue.Instance.Insert(logInfo); flowStep = EWorkFlowStep.到取料位上方; } else @@ -397,13 +356,15 @@ namespace Rs.MotionPlat.Flow } else { - FetchNum++; - if (FetchNum == 6) + reFetchNum++; + if (reFetchNum == 6) { + ETipButton btnText = (ETipButton.Retry | ETipButton.Skip | ETipButton.Yes); Dictionary buttonText = new Dictionary(); if(curTask.FromType== TurnoverType.ToBeTested) { buttonText.Add(ETipButton.No, "结束上料|EndInput"); + btnText |= ETipButton.No; } buttonText.Add(ETipButton.Yes, "继续|Continue"); buttonText.Add(ETipButton.Skip, "跳过|Skip"); @@ -411,81 +372,71 @@ namespace Rs.MotionPlat.Flow //DialogResult dr = Msg.ShowError($"吸嘴{curNozzle.NozzleIndex}取料{FetchNum}次失败报警,请处理后点击确定", MessageBoxButtons.RetryCancel); //CloseResult cr = new TakeFailMsg().ShowMsg($"吸嘴{curNozzle.NozzleIndex}取料{FetchNum}次失败报警,请处理后点击确定"); //结束上料/跳过/重试/继续 - ETipButton btnText = (ETipButton.Retry | ETipButton.Skip | ETipButton.Yes | ETipButton.No); - alarmInfo = $"吸嘴{curNozzle.NozzleIndex}取料{FetchNum}次失败报警,请处理后点击确定"; + //ETipButton btnText = (ETipButton.Retry | ETipButton.Skip | ETipButton.Yes | ETipButton.No); + alarmInfo = $"【{curNozzle.NozzleIndex}】排料吸嘴取料{reFetchNum}次失败"; TestCenterMessageBox.Show(AlarmConstID.TrayTakeFailAlarm,alarmInfo , btnText); SchedulingMessageBox box = TestCenterMessageBox.WaitResult(AlarmConstID.TrayTakeFailAlarm); - if (box.Button== ETipButton.Retry) - { - FetchNum = 0; - flowStep = EWorkFlowStep.到取料位下方; - } - else if (box.Button== ETipButton.Skip)//switch + switch (box.Button) { - 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 = EWorkFlowStep.到取料位上方; - } - else - { - flowStep = EWorkFlowStep.到下相机拍照起始位; - } - } - else if(box.Button== ETipButton.No)//结束上料 - { - FetchNum = 0; - TestCenter.Instance.EndInput(); - LoadAndUnloadTask.Instance.ClearUndoTask(); - if(NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count>0) - { - flowStep = EWorkFlowStep.到下相机拍照起始位; - } - else - { - flowStep = EWorkFlowStep.任务结束到安全位; - } - } - else if (box.Button== ETipButton.Yes)//继续 - { - 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 = EWorkFlowStep.到取料位上方; - } - else - { - flowStep = EWorkFlowStep.到下相机拍照起始位; - } + case ETipButton.Yes://继续 + reFetchNum = 0; + logInfo = $"【{curNozzle.NozzleIndex}】号排料吸嘴真空检测NG但选择了继续执行"; + MessageQueue.Instance.Insert(logInfo); + TakeFinishedUpdateNozzleStatus(curNozzle, curTask); + int undoTaskNum = LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode); + if (undoTaskNum > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) + { + logInfo = $"检测到还有{undoTaskNum}条任务未执行,继续取料"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EWorkFlowStep.到取料位上方; + } + else + { + flowStep = EWorkFlowStep.到下相机拍照起始位; + } + break; + case ETipButton.No: + reFetchNum = 0; + TestCenter.Instance.EndInput(); + LoadAndUnloadTask.Instance.ClearUndoTask(); + if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count > 0) + { + flowStep = EWorkFlowStep.到下相机拍照起始位; + } + else + { + flowStep = EWorkFlowStep.任务结束到安全位; + } + break; + case ETipButton.Retry: + reFetchNum = 0; + flowStep = EWorkFlowStep.到取料位下方; + break; + case ETipButton.Skip: + reFetchNum = 0; + if (curTask.FromType == TurnoverType.Turnover) + { + GlobalTray.TurnoverTray.ChangeStatus(curTask.FromIndex + 1, ESlotStatus.NotHave); + curTask.Dealed = true; + } + else if (curTask.FromType == TurnoverType.ToBeTested) + { + GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave); + } + undoTaskNum = LoadAndUnloadTask.Instance.GetTaskNum(curTask.taskMode); + if (undoTaskNum > 0 && NozzleManager.GetNozzlesByStatus(ENozzleStatus.IDLE).Count > 0) + { + logInfo = $"跳过后检测到还有{undoTaskNum}条任务未执行,继续取料"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EWorkFlowStep.到取料位上方; + } + else + { + flowStep = EWorkFlowStep.到下相机拍照起始位; + } + break; + default: + break; } } else @@ -497,9 +448,9 @@ namespace Rs.MotionPlat.Flow case EWorkFlowStep.到下相机拍照起始位: if (XYCanMove() || GlobalVar.VirtualAxis) { + turnoverToTray = !turnoverToTray; logInfo = "到下相机拍照起始位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); if(!GlobalVar.VirtualAxis) { ImageProcess.ClearAutoTrigger(); @@ -527,12 +478,11 @@ namespace Rs.MotionPlat.Flow { logInfo = "已运动到下相机拍照起始位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - Thread.Sleep(100); if (!GlobalVar.VirtualAxis) { HikCamera.Instance.SetTrigger("locationCamera", ETriggerMode.Auto); } + List grabPoints = new List(); //获取有几个吸嘴需要拍照 needGrabNum = NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count(); @@ -556,6 +506,10 @@ namespace Rs.MotionPlat.Flow { flowStep = EWorkFlowStep.到下相机拍照结束位; } + else + { + //TestCenterMessageBox.Show(1,$"轴LoadX运动异常,ret={errCode}", ETipButton.Ok); + } } break; @@ -564,37 +518,38 @@ namespace Rs.MotionPlat.Flow { logInfo = "到下相机拍照结束位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); IoManager.Instance.WriteOut("下左相机光源触发", 1); Thread.Sleep(50); if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)[0].ToType == TurnoverType.Turnover) { - AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle1CenterX") + 10, GlobalVar.FlyCameraSpeed); + errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle1CenterX") + 10, GlobalVar.FlyCameraSpeed); } else { - AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle{needGrabNum}CenterX") - 10, GlobalVar.FlyCameraSpeed); + errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue($"Nozzle{needGrabNum}CenterX") - 10, GlobalVar.FlyCameraSpeed); + } + if(errCode== ErrorCode.Ok) + { + flowStep = EWorkFlowStep.等待到下相机拍照结束位; + } + else + { + //TestCenterMessageBox.Show(1,$"轴LoadX运动异常,ret={errCode}", ETipButton.Ok); } - - flowStep = EWorkFlowStep.等待到下相机拍照结束位; } break; case EWorkFlowStep.等待到下相机拍照结束位: - Stopwatch stopwatch = new Stopwatch(); - if (Ops.IsStop("LoadX") || GlobalVar.VirtualAxis) { logInfo = "已运动到下相机拍照结束位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); if(!GlobalVar.VirtualAxis) { AxisControl.LoadX.ClearCompare(1); } IoManager.Instance.WriteOut("下左相机光源触发", 0); flowStep = EWorkFlowStep.等待相机拍照完成; - stopwatch.Start(); } break; case EWorkFlowStep.等待相机拍照完成: @@ -603,8 +558,6 @@ namespace Rs.MotionPlat.Flow { logInfo = "相机拍照完成,准备处理照片"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)[0].ToType == TurnoverType.Turnover) { imgs = imgs.Reverse().ToArray(); @@ -614,15 +567,16 @@ namespace Rs.MotionPlat.Flow foreach(Nozzle nl in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)) { if(string.IsNullOrEmpty(nl.SN)) - nl.SN = (nl.FromIndex+1).ToString().PadLeft(18, '0'); - //nl.SN = GuidHelper.Create(); + { + nl.SN = (nl.FromIndex + 1).ToString().PadLeft(18, '0'); + } } - flowStep = EWorkFlowStep.到放料位上方; mrs = new List(); for(int i=0;i($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"), GlobalVar.WholeSpeed); + targetPos = SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"); } else { - errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight") +3, GlobalVar.WholeSpeed); + targetPos = SysConfigParam.GetValue($"TrayNozzle{curNozzle.NozzleIndex}TakeHeight") + 1; } - + errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPos, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { + VirtualAxisSleep(); flowStep = EWorkFlowStep.等待到放料位下方; } + else + { + MoveFailAlarm($"NozzleZ{curNozzle.NozzleIndex}", errCode); + } break; case EWorkFlowStep.等待到放料位下方: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "已运动到放料位下方"; + logInfo = $"【{curNozzle.NozzleIndex}】号排料吸嘴已运动到放料位下方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); if (curNozzle.ToType== TurnoverType.Turnover) { + /*打开周转盘真空吸*/ + MessageQueue.Instance.Insert($"打开周转盘{curNozzle.ToIndex + 1}号穴位真空吸"); Ops.On($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸"); Thread.Sleep(GlobalVar.TurnoverTrayOpenVacSuctionDelaytime); + /*关闭排料吸嘴真空吸*/ + MessageQueue.Instance.Insert($"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸"); Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀");//关闭真空 Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); + /*打开排料吸嘴真空破*/ + MessageQueue.Instance.Insert($"打开{curNozzle.NozzleIndex}号排料吸嘴真空破"); Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime); - Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); - Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime); - flowStep = EWorkFlowStep.放料完成抬起; + } else { + /*关闭排料吸嘴真空吸*/ + MessageQueue.Instance.Insert($"关闭{curNozzle.NozzleIndex}号排料吸嘴真空吸"); Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空吸电磁阀"); Thread.Sleep(GlobalVar.LoadNozzleCloseVacSuctionDelaytime); + /*关闭排料吸嘴真空吸*/ + MessageQueue.Instance.Insert($"打开{curNozzle.NozzleIndex}号排料吸嘴真空破"); Ops.On($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); Thread.Sleep(GlobalVar.LoadNozzleOpenVacBreakDelaytime); + /*关闭排料吸嘴真空吸*/ + MessageQueue.Instance.Insert($"关闭{curNozzle.NozzleIndex}号排料吸嘴真空破"); Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime); flowStep = EWorkFlowStep.放料完成抬起; } - } break; - //case EWorkFlowStep.到放料破真空位: - // errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight")+1, GlobalVar.WholeSpeed); - // if (errCode == ErrorCode.Ok) - // { - // flowStep = EWorkFlowStep.等待到放料破真空位; - // } - // break; - //case EWorkFlowStep.等待到放料破真空位: - // if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}")) - // { - // flowStep = EWorkFlowStep.周转盘放料位真空检测; - // } - - // break; - //case EWorkFlowStep.周转盘放料位真空检测: - // if (curNozzle.ToType == TurnoverType.Turnover) - // { - // Thread.Sleep(100); - // if(Ops.IsOn($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测") || GlobalVar.RunSpace) - // { - // flowStep = EWorkFlowStep.放料完成抬起; - // } - // else - // { - // DialogResult dr = Msg.ShowError($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常,点击确定后跳过"); - // if (dr == DialogResult.OK) - // { - // flowStep = EWorkFlowStep.放料完成抬起; - // } - // } - // } - // break; + case EWorkFlowStep.到放料关破真空位: + targetPos = SysConfigParam.GetValue($"TurnoverNozzle{curNozzle.NozzleIndex}TakeHeight"); + errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(targetPos + 1, GlobalVar.WholeSpeed); + if (errCode == ErrorCode.Ok) + { + MessageQueue.Instance.Insert($"{curNozzle.NozzleIndex}号排料吸嘴周转盘放料完成,准备微微抬起"); + flowStep = EWorkFlowStep.等待到放料关破真空位; + } + else + { + MoveFailAlarm($"NozzleZ{curNozzle.NozzleIndex}", errCode); + } + break; + case EWorkFlowStep.等待到放料关破真空位: + if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}")) + { + /*关闭排料吸嘴真空破*/ + Ops.Off($"{curNozzle.NozzleIndex}号吸嘴真空破电磁阀"); + Thread.Sleep(GlobalVar.LoadNozzleCloseVacBreakDelaytime); + MessageQueue.Instance.Insert($"{curNozzle.NozzleIndex}号排料吸嘴微微抬起后关闭破真空"); + flowStep = EWorkFlowStep.放料完成抬起; + } + break; case EWorkFlowStep.放料完成抬起: errCode = AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").MovePos(0, GlobalVar.WholeSpeed); if (errCode == ErrorCode.Ok || GlobalVar.VirtualAxis) { - logInfo = "放料完成抬起"; + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + logInfo = $"{curNozzle.NozzleIndex}号排料吸嘴放料完成抬起"; MessageQueue.Instance.Insert(logInfo); flowStep = EWorkFlowStep.等待放料完成抬起; } + else + { + MoveFailAlarm($"NozzleZ{curNozzle.NozzleIndex}", errCode); + } break; case EWorkFlowStep.等待放料完成抬起: if (Ops.IsStop($"NozzleZ{curNozzle.NozzleIndex}") || GlobalVar.VirtualAxis) { - logInfo = "放料完成已运动到抬起位,准备真空检测"; + logInfo = $"{curNozzle.NozzleIndex}号排料吸嘴放料完成已起位,准备真空检测"; MessageQueue.Instance.Insert(logInfo); flowStep = EWorkFlowStep.放料真空检测; } @@ -959,17 +909,19 @@ namespace Rs.MotionPlat.Flow { if (Ops.IsOn($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测") || GlobalVar.RunSpace) { - logInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测 OK"; + logInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸检测OK"; MessageQueue.Instance.Insert(logInfo); flowStep = EWorkFlowStep.放料任务完成; } else { - logInfo = $"放料时周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常"; + logInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常"; MessageQueue.Instance.Warn(logInfo); - DialogResult dr = Msg.ShowError($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常,点击确定后跳过"); - //TestCenterMessageBox.Show(AlarmConstID) - if (dr == DialogResult.OK) + //DialogResult dr = Msg.ShowError($"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常,点击确定后跳过"); + alarmInfo = $"周转盘{curNozzle.ToIndex + 1}号穴位真空吸异常"; + TestCenterMessageBox.Show(AlarmConstID.TurnoverDumpFailAlarm, alarmInfo, ETipButton.Ok); + SchedulingMessageBox box = TestCenterMessageBox.WaitResult(AlarmConstID.TurnoverDumpFailAlarm); + if (box.Button== ETipButton.Ok) { flowStep = EWorkFlowStep.放料任务完成; } @@ -984,6 +936,7 @@ namespace Rs.MotionPlat.Flow logInfo = "放料任务完成"; MessageQueue.Instance.Insert(logInfo); AxisControl.GetAxis($"NozzleZ{curNozzle.NozzleIndex}").Home(); + MessageQueue.Instance.Insert($"{curNozzle.NozzleIndex}号排料吸嘴回原"); //Ops.HomeAndGoStartPos($"NozzleR{NozzleIndex}"); if (curNozzle.ToType == TurnoverType.Turnover) { @@ -1014,7 +967,6 @@ namespace Rs.MotionPlat.Flow GlobalTray.MultiTray.ChangeStatus(downSlot.Index, ESlotStatus.Have); } curNozzle.Reset(); - Thread.Sleep(100); LoadAndUnloadTask.Instance.AddTurnoverResult(curNozzle); if (NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload).Count > 0) { @@ -1034,17 +986,28 @@ namespace Rs.MotionPlat.Flow break; case EWorkFlowStep.任务结束到安全位: - logInfo = "任务结束到安全位"; + logInfo = "排料任务结束到安全位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); errCode = AxisControl.LoadX.MovePos(SysConfigParam.GetValue("LoadXStartPos"), GlobalVar.WholeSpeed); if(errCode== ErrorCode.Ok || GlobalVar.VirtualAxis) { errCode = AxisControl.LoadY.MovePos(SysConfigParam.GetValue("LoadYStartPos"), GlobalVar.WholeSpeed); if(errCode== ErrorCode.Ok || GlobalVar.VirtualAxis) { + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } flowStep = EWorkFlowStep.等待任务结束到安全位; } + else + { + MoveFailAlarm(AxisAlias.LoadY, errCode); + } + } + else + { + MoveFailAlarm(AxisAlias.LoadX, errCode); } break; case EWorkFlowStep.等待任务结束到安全位: @@ -1183,6 +1146,73 @@ namespace Rs.MotionPlat.Flow } } + /// + /// 取料完成后更新吸嘴状态 + /// + private void TakeFinishedUpdateNozzleStatus(Nozzle nozzle,TurnoverInfo turnoverInfo) + { + nozzle.Status = ENozzleStatus.ToUnload; + nozzle.FromType = turnoverInfo.FromType; + nozzle.ToType = turnoverInfo.ToType; + nozzle.ToIndex = turnoverInfo.ToIndex; + turnoverInfo.SuckerNo = nozzle.NozzleIndex; + nozzle.TurnoverGUID = turnoverInfo.GUID; + if (turnoverInfo.FromType == TurnoverType.Turnover) + { + nozzle.FromFloor = turnoverInfo.FromFloor; + nozzle.SN = turnoverInfo.SN; + nozzle.FromIndex = turnoverInfo.FromIndex; + GlobalTray.TurnoverTray.ChangeStatus(turnoverInfo.FromIndex + 1, ESlotStatus.NotHave); + } + else if (turnoverInfo.FromType == TurnoverType.ToBeTested) + { + nozzle.FromFloor = StockManager.Instance.GetTray(EStockType.Input).GetFloor(); + nozzle.SN = ""; + nozzle.FromIndex = GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index - 1; + GlobalTray.InputTray.ChangeStatus(GlobalTray.InputTray.GetSlot(ESlotStatus.Have).Index, ESlotStatus.NotHave); + } + nozzle.Update(); + turnoverInfo.Dealed = true; + } + /// + /// 等待任务 + /// + private void WaitTask() + { + if (LoadAndUnloadTask.Instance.Count > 0 && WorkEnvironment.Instance.EnvironmentOk) + { + if (LoadAndUnloadTask.Instance.CanRunTask()) + { + if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestLoad) > 0) + { + logInfo = $"接收到测试工位上料任务"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EWorkFlowStep.测试工位上料; + } + else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestUnload) > 0) + { + logInfo = $"接收到测试工位下料任务"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EWorkFlowStep.测试工位下料; + } + else + { + turnoverToTray = true; + logInfo = $"接收到排料任务"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EWorkFlowStep.到取料位上方; + } + } + } + } + + /// + /// 获取拍照点位 + /// + private void GetGrabPoints() + { + + } private double GetVacOffsetHeight(int fetchNum) { switch (fetchNum) @@ -1231,5 +1261,23 @@ namespace Rs.MotionPlat.Flow //} return true; } + + private void MoveFailAlarm(string axisname,ErrorCode _errCode) + { + string alarmStr = $"轴{axisname}运动异常,ret={_errCode}"; + TestCenterMessageBox.Show(AlarmConstID.MoveFailAlarm, alarmInfo, ETipButton.Ok); + SchedulingMessageBox box = TestCenterMessageBox.WaitResult(AlarmConstID.MoveFailAlarm); + } + + /// + /// 如果是虚拟轴,则模拟等待一下 + /// + private void VirtualAxisSleep() + { + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + } } } diff --git a/Rs.SkyLine/Program.cs b/Rs.SkyLine/Program.cs index 0c02dd7..60def3e 100644 --- a/Rs.SkyLine/Program.cs +++ b/Rs.SkyLine/Program.cs @@ -20,8 +20,6 @@ namespace Rs.MotionPlat static void Main() { - List list = RearrangeManager.GeneralRearrangeTask( TurnoverType.ToBeTested, 15, 1); - Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new FormIO2());