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 @@
+