From bfe88bf480918b54f9e936c2c2aa868aa5ea6c14 Mon Sep 17 00:00:00 2001 From: lhiven Date: Mon, 9 Oct 2023 16:07:30 +0900 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=8A=E6=96=99=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E5=BD=93=E5=91=A8=E8=BD=AC=E5=90=B8=E5=A4=B4?= =?UTF-8?q?=E4=BB=8E=E5=91=A8=E8=BD=AC=E7=9B=98=E5=8F=96=E6=96=99=E5=88=B0?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E4=BD=8D=E5=90=8E=EF=BC=8C=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E4=B8=AD=E6=8E=A7=E5=8F=AF=E4=BB=A5=E6=8E=92=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Commom/Ops.cs | 1 + Rs.SkyLine/Commom/Scheduling.cs | 15 +- Rs.SkyLine/Flow/LoadAndUnloadTask.cs | 21 +- Rs.SkyLine/Flow/MachineManage.cs | 14 ++ Rs.SkyLine/Flow/TestCenter.cs | 4 +- Rs.SkyLine/Flow/TurnoverFlow.cs | 317 ++++++++++++++++----------- Rs.SkyLine/Flow/WorkFlow.cs | 57 +++-- 7 files changed, 270 insertions(+), 159 deletions(-) diff --git a/Rs.SkyLine/Commom/Ops.cs b/Rs.SkyLine/Commom/Ops.cs index 2e0ad4b..cd96ef8 100644 --- a/Rs.SkyLine/Commom/Ops.cs +++ b/Rs.SkyLine/Commom/Ops.cs @@ -121,6 +121,7 @@ namespace Rs.MotionPlat.Commom Ops.Off("下左相机光源触发"); Ops.Off("下右相机光源触发"); Ops.Off("上相机光源触发"); + Ops.Off("夹爪气缸电磁阀"); } NozzleManager.Init(); TrayPointManager.LoadPoint(); diff --git a/Rs.SkyLine/Commom/Scheduling.cs b/Rs.SkyLine/Commom/Scheduling.cs index fe06ac5..a39e969 100644 --- a/Rs.SkyLine/Commom/Scheduling.cs +++ b/Rs.SkyLine/Commom/Scheduling.cs @@ -684,7 +684,11 @@ namespace Rs.MotionPlat.Commom /// /// 气压(double) /// - AirPressure + AirPressure, + /// + /// 测试机状态 + /// + TesterState, } } @@ -1014,6 +1018,15 @@ namespace Rs.MotionPlat.Commom NoDevice } + /// + /// 测试机状态, + /// + public enum ETesterState + { + NotReady, + Ready + } + /// /// 设备按钮 /// diff --git a/Rs.SkyLine/Flow/LoadAndUnloadTask.cs b/Rs.SkyLine/Flow/LoadAndUnloadTask.cs index 81053d8..c10070a 100644 --- a/Rs.SkyLine/Flow/LoadAndUnloadTask.cs +++ b/Rs.SkyLine/Flow/LoadAndUnloadTask.cs @@ -234,19 +234,26 @@ namespace Rs.MotionPlat.Flow /// /// 清除任务 + /// 任务类型,0=排料任务,1=测试任务 /// - public void Clear() + public void Clear(int taskMode=0) { lock(this) { if (turnoverResult != null) { - turnoverResult.Clear(); - loadTaskList.Clear(); - unloadTaskList.Clear(); - changeTaskList.Clear(); - testLoadTaskList.Clear(); - testUnloadTaskList.Clear(); + if (taskMode == 0) + { + turnoverResult.Clear(); + loadTaskList.Clear(); + unloadTaskList.Clear(); + changeTaskList.Clear(); + } + else if(taskMode==1) + { + testLoadTaskList.Clear(); + testUnloadTaskList.Clear(); + } } } } diff --git a/Rs.SkyLine/Flow/MachineManage.cs b/Rs.SkyLine/Flow/MachineManage.cs index cf67f39..11cc62c 100644 --- a/Rs.SkyLine/Flow/MachineManage.cs +++ b/Rs.SkyLine/Flow/MachineManage.cs @@ -86,6 +86,11 @@ namespace Rs.MotionPlat.Flow /// public EInitializeState InitializeState { get; set; } = EInitializeState.Uninitialized; + /// + /// 测试机状态 + /// + private ETesterState testerState = ETesterState.NotReady; + /// /// 物料分配模式(正常或空跑) /// @@ -102,6 +107,15 @@ namespace Rs.MotionPlat.Flow RunStatus= status; } + public void SetTesterState(ETesterState _testerState) + { + testerState= _testerState; + } + + public ETesterState GetTesterState() { + return testerState; + } + /// /// 获取中控运行状态 /// diff --git a/Rs.SkyLine/Flow/TestCenter.cs b/Rs.SkyLine/Flow/TestCenter.cs index d0dd160..9266553 100644 --- a/Rs.SkyLine/Flow/TestCenter.cs +++ b/Rs.SkyLine/Flow/TestCenter.cs @@ -142,8 +142,8 @@ namespace Rs.MotionPlat.Flow case SchedulingStatusInfo.InfoType.AssignMode: statusInto.Info = EAssignMode.Normal.ToString(); break; - case SchedulingStatusInfo.InfoType.Temperature: - statusInto.Info = "22"; + case SchedulingStatusInfo.InfoType.TesterState: + statusInto.Info = MachineManage.Instance.GetTesterState().ToString(); break; default: break; diff --git a/Rs.SkyLine/Flow/TurnoverFlow.cs b/Rs.SkyLine/Flow/TurnoverFlow.cs index 3a09f85..7e31836 100644 --- a/Rs.SkyLine/Flow/TurnoverFlow.cs +++ b/Rs.SkyLine/Flow/TurnoverFlow.cs @@ -18,7 +18,7 @@ namespace Rs.MotionPlat.Flow enum ETurnoverFlowStep { - 等待命令, + 等待任务, 到周转盘取料位上方, 等待运动到周转盘取料位上方, 到周转盘下方取料位1, @@ -68,8 +68,10 @@ namespace Rs.MotionPlat.Flow 到周转盘放料位下方2, 等待到周转盘放料位下方2, 周转盘放料完成后真空检测, - 周转盘放料完成抬起, - 等待周转盘放料完成抬起, + 周转盘放料完成抬起1, + 等待周转盘放料完成抬起1, + 周转盘放料完成抬起2, + 等待周转盘放料完成抬起2, 到安全位, 等待到安全位, @@ -125,24 +127,46 @@ namespace Rs.MotionPlat.Flow string logInfo = ""; List slots = new List(); List ngList = new List(); - ETurnoverFlowStep Step = ETurnoverFlowStep.等待命令; + ETurnoverFlowStep Step = ETurnoverFlowStep.等待任务; double targetPos = 0.0; Motion.ErrorCode errCode = Motion.ErrorCode.Ok; public override void Run() { switch (Step) { - case ETurnoverFlowStep.等待命令: - if(pressLoad)//测试位上料 + case ETurnoverFlowStep.等待任务: + if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestLoad) > 0) { - pressLoad = false; + slots.Clear(); + foreach (var slot in LoadAndUnloadTask.Instance.GetTestLoadTasks()) + { + slots.Add(slot.FromIndex + 1); + } + logInfo = $"接收到测试工位上料任务"; + MessageQueue.Instance.Insert(logInfo); Step = ETurnoverFlowStep.到周转盘取料位上方; } - if(pressUnload)//测试位下料 + else if (LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.TestUnload) > 0) { - pressUnload = false; + slots.Clear(); + foreach (var slot in LoadAndUnloadTask.Instance.GetTestUnLoadTasks()) + { + slots.Add(slot.FromIndex + 1); + } + logInfo = $"接收到测试工位下料任务"; + MessageQueue.Instance.Insert(logInfo); Step = ETurnoverFlowStep.测试完成抬起到高速位; } + //if (pressLoad)//测试位上料 + //{ + // pressLoad = false; + // Step = ETurnoverFlowStep.到周转盘取料位上方; + //} + //if(pressUnload)//测试位下料 + //{ + // pressUnload = false; + // Step = ETurnoverFlowStep.测试完成抬起到高速位; + //} break; case ETurnoverFlowStep.到周转盘取料位上方: targetPos = SysConfigParam.GetValue("TurnoverTakeY"); @@ -179,9 +203,8 @@ namespace Rs.MotionPlat.Flow { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); } - logInfo = $"到周转盘下方取料位"; + logInfo = $"到周转盘下方取料位1"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到周转盘下方取料位1; } else @@ -192,7 +215,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到周转盘下方取料位1: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = $"已运动到周转盘下方取料位 at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; + logInfo = $"已运动到周转盘下方取料位1 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; + MessageQueue.Instance.Insert(logInfo); Step = ETurnoverFlowStep.到周转盘下方取料位2; } break; @@ -205,9 +229,8 @@ namespace Rs.MotionPlat.Flow { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); } - logInfo = $"到周转盘下方取料位"; + logInfo = $"到周转盘下方取料位2"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到周转盘下方取料位2; } else @@ -218,28 +241,30 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到周转盘下方取料位2: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = $"已运动到周转盘下方取料位 at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; + logInfo = $"已运动到周转盘下方取料位2 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - //打开真空吸 + /*打开周转吸头真空吸*/ foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空吸"); } Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacSuctionDelaytime); + MessageQueue.Instance.Insert($"打开周转吸头{string.Join(",",slots)}号真空吸"); + /*关闭周转盘真空吸*/ - //关闭周转盘真空吸 foreach (var slot in slots) { Ops.Off($"周转盘{slot}号穴位真空吸"); } Thread.Sleep(GlobalVar.TurnoverTrayCloseVacSuctionDelaytime); - //打开周转盘真空破 + MessageQueue.Instance.Insert($"关闭周转盘{string.Join(",", slots)}号穴位真空吸"); + /*打开周转盘真空破*/ foreach (var slot in slots) { Ops.On($"周转盘{slot}号穴位真空破"); } Thread.Sleep(GlobalVar.TurnoverTrayOpenVacBreakDelaytime); + MessageQueue.Instance.Insert($"打开周转盘{string.Join(",", slots)}号穴位真空破"); Step = ETurnoverFlowStep.到周转盘取料破真空位; } break; @@ -254,7 +279,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到周转盘取料破真空位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到周转盘取料破真空位; } else @@ -267,13 +291,13 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已到周转盘取料破真空位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - //关闭周转盘真空破 + /*关闭周转盘真空破*/ foreach (var slot in slots) { Ops.Off($"周转盘{slot}号穴位真空破"); } Thread.Sleep(GlobalVar.TurnoverTrayCloseVacBreakDelaytime); + MessageQueue.Instance.Insert($"关闭周转盘{string.Join(",",slots)}号穴位真空破"); Step = ETurnoverFlowStep.周转盘取料完成抬起; } break; @@ -288,7 +312,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"周转盘取料完成抬起"; MessageQueue.Instance.Insert (logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待周转盘取料完成抬起; } else @@ -299,9 +322,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待周转盘取料完成抬起: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = $"已周转盘取料完成抬起"; + logInfo = $"已到周转盘取料完成抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.周转盘取料完成真空检测; } break; @@ -309,19 +331,25 @@ namespace Rs.MotionPlat.Flow ngList = CheckNozzleVac(); if(ngList.Count==0||GlobalVar.RunSpace || GlobalVar.VirtualAxis) { - logInfo = $"真空检测OK"; + logInfo = $"周转吸头{string.Join(",",slots)}号真空检测OK"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试放料位上方; } else { - string msg = string.Join(",", ngList.ToArray()); - logInfo = $"周转吸嘴 {msg} 真空值未达到"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - Msg.ShowError($"周转吸嘴 {msg} 真空值未达到,请处理后点击确定"); - Step = ETurnoverFlowStep.到测试放料位上方; + string msg = $"周转吸头{string.Join(",", ngList.ToArray())}号真空异常"; + MessageQueue.Instance.Warn(msg); + TestCenterMessageBox.Show(AlarmConstID.TurnoverTakeFailAlarm, msg, SchedulingMessageBox.ETipButton.Retry | SchedulingMessageBox.ETipButton.Cancel); + SchedulingMessageBox msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.TurnoverTakeFailAlarm); + //Msg.ShowError($"周转吸嘴 {msg} 真空值未达到,请处理后点击确定"); + if(msgBox.Button== SchedulingMessageBox.ETipButton.Retry) + { + Step = ETurnoverFlowStep.到周转盘取料位上方; + } + else if(msgBox.Button== SchedulingMessageBox.ETipButton.Cancel) + { + Step = ETurnoverFlowStep.到测试放料位上方; + } } break; case ETurnoverFlowStep.到测试放料位上方: @@ -335,7 +363,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到测试放料位上方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到测试放料位上方; } else @@ -346,9 +373,19 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到测试放料位上方: if (Ops.IsStop(AxisControl.TurnoverY) || GlobalVar.VirtualAxis) { + List testLoadList = LoadAndUnloadTask.Instance.GetTestLoadTasks(); + TestCenter.Instance.LoadTestLoadResult(); + //切换穴位状态 + foreach (TurnoverInfo turnoverInfo in testLoadList) + { + GlobalTray.TurnoverTray.ChangeStatus(turnoverInfo.FromIndex + 1, ESlotStatus.NotHave); + } + LoadAndUnloadTask.Instance.Clear(1); + + MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); + MessageQueue.Instance.Insert("通知中控周转载盘产品已取走,可以继续排料"); logInfo = $"已运动到测试放料位上方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试放料位下方1; } break; @@ -361,9 +398,8 @@ namespace Rs.MotionPlat.Flow { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); } - logInfo = $"到测试放料位下方"; + logInfo = $"到测试放料位下方1"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到到测试放料位下方1; } else @@ -374,9 +410,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到到测试放料位下方1: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = $"已运动到到测试放料位下方 at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; + logInfo = $"已运动到到测试放料位下方1 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试放料位下方2; } break; @@ -389,7 +424,7 @@ namespace Rs.MotionPlat.Flow { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); } - logInfo = $"到测试放料位下方"; + logInfo = $"到测试放料位下方2"; MessageQueue.Instance.Insert(logInfo); LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待运动到到测试放料位下方2; @@ -402,23 +437,30 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待运动到到测试放料位下方2: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = $"已运动到到测试放料位下方 at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; + logInfo = $"已运动到到测试放料位下方2 TurnoverZ at:{Ops.GetCurPosition(AxisAlias.TurnoverZ)}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); + /*打开测试穴位真空吸*/ OpenPressVac(); Thread.Sleep(GlobalVar.PressOpenVacSuctionDelaytime); + MessageQueue.Instance.Insert($"打开测试{string.Join(",",slots)}号穴位真空吸"); + /*关闭周转吸头真空吸*/ CloseNozzleVac(); Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacSuctionDelaytime); + MessageQueue.Instance.Insert($"关闭周转吸头{string.Join(",", slots)}号真空吸"); + /*打开周转吸头真空破*/ foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空破"); } Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacBreakDelaytime); + MessageQueue.Instance.Insert($"打开周转吸头{string.Join(",", slots)}号真空破"); + /*关闭周转吸头真空破*/ foreach (var slot in slots) { Ops.Off($"周转{slot}号吸嘴真空破"); } Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacBreakDelaytime); + MessageQueue.Instance.Insert($"关闭周转吸头{string.Join(",", slots)}号真空破"); Step = ETurnoverFlowStep.测试位放料完成抬起; } break; @@ -433,7 +475,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"测试位放料完成抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待测试位放料完成抬起; } else @@ -446,7 +487,6 @@ namespace Rs.MotionPlat.Flow { logInfo = $"测试位放料完成抬起完成"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); if(GlobalVar.RunSpace) { Step = ETurnoverFlowStep.到测试保压位上方; @@ -465,13 +505,16 @@ namespace Rs.MotionPlat.Flow } else { - string msg = string.Join(",", ngList.ToArray()); - logInfo = $"测试穴位 {msg} 真空异常"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - LogHelper.Debug(logInfo); - Msg.ShowError($"测试穴位 {msg} 真空异常,请处理后点击确定"); - Step = ETurnoverFlowStep.到测试保压位上方; + //string msg = string.Join(",", ngList.ToArray()); + logInfo = $"测试 {string.Join(",", ngList.ToArray())} 号穴位放料真空异常,请手动处理完成后点击确定"; + MessageQueue.Instance.Warn(logInfo); + TestCenterMessageBox.Show(AlarmConstID.TestDumpFailAlarm, logInfo, SchedulingMessageBox.ETipButton.Ok); + SchedulingMessageBox msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.TestDumpFailAlarm); + if(msgBox.Button== SchedulingMessageBox.ETipButton.Ok) + { + Step = ETurnoverFlowStep.到测试保压位上方; + } + //Msg.ShowError($"测试穴位 {msg} 真空异常,请处理后点击确定"); } break; case ETurnoverFlowStep.到测试保压位上方: @@ -485,7 +528,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到测试保压位上方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到测试保压位上方; } else @@ -498,7 +540,6 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已运动到测试保压位上方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试保压位下方1; } break; @@ -514,8 +555,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到测试保压位下方1"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - Step = ETurnoverFlowStep.等待到测试保压位下方1; } else @@ -528,11 +567,6 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已到测试保压位下方1 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - - //ClosePressVac(); - //Thread.Sleep(GlobalVar.PresseCloseVacSuctionDelaytime); - //loadOk = true; Step = ETurnoverFlowStep.到测试保压位下方2; } break; @@ -548,8 +582,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到测试保压位下方2"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - Step = ETurnoverFlowStep.等待到测试保压位下方2; } else @@ -562,16 +594,18 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已到测试保压位下方2 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - + /*关闭测试穴位真空吸*/ ClosePressVac(); Thread.Sleep(GlobalVar.PresseCloseVacSuctionDelaytime); + MessageQueue.Instance.Insert($"关闭测试{string.Join(",",slots)}号穴位真空吸"); loadOk = true; - Step = ETurnoverFlowStep.等待命令; + MachineManage.Instance.SetTesterState(ETesterState.Ready); + MessageQueue.Instance.Insert("通知中控测试位就绪,可以开始测试"); + Step = ETurnoverFlowStep.等待任务; } break; - //-----------------------------------------------测试位下料 + //-----------------------------------------------测试位下料--------------------------------------------------------------------------------------------------------- case ETurnoverFlowStep.测试完成抬起到高速位: targetPos = SysConfigParam.GetValue("PressZ")+GlobalVar.PressLowSpeedOffset; double curPos = Ops.GetCurPosition(AxisAlias.PressZ); @@ -590,7 +624,6 @@ namespace Rs.MotionPlat.Flow } logInfo = "测试完成准备抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待测试完成抬起到高速位; } } @@ -600,13 +633,11 @@ namespace Rs.MotionPlat.Flow { logInfo = $"测试完成已抬起 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.测试完成抬起安全位; } break; case ETurnoverFlowStep.测试完成抬起安全位: targetPos = SysConfigParam.GetValue("PressSafeZ"); - errCode = AxisControl.PressZ.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { @@ -614,19 +645,16 @@ namespace Rs.MotionPlat.Flow { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); } - logInfo = "测试完成准备抬起"; + logInfo = "测试完成抬起安全位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待测试完成抬起安全位; } break; case ETurnoverFlowStep.等待测试完成抬起安全位: if (Ops.IsStop(AxisControl.PressZ) || GlobalVar.VirtualAxis) { - - logInfo = $"测试完成已抬起 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; + logInfo = $"测试完成已抬起到安全位 PressZ at:{Ops.GetCurPosition(AxisAlias.PressZ)}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试取料位上方; } break; @@ -641,8 +669,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到测试取料位上方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - MessageQueue.Instance.Insert($"goto press take product up position"); Step = ETurnoverFlowStep.等待到测试取料位上方; } break; @@ -651,7 +677,6 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已运动到测试取料位上方 TurnoverY at:{Ops.GetCurPosition(AxisAlias.TurnoverY)}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到测试取料位下方1; } break; @@ -664,9 +689,8 @@ namespace Rs.MotionPlat.Flow { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); } - logInfo = $"到测试取料位下方"; + logInfo = $"到测试取料位下方1"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到测试取料位下方1; } break; @@ -674,6 +698,8 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到测试取料位下方1: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { + logInfo = $"已运动到到测试取料位下方1"; + MessageQueue.Instance.Insert(logInfo); Step = ETurnoverFlowStep.到测试取料位下方2; } break; @@ -686,9 +712,8 @@ namespace Rs.MotionPlat.Flow { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); } - logInfo = $"到测试取料位下方"; + logInfo = $"到测试取料位下方2"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到测试取料位下方2; } break; @@ -696,33 +721,33 @@ namespace Rs.MotionPlat.Flow case ETurnoverFlowStep.等待到测试取料位下方2: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { - logInfo = $"已运动到测试取料位下方 TurnoverZ at:{Ops.GetCurPosition("TurnoverZ")}"; + logInfo = $"已运动到测试取料位下方2 TurnoverZ at:{Ops.GetCurPosition("TurnoverZ")}"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - //打开吸嘴真空吸 + /*打开周转吸头真空吸*/ foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空吸"); } Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacSuctionDelaytime); - + MessageQueue.Instance.Insert($"打开周转{string.Join(",",slots)}号吸头真空吸"); + /*打开测试穴位真空破*/ foreach (var slot in slots) { Ops.On($"测试{slot}号穴位真空破"); } Thread.Sleep(GlobalVar.PresseOpenVacBreakDelaytime); + MessageQueue.Instance.Insert($"打开测试{string.Join(",", slots)}号穴位真空破"); Step = ETurnoverFlowStep.到测试破真空位; } break; case ETurnoverFlowStep.到测试破真空位: - logInfo = $"到测试破真空位"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - + targetPos = SysConfigParam.GetValue("PressTakeZ")+GlobalVar.PressLowSpeedOffset; errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { + logInfo = $"到测试破真空位"; + MessageQueue.Instance.Insert(logInfo); if (GlobalVar.VirtualAxis) { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); @@ -735,12 +760,13 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已运动到测试破真空位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); + /*关闭测试穴位真空破*/ foreach (var slot in slots) { Ops.Off($"测试{slot}号穴位真空破"); } Thread.Sleep(GlobalVar.PressCloseVacBreakDelaytime); + MessageQueue.Instance.Insert($"关闭测试{string.Join(",",slots)}号穴位真空破"); Step = ETurnoverFlowStep.测试位取料完成抬起; } break; @@ -755,7 +781,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"测试位取料完成准备抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待测试位取料完成抬起; } break; @@ -764,7 +789,6 @@ namespace Rs.MotionPlat.Flow { logInfo = $"测试位取料完成已抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.测试位取料完成后真空检测; } break; @@ -772,18 +796,27 @@ namespace Rs.MotionPlat.Flow ngList = CheckNozzleVac(); if (ngList.Count==0 || GlobalVar.RunSpace|| GlobalVar.VirtualAxis) { + MachineManage.Instance.SetTesterState( ETesterState.NotReady ); + MessageQueue.Instance.Insert("通知中控产品已取走"); Step = ETurnoverFlowStep.到周转盘放料位上方; } else { - string msg = string.Join(",", ngList.ToArray()); - DialogResult dr = Msg.ShowError($"吸嘴{msg}真空值未达到,请处理", MessageBoxButtons.RetryCancel); - if(dr== DialogResult.Retry) + string msg = $"周转吸头{string.Join(",", ngList.ToArray())}号真空异常"; + MessageQueue.Instance.Warn(msg); + TestCenterMessageBox.Show(AlarmConstID.TestTakeFailAlarm, msg, SchedulingMessageBox.ETipButton.Retry | SchedulingMessageBox.ETipButton.Cancel); + SchedulingMessageBox msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.TestTakeFailAlarm); + + //DialogResult dr = Msg.ShowError($"吸嘴{msg}真空值未达到,请处理", MessageBoxButtons.RetryCancel); + //if(dr== DialogResult.Retry) + if (msgBox.Button== SchedulingMessageBox.ETipButton.Retry) { Step = ETurnoverFlowStep.到测试取料位上方; } - else + else if (msgBox.Button == SchedulingMessageBox.ETipButton.Cancel) { + MessageQueue.Instance.Insert("通知中控产品已取走"); + MachineManage.Instance.SetTesterState(ETesterState.NotReady); Step = ETurnoverFlowStep.到周转盘放料位上方; } @@ -791,7 +824,6 @@ namespace Rs.MotionPlat.Flow break; case ETurnoverFlowStep.到周转盘放料位上方: targetPos = SysConfigParam.GetValue("TurnoverDumpY"); - //targetPos = SysConfigParam.GetValue("TurnoverTakeY"); errCode = AxisControl.TurnoverY.MovePos(targetPos, GlobalVar.WholeSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { @@ -801,7 +833,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到周转盘放料位上方"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到周转盘放料位上方; } break; @@ -809,13 +840,11 @@ namespace Rs.MotionPlat.Flow if (Ops.IsStop(AxisControl.TurnoverY) || GlobalVar.VirtualAxis) { logInfo = $"已运动到周转盘放料位上方"; - MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); + MessageQueue.Instance.Insert(logInfo); Step = ETurnoverFlowStep.到周转盘放料位下方1; } break; case ETurnoverFlowStep.到周转盘放料位下方1: - //targetPos = SysConfigParam.GetValue("TurnoverDumpZ"); targetPos = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset; errCode = AxisControl.TurnoverZ.MovePos(targetPos+1, GlobalVar.WholeSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) @@ -826,7 +855,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到周转盘放料位下方1"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到周转盘放料位下方1; } break; @@ -835,15 +863,13 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已运动到周转盘放料位下方1"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.到周转盘放料位下方2; } break; case ETurnoverFlowStep.到周转盘放料位下方2: - //targetPos = SysConfigParam.GetValue("TurnoverDumpZ"); targetPos = SysConfigParam.GetValue("TurnoverTakeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos + 1, GlobalVar.PressLowSpeed); + errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) @@ -852,7 +878,6 @@ namespace Rs.MotionPlat.Flow } logInfo = $"到周转盘放料位下方2"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到周转盘放料位下方2; } break; @@ -861,57 +886,81 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已运动到周转盘放料位下方2"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - //打开周转盘真空吸 + /*打开周转盘真空吸*/ + foreach (var slot in slots) { Ops.On($"周转盘{slot + 8}号穴位真空吸"); } Thread.Sleep(GlobalVar.TurnoverTrayOpenVacSuctionDelaytime); - //关闭吸嘴真空吸 + MessageQueue.Instance.Insert($"打开周转盘{string.Join(",",slots)}号穴位真空吸"); + /*关闭周转吸头真空吸*/ foreach (var slot in slots) { Ops.Off($"周转{slot}号吸嘴真空吸"); } Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacSuctionDelaytime); - //打开吸嘴真空破 + MessageQueue.Instance.Insert($"关闭周转{string.Join(",", slots)}号吸头真空吸"); + /*打开周转吸头真空破*/ foreach (var slot in slots) { Ops.On($"周转{slot}号吸嘴真空破"); } Thread.Sleep(GlobalVar.TurnoverNozzleOpenVacBreakDelaytime); + MessageQueue.Instance.Insert($"打开周转{string.Join(",", slots)}号吸头真空破"); foreach (var slot in slots) { Ops.Off($"周转{slot}号吸嘴真空破"); } Thread.Sleep(GlobalVar.TurnoverNozzleCloseVacBreakDelaytime); - Step = ETurnoverFlowStep.周转盘放料完成抬起; + Step = ETurnoverFlowStep.周转盘放料完成抬起1; } break; - case ETurnoverFlowStep.周转盘放料完成抬起: - targetPos = SysConfigParam.GetValue("TurnoverSafeZ"); - errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + case ETurnoverFlowStep.周转盘放料完成抬起1: + targetPos = SysConfigParam.GetValue("TurnoverTakeZ") + GlobalVar.PressLowSpeedOffset; + errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.PressLowSpeed); if(errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) { if (GlobalVar.VirtualAxis) { Thread.Sleep(GlobalVar.VirtualAxisMoveTime); } - logInfo = $"周转盘放料完成准备抬起"; + logInfo = $"周转盘放料完成准备抬起1"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - Step = ETurnoverFlowStep.等待周转盘放料完成抬起; + Step = ETurnoverFlowStep.等待周转盘放料完成抬起1; } break; - case ETurnoverFlowStep.等待周转盘放料完成抬起: + case ETurnoverFlowStep.等待周转盘放料完成抬起1: if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) { logInfo = $"周转盘放料完成已抬起"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); - Step = ETurnoverFlowStep.周转盘放料完成后真空检测; + Step = ETurnoverFlowStep.周转盘放料完成抬起2; + } + break; + case ETurnoverFlowStep.周转盘放料完成抬起2: + targetPos = SysConfigParam.GetValue("TurnoverSafeZ"); + errCode = AxisControl.TurnoverZ.MovePos(targetPos, GlobalVar.WholeSpeed); + if (errCode == Motion.ErrorCode.Ok || GlobalVar.VirtualAxis) + { + if (GlobalVar.VirtualAxis) + { + Thread.Sleep(GlobalVar.VirtualAxisMoveTime); + } + logInfo = $"周转盘放料完成准备抬起2"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.等待周转盘放料完成抬起2; + } + break; + case ETurnoverFlowStep.等待周转盘放料完成抬起2: + if (Ops.IsStop(AxisControl.TurnoverZ) || GlobalVar.VirtualAxis) + { + logInfo = $"周转盘放料完成已抬起2"; + MessageQueue.Instance.Insert(logInfo); + Step = ETurnoverFlowStep.周转盘放料完成后真空检测; + } break; case ETurnoverFlowStep.周转盘放料完成后真空检测: @@ -935,9 +984,16 @@ namespace Rs.MotionPlat.Flow } else { - string msg = string.Join(",", ngList); - Msg.ShowError($"周转穴位{msg}真空异常,请处理后点击确定"); - Step = ETurnoverFlowStep.到安全位; + string msg = $"周转盘{string.Join(",", ngList)}号穴位真空异常";// string.Join(",", ngList); + MessageQueue.Instance.Insert(msg); + TestCenterMessageBox.Show(AlarmConstID.TurnoverDumpFailAlarm, msg, SchedulingMessageBox.ETipButton.Ok); + SchedulingMessageBox msgBox = TestCenterMessageBox.WaitResult(AlarmConstID.TurnoverDumpFailAlarm); + if(msgBox.Button== SchedulingMessageBox.ETipButton.Ok) + { + Step = ETurnoverFlowStep.到安全位; + } + //Msg.ShowError($"周转穴位{msg}真空异常,请处理后点击确定"); + //判断周转盘是否有需要测试的穴位 //List haveSlots = GlobalTray.TurnoverTray.GetSlots(ESlotStatus.Have); //var loadList = haveSlots.Where(slot => ((slot.Index >= 1 && slot.Index <= 8) || (slot.Index >= 17 && slot.Index <= 24))); @@ -957,9 +1013,8 @@ namespace Rs.MotionPlat.Flow errCode = AxisControl.TurnoverY.MovePos(SysConfigParam.GetValue("PressY"), GlobalVar.WholeSpeed); if ((errCode == Motion.ErrorCode.Ok) || GlobalVar.VirtualAxis) { - logInfo = $"到安全位"; + logInfo = $"周转吸头下料完成到安全位"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); Step = ETurnoverFlowStep.等待到安全位; } else @@ -972,9 +1027,17 @@ namespace Rs.MotionPlat.Flow { logInfo = $"已运动到安全位,任务结束"; MessageQueue.Instance.Insert(logInfo); - LogHelper.Debug(logInfo); unloadOk = true; - Step = ETurnoverFlowStep.等待命令; + TestCenter.Instance.LoadTestUnLoadResult(); + List testUnLoadList = LoadAndUnloadTask.Instance.GetTestUnLoadTasks(); + //切换穴位状态 + foreach (TurnoverInfo turnoverInfo in testUnLoadList) + { + GlobalTray.TurnoverTray.ChangeStatus(turnoverInfo.ToIndex + 1, ESlotStatus.Have); + } + LoadAndUnloadTask.Instance.Clear(1); + MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); + Step = ETurnoverFlowStep.等待任务; } break; } diff --git a/Rs.SkyLine/Flow/WorkFlow.cs b/Rs.SkyLine/Flow/WorkFlow.cs index cc279aa..92da193 100644 --- a/Rs.SkyLine/Flow/WorkFlow.cs +++ b/Rs.SkyLine/Flow/WorkFlow.cs @@ -1052,7 +1052,9 @@ namespace Rs.MotionPlat.Flow GlobalTray.TurnoverTray.ChangeStatus(turnoverInfo.FromIndex+1, ESlotStatus.NotHave); } LoadAndUnloadTask.Instance.Clear(); - MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); + MachineManage.Instance.SetTesterState(ETesterState.Ready); + MessageQueue.Instance.Insert("通知中控测试位就绪,可以开始测试"); + //MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); //for (int i = 1; i < 9; i++) //{ @@ -1189,30 +1191,41 @@ namespace Rs.MotionPlat.Flow /// private void WaitTask() { - if (LoadAndUnloadTask.Instance.Count > 0 && WorkEnvironment.Instance.EnvironmentOk) + //if (LoadAndUnloadTask.Instance.Count > 0 && WorkEnvironment.Instance.EnvironmentOk) + if (WorkEnvironment.Instance.EnvironmentOk) { - if (LoadAndUnloadTask.Instance.CanRunTask()) + if(LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Load)>0 + || LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Unload) > 0 + || LoadAndUnloadTask.Instance.GetTaskNum(ETaskMode.Change) > 0) { - 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.到取料位上方; - } + turnoverToTray = true; + logInfo = $"接收到排料任务"; + MessageQueue.Instance.Insert(logInfo); + flowStep = EWorkFlowStep.到取料位上方; } + + //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.到取料位上方; + // } + //} } }