From 46ceacce74af0141a4aaa466280e4a13839617be Mon Sep 17 00:00:00 2001 From: lhiven Date: Sat, 6 Jan 2024 11:04:38 +0900 Subject: [PATCH] =?UTF-8?q?1=20=E4=BC=98=E5=8C=96=E9=87=8D=E6=B5=8BNG?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=202=20=E4=BF=AE=E5=A4=8D=E5=BD=93=E5=8F=AA?= =?UTF-8?q?=E6=9C=898=E4=B8=AA=E4=BA=A7=E5=93=81=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E7=BB=93=E6=9D=9F=E4=B8=8A=E6=96=99=E4=B8=8D=E5=86=8D=E5=91=A8?= =?UTF-8?q?=E8=BD=AC=E7=9B=98=E4=B8=8D=E6=89=AB=E7=A0=81=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs | 400 +++++++++--------- Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs | 2 + .../Flow/SubFlow/NgTrayToInputTrayFlow.cs | 23 +- Rs.SkyLine/Flow/TestCenter.cs | 1 + 4 files changed, 229 insertions(+), 197 deletions(-) diff --git a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs index a5929d0..c8031e8 100644 --- a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs @@ -632,6 +632,7 @@ namespace Rs.MotionPlat.Flow } else { + ScanBarCode(); flowStep = EDischargeFlowStep.任务结束到安全位; } } @@ -1542,202 +1543,7 @@ namespace Rs.MotionPlat.Flow { if(curNozzle.ToType== TurnoverType.Turnover) { - if (LoadAndUnloadTask.Instance.GetUndealedLoadToTurnoverTask().Count == 0 && !GlobalVar.VirtualAxis) - { - if(GlobalVar.GRR) - { - scanNum++; - } - if(scanNum==1 || !GlobalVar.GRR) - { - if(GlobalVar.EnableVirtuleBarCode) - { - List slots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have); - foreach (var slot in slots) - { - LoadAndUnloadTask.Instance.CopyBarcodeToTask(slot.Index - 1, VirtualBarCode.Code); - } - } - else - { - //没有需要给周转盘上料的任务后,就开始上相机扫码 - //判断周转盘第一行有没有产品,如果有产品则拍第一行 - if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.One)) - { - //找拍照起点和终点 - SlotPoint grabStartPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 1); - SlotPoint grabEndPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 8); - UpCameraScanBarCodeFlow.Instance.ScanMulti(1, false); - List result = UpCameraScanBarCodeFlow.Instance.Wait(); - foreach (var vr in result) - { - if (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct) - { - if (vr.SearchModelOK)//定位成功 - { - if (!GlobalVar.EnableScanBarCodeByDownCamera) - { - if (GlobalVar.RunSpace) - { - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code); - } - else - { - if (vr.ScanBarCodeOK) - { - OnShowGrabResult?.Invoke(vr, true); - //复制二维码 - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN); - } - else - { - int failNum = 1; - while (true) - { - if (failNum < 4) - { - //如果扫码失败再重扫一次 - UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true); - VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle(); - if (vrsigle.ScanBarCodeOK) - { - OnShowGrabResult?.Invoke(vrsigle, true); - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vrsigle.SN); - break; - } - else - { - failNum++; - OnShowGrabResult?.Invoke(vrsigle, true); - //复制二维码 - //LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, ""); - Thread.Sleep(1000); - } - } - else - { - alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.扫码失败), vr.SlotIndex); - box = MsgBox.ShowDialog(AlarmConstID.扫码失败, alarmInfo, ETipButton.Retry | ETipButton.Cancel); - if (box.Button == ETipButton.Retry) - { - failNum = 1; - } - else - { - //OnShowGrabResult?.Invoke(vrsigle, true); - //复制二维码 - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, ""); - break; - } - } - } - } - } - } - } - else - { - //定位失败,或者超出指定范围 - } - } - else - { - OnShowGrabResult?.Invoke(vr, false); - } - } - //OnUpCameraGrabResult?.Invoke(result); - } - //判断周转盘第三行有没有产品,如果有产品则拍第三行 - if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.Three)) - { - //找拍照起点和终点 - SlotPoint grabStartPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 17); - SlotPoint grabEndPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 24); - UpCameraScanBarCodeFlow.Instance.ScanMulti(24, true); - List result = UpCameraScanBarCodeFlow.Instance.Wait(); - foreach (var vr in result) - { - if (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct) - { - - if (vr.SearchModelOK)//定位成功 - { - if (!GlobalVar.EnableScanBarCodeByDownCamera) - { - if (GlobalVar.RunSpace) - { - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code); - } - else - { - if (vr.ScanBarCodeOK) - { - OnShowGrabResult?.Invoke(vr, true); - //复制二维码 - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN); - } - else - { - int failNum = 1; - while (true) - { - if (failNum < 4) - { - - //如果扫码失败再重扫一次 - UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true); - VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle(); - if (vrsigle.ScanBarCodeOK) - { - OnShowGrabResult?.Invoke(vrsigle, true); - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vrsigle.SN); - break; - } - else - { - failNum++; - OnShowGrabResult?.Invoke(vrsigle, true); - //复制二维码 - //LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, ""); - Thread.Sleep(1000); - } - } - else - { - box = MsgBox.ShowDialog(AlarmConstID.ScanBarCodeFailAlarm, $"{vr.SlotIndex}穴位扫码失败", ETipButton.Retry | ETipButton.Skip); - if (box.Button == ETipButton.Retry) - { - failNum = 1; - } - else if (box.Button == ETipButton.Skip) - { - //OnShowGrabResult?.Invoke(vrsigle, true); - //复制二维码 - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, ""); - break; - } - } - } - } - } - } - } - else - { - //定位失败,或者超出指定范围 - } - } - else - { - OnShowGrabResult?.Invoke(vr, false); - } - } - //OnUpCameraGrabResult?.Invoke(result); - - } - } - } - } + ScanBarCode(); } if (LoadAndUnloadTask.Instance.GetUnDealedTask().Count > 0) @@ -1817,6 +1623,207 @@ namespace Rs.MotionPlat.Flow } } + private void ScanBarCode() + { + SchedulingMessageBox box = new SchedulingMessageBox(); + if (LoadAndUnloadTask.Instance.GetUndealedLoadToTurnoverTask().Count == 0 && !GlobalVar.VirtualAxis) + { + if (GlobalVar.GRR) + { + scanNum++; + } + if (scanNum == 1 || !GlobalVar.GRR) + { + if (GlobalVar.EnableVirtuleBarCode) + { + List slots = TurnoverTrayManager.Instance.GetSlots(ETurnoverTraySlotType.WaitTest, ETurnoverTraySlotStatus.Have); + foreach (var slot in slots) + { + LoadAndUnloadTask.Instance.CopyBarcodeToTask(slot.Index - 1, VirtualBarCode.Code); + } + } + else + { + //没有需要给周转盘上料的任务后,就开始上相机扫码 + //判断周转盘第一行有没有产品,如果有产品则拍第一行 + if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.One)) + { + //找拍照起点和终点 + SlotPoint grabStartPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 1); + SlotPoint grabEndPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 8); + UpCameraScanBarCodeFlow.Instance.ScanMulti(1, false); + List result = UpCameraScanBarCodeFlow.Instance.Wait(); + foreach (var vr in result) + { + if (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct) + { + if (vr.SearchModelOK)//定位成功 + { + if (!GlobalVar.EnableScanBarCodeByDownCamera) + { + if (GlobalVar.RunSpace) + { + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code); + } + else + { + if (vr.ScanBarCodeOK) + { + OnShowGrabResult?.Invoke(vr, true); + //复制二维码 + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN); + } + else + { + int failNum = 1; + while (true) + { + if (failNum < 4) + { + //如果扫码失败再重扫一次 + UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true); + VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle(); + if (vrsigle.ScanBarCodeOK) + { + OnShowGrabResult?.Invoke(vrsigle, true); + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vrsigle.SN); + break; + } + else + { + failNum++; + OnShowGrabResult?.Invoke(vrsigle, true); + //复制二维码 + //LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, ""); + Thread.Sleep(1000); + } + } + else + { + alarmInfo = string.Format(AlarmCollection.GetAlarm(AlarmConstID.扫码失败), vr.SlotIndex); + box = MsgBox.ShowDialog(AlarmConstID.扫码失败, alarmInfo, ETipButton.Retry | ETipButton.Cancel); + if (box.Button == ETipButton.Retry) + { + failNum = 1; + } + else + { + //OnShowGrabResult?.Invoke(vrsigle, true); + //复制二维码 + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, ""); + break; + } + } + } + } + } + } + } + else + { + //定位失败,或者超出指定范围 + } + } + else + { + OnShowGrabResult?.Invoke(vr, false); + } + } + //OnUpCameraGrabResult?.Invoke(result); + } + //判断周转盘第三行有没有产品,如果有产品则拍第三行 + if (TurnoverTrayManager.Instance.HasProduct(ETrayRow.Three)) + { + //找拍照起点和终点 + SlotPoint grabStartPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 17); + SlotPoint grabEndPoint = TrayPointManager.GetSlotPoint(ETrayType.Turnover, 24); + UpCameraScanBarCodeFlow.Instance.ScanMulti(24, true); + List result = UpCameraScanBarCodeFlow.Instance.Wait(); + foreach (var vr in result) + { + if (TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct) + { + + if (vr.SearchModelOK)//定位成功 + { + if (!GlobalVar.EnableScanBarCodeByDownCamera) + { + if (GlobalVar.RunSpace) + { + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, VirtualBarCode.Code); + } + else + { + if (vr.ScanBarCodeOK) + { + OnShowGrabResult?.Invoke(vr, true); + //复制二维码 + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vr.SN); + } + else + { + int failNum = 1; + while (true) + { + if (failNum < 4) + { + + //如果扫码失败再重扫一次 + UpCameraScanBarCodeFlow.Instance.ScanSingle(vr.SlotIndex, true); + VisionResult vrsigle = UpCameraScanBarCodeFlow.Instance.WaitSingle(); + if (vrsigle.ScanBarCodeOK) + { + OnShowGrabResult?.Invoke(vrsigle, true); + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, vrsigle.SN); + break; + } + else + { + failNum++; + OnShowGrabResult?.Invoke(vrsigle, true); + //复制二维码 + //LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, ""); + Thread.Sleep(1000); + } + } + else + { + box = MsgBox.ShowDialog(AlarmConstID.ScanBarCodeFailAlarm, $"{vr.SlotIndex}穴位扫码失败", ETipButton.Retry | ETipButton.Skip); + if (box.Button == ETipButton.Retry) + { + failNum = 1; + } + else if (box.Button == ETipButton.Skip) + { + //OnShowGrabResult?.Invoke(vrsigle, true); + //复制二维码 + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex - 1, ""); + break; + } + } + } + } + } + } + } + else + { + //定位失败,或者超出指定范围 + } + } + else + { + OnShowGrabResult?.Invoke(vr, false); + } + } + //OnUpCameraGrabResult?.Invoke(result); + + } + } + } + } + } + /// /// 取料完成后更新吸嘴状态 /// @@ -1910,4 +1917,5 @@ namespace Rs.MotionPlat.Flow return $"{trayType}盘{slotIndex+1}穴位"; } } + } diff --git a/Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs b/Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs index 6422182..02dd887 100644 --- a/Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/StockTrayFlow.cs @@ -465,6 +465,7 @@ namespace Rs.AutoDischarge.V3.Flow { finished = false; } + actionFinishedEvent.Reset(); IAxis StockFlow = AxisControl.GetAxis($"StockFlow{(int)m_stockType}"); logInfo = GetClassName() + $"{GetTrayName()} 料仓收到下料任务"; MessageQueue.Instance.Insert(logInfo); @@ -679,6 +680,7 @@ namespace Rs.AutoDischarge.V3.Flow } Thread.Sleep(10); } + actionFinishedEvent.Set(); return true; } diff --git a/Rs.SkyLine/Flow/SubFlow/NgTrayToInputTrayFlow.cs b/Rs.SkyLine/Flow/SubFlow/NgTrayToInputTrayFlow.cs index 3fc34d0..1ce596e 100644 --- a/Rs.SkyLine/Flow/SubFlow/NgTrayToInputTrayFlow.cs +++ b/Rs.SkyLine/Flow/SubFlow/NgTrayToInputTrayFlow.cs @@ -69,9 +69,30 @@ namespace Rs.MotionPlat.Flow.SubFlow 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); + if (Ops.IsOn("4号料仓缺盘光电检测"))//如果还有需要搬运的料盘 + StockManager.Instance.GetStock(ETrayType.Input).Unload(EStockTrayUnLoadMode.Whole, null); + else + StockManager.Instance.GetStock(ETrayType.Input).Load(EStockTrayLoadMode.AfterTakeTray, () => + { + StockManager.Instance.GetStock(ETrayType.Input).ChangeStatus(EStockTrayStatus.Loaded, true); + }); + }); + bool needTake = false; + Task.Run(() => + { + if (Ops.IsOn("4号料仓缺盘光电检测"))//如果还有需要搬运的料盘 + { + needTake = true; + StockManager.Instance.GetStock(ETrayType.Ng).Load(EStockTrayLoadMode.Whole, null); + } }); + Thread.Sleep(1000); + StockManager.Instance.GetStock(ETrayType.Input).WaitFinished(); + if(needTake) { + StockManager.Instance.GetStock(ETrayType.Ng).WaitFinished(); + } }); } } diff --git a/Rs.SkyLine/Flow/TestCenter.cs b/Rs.SkyLine/Flow/TestCenter.cs index a5833c8..9f3e79f 100644 --- a/Rs.SkyLine/Flow/TestCenter.cs +++ b/Rs.SkyLine/Flow/TestCenter.cs @@ -130,6 +130,7 @@ namespace Rs.MotionPlat.Flow MachineManage.Instance.SetLoadUnloadStatus(ERunState.Busying); NgTrayToInputTrayFlow.Instance.MoveToInput(); MachineManage.Instance.SetLoadUnloadStatus(ERunState.Waiting); + Ops.Stop(); break; case EInstruction.TestFinished: MessageQueue.Instance.Insert("测试完成:"+JsonConvert.SerializeObject(schedule, new StringEnumConverter()));