From 7a9de31ab33f9c38cb8b6124a18307dbf4cb6ae7 Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期三, 15 四月 2026 10:34:04 +0800
Subject: [PATCH] 新增相机主界面单次以及连续触发模式,检索区分2D/3D相机修复LB3D相机参数设置问题以及新增兰宝3D相机参数存储在本地以及初始化给相机参数。

---
 LB_SmartVision/VisionForm.cs |  326 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 268 insertions(+), 58 deletions(-)

diff --git a/LB_SmartVision/VisionForm.cs b/LB_SmartVision/VisionForm.cs
index 3167069..560ad7b 100644
--- a/LB_SmartVision/VisionForm.cs
+++ b/LB_SmartVision/VisionForm.cs
@@ -1,6 +1,7 @@
 锘縰sing HalconDotNet;
 using LB_SmartVision.Forms;
 using LB_SmartVision.Forms.Pages;
+using LB_SmartVision.Forms.Pages.BarcodeReaderPage;
 using LB_SmartVision.Forms.Pages.CameraPage;
 using LB_SmartVision.Forms.Pages.CommunicatorPage;
 using LB_SmartVision.Forms.Pages.HistoricalData;
@@ -13,9 +14,12 @@
 using LB_SmartVision.ProcessRun;
 using LB_SmartVision.SQL;
 using LB_SmartVision.Tool;
+using LB_SmartVisionCameraDevice.PHM6000;
 using LB_SmartVisionCommon;
 using LB_SmartVisionLoginUI;
 using LB_VisionProcesses;
+using LB_VisionProcesses.BarcodeReaders;
+using LB_VisionProcesses.BarcodeReaders.Huayray;
 using LB_VisionProcesses.Cameras;
 using LB_VisionProcesses.Cameras.HikCameras;
 using LB_VisionProcesses.Cameras.HRCameras;
