Commit c8b734a6 LN

1.短皮带线4mask修改。2.料盘视频参数改为可配置。

1 个父辈 e14fa838
......@@ -481,22 +481,22 @@ namespace OnlineStore.AssemblyLine
private void btnLine1Check_Click(object sender, EventArgs e)
{
ReelCheck(btnLine1Check.Text, equipBean.Config.CameraName_1);
ReelCheck(btnLine1Check.Text, equipBean.Config.CameraName_1,equipBean.TrayLine1.Id, equipBean.TrayLine1.reelParam);
}
private void btnLine2Check_Click(object sender, EventArgs e)
{
ReelCheck(btnLine2Check.Text, equipBean.Config.CameraName_2);
ReelCheck(btnLine2Check.Text, equipBean.Config.CameraName_2, equipBean.TrayLine2.Id, equipBean.TrayLine2.reelParam);
}
private void ReelCheck(string text, string cameraName)
private void ReelCheck(string text, string cameraName,int id,ReelCheckParam param)
{
if (String.IsNullOrEmpty(cameraName))
{
return;
}
string imgName = "";
int[] result = ReelCheckUtil.ReelCheck(equipBase.DeviceID, cameraName,out imgName);
int[] result = ReelCheckUtil.ReelCheck(id, cameraName,param,out imgName);
if (result != null && result.Length == 2)
{
MessageBox.Show("相机[" + cameraName + "]检测料盘结果:[" + result[0] + "][" + result[1] + "],图片:"+imgName,text+"结果",MessageBoxButtons.OK,MessageBoxIcon.Information);
......
......@@ -632,4 +632,20 @@ PRO,0,短皮带线2监控相机,CameraName_2,r_camera_2,,,,,
20221124修改:
1.清空入库任务时清空托盘。
2.入料夹爪抓料后如果伺服检测信号亮,从服务器获取库位成功继续入库,未取到尺寸直接NG.
3.皮带线视觉识别图片保存功能。
\ No newline at end of file
3.皮带线视觉识别图片保存功能。
Config_DischargeLine_1.csv 需要增加配置:
PRO,0,短皮带线2监控提取上限[HSV],Camera_2_RangeL,57;15;0,,,,,
PRO,0,短皮带线2监控提取上限[HSV],Camera_2_RangeU,93;255;255,,,,,
PRO,0,短皮带线2监控区域1,Camera_2_Rect1,1120;737;296;282,,,,,
PRO,0,短皮带线2监控区域2,Camera_2_Rect2,1405;611;236;202,,,,,
Config_DischargeLine_2.csv 需要增加配置:
PRO,0,短皮带线1监控提取上限[HSV],Camera_1_RangeL,70;10;10,,,,,
PRO,0,短皮带线1监控提取上限[HSV],Camera_1_RangeU,95;255;255,,,,,
PRO,0,短皮带线1监控区域1,Camera_1_Rect1,1161;1079;432;395,,,,,
PRO,0,短皮带线1监控区域2,Camera_1_Rect2,1693;1078;302;233,,,,,
......@@ -92,6 +92,7 @@
<Compile Include="baan\WaitUtil.cs" />
<Compile Include="deviceLibrary\halcon\EyemManager.cs" />
<Compile Include="deviceLibrary\reelCheck\MyCamera.cs" />
<Compile Include="deviceLibrary\reelCheck\ReelCheckParam.cs" />
<Compile Include="deviceLibrary\reelCheck\ReelCheckUtil.cs" />
<Compile Include="deviceLibrary\halcon\CodeManager.cs" />
<Compile Include="deviceLibrary\halcon\RemoteDecodeHelper.cs" />
......
......@@ -2,6 +2,10 @@
PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,
PRO,0,扫码的相机名称(多个用#分隔),CameraNameList,GigE:MV-CE200-10GC (00D76546944),,,,,
PRO,0,短皮带线2监控相机,CameraName_2,r_camera_2,,,,,
PRO,0,短皮带线2监控提取上限[HSV],Camera_2_RangeL,57;15;0,,,,,
PRO,0,短皮带线2监控提取上限[HSV],Camera_2_RangeU,93;255;255,,,,,
PRO,0,短皮带线2监控区域1,Camera_2_Rect1,1120;737;296;282,,,,,
PRO,0,短皮带线2监控区域2,Camera_2_Rect2,1405;611;236;202,,,,,
,,,,,,,,,
DI,0,出料皮带线体1急停,DLine_SuddenStop,0,PRO_AOI_IP_2,0,出料皮带线体1急停,X021,X021
DI,0,出料皮带线体1复位,DLine_Reset,1,PRO_AOI_IP_2,0,出料皮带线体1复位,X022,X022
......
......@@ -2,6 +2,10 @@
PRO,0,设备是否处于调试状态(1=调试,0=正常),IsDebug,0,,,,,
PRO,0,扫码的相机名称(多个用#分隔),CameraNameList,GigE:MV-CE200-10GC (00D76546876),,,,,
PRO,0,短皮带线1监控相机,CameraName_1,r_camera_1,,,,,
PRO,0,短皮带线1监控提取上限[HSV],Camera_1_RangeL,70;10;10,,,,,
PRO,0,短皮带线1监控提取上限[HSV],Camera_1_RangeU,95;255;255,,,,,
PRO,0,短皮带线1监控区域1,Camera_1_Rect1,1161;1079;432;395,,,,,
PRO,0,短皮带线1监控区域2,Camera_1_Rect2,1693;1078;302;233,,,,,
,,,,,,,,,
DI,0,出料皮带线体2急停,DLine_SuddenStop,0,PRO_AOI_IP_3,0,出料皮带线体2急停,X041,X041
DI,0,出料皮带线体2复位,DLine_Reset,1,PRO_AOI_IP_3,0,出料皮带线体2复位,X042,X042
......
......@@ -56,6 +56,10 @@ namespace OnlineStore.DeviceLibrary
TrayLine1 = new OutTrayLineBean(330 + ((id - 1) * 3 + 1), "皮带线" + "_" + ((id - 1) * 3 + 1) + " ", IO_Type.ExitLocation_Check1, IO_Type.ExitTray_Check1, IO_Type.DLine_Run1, IO_Type.MiddleTray_Check3, this.DeviceID, IO_Type.DLine_Brush1, Config.CameraName_1);
TrayLine2 = new OutTrayLineBean(330 + ((id - 1) * 3 + 2), "皮带线" + "_" + ((id - 1) * 3 + 2) + " ", IO_Type.ExitLocation_Check2, IO_Type.ExitTray_Check2, IO_Type.DLine_Run2, IO_Type.EntryTray_Check3, this.DeviceID, IO_Type.DLine_Brush2, Config.CameraName_2);
}
TrayLine1.reelParam = ReelCheckParam.getParam(TrayLine1.Id, config.CameraName_1, config.Camera_1_RangeL, config.Camera_1_RangeU, config.Camera_1_Rect1, config.Camera_1_Rect2);
TrayLine2.reelParam = ReelCheckParam.getParam(TrayLine2.Id, config.CameraName_2, config.Camera_2_RangeL, config.Camera_2_RangeU, config.Camera_2_Rect1, config.Camera_2_Rect2);
Line3Turn = new LineTurnBean(DeviceID, IO_Type.DLine_Run3, IO_Type.Location_Check3);
if ((DeviceID % 100).Equals(1))
{
......
......@@ -32,13 +32,14 @@ namespace OnlineStore.DeviceLibrary
private string Name = "";
private LineTurnBean lineRun = null;
private string cameraName = "";
public ReelCheckParam reelParam = null;
internal LineMoveInfo MoveInfo = null;
public DischargeLine equipBean
{
get { return LineManager.Line.DisLineMap[equipBeanId]; }
}
internal bool Line3CanRun = true;
private int Id = 0;
public int Id = 0;
public OutTrayLineBean(int id, string name, string exitLocationS, string exittrayS, string lineRundo, string line3checkDi, int dId, string brushDo,string cName)
{
this.Id = id;
......@@ -336,7 +337,7 @@ namespace OnlineStore.DeviceLibrary
//如果有监控相机
if (!cameraName.Equals(""))
{
int[] results = ReelCheckUtil.ReelCheck(equipBean.DeviceID, cameraName,out imgName);
int[] results = ReelCheckUtil.ReelCheck(equipBean.DeviceID, cameraName,reelParam,out imgName);
if (results != null && results.Length == 2)
{
exitHasTray = (results[0] == 1);
......
......@@ -598,7 +598,6 @@ namespace OnlineStore.DeviceLibrary
bool findRightCode = false;
try
{
LogUtil.info(deviceName + " 【" + cameraName + "】视觉识别有料【" + FormUtil.GetSpanStr(DateTime.Now - startTime) + "】,开始扫码");
ho_Image = Camera._cam.CaptureOnImage(cameraName, out bmp);
if (ho_Image == null)
......@@ -618,7 +617,8 @@ namespace OnlineStore.DeviceLibrary
if (!hasReel)
{
return (false, codeList);
}
}
LogUtil.info(deviceName + " 【" + cameraName + "】视觉识别有料【" + FormUtil.GetSpanStr(DateTime.Now - startTime) + "】,开始扫码");
string r = "";
......
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
public class ReelCheckParam
{
public static ReelCheckParam getParam(int deviceID, string cameraName, string rangeL, string rangeU, string rect1, string rect2)
{
ReelCheckParam param = new ReelCheckParam();
param.cameraName = cameraName;
param.deviceId = deviceID;
//短皮带线三 默认参数
param.dpRangeL = new List<double> { 70, 10, 10 };
param.dpRangeU = new List<double> { 95, 255, 255 };
param.rect1 = new List<int> { 1161, 1079, 432, 395 };
param.rect2 = new List<int> { 1693, 1078, 302, 233 };
if (deviceID.Equals(332))
{
//短皮带线2默认参数
param.dpRangeL = new List<double> { 57, 15, 0 };
param.dpRangeU = new List<double> { 93, 255, 255 };
param.rect1 = new List<int> { 1120, 737, 296, 282 };
param.rect2 = new List<int> { 1405, 611, 236, 202 };
}
List<double> dpRangeL = param.toDoubleArray(rangeL);
List<double> dpRangeU = param.toDoubleArray(rangeU);
List<int> rect1List = param.toIntArray(rect1);
List<int> rect2List = param.toIntArray(rect2);
if (dpRangeL.Count >= 3)
{
param.dpRangeL = new List<double> { dpRangeL[0], dpRangeL[1], dpRangeL[2] };
}
if (dpRangeU.Count >= 3)
{
param.dpRangeU = new List<double> { dpRangeU[0], dpRangeU[1], dpRangeU[2] };
}
if (rect1List.Count >= 4)
{
param.rect1 = new List<int > { rect1List[0], rect1List[1], rect1List[2], rect1List[3] };
}
if (rect2List.Count >= 4)
{
param.rect2 = new List<int> { rect2List[0], rect2List[1], rect2List[2], rect2List[3] };
}
LogUtil.info($"ReelCheckParam 皮带线ID {deviceID},{cameraName}" +
$",dpRangeL: {String.Join(",",param.dpRangeL.ToArray())}" +
$", dpRangeU: {String.Join(",", param.dpRangeU.ToArray())}" +
$", rect1: {String.Join(",", param.rect1.ToArray())}" +
$", rect2 {String.Join(",", param.rect2.ToArray())}");
return param;
}
public List<double> toDoubleArray(String str)
{
List<double> result = new List<double>();
try
{
string[] array = str.Split(';');
if (array.Length > 0)
{
foreach (string a in array)
{
double v = Convert.ToDouble(a);
result.Add(v);
}
}
}
catch (Exception ex)
{
}
return result;
}
public List<int> toIntArray(String str)
{
List<int> result = new List<int>();
try
{
string[] array = str.Split(';');
if (array.Length > 0)
{
foreach (string a in array)
{
int v = Convert.ToInt32(a);
result.Add(v);
}
}
}
catch (Exception ex)
{
}
return result;
}
public string cameraName;
public int deviceId;
// 提取下限
public List<double> dpRangeL;
//提取上限[H S V]
public List<double> dpRangeU;
//范围1
public List<int> rect1;
//范围2
public List<int> rect2;
}
}
......@@ -71,7 +71,7 @@ dMinorStep 步进,默认1.0。
///////////////////使用///////////////////
public static int[] ReelCheck(int deviceID, string cameraName, out string imgName)
public static int[] ReelCheck(int deviceID, string cameraName,ReelCheckParam param, out string imgName)
{
imgName = "";
if (String.IsNullOrEmpty(cameraName))
......@@ -109,19 +109,23 @@ dMinorStep 步进,默认1.0。
EyemImage image = eyemCvtToEyemImage(bitmap);
//绿色分割模型
EyemHSVModel tpHsvModel = new EyemHSVModel();
tpHsvModel.dpRangeLExt = new double[] { 0, 0, 0 };
tpHsvModel.dpRangeUExt = new double[] { 0, 0, 0 };
tpHsvModel.dpRangeL = new double[] { param.dpRangeL[0],param.dpRangeL[1],param.dpRangeL[2] };
tpHsvModel.dpRangeU = new double[] { param.dpRangeU[0],param.dpRangeU[1],param.dpRangeU[2] };
//tpHsvModel.dpRangeL = new double[] { 55, 10, 35 }; tpHsvModel.dpRangeU = new double[] { 100, 255, 255 };
//tpHsvModel.dpRangeLExt = new double[] { 0, 0, 0 }; tpHsvModel.dpRangeUExt = new double[] { 0, 0, 0 };
//短皮带线三
tpHsvModel.dpRangeL = new double[] { 78, 10, 60 }; tpHsvModel.dpRangeU = new double[] { 100, 255, 255 };
tpHsvModel.dpRangeLExt = new double[] { 0, 0, 0 }; tpHsvModel.dpRangeUExt = new double[] { 0, 0, 0 };
if (deviceID.Equals(301))
{
//短皮带线二
tpHsvModel.dpRangeL = new double[] { 57, 15, 0 }; tpHsvModel.dpRangeU = new double[] { 93, 255, 255 };
tpHsvModel.dpRangeLExt = new double[] { 0, 0, 0 }; tpHsvModel.dpRangeUExt = new double[] { 0, 0, 0 };
}
////短皮带线三
//tpHsvModel.dpRangeL = new double[] { 70, 10, 10 }; tpHsvModel.dpRangeU = new double[] { 95, 255, 255 };
//tpHsvModel.dpRangeLExt = new double[] { 0, 0, 0 }; tpHsvModel.dpRangeUExt = new double[] { 0, 0, 0 };
//if (deviceID.Equals(301))
//{
// //短皮带线二
// tpHsvModel.dpRangeL = new double[] { 57, 15, 0 }; tpHsvModel.dpRangeU = new double[] { 93, 255, 255 };
// tpHsvModel.dpRangeLExt = new double[] { 0, 0, 0 }; tpHsvModel.dpRangeUExt = new double[] { 0, 0, 0 };
//}
//裁剪区域
EyemRect tpRoi = new EyemRect();
......@@ -130,23 +134,23 @@ dMinorStep 步进,默认1.0。
tpRoi.iHeight = image.iHeight;
//添加需要监控的位置信息
List<EyemRect> tpRois = new List<EyemRect>();
//EyemRect roi1 = new EyemRect();
//roi1.iXs = 533; roi1.iYs = 187; roi1.iWidth = 345; roi1.iHeight = 310;
//EyemRect roi2 = new EyemRect();
//roi2.iXs = 900; roi2.iYs = 137; roi2.iWidth = 240; roi2.iHeight = 197;
List<EyemRect> tpRois = new List<EyemRect>();
EyemRect roi1 = new EyemRect();
EyemRect roi2 = new EyemRect();
roi1.iXs = 470; roi1.iYs = 143; roi1.iWidth = 411; roi1.iHeight = 387;
roi2.iXs = 882; roi2.iYs = 84; roi2.iWidth = 317; roi2.iHeight = 251;
roi1.iXs = param.rect1[0]; roi1.iYs = param.rect1[1]; roi1.iWidth = param.rect1[2]; roi1.iHeight = param.rect1[3];
roi2.iXs = param.rect2[0]; roi2.iYs = param.rect2[1]; roi2.iWidth = param.rect2[2]; roi2.iHeight = param.rect2[3];
//roi1.iXs = 470; roi1.iYs = 143; roi1.iWidth = 411; roi1.iHeight = 387;
//roi2.iXs = 882; roi2.iYs = 84; roi2.iWidth = 317; roi2.iHeight = 251;
//roi1.iXs = 1161; roi1.iYs = 1079; roi1.iWidth = 432; roi1.iHeight = 395;
//roi2.iXs = 1693; roi2.iYs = 1078; roi2.iWidth = 302; roi2.iHeight = 233;
//短皮带线三
if (deviceID.Equals(301))
{
//短皮带线二
roi1.iXs = 1120; roi1.iYs = 737; roi1.iWidth = 296; roi1.iHeight = 282;
roi2.iXs = 1405; roi2.iYs = 611; roi2.iWidth = 236; roi2.iHeight = 202;
}
////短皮带线三
//if (deviceID.Equals(301))
//{
// //短皮带线二
// roi1.iXs = 1120; roi1.iYs = 737; roi1.iWidth = 296; roi1.iHeight = 282;
// roi2.iXs = 1405; roi2.iYs = 611; roi2.iWidth = 236; roi2.iHeight = 202;
//}
tpRois.Add(roi1); tpRois.Add(roi2);
......@@ -291,37 +295,7 @@ dMinorStep 步进,默认1.0。
}
return tpImage;
}
//public static void eyemCvtToEyemImage(Bitmap bitmap, out EyemImage tpImage)
//{
// int channels = 0;
// switch (bitmap.PixelFormat)
// {
// case PixelFormat.Format8bppIndexed:
// channels = 1;
// break;
// case PixelFormat.Format24bppRgb:
// channels = 3;
// break;
// case PixelFormat.Format32bppArgb:
// channels = 4;
// break;
// default:
// break;
// }
// //锁定数据区
// BitmapData bd = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
// ImageLockMode.ReadOnly, bitmap.PixelFormat);
// try
// {
// eyemImageFromBitmap(bd.Scan0, bd.Width, bd.Height, 0, channels, out tpImage);
// }
// finally
// {
// bitmap.UnlockBits(bd);
// }
//}
public static IntPtr eyemStructArray2IntPtr<T>(T[] tpArray)
{
if (tpArray == null)
......@@ -387,4 +361,5 @@ dMinorStep 步进,默认1.0。
}
}
}

6.6 KB | 宽: | 高:

15.1 KB | 宽: | 高:

source/DeviceLibrary/mask.png
source/DeviceLibrary/mask.png
source/DeviceLibrary/mask.png
source/DeviceLibrary/mask.png
  • 两方对比
  • 交换覆盖
  • 透明覆盖
......@@ -39,12 +39,52 @@ namespace OnlineStore.LoadCSVLibrary
[ConfigProAttribute("CameraName_1",false)]
public string CameraName_1 { get; set; }
/// <summary>
/// PRO,0,短皮带线1监控提取上限[HSV],Camera_1_RangeL,78;10;60,,,,,
/// </summary>
[ConfigProAttribute("Camera_1_RangeL", false)]
public string Camera_1_RangeL { get; set; }
/// <summary>
/// PRO,0,短皮带线1监控提取上限[HSV],Camera_1_RangeU,100;255;255
/// </summary>
[ConfigProAttribute("Camera_1_RangeU", false)]
public string Camera_1_RangeU { get; set; }
/// <summary>
/// PRO,0,短皮带线1监控区域1,Camera_1_Rect1,470;143;411;387
/// </summary>
[ConfigProAttribute("Camera_1_Rect1", false)]
public string Camera_1_Rect1 { get; set; }
/// <summary>
/// PRO,0,短皮带线1监控区域2,Camera_1_Rect2,882;84;317;251
/// </summary>
[ConfigProAttribute("Camera_1_Rect2", false)]
public string Camera_1_Rect2 { get; set; }
/// <summary>
/// PRO 0 短皮带线2监控相机 CameraName_2
/// </summary>
[ConfigProAttribute("CameraName_2",false)]
public string CameraName_2 { get; set; }
/// <summary>
/// PRO,0,短皮带线1监控提取上限[HSV],Camera_2_RangeL,78;10;60,,,,,
/// </summary>
[ConfigProAttribute("Camera_2_RangeL", false)]
public string Camera_2_RangeL { get; set; }
/// <summary>
/// PRO,0,短皮带线1监控提取上限[HSV],Camera_2_RangeU,100;255;255
/// </summary>
[ConfigProAttribute("Camera_2_RangeU", false)]
public string Camera_2_RangeU { get; set; }
/// <summary>
/// PRO,0,短皮带线1监控区域1,Camera_2_Rect1,470;143;411;387
/// </summary>
[ConfigProAttribute("Camera_2_Rect1", false)]
public string Camera_2_Rect1 { get; set; }
/// <summary>
/// PRO,0,短皮带线1监控区域2,Camera_2_Rect2,882;84;317;251
/// </summary>
[ConfigProAttribute("Camera_2_Rect2", false)]
public string Camera_2_Rect2 { get; set; }
private List<string> CameraList = null;
......@@ -65,5 +105,7 @@ namespace OnlineStore.LoadCSVLibrary
}
return CameraList;
}
}
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!