From 116ed6b584bbdb40c5b65e7cb57e039b6ae57800 Mon Sep 17 00:00:00 2001
From: C3032 <C3032@BC3032>
Date: 星期四, 08 一月 2026 11:12:25 +0800
Subject: [PATCH] 优化相机配置和图像获取逻辑
---
LB_VisionProcesses/Cameras/2DCameraForm.cs | 272 ++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 201 insertions(+), 71 deletions(-)
diff --git a/LB_VisionProcesses/Cameras/2DCameraForm.cs b/LB_VisionProcesses/Cameras/2DCameraForm.cs
index 0d48c1f..107eba5 100644
--- a/LB_VisionProcesses/Cameras/2DCameraForm.cs
+++ b/LB_VisionProcesses/Cameras/2DCameraForm.cs
@@ -1,6 +1,8 @@
锘縰sing HalconDotNet;
+using LB_SmartVisionCameraDevice.PHM6000;
using LB_VisionControl;
using LB_VisionProcesses.Cameras.HRCameras;
+using LB_VisionProcesses.Cameras.LBCameras;
using MVSDK_Net;
using Newtonsoft.Json.Linq;
using OpenCvSharp;
@@ -38,9 +40,9 @@
{
InitializeComponent();
//浼犲叆鐩告満鍙ユ焺鍚庣鐢ㄨ繛鎺�/鏂紑鎸夐敭
- this.btn_Open.Enabled = false;
- this.btn_Close.Enabled = false;
- this.cmb_Brand.Enabled = false;
+ //this.btnOpen.Enabled = false;
+ //this.btnClose.Enabled = false;
+ //this.cmbBrand.Enabled = false;
this.panel_Picture.Controls.Clear();
this.dicCameras = dicCameras;
@@ -48,7 +50,7 @@
this.camConfig = camConfig;
foreach (var CamSN in dicCameras.Keys)
- cmb_SN.Items.Add(CamSN);
+ cmbSN.Items.Add(CamSN);
Enum.TryParse(camConfig.Params.Inputs["瑙﹀彂鏂瑰紡"].ToString(), out TriggerSource TriggerSource);
@@ -96,17 +98,23 @@
var brands = Enum.GetValues(typeof(CameraBrand)).Cast<CameraBrand>();
foreach (var brand in brands)
{
- cmb_Brand.Items.Add(brand.ToString());
+ cmbBrand.Items.Add(brand.ToString());
}
//閫夋嫨Cam浼氳Е鍙慥alueChanged浜嬩欢锛屾病鏈夎緭鍏ョ浉鏈虹殑鎯呭喌涓嬮�夋嫨鍒�-1
if (camConfig != null)
{
string SN = camConfig.Params.Inputs["鐩告満SN"].ToString();
- int Index = cmb_SN.FindString(SN);
+ int Index = cmbSN.FindString(SN);
- cmb_SN.Text = SN;
- cmb_SN.SelectedIndex = Index;
+ cmbSN.Text = SN;
+ cmbSN.SelectedIndex = Index;
+
+ // 濡傛灉娌℃壘鍒扮储寮曪紙鍙兘鏄柊澧炵殑锛夛紝鎵嬪姩瑙﹀彂涓�娆¢�昏緫浠ユ洿鏂癠I
+ if (Index == -1)
+ {
+ cmbSN_SelectedIndexChanged(null, null);
+ }
ckbLocalTest.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁鏈湴鍙栧浘"].ToString());
ckbUpParams.Checked = Convert.ToBoolean(camConfig.Params.Inputs["鏄惁姣忔鍐欏叆鍙傛暟"].ToString());
@@ -147,9 +155,9 @@
if (dicCameras != null && dicCameras.Count > 0)
return;
- cmb_SN.Items.Clear();
+ cmbSN.Items.Clear();
// 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
- if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+ if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
{
// 浣跨敤 switch 璇彞鏉ュ垽鏂灇涓惧��
switch (brand)
@@ -158,7 +166,7 @@
camera = new HRCamera();
break;
case CameraBrand.LBCamera:
- //camera = new LBCamera();
+ camera = new LBCamera();
break;
default:
Debug.WriteLine("鏈煡鍝佺墝");
@@ -167,8 +175,8 @@
foreach (var item in camera.GetListEnum())
{
- if (!cmb_SN.Items.Contains(item))
- cmb_SN.Items.Add(item);
+ if (!cmbSN.Items.Contains(item))
+ cmbSN.Items.Add(item);
}
}
else
@@ -179,7 +187,7 @@
private void cmbSN_SelectedIndexChanged(object sender, EventArgs e)
{
- btn_Edit.Enabled = false;
+ btnEdit.Enabled = false;
//camConfig涓嶄负绌猴紙杈撳叆鏈夌浉鏈猴級锛屾洿鏀圭浉鏈洪�夋嫨闇�瑕侀噸鏂板姞杞藉埛鍥句簨浠�
if (camConfig != null && camera != null)
{
@@ -192,25 +200,37 @@
camera.Dispose();
}
- if (dicCameras != null && dicCameras.Count > 0 && dicCameras.ContainsKey(cmb_SN.Text))
- camera = dicCameras[cmb_SN.Text];
+ if (dicCameras != null && dicCameras.Count > 0 && dicCameras.ContainsKey(cmbSN.Text))
+ camera = dicCameras[cmbSN.Text];
//璇存槑鐩告満宸茬粡鍒濆鍖栨垚鍔�
- if (camera != null && camera.isGrabbing)
+ if (camera != null)
{
- camera.ImageGrabbed -= GetImageBllComplete;
- camera.ImageGrabbed += GetImageBllComplete;
+ int Index = cmbBrand.FindString(camera.Brand.ToString());
+ if (Index >= 0)
+ {
+ cmbBrand.Text = camera.Brand.ToString();
+ cmbBrand.SelectedIndex = Index;
+ }
- int Index = cmb_Brand.FindString(camera.Brand.ToString()); ;
- cmb_Brand.Text = camera.Brand.ToString();
- cmb_Brand.SelectedIndex = Index;
+ if (camera.isGrabbing)
+ {
+ camera.ImageGrabbed -= GetImageBllComplete;
+ camera.ImageGrabbed += GetImageBllComplete;
+ this.btnEdit.Enabled = true;
+ }
+ // 濡傛灉鐩告満瀛樺湪浜庡瓧鍏镐腑锛岃鏄庢槸宸茶繛鎺ョ殑璁惧锛屽厑璁哥紪杈�
+ else if (dicCameras != null && dicCameras.ContainsKey(camera.SN))
+ {
+ this.btnEdit.Enabled = true;
+ }
}
}
- private void btn_Open_Click(object sender, EventArgs e)
+ private void btnOpen_Click(object sender, EventArgs e)
{
// 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
- if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+ if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
{
if (camera != null)
{
@@ -222,7 +242,7 @@
switch (brand)
{
case CameraBrand.LBCamera:
- //camera = new LBCamera();
+ camera = new LBCamera();
break;
case CameraBrand.HRCamera:
camera = new HRCamera();
@@ -232,11 +252,12 @@
return;
}
- if (cmb_SN.Items.Count > 0 && camera.InitDevice(cmb_SN.Text.ToString(), this.Handle))
+ if (cmbSN.Items.Count > 0 && camera.InitDevice(cmbSN.Text.ToString(), this.Handle))
{
camera.ImageGrabbed -= GetImageBllComplete;
camera.ImageGrabbed += GetImageBllComplete;
MessageBox.Show(camera.SN + "鎵撳紑鎴愬姛");
+ this.btnEdit.Enabled = true;
}
}
else
@@ -266,11 +287,11 @@
}
}
- private void btn_Close_Click(object sender, EventArgs e)
+ private void btnClose_Click(object sender, EventArgs e)
{
if (camera == null)
return;
- this.btn_Edit.Enabled = false;
+ this.btnEdit.Enabled = false;
if (camera.CloseDevice())
{
@@ -279,10 +300,84 @@
}
}
- private void btn_Edit_Click(object sender, EventArgs e)
+ private void btnEdit_Click(object sender, EventArgs e)
{
if (camera == null)
+ {
return;
+ }
+ using (Form editForm = new Form())
+ {
+ editForm.Text = "楂樼骇鍙傛暟璁剧疆 - " + camera.SN;
+ editForm.Size = new System.Drawing.Size(400, 500);
+ editForm.StartPosition = FormStartPosition.CenterParent;
+ editForm.FormBorderStyle = FormBorderStyle.SizableToolWindow;
+
+ PropertyGrid pg = new PropertyGrid();
+ pg.Dock = DockStyle.Fill;
+
+ if (camera is LBCamera phmCamera)
+ {
+ pg.SelectedObject = phmCamera.GetSensorConfig();
+ pg.PropertyValueChanged += (s, ev) =>
+ {
+ phmCamera.UpdateSensorConfig((PHM6000SensorConfig)pg.SelectedObject);
+ };
+ }
+ else
+ {
+ pg.SelectedObject = new CameraAdvancedSettings(camera);
+ }
+
+ editForm.Controls.Add(pg);
+ editForm.ShowDialog();
+ }
+ }
+
+ /// <summary>
+ /// 鐩告満楂樼骇璁剧疆鍖呰绫�
+ /// </summary>
+ public class CameraAdvancedSettings
+ {
+ private BaseCamera _camera;
+ public CameraAdvancedSettings(BaseCamera camera)
+ {
+ _camera = camera;
+ }
+
+ [System.ComponentModel.Category("瑙﹀彂璁剧疆"), System.ComponentModel.Description("瑙﹀彂婧�")]
+ public TriggerSource TriggerSource
+ {
+ get { _camera.GetTriggerMode(out _, out TriggerSource s); return s; }
+ set { _camera.GetTriggerMode(out TriggerMode m, out _); _camera.SetTriggerMode(m, value); }
+ }
+
+ [System.ComponentModel.Category("瑙﹀彂璁剧疆"), System.ComponentModel.Description("瑙﹀彂鏋佹��")]
+ public TriggerPolarity TriggerPolarity
+ {
+ get { _camera.GetTriggerPolarity(out TriggerPolarity p); return p; }
+ set { _camera.SetTriggerPolarity(value); }
+ }
+
+ [System.ComponentModel.Category("瑙﹀彂璁剧疆"), System.ComponentModel.Description("瑙﹀彂寤舵椂(us)")]
+ public double TriggerDelay
+ {
+ get { _camera.GetTriggerDelay(out double d); return d; }
+ set { _camera.SetTriggerDelay(value); }
+ }
+
+ [System.ComponentModel.Category("瑙﹀彂璁剧疆"), System.ComponentModel.Description("瑙﹀彂婊ゆ尝(us)")]
+ public double TriggerFilter
+ {
+ get { _camera.GetTriggerFliter(out double f); return f; }
+ set { _camera.SetTriggerFliter(value); }
+ }
+
+ [System.ComponentModel.Category("鍥惧儚璁剧疆"), System.ComponentModel.Description("鑷姩鐧藉钩琛�")]
+ public void AutoBalanceWhite()
+ {
+ _camera.AutoBalanceWhite();
+ }
}
/// <summary>
@@ -295,21 +390,20 @@
if (e.Bitmap == null)
return;
- lock (e.Bitmap)
- {
- if (this.InvokeRequired) // 妫�鏌ユ槸鍚﹂渶瑕佸湪UI绾跨▼涓婅皟鐢�
+ lock (e.Bitmap)
{
- this.Invoke(new Action(() =>
+ if (this.InvokeRequired) // 妫�鏌ユ槸鍚﹂渶瑕佸湪UI绾跨▼涓婅皟鐢�
+ {
+ this.Invoke(new Action(() =>
+ {
+ onlinePictureBox.Image = e.Bitmap;
+ })); // 閫掑綊璋冪敤鑷韩锛屼絾杩欐鍦║I绾跨▼涓�
+ }
+ else
{
onlinePictureBox.Image = e.Bitmap;
- })); // 閫掑綊璋冪敤鑷韩锛屼絾杩欐鍦║I绾跨▼涓�
+ }
}
- else
- {
- onlinePictureBox.Image = e.Bitmap;
- }
- }
-
total.iImageCount++;
try
{
@@ -324,7 +418,7 @@
private Pen pen = new Pen(Color.Blue, 3f);
private System.Drawing.Point[] stPointList = new System.Drawing.Point[4];
- private void btn_GrabOnce_Click(object sender, EventArgs e)
+ private void btnGrabOnce_Click(object sender, EventArgs e)
{
DateTime StartTime = DateTime.Now;
if (camera == null)
@@ -332,7 +426,7 @@
Task.Factory.StartNew(() =>
{
- camera.GetCamConfig(out CameraConfig OriCamConfig);
+ //camera.GetCamConfig(out CameraConfig OriCamConfig);
camera.SetExpouseTime(Convert.ToDouble(txtExp.Text));
camera.SetGain(Convert.ToDouble(txtGain.Text));
@@ -348,11 +442,11 @@
}));
//澶嶅師鍘熼�氳鍙h缃�
- camera.SetCamConfig(OriCamConfig);
+ //camera.SetCamConfig(OriCamConfig);
});
}
- private void btn_StartHard_Click(object sender, EventArgs e)
+ private void btnStartHard_Click(object sender, EventArgs e)
{
if (camera == null)
return;
@@ -360,7 +454,7 @@
total.Clear();
// 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
- if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+ if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
{
camera.StopGrabbing();
camera.StartWith_HardTriggerModel();
@@ -368,11 +462,11 @@
startGrabtime = DateTime.Now;
- cmb_SN.Enabled = false;
- cmb_Brand.Enabled = false;
+ cmbSN.Enabled = false;
+ cmbBrand.Enabled = false;
}
- private void btn_StartGrab_Click(object sender, EventArgs e)
+ private void btnStartGrab_Click(object sender, EventArgs e)
{
if (camera == null)
return;
@@ -380,7 +474,7 @@
total.Clear();
// 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
- if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+ if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
{
Task.Factory.StartNew(() =>
{
@@ -391,11 +485,11 @@
}
startGrabtime = DateTime.Now;
- cmb_SN.Enabled = false;
- cmb_Brand.Enabled = false;
+ cmbSN.Enabled = false;
+ cmbBrand.Enabled = false;
}
- private void btn_CloseGrab_Click(object sender, EventArgs e)
+ private void btnCloseGrab_Click(object sender, EventArgs e)
{
try
{
@@ -403,23 +497,26 @@
return;
// 灏濊瘯灏嗚緭鍏ュ瓧绗︿覆杞崲涓烘灇涓惧��
- if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand))
+ if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand))
{
Task.Factory.StartNew(() =>
{
camera.StopGrabbing();
- camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software);
- camera.StartGrabbing();
+ if (brand != CameraBrand.LBCamera)
+ {
+ camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software);
+ camera.StartGrabbing();
+ }
});
}
- cmb_SN.Enabled = true;
- cmb_Brand.Enabled = true;
+ cmbSN.Enabled = true;
+ cmbBrand.Enabled = true;
}
catch { }
}
- private void btn_LocalGrab_Click(object sender, EventArgs e)
+ private void btnLocalGrab_Click(object sender, EventArgs e)
{
try
{
@@ -452,7 +549,7 @@
catch { }
}
- private void txt_Exp_TextChanged(object sender, EventArgs e)
+ private void txtExp_TextChanged(object sender, EventArgs e)
{
if (camera == null)
return;
@@ -462,7 +559,7 @@
camera.SetExpouseTime(exp);
}
- private void txt_Gain_TextChanged(object sender, EventArgs e)
+ private void txtGain_TextChanged(object sender, EventArgs e)
{
if (camera == null)
return;
@@ -472,7 +569,7 @@
camera.SetGain(gain);
}
- private void btn_AddImages_Click(object sender, EventArgs e)
+ private void btnAddImages_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
@@ -517,9 +614,25 @@
if (res == DialogResult.Yes) //淇濆瓨VPP
{
- camConfig.Params.Inputs.Add("鐩告満SN", cmb_SN.Text);
+ TriggerSource actualSource = TriggerSource.Line0;
+ TriggerPolarity polarity = TriggerPolarity.RisingEdge;
+ double delay = 0;
+ double filter = 0;
+
+ if (camera != null)
+ {
+ camera.GetTriggerMode(out _, out actualSource);
+ camera.GetTriggerPolarity(out polarity);
+ camera.GetTriggerDelay(out delay);
+ camera.GetTriggerFliter(out filter);
+ }
+
+ camConfig.Params.Inputs.Add("鐩告満SN", cmbSN.Text);
camConfig.Params.Inputs.Add("瑙﹀彂妯″紡", TriggerMode.On);
- camConfig.Params.Inputs.Add("瑙﹀彂鏂瑰紡", radioButtonSoft.Checked ? TriggerSource.Software : TriggerSource.Line0);
+ camConfig.Params.Inputs.Add("瑙﹀彂鏂瑰紡", radioButtonSoft.Checked ? TriggerSource.Software : actualSource);
+ camConfig.Params.Inputs.Add("瑙﹀彂鏋佹��", polarity);
+ camConfig.Params.Inputs.Add("瑙﹀彂寤舵椂", delay);
+ camConfig.Params.Inputs.Add("瑙﹀彂娑堟姈", filter);
camConfig.Params.Inputs.Add("鏄惁鏈湴鍙栧浘", ckbLocalTest.Checked);
camConfig.Params.Inputs.Add("鏈湴鍙栧浘璺緞", cmbImagesPath.Items.Cast<string>().ToList());
camConfig.Params.Inputs.Add("鏄惁澶辫触閲嶆柊鍙栧浘", ckbRegrab.Checked);
@@ -548,10 +661,11 @@
camera.ImageGrabbed -= GetImageBllComplete;
camera.StopGrabbing();
+ camera.GetTriggerMode(out _, out TriggerSource actualSource);
if (radioButtonSoft.Checked)
camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software);
else
- camera.SetTriggerMode(TriggerMode.On, TriggerSource.Line0);
+ camera.SetTriggerMode(TriggerMode.On, actualSource);
camera.StartGrabbing();
}
@@ -574,7 +688,7 @@
};
}
- private void btn_SaveImage_Click(object sender, EventArgs e)
+ private void btnSaveImage_Click(object sender, EventArgs e)
{
if (Bitmap == null)
{
@@ -614,17 +728,28 @@
private void radioButtonSoft_CheckedChanged(object sender, EventArgs e)
{
- btn_GrabOnce.Enabled = radioButtonSoft.Checked;
- btn_StartGrab.Enabled = radioButtonSoft.Checked;
- btn_CloseGrab.Enabled = radioButtonSoft.Checked;
+ btnGrabOnce.Enabled = radioButtonSoft.Checked;
+ btnStartGrab.Enabled = radioButtonSoft.Checked;
+ btnCloseGrab.Enabled = radioButtonSoft.Checked;
btnStartHard.Enabled = !radioButtonSoft.Checked;
if (camera == null)
return;
+
+ camera.GetTriggerMode(out _, out TriggerSource currentSource);
+
if (radioButtonSoft.Checked)
+ {
camera.SetTriggerMode(TriggerMode.On, TriggerSource.Software);
+ }
else
- camera.SetTriggerMode(TriggerMode.On, TriggerSource.Line0);
+ {
+ // 濡傛灉褰撳墠宸茬粡鏄‖浠惰Е鍙戞簮锛屽垯淇濇寔锛涘惁鍒欓粯璁ine0
+ if (currentSource == TriggerSource.Software)
+ camera.SetTriggerMode(TriggerMode.On, TriggerSource.Line0);
+ else
+ camera.SetTriggerMode(TriggerMode.On, currentSource);
+ }
}
System.Windows.Forms.ToolTip ToolTip = new System.Windows.Forms.ToolTip();
@@ -650,12 +775,17 @@
private void controlBox_2DCameraForm_Click(object sender, EventArgs e)
{
-
+
}
private void dungeonControlBox_2DCameraForm_Click(object sender, EventArgs e)
{
- // this.Close();
+ // this.Close();
+ }
+
+ private void theme_2DCameraForm_Click(object sender, EventArgs e)
+ {
+
}
}
}
--
Gitblit v1.9.3