@@ -51,10 +55,12 @@
 {
     public partial class VisionForm : Form
     {
+        #region  Variable
         public string NowBom = string.Empty;
 
         AllProcessesPage AllProcessesPage = new AllProcessesPage();
         CamerasEditPage CamerasEditPage = new CamerasEditPage();
+        BarcodeReadersEditPage BarcodeReadersEditPage = new BarcodeReadersEditPage();
         HistoricalDataEditPage HistoricalDataEditPage = new HistoricalDataEditPage();
         CommunicatorsEditPage CommunicatorsEditPage = new CommunicatorsEditPage();
         SettingEditPage SettingEditPage = new SettingEditPage();
@@ -77,6 +83,8 @@
         // 绐椾綋绫荤殑鍏ㄥ眬鍙橀噺锛氭爣璁版槸鍚﹀厑璁稿垏鎹ab锛堥粯璁ゅ厑璁革級
         private bool _isTabSwitchAllowed = true;
 
+        #endregion
+
         public VisionForm()
         {
             InitializeComponent();
@@ -94,10 +102,15 @@
 
             HistoricalDataEditPage.LogInfo += LogInfo;
             materialTabControl.Controls.Add(new MyPage(HistoricalDataEditPage));
+
             lEDLightSourceControlEditPage.LogInfo += LogInfo;
             materialTabControl.Controls.Add(new MyPage(lEDLightSourceControlEditPage));
+
             CamerasEditPage.LogInfo += LogInfo;
             materialTabControl.Controls.Add(new MyPage(CamerasEditPage));
+
+            BarcodeReadersEditPage.LogInfo += LogInfo;
+            materialTabControl.Controls.Add(new MyPage(BarcodeReadersEditPage));
 
             CommunicatorsEditPage.LogInfo += LogInfo;
             materialTabControl.Controls.Add(new MyPage(CommunicatorsEditPage));
@@ -743,6 +756,15 @@
             LB_SmartVision.Tool.Tool.ReadStringConfig("User ID", out string User_ID);
             LB_SmartVision.Tool.Tool.ReadStringConfig("Password", out string Password);
             GlobalVar.strProductName = DateBaseName;
+            //鍔犺浇LB鐩告満鍙傛暟
+            if (LoadAllLBCameras(GlobalVar.allCamerasLBPath))
+            {
+                LogInfo("LB3D鐩告満閰嶇疆鏂囦欢鍔犺浇鎴愬姛锛�", LogInfoType.PASS);
+            }
+            else
+            {
+                LogInfo("LB3D鐩告満閰嶇疆鏂囦欢鍔犺浇澶辫触", LogInfoType.ERROR);
+            }
             //鍔犺浇閫氳
             foreach (BaseCommunicator com in GlobalVar.dicCommunicators.Values)
             {
@@ -770,6 +792,20 @@
             else
             {
                 LogInfo("鐩告満鍔犺浇澶辫触", LogInfoType.ERROR);
+            }
+            //鍔犺浇璇荤爜鍣�
+            foreach (var reader in GlobalVar.dicBarcodeReaders.Values)
+            {
+                reader.Dispose();
+            }
+            GlobalVar.dicBarcodeReaders.Clear();
+            if (LoadAllBarcodeReaders(GlobalVar.allBarcodeReadersConnectionStringPath))
+            {
+                LogInfo("璇荤爜鍣ㄥ姞杞芥垚鍔�", LogInfoType.PASS);
+            }
+            else
+            {
+                LogInfo("璇荤爜鍣ㄥ姞杞藉け璐�", LogInfoType.ERROR);
             }
             //鍔犺浇鍏ㄥ眬鍙橀噺
             IProcess.dicGlobalVars.Clear();
@@ -936,7 +972,109 @@
             SaveAllCsv();
             SaveMotionControlDatas();
             SaveSerialPorts();
+            SaveAllBarcodeReaders();
         }
+
+
+        public bool LoadAllBarcodeReaders(string allBarcodeReadersConnectionStringPath)
+        {
+            if (!File.Exists(allBarcodeReadersConnectionStringPath))
+            {
+                Debug.WriteLine("璇荤爜鍣ㄩ厤缃枃浠朵笉瀛樺湪锛屽垱寤虹┖鏂囦欢");
+                SaveAllBarcodeReaders();
+                return true;
+            }
+            string strJson = string.Empty;
+            using (StreamReader streamReader = new StreamReader(allBarcodeReadersConnectionStringPath, Encoding.UTF8))
+            {
+                strJson = streamReader.ReadToEnd();
+                streamReader.Close();
+            }
+            GlobalVar.allBarcodeReadersConnectionString = JsonConvert.DeserializeObject<ConcurrentDictionary<string, string>>(strJson);
+            if (GlobalVar.allBarcodeReadersConnectionString == null)
+            {
+                MessageBox.Show("璇荤爜鍣ㄥ姞杞藉け璐�!", "寮傚父");
+                return false;
+            }
+            BarcodeReaderBase reader = null;
+            foreach (var ReaderConnectionString in GlobalVar.allBarcodeReadersConnectionString)
+            {
+                Enum.TryParse<BarcodeReaderBrand>(ReaderConnectionString.Value, out BarcodeReaderBrand brand);
+                switch (brand)
+                {
+                    case BarcodeReaderBrand.Huayray:
+                        {
+                            reader = new HRBarcodeReader();
+                            break;
+                        }
+                    default:
+                        {
+                            MessageBox.Show($"[{ReaderConnectionString.Key}]璇荤爜鍣ㄥ搧鐗屼笉鏀寔!", "寮傚父");
+                            continue;
+                        }
+                }
+                reader.SN = ReaderConnectionString.Key;
+                if (!reader.Open(ReaderConnectionString.Key))
+                {
+                    LogInfo($"鍒濆鍖栬鐮佸櫒[{ReaderConnectionString.Key}]澶辫触", LogInfoType.ERROR);
+                    reader.IsConnected = false;
+                    reader.IsGrabbing = false;
+                }
+                else
+                {
+                    LogInfo($"鍒濆鍖栬鐮佸櫒[{ReaderConnectionString.Key}]鎴愬姛", LogInfoType.PASS);
+                }
+
+                GlobalVar.dicBarcodeReaders.TryAdd(ReaderConnectionString.Key, reader);
+            }
+
+            return true;
+        }
+
+        public bool SaveAllBarcodeReaders()
+        {
+            try
+            {
+                string strJson = string.Empty;
+                GlobalVar.allBarcodeReadersConnectionString = new ConcurrentDictionary<string, string>();
+
+                foreach (var item in GlobalVar.dicBarcodeReaders)
+                {
+                    string ReaderSN = item.Value.SN;
+                    string ReaderBrand = item.Value.Brand.ToString();
+
+                    if (string.IsNullOrEmpty(ReaderSN) || string.IsNullOrEmpty(ReaderBrand))
+                    {
+                        break;
+                    }
+                    GlobalVar.allBarcodeReadersConnectionString.TryAdd(ReaderSN, ReaderBrand);
+                }
+                var settings = new JsonSerializerSettings
+                {
+                    Formatting = Formatting.Indented,
+                    ContractResolver = new DefaultContractResolver
+                    {
+                        NamingStrategy = new CamelCaseNamingStrategy()
+                    }
+                };
+
+                strJson = JsonConvert.SerializeObject(GlobalVar.allBarcodeReadersConnectionString, settings);
+                string directoryPath = Path.GetDirectoryName(GlobalVar.allBarcodeReadersConnectionStringPath);
+                if (!Directory.Exists(directoryPath))
+                {
+                    try
+                    {
+                        Directory.CreateDirectory(directoryPath);
+                    }
+                    catch (Exception)
+                    { }
+                }
+                File.WriteAllText(GlobalVar.allBarcodeReadersConnectionStringPath, strJson, Encoding.UTF8);
+                return true;
+            }
+            catch { return false; }
+        }
+
 
         public bool LoadSerialPorts(string allSerialPortPath)
         {
@@ -1090,7 +1228,13 @@
                         camera.isGrabbing = false;
                     }
                 }
-
+                if (camera is LBCamera phmCamera)
+                {
+                    if (GlobalVar.allLBCameras.ContainsKey(camera.SN) && phmCamera._isConnected)
+                    {
+                        phmCamera.UpdateSensorConfig(GlobalVar.allLBCameras[camera.SN]);
+                    }
+                }
                 GlobalVar.dicCameras.TryAdd(CameraConnectionString.Key, camera);
             }
 
@@ -1427,6 +1571,47 @@
                 return true;
             }
             catch { return false; }
