From 6ef4ced299197b0a8480734d3fda9e32b38e7a9a Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期二, 23 十二月 2025 13:38:28 +0800
Subject: [PATCH] 添加兴启新增的HR相机类等项目文件,并更新2DCameraForm。
---
LB_SmartVision/VisionForm.cs | 454 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 451 insertions(+), 3 deletions(-)
diff --git a/LB_SmartVision/VisionForm.cs b/LB_SmartVision/VisionForm.cs
index 7d8803e..b014f34 100644
--- a/LB_SmartVision/VisionForm.cs
+++ b/LB_SmartVision/VisionForm.cs
@@ -1,4 +1,5 @@
锘縰sing HalconDotNet;
+using LB_SmartVision.Forms;
using LB_SmartVision.Forms.Pages;
using LB_SmartVision.Forms.Pages.CameraPage;
using LB_SmartVision.Forms.Pages.CommunicatorPage;
@@ -9,10 +10,15 @@
using LB_SmartVision.Forms.Pages.UserManagementPage;
using LB_SmartVision.ProcessRun;
using LB_SmartVision.Tool;
+using LB_SmartVisionCommon;
+using LB_SmartVisionLoginUI;
using LB_VisionProcesses;
using LB_VisionProcesses.Cameras;
+using LB_VisionProcesses.Cameras.HRCameras;
using LB_VisionProcesses.Communicators;
using LB_VisionProcesses.Communicators.TCom;
+using LB_VisionProcesses.Forms;
+using log4net.Config;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Sunny.UI;
@@ -229,9 +235,78 @@
}
- private void LogInfo(string arg1, LogInfoType type)
+ private void LogInfo(string strLog, LogInfoType infoType)
{
+ if (string.IsNullOrEmpty(strLog))
+ {
+ return;
+ }
+ string strInfo = DateTime.Now.ToString("[yyyy:MM:HH:mm:ss:fff] ");
+ strInfo += strLog;
+ if (infoType != LogInfoType.NOSHOW)
+ {
+ // 濡傛灉褰撳墠涓嶆槸 UI 绾跨▼锛屽垯閫氳繃 Invoke 灏嗘搷浣滆皟搴﹀埌 UI 绾跨▼
+ if (this.rich_Info.InvokeRequired)
+ {
+ this.rich_Info.BeginInvoke(new Action<string>((msg) =>
+ {
+ if (this.rich_Info.Lines.Length > 1000)
+ {
+ this.rich_Info.Clear();
+ }
+ switch (infoType)
+ {
+ case LogInfoType.INFO:
+ this.rich_Info.SelectionColor = Color.Wheat;
+ break;
+ case LogInfoType.WARN:
+ this.rich_Info.SelectionColor = Color.LightGoldenrodYellow;
+ break;
+ case LogInfoType.PASS:
+ this.rich_Info.SelectionColor = Color.Green;
+ break;
+ case LogInfoType.ERROR:
+ this.rich_Info.SelectionColor = Color.Red;
+ break;
+ }
+ // 鏇存柊 UI 鎺т欢锛屾瘮濡傛樉绀烘帴鏀跺埌鐨勬秷鎭�
+ this.rich_Info.AppendText(strInfo);
+ this.rich_Info.AppendText("\r\n");
+ this.rich_Info.SelectionStart = this.rich_Info.Text.Length;
+ this.rich_Info.ScrollToCaret();
+ }), strInfo);
+ }
+ else
+ {
+
+ if (this.rich_Info.Lines.Length > 1000)
+ this.rich_Info.Clear();
+
+ // 濡傛灉宸茬粡鍦� UI 绾跨▼涓婏紝鐩存帴鏇存柊 UI
+ switch (infoType)
+ {
+ case LogInfoType.INFO:
+ this.rich_Info.SelectionColor = Color.Wheat;
+ break;
+ case LogInfoType.WARN:
+ this.rich_Info.SelectionColor = Color.Yellow;
+ break;
+ case LogInfoType.PASS:
+ this.rich_Info.SelectionColor = Color.Green;
+ break;
+ case LogInfoType.ERROR:
+ this.rich_Info.SelectionColor = Color.Red;
+ break;
+ }
+
+ this.rich_Info.AppendText(strInfo);
+ this.rich_Info.AppendText("\r\n");
+ this.rich_Info.SelectionStart = this.rich_Info.Text.Length;
+ this.rich_Info.ScrollToCaret();
+ }
+ }
+ AsyncLogHelper.Info(strLog);
}
public static bool SaveAllLayout()
@@ -406,9 +481,36 @@
}
catch { return false; }
}
+ private void EnsureDirectory(string path)
+ {
+ // 濡傛灉鏄浉瀵硅矾寰勶紝杞崲涓虹粷瀵硅矾寰�
+ string fullPath = Path.IsPathRooted(path) ? path : Path.GetFullPath(path);
+
+ if (!Directory.Exists(fullPath))
+ {
+ Directory.CreateDirectory(fullPath);
+ LogInfo($"鉁� 鐩綍鍒涘缓: {fullPath}", LogInfoType.INFO);
+ }
+ else
+ {
+ LogInfo($"鈩癸笍 鐩綍宸插瓨鍦�: {fullPath}", LogInfoType.INFO);
+ }
+ }
private void VisionForm_Load(object sender, EventArgs e)
{
+ XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
+ string[] paths = {
+ @"鐢熶骇鏃ュ織\Run_Log",
+ @"鐢熶骇鏃ュ織\Debug_Log",
+ @"鐢熶骇鏃ュ織\Error_Log",
+ @"鐢熶骇鏃ュ織\Fatal",
+ @"鐢熶骇鏃ュ織\Warn",
+ };
+ foreach (string path in paths)
+ {
+ EnsureDirectory(path);
+ }
if (!LB_SmartVision.Tool.Tool.ReadStringConfig("鏁版嵁搴撳悕绉�", out string DateBaseName))
{
DateBaseName = "浜у搧0";
@@ -526,7 +628,7 @@
switch (brand)
{
case CameraBrand.HRCamera:
- //camera = new HRCamera();
+ camera = new HRCamera();
break;
case CameraBrand.LBCamera:
//camera = new LBCamera();
@@ -957,7 +1059,6 @@
File.WriteAllText(GlobalVar.allLayoutPath, strJson, Encoding.UTF8);
LogInfo($"鍏ㄥ眬甯冨眬淇濆瓨鎴愬姛", LogInfoType.INFO);
-
return true;
}
catch { return false; }
@@ -970,6 +1071,7 @@
if (!File.Exists(allLayoutPath))
{
Debug.WriteLine("鏂囦欢涓嶅瓨鍦ㄥ垱寤虹┖鏂囦欢");
+ AsyncLogHelper.Info("鏂囦欢涓嶅瓨鍦ㄥ垱寤虹┖鏂囦欢");
// 鑾峰彇涓嶅甫鏂囦欢鍚嶇殑鐩綍璺緞
string directoryPath = Path.GetDirectoryName(allLayoutPath);
SaveAllLayout();
@@ -993,5 +1095,351 @@
}
catch { return false; }
}
+
+ private void btn_GlobalVar_Click(object sender, EventArgs e)
+ {
+ GlobalVarForm globalVarForm = new GlobalVarForm(GlobalVar.allProcessVarsPath);
+ globalVarForm.ShowDialog();
+ }
+
+ private void btn_Login_Click(object sender, EventArgs e)
+ {
+ //this.Hide();
+ //MainWindow.InstanceLoginandConfirmation().ShowDialog();
+ //if (!MainWindow.InstanceLoginandConfirmation().isQuit && MainWindow.InstanceLoginandConfirmation().correctUser)
+ //{
+ // MainWindow.InstanceLoginandConfirmation().closeLoginFrm();
+ // if (UserManager.Instance.CurrentUser.EmployeePermission == UserPermission.Operator)
+ // {
+ // //鎿嶄綔鍛樻潈闄愮晫闈�
+ // }
+ // else if (UserManager.Instance.CurrentUser.EmployeePermission == UserPermission.Engineer)
+ // {
+ // //鎶�鏈憳鏉冮檺鐣岄潰
+ // }
+ // else if (UserManager.Instance.CurrentUser.EmployeePermission == UserPermission.Administrator)
+ // {
+ // //绠$悊鍛樻潈闄愮晫闈�
+ // }
+ // this.Show();
+ //}
+ }
+
+ private void com_ProductName_SelectedValueChanged(object sender, EventArgs e)
+ {
+ if (com_ProductName.SelectedItem == null || com_ProductName.SelectedItem?.ToString() == GlobalVar.strProductName)
+ {
+ return;
+ }
+ if (com_ProductName.SelectedItem?.ToString() == "鏂板")
+ {
+ using (CreateProductForm createDatabaseForm = new CreateProductForm())
+ {
+ createDatabaseForm.ShowDialog();
+ }
+ }
+ else
+ {
+ //鍙樻洿鍓嶄繚瀛樼幇鏈夐厤缃�
+ SaveAllSetting();
+ LogInfo($"浜у搧浠巤GlobalVar.strProductName}鍒囨崲{com_ProductName.SelectedItem?.ToString()}", LogInfoType.WARN);
+ //Tool.WriteConfig("鏁版嵁搴撳悕绉�", com_ProductName.SelectedItem?.ToString());
+ GlobalVar.strProductName = com_ProductName.SelectedItem?.ToString();
+ foreach (BaseCamera camera in GlobalVar.dicCameras.Values)
+ {
+ camera.Dispose();
+ }
+ GlobalVar.dicCameras.Clear();
+ foreach (BaseCommunicator communicator in GlobalVar.dicCommunicators.Values)
+ {
+ communicator.TriggerRunMessageReceived -= TriggerRunMessageReceived;
+ communicator.Disconnect();
+ }
+ GlobalVar.dicCommunicators.Clear();
+ //淇濆瓨瀹岀幇鏈夐厤缃悗鏂紑鎵�鏈変簨浠�
+ foreach (var Process in GlobalVar.dicProcesses.Values)
+ {
+ Process.LogInfo -= LogInfo;
+ }
+ GlobalVar.dicProcesses.Clear();
+ //閲嶆柊鍔犺浇閰嶇疆
+ this.VisionForm_Load(sender, e);
+ }
+ }
+ private void TriggerRunMessageReceived(string name, string msg)
+ {
+ if (msg == null || msg.Trim('\0', '\r', '\n', ' ', '\uFEFF') == "" || string.IsNullOrEmpty(msg))
+ {
+ return;
+ }
+ LogInfo(string.Format("閫氳[{0}]鎺ユ敹鍒扮殑娑堟伅\"{1}\"", name, msg), LogInfoType.INFO);
+ var matchedItems = GlobalVar.dicProcessSetting
+ .Where(item =>
+ {
+ var value = item.Value;
+ var triggerComm = value["瑙﹀彂閫氳"];
+ var triggerChar = value["瑙﹀彂瀛楃"];
+
+ return triggerComm != null && triggerComm.Equals(name) &&
+ (string.IsNullOrEmpty(triggerChar?.ToString()) ||
+ msg.StartsWith(triggerChar.ToString()));
+ })
+ .ToList(); // 閬垮厤閲嶅瀛楀吀璁块棶鍜岃绠辨搷浣�
+ if (matchedItems.Count <= 0)
+ {
+ return;
+ }
+ if (!ckb_AllowRun.Checked)
+ {
+ LogInfo(string.Format($"妫�鏌ュ埌鍙瑙﹀彂鐨勬祦绋�,褰撳墠涓嶄负杩愯妯″紡!"), LogInfoType.ERROR);
+ return;
+ }
+ GlobalVar.dicProcesses.Values.AsParallel().ForAll(v => v.bCompleted = false);
+ LogInfo(string.Format($"妫�鏌ュ埌鍙瑙﹀彂鐨勬祦绋�,娓呯┖鎵�鏈夋祦绋嬭繍琛屽畬鎴愭爣璁颁綅!"), LogInfoType.INFO);
+ Parallel.ForEach(matchedItems, item =>
+ {
+ string ProcessName = item.Value["娴佺▼鍚�"];
+ LogInfo($"娴佺▼[{ProcessName}]寮�濮嬭繍琛�", LogInfoType.INFO);
+ if (!GlobalVar.dicProcesses.ContainsKey(ProcessName))
+ {
+ LogInfo(string.Format("娴佺▼[{0}]涓嶅瓨鍦�,璇锋鏌ユ祦绋嬭缃�", ProcessName), LogInfoType.ERROR);
+ return;
+ }
+ ProcessRunBll RunBll = GlobalVar.dicProcesses[ProcessName];
+ if (RunBll == null || RunBll.bRuning)
+ {
+ LogInfo(string.Format("娴佺▼[{0}]涓婃鏈繍琛屽畬鎴�,瑙﹀彂澶辫触", ProcessName)
+ , LogInfoType.ERROR);
+ return;
+ }
+ try
+ {
+ bool result = false;
+ string msg = string.Empty;
+ int times = Convert.ToInt32(item.Value["閲嶆祴娆℃暟"].ToString());
+ string ConnecResult = item.Value["鍏宠仈缁撴灉"];
+ if (times < 0)
+ {
+ result = GlobalVar.dicProcesses[ProcessName].Run();
+ msg = GlobalVar.dicProcesses[ProcessName].Msg;
+ if (!(string.IsNullOrEmpty(ConnecResult) || ConnecResult.Trim() == "鏈叧鑱�"))
+ {
+ GlobalVar.dicProcesses[ProcessName].GetBooleanOutput(ConnecResult, out result);
+ GlobalVar.dicProcesses[ProcessName].Result = result;
+ }
+ if (!result)
+ {
+ LogInfo($"娴佺▼[{ProcessName}]琚己鍒惰繍琛屾垚鍔�", LogInfoType.WARN);
+ GlobalVar.dicProcesses[ProcessName].Result = true;
+ result = true;
+ }
+ }
+ else
+ {
+ while (times >= 0)
+ {
+ result = RunBll.Run();
+ msg = RunBll.Msg;
+ if (!(string.IsNullOrEmpty(ConnecResult) || ConnecResult.Trim() == "鏈叧鑱�"))
+ {
+ RunBll.GetBooleanOutput(ConnecResult, out result);
+ RunBll.Result = result;
+ }
+ if (result)
+ {
+ break;
+ }
+ else if (!result && times > 0)
+ {
+ LogInfo(string.Format("娴佺▼[{0}]杩愯澶辫触閲嶆柊娴嬭瘯,鍓╀綑娆℃暟[{1}]", ProcessName, times), LogInfoType.WARN);
+ }
+ times--;
+ }
+ }
+ string ConnectProcess = item.Value["鍏宠仈娴佺▼"];
+ if (!(ConnectProcess == null || string.IsNullOrEmpty(ConnectProcess) || ConnectProcess.Trim() == ""))
+ {
+ //鐢ㄩ�楀彿鎴栬�呭垎鍙峰幓闂撮殧鍏宠仈娴佺▼
+ string[] arrConnectProcess;
+ if (ConnectProcess.Split(';').Length >= ConnectProcess.Split(',').Length)
+ {
+ arrConnectProcess = ConnectProcess.Split(';');
+ }
+ else
+ {
+ arrConnectProcess = ConnectProcess.Split(',');
+ }
+ foreach (string strConnectProcess in arrConnectProcess)
+ {
+ if (GlobalVar.dicProcesses.ContainsKey(strConnectProcess))
+ {
+ ProcessRunBll ConnectRunBll = GlobalVar.dicProcesses[strConnectProcess];
+ int waitTime = 10;
+ DateTime startTime = DateTime.Now;
+ while ((DateTime.Now - startTime).TotalSeconds < waitTime
+ && (ConnectRunBll.bRuning || !ConnectRunBll.bCompleted))
+ {
+ LogInfo(string.Format("鍏宠仈娴佺▼[{0}]鏈繍琛屽畬鎴�,鍓╀綑绛夊緟[{1}]s", strConnectProcess, (waitTime - ((DateTime.Now - startTime).TotalSeconds)))
+ , LogInfoType.NOSHOW);
+ Thread.Sleep(1000);
+ continue;
+ }
+ if (ConnectRunBll.bRuning || !ConnectRunBll.bCompleted)
+ {
+ GlobalVar.dicProcesses[ProcessName].Msg = string.Format("娴佺▼[{0}]鏈繍琛屽畬鎴�", ProcessName);
+ LogInfo(string.Format("鍏宠仈娴佺▼[{0}]鏈繍琛屽畬鎴�", strConnectProcess), LogInfoType.ERROR);
+ result = false;
+ break;
+ }
+ else if (!ConnectRunBll.bRuning && ConnectRunBll.bCompleted)
+ {
+ LogInfo(string.Format("鍏宠仈娴佺▼[{0}]杩愯瀹屾垚", strConnectProcess), LogInfoType.INFO);
+ }
+ result &= ConnectRunBll.Result;
+ if (!ConnectRunBll.Result)
+ {
+ LogInfo($"娴佺▼[{ProcessName}]鐨勫叧鑱旀祦绋媅{strConnectProcess}]杩愯澶辫触", LogInfoType.ERROR);
+ msg = $"鍏宠仈娴佺▼[{strConnectProcess}]杩愯澶辫触";
+ }
+ }
+ }
+ }
+ LogInfo(result ? $"娴佺▼[{ProcessName}]杩愯鎴愬姛" : $"娴佺▼[{ProcessName}]杩愯澶辫触,鍘熷洜鏄瘂msg}", result ? LogInfoType.PASS : LogInfoType.ERROR);
+ string SendComName = result ? item.Value["鎴愬姛閫氳"] : item.Value["澶辫触閫氳"];
+ string SendMsg = result ? item.Value["鎴愬姛瀛楃"] : item.Value["澶辫触瀛楃"];
+ if (GlobalVar.dicCommunicators.ContainsKey(SendComName) && (!string.IsNullOrEmpty(SendMsg) || SendMsg.Trim() != ""))
+ {
+ GlobalVar.dicCommunicators[SendComName].SendMessage(SendMsg);
+ LogInfo(string.Format("鍙戦�佺粰[{0}]浜嗘秷鎭痋"{1}\"", SendComName, SendMsg), LogInfoType.INFO);
+ }
+ }
+ catch (Exception ex)
+ {
+ LogInfo(string.Format("娴佺▼[{0}]杩愯鍙戠敓浜嗘剰澶�,鍘熷洜鏄�:{1}", ProcessName, ex.Message + $"銆恵ex.StackTrace}銆�"), LogInfoType.ERROR);
+ RunBll.Result = false;
+ RunBll.Msg = $"[鎰忓]{ex.Message}";
+ }
+ finally
+ {
+ #region 浠嶳unSettingPage鍜孡ayout涓幏鍙栨槸鍚︿繚瀛樺浘鐗�
+ string strImageType = "jpeg";
+ bool bSaveRunImage = false;
+ bool bSaveResultImage = false;
+ long lImageQuality = 100L;
+ //ckbSaveRunImage
+ if (GlobalVar.ControlStates.TryGetValue("ckbSaveRunImage_CheckBox", out object oSaveRunImage))
+ {
+ if (oSaveRunImage != null && oSaveRunImage is bool)
+ {
+ bSaveRunImage = (bool)oSaveRunImage;
+ }
+ }
+ //ckbSaveResultImage
+ if (GlobalVar.ControlStates.TryGetValue("ckbSaveResultImage_CheckBox", out object oSaveResultImage))
+ {
+ if (oSaveResultImage != null && oSaveResultImage is bool)
+ {
+ bSaveResultImage = (bool)oSaveResultImage;
+ }
+ }
+ //txtImageQuality
+ if (GlobalVar.ControlStates.TryGetValue("txtImageQuality_TextBox", out object oImageQuality))
+ {
+ if (oImageQuality != null && oImageQuality is string)
+ {
+ lImageQuality = Convert.ToInt64((string)oImageQuality);
+ }
+ }
+ //cmbImageType
+ if (GlobalVar.ControlStates.TryGetValue("cmbImageType_ComboBox", out object oImageType))
+ {
+ try
+ {
+ // 鍔ㄦ�佽В鏋怌omboBox鏁版嵁
+ var json = JsonConvert.SerializeObject(oImageType);
+ var comboData = JsonConvert.DeserializeAnonymousType(json, new
+ {
+ Items = new List<object>(),
+ SelectedIndex = 0
+ });
+
+ if (comboData != null && comboData.Items.Count > 0)
+ {
+ strImageType = comboData.Items[comboData.SelectedIndex].ToString();
+ }
+ }
+ catch { }
+ }
+ // 鐢熸垚鍥剧墖骞舵樉绀哄埌鎺т欢涓�
+ HObject InputImage = null;
+ HObject RecordImage = null;
+
+ foreach (var layout in GlobalVar.dicLayout.Values
+ .Where(layout => layout.ProcessName == ProcessName)
+ .ToList())
+ {
+ string title = layout.Title;
+ string strImagePath = layout.SaveImageDir;
+ if (!AllProcessesPage.dicProcessControls.ContainsKey(title))
+ {
+ continue;
+ }
+ RunBll.GetImage(layout, out InputImage, out RecordImage);
+ AllProcessesPage.dicProcessControls[title].ShowHoImage(RecordImage);
+ if (!string.IsNullOrEmpty(layout.SaveImageDir))
+ {
+ string fileNameHead = layout.SaveImageHead;
+ string result = Regex.Replace(fileNameHead, @"\{[^}]+\}", match =>
+ {
+ // 鍘婚櫎{}鍙繚鐣欐嫭鍙峰唴鐨勫唴瀹�
+ string content = match.Value;
+ content = content.Trim('{', '}'); // 鍘婚櫎棣栧熬鐨剓}
+
+ RunBll.GetStringOutput(content, out string str);
+ return str;
+ });
+ string fileName = $"{result}-[{DateTime.Now.ToString("HH.mm.ss.ffff")}]";
+ // 浣跨敤姝e垯琛ㄨ揪寮忔浛鎹㈡墍鏈夐潪娉曞瓧绗�
+ string invalidChars = Regex.Escape(new string(Path.GetInvalidFileNameChars()));
+ string pattern = $"[{invalidChars}]";
+ fileName = Regex.Replace(fileName, pattern, "-");
+ strImagePath = Regex.Replace(strImagePath, @"\{[^}]+\}", match =>
+ {
+ // 鍘婚櫎{}鍙繚鐣欐嫭鍙峰唴鐨勫唴瀹�
+ string content = match.Value;
+ content = content.Trim('{', '}'); // 鍘婚櫎棣栧熬鐨剓}
+ RunBll.GetStringOutput(content, out string str);
+ return str;
+ });
+ if (bSaveRunImage)
+ {
+ // 鏈�鍚庝竴绾х洰褰曞繀椤讳负骞存湀鏃�,浼氭牴鎹椂闂存潵鍒犻櫎鏃у浘鐗�
+ string directoryPath = Path.Combine(strImagePath, $"{ProcessName}\\鍘熷浘\\{RunBll.Result}\\{DateTime.Now.ToString("yyyyMMdd")}\\");
+ LB_SmartVision.Tool.Tool.AddRealImage(InputImage, directoryPath, fileName, strImageType, lImageQuality);
+ }
+ if (bSaveResultImage)
+ {
+ // 鏈�鍚庝竴绾х洰褰曞繀椤讳负骞存湀鏃�,浼氭牴鎹椂闂存潵鍒犻櫎鏃у浘鐗�
+ string directoryPath = Path.Combine(strImagePath, $"{ProcessName}\\鎴浘\\{RunBll.Result}\\{DateTime.Now.ToString("yyyyMMdd")}\\");
+ LB_SmartVision.Tool.Tool.AddRealImage(RecordImage, directoryPath, fileName, "jpg", 50L);
+ }
+ }
+ }
+ foreach (var csv in GlobalVar.dicCsvSetting.Values
+ .Where(csv => csv.ProcessName == ProcessName)
+ .ToList())
+ {
+ if (RunBll.GetCsv(csv
+ , out List<string> DataTitle, out Dictionary<string, object> ResultData))
+ {
+ string filePath = Path.Combine(GlobalVar.strPathCsv, $"{ProcessName}.csv");
+ LB_SmartVision.Tool.Tool.SaveData(filePath, DataTitle, ResultData);
+ }
+ }
+ #endregion
+ }
+ });
+ }
}
}
+
--
Gitblit v1.9.3