From 19d42e5722c5b46e232a99bfee9b708579b9d0f6 Mon Sep 17 00:00:00 2001 From: lhiven <236881222@qq.com> Date: Wed, 20 Dec 2023 11:59:25 +0900 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=8A=E7=9B=B8=E6=9C=BA?= =?UTF-8?q?=E6=89=AB=E7=A0=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rs.SkyLine/Commom/VirtualBarCode.cs | 25 +++++++ Rs.SkyLine/Commom/VisionProcess.cs | 23 ++++-- Rs.SkyLine/Flow/Camera/ModelParameter.cs | 8 ++ Rs.SkyLine/Flow/Camera/VisionManager.cs | 81 ++++++++++++++++++++- Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs | 49 ++++++++++--- Rs.SkyLine/Rs.SkyLine.csproj | 1 + 6 files changed, 168 insertions(+), 19 deletions(-) create mode 100644 Rs.SkyLine/Commom/VirtualBarCode.cs diff --git a/Rs.SkyLine/Commom/VirtualBarCode.cs b/Rs.SkyLine/Commom/VirtualBarCode.cs new file mode 100644 index 0000000..e3b00e8 --- /dev/null +++ b/Rs.SkyLine/Commom/VirtualBarCode.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Rs.MotionPlat.Commom +{ + /// + /// 虚拟码 + /// + public static class VirtualBarCode + { + private static int barCode = 1; + + public static string Code + { + get + { + barCode++; + return barCode.ToString().PadLeft(18,'0'); + } + } + } +} diff --git a/Rs.SkyLine/Commom/VisionProcess.cs b/Rs.SkyLine/Commom/VisionProcess.cs index e44857a..5749d11 100644 --- a/Rs.SkyLine/Commom/VisionProcess.cs +++ b/Rs.SkyLine/Commom/VisionProcess.cs @@ -166,21 +166,33 @@ namespace Rs.MotionPlat.Commom mr.Score = score.DArr[0]; mr.Himage = hImage; mr.LocationOk = true; - FindCode(hImage, ref mr); + if(GlobalVar.EnableScanBarCodeByDownCamera) + { + FindCode(hImage, ref mr); + } string dirname = $"d://images/{DateTime.Now.ToString("yyyyMMdd")}"; if(!Directory.Exists(dirname)) { Directory.CreateDirectory(dirname); } - if(mr.ScanOK) + if (!GlobalVar.EnableScanBarCodeByDownCamera) { - mr.IsOK= true; - HOperatorSet.WriteImage(hImage, "bmp", 0, $"{dirname}//{mr.SN.Replace("\\", "").Replace("\"", "")+"_"+ DateTime.Now.ToString("yyyyMMddHHmmssfff")}"); + mr.IsOK = true; } else { - HOperatorSet.WriteImage(hImage, "bmp", 0, $"{dirname}//{DateTime.Now.ToString("yyyyMMddHHmmssfff")}"); + if (mr.ScanOK) + { + mr.IsOK = true; + HOperatorSet.WriteImage(hImage, "bmp", 0, $"{dirname}//{mr.SN.Replace("\\", "").Replace("\"", "") + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff")}"); + } + else + { + + HOperatorSet.WriteImage(hImage, "bmp", 0, $"{dirname}//{DateTime.Now.ToString("yyyyMMddHHmmssfff")}"); + } } + matches.Add(mr); } else @@ -189,7 +201,6 @@ namespace Rs.MotionPlat.Commom mr.LocationOk = false; mr.IsOK = false; mr.Row = 0; - mr.Col = 0; mr.Angle = 0; mr.Score = 0; diff --git a/Rs.SkyLine/Flow/Camera/ModelParameter.cs b/Rs.SkyLine/Flow/Camera/ModelParameter.cs index cd21284..feaf337 100644 --- a/Rs.SkyLine/Flow/Camera/ModelParameter.cs +++ b/Rs.SkyLine/Flow/Camera/ModelParameter.cs @@ -23,6 +23,11 @@ namespace Rs.MotionPlat.Flow.Camera /// public HObject SearchRegion { get; set; } + /// + /// 二维码区域 + /// + public HObject BarCodeRegion { get; set; } + /// /// 起始角度 /// @@ -62,6 +67,9 @@ namespace Rs.MotionPlat.Flow.Camera string searchReg = Path.Combine(modelDir, "search.reg"); HOperatorSet.ReadRegion(out HObject searchRegion, searchReg); SearchRegion = searchRegion; + string barCodeReg = Path.Combine(modelDir, "barcode.reg"); + HOperatorSet.ReadRegion(out HObject barCodeRegion, searchReg); + BarCodeRegion = barCodeRegion; } } diff --git a/Rs.SkyLine/Flow/Camera/VisionManager.cs b/Rs.SkyLine/Flow/Camera/VisionManager.cs index 6e355ee..3f157a8 100644 --- a/Rs.SkyLine/Flow/Camera/VisionManager.cs +++ b/Rs.SkyLine/Flow/Camera/VisionManager.cs @@ -225,7 +225,24 @@ namespace Rs.MotionPlat.Flow.Camera vr.OffsetY =-1 * (row.D- upCameraScanBarCodeModel.ModelMatchResult[0].D) * GlobalVar.UpCameraMmPerPixel; vr.OffsetR = AngleTool.Rad2Deg((angle.D - upCameraScanBarCodeModel.ModelMatchResult[2].D)); vr.SourceImage = image; - vr.SearchModelOK = true; + if(vr.OffsetX 0) + { + return decodedDataStrings.ToString().Replace("\"", ""); + } + else + { + if (mode == "maximum_recognition") + { + HOperatorSet.WriteImage(images, "bmp", 0, $"d://images/scanfail/{DateTime.Now.ToString("yyyy-MM-dd HHmmss ffff")}"); + HOperatorSet.ClearDataCode2dModel(dataCodeHandle); + } + } + } + return ""; + } + //else + //{ + // HOperatorSet.WriteImage(images, "bmp", 0, $"d://images/scanfail/{DateTime.Now.ToString("yyyy-MM-dd HHmmss ffff")}"); + // mr.ScanOK = false; + //} + } + catch (Exception ex) + { + LogHelper.Error(ex.Message, ex); + return ""; + } + } } } diff --git a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs index 95b849b..f4e61b7 100644 --- a/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs +++ b/Rs.SkyLine/Flow/NormalFlow/DischargeFlow.cs @@ -708,11 +708,14 @@ namespace Rs.MotionPlat.Flow } if (GlobalVar.RunSpace && GlobalVar.EnableScanBarCodeByDownCamera) { - foreach (Nozzle nl in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)) + if(GlobalVar.EnableScanBarCodeByDownCamera) { - if (string.IsNullOrEmpty(nl.SN)) + foreach (Nozzle nl in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)) { - nl.SN = (nl.FromIndex + 1).ToString().PadLeft(18, '0'); + if (string.IsNullOrEmpty(nl.SN)) + { + nl.SN = VirtualBarCode.Code;// (nl.FromIndex + 1).ToString().PadLeft(18, '0'); + } } } mrs = new List(); @@ -743,11 +746,15 @@ namespace Rs.MotionPlat.Flow logInfo = GetClassName() + $"图片处理完成,准备放料"; MessageQueue.Instance.Insert(logInfo); int count = 0; - foreach (Nozzle nozzle in NozzleManager.GetNozzlesByStatus( ENozzleStatus.ToUnload)) + if(GlobalVar.EnableScanBarCodeByDownCamera) { - nozzle.SN = mrs[count].SN; - count++; + foreach (Nozzle nozzle in NozzleManager.GetNozzlesByStatus(ENozzleStatus.ToUnload)) + { + nozzle.SN = mrs[count].SN; + count++; + } } + //int ni = 1; //foreach (MatchResult item in mrs) //{ @@ -764,7 +771,7 @@ namespace Rs.MotionPlat.Flow List errCodeList = new List(); foreach (MatchResult item in mrs) { - if(item.IsOK) + if(item.IsOK&&GlobalVar.EnableScanBarCodeByDownCamera) { NozzleManager.GetNozzle(ni).SN = item.SN; } @@ -1449,16 +1456,34 @@ namespace Rs.MotionPlat.Flow { if(TurnoverTrayManager.Instance.Slot(vr.SlotIndex).IsHasProduct) { - if (vr.SearchModelOK && vr.OffsetX < 0.5 && vr.OffsetY < 0.5 && vr.OffsetR < 5)//定位成功 + if (vr.SearchModelOK)//定位成功 { - if(vr.ScanBarCodeOK) + if(!GlobalVar.EnableScanBarCodeByDownCamera) { - //复制二维码 - LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex, vr.SN); + if(GlobalVar.RunSpace) + { + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex, VirtualBarCode.Code); + } + else + { + if(vr.ScanBarCodeOK) + { + //复制二维码 + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex, vr.SN); + } + else + { + //复制二维码 + LoadAndUnloadTask.Instance.CopyBarcodeToTask(vr.SlotIndex, ""); + } + } } } + else + { + //定位失败,或者超出指定范围 + } } - } OnUpCameraGrabResult?.Invoke(result); } diff --git a/Rs.SkyLine/Rs.SkyLine.csproj b/Rs.SkyLine/Rs.SkyLine.csproj index fe87ee0..d2548ce 100644 --- a/Rs.SkyLine/Rs.SkyLine.csproj +++ b/Rs.SkyLine/Rs.SkyLine.csproj @@ -133,6 +133,7 @@ +