From dac1114c0b4aeb7f9d81eb1986acca6484515fba Mon Sep 17 00:00:00 2001 From: lhiven Date: Mon, 17 Feb 2025 08:59:48 +0800 Subject: [PATCH] =?UTF-8?q?ZR=E8=BD=B4=E5=9B=9E=E5=8E=9F=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B6=85=E6=97=B6=E6=9C=BA=E5=88=B6=EF=BC=8C?= =?UTF-8?q?=E8=B6=85=E6=97=B6=E6=9C=AA=E5=9B=9E=E5=8E=9F=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E5=88=99=E6=8A=A5=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Flow/AlarmConstID.cs | 5 +++ Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs | 45 ++++++++++++--------- Rs.SkyLine/Flow/SubFlow/ZRHomeFlow.cs | 42 +++++++++++++++++-- Rs.SkyLine/Properties/AssemblyInfo.cs | 2 +- 4 files changed, 72 insertions(+), 22 deletions(-) diff --git a/Rs.SkyLine/Flow/AlarmConstID.cs b/Rs.SkyLine/Flow/AlarmConstID.cs index 407e244..8883f7f 100644 --- a/Rs.SkyLine/Flow/AlarmConstID.cs +++ b/Rs.SkyLine/Flow/AlarmConstID.cs @@ -433,6 +433,11 @@ namespace Rs.MotionPlat.Flow /// public const int 上相机拍照超时 = 1098; + /// + /// 轴回原失败 + /// + public const int 轴回原失败 = 1099; + diff --git a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs index 18b76e8..82b2838 100644 --- a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs @@ -589,31 +589,40 @@ namespace Rs.MotionPlat.Flow } else { - if (reFetchNum == 0) + try { - //这个时候Z&R回原一次,然后再重新取料 - ZRHomeFlow.Instance.GoHome(curNozzle.NozzleIndex); - } - reFetchNum++; - if (reFetchNum >= GlobalVar.DischargeRetakeNum) - { - DischargeDumpFlow.Instance.Start(curTask.FromType, curNozzle.NozzleIndex, curNozzle.FromIndex); - //alarmInfo = $"排料{curNozzle.NozzleIndex}号吸嘴取{curNozzle.FromIndex+1}号穴位产品{reFetchNum}次失败"; - if (curTask.FromType == TurnoverType.ToBeTested) + logInfo = GetClassName() + $"排料吸嘴{curNozzle.NozzleIndex}号真空检测NG,num={reFetchNum}"; + MessageQueue.Instance.Insert(logInfo); + if (reFetchNum == 0) { - //alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.料仓tray盘取料报警), curNozzle.NozzleIndex, curNozzle.FromIndex + 1); - alarmEntity = AlarmCollection.Get(AlarmConstID.料仓tray盘取料报警).Transform(curNozzle.NozzleIndex, (curNozzle.FromIndex + 1)); + //这个时候Z&R回原一次,然后再重新取料 + ZRHomeFlow.Instance.GoHome(curNozzle.NozzleIndex); } - else if (curTask.FromType == TurnoverType.Turnover) + reFetchNum++; + if (reFetchNum >= GlobalVar.DischargeRetakeNum) { - //alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.排料头在周转盘取料失败报警), curNozzle.NozzleIndex, curNozzle.FromIndex + 1); - alarmEntity = AlarmCollection.Get(AlarmConstID.排料头在周转盘取料失败报警).Transform(curNozzle.NozzleIndex, curNozzle.FromIndex + 1); + DischargeDumpFlow.Instance.Start(curTask.FromType, curNozzle.NozzleIndex, curNozzle.FromIndex); + //alarmInfo = $"排料{curNozzle.NozzleIndex}号吸嘴取{curNozzle.FromIndex+1}号穴位产品{reFetchNum}次失败"; + if (curTask.FromType == TurnoverType.ToBeTested) + { + //alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.料仓tray盘取料报警), curNozzle.NozzleIndex, curNozzle.FromIndex + 1); + alarmEntity = AlarmCollection.Get(AlarmConstID.料仓tray盘取料报警).Transform(curNozzle.NozzleIndex, (curNozzle.FromIndex + 1)); + } + else if (curTask.FromType == TurnoverType.Turnover) + { + //alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.排料头在周转盘取料失败报警), curNozzle.NozzleIndex, curNozzle.FromIndex + 1); + alarmEntity = AlarmCollection.Get(AlarmConstID.排料头在周转盘取料失败报警).Transform(curNozzle.NozzleIndex, curNozzle.FromIndex + 1); + } + flowStep = EDischargeFlowStep.取料失败报警; + } + else + { + flowStep = EDischargeFlowStep.到取料位下方; } - flowStep = EDischargeFlowStep.取料失败报警; } - else + catch (Exception ex) { - flowStep = EDischargeFlowStep.到取料位下方; + } } break; diff --git a/Rs.SkyLine/Flow/SubFlow/ZRHomeFlow.cs b/Rs.SkyLine/Flow/SubFlow/ZRHomeFlow.cs index e14f412..05e8d0e 100644 --- a/Rs.SkyLine/Flow/SubFlow/ZRHomeFlow.cs +++ b/Rs.SkyLine/Flow/SubFlow/ZRHomeFlow.cs @@ -2,8 +2,10 @@ using Rs.Framework; using Rs.Motion; using Rs.MotionPlat.Commom; +using Rs.MotionPlat.Entitys; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; @@ -16,7 +18,8 @@ namespace Rs.MotionPlat.Flow.SubFlow StartHome, WaitHomed, GoStartPos, - WaitArrivedStartPos + WaitArrivedStartPos, + HomeWarning } public class ZRHomeFlow { @@ -34,6 +37,7 @@ namespace Rs.MotionPlat.Flow.SubFlow } private EZRHomeFlowStep step = EZRHomeFlowStep.StartHome; bool finished = false; + Stopwatch stopwatch = new Stopwatch(); public void GoHome(int homeIndex) { @@ -45,6 +49,7 @@ namespace Rs.MotionPlat.Flow.SubFlow { case EZRHomeFlowStep.StartHome: //获取Z轴 + MessageQueue.Instance.Insert($"{GetClassName()} NozzleZ{homeIndex},NozzleR{homeIndex} start home"); AxisControl.GetAxis($"NozzleZ{homeIndex}").Home(); AxisControl.GetAxis($"NozzleR{homeIndex}").Home(); //AxisControl.NozzleZ1.Home(); @@ -65,6 +70,7 @@ namespace Rs.MotionPlat.Flow.SubFlow //AxisControl.NozzleR7.Home(); //AxisControl.NozzleR8.Home(); step = EZRHomeFlowStep.WaitHomed; + stopwatch.Restart(); Thread.Sleep(1000); break; case EZRHomeFlowStep.WaitHomed: @@ -84,10 +90,18 @@ namespace Rs.MotionPlat.Flow.SubFlow // && AxisControl.NozzleR6.HomeStatus == EHomeStatus.Finished // && AxisControl.NozzleR7.HomeStatus == EHomeStatus.Finished // && AxisControl.NozzleR8.HomeStatus == EHomeStatus.Finished) - if (AxisControl.GetAxis($"NozzleZ{homeIndex}").HomeStatus == EHomeStatus.Finished + if(stopwatch.ElapsedMilliseconds<1000*60*3) + { + if (AxisControl.GetAxis($"NozzleZ{homeIndex}").HomeStatus == EHomeStatus.Finished && AxisControl.GetAxis($"NozzleR{homeIndex}").HomeStatus == EHomeStatus.Finished) + { + MessageQueue.Instance.Insert($"{GetClassName()} NozzleZ{homeIndex},NozzleR{homeIndex} homed finished"); + step = EZRHomeFlowStep.GoStartPos; + } + } + else { - step = EZRHomeFlowStep.GoStartPos; + step = EZRHomeFlowStep.HomeWarning; } break; case EZRHomeFlowStep.GoStartPos: @@ -98,6 +112,7 @@ namespace Rs.MotionPlat.Flow.SubFlow //} double targetPos = SysConfigParam.GetValue($"NozzleR{homeIndex}StartPos"); AxisControl.GetAxis($"NozzleR{homeIndex}").MovePos(targetPos, GlobalVar.WholeSpeed); + MessageQueue.Instance.Insert($"{GetClassName()} NozzleR{homeIndex} go to pos:{targetPos}"); step = EZRHomeFlowStep.WaitArrivedStartPos; Thread.Sleep(100); break; @@ -112,12 +127,33 @@ namespace Rs.MotionPlat.Flow.SubFlow // && Ops.IsStop("NozzleR8")) if (Ops.IsStop($"NozzleR{homeIndex}")) { + string axisname = $"NozzleR{homeIndex}"; + MessageQueue.Instance.Insert($"{GetClassName()} NozzleR{homeIndex} arrived pos:{Ops.GetCurPosition(axisname)}"); finished = true; } break; + case EZRHomeFlowStep.HomeWarning: + stopwatch.Stop(); + if (AxisControl.GetAxis($"NozzleZ{homeIndex}").HomeStatus != EHomeStatus.Finished) + { + AlarmEntity alarm = AlarmCollection.Get(AlarmConstID.轴回原失败).Transform($"NozzleZ{homeIndex}"); + AlarmMessageBox.ShowDialog(alarm, SchedulingMessageBox.ETipButton.Retry, null, true); + } + else if (AxisControl.GetAxis($"NozzleR{homeIndex}").HomeStatus != EHomeStatus.Finished) + { + AlarmEntity alarm = AlarmCollection.Get(AlarmConstID.轴回原失败).Transform($"NozzleR{homeIndex}"); + AlarmMessageBox.ShowDialog(alarm, SchedulingMessageBox.ETipButton.Retry, null, true); + } + step = EZRHomeFlowStep.StartHome; + break; } Thread.Sleep(10); } } + + private string GetClassName() + { + return $"{nameof(ZRHomeFlow)}-"; + } } } diff --git a/Rs.SkyLine/Properties/AssemblyInfo.cs b/Rs.SkyLine/Properties/AssemblyInfo.cs index 1703005..336cd0e 100644 --- a/Rs.SkyLine/Properties/AssemblyInfo.cs +++ b/Rs.SkyLine/Properties/AssemblyInfo.cs @@ -31,6 +31,6 @@ using System.Runtime.InteropServices; // //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: - [assembly: AssemblyVersion("3.20.25.01")] + [assembly: AssemblyVersion("3.20.25.03")] //[assembly: AssemblyVersion("1.0.0.0")] //[assembly: AssemblyFileVersion("1.0.0.0")]