+        }
+
+        public bool LoadAllLBCameras(string allLBCamerasPath)
+        {
+            try
+            {
+                if (!File.Exists(allLBCamerasPath))
+                {
+                    Debug.WriteLine("鏂囦欢涓嶅瓨鍦ㄥ垱寤虹┖鏂囦欢");
+                    // 鑾峰彇涓嶅甫鏂囦欢鍚嶇殑鐩綍璺緞
+                    string directoryPath = Path.GetDirectoryName(allLBCamerasPath);
+                    SaveAllLBCameras();
+                    return true;
+                }
+                GlobalVar.allLBCameras = ConfigManager<ConcurrentDictionary<string, PHM6000SensorConfig>>.LoadConfig<ConcurrentDictionary<string, PHM6000SensorConfig>>(GlobalVar.allCamerasLBPath);
+            }
+            catch
+            {
+                return false;
+            }
+            return true;
+        }
+
+        public bool SaveAllLBCameras()
+        {
+            try
+            {
+                if (GlobalVar.allLBCameras.Count >= 0)
+                {
+                    ConfigManager<ConcurrentDictionary<string, PHM6000SensorConfig>>.SaveConfig<ConcurrentDictionary<string, PHM6000SensorConfig>>(GlobalVar.allLBCameras, GlobalVar.allCamerasLBPath);
+                }
+                else
+                {
+                    return false;
+                }
+            }
+            catch
+            {
+                return false;
+            }
+            return true;
         }
 
         public bool LoadAllProcess(string allProcessConnectionStringPath)
