| | |
| | | using HalconDotNet; |
| | | using LB_VisionControl; |
| | | using LB_VisionProcesses.Cameras.HRCameras; |
| | | using MVSDK_Net; |
| | | using Newtonsoft.Json.Linq; |
| | | using OpenCvSharp; |
| | |
| | | { |
| | | InitializeComponent(); |
| | | //传入相机句柄后禁用连接/断开按键 |
| | | this.btnOpen.Enabled = false; |
| | | this.btnClose.Enabled = false; |
| | | this.cmbBrand.Enabled = false; |
| | | this.btn_Open.Enabled = false; |
| | | this.btn_Close.Enabled = false; |
| | | this.cmb_Brand.Enabled = false; |
| | | this.panel_Picture.Controls.Clear(); |
| | | |
| | | this.dicCameras = dicCameras; |
| | |
| | | this.camConfig = camConfig; |
| | | |
| | | foreach (var CamSN in dicCameras.Keys) |
| | | cmbSN.Items.Add(CamSN); |
| | | cmb_SN.Items.Add(CamSN); |
| | | |
| | | Enum.TryParse(camConfig.Params.Inputs["触发方式"].ToString(), out TriggerSource TriggerSource); |
| | | |
| | |
| | | var brands = Enum.GetValues(typeof(CameraBrand)).Cast<CameraBrand>(); |
| | | foreach (var brand in brands) |
| | | { |
| | | cmbBrand.Items.Add(brand.ToString()); |
| | | cmb_Brand.Items.Add(brand.ToString()); |
| | | } |
| | | |
| | | //选择Cam会触发ValueChanged事件,没有输入相机的情况下选择到-1 |
| | | if (camConfig != null) |
| | | { |
| | | string SN = camConfig.Params.Inputs["相机SN"].ToString(); |
| | | int Index = cmbSN.FindString(SN); |
| | | int Index = cmb_SN.FindString(SN); |
| | | |
| | | cmbSN.Text = SN; |
| | | cmbSN.SelectedIndex = Index; |
| | | cmb_SN.Text = SN; |
| | | cmb_SN.SelectedIndex = Index; |
| | | |
| | | ckbLocalTest.Checked = Convert.ToBoolean(camConfig.Params.Inputs["是否本地取图"].ToString()); |
| | | ckbUpParams.Checked = Convert.ToBoolean(camConfig.Params.Inputs["是否每次写入参数"].ToString()); |
| | |
| | | if (dicCameras != null && dicCameras.Count > 0) |
| | | return; |
| | | |
| | | cmbSN.Items.Clear(); |
| | | cmb_SN.Items.Clear(); |
| | | // 尝试将输入字符串转换为枚举值 |
| | | if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand)) |
| | | if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand)) |
| | | { |
| | | // 使用 switch 语句来判断枚举值 |
| | | switch (brand) |
| | | { |
| | | case CameraBrand.HRCamera: |
| | | //camera = new HRCamera(); |
| | | camera = new HRCamera(); |
| | | break; |
| | | case CameraBrand.LBCamera: |
| | | //camera = new LBCamera(); |
| | |
| | | |
| | | foreach (var item in camera.GetListEnum()) |
| | | { |
| | | if (!cmbSN.Items.Contains(item)) |
| | | cmbSN.Items.Add(item); |
| | | if (!cmb_SN.Items.Contains(item)) |
| | | cmb_SN.Items.Add(item); |
| | | } |
| | | } |
| | | else |
| | |
| | | |
| | | private void cmbSN_SelectedIndexChanged(object sender, EventArgs e) |
| | | { |
| | | btnEdit.Enabled = false; |
| | | btn_Edit.Enabled = false; |
| | | //camConfig不为空(输入有相机),更改相机选择需要重新加载刷图事件 |
| | | if (camConfig != null && camera != null) |
| | | { |
| | |
| | | camera.Dispose(); |
| | | } |
| | | |
| | | if (dicCameras != null && dicCameras.Count > 0 && dicCameras.ContainsKey(cmbSN.Text)) |
| | | camera = dicCameras[cmbSN.Text]; |
| | | if (dicCameras != null && dicCameras.Count > 0 && dicCameras.ContainsKey(cmb_SN.Text)) |
| | | camera = dicCameras[cmb_SN.Text]; |
| | | |
| | | //说明相机已经初始化成功 |
| | | if (camera != null && camera.isGrabbing) |
| | |
| | | camera.ImageGrabbed -= GetImageBllComplete; |
| | | camera.ImageGrabbed += GetImageBllComplete; |
| | | |
| | | int Index = cmbBrand.FindString(camera.Brand.ToString()); ; |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | private void btnOpen_Click(object sender, EventArgs e) |
| | | private void btn_Open_Click(object sender, EventArgs e) |
| | | { |
| | | // 尝试将输入字符串转换为枚举值 |
| | | if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand)) |
| | | if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand)) |
| | | { |
| | | if (camera != null) |
| | | { |
| | |
| | | //camera = new LBCamera(); |
| | | break; |
| | | case CameraBrand.HRCamera: |
| | | //camera = new HRCamera(); |
| | | camera = new HRCamera(); |
| | | break; |
| | | default: |
| | | Debug.WriteLine($"【{DateTime.Now:HH:mm:ss.fff}】未知品牌"); |
| | | return; |
| | | } |
| | | |
| | | if (cmbSN.Items.Count > 0 && camera.InitDevice(cmbSN.Text.ToString(), this.Handle)) |
| | | if (cmb_SN.Items.Count > 0 && camera.InitDevice(cmb_SN.Text.ToString(), this.Handle)) |
| | | { |
| | | camera.ImageGrabbed -= GetImageBllComplete; |
| | | camera.ImageGrabbed += GetImageBllComplete; |
| | |
| | | } |
| | | } |
| | | |
| | | private void btnClose_Click(object sender, EventArgs e) |
| | | private void btn_Close_Click(object sender, EventArgs e) |
| | | { |
| | | if (camera == null) |
| | | return; |
| | | this.btnEdit.Enabled = false; |
| | | this.btn_Edit.Enabled = false; |
| | | |
| | | if (camera.CloseDevice()) |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | private void btnEdit_Click(object sender, EventArgs e) |
| | | private void btn_Edit_Click(object sender, EventArgs e) |
| | | { |
| | | if (camera == null) |
| | | return; |
| | |
| | | private Pen pen = new Pen(Color.Blue, 3f); |
| | | |
| | | private System.Drawing.Point[] stPointList = new System.Drawing.Point[4]; |
| | | private void btnGrabOnce_Click(object sender, EventArgs e) |
| | | private void btn_GrabOnce_Click(object sender, EventArgs e) |
| | | { |
| | | DateTime StartTime = DateTime.Now; |
| | | if (camera == null) |
| | |
| | | |
| | | 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)); |
| | |
| | | })); |
| | | |
| | | //复原原通讯口设置 |
| | | //camera.SetCamConfig(OriCamConfig); |
| | | camera.SetCamConfig(OriCamConfig); |
| | | }); |
| | | } |
| | | |
| | | private void btnStartHard_Click(object sender, EventArgs e) |
| | | private void btn_StartHard_Click(object sender, EventArgs e) |
| | | { |
| | | if (camera == null) |
| | | return; |
| | |
| | | total.Clear(); |
| | | |
| | | // 尝试将输入字符串转换为枚举值 |
| | | if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand)) |
| | | if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand)) |
| | | { |
| | | camera.StopGrabbing(); |
| | | camera.StartWith_HardTriggerModel(); |
| | |
| | | |
| | | startGrabtime = DateTime.Now; |
| | | |
| | | cmbSN.Enabled = false; |
| | | cmbBrand.Enabled = false; |
| | | cmb_SN.Enabled = false; |
| | | cmb_Brand.Enabled = false; |
| | | } |
| | | |
| | | private void btnStartGrab_Click(object sender, EventArgs e) |
| | | private void btn_StartGrab_Click(object sender, EventArgs e) |
| | | { |
| | | if (camera == null) |
| | | return; |
| | |
| | | total.Clear(); |
| | | |
| | | // 尝试将输入字符串转换为枚举值 |
| | | if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand)) |
| | | if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand)) |
| | | { |
| | | Task.Factory.StartNew(() => |
| | | { |
| | |
| | | } |
| | | |
| | | startGrabtime = DateTime.Now; |
| | | cmbSN.Enabled = false; |
| | | cmbBrand.Enabled = false; |
| | | cmb_SN.Enabled = false; |
| | | cmb_Brand.Enabled = false; |
| | | } |
| | | |
| | | private void btnCloseGrab_Click(object sender, EventArgs e) |
| | | private void btn_CloseGrab_Click(object sender, EventArgs e) |
| | | { |
| | | try |
| | | { |
| | |
| | | return; |
| | | |
| | | // 尝试将输入字符串转换为枚举值 |
| | | if (Enum.TryParse(cmbBrand.Text, true, out CameraBrand brand)) |
| | | if (Enum.TryParse(cmb_Brand.Text, true, out CameraBrand brand)) |
| | | { |
| | | Task.Factory.StartNew(() => |
| | | { |
| | |
| | | }); |
| | | } |
| | | |
| | | cmbSN.Enabled = true; |
| | | cmbBrand.Enabled = true; |
| | | cmb_SN.Enabled = true; |
| | | cmb_Brand.Enabled = true; |
| | | } |
| | | catch { } |
| | | } |
| | | |
| | | private void btnLocalGrab_Click(object sender, EventArgs e) |
| | | private void btn_LocalGrab_Click(object sender, EventArgs e) |
| | | { |
| | | try |
| | | { |
| | |
| | | catch { } |
| | | } |
| | | |
| | | private void txtExp_TextChanged(object sender, EventArgs e) |
| | | private void txt_Exp_TextChanged(object sender, EventArgs e) |
| | | { |
| | | if (camera == null) |
| | | return; |
| | |
| | | camera.SetExpouseTime(exp); |
| | | } |
| | | |
| | | private void txtGain_TextChanged(object sender, EventArgs e) |
| | | private void txt_Gain_TextChanged(object sender, EventArgs e) |
| | | { |
| | | if (camera == null) |
| | | return; |
| | |
| | | camera.SetGain(gain); |
| | | } |
| | | |
| | | private void btnAddImages_Click(object sender, EventArgs e) |
| | | private void btn_AddImages_Click(object sender, EventArgs e) |
| | | { |
| | | OpenFileDialog openFileDialog = new OpenFileDialog(); |
| | | |
| | |
| | | |
| | | if (res == DialogResult.Yes) //保存VPP |
| | | { |
| | | camConfig.Params.Inputs.Add("相机SN", cmbSN.Text); |
| | | camConfig.Params.Inputs.Add("相机SN", cmb_SN.Text); |
| | | camConfig.Params.Inputs.Add("触发模式", TriggerMode.On); |
| | | camConfig.Params.Inputs.Add("触发方式", radioButtonSoft.Checked ? TriggerSource.Software : TriggerSource.Line0); |
| | | camConfig.Params.Inputs.Add("是否本地取图", ckbLocalTest.Checked); |
| | |
| | | }; |
| | | } |
| | | |
| | | private void btnSaveImage_Click(object sender, EventArgs e) |
| | | private void btn_SaveImage_Click(object sender, EventArgs e) |
| | | { |
| | | if (Bitmap == null) |
| | | { |
| | |
| | | |
| | | private void radioButtonSoft_CheckedChanged(object sender, EventArgs e) |
| | | { |
| | | btnGrabOnce.Enabled = radioButtonSoft.Checked; |
| | | btnStartGrab.Enabled = radioButtonSoft.Checked; |
| | | btnCloseGrab.Enabled = radioButtonSoft.Checked; |
| | | btn_GrabOnce.Enabled = radioButtonSoft.Checked; |
| | | btn_StartGrab.Enabled = radioButtonSoft.Checked; |
| | | btn_CloseGrab.Enabled = radioButtonSoft.Checked; |
| | | btnStartHard.Enabled = !radioButtonSoft.Checked; |
| | | |
| | | if (camera == null) |