diff --git a/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs b/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs index e69a829..bc222ac 100644 --- a/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/TurnoverFlow.cs @@ -238,6 +238,11 @@ namespace Rs.MotionPlat.Flow List untestSlots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have); if (untestSlots != null && untestSlots.Count > 0) { + undealTasks = LoadAndUnloadTask.Instance.GetTurnoverToTestTasks(ETaskDealStatus.Undeal); + if(TurnoverDumpFlow.Instance.Dump(ETrayType.Turnover, undealTasks.Select(t => t.FromIndex + 1).ToList())) + { + TurnoverDumpFlow.Instance.Wait(); + } bool exit = false; while (!exit) { @@ -1220,6 +1225,11 @@ namespace Rs.MotionPlat.Flow List testedSlots = TestTrayManager.Instance.GetSlots(ETestTraySlotStatus.Have); if (testedSlots != null && testedSlots.Count > 0) { + undealTasks = LoadAndUnloadTask.Instance.GetTestToTurnoverTasks(ETaskDealStatus.Undeal); + if(TurnoverDumpFlow.Instance.Dump(ETrayType.Test, undealTasks.Select(t => t.FromIndex + 1).ToList())) + { + TurnoverDumpFlow.Instance.Wait(); + } bool exit = false; while (!exit) { diff --git a/Rs.SkyLine/Flow/SubFlow/TurnoverDumpFlow.cs b/Rs.SkyLine/Flow/SubFlow/TurnoverDumpFlow.cs new file mode 100644 index 0000000..e8fbf26 --- /dev/null +++ b/Rs.SkyLine/Flow/SubFlow/TurnoverDumpFlow.cs @@ -0,0 +1,139 @@ +using Rs.Controls; +using Rs.Framework; +using Rs.Motion; +using Rs.MotionPlat.Commom; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Rs.MotionPlat.Flow.SubFlow +{ + enum ETurnoverDumpFlowStep + { + 到放料位下方, + 等待到放料位下方, + 放料完成抬起, + 等待放料完成抬起 + } + /// + /// 当周转吸嘴在治具或者周转盘取料失败时,自动把产品放下去,然后再报警 + /// + public class TurnoverDumpFlow + { + private TurnoverDumpFlow() { } + + private static TurnoverDumpFlow instance; + public static TurnoverDumpFlow Instance + { + get + { + if(instance==null) + instance = new TurnoverDumpFlow(); + return instance; + } + } + private ETurnoverDumpFlowStep step = ETurnoverDumpFlowStep.到放料位下方; + double targetPos = 0.0; + ErrorCode errCode = ErrorCode.Ok; + string logInfo = string.Empty; + ManualResetEvent dumpFinished = new ManualResetEvent(true); + bool finished = false; + + public bool Dump(ETrayType trayType, List transitNozzleList) + { + if (finished) + { + dumpFinished.Reset(); + finished = false; + } + else + return false; + Task.Run(() => { + while (!finished) + { + if (MachineManage.Instance.MachineStatus == EMachineStatus.Stop) + { + Thread.Sleep(10); + continue; + } + switch (step) + { + case ETurnoverDumpFlowStep.到放料位下方: + targetPos = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset * 2; + errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) + { + logInfo = GetClassName() + $"到放料位下方"; + MessageQueue.Instance.Insert(logInfo); + step = ETurnoverDumpFlowStep.等待到放料位下方; + } + else + { + MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode); + } + break; + case ETurnoverDumpFlowStep.等待到放料位下方: + if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + { + if (Ops.IsArrived(AxisControl.TurnoverZ)) + { + logInfo = GetClassName() + $"已运动到放料位下方"; + MessageQueue.Instance.Insert(logInfo); + ////关闭真空吸 + VacManager.TransitNozzleVacSuction(EVacOperator.Close, true, transitNozzleList.ToArray()); + //打开真空破 + VacManager.TransitNozzleVacBreak(EVacOperator.Open, true, transitNozzleList.ToArray()); + //关闭真空破 + VacManager.TransitNozzleVacBreak(EVacOperator.Close, false, transitNozzleList.ToArray()); + step = ETurnoverDumpFlowStep.放料完成抬起; + } + + } + break; + case ETurnoverDumpFlowStep.放料完成抬起: + errCode = AxisControl.TurnoverZ.MovePos(0, GlobalVar.WholeSpeed); + if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) + { + logInfo = GetClassName() + $"放料完成抬起"; + MessageQueue.Instance.Insert(logInfo); + step = ETurnoverDumpFlowStep.等待到放料位下方; + } + else + { + MsgBox.ShowAxisAlarmDialog(AxisControl.TurnoverZ, errCode); + } + break; + case ETurnoverDumpFlowStep.等待放料完成抬起: + if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + { + if (Ops.IsArrived(AxisControl.TurnoverZ)) + { + finished = true; + dumpFinished.Set(); + logInfo = GetClassName() + $"放料完成已抬起"; + MessageQueue.Instance.Insert(logInfo); + break; + } + } + break; + } + Thread.Sleep(10); + } + }); + return true; + } + + public void Wait() + { + dumpFinished.WaitOne(); + } + + string GetClassName() + { + return "TurnoverDumpFlow-"; + } + } +} diff --git a/Rs.SkyLine/Rs.SkyLine.csproj b/Rs.SkyLine/Rs.SkyLine.csproj index 7608461..2835ad3 100644 --- a/Rs.SkyLine/Rs.SkyLine.csproj +++ b/Rs.SkyLine/Rs.SkyLine.csproj @@ -213,6 +213,7 @@ +