From b9ea59e8579ff8cb93fd031e2f8072ddccf1b4ec Mon Sep 17 00:00:00 2001 From: lhiven Date: Fri, 5 Jan 2024 19:01:57 +0900 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=87=8D=E6=B5=8BNG=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=20=E6=90=AC=E8=BF=90=E6=96=99=E7=9B=98=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=91=A8=E8=BD=AC=E8=BD=B4=E9=98=B2=E5=91=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs | 2 +- Rs.SkyLine/Flow/NormalFlow/TakeTrayFlow.cs | 113 +++++++++++------- .../Flow/SubFlow/NgTrayToInputTrayFlow.cs | 7 +- Rs.SkyLine/Flow/TestCenter.cs | 7 +- Rs.SkyLine/SysConfig/StockControl.cs | 21 ++-- 5 files changed, 87 insertions(+), 63 deletions(-) diff --git a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs index 46685f7..a5929d0 100644 --- a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs @@ -1887,7 +1887,7 @@ namespace Rs.MotionPlat.Flow return false; return true; } - private bool XYCanMove() + public bool XYCanMove() { if (!CanGoTurnoverTray()) return false; diff --git a/Rs.SkyLine/Flow/NormalFlow/TakeTrayFlow.cs b/Rs.SkyLine/Flow/NormalFlow/TakeTrayFlow.cs index 827499b..54898a3 100644 --- a/Rs.SkyLine/Flow/NormalFlow/TakeTrayFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/TakeTrayFlow.cs @@ -1,6 +1,7 @@ using Rs.AutoDischarge.V3.Flow; using Rs.Controls; using Rs.Framework; +using Rs.Motion; using Rs.MotionPlat.Commom; using Rs.MotionPlat.Flow.Space; using System; @@ -101,42 +102,52 @@ namespace Rs.MotionPlat.Flow switch (step) { case ETakeTrayFlowStep.到取料盘上方: - //double centerX = SysConfigParam.GetValue($"Tray{m_fromTray.ToString()}CenterX"); - //double centerY = SysConfigParam.GetValue($"Tray{m_fromTray.ToString()}CenterY"); - double cameraCenterX = SysConfigParam.GetValue("ClampCenter2UpCameraCenterX"); - double cameraCenterY = SysConfigParam.GetValue("ClampCenter2UpCameraCenterY"); - targetX = SysConfigParam.GetValue($"{m_fromTray.ToString()}TakeTrayX"); - targetY = SysConfigParam.GetValue($"{m_fromTray.ToString()}TakeTrayY"); - Motion.ErrorCode errCode = AxisControl.LoadX.MovePos(targetX + cameraCenterX, GlobalVar.TakeTraySpeed); - if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) + if(DischargeFlow.Instance.XYCanMove()) { - errCode = AxisControl.LoadY.MovePos(targetY+ cameraCenterY, GlobalVar.TakeTraySpeed); + //double centerX = SysConfigParam.GetValue($"Tray{m_fromTray.ToString()}CenterX"); + //double centerY = SysConfigParam.GetValue($"Tray{m_fromTray.ToString()}CenterY"); + double cameraCenterX = SysConfigParam.GetValue("ClampCenter2UpCameraCenterX"); + double cameraCenterY = SysConfigParam.GetValue("ClampCenter2UpCameraCenterY"); + targetX = SysConfigParam.GetValue($"{m_fromTray.ToString()}TakeTrayX"); + targetY = SysConfigParam.GetValue($"{m_fromTray.ToString()}TakeTrayY"); + Motion.ErrorCode errCode = AxisControl.LoadX.MovePos(targetX + cameraCenterX, GlobalVar.TakeTraySpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - if (GlobalVar.VirtualAxis) + errCode = AxisControl.LoadY.MovePos(targetY + cameraCenterY, GlobalVar.TakeTraySpeed); + if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + logInfo = GetClassName() + $"准备运动到{m_fromTray}料仓取料盘位上方"; + MessageQueue.Instance.Insert(logInfo); + step = ETakeTrayFlowStep.等待到取料盘上方; + } + else + { + MsgBox.ShowAxisAlarmDialog(AxisControl.LoadY, errCode); } - logInfo =GetClassName()+ $"准备运动到{m_fromTray}料仓取料盘位上方"; - MessageQueue.Instance.Insert(logInfo); - step = ETakeTrayFlowStep.等待到取料盘上方; } else { - MsgBox.ShowAxisAlarmDialog(AxisControl.LoadY, errCode); + MsgBox.ShowAxisAlarmDialog(AxisControl.LoadX, errCode); } } else { - MsgBox.ShowAxisAlarmDialog(AxisControl.LoadX, errCode); + Msg.ShowError("周转Y轴不在安全位,请移动到安全后点击确定"); } break; case ETakeTrayFlowStep.等待到取料盘上方: if (Ops.IsStop("LoadX", "LoadY") || GlobalVar.VirtualAxis) { - logInfo = GetClassName() + $"已运动到{m_fromTray}料仓取料盘位上方"; - MessageQueue.Instance.Insert(logInfo); - step = ETakeTrayFlowStep.等待料盘准备就绪; + if(Ops.IsArrived(AxisControl.LoadX,AxisControl.LoadY)) + { + logInfo = GetClassName() + $"已运动到{m_fromTray}料仓取料盘位上方"; + MessageQueue.Instance.Insert(logInfo); + step = ETakeTrayFlowStep.等待料盘准备就绪; + } } break; case ETakeTrayFlowStep.等待料盘准备就绪: @@ -254,50 +265,60 @@ namespace Rs.MotionPlat.Flow } break; case ETakeTrayFlowStep.到放料盘上方: - //if(GlobalVar.RunSpace) - //{ - // Thread.Sleep(2000); - //} - //centerX = SysConfigParam.GetValue($"Tray{m_toTray.ToString()}CenterX"); - //centerY = SysConfigParam.GetValue($"Tray{m_toTray.ToString()}CenterY"); - takeTrayFinishedEvent?.Invoke(); - cameraCenterX = SysConfigParam.GetValue("ClampCenter2UpCameraCenterX"); - cameraCenterY = SysConfigParam.GetValue("ClampCenter2UpCameraCenterY"); - targetX = SysConfigParam.GetValue($"{m_toTray.ToString()}TakeTrayX"); - targetY = SysConfigParam.GetValue($"{m_toTray.ToString()}TakeTrayY"); - - errCode = AxisControl.LoadX.MovePos(targetX+ cameraCenterX, GlobalVar.TakeTraySpeed); - if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) + if (DischargeFlow.Instance.XYCanMove()) { - errCode = AxisControl.LoadY.MovePos(targetY+ cameraCenterY - 2, GlobalVar.TakeTraySpeed); + //if(GlobalVar.RunSpace) + //{ + // Thread.Sleep(2000); + //} + //centerX = SysConfigParam.GetValue($"Tray{m_toTray.ToString()}CenterX"); + //centerY = SysConfigParam.GetValue($"Tray{m_toTray.ToString()}CenterY"); + takeTrayFinishedEvent?.Invoke(); + double cameraCenterX = SysConfigParam.GetValue("ClampCenter2UpCameraCenterX"); + double cameraCenterY = SysConfigParam.GetValue("ClampCenter2UpCameraCenterY"); + targetX = SysConfigParam.GetValue($"{m_toTray.ToString()}TakeTrayX"); + targetY = SysConfigParam.GetValue($"{m_toTray.ToString()}TakeTrayY"); + + ErrorCode errCode = AxisControl.LoadX.MovePos(targetX + cameraCenterX, GlobalVar.TakeTraySpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - if (GlobalVar.VirtualAxis) + errCode = AxisControl.LoadY.MovePos(targetY + cameraCenterY - 2, GlobalVar.TakeTraySpeed); + if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { - Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + logInfo = GetClassName() + $"到{toTray}料仓放料盘上方"; + MessageQueue.Instance.Insert(logInfo); + step = ETakeTrayFlowStep.等待到放料盘上方; + } + else + { + MsgBox.ShowAxisAlarmDialog(AxisControl.LoadY, errCode); } - logInfo = GetClassName()+$"到{toTray}料仓放料盘上方"; - MessageQueue.Instance.Insert(logInfo); - step = ETakeTrayFlowStep.等待到放料盘上方; } else { - MsgBox.ShowAxisAlarmDialog(AxisControl.LoadY, errCode); + MsgBox.ShowAxisAlarmDialog(AxisControl.LoadX, errCode); + } } else { - MsgBox.ShowAxisAlarmDialog(AxisControl.LoadX, errCode); - + Msg.ShowError("周转Y轴不在安全位,请移动到安全后点击确定"); } break; case ETakeTrayFlowStep.等待到放料盘上方: if (Ops.IsStop("LoadX", "LoadY") || GlobalVar.VirtualAxis) { - logInfo = GetClassName() + $"已运动到{toTray}料仓放料盘上方"; - MessageQueue.Instance.Insert(logInfo); - arrivedDumpPosEvent?.Invoke(); - step = ETakeTrayFlowStep.等待放料仓准备就绪; + if (Ops.IsArrived(AxisControl.LoadX, AxisControl.LoadY)) + { + logInfo = GetClassName() + $"已运动到{toTray}料仓放料盘上方"; + MessageQueue.Instance.Insert(logInfo); + arrivedDumpPosEvent?.Invoke(); + step = ETakeTrayFlowStep.等待放料仓准备就绪; + } } break; case ETakeTrayFlowStep.等待放料仓准备就绪: diff --git a/Rs.SkyLine/Flow/SubFlow/NgTrayToInputTrayFlow.cs b/Rs.SkyLine/Flow/SubFlow/NgTrayToInputTrayFlow.cs index 5a656af..3fc34d0 100644 --- a/Rs.SkyLine/Flow/SubFlow/NgTrayToInputTrayFlow.cs +++ b/Rs.SkyLine/Flow/SubFlow/NgTrayToInputTrayFlow.cs @@ -48,8 +48,6 @@ namespace Rs.MotionPlat.Flow.SubFlow }); }); } - - Thread.Sleep(5000); while (true) { if(Ops.IsOff("4号料仓料盘到位光电检测"))//如果ng料仓处没有料盘 @@ -68,13 +66,14 @@ namespace Rs.MotionPlat.Flow.SubFlow } logInfo = "start take ng tray to input stock"; MessageQueue.Instance.Insert(logInfo ); - TakeTrayFlow.Instance.Take(ETrayType.Ng, ETrayType.Input, null, null, () =>{ + TakeTrayFlow.Instance.Take(ETrayType.Ng, ETrayType.Input, () => { + StockManager.Instance.GetStock(ETrayType.Ng).ChangeStatus(EStockTrayStatus.Empty); + }, null, () =>{ Task.Run(() => { StockManager.Instance.GetStock(ETrayType.Input).Unload(EStockTrayUnLoadMode.Whole, null); }); }); } - Ops.Stop(); } } } diff --git a/Rs.SkyLine/Flow/TestCenter.cs b/Rs.SkyLine/Flow/TestCenter.cs index c6a1cce..a5833c8 100644 --- a/Rs.SkyLine/Flow/TestCenter.cs +++ b/Rs.SkyLine/Flow/TestCenter.cs @@ -126,9 +126,10 @@ namespace Rs.MotionPlat.Flow switch (eInstructioneInstruction) { case EInstruction.TransferSiloTray: - //ReportToTestCenter(schedule); - //MachineManage.Instance.SetLoadUnloadStatus(ERunState.Busying); - //NgTrayToInputTrayFlow.Instance.MoveToInput(); + ReportToTestCenter(schedule); + MachineManage.Instance.SetLoadUnloadStatus(ERunState.Busying); + NgTrayToInputTrayFlow.Instance.MoveToInput(); + MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); break; case EInstruction.TestFinished: MessageQueue.Instance.Insert("测试完成:"+JsonConvert.SerializeObject(schedule, new StringEnumConverter())); diff --git a/Rs.SkyLine/SysConfig/StockControl.cs b/Rs.SkyLine/SysConfig/StockControl.cs index 226a055..a832f99 100644 --- a/Rs.SkyLine/SysConfig/StockControl.cs +++ b/Rs.SkyLine/SysConfig/StockControl.cs @@ -212,15 +212,18 @@ namespace Rs.MotionPlat.SysConfig tostock = ETrayType.Multi; if (btnToEmpty2.Checked) tostock = ETrayType.Empty2; - StockManager.Instance.GetStock(fromstock).Load(EStockTrayLoadMode.Whole, null); - TakeTrayFlow.Instance.Take(fromstock, tostock, - null, - () => { - StockManager.Instance.GetStock(fromstock).ChangeStatus(EStockTrayStatus.Unloaded); - }, - () => { - StockManager.Instance.GetStock(tostock).Unload(EStockTrayUnLoadMode.Whole, null); - }); + Task.Run(() => { + + StockManager.Instance.GetStock(fromstock).Load(EStockTrayLoadMode.Whole, null); + TakeTrayFlow.Instance.Take(fromstock, tostock, + null, + () => { + StockManager.Instance.GetStock(fromstock).ChangeStatus(EStockTrayStatus.Unloaded); + }, + () => { + StockManager.Instance.GetStock(tostock).Unload(EStockTrayUnLoadMode.Whole, null); + }); + }); } } }