轮胎外观检测添加思谋语义分割模型检测工具
LB_SmartVision/VisionForm.cs
@@ -1,6 +1,7 @@
using 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 @@
        // 窗体类的全局变量:标记是否允许切换Tab(默认允许)
        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)