@@ -2237,76 +2422,101 @@
 
         private void btn_Run_Click(object sender, EventArgs e)
         {
-            var matchedItems = GlobalVar.dicProcessSetting
-                                        .Where(item =>
-                                        {
-                                            var value = item.Value;
-                                            var triggerComm = value["瑙﹀彂閫氳"];
-                                            var triggerChar = value["瑙﹀彂瀛楃"];
-                                            return triggerComm != null;
-                                            //return triggerComm != null && triggerComm.Equals(name) &&
-                                            //       (string.IsNullOrEmpty(triggerChar?.ToString()) ||
-                                            //        msg.StartsWith(triggerChar.ToString()));
-                                        })
-                                        .ToList(); // 閬垮厤閲嶅瀛楀吀璁块棶鍜岃绠辨搷浣�
-            if (matchedItems.Count <= 0)
+            //var matchedItems = GlobalVar.dicProcessSetting
+            //                            .Where(item =>
+            //                            {
+            //                                var value = item.Value;
+            //                                var triggerComm = value["瑙﹀彂閫氳"];
+            //                                var triggerChar = value["瑙﹀彂瀛楃"];
+            //                                return triggerComm != null && !triggerComm.Equals("鏃�");
+            //                                //return triggerComm != null && triggerComm.Equals(name) &&
+            //                                //       (string.IsNullOrEmpty(triggerChar?.ToString()) ||
+            //                                //        msg.StartsWith(triggerChar.ToString()));
+            //                            })
+            //                            .ToList(); // 閬垮厤閲嶅瀛楀吀璁块棶鍜岃绠辨搷浣�
+            //if (matchedItems.Count <= 0)
+            //{
+            //    return;
+            //}
+            //foreach (var item in matchedItems)
+            //{
+            //    Task.Factory.StartNew(() =>
+            //    {
+            //        TriggerRunMessageReceived(item.Value["瑙﹀彂閫氳"], item.Value["瑙﹀彂瀛楃"]);
+            //    });
+            //}
+            foreach (var item in GlobalVar.dicCameras.Keys)
             {
-                return;
+                GlobalVar.dicCameras[item].StartSingleGrab();
             }
-            TriggerRunMessageReceived(matchedItems[0].Value["瑙﹀彂閫氳"], matchedItems[0].Value["瑙﹀彂瀛楃"]);
         }
 
         private void btn_RunContinuously_Click(object sender, EventArgs e)
         {
-            if (btn_RunContinuously.Text.Equals("杩炵画杩愯"))
+            if (this.ckbAllowRun.Checked)
             {
-                _isTabSwitchAllowed = false;
-                btn_RunContinuously.Text = "鏆傚仠杩愯";
-                // 鍏抽棴浣胯兘
-                SelectMainPage();
-                btn_GlobalVar.Enabled = false;
-                btn_Login.Enabled = false;
-                btn_SingleRun.Enabled = false;
-                ckbAllowRun.Enabled = false;
-                Task.Factory.StartNew(() =>
+                if (btn_RunContinuously.Text.Equals("杩炵画杩愯"))
                 {
-                    var matchedItems = GlobalVar.dicProcessSetting
-                                                .Where(item =>
-                                                {
-                                                    var value = item.Value;
-                                                    var triggerComm = value["瑙﹀彂閫氳"];
-                                                    var triggerChar = value["瑙﹀彂瀛楃"];
-                                                    return triggerComm != null;
-                                                    //return triggerComm != null && triggerComm.Equals(name) &&
-                                                    //       (string.IsNullOrEmpty(triggerChar?.ToString()) ||
-                                                    //        msg.StartsWith(triggerChar.ToString()));
-                                                })
-                                                .ToList(); // 閬垮厤閲嶅瀛楀吀璁块棶鍜岃绠辨搷浣�
-                    while (btn_RunContinuously.Text.Equals("鏆傚仠杩愯"))
+                    _isTabSwitchAllowed = false;
+                    btn_RunContinuously.Text = "鏆傚仠杩愯";
+                    // 鍏抽棴浣胯兘
+                    SelectMainPage();
+                    btn_GlobalVar.Enabled = false;
+                    btn_Login.Enabled = false;
+                    btn_SingleRun.Enabled = false;
+                    ckbAllowRun.Enabled = false;
+                    foreach (var item in GlobalVar.dicCameras.Keys)
                     {
-
-                        TriggerRunMessageReceived(matchedItems[0].Value["瑙﹀彂閫氳"], matchedItems[0].Value["瑙﹀彂瀛楃"]);
-                        Thread.Sleep(3500);
+                        GlobalVar.dicCameras[item].StartContinuousGrab();
                     }
-                    //this.Invoke(() =>
+                    //Task.Factory.StartNew(() =>
                     //{
+                    //    var matchedItems = GlobalVar.dicProcessSetting
+                    //                                .Where(item =>
+                    //                                {
+                    //                                    var value = item.Value;
+                    //                                    var triggerComm = value["瑙﹀彂閫氳"];
+                    //                                    var triggerChar = value["瑙﹀彂瀛楃"];
+                    //                                    return triggerComm != null && !triggerComm.Equals("鏃�");
+                    //                                    //return triggerComm != null && triggerComm.Equals(name) &&
+                    //                                    //       (string.IsNullOrEmpty(triggerChar?.ToString()) ||
+                    //                                    //        msg.StartsWith(triggerChar.ToString()));
+                    //                                })
+                    //                                .ToList(); // 閬垮厤閲嶅瀛楀吀璁块棶鍜岃绠辨搷浣�
+                    //    while (btn_RunContinuously.Text.Equals("鏆傚仠杩愯"))
+                    //    {
+                    //        foreach (var item in matchedItems)
+                    //        {
+                    //            Task.Factory.StartNew(() =>
+                    //            {
+                    //                TriggerRunMessageReceived(item.Value["瑙﹀彂閫氳"], item.Value["瑙﹀彂瀛楃"]);
+                    //            });
+                    //        }
+                    //        //TriggerRunMessageReceived(matchedItems[0].Value["瑙﹀彂閫氳"], matchedItems[0].Value["瑙﹀彂瀛楃"]);
+                    //        Thread.Sleep(3500);
+                    //    }
+                    //    //this.Invoke(() =>
+                    //    //{
+                    //    //});
                     //});
-                });
+                }
+                else if (btn_RunContinuously.Text.Equals("鏆傚仠杩愯"))
+                {
+                    btn_RunContinuously.Text = "杩炵画杩愯";
+                    foreach (var item in GlobalVar.dicCameras.Keys)
+                    {
+                        GlobalVar.dicCameras[item].StopGrabbing();
+                    }
+                    // 鍚姩浣胯兘
+                    UnSelectMainPage();
+                    btn_GlobalVar.Enabled = true;
+                    btn_Login.Enabled = true;
+                    btn_SingleRun.Enabled = true;
+                    ckbAllowRun.Enabled = true;
+                    Thread.Sleep(100);
+                    _isTabSwitchAllowed = true;
+                }
             }
-            else if (btn_RunContinuously.Text.Equals("鏆傚仠杩愯"))
-            {
-                btn_RunContinuously.Text = "杩炵画杩愯";
-
-                // 鍚姩浣胯兘
-                UnSelectMainPage();
-                btn_GlobalVar.Enabled = true;
-                btn_Login.Enabled = true;
-                btn_SingleRun.Enabled = true;
-                ckbAllowRun.Enabled = true;
-                Thread.Sleep(100);
-                _isTabSwitchAllowed = true;
-            }
-
         }
 
         private void cmbProduct_SelectedValueChanged(object sender, EventArgs e)

--
Gitblit v1.9.3