From 760ff50baf33da4ffd834a68bd3baa0e3b302b7c Mon Sep 17 00:00:00 2001 From: "wilmin.zheng" Date: Fri, 17 Apr 2026 22:21:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=98=E4=BB=95=E5=B9=BF=E5=8E=9F=E5=A7=8B?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E4=BB=A3=E7=A0=81=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 156 +- 精工涂胶检测项目/精工涂胶检测项目.sln | 37 + 精工涂胶检测项目/精工涂胶检测项目/App.config | 55 + .../精工涂胶检测项目/AppConstants.cs | 15 + .../精工涂胶检测项目/EditableListView.cs | 120 + .../精工涂胶检测项目/Form/Class1.cs | 28 + .../精工涂胶检测项目/Form/FileName.cs | 12 + .../Form/FormCommunication.Designer.cs | 421 +++ .../精工涂胶检测项目/Form/FormCommunication.cs | 160 ++ .../精工涂胶检测项目/Form/FormCommunication.resx | 123 + .../精工涂胶检测项目/Form/FormLogin.cs | 101 + .../精工涂胶检测项目/Form/FormLogin.designer.cs | 152 ++ .../精工涂胶检测项目/Form/FormLogin.resx | 120 + .../精工涂胶检测项目/Form/FormMain.Designer.cs | 1178 ++++++++ .../精工涂胶检测项目/Form/FormMain.cs | 1784 ++++++++++++ .../精工涂胶检测项目/Form/FormMain.resx | 199 ++ .../Form/FormSetParameter.Designer.cs | 416 +++ .../精工涂胶检测项目/Form/FormSetParameter.cs | 97 + .../精工涂胶检测项目/Form/FormSetParameter.resx | 123 + .../精工涂胶检测项目/Form/StatusChecker.cs | 6 + .../精工涂胶检测项目/Form/yuzhicanshu.cs | 12 + .../精工涂胶检测项目/FormCheck.Designer.cs | 153 ++ .../精工涂胶检测项目/FormCheck.cs | 124 + .../精工涂胶检测项目/FormCheck.resx | 120 + .../精工涂胶检测项目/FormVPP.Designer.cs | 62 + 精工涂胶检测项目/精工涂胶检测项目/FormVPP.cs | 34 + .../精工涂胶检测项目/FormVPP.resx | 120 + .../精工涂胶检测项目/Form_LoadingImage.Designer.cs | 75 + .../精工涂胶检测项目/Form_LoadingImage.cs | 64 + .../精工涂胶检测项目/Form_LoadingImage.resx | 2400 +++++++++++++++++ .../LinDeVisionTask.ResultsDisplay.cs | 226 ++ .../精工涂胶检测项目/ModbusTcpClass.cs | 346 +++ 精工涂胶检测项目/精工涂胶检测项目/Program.cs | 23 + .../精工涂胶检测项目/Properties/AssemblyInfo.cs | 36 + .../精工涂胶检测项目/Properties/Resources.Designer.cs | 71 + .../精工涂胶检测项目/Properties/Resources.resx | 117 + .../精工涂胶检测项目/Properties/Settings.Designer.cs | 145 + .../精工涂胶检测项目/Properties/Settings.settings | 37 + 精工涂胶检测项目/精工涂胶检测项目/TCPClass.cs | 275 ++ .../精工涂胶检测项目/packages.config | 12 + .../精工涂胶检测项目/精工涂胶检测项目.csproj | 565 ++++ 41 files changed, 10282 insertions(+), 38 deletions(-) create mode 100644 精工涂胶检测项目/精工涂胶检测项目.sln create mode 100644 精工涂胶检测项目/精工涂胶检测项目/App.config create mode 100644 精工涂胶检测项目/精工涂胶检测项目/AppConstants.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/EditableListView.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/Class1.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FileName.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.Designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.resx create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.resx create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.Designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.resx create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.Designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.resx create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/StatusChecker.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form/yuzhicanshu.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/FormCheck.Designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/FormCheck.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/FormCheck.resx create mode 100644 精工涂胶检测项目/精工涂胶检测项目/FormVPP.Designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/FormVPP.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/FormVPP.resx create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.Designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.resx create mode 100644 精工涂胶检测项目/精工涂胶检测项目/LinDeVisionTask.ResultsDisplay.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/ModbusTcpClass.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Program.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Properties/AssemblyInfo.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Properties/Resources.Designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Properties/Resources.resx create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Properties/Settings.Designer.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/Properties/Settings.settings create mode 100644 精工涂胶检测项目/精工涂胶检测项目/TCPClass.cs create mode 100644 精工涂胶检测项目/精工涂胶检测项目/packages.config create mode 100644 精工涂胶检测项目/精工涂胶检测项目/精工涂胶检测项目.csproj diff --git a/.gitignore b/.gitignore index b581690..0ad14dc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -# ---> VisualStudio ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## @@ -10,6 +9,7 @@ *.user *.userosscache *.sln.docstates +*.env # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs @@ -22,17 +22,37 @@ mono_crash.* [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ -x64/ -x86/ + +[Dd]ebug/x64/ +[Dd]ebugPublic/x64/ +[Rr]elease/x64/ +[Rr]eleases/x64/ +bin/x64/ +obj/x64/ + +[Dd]ebug/x86/ +[Dd]ebugPublic/x86/ +[Rr]elease/x86/ +[Rr]eleases/x86/ +bin/x86/ +obj/x86/ + [Ww][Ii][Nn]32/ [Aa][Rr][Mm]/ [Aa][Rr][Mm]64/ +[Aa][Rr][Mm]64[Ee][Cc]/ bld/ -[Bb]in/ [Oo]bj/ +[Oo]ut/ [Ll]og/ [Ll]ogs/ +# Build results on 'Bin' directories +**/[Bb]in/* +# Uncomment if you have tasks that rely on *.refresh files to move binaries +# (https://github.com/github/gitignore/pull/3736) +#!**/[Bb]in/*.refresh + # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot @@ -44,12 +64,16 @@ Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* +*.trx # NUnit *.VisualState.xml TestResult.xml nunit-*.xml +# Approval Tests result files +*.received.* + # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ @@ -76,6 +100,7 @@ StyleCopReport.xml *.ilk *.meta *.obj +*.idb *.iobj *.pch *.pdb @@ -156,6 +181,7 @@ coverage*.info # NCrunch _NCrunch_* +.NCrunch_* .*crunch*.local.xml nCrunchTemp_* @@ -297,9 +323,6 @@ node_modules/ # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - # Visual Studio 6 workspace and project file (working project files containing files to include in project) *.dsw *.dsp @@ -317,22 +340,22 @@ node_modules/ _Pvt_Extensions # Paket dependency manager -.paket/paket.exe +**/.paket/paket.exe paket-files/ # FAKE - F# Make -.fake/ +**/.fake/ # CodeRush personal settings -.cr/personal +**/.cr/personal # Python Tools for Visual Studio (PTVS) -__pycache__/ +**/__pycache__/ *.pyc # Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config +#tools/** +#!tools/packages.config # Tabs Studio *.tss @@ -354,15 +377,19 @@ ASALocalRun/ # MSBuild Binary and Structured Log *.binlog +MSBuild_Logs/ + +# AWS SAM Build and Temporary Artifacts folder +.aws-sam # NVidia Nsight GPU debugger configuration file *.nvuser # MFractors (Xamarin productivity tool) working folder -.mfractor/ +**/.mfractor/ # Local History for Visual Studio -.localhistory/ +**/.localhistory/ # Visual Studio History (VSHistory) files .vshistory/ @@ -374,7 +401,7 @@ healthchecksdb MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder -.ionide/ +**/.ionide/ # Fody - auto-generated XML schema FodyWeavers.xsd @@ -385,27 +412,6 @@ FodyWeavers.xsd !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml - -# ---> VisualStudioCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json !.vscode/*.code-snippets # Local History for Visual Studio Code @@ -414,6 +420,7 @@ FodyWeavers.xsd # Built Visual Studio Code Extensions *.vsix +# =============== 操作系统文件 ===============[WQ] # ---> Windows # Windows thumbnail cache files Thumbs.db @@ -430,7 +437,7 @@ ehthumbs_vista.db # Recycle Bin used on file shares $RECYCLE.BIN/ -# Windows Installer files +# Windows Installer files from build outputs *.cab *.msi *.msix @@ -440,3 +447,76 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk +# ---> macOS +.DS_Store + +# =============== VisionPro ===============[WQ] +*.vpp +*.idb +*.cdb + +# =============== Others ===============[Zhao] +#Backup file +*.bak + +**/.vs +*.dylib +*.so + +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +*.7z +*.zip +*.rar +**/thirdparty +**/external +**/build +**/Debug +**/debug +**/Release +**/release +**/.vscode + +**/venv +**/gen +**/__pycache__ +*.cmd +*.dist +*.pth +*.pt +*.csv +*.jpg +*.jpeg +*.png +*.bmp \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目.sln b/精工涂胶检测项目/精工涂胶检测项目.sln new file mode 100644 index 0000000..943134e --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36109.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "精工涂胶检测项目", "精工涂胶检测项目\精工涂胶检测项目.csproj", "{10C424D2-36A1-4D94-A034-A6801A1B17B5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Debug|Any CPU.ActiveCfg = Debug|x64 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Debug|Any CPU.Build.0 = Debug|x64 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Debug|x64.ActiveCfg = Debug|x64 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Debug|x64.Build.0 = Debug|x64 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Debug|x86.ActiveCfg = Debug|x86 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Debug|x86.Build.0 = Debug|x86 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Release|Any CPU.Build.0 = Release|Any CPU + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Release|x64.ActiveCfg = Release|x64 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Release|x64.Build.0 = Release|x64 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Release|x86.ActiveCfg = Release|x86 + {10C424D2-36A1-4D94-A034-A6801A1B17B5}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EF7CB683-60A7-4F75-891E-C6B539D5298C} + EndGlobalSection +EndGlobal diff --git a/精工涂胶检测项目/精工涂胶检测项目/App.config b/精工涂胶检测项目/精工涂胶检测项目/App.config new file mode 100644 index 0000000..f126889 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/App.config @@ -0,0 +1,55 @@ + + + + +
+ + + + + + + <精工涂胶检测项目.Properties.Settings> + + + + + + + + + + + + + + + + + + + + 192.168.1.30 + + + 502 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/AppConstants.cs b/精工涂胶检测项目/精工涂胶检测项目/AppConstants.cs new file mode 100644 index 0000000..397f8e4 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/AppConstants.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace 精工涂胶检测项目 +{ + public static class AppConstants + { + public const int ModbusDefaultPort = 502; + public const int TcpDefaultPort = 8080; + public const int MaxConnectionRetries = 3; + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/EditableListView.cs b/精工涂胶检测项目/精工涂胶检测项目/EditableListView.cs new file mode 100644 index 0000000..18fdceb --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/EditableListView.cs @@ -0,0 +1,120 @@ +using System.Windows.Forms; +using System.Drawing; +using Microsoft.VisualBasic; +using System; + +namespace 精工涂胶检测项目 +{ + public class EditableListView : ListView + { + public EditableListView() + { + View = View.Details; + FullRowSelect = true; + GridLines = true; + LabelEdit = false; + Scrollable = true; + Columns.Add("地址", 120); + Columns.Add("数据类型", 120); + + DoubleClick -= EditableListView_DoubleClick; + DoubleClick += EditableListView_DoubleClick; + } + + [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] + protected override void WndProc(ref Message m) + { + const int WM_LBUTTONDBLCLK = 0x0203; + if (m.Msg == WM_LBUTTONDBLCLK) + { + OnDoubleClick(EventArgs.Empty); + } + base.WndProc(ref m); + } + + // 添加数据的公共方法 + public void AddData(string address, string dataType) + { + ListViewItem item = new ListViewItem(address); + item.SubItems.Add(dataType); + Items.Add(item); + } + + private void EditableListView_DoubleClick(object sender, EventArgs e) + { + var mousePos = this.PointToClient(Cursor.Position); + var hitInfo = this.HitTest(mousePos); + + bool isRealBlankArea = + hitInfo.Item == null && + hitInfo.SubItem == null && + (hitInfo.Location == ListViewHitTestLocations.None || + hitInfo.Location == ListViewHitTestLocations.AboveClientArea); + + if (isRealBlankArea) + { + AddNewItem(); + } + else if (hitInfo.Item != null) + { + int colIndex = GetColumnIndex(mousePos.X); + if (colIndex >= 0 && colIndex < Columns.Count) + { + EditItem(hitInfo.Item, colIndex); + } + } + } + + private int GetColumnIndex(int x) + { + int accumulatedWidth = 0; + for (int i = 0; i < Columns.Count; i++) + { + accumulatedWidth += Columns[i].Width; + if (x < accumulatedWidth) + return i; + } + return Columns.Count - 1; + } + + private void EditItem(ListViewItem item, int columnIndex) + { + string originalValue = columnIndex == 0 ? item.Text : item.SubItems[columnIndex].Text; + + string newValue = Interaction.InputBox( + "请输入新值:", + "编辑单元格", + originalValue + ); + + if (!string.IsNullOrEmpty(newValue)) + { + if (columnIndex == 0) + { + item.Text = newValue; + } + else + { + if (item.SubItems.Count > columnIndex) + { + item.SubItems[columnIndex].Text = newValue; + } + else + { + item.SubItems.Add(newValue); + } + } + } + } + + private void AddNewItem() + { + string address = Interaction.InputBox("请输入地址:", "添加新条目", ""); + if (!string.IsNullOrEmpty(address)) + { + string dataType = Interaction.InputBox("请输入数据类型:", "添加新条目", ""); + AddData(address, dataType); + } + } + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/Class1.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/Class1.cs new file mode 100644 index 0000000..1cc405a --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/Class1.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SlandDs +{ + [Serializable] + public class Student + { + + public string CSV1max { get; set; } + public string CSV1mix { get; set; } + public string CSA1max { get; set; } + public string CSA1mix { get; set; } + public string CSV2max { get; set; } + public string CSV2mix { get; set; } + public string CSA2max { get; set; } + public string CSA2mix { get; set; } + public string CSV3max { get; set; } + public string CSV3mix { get; set; } + public string CSA3max { get; set; } + public string CSA3mix { get; set; } + } + + +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FileName.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FileName.cs new file mode 100644 index 0000000..974c372 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FileName.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace 精工涂胶检测项目.Form +{ + internal class FileName + { + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.Designer.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.Designer.cs new file mode 100644 index 0000000..ac1a99d --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.Designer.cs @@ -0,0 +1,421 @@ +namespace 精工涂胶检测项目 +{ + partial class FormCommunication + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.btn_TCPConfirm = new System.Windows.Forms.Button(); + this.txb_Port = new System.Windows.Forms.TextBox(); + this.txb_IP = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.btn_PLCConfirm = new System.Windows.Forms.Button(); + this.cmb_PLCType = new System.Windows.Forms.ComboBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.txb_PLCSlot = new System.Windows.Forms.TextBox(); + this.txb_PLCRack = new System.Windows.Forms.TextBox(); + this.txb_PLCIP = new System.Windows.Forms.TextBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.btn_ModbusTCPConfirm = new System.Windows.Forms.Button(); + this.txb_ModbusTcpPort = new System.Windows.Forms.TextBox(); + this.txb_ModbusTcpIP = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.删除ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.btn_OK = new System.Windows.Forms.Button(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Top; + this.tabControl1.ItemSize = new System.Drawing.Size(80, 30); + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tabControl1.Multiline = true; + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(1067, 500); + this.tabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.tabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.btn_TCPConfirm); + this.tabPage1.Controls.Add(this.txb_Port); + this.tabPage1.Controls.Add(this.txb_IP); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Location = new System.Drawing.Point(4, 34); + this.tabPage1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tabPage1.Size = new System.Drawing.Size(1059, 462); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "TCP"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // btn_TCPConfirm + // + this.btn_TCPConfirm.Font = new System.Drawing.Font("宋体", 12F); + this.btn_TCPConfirm.Location = new System.Drawing.Point(16, 104); + this.btn_TCPConfirm.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btn_TCPConfirm.Name = "btn_TCPConfirm"; + this.btn_TCPConfirm.Size = new System.Drawing.Size(139, 41); + this.btn_TCPConfirm.TabIndex = 5; + this.btn_TCPConfirm.Text = "连接"; + this.btn_TCPConfirm.UseVisualStyleBackColor = true; + this.btn_TCPConfirm.Click += new System.EventHandler(this.btn_TCPConfirm_Click); + // + // txb_Port + // + this.txb_Port.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::精工涂胶检测项目.Properties.Settings.Default, "TcpProt", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.txb_Port.Location = new System.Drawing.Point(105, 70); + this.txb_Port.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txb_Port.Name = "txb_Port"; + this.txb_Port.Size = new System.Drawing.Size(132, 25); + this.txb_Port.TabIndex = 3; + this.txb_Port.Text = global::精工涂胶检测项目.Properties.Settings.Default.TcpProt; + // + // txb_IP + // + this.txb_IP.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::精工涂胶检测项目.Properties.Settings.Default, "TcpIP", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.txb_IP.Location = new System.Drawing.Point(105, 16); + this.txb_IP.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txb_IP.Name = "txb_IP"; + this.txb_IP.Size = new System.Drawing.Size(132, 25); + this.txb_IP.TabIndex = 2; + this.txb_IP.Text = global::精工涂胶检测项目.Properties.Settings.Default.TcpIP; + this.txb_IP.TextChanged += new System.EventHandler(this.txb_IP_TextChanged); + // + // label2 + // + this.label2.Font = new System.Drawing.Font("宋体", 15F); + this.label2.Location = new System.Drawing.Point(11, 65); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(87, 35); + this.label2.TabIndex = 1; + this.label2.Text = "端口:"; + // + // label1 + // + this.label1.Font = new System.Drawing.Font("宋体", 15F); + this.label1.Location = new System.Drawing.Point(11, 16); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(87, 35); + this.label1.TabIndex = 0; + this.label1.Text = "IP:"; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.btn_PLCConfirm); + this.tabPage2.Controls.Add(this.cmb_PLCType); + this.tabPage2.Controls.Add(this.label6); + this.tabPage2.Controls.Add(this.label5); + this.tabPage2.Controls.Add(this.label4); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Controls.Add(this.txb_PLCSlot); + this.tabPage2.Controls.Add(this.txb_PLCRack); + this.tabPage2.Controls.Add(this.txb_PLCIP); + this.tabPage2.Location = new System.Drawing.Point(4, 34); + this.tabPage2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tabPage2.RightToLeft = System.Windows.Forms.RightToLeft.No; + this.tabPage2.Size = new System.Drawing.Size(1059, 462); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Profinet"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // btn_PLCConfirm + // + this.btn_PLCConfirm.Font = new System.Drawing.Font("宋体", 12F); + this.btn_PLCConfirm.Location = new System.Drawing.Point(4, 358); + this.btn_PLCConfirm.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btn_PLCConfirm.Name = "btn_PLCConfirm"; + this.btn_PLCConfirm.Size = new System.Drawing.Size(139, 41); + this.btn_PLCConfirm.TabIndex = 11; + this.btn_PLCConfirm.Text = "连接"; + this.btn_PLCConfirm.UseVisualStyleBackColor = true; + this.btn_PLCConfirm.Click += new System.EventHandler(this.btn_PLCConfirm_Click); + // + // cmb_PLCType + // + this.cmb_PLCType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmb_PLCType.FormattingEnabled = true; + this.cmb_PLCType.Items.AddRange(new object[] { + "Logo0BA8", + "S71200", + "S71500", + "S7200", + "S7200Smart", + "S7300", + "S7400"}); + this.cmb_PLCType.Location = new System.Drawing.Point(867, 20); + this.cmb_PLCType.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.cmb_PLCType.Name = "cmb_PLCType"; + this.cmb_PLCType.Size = new System.Drawing.Size(160, 23); + this.cmb_PLCType.TabIndex = 10; + // + // label6 + // + this.label6.Font = new System.Drawing.Font("宋体", 15F); + this.label6.Location = new System.Drawing.Point(772, 15); + this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(87, 35); + this.label6.TabIndex = 9; + this.label6.Text = "型号:"; + // + // label5 + // + this.label5.Font = new System.Drawing.Font("宋体", 15F); + this.label5.Location = new System.Drawing.Point(512, 19); + this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(87, 35); + this.label5.TabIndex = 7; + this.label5.Text = "Slot:"; + // + // label4 + // + this.label4.Font = new System.Drawing.Font("宋体", 15F); + this.label4.Location = new System.Drawing.Point(259, 19); + this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(87, 35); + this.label4.TabIndex = 5; + this.label4.Text = "Rack:"; + // + // label3 + // + this.label3.Font = new System.Drawing.Font("宋体", 15F); + this.label3.Location = new System.Drawing.Point(16, 19); + this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(87, 35); + this.label3.TabIndex = 3; + this.label3.Text = "IP:"; + // + // txb_PLCSlot + // + this.txb_PLCSlot.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::精工涂胶检测项目.Properties.Settings.Default, "PlcSlot", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.txb_PLCSlot.Location = new System.Drawing.Point(607, 19); + this.txb_PLCSlot.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txb_PLCSlot.Name = "txb_PLCSlot"; + this.txb_PLCSlot.Size = new System.Drawing.Size(132, 25); + this.txb_PLCSlot.TabIndex = 8; + this.txb_PLCSlot.Text = global::精工涂胶检测项目.Properties.Settings.Default.PlcSlot; + // + // txb_PLCRack + // + this.txb_PLCRack.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::精工涂胶检测项目.Properties.Settings.Default, "PlcRack", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.txb_PLCRack.Location = new System.Drawing.Point(353, 19); + this.txb_PLCRack.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txb_PLCRack.Name = "txb_PLCRack"; + this.txb_PLCRack.Size = new System.Drawing.Size(132, 25); + this.txb_PLCRack.TabIndex = 6; + this.txb_PLCRack.Text = global::精工涂胶检测项目.Properties.Settings.Default.PlcRack; + // + // txb_PLCIP + // + this.txb_PLCIP.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::精工涂胶检测项目.Properties.Settings.Default, "PlcIP", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.txb_PLCIP.Location = new System.Drawing.Point(111, 19); + this.txb_PLCIP.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txb_PLCIP.Name = "txb_PLCIP"; + this.txb_PLCIP.Size = new System.Drawing.Size(132, 25); + this.txb_PLCIP.TabIndex = 4; + this.txb_PLCIP.Text = global::精工涂胶检测项目.Properties.Settings.Default.PlcIP; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.btn_ModbusTCPConfirm); + this.tabPage3.Controls.Add(this.txb_ModbusTcpPort); + this.tabPage3.Controls.Add(this.txb_ModbusTcpIP); + this.tabPage3.Controls.Add(this.label7); + this.tabPage3.Controls.Add(this.label8); + this.tabPage3.Location = new System.Drawing.Point(4, 34); + this.tabPage3.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.tabPage3.Size = new System.Drawing.Size(1059, 462); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "ModbusTcp"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // btn_ModbusTCPConfirm + // + this.btn_ModbusTCPConfirm.Font = new System.Drawing.Font("宋体", 12F); + this.btn_ModbusTCPConfirm.Location = new System.Drawing.Point(19, 119); + this.btn_ModbusTCPConfirm.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btn_ModbusTCPConfirm.Name = "btn_ModbusTCPConfirm"; + this.btn_ModbusTCPConfirm.Size = new System.Drawing.Size(139, 41); + this.btn_ModbusTCPConfirm.TabIndex = 8; + this.btn_ModbusTCPConfirm.Text = "连接"; + this.btn_ModbusTCPConfirm.UseVisualStyleBackColor = true; + this.btn_ModbusTCPConfirm.Click += new System.EventHandler(this.btn_ModbusTCPConfirm_Click); + // + // txb_ModbusTcpPort + // + this.txb_ModbusTcpPort.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::精工涂胶检测项目.Properties.Settings.Default, "ModbusPort", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.txb_ModbusTcpPort.Location = new System.Drawing.Point(108, 74); + this.txb_ModbusTcpPort.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txb_ModbusTcpPort.Name = "txb_ModbusTcpPort"; + this.txb_ModbusTcpPort.Size = new System.Drawing.Size(132, 25); + this.txb_ModbusTcpPort.TabIndex = 7; + this.txb_ModbusTcpPort.Text = global::精工涂胶检测项目.Properties.Settings.Default.ModbusPort; + // + // txb_ModbusTcpIP + // + this.txb_ModbusTcpIP.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::精工涂胶检测项目.Properties.Settings.Default, "ModbusIP", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged)); + this.txb_ModbusTcpIP.Location = new System.Drawing.Point(108, 20); + this.txb_ModbusTcpIP.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.txb_ModbusTcpIP.Name = "txb_ModbusTcpIP"; + this.txb_ModbusTcpIP.Size = new System.Drawing.Size(132, 25); + this.txb_ModbusTcpIP.TabIndex = 6; + this.txb_ModbusTcpIP.Text = global::精工涂胶检测项目.Properties.Settings.Default.ModbusIP; + // + // label7 + // + this.label7.Font = new System.Drawing.Font("宋体", 15F); + this.label7.Location = new System.Drawing.Point(13, 69); + this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(87, 35); + this.label7.TabIndex = 5; + this.label7.Text = "端口:"; + // + // label8 + // + this.label8.Font = new System.Drawing.Font("宋体", 15F); + this.label8.Location = new System.Drawing.Point(13, 20); + this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(87, 35); + this.label8.TabIndex = 4; + this.label8.Text = "IP:"; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.删除ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(109, 28); + // + // 删除ToolStripMenuItem + // + this.删除ToolStripMenuItem.Name = "删除ToolStripMenuItem"; + this.删除ToolStripMenuItem.Size = new System.Drawing.Size(108, 24); + this.删除ToolStripMenuItem.Text = "删除"; + this.删除ToolStripMenuItem.Click += new System.EventHandler(this.删除ToolStripMenuItem_Click); + // + // btn_OK + // + this.btn_OK.Font = new System.Drawing.Font("宋体", 12F); + this.btn_OK.Location = new System.Drawing.Point(912, 508); + this.btn_OK.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.btn_OK.Name = "btn_OK"; + this.btn_OK.Size = new System.Drawing.Size(139, 41); + this.btn_OK.TabIndex = 9; + this.btn_OK.Text = "确定"; + this.btn_OK.UseVisualStyleBackColor = true; + this.btn_OK.Click += new System.EventHandler(this.btn_OK_Click); + // + // FormCommunication + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1067, 562); + this.Controls.Add(this.btn_OK); + this.Controls.Add(this.tabControl1); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.Name = "FormCommunication"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "通讯设置"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormCommunication_FormClosed); + this.Load += new System.EventHandler(this.FormCommunication_Load); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.tabPage3.ResumeLayout(false); + this.tabPage3.PerformLayout(); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox txb_IP; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txb_Port; + private System.Windows.Forms.Button btn_TCPConfirm; + private System.Windows.Forms.TextBox txb_PLCSlot; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox txb_PLCRack; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox txb_PLCIP; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox cmb_PLCType; + private System.Windows.Forms.Button btn_PLCConfirm; + private EditableListView editableListView1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 删除ToolStripMenuItem; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.Button btn_ModbusTCPConfirm; + private System.Windows.Forms.TextBox txb_ModbusTcpPort; + private System.Windows.Forms.TextBox txb_ModbusTcpIP; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button btn_OK; + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.cs new file mode 100644 index 0000000..8958e37 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.cs @@ -0,0 +1,160 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using S7.Net; +using System.Net; + +namespace 精工涂胶检测项目 +{ + public partial class FormCommunication : Form + { + private TextBox editBox = new TextBox(); + + public FormCommunication() + { + InitializeComponent(); + + } + + + private async void btn_TCPConfirm_Click(object sender, EventArgs e) + { + try + { + // 获取主窗体的 TCP 实例 + var mainForm = Application.OpenForms.OfType().FirstOrDefault(); + if (mainForm == null) return; + + TCPClass tcp = mainForm.myTcp; // ✅ 使用同一实例 + + if (txb_IP.Text == "") + { + await tcp.StartServerAsync(int.Parse(txb_Port.Text)); + mainForm._autoTcpReconnect = true; + } + else + { + await tcp.ConnectAsync(txb_IP.Text,int.Parse(txb_Port.Text)); + mainForm._autoTcpReconnect = true; + } + } + catch(Exception s) + { + MessageBox.Show(s.ToString()); + } + } + + + private async void btn_PLCConfirm_Click(object sender, EventArgs e) + { + var mainForm = Application.OpenForms.OfType().FirstOrDefault(); + if (mainForm == null) + { + MessageBox.Show("无法找到主窗体"); + return; + } + + try + { + string ip = txb_PLCIP.Text; + short rack = short.Parse(txb_PLCRack.Text); + short slot = short.Parse(txb_PLCSlot.Text); + CpuType cpuType = (CpuType)Enum.Parse(typeof(CpuType), cmb_PLCType.Text); + + mainForm.ConnectPLC(ip, cpuType, rack, slot); + + if (mainForm.plc.IsConnected) + { + MessageBox.Show("PLC连接成功"); + } + } + catch (Exception ex) + { + mainForm.AddLog($"PLC连接失败: {ex.Message}", 2); + MessageBox.Show($"PLC连接失败: {ex.Message}"); + } + } + + + /// + /// 右键删除事件 + /// + /// + /// + private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) + { + if(editableListView1.SelectedItems.Count != 0) + { + ListViewItem item = editableListView1.SelectedItems[0]; + editableListView1.Items.Remove(item); + } + } + + private void FormCommunication_FormClosed(object sender, FormClosedEventArgs e) + { + // 获取主窗体的 TCP 实例 + var mainForm = Application.OpenForms.OfType().FirstOrDefault(); + if (mainForm == null) return; + + TCPClass tcp = mainForm.myTcp; // ✅ 使用同一实例 + + Properties.Settings.Default.TcpIP = txb_IP.Text; + Properties.Settings.Default.TcpProt = txb_Port.Text; + Properties.Settings.Default.PlcIP = txb_PLCIP.Text; + Properties.Settings.Default.PlcRack = txb_PLCRack.Text; + Properties.Settings.Default.PlcSlot = txb_PLCSlot.Text; + Properties.Settings.Default.TcpStatus = tcp.TcpStatus; + Properties.Settings.Default.ModbusIP = txb_ModbusTcpIP.Text; + Properties.Settings.Default.ModbusPort = txb_ModbusTcpPort.Text; + if (cmb_PLCType.SelectedValue != null) + Properties.Settings.Default.PlcType = cmb_PLCType.SelectedValue.ToString(); + Properties.Settings.Default.Save(); + } + + private async void btn_ModbusTCPConfirm_Click(object sender, EventArgs e) + { + if (!IPAddress.TryParse(txb_ModbusTcpIP.Text, out _)) + { + MessageBox.Show("IP地址格式错误"); + return; + } + + if (!int.TryParse(txb_ModbusTcpPort.Text, out int port) || port < 1 || port > 65535) + { + MessageBox.Show("端口号无效"); + return; + } + + // 获取主窗体实例并更新配置 + var mainForm = Application.OpenForms.OfType().FirstOrDefault(); + if (mainForm != null) + { + mainForm.modbusClient = new ModbusTcpClient(txb_ModbusTcpIP.Text, port); + mainForm.Modbus事件注册(); + await mainForm.modbusClient.ConnectAsync(); + } + } + + private void btn_OK_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void FormCommunication_Load(object sender, EventArgs e) + { + txb_ModbusTcpIP.Text = Properties.Settings.Default.ModbusIP; + txb_ModbusTcpPort.Text = Properties.Settings.Default.ModbusPort; + } + + private void txb_IP_TextChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.resx b/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.resx new file mode 100644 index 0000000..ad53752 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormCommunication.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.cs new file mode 100644 index 0000000..1db2613 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace 精工涂胶检测项目 +{ + public partial class FormLogin : Form + { + public int Status = 0; + public string account; + private Form1 formMain; + public FormLogin(Form1 formMain1) + { + InitializeComponent(); + formMain = formMain1; + txb_Pwd.Text = ""; + txb_Pwd.PasswordChar = '*'; + } + + private void btn_Login_Click(object sender, EventArgs e) + { + switch (comboBox1.SelectedIndex) + { + case 0: + + try + { + txb_Account.Text = "Operator"; + if (txb_Account.Text == "Operator" && txb_Pwd.Text == "123") + { + MessageBox.Show("Operator 登录成功"); + this.Status = 1; + this.account = "Operator"; + formMain.SetMainEnabled(Status, account); + } + else + { + MessageBox.Show("用户名或密码输入有误"); + } + } + catch + { + MessageBox.Show("登录异常"); + } + + + break; + case 1: + try + { + txb_Account.Text = "Debugger"; + if (txb_Account.Text == "Debugger" && txb_Pwd.Text == "000") + { + MessageBox.Show("Debugger 登录成功"); + this.Status = 2; + this.account = "Debugger"; + formMain.SetMainEnabled(Status, account); + } + else + { + MessageBox.Show("用户名或密码输入有误"); + } + } + catch + { + MessageBox.Show("登录异常"); + } + break; + case 2: + try + { + txb_Account.Text = "admin"; + if (txb_Account.Text == "admin" && txb_Pwd.Text == "cve666") + { + MessageBox.Show("admin 登录成功"); + this.Status = 3; + this.account = "admin"; + formMain.SetMainEnabled(Status, account); + + } + else + { + MessageBox.Show("用户名或密码输入有误"); + } + } + catch + { + MessageBox.Show("登录异常"); + } + break; + } + + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.designer.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.designer.cs new file mode 100644 index 0000000..45ae6c3 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.designer.cs @@ -0,0 +1,152 @@ +namespace 精工涂胶检测项目 +{ + partial class FormLogin + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.btn_Exit = new System.Windows.Forms.Button(); + this.btn_Login = new System.Windows.Forms.Button(); + this.txb_Pwd = new System.Windows.Forms.TextBox(); + this.txb_Account = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // comboBox1 + // + this.comboBox1.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "操作员", + "调试员", + "管理员"}); + this.comboBox1.Location = new System.Drawing.Point(339, 118); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(192, 28); + this.comboBox1.TabIndex = 17; + // + // btn_Exit + // + this.btn_Exit.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btn_Exit.Location = new System.Drawing.Point(425, 309); + this.btn_Exit.Name = "btn_Exit"; + this.btn_Exit.Size = new System.Drawing.Size(86, 28); + this.btn_Exit.TabIndex = 15; + this.btn_Exit.Text = "退出"; + this.btn_Exit.UseVisualStyleBackColor = true; + // + // btn_Login + // + this.btn_Login.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btn_Login.Location = new System.Drawing.Point(293, 309); + this.btn_Login.Name = "btn_Login"; + this.btn_Login.Size = new System.Drawing.Size(86, 28); + this.btn_Login.TabIndex = 16; + this.btn_Login.Text = "登录"; + this.btn_Login.UseVisualStyleBackColor = true; + this.btn_Login.Click += new System.EventHandler(this.btn_Login_Click); + // + // txb_Pwd + // + this.txb_Pwd.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txb_Pwd.Location = new System.Drawing.Point(339, 221); + this.txb_Pwd.Name = "txb_Pwd"; + this.txb_Pwd.Size = new System.Drawing.Size(192, 30); + this.txb_Pwd.TabIndex = 14; + // + // txb_Account + // + this.txb_Account.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txb_Account.Location = new System.Drawing.Point(339, 167); + this.txb_Account.Name = "txb_Account"; + this.txb_Account.Size = new System.Drawing.Size(192, 30); + this.txb_Account.TabIndex = 13; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label3.Location = new System.Drawing.Point(269, 114); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(49, 20); + this.label3.TabIndex = 11; + this.label3.Text = "用户"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(269, 221); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(49, 20); + this.label2.TabIndex = 12; + this.label2.Text = "密码"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(269, 167); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(49, 20); + this.label1.TabIndex = 10; + this.label1.Text = "账号"; + // + // FormLogin + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.comboBox1); + this.Controls.Add(this.btn_Exit); + this.Controls.Add(this.btn_Login); + this.Controls.Add(this.txb_Pwd); + this.Controls.Add(this.txb_Account); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Name = "FormLogin"; + this.Text = "FormLogin"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Button btn_Exit; + private System.Windows.Forms.Button btn_Login; + private System.Windows.Forms.TextBox txb_Pwd; + private System.Windows.Forms.TextBox txb_Account; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.resx b/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormLogin.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.Designer.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.Designer.cs new file mode 100644 index 0000000..08f799f --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.Designer.cs @@ -0,0 +1,1178 @@ +namespace 精工涂胶检测项目 +{ + partial class Form1 + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.panel1 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.lbl_Volume1 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.lbl_Area1 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.lbl_Volume2 = new System.Windows.Forms.Label(); + this.lbl_Area2 = new System.Windows.Forms.Label(); + this.lbl_Volume3 = new System.Windows.Forms.Label(); + this.lbl_Area3 = new System.Windows.Forms.Label(); + this.lbl_Volume1Status = new System.Windows.Forms.Label(); + this.lbl_Area1Status = new System.Windows.Forms.Label(); + this.lbl_Volume2Status = new System.Windows.Forms.Label(); + this.lbl_Area2Status = new System.Windows.Forms.Label(); + this.lbl_Volume3Status = new System.Windows.Forms.Label(); + this.lbl_Area3Status = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.lbl_CheckNum = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.lbl_OkRate = new System.Windows.Forms.Label(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.btn_LoadImage = new System.Windows.Forms.Button(); + this.btn_ManulTrigger = new System.Windows.Forms.Button(); + this.lvw_Log = new System.Windows.Forms.ListView(); + this.InfoTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.Information = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.清除ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + this.btn_Auto = new System.Windows.Forms.Button(); + this.cogRecordDisplay1 = new Cognex.VisionPro.CogRecordDisplay(); + this.button1 = new System.Windows.Forms.Button(); + this.cog3DDisplayV2WF1 = new Cognex.VisionPro3D.Cog3DDisplayV2WF(); + this.label17 = new System.Windows.Forms.Label(); + this.button2 = new System.Windows.Forms.Button(); + this.lbl_ProductName = new System.Windows.Forms.Label(); + this.label33 = new System.Windows.Forms.Label(); + this.label34 = new System.Windows.Forms.Label(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.checkBox4 = new System.Windows.Forms.CheckBox(); + this.checkBox5 = new System.Windows.Forms.CheckBox(); + this.label81 = new System.Windows.Forms.Label(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.文件ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.打开QuickBuildToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.加载QuickBuildToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.保存QuickBuildToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.切换配方ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.设置ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.通讯设置ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.参数设置ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.登录ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.登录ToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.退出登录ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.label80 = new System.Windows.Forms.Label(); + this.label65 = new System.Windows.Forms.Label(); + this.label64 = new System.Windows.Forms.Label(); + this.label54 = new System.Windows.Forms.Label(); + this.label44 = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.panel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.contextMenuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.cogRecordDisplay1)).BeginInit(); + this.menuStrip1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.tableLayoutPanel1); + this.panel1.Controls.Add(this.menuStrip1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Margin = new System.Windows.Forms.Padding(4); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(1370, 749); + this.panel1.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 8; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 176F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 51.80608F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 48.19392F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 198F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 106F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 103F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 113F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 137F)); + this.tableLayoutPanel1.Controls.Add(this.tabControl1, 3, 0); + this.tableLayoutPanel1.Controls.Add(this.btn_LoadImage, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.btn_ManulTrigger, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.lvw_Log, 0, 11); + this.tableLayoutPanel1.Controls.Add(this.btn_Auto, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.cogRecordDisplay1, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.button1, 0, 5); + this.tableLayoutPanel1.Controls.Add(this.cog3DDisplayV2WF1, 2, 0); + this.tableLayoutPanel1.Controls.Add(this.label17, 1, 9); + this.tableLayoutPanel1.Controls.Add(this.button2, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.lbl_ProductName, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.label33, 2, 10); + this.tableLayoutPanel1.Controls.Add(this.label34, 3, 10); + this.tableLayoutPanel1.Controls.Add(this.checkBox3, 0, 7); + this.tableLayoutPanel1.Controls.Add(this.checkBox2, 0, 8); + this.tableLayoutPanel1.Controls.Add(this.checkBox1, 0, 9); + this.tableLayoutPanel1.Controls.Add(this.checkBox4, 0, 10); + this.tableLayoutPanel1.Controls.Add(this.checkBox5, 1, 10); + this.tableLayoutPanel1.Controls.Add(this.label81, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 30); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 11; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.31204F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.187222F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.939898F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.101102F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 1.337889F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.31204F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.31204F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 21F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 27F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1370, 719); + this.tableLayoutPanel1.TabIndex = 19; + // + // tabControl1 + // + this.tableLayoutPanel1.SetColumnSpan(this.tabControl1, 5); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(715, 3); + this.tabControl1.Name = "tabControl1"; + this.tableLayoutPanel1.SetRowSpan(this.tabControl1, 9); + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(652, 409); + this.tabControl1.TabIndex = 20; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.tableLayoutPanel2); + this.tabPage1.Location = new System.Drawing.Point(4, 30); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(644, 375); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "生产界面"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 5; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F)); + this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.label2, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.label3, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.lbl_Volume1, 1, 1); + this.tableLayoutPanel2.Controls.Add(this.label4, 0, 2); + this.tableLayoutPanel2.Controls.Add(this.lbl_Area1, 1, 2); + this.tableLayoutPanel2.Controls.Add(this.label5, 0, 3); + this.tableLayoutPanel2.Controls.Add(this.label6, 0, 4); + this.tableLayoutPanel2.Controls.Add(this.label7, 0, 5); + this.tableLayoutPanel2.Controls.Add(this.label8, 0, 6); + this.tableLayoutPanel2.Controls.Add(this.lbl_Volume2, 1, 3); + this.tableLayoutPanel2.Controls.Add(this.lbl_Area2, 1, 4); + this.tableLayoutPanel2.Controls.Add(this.lbl_Volume3, 1, 5); + this.tableLayoutPanel2.Controls.Add(this.lbl_Area3, 1, 6); + this.tableLayoutPanel2.Controls.Add(this.lbl_Volume1Status, 2, 1); + this.tableLayoutPanel2.Controls.Add(this.lbl_Area1Status, 2, 2); + this.tableLayoutPanel2.Controls.Add(this.lbl_Volume2Status, 2, 3); + this.tableLayoutPanel2.Controls.Add(this.lbl_Area2Status, 2, 4); + this.tableLayoutPanel2.Controls.Add(this.lbl_Volume3Status, 2, 5); + this.tableLayoutPanel2.Controls.Add(this.lbl_Area3Status, 2, 6); + this.tableLayoutPanel2.Controls.Add(this.label9, 3, 1); + this.tableLayoutPanel2.Controls.Add(this.lbl_CheckNum, 4, 1); + this.tableLayoutPanel2.Controls.Add(this.label10, 3, 2); + this.tableLayoutPanel2.Controls.Add(this.label11, 4, 2); + this.tableLayoutPanel2.Controls.Add(this.label12, 3, 3); + this.tableLayoutPanel2.Controls.Add(this.label13, 3, 4); + this.tableLayoutPanel2.Controls.Add(this.label14, 4, 3); + this.tableLayoutPanel2.Controls.Add(this.lbl_OkRate, 4, 4); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 7; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 14.28571F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(638, 369); + this.tableLayoutPanel2.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Dock = System.Windows.Forms.DockStyle.Fill; + this.label1.Location = new System.Drawing.Point(3, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(121, 52); + this.label1.TabIndex = 0; + this.label1.Text = "SN:"; + // + // label2 + // + this.label2.AutoSize = true; + this.tableLayoutPanel2.SetColumnSpan(this.label2, 2); + this.label2.Dock = System.Windows.Forms.DockStyle.Fill; + this.label2.Location = new System.Drawing.Point(130, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(248, 52); + this.label2.TabIndex = 1; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Dock = System.Windows.Forms.DockStyle.Fill; + this.label3.Location = new System.Drawing.Point(3, 52); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(121, 52); + this.label3.TabIndex = 2; + this.label3.Text = "位置1体积:"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Volume1 + // + this.lbl_Volume1.AutoSize = true; + this.lbl_Volume1.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Volume1.Location = new System.Drawing.Point(130, 52); + this.lbl_Volume1.Name = "lbl_Volume1"; + this.lbl_Volume1.Size = new System.Drawing.Size(121, 52); + this.lbl_Volume1.TabIndex = 3; + this.lbl_Volume1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Dock = System.Windows.Forms.DockStyle.Fill; + this.label4.Location = new System.Drawing.Point(3, 104); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(121, 52); + this.label4.TabIndex = 4; + this.label4.Text = "位置1面积:"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Area1 + // + this.lbl_Area1.AutoSize = true; + this.lbl_Area1.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Area1.Location = new System.Drawing.Point(130, 104); + this.lbl_Area1.Name = "lbl_Area1"; + this.lbl_Area1.Size = new System.Drawing.Size(121, 52); + this.lbl_Area1.TabIndex = 5; + this.lbl_Area1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Dock = System.Windows.Forms.DockStyle.Fill; + this.label5.Location = new System.Drawing.Point(3, 156); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(121, 52); + this.label5.TabIndex = 6; + this.label5.Text = "位置2体积:"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Dock = System.Windows.Forms.DockStyle.Fill; + this.label6.Location = new System.Drawing.Point(3, 208); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(121, 52); + this.label6.TabIndex = 7; + this.label6.Text = "位置2面积:"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Dock = System.Windows.Forms.DockStyle.Fill; + this.label7.Location = new System.Drawing.Point(3, 260); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(121, 52); + this.label7.TabIndex = 8; + this.label7.Text = "位置3体积:"; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Dock = System.Windows.Forms.DockStyle.Fill; + this.label8.Location = new System.Drawing.Point(3, 312); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(121, 57); + this.label8.TabIndex = 9; + this.label8.Text = "位置3面积:"; + this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Volume2 + // + this.lbl_Volume2.AutoSize = true; + this.lbl_Volume2.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Volume2.Location = new System.Drawing.Point(130, 156); + this.lbl_Volume2.Name = "lbl_Volume2"; + this.lbl_Volume2.Size = new System.Drawing.Size(121, 52); + this.lbl_Volume2.TabIndex = 10; + this.lbl_Volume2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Area2 + // + this.lbl_Area2.AutoSize = true; + this.lbl_Area2.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Area2.Location = new System.Drawing.Point(130, 208); + this.lbl_Area2.Name = "lbl_Area2"; + this.lbl_Area2.Size = new System.Drawing.Size(121, 52); + this.lbl_Area2.TabIndex = 11; + this.lbl_Area2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Volume3 + // + this.lbl_Volume3.AutoSize = true; + this.lbl_Volume3.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Volume3.Location = new System.Drawing.Point(130, 260); + this.lbl_Volume3.Name = "lbl_Volume3"; + this.lbl_Volume3.Size = new System.Drawing.Size(121, 52); + this.lbl_Volume3.TabIndex = 12; + this.lbl_Volume3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Area3 + // + this.lbl_Area3.AutoSize = true; + this.lbl_Area3.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Area3.Location = new System.Drawing.Point(130, 312); + this.lbl_Area3.Name = "lbl_Area3"; + this.lbl_Area3.Size = new System.Drawing.Size(121, 57); + this.lbl_Area3.TabIndex = 13; + this.lbl_Area3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Volume1Status + // + this.lbl_Volume1Status.AutoSize = true; + this.lbl_Volume1Status.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Volume1Status.Location = new System.Drawing.Point(257, 52); + this.lbl_Volume1Status.Name = "lbl_Volume1Status"; + this.lbl_Volume1Status.Size = new System.Drawing.Size(121, 52); + this.lbl_Volume1Status.TabIndex = 14; + this.lbl_Volume1Status.Text = "待检测"; + this.lbl_Volume1Status.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Area1Status + // + this.lbl_Area1Status.AutoSize = true; + this.lbl_Area1Status.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Area1Status.Location = new System.Drawing.Point(257, 104); + this.lbl_Area1Status.Name = "lbl_Area1Status"; + this.lbl_Area1Status.Size = new System.Drawing.Size(121, 52); + this.lbl_Area1Status.TabIndex = 15; + this.lbl_Area1Status.Text = "待检测"; + this.lbl_Area1Status.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Volume2Status + // + this.lbl_Volume2Status.AutoSize = true; + this.lbl_Volume2Status.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Volume2Status.Location = new System.Drawing.Point(257, 156); + this.lbl_Volume2Status.Name = "lbl_Volume2Status"; + this.lbl_Volume2Status.Size = new System.Drawing.Size(121, 52); + this.lbl_Volume2Status.TabIndex = 16; + this.lbl_Volume2Status.Text = "待检测"; + this.lbl_Volume2Status.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Area2Status + // + this.lbl_Area2Status.AutoSize = true; + this.lbl_Area2Status.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Area2Status.Location = new System.Drawing.Point(257, 208); + this.lbl_Area2Status.Name = "lbl_Area2Status"; + this.lbl_Area2Status.Size = new System.Drawing.Size(121, 52); + this.lbl_Area2Status.TabIndex = 17; + this.lbl_Area2Status.Text = "待检测"; + this.lbl_Area2Status.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Volume3Status + // + this.lbl_Volume3Status.AutoSize = true; + this.lbl_Volume3Status.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Volume3Status.Location = new System.Drawing.Point(257, 260); + this.lbl_Volume3Status.Name = "lbl_Volume3Status"; + this.lbl_Volume3Status.Size = new System.Drawing.Size(121, 52); + this.lbl_Volume3Status.TabIndex = 18; + this.lbl_Volume3Status.Text = "待检测"; + this.lbl_Volume3Status.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_Area3Status + // + this.lbl_Area3Status.AutoSize = true; + this.lbl_Area3Status.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_Area3Status.Location = new System.Drawing.Point(257, 312); + this.lbl_Area3Status.Name = "lbl_Area3Status"; + this.lbl_Area3Status.Size = new System.Drawing.Size(121, 57); + this.lbl_Area3Status.TabIndex = 19; + this.lbl_Area3Status.Text = "待检测"; + this.lbl_Area3Status.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Dock = System.Windows.Forms.DockStyle.Fill; + this.label9.Location = new System.Drawing.Point(384, 52); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(121, 52); + this.label9.TabIndex = 20; + this.label9.Text = "生产总数:"; + this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_CheckNum + // + this.lbl_CheckNum.AutoSize = true; + this.lbl_CheckNum.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_CheckNum.Location = new System.Drawing.Point(511, 52); + this.lbl_CheckNum.Name = "lbl_CheckNum"; + this.lbl_CheckNum.Size = new System.Drawing.Size(124, 52); + this.lbl_CheckNum.TabIndex = 21; + this.lbl_CheckNum.Text = "0"; + this.lbl_CheckNum.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Dock = System.Windows.Forms.DockStyle.Fill; + this.label10.Location = new System.Drawing.Point(384, 104); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(121, 52); + this.label10.TabIndex = 22; + this.label10.Text = "合格数:"; + this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Dock = System.Windows.Forms.DockStyle.Fill; + this.label11.Location = new System.Drawing.Point(511, 104); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(124, 52); + this.label11.TabIndex = 23; + this.label11.Text = "0"; + this.label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.label11.Click += new System.EventHandler(this.label11_Click); + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Dock = System.Windows.Forms.DockStyle.Fill; + this.label12.Location = new System.Drawing.Point(384, 156); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(121, 52); + this.label12.TabIndex = 24; + this.label12.Text = "不合格数:"; + this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Dock = System.Windows.Forms.DockStyle.Fill; + this.label13.Location = new System.Drawing.Point(384, 208); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(121, 52); + this.label13.TabIndex = 25; + this.label13.Text = "合格率:"; + this.label13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Dock = System.Windows.Forms.DockStyle.Fill; + this.label14.Location = new System.Drawing.Point(511, 156); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(124, 52); + this.label14.TabIndex = 26; + this.label14.Text = "0"; + this.label14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbl_OkRate + // + this.lbl_OkRate.AutoSize = true; + this.lbl_OkRate.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_OkRate.Location = new System.Drawing.Point(511, 208); + this.lbl_OkRate.Name = "lbl_OkRate"; + this.lbl_OkRate.Size = new System.Drawing.Size(124, 52); + this.lbl_OkRate.TabIndex = 27; + this.lbl_OkRate.Text = "100%"; + this.lbl_OkRate.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.tableLayoutPanel3); + this.tabPage2.Location = new System.Drawing.Point(4, 30); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(644, 375); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "标定界面"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // btn_LoadImage + // + this.btn_LoadImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.btn_LoadImage.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); + this.btn_LoadImage.Location = new System.Drawing.Point(4, 204); + this.btn_LoadImage.Margin = new System.Windows.Forms.Padding(4); + this.btn_LoadImage.Name = "btn_LoadImage"; + this.btn_LoadImage.Size = new System.Drawing.Size(168, 35); + this.btn_LoadImage.TabIndex = 20; + this.btn_LoadImage.Text = "加载图像"; + this.btn_LoadImage.UseVisualStyleBackColor = true; + this.btn_LoadImage.Click += new System.EventHandler(this.btn_LoadImage_Click); + // + // btn_ManulTrigger + // + this.btn_ManulTrigger.Dock = System.Windows.Forms.DockStyle.Fill; + this.btn_ManulTrigger.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); + this.btn_ManulTrigger.Location = new System.Drawing.Point(4, 161); + this.btn_ManulTrigger.Margin = new System.Windows.Forms.Padding(4); + this.btn_ManulTrigger.Name = "btn_ManulTrigger"; + this.btn_ManulTrigger.Size = new System.Drawing.Size(168, 35); + this.btn_ManulTrigger.TabIndex = 18; + this.btn_ManulTrigger.Text = "手动触发"; + this.btn_ManulTrigger.UseVisualStyleBackColor = true; + this.btn_ManulTrigger.Click += new System.EventHandler(this.btn_ManulTrigger_Click); + // + // lvw_Log + // + this.lvw_Log.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.InfoTime, + this.Information}); + this.tableLayoutPanel1.SetColumnSpan(this.lvw_Log, 8); + this.lvw_Log.ContextMenuStrip = this.contextMenuStrip1; + this.lvw_Log.Dock = System.Windows.Forms.DockStyle.Fill; + this.lvw_Log.FullRowSelect = true; + this.lvw_Log.GridLines = true; + this.lvw_Log.HideSelection = false; + this.lvw_Log.Location = new System.Drawing.Point(4, 496); + this.lvw_Log.Margin = new System.Windows.Forms.Padding(4); + this.lvw_Log.Name = "lvw_Log"; + this.tableLayoutPanel1.SetRowSpan(this.lvw_Log, 5); + this.lvw_Log.Size = new System.Drawing.Size(1362, 219); + this.lvw_Log.SmallImageList = this.imageList1; + this.lvw_Log.TabIndex = 16; + this.lvw_Log.UseCompatibleStateImageBehavior = false; + this.lvw_Log.View = System.Windows.Forms.View.Details; + // + // InfoTime + // + this.InfoTime.Text = "时间"; + this.InfoTime.Width = 150; + // + // Information + // + this.Information.Text = "信息"; + this.Information.Width = 800; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.清除ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(109, 28); + // + // 清除ToolStripMenuItem + // + this.清除ToolStripMenuItem.Name = "清除ToolStripMenuItem"; + this.清除ToolStripMenuItem.Size = new System.Drawing.Size(108, 24); + this.清除ToolStripMenuItem.Text = "清除"; + this.清除ToolStripMenuItem.Click += new System.EventHandler(this.清除ToolStripMenuItem_Click); + // + // imageList1 + // + this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); + this.imageList1.TransparentColor = System.Drawing.Color.Transparent; + this.imageList1.Images.SetKeyName(0, "info.png"); + this.imageList1.Images.SetKeyName(1, "warning.png"); + this.imageList1.Images.SetKeyName(2, "error.png"); + // + // btn_Auto + // + this.btn_Auto.BackColor = System.Drawing.Color.GreenYellow; + this.btn_Auto.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.btn_Auto.Dock = System.Windows.Forms.DockStyle.Fill; + this.btn_Auto.FlatAppearance.BorderColor = System.Drawing.Color.White; + this.btn_Auto.FlatAppearance.BorderSize = 0; + this.btn_Auto.FlatAppearance.MouseDownBackColor = System.Drawing.Color.White; + this.btn_Auto.FlatAppearance.MouseOverBackColor = System.Drawing.Color.White; + this.btn_Auto.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.btn_Auto.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btn_Auto.Location = new System.Drawing.Point(4, 118); + this.btn_Auto.Margin = new System.Windows.Forms.Padding(4); + this.btn_Auto.Name = "btn_Auto"; + this.btn_Auto.Size = new System.Drawing.Size(168, 35); + this.btn_Auto.TabIndex = 17; + this.btn_Auto.Text = "自动模式"; + this.btn_Auto.UseVisualStyleBackColor = false; + this.btn_Auto.Click += new System.EventHandler(this.btn_Auto_Click); + // + // cogRecordDisplay1 + // + this.cogRecordDisplay1.ColorMapLowerClipColor = System.Drawing.Color.Black; + this.cogRecordDisplay1.ColorMapLowerRoiLimit = 0D; + this.cogRecordDisplay1.ColorMapPredefined = Cognex.VisionPro.Display.CogDisplayColorMapPredefinedConstants.None; + this.cogRecordDisplay1.ColorMapUpperClipColor = System.Drawing.Color.Black; + this.cogRecordDisplay1.ColorMapUpperRoiLimit = 1D; + this.cogRecordDisplay1.Dock = System.Windows.Forms.DockStyle.Fill; + this.cogRecordDisplay1.DoubleTapZoomCycleLength = 2; + this.cogRecordDisplay1.DoubleTapZoomSensitivity = 2.5D; + this.cogRecordDisplay1.Location = new System.Drawing.Point(180, 4); + this.cogRecordDisplay1.Margin = new System.Windows.Forms.Padding(4); + this.cogRecordDisplay1.MouseWheelMode = Cognex.VisionPro.Display.CogDisplayMouseWheelModeConstants.Zoom1; + this.cogRecordDisplay1.MouseWheelSensitivity = 1D; + this.cogRecordDisplay1.Name = "cogRecordDisplay1"; + this.cogRecordDisplay1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("cogRecordDisplay1.OcxState"))); + this.tableLayoutPanel1.SetRowSpan(this.cogRecordDisplay1, 9); + this.cogRecordDisplay1.Size = new System.Drawing.Size(270, 407); + this.cogRecordDisplay1.TabIndex = 3; + // + // button1 + // + this.button1.Dock = System.Windows.Forms.DockStyle.Fill; + this.button1.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.button1.Location = new System.Drawing.Point(3, 246); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(170, 37); + this.button1.TabIndex = 48; + this.button1.Text = "清除计数"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // cog3DDisplayV2WF1 + // + this.cog3DDisplayV2WF1.AutoResolution = true; + this.cog3DDisplayV2WF1.DisplayMode = Cognex.VisionPro3D.DisplayModes.Surface; + this.cog3DDisplayV2WF1.DisplaySpaceName3D = "."; + this.cog3DDisplayV2WF1.Dock = System.Windows.Forms.DockStyle.Fill; + this.cog3DDisplayV2WF1.EnableDrawing = true; + this.cog3DDisplayV2WF1.Location = new System.Drawing.Point(463, 7); + this.cog3DDisplayV2WF1.Margin = new System.Windows.Forms.Padding(9, 7, 9, 7); + this.cog3DDisplayV2WF1.Name = "cog3DDisplayV2WF1"; + this.cog3DDisplayV2WF1.Resolution = 0.1D; + this.tableLayoutPanel1.SetRowSpan(this.cog3DDisplayV2WF1, 9); + this.cog3DDisplayV2WF1.Size = new System.Drawing.Size(240, 401); + this.cog3DDisplayV2WF1.TabIndex = 50; + // + // label17 + // + this.label17.Dock = System.Windows.Forms.DockStyle.Fill; + this.label17.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold); + this.label17.Location = new System.Drawing.Point(180, 415); + this.label17.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(270, 43); + this.label17.TabIndex = 33; + // + // button2 + // + this.button2.Dock = System.Windows.Forms.DockStyle.Fill; + this.button2.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.button2.Location = new System.Drawing.Point(4, 290); + this.button2.Margin = new System.Windows.Forms.Padding(4); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(168, 35); + this.button2.TabIndex = 51; + this.button2.Text = "复位按钮"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // lbl_ProductName + // + this.lbl_ProductName.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbl_ProductName.Font = new System.Drawing.Font("宋体", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbl_ProductName.Location = new System.Drawing.Point(4, 0); + this.lbl_ProductName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.lbl_ProductName.Name = "lbl_ProductName"; + this.lbl_ProductName.Size = new System.Drawing.Size(168, 71); + this.lbl_ProductName.TabIndex = 5; + this.lbl_ProductName.Text = "产品名称:"; + this.lbl_ProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label33 + // + this.label33.AutoSize = true; + this.label33.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.label33.Dock = System.Windows.Forms.DockStyle.Fill; + this.label33.Location = new System.Drawing.Point(457, 458); + this.label33.Name = "label33"; + this.label33.Size = new System.Drawing.Size(252, 34); + this.label33.TabIndex = 53; + this.label33.Text = "NG原因:"; + this.label33.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // label34 + // + this.label34.AutoSize = true; + this.label34.BackColor = System.Drawing.Color.Lime; + this.tableLayoutPanel1.SetColumnSpan(this.label34, 4); + this.label34.Dock = System.Windows.Forms.DockStyle.Fill; + this.label34.Location = new System.Drawing.Point(715, 458); + this.label34.Name = "label34"; + this.label34.Size = new System.Drawing.Size(514, 34); + this.label34.TabIndex = 54; + this.label34.Text = "暂无异常"; + this.label34.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // checkBox3 + // + this.checkBox3.AutoSize = true; + this.checkBox3.Checked = true; + this.checkBox3.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox3.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBox3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.checkBox3.Location = new System.Drawing.Point(3, 332); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Size = new System.Drawing.Size(170, 37); + this.checkBox3.TabIndex = 49; + this.checkBox3.Text = "断胶监测启用"; + this.checkBox3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.checkBox3.UseVisualStyleBackColor = true; + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Checked = true; + this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBox2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.checkBox2.Location = new System.Drawing.Point(3, 375); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(170, 37); + this.checkBox2.TabIndex = 43; + this.checkBox2.Text = "阈值启用"; + this.checkBox2.UseVisualStyleBackColor = true; + this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBox1.Location = new System.Drawing.Point(3, 418); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(170, 37); + this.checkBox1.TabIndex = 52; + this.checkBox1.Text = "图像切换"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged_1); + // + // checkBox4 + // + this.checkBox4.AutoSize = true; + this.checkBox4.Checked = true; + this.checkBox4.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox4.Dock = System.Windows.Forms.DockStyle.Fill; + this.checkBox4.Location = new System.Drawing.Point(3, 461); + this.checkBox4.Name = "checkBox4"; + this.checkBox4.Size = new System.Drawing.Size(170, 28); + this.checkBox4.TabIndex = 55; + this.checkBox4.Text = "偏移检测"; + this.checkBox4.UseVisualStyleBackColor = true; + // + // checkBox5 + // + this.checkBox5.AutoSize = true; + this.checkBox5.Location = new System.Drawing.Point(179, 461); + this.checkBox5.Name = "checkBox5"; + this.checkBox5.Size = new System.Drawing.Size(199, 24); + this.checkBox5.TabIndex = 56; + this.checkBox5.Text = "标定数据存储启用"; + this.checkBox5.UseVisualStyleBackColor = true; + this.checkBox5.CheckedChanged += new System.EventHandler(this.checkBox5_CheckedChanged); + // + // label81 + // + this.label81.AutoSize = true; + this.label81.Dock = System.Windows.Forms.DockStyle.Fill; + this.label81.Font = new System.Drawing.Font("宋体", 13.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label81.Location = new System.Drawing.Point(3, 71); + this.label81.Name = "label81"; + this.label81.Size = new System.Drawing.Size(170, 43); + this.label81.TabIndex = 57; + this.label81.Text = "PPU"; + this.label81.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // menuStrip1 + // + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.文件ToolStripMenuItem, + this.切换配方ToolStripMenuItem, + this.设置ToolStripMenuItem, + this.登录ToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Padding = new System.Windows.Forms.Padding(6, 3, 0, 3); + this.menuStrip1.Size = new System.Drawing.Size(1370, 30); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // 文件ToolStripMenuItem + // + this.文件ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.打开QuickBuildToolStripMenuItem, + this.加载QuickBuildToolStripMenuItem, + this.保存QuickBuildToolStripMenuItem}); + this.文件ToolStripMenuItem.Name = "文件ToolStripMenuItem"; + this.文件ToolStripMenuItem.Size = new System.Drawing.Size(53, 24); + this.文件ToolStripMenuItem.Text = "文件"; + // + // 打开QuickBuildToolStripMenuItem + // + this.打开QuickBuildToolStripMenuItem.Name = "打开QuickBuildToolStripMenuItem"; + this.打开QuickBuildToolStripMenuItem.Size = new System.Drawing.Size(199, 26); + this.打开QuickBuildToolStripMenuItem.Text = "打开QuickBuild"; + this.打开QuickBuildToolStripMenuItem.Click += new System.EventHandler(this.打开QuickBuildToolStripMenuItem_Click); + // + // 加载QuickBuildToolStripMenuItem + // + this.加载QuickBuildToolStripMenuItem.Name = "加载QuickBuildToolStripMenuItem"; + this.加载QuickBuildToolStripMenuItem.Size = new System.Drawing.Size(199, 26); + this.加载QuickBuildToolStripMenuItem.Text = "加载QuickBuild"; + // + // 保存QuickBuildToolStripMenuItem + // + this.保存QuickBuildToolStripMenuItem.Name = "保存QuickBuildToolStripMenuItem"; + this.保存QuickBuildToolStripMenuItem.Size = new System.Drawing.Size(199, 26); + this.保存QuickBuildToolStripMenuItem.Text = "保存QuickBuild"; + this.保存QuickBuildToolStripMenuItem.Click += new System.EventHandler(this.保存QuickBuildToolStripMenuItem_Click); + // + // 切换配方ToolStripMenuItem + // + this.切换配方ToolStripMenuItem.Name = "切换配方ToolStripMenuItem"; + this.切换配方ToolStripMenuItem.Size = new System.Drawing.Size(83, 24); + this.切换配方ToolStripMenuItem.Text = "切换配方"; + this.切换配方ToolStripMenuItem.Click += new System.EventHandler(this.切换配方ToolStripMenuItem_Click); + // + // 设置ToolStripMenuItem + // + this.设置ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.通讯设置ToolStripMenuItem, + this.参数设置ToolStripMenuItem}); + this.设置ToolStripMenuItem.Name = "设置ToolStripMenuItem"; + this.设置ToolStripMenuItem.Size = new System.Drawing.Size(53, 24); + this.设置ToolStripMenuItem.Text = "设置"; + // + // 通讯设置ToolStripMenuItem + // + this.通讯设置ToolStripMenuItem.Name = "通讯设置ToolStripMenuItem"; + this.通讯设置ToolStripMenuItem.Size = new System.Drawing.Size(152, 26); + this.通讯设置ToolStripMenuItem.Text = "通讯设置"; + this.通讯设置ToolStripMenuItem.Click += new System.EventHandler(this.通讯设置ToolStripMenuItem_Click); + // + // 参数设置ToolStripMenuItem + // + this.参数设置ToolStripMenuItem.Name = "参数设置ToolStripMenuItem"; + this.参数设置ToolStripMenuItem.Size = new System.Drawing.Size(152, 26); + this.参数设置ToolStripMenuItem.Text = "参数设置"; + this.参数设置ToolStripMenuItem.Click += new System.EventHandler(this.参数设置ToolStripMenuItem_Click); + // + // 登录ToolStripMenuItem + // + this.登录ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.登录ToolStripMenuItem1, + this.退出登录ToolStripMenuItem}); + this.登录ToolStripMenuItem.Name = "登录ToolStripMenuItem"; + this.登录ToolStripMenuItem.Size = new System.Drawing.Size(83, 24); + this.登录ToolStripMenuItem.Text = "登录设置"; + // + // 登录ToolStripMenuItem1 + // + this.登录ToolStripMenuItem1.Name = "登录ToolStripMenuItem1"; + this.登录ToolStripMenuItem1.Size = new System.Drawing.Size(152, 26); + this.登录ToolStripMenuItem1.Text = "登录"; + this.登录ToolStripMenuItem1.Click += new System.EventHandler(this.登录ToolStripMenuItem_Click); + // + // 退出登录ToolStripMenuItem + // + this.退出登录ToolStripMenuItem.Name = "退出登录ToolStripMenuItem"; + this.退出登录ToolStripMenuItem.Size = new System.Drawing.Size(152, 26); + this.退出登录ToolStripMenuItem.Text = "退出登录"; + this.退出登录ToolStripMenuItem.Click += new System.EventHandler(this.退出ToolStripMenuItem_Click); + // + // label80 + // + this.label80.AutoSize = true; + this.label80.BackColor = System.Drawing.Color.Yellow; + this.label80.Dock = System.Windows.Forms.DockStyle.Fill; + this.label80.Location = new System.Drawing.Point(516, 184); + this.label80.Name = "label80"; + this.label80.Size = new System.Drawing.Size(119, 185); + this.label80.TabIndex = 62; + this.label80.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label65 + // + this.label65.AutoSize = true; + this.label65.BackColor = System.Drawing.Color.Yellow; + this.label65.Dock = System.Windows.Forms.DockStyle.Fill; + this.label65.Location = new System.Drawing.Point(516, 0); + this.label65.Name = "label65"; + this.label65.Size = new System.Drawing.Size(119, 184); + this.label65.TabIndex = 47; + this.label65.Text = "结果对比"; + this.label65.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label64 + // + this.label64.AutoSize = true; + this.label64.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); + this.label64.Dock = System.Windows.Forms.DockStyle.Fill; + this.label64.Location = new System.Drawing.Point(327, 184); + this.label64.Name = "label64"; + this.label64.Size = new System.Drawing.Size(183, 185); + this.label64.TabIndex = 46; + this.label64.Text = "74770~75008mm³"; + this.label64.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label54 + // + this.label54.AutoSize = true; + this.label54.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.label54.Dock = System.Windows.Forms.DockStyle.Fill; + this.label54.Location = new System.Drawing.Point(157, 184); + this.label54.Name = "label54"; + this.label54.Size = new System.Drawing.Size(164, 185); + this.label54.TabIndex = 36; + this.label54.Text = "0"; + this.label54.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label44 + // + this.label44.AutoSize = true; + this.label44.Location = new System.Drawing.Point(3, 184); + this.label44.Name = "label44"; + this.label44.Size = new System.Drawing.Size(135, 40); + this.label44.TabIndex = 26; + this.label44.Text = "标定块整体体积:"; + this.label44.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128))))); + this.label19.Dock = System.Windows.Forms.DockStyle.Fill; + this.label19.ForeColor = System.Drawing.Color.Black; + this.label19.Location = new System.Drawing.Point(327, 0); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(183, 184); + this.label19.TabIndex = 3; + this.label19.Text = "合格范围"; + this.label19.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.label18.Dock = System.Windows.Forms.DockStyle.Fill; + this.label18.Location = new System.Drawing.Point(157, 0); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(164, 184); + this.label18.TabIndex = 2; + this.label18.Text = "相机测量结果"; + this.label18.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 4; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 29.96633F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.1384F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 36.84211F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 124F)); + this.tableLayoutPanel3.Controls.Add(this.label18, 1, 0); + this.tableLayoutPanel3.Controls.Add(this.label19, 2, 0); + this.tableLayoutPanel3.Controls.Add(this.label65, 3, 0); + this.tableLayoutPanel3.Controls.Add(this.label44, 0, 1); + this.tableLayoutPanel3.Controls.Add(this.label80, 3, 1); + this.tableLayoutPanel3.Controls.Add(this.label64, 2, 1); + this.tableLayoutPanel3.Controls.Add(this.label54, 1, 1); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 2; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.25F)); + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 6.25F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(638, 369); + this.tableLayoutPanel3.TabIndex = 0; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1370, 749); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(4); + this.Name = "Form1"; + this.Text = "OP30工位视觉涂胶检测系统"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + this.Load += new System.EventHandler(this.Form1_Load); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.contextMenuStrip1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.cogRecordDisplay1)).EndInit(); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem 文件ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 打开QuickBuildToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 加载QuickBuildToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 保存QuickBuildToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 切换配方ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 设置ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 登录ToolStripMenuItem; + private System.Windows.Forms.ImageList imageList1; + private System.Windows.Forms.ToolStripMenuItem 通讯设置ToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 清除ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 参数设置ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 登录ToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem 退出登录ToolStripMenuItem; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Button btn_LoadImage; + private System.Windows.Forms.Button btn_ManulTrigger; + private System.Windows.Forms.ListView lvw_Log; + private System.Windows.Forms.ColumnHeader InfoTime; + private System.Windows.Forms.ColumnHeader Information; + private System.Windows.Forms.Button btn_Auto; + private Cognex.VisionPro.CogRecordDisplay cogRecordDisplay1; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.CheckBox checkBox3; + private Cognex.VisionPro3D.Cog3DDisplayV2WF cog3DDisplayV2WF1; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label lbl_ProductName; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label lbl_Volume1; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label lbl_Area1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label lbl_Volume2; + private System.Windows.Forms.Label lbl_Area2; + private System.Windows.Forms.Label lbl_Volume3; + private System.Windows.Forms.Label lbl_Area3; + private System.Windows.Forms.Label lbl_Volume1Status; + private System.Windows.Forms.Label lbl_Area1Status; + private System.Windows.Forms.Label lbl_Volume2Status; + private System.Windows.Forms.Label lbl_Area2Status; + private System.Windows.Forms.Label lbl_Volume3Status; + private System.Windows.Forms.Label lbl_Area3Status; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label lbl_CheckNum; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label lbl_OkRate; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Label label33; + private System.Windows.Forms.Label label34; + private System.Windows.Forms.CheckBox checkBox4; + private System.Windows.Forms.CheckBox checkBox5; + private System.Windows.Forms.Label label81; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label65; + private System.Windows.Forms.Label label44; + private System.Windows.Forms.Label label80; + private System.Windows.Forms.Label label64; + private System.Windows.Forms.Label label54; + } +} + diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.cs new file mode 100644 index 0000000..a8d53fa --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.cs @@ -0,0 +1,1784 @@ +using Cognex.VisionPro; +using Cognex.VisionPro.CalibFix; +using Cognex.VisionPro.ImageFile; +using Cognex.VisionPro.ImageProcessing; +using Cognex.VisionPro.PMAlign; +using Cognex.VisionPro.QuickBuild; +using Cognex.VisionPro.ToolBlock; +using Cognex.VisionPro.ToolGroup; +using Cognex.VisionPro3D; +using HslCommunication.Profinet.Knx; +using Microsoft.Office.Interop; +using S7.Net; +using System; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Runtime; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; +using Excel = Microsoft.Office.Interop.Excel; +using Timer = System.Windows.Forms.Timer; +using System.Timers; +namespace 精工涂胶检测项目 +{ + public partial class Form1 : Form + { + public TCPClass myTcp { get; private set; } // 公开属性 + string nowTimeYear = DateTime.Now.ToString("yyyy"); + string nowTimeMonth = DateTime.Now.ToString("MM"); + string nowTimeDay = DateTime.Now.ToString("dd"); + string nowTimehms = DateTime.Now.ToString("HHmmss"); + string s; + private static System.Timers.Timer _gcTimer; + string CSPath; + String imagePath; + string imageSavePath; + internal Cognex.VisionPro3D.Cog3DDisplayV2WF display3D; + public CogJobManager myJobManager; + CogToolGroup myToolGroup; + CogJob myJob; + CogJobIndependent myJobIndependert; + CogToolBlock myToolBlock1; + CogToolBlock myToolBlock2; + CogToolBlock VZ1; + CogToolBlock VZ2; + CogToolBlock VZ3; + Cog3DVisionDataRerenderTool my3D; + + string TXZH = "0"; + int okNum = 0; + int ngNum = 0; + int csv1max; + int csv1min; + int csa1max; + int csa1min; + int csv2max; + int csv2min; + int csa2max; + int csa2min; + int csv3max; + int csv3min; + int csa3max; + int csa3min; + int bdyz; + double tj; + double TOPMJMin; + double TOPMJMax; + double BOTMJMin; + double BOTMJMax; + double TOP1Min; + double TOP2Min; + double TOP3Min; + double TOP4Min; + double TOP5Min; + double TOP6Min; + double TOP1Max; + double TOP2Max; + double TOP3Max; + double TOP4Max; + double TOP5Max; + double TOP6Max; + double BOT1Min; + double BOT2Min; + double BOT3Min; + double BOT4Min; + double BOT5Min; + double BOT6Min; + double BOT1Max; + double BOT2Max; + double BOT3Max; + double BOT4Max; + double BOT5Max; + double BOT6Max; + double BDKTJMax; + double BDKTJMin; + bool button1State = false; + CogPMAlignTool mPM; + CogFixtureTool mFIX; + int currentStatus; + private Timer inactivityTimer; + FormLogin formLogin; + private MyMessageFilter messageFilter; + public ModbusTcpClient modbusClient; // 新增Modbus客户端实例 + private Timer modbusPollTimer; // 新增轮询定时器 + private Timer modbusHeartbeat; + + public Plc plc; + + public bool _autoModbusReconnect = true; + public bool _autoTcpReconnect = true; + String ProductSN; + private string ttt; + public static string CreateCurrentDateFolder(string rootDirectory) + { return CreateCurrentDateFolder(rootDirectory, DateTime.Now); } + public static string CreateCurrentDateFolder(string rootDirectory,DateTime targetDate) + { if (string.IsNullOrWhiteSpace(rootDirectory)) + throw new ArgumentNullException(nameof(rootDirectory), "根目录不能为空"); + string datrFolderName=targetDate.ToString("yyyyMMdd"); + string fullFolderPath=Path.Combine(rootDirectory, datrFolderName); + Directory.CreateDirectory(fullFolderPath); + return fullFolderPath; + } + bool AutoModbusReconnect + { + get { return _autoModbusReconnect; } + set { _autoModbusReconnect = value; } + } + bool AutoTcpReconnect + { + get { return _autoTcpReconnect; } + set { _autoTcpReconnect = value; } + } + + + /// + /// 主程序加载 + /// + public Form1() + { + InitializeComponent(); + //InitComponent(); + // HslCommunication.Authorization.SetAuthorizationCode("163b691b-ba10-44a1-9070-cac594d67965"); + try + { + + + string ip; + int port; + if (Properties.Settings.Default.ModbusIP != "") + { + ip = Properties.Settings.Default.ModbusIP; + } + else + { + ip = "192.168.1.30"; + } + if (Properties.Settings.Default.ModbusPort != "") + { + port = int.Parse(Properties.Settings.Default.ModbusPort); + } + else + { + port = 502; + } + myTcp = new TCPClass(); + } + catch (Exception ex) + { + string exe = ex.Message; + AddLog("程序异常", 1); + } + modbusClient = new ModbusTcpClient("", 502); // 临时初始化 + + } + + //private void InitComponent() + //{ + // throw new NotImplementedException(); + //} + + /// + /// 程序进入方法 + /// + /// + /// + private async void Form1_Load(object sender, System.EventArgs e) + { + try + { + HslCommunication.Authorization.SetAuthorizationCode("163b691b-ba10-44a1-9070-cac594d67965"); + Label数据重置(); + 按钮使能初始化(); + Vpro初始化(); + 计时器初始化(); + // 1. 先注册事件 + //Modbus事件注册(); + //Tcp事件注册(); + // 2. 再进行自动连接 + //await Tcp自动重连(); + Modbus事件注册(); + await Modbus自动连接(); + AddLog("系统启动完成", 0); + } + catch (Exception ex) + { + AddLog(ex.Message, 2); + } + } + private void StartHeartBeat() + { + if (modbusHeartbeat == null) + { + modbusHeartbeat = new Timer { Interval = 500 }; + modbusHeartbeat.Tick += async (s, e) => + { + modbusClient.WriteSingleRegister("0", 1); + Thread.Sleep(50); + }; + } + } + + private void StopHeartBeat() + { + if (modbusHeartbeat == null && modbusHeartbeat.Enabled) + { + modbusHeartbeat.Stop(); + } + } + + public void Modbus事件注册() + { + modbusClient.ConnectionStatusChanged += (s, connected) => + { + AddLog(connected ? "Modbus连接成功" : "Modbus连接断开", connected ? 0 : 1); + }; + + modbusClient.ErrorOccurred += (s, msg) => AddLog($"Modbus错误:{msg}", 2); + //modbusClient.DataReceived += (s, msg) => AddLog($"Modbus接收:{msg}", 0); + //modbusClient.DataSent += (s, msg) => AddLog($"Modbus发送:{msg}", 0); + } + private async Task Modbus自动连接() + { + string ip = "192.168.1.30"; + string portStr = Properties.Settings.Default.ModbusPort; + + if (string.IsNullOrEmpty(ip)) ip = "192.168.1.30"; + if (!int.TryParse(portStr, out int port)) port = 502; + + // 自动重连配置 + modbusClient.AutoReconnect = true; + modbusClient.ReconnectInterval = 2000; + + while (true) + { + var result = await modbusClient.ConnectAsync(); + if (result.IsSuccess) + { + StartModbusPolling(); + StartHeartBeat(); + return; + } + + if (MessageBox.Show("Modbus连接失败,是否配置参数?", "连接错误", + MessageBoxButtons.YesNo) == DialogResult.No) + { + return; + } + + using (var configForm = new FormCommunication()) + { + if (configForm.ShowDialog() == DialogResult.OK) + { + ip = Properties.Settings.Default.ModbusIP; + port = int.Parse(Properties.Settings.Default.ModbusPort); + modbusClient = new ModbusTcpClient(ip, port); + Modbus事件注册(); + } + } + } + } + private static void OnGcTimerTriggered(object sender, ElapsedEventArgs e) + { + Console.WriteLine($"[{DateTime.Now:HH:mm:ss}] 执行 GC 强制回收"); + + // 强制垃圾回收 + GC.Collect(); + + // 等待终结器线程完成(更彻底的回收) + GC.WaitForPendingFinalizers(); + + // 再次回收(清理等待终结后的对象) + GC.Collect(); + } + private void StartModbusPolling() + { // 创建定时器:3000 毫秒 = 3 秒 + _gcTimer = new System.Timers.Timer(3000); + + // 绑定触发事件 + _gcTimer.Elapsed += OnGcTimerTriggered; + + // 重复执行(不是只执行一次) + _gcTimer.AutoReset = true; + + // 启动定时器 + _gcTimer.Start(); + if (modbusPollTimer == null) + { + Vpro初始化(); + modbusPollTimer = new Timer { Interval = 1000 }; + modbusPollTimer.Tick += async (s, e) => + { + if (!modbusClient.IsConnected) return; + + var resultHeartBeat = await modbusClient.ReadHoldingRegisterAsync(0, 1); + var resultTrigger = await modbusClient.ReadHoldingRegisterAsync(1, 1);//Trigger 读取 + var resultresultAcq = await modbusClient.ReadHoldingRegisterAsync(2, 1); + var resultSN = await modbusClient.ReadHoldingRegisterAsync(5, 20);//string 读取 + var TriggerAcq = await modbusClient.ReadHoldingRegisterAsync(3, 1); + + if (resultTrigger.IsSuccess && resultTrigger.Content.Length > 0) + { + string trigger = ConvertShortsToAsciiString(resultTrigger.Content, true); + // 触发处理数据(保持静默) + + if (trigger == "\u0001") + { + AddLog("相机收到PLC触发信号", 0); + modbusClient.WriteSingleRegister("3", (short)1);//ResultAcq + AddLog("给PLC回复,收到触发", 0); + cog3DDisplayV2WF1.Clear(); + + label34.Invoke(new Action(() => label34.Text = "正常生产中!!!!")); + label34.BackColor = Color.Green; + if (myJobManager.JobsRunningState == CogJobsRunningStateConstants.None) + { + myJobManager.Run(); + //if (checkBox1.Checked) + //{ + // myToolBlock2.Run(); + //} + //else + //{ + myToolBlock1.Run(); + //} + AddLog("检测执行中", 0); + } + } + + + if (trigger == "\u0000" || trigger == "") + { + AddLog("相机收到PLC结束触发信号", 0); + modbusClient.WriteSingleRegister("3", (short)0); + AddLog("给PLC发送ResultAcq置零信号", 0); + } + + + //触发标定程序 + if (trigger == "\u0002") + { + Vpro初始化(); + AddLog("收到PLC信号,切换到标定程序", 0); + modbusClient.WriteSingleRegister("3", (short)1);//ResultAcq + if (myJobManager.JobsRunningState == CogJobsRunningStateConstants.None) + { + myJobManager.Run(); + myToolBlock2.Run(); + AddLog("标定程序执行中", 0); + modbusClient.WriteSingleRegister("3", (short)0); + cog3DDisplayV2WF1.Clear(); + } + } + + + } + + if (resultHeartBeat.IsSuccess) + { + + // 触发处理数据(保持静默) + string heart = ConvertShortsToAsciiString(resultHeartBeat.Content, true); + if (heart == "") + { + modbusClient.WriteSingleRegister("0", (short)1); + } + if (heart == "\u0001") + { + modbusClient.WriteSingleRegister("0", (short)0); + } + if (heart == "\u0000") + { + modbusClient.WriteSingleRegister("0", (short)1); + } + + } + + if (resultSN.IsSuccess) + { + //SN数据处理 + ProductSN = ConvertShortsToAsciiString(resultSN.Content, false); + //modbusClient.WriteSingleRegister("40101", (short)1); + + } + if (resultresultAcq.IsSuccess) + { + string resultAcq = ConvertShortsToAsciiString(resultresultAcq.Content, false); + if (resultAcq == "\u0001") + { + modbusClient.WriteSingleRegister("4", (short)0);//ModbusResult清除 + AddLog("给PLC发送/ModbusResult清除信号", 0); + } + } + }; + } + + if (!modbusPollTimer.Enabled) + { + modbusPollTimer.Start(); + AddLog("Modbus实时读取已启动", 0); + } + } + public string ConvertShortsToAsciiString(short[] shorts, bool isLittleEndian = false) + { + var bytes = new List(); + foreach (short s in shorts) + { + // 将 short 拆分为两个字节 + byte highByte = (byte)((s >> 8) & 0xFF); // 高字节 + byte lowByte = (byte)(s & 0xFF); // 低字节 + + // 根据字节序决定顺序 + if (isLittleEndian) + { + bytes.Add(lowByte); + bytes.Add(highByte); + } + else + { + bytes.Add(highByte); + bytes.Add(lowByte); + } + } + + // 过滤非ASCII字符(0-127)并转换为字符串 + var sb = new StringBuilder(); + foreach (byte b in bytes) + { + if (b <= 0x7F && b != 0) // 忽略非ASCII字符和空字符 + { + sb.Append((char)b); + } + } + return sb.ToString(); + } + + private void Modbus信号判断() + { + + } + private void 计时器初始化() + { + // 初始化不活动计时器 + // 初始化不活动计时器 + inactivityTimer = new Timer(); + inactivityTimer.Interval = 300000; // 5秒 + inactivityTimer.Tick += InactivityTimer_Tick; + // 初始化消息过滤器 + messageFilter = new MyMessageFilter(); + Application.AddMessageFilter(messageFilter); + messageFilter.ActivityDetected += MessageFilter_ActivityDetected; + } + private void Tcp事件注册() + { + //事件注册 + myTcp.DataReceived += MyTcp_DataReceived; + myTcp.ClientConnected += MyTcp_ClientConnected; + myTcp.ClientDisconnected += MyTcp_ClientDisconnected; + myTcp.ServerStatusChanged += (s, msg) => AddLog(msg, 1); + } + private void 按钮使能初始化() + { + this.btn_Auto.Text = "自动模式"; + this.btn_Auto.BackColor = Color.YellowGreen; + this.btn_ManulTrigger.Enabled = false; + this.文件ToolStripMenuItem.Enabled = true; + this.切换配方ToolStripMenuItem.Enabled = true; + this.设置ToolStripMenuItem.Enabled = true; + this.登录ToolStripMenuItem.Enabled = true; + this.退出登录ToolStripMenuItem.Enabled = false; + } + private void Vpro初始化() + { + + //初始化 + myJobManager = (CogJobManager)CogSerializer.LoadObjectFromFile(@"D:\OP30\Vpp\30.vpp"); + //引用CogJobManager中的哪个job 第一个作业 job + myJob = myJobManager.Job(0); + //初始化参数引用包含更多关于CogJobManager的信息的一个对象 + myJobIndependert = myJob.OwnedIndependent; + myToolGroup = myJob.VisionTool as CogToolGroup; + //CogToolBlock myToolBlock1 = myJobManager.Job(0).VisionTool as CogToolBlock; + //CogToolBlock myToolBlock2 = myJobManager.Job(0).VisionTool as CogToolBlock; + myToolBlock1 = myToolGroup.Tools["CogToolBlock1"] as CogToolBlock; + myToolBlock2 = myToolGroup.Tools["CogToolBlock2"] as CogToolBlock; + my3D = myToolGroup.Tools["Cog3DVisionDataRerenderTool1"] as Cog3DVisionDataRerenderTool; + VZ1 = myToolBlock1.Tools["VZ1"] as CogToolBlock; + VZ2 = myToolBlock1.Tools["VZ2"] as CogToolBlock; + VZ3 = myToolBlock1.Tools["VZ3"] as CogToolBlock; + mFIX = myToolBlock1.Tools["CogFixtureTool1"] as CogFixtureTool; + + myJobManager.UserQueueFlush(); + myJobManager.FailureQueueFlush(); + myJob.ImageQueueFlush(); + myJobIndependert.RealTimeQueueFlush(); + + myJobManager.UserResultAvailable += MyJobManager_UserResultAvailable; + } + private void StopModbusPolling() + { + if (modbusPollTimer != null && modbusPollTimer.Enabled) + { + modbusPollTimer.Stop(); + AddLog("Modbus断线,已停止实时读取", 1); + } + } + + private void _modbusClient_Disconnected(object sender, string e) + { + AddLog($"PLC连接断开:{e}", 1); + } + + private void InactivityTimer_Tick(object sender, EventArgs e) + { + if (currentStatus == 3) + { + SetMainEnabled(0, "登录"); + inactivityTimer.Stop(); + } + } + private void MessageFilter_ActivityDetected(object sender, EventArgs e) + { + if (currentStatus == 3) // 仅admin状态重置计时器 + { + inactivityTimer.Stop(); + inactivityTimer.Start(); + } + } + + /// + /// 程序关闭方法 + /// + /// + /// + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + if (MessageBox.Show("真的要退出程序吗?", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + myJobManager.UserResultAvailable -= MyJobManager_UserResultAvailable; + myJobManager.Shutdown(); + StopModbusPolling(); + StopHeartBeat(); + + Application.Exit(); + Process[] processes = Process.GetProcessesByName("精工涂胶检测项目"); + foreach (Process process in processes) + { + process.Kill(); + } + + } + else + { + e.Cancel = true; + } + + + } + private void checkBox1_CheckedChanged_1(object sender, EventArgs e) + { + if (checkBox1.Checked) + { + TXZH = "1"; + } + else + { + TXZH = "0"; + } + } + private void MyJobManager_UserResultAvailable(object sender, CogJobManagerActionEventArgs e) + { + ///待会儿需要改,通过ToolBlock是否报错来判断。 + //结果处理代码 + ICogRecord tmpVolum1; + ICogRecord tmpArea1; + ICogRecord tmpVolum2; + ICogRecord tmpArea2; + ICogRecord tmpVolum3; + ICogRecord tmpArea3; + ICogRecord DJJC; + ICogRecord QX; + ICogRecord DW; + ICogRecord TOP1; + ICogRecord TOP2; + ICogRecord TOP3; + ICogRecord TOP4; + ICogRecord TOP5; + ICogRecord TOP6; + ICogRecord TOPMJ; + ICogRecord BOTMJ; + ICogRecord BOT1; + ICogRecord BOT2; + ICogRecord BOT3; + ICogRecord BOT4; + ICogRecord BOT5; + ICogRecord BOT6; + ICogRecord BDKTJ; + ICogRecord TJ; + ICogRecord topRecord = myJobManager.UserResult(); + string s = ProductSN.Substring(2); + ///create graphic wrapper for the range image with its grey overlay + Cog3DRangeImageGraphic rImgG = myToolBlock1.Outputs["CombinedImage"].Value as Cog3DRangeImageGraphic; + cog3DDisplayV2WF1.Add(rImgG); + string rootPath = @"D:\Date"; + string currentDateFolder = Form1.CreateCurrentDateFolder(rootPath); + AddLog("当前文件夹已创建", 1); + //图像显示需要改 + // ICogRecord ShowImageRecord = topRecord.SubRecords["ShowLastRunRecordForUserQueue"].SubRecords["LastRun"].SubRecords["Image Source.OutputImage"]; + if (TXZH == "1") + { + ICogRecord ShowImageRecord = topRecord.SubRecords["ShowLastRunRecordForUserQueue"].SubRecords["LastRun"].SubRecords["Image Source.OutputImage"]; + cogRecordDisplay1.Record = ShowImageRecord; + cogRecordDisplay1.AutoFit = true; + } + if (button1State) + { + ICogRecord ShowImageRecord = topRecord.SubRecords["ShowLastRunRecordForUserQueue"].SubRecords["LastRun"].SubRecords["Image Source.OutputImage"]; + cogRecordDisplay1.Record = ShowImageRecord; + cogRecordDisplay1.AutoFit = true; + } + if (TXZH == "0") + { + ICogRecord ShowImageRecord = topRecord.SubRecords["ShowLastRunRecordForUserQueue"].SubRecords["LastRun"].SubRecords["CogToolBlock1.CogFixtureTool1.OutputImage"]; + cogRecordDisplay1.Record = ShowImageRecord; + + label2.Invoke(new Action(() => label2.Text = s)); + Image img = cogRecordDisplay1.CreateContentBitmap(Cognex.VisionPro.Display.CogDisplayContentBitmapConstants.Display); + string imageName = s +DateTime.Now.ToString("ss")+ ".Png"; + imageSavePath = Path.Combine(currentDateFolder,imageName); + img.Save(imageSavePath, ImageFormat.Png); + cogRecordDisplay1.AutoFit = true; + } + + tmpVolum1 = topRecord.SubRecords["Volum1"]; + tmpArea1 = topRecord.SubRecords["Area1"]; + tmpVolum2 = topRecord.SubRecords["Volum2"]; + tmpArea2 = topRecord.SubRecords["Area2"]; + tmpVolum3 = topRecord.SubRecords["Volum3"]; + tmpArea3 = topRecord.SubRecords["Area3"]; + DJJC = topRecord.SubRecords["DJ_result"]; + QX = topRecord.SubRecords["QX_result"]; + DW = topRecord.SubRecords["DW_PM"]; + TOP1 = topRecord.SubRecords["TOP1"]; + TOP2 = topRecord.SubRecords["TOP2"]; + TOP3 = topRecord.SubRecords["TOP3"]; + TOP4 = topRecord.SubRecords["TOP4"]; + TOP5 = topRecord.SubRecords["TOP5"]; + TOP6 = topRecord.SubRecords["TOP6"]; + BOT1 = topRecord.SubRecords["BOT1"]; + BOT2 = topRecord.SubRecords["BOT2"]; + BOT3 = topRecord.SubRecords["BOT3"]; + BOT4 = topRecord.SubRecords["BOT1"]; + BOT5 = topRecord.SubRecords["BOT2"]; + BOT6= topRecord.SubRecords["BOT3"]; + TJ = topRecord.SubRecords["TJ"]; + //label11.Text = tmpVolum.ToString(); + //label12.Text = tmpArea.ToString();// + + string volumStatus; + string areaStatus; + string volumStatus1; + string areaStatus1; + string volumStatus2; + string areaStatus2; + string volumStatus3; + string areaStatus3; + string resultStatus; + int modbusResult; + double dj = 1.0; + double qx = 1.0; + double dw = 1.0; + double volum1 = (double)tmpVolum1.Content; + double area1 = (double)tmpArea1.Content; + double volum2 = (double)tmpVolum2.Content; + double area2 = (double)tmpArea2.Content; + double volum3 = (double)tmpVolum3.Content; + double area3 = (double)tmpArea3.Content; + double top1 = (double)TOP1.Content; + double top2 = (double)TOP2.Content; + double top3 = (double)TOP3.Content; + double top4 = (double)TOP1.Content; + double top5 = (double)TOP2.Content; + double top6 = (double)TOP3.Content; + double topmj = (double)TOP2.Content*(double)TOP3.Content; + double bot1 = (double)BOT1.Content; + double bot2 = (double)BOT2.Content; + double bot3 = (double)BOT3.Content; + double bot4 = (double)BOT4.Content; + double bot5 = (double)BOT5.Content; + double bot6 = (double)BOT6.Content; + double botmj = (double)BOT1.Content * (double)BOT3.Content; + //算体积 + double bdktj = (double)TJ.Content-3800;// 0.333333 *20*(topmj+botmj+3200); + //string dj = DJCJ.ToString(); + if (checkBox3.Checked) + { + dj = (double)DJJC.Content; + } + if (checkBox4.Checked) + { + qx = (double)QX.Content; + } + dw = (double)DW.Content; + //定义12个阈值参数 + string CSV1max; + string CSV1min; + string CSA1max; + string CSA1min; + string CSV2max; + string CSV2min; + string CSA2max; + string CSA2min; + string CSV3max; + string CSV3min; + string CSA3max; + string CSA3min; + string BdYZ; + //这里要分别判断,程序不报错时 + //使用阈值 + + try + {string used=label81.Text; + string usePath= Path.Combine(@"D:\", $"{used}.txt"); + if (File.Exists(usePath)) + { + string[] lines = File.ReadAllLines(usePath); // 读取所有行[^1] + CSV1max = lines[0]; // 第一行数据 + CSV1min = lines[1]; // 第二行数据 + CSA1max = lines[2]; // 第三行数据 + CSA1min = lines[3]; // + CSV2max = lines[4]; // + CSV2min = lines[5]; // + CSA2max = lines[6]; // + CSA2min = lines[7]; // + CSV3max = lines[8]; + CSV3min = lines[9]; + CSA3max = lines[10]; + CSA3min = lines[11]; + BdYZ = lines[12]; + if (checkBox2.Checked) + { + csv1max = Convert.ToInt32(CSV1max); + csv1min = Convert.ToInt32(CSV1min); + csa1max = Convert.ToInt32(CSA1max); + csa1min = Convert.ToInt32(CSA1min); + csv2max = Convert.ToInt32(CSV2max); + csv2min = Convert.ToInt32(CSV2min); + csa2max = Convert.ToInt32(CSA2max); + csa2min = Convert.ToInt32(CSA2min); + csv3max = Convert.ToInt32(CSV3max); + csv3min = Convert.ToInt32(CSV3min); + csa3max = Convert.ToInt32(CSA3max); + csa3min = Convert.ToInt32(CSA3min); + bdyz= Convert.ToInt32(BdYZ); + TOPMJMin = 1600 * ((100 - bdyz) * 0.01); + TOPMJMax = 1600 * ((100 + bdyz) * 0.01); + BOTMJMin = 6400 * ((100 - bdyz) * 0.01); + BOTMJMax = 6400 * ((100 + bdyz) * 0.01); + TOP1Min = 40 * ((100 - bdyz) * 0.01); + TOP1Max = 40 * ((100+ bdyz) * 0.01); + TOP2Min = 40 * ((100 - bdyz) * 0.01); + TOP2Max = 40 * ((100 + bdyz) * 0.01); + TOP3Min = 40 * ((100 - bdyz) * 0.01); + TOP3Max = 40 * ((100 + bdyz) * 0.01); + TOP4Min = 40 * ((100 - bdyz) * 0.01); + TOP4Max = 40 * ((100 + bdyz) * 0.01); + TOP5Min = 40 * ((100 - bdyz) * 0.01); + TOP5Max = 40 * ((100 + bdyz) * 0.01); + TOP6Min = 40 * ((100 - bdyz) * 0.01); + TOP6Max = 40 * ((100 + bdyz) * 0.01); + BOT1Min = 80 * ((100 - bdyz) * 0.01); + BOT1Max = 80 * ((100 + bdyz) * 0.01); + BOT2Min = 80 * ((100 - bdyz) * 0.01); + BOT2Max = 80 * ((100 + bdyz) * 0.01); + BOT3Min = 80 * ((100 - bdyz) * 0.01); + BOT3Max = 80 * ((100 + bdyz) * 0.01); + BOT4Min = 80 * ((100 - bdyz) * 0.01); + BOT4Max = 80 * ((100 + bdyz) * 0.01); + BOT5Min = 80 * ((100 - bdyz) * 0.01); + BOT5Max = 80 * ((100 + bdyz) * 0.01); + BOT6Min = 80 * ((100 - bdyz) * 0.01); + BOT6Max = 80 * ((100 + bdyz) * 0.01); + BDKTJMin =74000; + BDKTJMax = 75000; + } + if (checkBox5.Checked) + { + + label64.Text = BDKTJMin.ToString() + "~" + BDKTJMax.ToString() + "mm³"; + } + if (checkBox2.Checked== false) + { + csv1max = 999999; + csv1min = 0; //700 + csa1max = 999999; + csa1min = 0; //200 + csv2max = 999999; + csv2min = 0; //100 + csa2max = 999999; + csa2min = 0; //80 + csv3max = 999999; + csv3min = 0; //50 + csa3max = 999999; + csa3min = 0; //20 + bdyz = Convert.ToInt32(BdYZ); + label64.Text = "74000~75000mm³"; + } + } + else + { + MessageBox.Show("文件不存在!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + + } + if (volum1 > csv1min && volum1 < csv1max&& dw < 3&& dj < 2 && dw < 3) + { + volumStatus1 = "OK"; + } + else + { + volumStatus1 = "NG"; + + } + if (volum2 > csv2min && volum2 < csv2max) + { + volumStatus2 = "OK"; + } + else + { + volumStatus2 = "NG"; + + } + if (volum3 > csv3min && volum3 < csv3max) + { + volumStatus3 = "OK"; + } + else + { + volumStatus3 = "NG"; + + } + if (area1 > csa1min && area1 < csa1max&& dw < 2&& dj <2) + { + areaStatus1 = "OK"; + } + else + { + areaStatus1 = "NG"; + } + if (area2 > csa2min && area2 < csa2max) + { + areaStatus2 = "OK"; + } + else + { + areaStatus2 = "NG"; + } + if (area3 > csa3min && area3 < csa3max) + { + areaStatus3 = "OK"; + } + else + { + areaStatus3 = "NG"; + } + + if (dw > 1) + { + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "断胶了,请注意检查!!!!")); + } + resultStatus = "NG"; + modbusResult = 2; + } + if (volumStatus1 == "OK" && areaStatus1 == "OK" && volumStatus2 == "OK" && areaStatus2 == "OK" && volumStatus3 == "OK" && areaStatus3 == "OK" && dj < 2 && qx < 2) + { + resultStatus = "OK"; + modbusResult = 1; + okNum++; + } + else if (dj > 1) + { + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "断胶了,请注意检查!!!!")); + label34.BackColor = Color.Red; + } + resultStatus = "NG"; + modbusResult = 2; + + } + else if (qx > 1) + { + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "断胶了,请注意检查!!!!")); + label34.BackColor = Color.Red; + } + resultStatus = "NG"; + modbusResult = 2; + + } + else + { + resultStatus = "NG"; + modbusResult = 2; //先观察数据,别忘记改2ng + ngNum++; + } + CogImage16Range mImage = cogRecordDisplay1.Record.Content as CogImage16Range; + string result = $"{volum1:F2},{area1:F2},{resultStatus}"; + ; + + if (lbl_Volume1.InvokeRequired) + { + lbl_Volume1.Invoke(new Action(() => lbl_Volume1.Text = volum1.ToString("0.00" + "mm³"))); + } + if (lbl_Area1.InvokeRequired) + { + lbl_Area1.Invoke(new Action(() => lbl_Area1.Text = area1.ToString("0.00" + "mm²"))); + } + if (lbl_Volume2.InvokeRequired) + { + lbl_Volume2.Invoke(new Action(() => lbl_Volume2.Text = volum2.ToString("0.00" + "mm³"))); + } + if (lbl_Area2.InvokeRequired) + { + lbl_Area2.Invoke(new Action(() => lbl_Area2.Text = area2.ToString("0.00" + "mm²"))); + } + if (lbl_Volume3.InvokeRequired) + { + lbl_Volume3.Invoke(new Action(() => lbl_Volume3.Text = volum3.ToString("0.00" + "mm³"))); + } + if (lbl_Area3.InvokeRequired) + { + lbl_Area3.Invoke(new Action(() => lbl_Area3.Text = area3.ToString("0.00" + "mm²"))); + } + + if (label54.InvokeRequired && myToolBlock2.RunStatus.Result == CogToolResultConstants.Accept) + { + label54.Invoke(new Action(() => label54.Text = bdktj.ToString("0.00" + "mm³"))); + if (bdktj > 74770 && bdktj < 75008 ) + { + label80.Invoke(new Action(() => label80.Text = ("OK"))); + label80.Invoke(new Action(() => label80.BackColor = Color.Green)); + } + else + { + label80.Invoke(new Action(() => label80.Text = ("NG"))); + label80.Invoke(new Action(() => label80.BackColor = Color.Red)); + } + } + else + { + label54.Invoke(new Action(() => label54.Text = "0.00" + "mm²")); + label80.Invoke(new Action(() => label80.Text = ("NG"))); + label80.Invoke(new Action(() => label80.BackColor = Color.Red)); + } + + if (volumStatus1 == "OK") + { + if (lbl_Volume1Status.InvokeRequired) + { + lbl_Volume1Status.Invoke(new Action(() => lbl_Volume1Status.Text = "合格")); + lbl_Volume1Status.BackColor = Color.Green; + } + } + else + { + if (lbl_Volume1Status.InvokeRequired) + { + lbl_Volume1Status.Invoke(new Action(() => lbl_Volume1Status.Text = "不合格")); + lbl_Volume1Status.BackColor = Color.Red; + label34.BackColor = Color.Red; + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "位置1体积检测超限!!!!")); + } + } + } + if (volumStatus2 == "OK") + { + if (lbl_Volume2Status.InvokeRequired) + { + lbl_Volume2Status.Invoke(new Action(() => lbl_Volume2Status.Text = "合格")); + lbl_Volume2Status.BackColor = Color.Green; + } + } + else + { + if (lbl_Volume2Status.InvokeRequired) + { + lbl_Volume2Status.Invoke(new Action(() => lbl_Volume2Status.Text = "不合格")); + lbl_Volume2Status.BackColor = Color.Red; + label34.BackColor = Color.Red; + } + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "位置2体积检测超限!!!!")); + } + } + if (volumStatus3 == "OK") + { + if (lbl_Volume3Status.InvokeRequired) + { + lbl_Volume3Status.Invoke(new Action(() => lbl_Volume3Status.Text = "合格")); + lbl_Volume3Status.BackColor = Color.Green; + GC.Collect(); + } + } + else + { + if (lbl_Volume3Status.InvokeRequired) + { + lbl_Volume3Status.Invoke(new Action(() => lbl_Volume3Status.Text = "不合格")); + lbl_Volume3Status.BackColor = Color.Red; + label34.BackColor = Color.Red; + } + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "位置3体积检测超限!!!!")); + } + } + if (areaStatus1 == "OK") + { + if (lbl_Area1Status.InvokeRequired) + { + lbl_Area1Status.Invoke(new Action(() => lbl_Area1Status.Text = "合格")); + lbl_Area1Status.BackColor = Color.Green; + } + } + else + { + if (lbl_Area1Status.InvokeRequired) + { + lbl_Area1Status.Invoke(new Action(() => lbl_Area1Status.Text = "不合格")); + lbl_Area1Status.BackColor = Color.Red; + label34.BackColor = Color.Red; + } + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "位置1面积检测超限!!!!")); + } + } + if (areaStatus2 == "OK") + { + if (lbl_Area2Status.InvokeRequired) + { + lbl_Area2Status.Invoke(new Action(() => lbl_Area2Status.Text = "合格")); + lbl_Area2Status.BackColor = Color.Green; + } + } + else + { + if (lbl_Area2Status.InvokeRequired) + { + lbl_Area2Status.Invoke(new Action(() => lbl_Area2Status.Text = "不合格")); + lbl_Area2Status.BackColor = Color.Red; + label34.BackColor = Color.Red; + } + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "位置2面积检测超限!!!!")); + } + } + if (areaStatus3 == "OK") + { + if (lbl_Area3Status.InvokeRequired) + { + lbl_Area3Status.Invoke(new Action(() => lbl_Area3Status.Text = "合格")); + lbl_Area3Status.BackColor = Color.Green; + } + } + else + { + if (lbl_Area3Status.InvokeRequired) + { + lbl_Area3Status.Invoke(new Action(() => lbl_Area3Status.Text = "不合格")); + lbl_Area3Status.BackColor = Color.Red; + label34.BackColor = Color.Red; + } + if (label34.InvokeRequired) + { + label34.Invoke(new Action(() => label34.Text = "位置3面积检测超限!!!!")); + } + } + if (lbl_CheckNum.InvokeRequired) + { + lbl_CheckNum.Invoke(new Action(() => lbl_CheckNum.Text = (okNum + ngNum).ToString())); + lbl_CheckNum.Invoke(new Action(() => label11.Text = okNum.ToString())); + lbl_CheckNum.Invoke(new Action(() => label14.Text = ngNum.ToString())); + double zs = Double.Parse((okNum + ngNum).ToString()); + double OKs = Double.Parse(okNum.ToString()); + lbl_CheckNum.Invoke(new Action(() => lbl_OkRate.Text = (OKs / zs).ToString("0.00%"))); + + } + modbusClient.WriteSingleRegister("4", (short)modbusResult);//ModbusResult + modbusClient.WriteSingleRegisterString("31", "11" + imageSavePath); //存图路径 + string Area1 = area1.ToString("0.00"); + string Volume1 = volum1.ToString("0.00"); + string Area2 = area2.ToString("0.00"); + string Volume2 = volum2.ToString("0.00"); + string Area3 = area3.ToString("0.00"); + string Volume3 = volum3.ToString("0.00"); + //要分组发送三次结果 + modbusClient.WriteSingleRegisterString("72", "11" + Area1);//区域1面积 + modbusClient.WriteSingleRegisterString("78", "11" + Volume1);//区域1体积 + modbusClient.WriteSingleRegisterString("84", "11" + Area2);//区域2面积 + modbusClient.WriteSingleRegisterString("90", "11" + Volume2);//区域2体积 + modbusClient.WriteSingleRegisterString("96", "11" + Area3);//区域3面积 + modbusClient.WriteSingleRegisterString("102", "11" + Volume3);//区域3体积 + + if (ProductSN == null) + { + s = "123"; + } + else { s = ProductSN.Substring(2); } + //string s = ProductSN.Substring(2); + + Excel.Application excelApp = null; + Excel.Workbook workbook = null; + Excel.Worksheet worksheet = null; + string dateFileName = DateTime.Now.ToString("yyyy-MM-dd") + ".xlsx"; + string bddateFileName = "bd" + DateTime.Now.ToString("yyyy-MM-dd") + ".xlsx"; + string excelPath = Path.Combine(rootPath, dateFileName); + string bdexcelPath = Path.Combine(rootPath, bddateFileName); + //CaptureSelfForm(this,savePath); + bool isNewFile = !File.Exists(excelPath); + if (checkBox5.Checked==false) + { + try + { + excelApp = new Excel.Application(); + excelApp.Visible = false; + excelApp.DisplayAlerts = false; + if (isNewFile) + { + workbook = excelApp.Workbooks.Add(); + worksheet = (Excel.Worksheet)workbook.Worksheets[1]; + worksheet.Name = "每日数据"; + worksheet.Cells[1, 1] = "记录时间"; + worksheet.Cells[1, 2] = "产品SN"; + worksheet.Cells[1, 3] = "位置1体积"; + worksheet.Cells[1, 4] = "位置1面积"; + worksheet.Cells[1, 5] = "位置2体积"; + worksheet.Cells[1, 6] = "位置2面积"; + worksheet.Cells[1, 7] = "位置3体积"; + worksheet.Cells[1, 8] = "位置3面积"; + worksheet.Range["A1:H1"].Font.Bold = true; + } + else + { + workbook = excelApp.Workbooks.Open(excelPath); + worksheet = (Excel.Worksheet)workbook.Worksheets["每日数据"]; + } + int lastRow = worksheet.UsedRange.Rows.Count + 1; + if (isNewFile) lastRow = 2; + worksheet.Cells[lastRow, 1] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + worksheet.Cells[lastRow, 2] = s; + worksheet.Cells[lastRow, 3] = volum1.ToString(); + worksheet.Cells[lastRow, 4] = area1.ToString(); + worksheet.Cells[lastRow, 5] = volum2.ToString(); + worksheet.Cells[lastRow, 6] = area2.ToString(); + worksheet.Cells[lastRow, 7] = volum3.ToString(); + worksheet.Cells[lastRow, 8] = area3.ToString(); + worksheet.Range["A:H"].EntireColumn.AutoFit(); + if (isNewFile) + { + workbook.SaveAs(excelPath); + } + else + { + workbook.Save(); + } + AddLog("数据写入成功", 1); + } + + catch (Exception ex) { AddLog("数据写入成功", 1); ; } + finally + { + if (workbook != null) { workbook.Close(); + System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); + } + if (excelApp != null) + { excelApp.Quit(); + System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); + } + worksheet = null; + workbook = null; + excelApp = null; + GC.Collect(); + GC.WaitForPendingFinalizers(); + } + } + bool isbdNewFile = !File.Exists(bdexcelPath); + if (checkBox5.Checked==true) { + try + { + excelApp = new Excel.Application(); + excelApp.Visible = false; + excelApp.DisplayAlerts = false; + if (isbdNewFile) + { + workbook = excelApp.Workbooks.Add(); + worksheet = (Excel.Worksheet)workbook.Worksheets[1]; + worksheet.Name = "标定数据"; + worksheet.Cells[1, 1] = "记录时间"; + worksheet.Cells[1, 2] = "标定块顶部面积"; + worksheet.Cells[1, 3] = "标定块底部面积"; + worksheet.Cells[1, 4] = "标定块顶部位置1宽度"; + worksheet.Cells[1, 5] = "标定块顶部位置2宽度"; + worksheet.Cells[1, 6] = "标定块顶部位置3宽度"; + worksheet.Cells[1, 7] = "标定块顶部位置4宽度"; + worksheet.Cells[1, 8] = "标定块顶部位置5宽度"; + worksheet.Cells[1, 9] = "标定块顶部位置6宽度"; + worksheet.Cells[1, 10] = "标定块底部位置1宽度"; + worksheet.Cells[1, 11] = "标定块底部位置2宽度"; + worksheet.Cells[1, 12] = "标定块底部位置3宽度"; + worksheet.Cells[1, 13] = "标定块底部位置4宽度"; + worksheet.Cells[1, 14] = "标定块底部位置5宽度"; + worksheet.Cells[1, 15] = "标定块底部位置6宽度"; + worksheet.Cells[1, 16] = "标定块整体体积"; + worksheet.Range["A1:P1"].Font.Bold = true; + } + else + { + workbook = excelApp.Workbooks.Open(bdexcelPath); + worksheet = (Excel.Worksheet)workbook.Worksheets["标定数据"]; + } + int lastRow = worksheet.UsedRange.Rows.Count + 1; + if (isNewFile) lastRow = 2; + worksheet.Cells[lastRow, 1] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + worksheet.Cells[lastRow, 2] = topmj.ToString(); + worksheet.Cells[lastRow, 3] = botmj.ToString(); + worksheet.Cells[lastRow, 4] = top1.ToString(); + worksheet.Cells[lastRow, 5] = top2.ToString(); + worksheet.Cells[lastRow, 6] = top3.ToString(); + worksheet.Cells[lastRow, 7] = top4.ToString(); + worksheet.Cells[lastRow, 8] = top5.ToString(); + worksheet.Cells[lastRow, 9] = top6.ToString(); + worksheet.Cells[lastRow, 10] = bot1.ToString(); + worksheet.Cells[lastRow, 11] = bot2.ToString(); + worksheet.Cells[lastRow, 12] = bot3.ToString(); + worksheet.Cells[lastRow, 13] = bot4.ToString(); + worksheet.Cells[lastRow, 14] = bot5.ToString(); + worksheet.Cells[lastRow, 15] = bot6.ToString(); + worksheet.Cells[lastRow, 16] = bdktj.ToString(); + worksheet.Range["A:P"].EntireColumn.AutoFit(); + if (isbdNewFile) + { + workbook.SaveAs(bdexcelPath); + } + else + { + workbook.Save(); + } + AddLog("数据写入成功", 1); + } + + catch (Exception ex) { AddLog("数据写入成功", 1); ; } + finally + { + if (workbook != null) + { + workbook.Close(); + System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); + } + if (excelApp != null) + { + excelApp.Quit(); + System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); + } + worksheet = null; + workbook = null; + excelApp = null; + GC.Collect(); + GC.WaitForPendingFinalizers(); + } + } + + } + + + /// + /// 客户端发送 + /// + /// + private void CaptureSelfForm(Form1 form,string savePath) + { + using (Bitmap bmp = new Bitmap(form.Width, form.Height)) + { + //form.DrawToBitmap(bmp, new Rectangle(0, 0, form.Width, form.Height)); + bmp.Save(savePath,ImageFormat.Png); + } + } + private async void ClientSend(string datastr) + { + try + { + if (!myTcp.IsConnected) + { + AddLog("未连接到服务器/客户端,请先配置通讯", 1); + return; + } + + string message = datastr; + if (string.IsNullOrEmpty(message)) + { + AddLog("发送内容不能为空", 1); + return; + } + + byte[] data = Encoding.UTF8.GetBytes(message); + await myTcp.SendAsync(data); + AddLog($"已发送数据: {message}", 0); + } + catch (Exception ex) + { + AddLog($"发送失败: {ex.Message}", 2); + } + } + /// + /// 服务器发送 + /// + /// + private async void ServerSend(string datastr) + { + try + { + if (string.IsNullOrEmpty(datastr)) + { + AddLog("广播内容不能为空", 1); + return; + } + + byte[] data = Encoding.UTF8.GetBytes(datastr); + await myTcp.BroadcastAsync(data); + AddLog($"已广播: {datastr}", 0); + } + catch (Exception ex) + { + AddLog($"广播失败: {ex.Message}", 2); + } + } + /// + /// 自动按钮 + /// + /// + /// + private void btn_Auto_Click(object sender, System.EventArgs e) + { + + //显示部分 + if (this.btn_Auto.Text == "自动模式") + { + this.btn_Auto.Text = "离线"; + this.btn_Auto.BackColor = Color.Red; + this.btn_ManulTrigger.Enabled = true; + + AddLog("切换为离线模式", 0); + } + else + { + this.btn_Auto.Text = "自动模式"; + this.btn_Auto.BackColor = Color.YellowGreen; + this.btn_ManulTrigger.Enabled = false; + AddLog("切换为自动模式", 0); + } + } + /// + /// 手动按钮 + /// + /// + /// + private void btn_ManulTrigger_Click(object sender, EventArgs e) + { + myJobManager.Run(); + + myToolBlock2.Run(); + + button1State = true; + AddLog("手动运行", 0); + } + /// + /// 日志清除按钮 + /// + /// + /// + private void 清除ToolStripMenuItem_Click(object sender, EventArgs e) + { + this.lvw_Log.Items.Clear(); + } + /// + /// 通讯设置按钮 + /// + /// + /// + private void 通讯设置ToolStripMenuItem_Click(object sender, EventArgs e) + { + FormCommunication formCommunication = new FormCommunication(); + formCommunication.ShowDialog(); + } + /// + /// 实时LOG + /// + /// 日志内容 + /// 图片序号 + public void AddLog(string log, int index) + { + if (lvw_Log.InvokeRequired) + { + lvw_Log.Invoke(new Action(() => AddLog(log, index))); + return; + } + + ListViewItem list = new ListViewItem(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), index); + list.SubItems.Add(log); + lvw_Log.Items.Add(list); + lvw_Log.Items[lvw_Log.Items.Count - 1].EnsureVisible(); + } + private void Label数据重置() + { + lbl_Volume1.Text = "0"; + lbl_Area1.Text = "0"; + lbl_Volume2.Text = "0"; + lbl_Area2.Text = "0"; + lbl_Volume3.Text = "0"; + lbl_Area3.Text = "0"; + lbl_Volume1Status.Text = "待检测"; + lbl_Area1Status.Text = "待检测"; + lbl_Volume2Status.Text = "待检测"; + lbl_Area2Status.Text = "待检测"; + lbl_Volume3Status.Text = "待检测"; + lbl_Area3Status.Text = "待检测"; + lbl_CheckNum.Text = "0"; + + label54.Text = "0" + "mm³"; + + + okNum = 0; + ngNum = 0; + lbl_OkRate.Text = "100%"; + } + #region S7通讯 + /// + /// 连接PLC + /// + /// IP + /// PLC型号 + /// 机架号 + /// 槽号 + public void ConnectPLC(string IP, CpuType cpuType, short rack, short slot) + { + plc = new Plc(CpuType.S71500, IP, rack, slot); + plc.Open(); + if (plc.IsConnected) + { + AddLog("PLC连接成功", 0); + } + } + #endregion + #region 事件处理方法 + private void MyTcp_ClientDisconnected(object sender, string e) + { + AddLog("Tcp客户端已断开", 0); + } + + private void MyTcp_ClientConnected(object sender, ClientConnectedEventArgs e) + { + AddLog("Tcp客户端已连接", 0); + } + + private void MyTcp_DataReceived(object sender, DataReceivedEventArgs e) + { + ///TCP通讯,用不到 + try + { + AddLog($"收到来自 {e.ClientId} 的数据: {Encoding.UTF8.GetString(e.Data)}", 0); + + string reciveData = Encoding.UTF8.GetString(e.Data); + string[] datas = reciveData.Split(','); + if (datas.Length == 3) + { + string triggerSingle = datas[0]; + string productSN = datas[1]; + string productNum = datas[2]; + if (!string.IsNullOrEmpty(triggerSingle) && !string.IsNullOrEmpty(productSN) && !string.IsNullOrEmpty(productNum)) + { + if (triggerSingle == "trigger") + { + if (btn_ManulTrigger.Enabled == false) + { + myJobManager.Run(); + myJob.Run(); + } + else + { + AddLog("程序已离线", 0); + } + + } + if (triggerSingle == "Trigger") + { + if (btn_ManulTrigger.Enabled == false) + { + myJobManager.Run(); + + } + else + { + AddLog("程序已离线", 0); + } + } + } + } + else + { + AddLog("数据格式错误", 1); + } + } + catch (Exception ex) + { + AddLog(ex.Message, 2); + } + } + #endregion + //千万别点 + private void btn_LoadImage_Click(object sender, EventArgs e) + { + + } + /// + /// 登录权限 + /// + /// + /// + public void SetMainEnabled(int status, string account) + { + currentStatus = status; // 更新当前状态 + switch (status) + { + case 0: + formLogin.Close(); + this.登录ToolStripMenuItem1.Enabled = true; + this.文件ToolStripMenuItem.Enabled = false; + this.切换配方ToolStripMenuItem.Enabled = false; + this.设置ToolStripMenuItem.Enabled = false; + this.登录ToolStripMenuItem1.Enabled = true; + this.登录ToolStripMenuItem1.Text = "登录"; + this.退出登录ToolStripMenuItem.Enabled = false; + this.btn_Auto.Enabled = false; + inactivityTimer.Stop(); + break; + case 1: + this.登录ToolStripMenuItem.Enabled = true; + this.登录ToolStripMenuItem.Text = account; + this.文件ToolStripMenuItem.Enabled = false; + this.切换配方ToolStripMenuItem.Enabled = true; + this.设置ToolStripMenuItem.Enabled = false; + this.登录ToolStripMenuItem1.Enabled = false; + this.登录ToolStripMenuItem1.Text = "登录"; + this.btn_Auto.Enabled = false; + this.退出登录ToolStripMenuItem.Enabled = true; + break; + case 2: + this.登录ToolStripMenuItem.Enabled = true; + this.登录ToolStripMenuItem1.Enabled = true; + this.登录ToolStripMenuItem1.Text = account; + this.文件ToolStripMenuItem.Enabled = true; + this.切换配方ToolStripMenuItem.Enabled = true; + this.设置ToolStripMenuItem.Enabled = true; + this.退出登录ToolStripMenuItem.Enabled = true; + this.登录ToolStripMenuItem1.Enabled = false; + this.btn_Auto.Enabled = false; + this.退出登录ToolStripMenuItem.Enabled = true; + break; + case 3: + this.登录ToolStripMenuItem.Enabled = true; + this.登录ToolStripMenuItem1.Enabled = true; + this.登录ToolStripMenuItem1.Text = account; + this.文件ToolStripMenuItem.Enabled = true; + this.切换配方ToolStripMenuItem.Enabled = true; + this.设置ToolStripMenuItem.Enabled = true; + this.退出登录ToolStripMenuItem.Enabled = true; + this.登录ToolStripMenuItem1.Enabled = false; + this.退出登录ToolStripMenuItem.Enabled = true; + this.btn_Auto.Enabled = true; + inactivityTimer.Start(); + break; + } + } + + private void 登录ToolStripMenuItem_Click(object sender, EventArgs e) + { + formLogin = new FormLogin(this); + formLogin.ShowDialog(); + } + + private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) + { + SetMainEnabled(0, "登录"); + } + protected override void OnFormClosed(FormClosedEventArgs e) + { + Application.RemoveMessageFilter(messageFilter); + base.OnFormClosed(e); + } + private async Task Tcp自动重连() + { + while (_autoTcpReconnect) + { + try + { + + if (Properties.Settings.Default.TcpIP != "" && Properties.Settings.Default.TcpProt != "" && Properties.Settings.Default.TcpStatus == "Client") + { + await myTcp.ConnectAsync(Properties.Settings.Default.TcpIP, int.Parse(Properties.Settings.Default.TcpProt)); + return; + } + else if (Properties.Settings.Default.TcpProt != "" && Properties.Settings.Default.TcpStatus == "Server") + { + + await myTcp.StartServerAsync(int.Parse(Properties.Settings.Default.TcpProt)); + return; + } + else + { + AddLog("Tcp取消自动重连", 0); + return; + } + } + catch (Exception ex) + { + AddLog($"连接失败: {ex.Message}", 2); + if (!ShowConfigDialog() && !myTcp.IsConnected) + { + _autoTcpReconnect = false; + AddLog("用户取消连接,退出自动重连", 1); + return; + } + } + await Task.Delay(2000); + } + } + + private bool ShowConfigDialog() + { + FormCommunication formCommunication = new FormCommunication(); + formCommunication.ShowDialog(); + if (formCommunication.DialogResult == DialogResult.OK) + { + return true; + } + return false; + } + + private void 打开QuickBuildToolStripMenuItem_Click(object sender, EventArgs e) + { + FormVPP formVpp = new FormVPP(); + formVpp.ShowDialog(); + } + + private void 保存QuickBuildToolStripMenuItem_Click(object sender, EventArgs e) + { + CogSerializer.SaveObjectToFile(myJobManager, @"D:\OP30\Vpp\30.vpp"); + } + + + + private void 参数设置ToolStripMenuItem_Click(object sender, EventArgs e) + { + FormSetParameter f2 = new FormSetParameter(); + + f2.ShowDialog(); + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + + } + + private void checkBox2_CheckedChanged(object sender, EventArgs e) + { + if (MessageBox.Show("是否选择关闭阈值判定!!!!", "Confirm Message", MessageBoxButtons.OKCancel) == DialogResult.OK) + { + checkBox2.Checked = false; + } + + } + + private void button1_Click(object sender, EventArgs e) + { + okNum = 0; + ngNum = 0; + lbl_CheckNum.Text = "0"; + label11.Text = "0"; + label14.Text = "0"; + lbl_OkRate.Text = "0"; + } + + private void button2_Click(object sender, EventArgs e) + { + modbusClient.WriteSingleRegister("4", (short)0); + } + + private void 切换配方ToolStripMenuItem_Click(object sender, EventArgs e) + { + FormCheck f3 = new FormCheck(); + f3.TextBoxValueChanged += (receivedValue) => + { + label81.Text = receivedValue.ToString(); + CSPath= Path.Combine(@"D:\", $"{label81.Text}.txt"); + }; + f3.ShowDialog(); + } + + private void checkBox5_CheckedChanged(object sender, EventArgs e) + { + + } + + private void label11_Click(object sender, EventArgs e) + { + + } + } + /// + /// 鼠标移动事件 + /// + public class MyMessageFilter : IMessageFilter + { + public event EventHandler ActivityDetected; + + public bool PreFilterMessage(ref Message m) + { + // 检测的Windows消息类型 ID + switch (m.Msg) + { + case 0x0200: // WM_MOUSEMOVE 鼠标移动事件 + case 0x0201: // WM_LBUTTONDOWN 鼠标左键按下事件 + case 0x0204: // WM_RBUTTONDOWN 鼠标右键按下事件 + case 0x0207: // WM_MBUTTONDOWN 鼠标中键按下事件 + case 0x0100: // WM_KEYDOWN 按键按下事件 + ActivityDetected?.Invoke(this, EventArgs.Empty); + break; + } + return false; // 允许消息继续传递 + } + } +} + diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.resx b/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.resx new file mode 100644 index 0000000..6456ef5 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.resx @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + 252, 17 + + + 137, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAw + CQAAAk1TRnQBSQFMAgEBAwEAAUABAgFAAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wkAAfQcAAdGGQAH1AUA + DzIDAAtGFQAB/wnUBAACMgteATIBUwIADUYUAAvUBAABMgteATIDAA1GEwAG1AHbBtQDAAIyBF4BTQRe + ATIBmgIABEYBAAVGAQAERhIABtQB/wbUBAABMgleATIDAARGARoBAANGAQAFRhEAAfMG1AH/BtQEAAGa + ATIDXgEyA14BMgH2AwAFRgGTAQABRgEABkYRAAHbBtQB/wbUAfQEAAEyA14BMgNeATIDAAdGAZMBAAdG + EQAB8w3UBgABMgJeATICXgEyBAAB/wZGAQABkwEABkYSAAbUAf8G1AYAATICXgFTAl4BMgUABUYBAAJG + AZMBAAVGEgAG1AH/BtQHAAEyA14BMgYABEYBAARGAZMBAARGEwAL1AgAATIBegFeAVkBMgYAAfINRhQA + ARkJ1AH/CQABMgFeATIIAA1GFgAH1AsAAzIJAAtGGQAB8wHbAfMOAAEyCwAB8gdGAf86AAH0AUYB/xYA + AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAH/AX8C/wH4AQ8CAAH4AQ8BgAEA + AeABAwIAAeABBwGAAQABwAEBAgAB4AEDAcABAQHAAQECAAHAAQEBwAEBAYQBEAIAAcABAQHgAQMBggEg + AgABgAEBAeABAwGBAUACAAGAAQAB8AEHAQABgAIAAYABAQH4AQ8BAQFAAgABwAEBAfgBDwGCASACAAHA + AQEB/AEfAYQBEAIAAeABAwH8AR8BgAEBAgAB4AEDAf4BPwHAAQECAAH4AQ8B/gE/AeABAwIAAf4BPwH/ + AX8B8AEHAgAE/wH+AT8CAAs= + + + + True + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACFTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5BeEhvc3QrU3RhdGUBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAtwAAAAIB + AAAAAQAAAAAAAAAAAAAAAKIAAAAAAQAAiRIAAH4bAAATAAAAAAALAP//CwD//wsA//8DAAAAAAADAAEA + AAAFAAAAAAAAAAAABQAAAAAAAAAAAAUAAAAAAAAA8D8TAAAA/wALAP//CwD//xMAAIAAAAMAAwAAAAsA + //8LAAAAAAAAAAAA4D8AAAAAAADgPwAAAAAAAOA/AAAAAAAA4D8BAAAAAQAAAAsA//8LAAAACwAAAAsA + //8L + + + + 17, 17 + + + 25 + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.Designer.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.Designer.cs new file mode 100644 index 0000000..9b44eb8 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.Designer.cs @@ -0,0 +1,416 @@ +namespace 精工涂胶检测项目 +{ + partial class FormSetParameter + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.txb_IP = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.textBox6 = new System.Windows.Forms.TextBox(); + this.textBox7 = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.textBox8 = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.textBox9 = new System.Windows.Forms.TextBox(); + this.textBox10 = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.textBox11 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.textBox12 = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // txb_IP + // + this.txb_IP.Location = new System.Drawing.Point(541, 48); + this.txb_IP.Margin = new System.Windows.Forms.Padding(5); + this.txb_IP.Name = "txb_IP"; + this.txb_IP.Size = new System.Drawing.Size(164, 30); + this.txb_IP.TabIndex = 4; + // + // label1 + // + this.label1.Font = new System.Drawing.Font("宋体", 15F); + this.label1.Location = new System.Drawing.Point(20, 35); + this.label1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(489, 47); + this.label1.TabIndex = 3; + this.label1.Text = "涂胶位置1体积上限:"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(541, 119); + this.textBox1.Margin = new System.Windows.Forms.Padding(5); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(164, 30); + this.textBox1.TabIndex = 6; + // + // label2 + // + this.label2.Font = new System.Drawing.Font("宋体", 15F); + this.label2.Location = new System.Drawing.Point(20, 119); + this.label2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(489, 47); + this.label2.TabIndex = 5; + this.label2.Text = "涂胶位置1体积下限:"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(541, 192); + this.textBox2.Margin = new System.Windows.Forms.Padding(5); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(164, 30); + this.textBox2.TabIndex = 8; + // + // label3 + // + this.label3.Font = new System.Drawing.Font("宋体", 15F); + this.label3.Location = new System.Drawing.Point(20, 205); + this.label3.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(480, 47); + this.label3.TabIndex = 7; + this.label3.Text = "涂胶位置2体积上限:"; + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(541, 276); + this.textBox3.Margin = new System.Windows.Forms.Padding(5); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(164, 30); + this.textBox3.TabIndex = 10; + // + // label4 + // + this.label4.Font = new System.Drawing.Font("宋体", 15F); + this.label4.Location = new System.Drawing.Point(20, 283); + this.label4.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(489, 47); + this.label4.TabIndex = 9; + this.label4.Text = "涂胶位置2体积下限:"; + // + // label5 + // + this.label5.Font = new System.Drawing.Font("宋体", 15F); + this.label5.Location = new System.Drawing.Point(20, 349); + this.label5.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(489, 47); + this.label5.TabIndex = 11; + this.label5.Text = "涂胶位置3体积上限:"; + // + // label6 + // + this.label6.Font = new System.Drawing.Font("宋体", 15F); + this.label6.Location = new System.Drawing.Point(20, 416); + this.label6.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(489, 47); + this.label6.TabIndex = 12; + this.label6.Text = "涂胶位置3体积下限:"; + // + // textBox4 + // + this.textBox4.Location = new System.Drawing.Point(541, 349); + this.textBox4.Margin = new System.Windows.Forms.Padding(5); + this.textBox4.Name = "textBox4"; + this.textBox4.Size = new System.Drawing.Size(164, 30); + this.textBox4.TabIndex = 13; + // + // textBox5 + // + this.textBox5.Location = new System.Drawing.Point(541, 416); + this.textBox5.Margin = new System.Windows.Forms.Padding(5); + this.textBox5.Name = "textBox5"; + this.textBox5.Size = new System.Drawing.Size(164, 30); + this.textBox5.TabIndex = 14; + // + // label7 + // + this.label7.Font = new System.Drawing.Font("宋体", 15F); + this.label7.Location = new System.Drawing.Point(895, 343); + this.label7.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(410, 47); + this.label7.TabIndex = 15; + this.label7.Text = "涂胶位置3面积上限:"; + // + // label8 + // + this.label8.Font = new System.Drawing.Font("宋体", 15F); + this.label8.Location = new System.Drawing.Point(895, 35); + this.label8.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(430, 47); + this.label8.TabIndex = 16; + this.label8.Text = "涂胶位置1面积上限:"; + // + // label9 + // + this.label9.Font = new System.Drawing.Font("宋体", 15F); + this.label9.Location = new System.Drawing.Point(895, 112); + this.label9.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(430, 47); + this.label9.TabIndex = 17; + this.label9.Text = "涂胶位置1面积下限:"; + // + // textBox6 + // + this.textBox6.Location = new System.Drawing.Point(1335, 48); + this.textBox6.Margin = new System.Windows.Forms.Padding(5); + this.textBox6.Name = "textBox6"; + this.textBox6.Size = new System.Drawing.Size(164, 30); + this.textBox6.TabIndex = 18; + // + // textBox7 + // + this.textBox7.Location = new System.Drawing.Point(1335, 119); + this.textBox7.Margin = new System.Windows.Forms.Padding(5); + this.textBox7.Name = "textBox7"; + this.textBox7.Size = new System.Drawing.Size(164, 30); + this.textBox7.TabIndex = 19; + // + // label10 + // + this.label10.Font = new System.Drawing.Font("宋体", 15F); + this.label10.Location = new System.Drawing.Point(895, 205); + this.label10.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(430, 47); + this.label10.TabIndex = 20; + this.label10.Text = "涂胶位置2面积上限:"; + // + // textBox8 + // + this.textBox8.Location = new System.Drawing.Point(1335, 205); + this.textBox8.Margin = new System.Windows.Forms.Padding(5); + this.textBox8.Name = "textBox8"; + this.textBox8.Size = new System.Drawing.Size(164, 30); + this.textBox8.TabIndex = 21; + // + // label11 + // + this.label11.Font = new System.Drawing.Font("宋体", 15F); + this.label11.Location = new System.Drawing.Point(895, 276); + this.label11.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(410, 47); + this.label11.TabIndex = 22; + this.label11.Text = "涂胶位置2面积下限:"; + // + // textBox9 + // + this.textBox9.Location = new System.Drawing.Point(1335, 283); + this.textBox9.Margin = new System.Windows.Forms.Padding(5); + this.textBox9.Name = "textBox9"; + this.textBox9.Size = new System.Drawing.Size(164, 30); + this.textBox9.TabIndex = 23; + // + // textBox10 + // + this.textBox10.Location = new System.Drawing.Point(1335, 349); + this.textBox10.Margin = new System.Windows.Forms.Padding(5); + this.textBox10.Name = "textBox10"; + this.textBox10.Size = new System.Drawing.Size(164, 30); + this.textBox10.TabIndex = 24; + // + // label12 + // + this.label12.Font = new System.Drawing.Font("宋体", 15F); + this.label12.Location = new System.Drawing.Point(895, 416); + this.label12.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(430, 47); + this.label12.TabIndex = 25; + this.label12.Text = "涂胶位置3面积下限:"; + // + // textBox11 + // + this.textBox11.Location = new System.Drawing.Point(1335, 429); + this.textBox11.Margin = new System.Windows.Forms.Padding(5); + this.textBox11.Name = "textBox11"; + this.textBox11.Size = new System.Drawing.Size(164, 30); + this.textBox11.TabIndex = 26; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(294, 615); + this.button1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(206, 69); + this.button1.TabIndex = 27; + this.button1.Text = "保存参数"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(864, 615); + this.button2.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(191, 69); + this.button2.TabIndex = 28; + this.button2.Text = "读取参数"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label13.Location = new System.Drawing.Point(235, 540); + this.label13.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(187, 25); + this.label13.TabIndex = 29; + this.label13.Text = "标定参数范围:"; + // + // textBox12 + // + this.textBox12.Location = new System.Drawing.Point(659, 540); + this.textBox12.Margin = new System.Windows.Forms.Padding(4); + this.textBox12.Name = "textBox12"; + this.textBox12.Size = new System.Drawing.Size(326, 30); + this.textBox12.TabIndex = 30; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(1015, 544); + this.label14.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(19, 20); + this.label14.TabIndex = 31; + this.label14.Text = "%"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(30, 9); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(109, 20); + this.label15.TabIndex = 32; + this.label15.Text = "产品型号:"; + // + // FormSetParameter + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1580, 749); + this.Controls.Add(this.label15); + this.Controls.Add(this.label14); + this.Controls.Add(this.textBox12); + this.Controls.Add(this.label13); + this.Controls.Add(this.button2); + this.Controls.Add(this.button1); + this.Controls.Add(this.textBox11); + this.Controls.Add(this.label12); + this.Controls.Add(this.textBox10); + this.Controls.Add(this.textBox9); + this.Controls.Add(this.label11); + this.Controls.Add(this.textBox8); + this.Controls.Add(this.label10); + this.Controls.Add(this.textBox7); + this.Controls.Add(this.textBox6); + this.Controls.Add(this.label9); + this.Controls.Add(this.label8); + this.Controls.Add(this.label7); + this.Controls.Add(this.textBox5); + this.Controls.Add(this.textBox4); + this.Controls.Add(this.label6); + this.Controls.Add(this.label5); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.label4); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label2); + this.Controls.Add(this.txb_IP); + this.Controls.Add(this.label1); + this.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Margin = new System.Windows.Forms.Padding(5); + this.Name = "FormSetParameter"; + this.Text = "参数设置"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox txb_IP; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox textBox6; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox textBox8; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox textBox9; + private System.Windows.Forms.TextBox textBox10; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox textBox11; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox textBox12; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.cs new file mode 100644 index 0000000..816acea --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.cs @@ -0,0 +1,97 @@ +using Microsoft.Office.Interop.Excel; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection.Emit; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace 精工涂胶检测项目 +{ + public partial class FormSetParameter : Form + { + int count = 3; + string CSPath="D:\\阈值参数.txt"; + string CS; + public FormSetParameter() + { + InitializeComponent(); + } + private string _receiveString; + public string ReceiveString + { + get => _receiveString; + set + { + _receiveString = value; + if (label15 != null) + { + label15.Text = _receiveString.ToString(); + CS = label15.Text; + CSPath = Path.Combine(@"D:\", $"{CS}.txt"); + } + + } + } + + + private void button1_Click(object sender, EventArgs e) + { + StreamWriter sw = new StreamWriter(CSPath); + sw.WriteLine(txb_IP.Text); + sw.WriteLine(textBox1.Text ); + sw.WriteLine(textBox6.Text ); + sw.WriteLine(textBox7.Text );//1位置 + sw.WriteLine(textBox2.Text); + sw.WriteLine(textBox3.Text ); + sw.WriteLine(textBox8.Text ); + sw.WriteLine(textBox9.Text );//2位置 + sw.WriteLine(textBox4.Text); + sw.WriteLine(textBox5.Text ); + sw.WriteLine(textBox10.Text ); + sw.WriteLine(textBox11.Text ); + sw.WriteLine(textBox12.Text); + sw.Flush(); //文件流 + sw.Close(); //最后要关闭写入状态 + } + + private void button2_Click(object sender, EventArgs e) + { + try + { + if (File.Exists(CSPath)) + { + string[] lines = File.ReadAllLines(CSPath); // 读取所有行[^1] + + if (lines.Length >= 1) txb_IP.Text = lines[0]; // 第一行数据 + if (lines.Length >= 2) textBox1.Text = lines[1]; // 第二行数据 + if (lines.Length >= 3) textBox6.Text = lines[2]; // 第三行数据 + if (lines.Length >= 4) textBox7.Text = lines[3]; // + if (lines.Length >= 5) textBox2.Text = lines[4]; // + if (lines.Length >= 6) textBox3.Text = lines[5]; // + if (lines.Length >= 7) textBox8.Text = lines[6]; // + if (lines.Length >= 8) textBox9.Text = lines[7]; // + if (lines.Length >= 9) textBox4.Text = lines[8]; + if (lines.Length >= 10) textBox5.Text = lines[9]; + if (lines.Length >= 11) textBox10.Text = lines[10]; + if (lines.Length >= 12) textBox11.Text = lines[11]; + if (lines.Length >= 13) textBox12.Text = lines[12]; + } + else + { + MessageBox.Show("文件不存在!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + catch (Exception ex) + { + MessageBox.Show($"发生错误:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.resx b/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.resx new file mode 100644 index 0000000..61bc649 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormSetParameter.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/StatusChecker.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/StatusChecker.cs new file mode 100644 index 0000000..4a73a51 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/StatusChecker.cs @@ -0,0 +1,6 @@ +namespace 精工涂胶检测项目 +{ + internal class StatusChecker + { + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/yuzhicanshu.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/yuzhicanshu.cs new file mode 100644 index 0000000..4946a65 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/yuzhicanshu.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace 精工涂胶检测项目.Form +{ + class yuzhicanshu + { + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/FormCheck.Designer.cs b/精工涂胶检测项目/精工涂胶检测项目/FormCheck.Designer.cs new file mode 100644 index 0000000..8f5ce59 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/FormCheck.Designer.cs @@ -0,0 +1,153 @@ +namespace 精工涂胶检测项目 +{ + partial class FormCheck + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(335, 257); + this.comboBox1.Margin = new System.Windows.Forms.Padding(4); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(371, 23); + this.comboBox1.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(93, 256); + this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(156, 20); + this.label1.TabIndex = 1; + this.label1.Text = "目前已有配方:"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(335, 329); + this.button1.Margin = new System.Windows.Forms.Padding(4); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(160, 47); + this.button1.TabIndex = 2; + this.button1.Text = "切换配方"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(93, 88); + this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(114, 20); + this.label2.TabIndex = 3; + this.label2.Text = "添加配方:"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(335, 83); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(371, 25); + this.textBox1.TabIndex = 4; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(339, 144); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(156, 41); + this.button2.TabIndex = 5; + this.button2.Text = "确定添加"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(561, 329); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(145, 47); + this.button3.TabIndex = 6; + this.button3.Text = "保存配方"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(539, 144); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(156, 41); + this.button4.TabIndex = 7; + this.button4.Text = "生成参数文件"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // FormCheck + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1128, 459); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label2); + this.Controls.Add(this.button1); + this.Controls.Add(this.label1); + this.Controls.Add(this.comboBox1); + this.Margin = new System.Windows.Forms.Padding(4); + this.Name = "FormCheck"; + this.Text = "切换配方"; + this.Load += new System.EventHandler(this.FormCheck_Load_1); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/FormCheck.cs b/精工涂胶检测项目/精工涂胶检测项目/FormCheck.cs new file mode 100644 index 0000000..88c50ff --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/FormCheck.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.IO; +using System; +using System.Threading; +using System.Threading.Tasks; +using System.Data; +using System.Text; +using System.Collections.Generic; +using Cognex.VisionPro; +using Cognex.VisionPro.QuickBuild; +using System.Drawing; +using System.Net.Sockets; +using System.Linq; +using System.Net; +using System.Runtime; +using Cognex.VisionPro.ToolBlock; +using Cognex.VisionPro.ToolGroup; +using Cognex.VisionPro3D; +using Cognex.VisionPro.ImageFile; +using Cognex.VisionPro.PMAlign; +using Cognex.VisionPro.CalibFix; +using S7.Net; +using Cognex.VisionPro.ImageProcessing; +using Timer = System.Windows.Forms.Timer; +using Newtonsoft.Json; + +namespace 精工涂胶检测项目 +{ + public partial class FormCheck : Form + { + private string _dateFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ComboBoxData.json"); + public Action TextBoxValueChanged; + private FormSetParameter _formSetParameter; + public FormCheck() + { + InitializeComponent(); + this.Load += FormCheck_Load; + //InitComponent(); + } + + //private void InitComponent() + //{ + // throw new NotImplementedException(); + //} + + private void FormCheck_Load(object sender, EventArgs e) + { + if (File.Exists(_dateFilePath)) + { + String jsonContent=File.ReadAllText(_dateFilePath); + var items = JsonConvert.DeserializeObject>(jsonContent); + if (items != null) + { + comboBox1.Items.AddRange(items.ToArray()); + } + } + } + + + + private void button1_Click(object sender, EventArgs e) + { + TextBoxValueChanged?.Invoke(comboBox1.Text); + _formSetParameter = new FormSetParameter(); + _formSetParameter.Show(); + _formSetParameter.ReceiveString = comboBox1.Text; + MessageBox.Show("切换作业完成"); + } + + private void button2_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(textBox1.Text)) + { + comboBox1.Items.Add(textBox1.Text); + + } + } + + private void button3_Click(object sender, EventArgs e) + { + var items=new List(); + foreach (var item in comboBox1.Items) + { + items.Add(item.ToString()); + } + string json=JsonConvert.SerializeObject(items,Formatting.Indented); + File.WriteAllText(_dateFilePath, json); + + } + + private void button4_Click(object sender, EventArgs e) + { + string fileName=textBox1.Text; + if (string.IsNullOrEmpty(fileName)) + { + MessageBox.Show("请先输入产品型号!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning); + return; + } + string filePath=Path.Combine(@"D:\",$"{fileName}.txt"); + try + { + using (File.Create(filePath)) { } + MessageBox.Show("生成参数文件完成"); + } + catch(Exception ex) + { + MessageBox.Show("未知错误!"); + } + } + + private void FormCheck_Load_1(object sender, EventArgs e) + { + + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/FormCheck.resx b/精工涂胶检测项目/精工涂胶检测项目/FormCheck.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/FormCheck.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/FormVPP.Designer.cs b/精工涂胶检测项目/精工涂胶检测项目/FormVPP.Designer.cs new file mode 100644 index 0000000..d5c6d0f --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/FormVPP.Designer.cs @@ -0,0 +1,62 @@ +namespace 精工涂胶检测项目 +{ + partial class FormVPP + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.cogJobManagerEdit1 = new Cognex.VisionPro.QuickBuild.CogJobManagerEdit(); + this.SuspendLayout(); + // + // cogJobManagerEdit1 + // + this.cogJobManagerEdit1.Dock = System.Windows.Forms.DockStyle.Fill; + this.cogJobManagerEdit1.Location = new System.Drawing.Point(0, 0); + this.cogJobManagerEdit1.Name = "cogJobManagerEdit1"; + this.cogJobManagerEdit1.ShowLocalizationTab = false; + this.cogJobManagerEdit1.Size = new System.Drawing.Size(882, 514); + this.cogJobManagerEdit1.Subject = null; + this.cogJobManagerEdit1.TabIndex = 0; + // + // FormVPP + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(882, 514); + this.Controls.Add(this.cogJobManagerEdit1); + this.Name = "FormVPP"; + this.Text = "FormVPP"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormVPP_FormClosed); + this.Load += new System.EventHandler(this.FormVPP_Load); + this.ResumeLayout(false); + + } + + #endregion + + private Cognex.VisionPro.QuickBuild.CogJobManagerEdit cogJobManagerEdit1; + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/FormVPP.cs b/精工涂胶检测项目/精工涂胶检测项目/FormVPP.cs new file mode 100644 index 0000000..42a8606 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/FormVPP.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace 精工涂胶检测项目 +{ + public partial class FormVPP : Form + { + public FormVPP() + { + InitializeComponent(); + } + + private void FormVPP_Load(object sender, EventArgs e) + { + var mainForm = Application.OpenForms.OfType().FirstOrDefault(); + if (mainForm == null) return; + cogJobManagerEdit1.Subject = mainForm.myJobManager; + } + + private void FormVPP_FormClosed(object sender, FormClosedEventArgs e) + { + var mainForm = Application.OpenForms.OfType().FirstOrDefault(); + if (mainForm == null) return; + mainForm.myJobManager = cogJobManagerEdit1.Subject; + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/FormVPP.resx b/精工涂胶检测项目/精工涂胶检测项目/FormVPP.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/FormVPP.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.Designer.cs b/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.Designer.cs new file mode 100644 index 0000000..94655b0 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.Designer.cs @@ -0,0 +1,75 @@ +namespace 精工涂胶检测项目 +{ + partial class Form_LoadingImage + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form_LoadingImage)); + this.timer_Display = new System.Windows.Forms.Timer(this.components); + this.label = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // timer_Display + // + this.timer_Display.Tick += new System.EventHandler(this.timer_Display_Tick); + // + // label + // + this.label.AutoSize = true; + this.label.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.label.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label.ForeColor = System.Drawing.Color.Blue; + this.label.Location = new System.Drawing.Point(69, 237); + this.label.Name = "label"; + this.label.Size = new System.Drawing.Size(75, 20); + this.label.TabIndex = 0; + this.label.Text = "label1"; + this.label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // Form_LoadingImage + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.ClientSize = new System.Drawing.Size(800, 450); + this.ControlBox = false; + this.Controls.Add(this.label); + this.Name = "Form_LoadingImage"; + this.Text = "软件正在启动"; + this.Load += new System.EventHandler(this.Form_LoadingImage_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Timer timer_Display; + private System.Windows.Forms.Label label; + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.cs b/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.cs new file mode 100644 index 0000000..d05aee6 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace 精工涂胶检测项目 +{ + public partial class Form_LoadingImage : Form + { + private const string flash = "软件正在启动中,请耐心等待!!!!!!!!!!!!!!!"; + private int stopCount=flash.Length+300; + private int count = 0; + private bool finish=false; + public Form_LoadingImage() + { + InitializeComponent(); + timer_Display.Start(); + label.Text = ""; + } + + private void Form_LoadingImage_Load(object sender, EventArgs e) + { + + } + + private void timer_Display_Tick(object sender, EventArgs e) + { + if (finish == false) + { + label.Text += flash.Substring(count, 1); //逐个显示文字 + } + //累加计数 + count++; + if (count == flash.Length) + { + CheckProgramProcess(); + finish = true;//文字显示完成 + } + else if (count >= stopCount) + { + timer_Display.Stop(); + this.Close();//关闭窗口 + } + } + private bool CheckProgramProcess() + { + Process[] myProcesses = Process.GetProcessesByName(Application.ProductName); + if (myProcesses.Length > 1) //如果可以获取到本进程名大于1个,则说明在此之前已经启动过 + { + timer_Display.Stop(); + MessageBox.Show("检测到程序已经运行,请先关闭多余的程序或进程!\n"); + Application.Exit();//关闭 + } + return true; + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.resx b/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.resx new file mode 100644 index 0000000..5c75d9c --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Form_LoadingImage.resx @@ -0,0 +1,2400 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 10, 14 + + + + + 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 + AFAIZM5wzMyTOIQpdbu926q6tKoCoAAIUAAoAABCwyxz8136Oyebx76efhZCikb3Ixve9dJMSSTEW60b + 1bpS61spkAA2AAAWwDJmM4kkmZM40lIXfXfTougrFtmd0iiACoigAqKAAAQJ5+Vxnk106TPn41KkC6pJ + 065yde+7zzgqTMxdXpq6tluhrUBAADQAAgWQuSaSmJcYc8TIGS3eumtbulpeOtaNACACoAAKAAAIDOfn + +d1znm60mMy1nSbznXTOrL01N9Nb6VwQWTkal3vdNoqVAQAA0AAZkyJBK1atuIxmYzjLQzIXWrrbp1um + ZJrWjQgogBYAAFAAAIqHm+bzbzJvpKkzN2zOL1S6pdbu+3S3JYiSSFFuiggBAADQABjMhmQUuqupjLGc + yTLoZkyLvWt7tauS61o0ACApAAAUAAAio5+TxSXdu9Ypd7ttznfa5JJNbrdgQoZFEUAgBAADQAIZEkkA + atZYznOckNLiSC3WmhbvViNb6GpqAKAgAUgAKACFxnzeOb69Wc0tvXW9gEJaKIgABAAQAEAANAAgLJnM + lugSRjMzmEqEkgtatMadLRLdnXooBYKgAUgAKACFxyzjW97ZzC1q6iiEJdIKiAAEABAAQAA0QFIBJGbr + YZmJGJM5EISSLLVKKtCKej0zVgqAAqBSKgqNIAIKyNViC2wCpAloqCLAlBAAgACAANEZaYLWiELQuc4T + EkSILmZzlqwtLQUsjp0dd70gqUgCgQKIoAABSLIhpACyyAKsgEIoJQIAAAgANEkJmLq6BagEmc4kzTIG + c4LaLS2lVMtX07mdXSCpQIAAFICgAAAhm6IALGSqZICooiasBAAACAA0SS5irQpDQEOfPUyTJRz5y61b + S23V6FGcN61uQqCpQCAAFICgAAAiZa0QAsmTRMYxqoFNpmJvegQAAAgANUiSUyzZlprTQBImYZwbuOeM + TervVurps0qLAKIACggBSAoAAAC5OGdNZ3dXGNdZJm5zk1JnONa0znMi6tuM6313QlAAICgJI2zDntkz + JomrrV0CCpM5zMm3LOU1vWtaattKqLAKIACggBSAoAAIKDHPzzOeq9domZ1xjOcZAu29ZzjMlqb0z069 + NQrNKACAECDOcZixo1mNa1q7tgIYLmTMhJx0rW97urqaqKiwoiiAKigioFICgACsgtk4cebld5at3twn + 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 + Zlultt01ppqWjcQhhnQNFGkBAuQDIOULq6ZtDV11WZ0CSZ53qb1mKzjGYpq63vGUzKucYmcTe+vaQYyk + zmQgAJJZCIkkKdu3r6aoLCZzOfOLrWs8PPyZVu73bTWmhaukhCIA0UqoEAIowK8RvW7rVuhcY53W970o + STlzR7NTMmzMmJOarpvbMzpM555xGuu90zIkzJCAAkhmEpmQo7ez06ZtSWTnjOM5zq730xw4c8wt1vdt + NW6Fq6SQAA0UoBACQII8MW76deurqpc5xz1m671a1mS8+OMdfV05ZxenSSXGeOYkt10SasTOMTLU66JS + SSQgAJJJkQskKL176u973nExjGcc0W3p2vDhzzBda3q2NqNaLqzIpQDRSgEAMghk44zLXTpvetdMStXn + yxvXROkpTPPnjpvfTyefXr3RMZ480zWtbstjLPKC61vKouZJEADK5ySQAAp269dZmMZZxk1bddOs8nGQ + Lq6tC0b1oC6pAo2CgEJAgiLDhVmSWmtejfRefPOu1xjfTNozMjeuHLFmtXpvTnxzjEyuul0kkmIhrW9J + ISSRIBYgySQAADpvRjOEzo1vWrpPLhmi6XQwtqb30IW3QBooKAQIIQhDlmK1Vicprt27ax58b6dZz5Xv + vW0xz5tb63MmOWMyPR6NTGOWM5je9JJIMQ1ugTKZsgWQFmayCACC6zdM5i0106UZ8uZNC6zqwLaXezJd + NlqGjSUAIICEIQzmZk0ujeM5a3XGTp16WSa323HPnng9HTol5YxyxM9utaTOIlq3nAhldASpksElZpAQ + IICCyFLi23et2ZmOQpTNo0KttIo1Vus3VBaCICAyQgis5kklGtW2YmMpdXpve706tZw48s6XfTrz58s4 + zIO3TpMzEltzJg0S2FKJGrgTJNEBAQgICGi5u7dXU58s22sFFtKUoIQq61ZbSlAICAyAkhJpGMQVbbbz + zGC61vXXvrcS45TMrYxnLOcx06t7zjGNLJiNFtIMiS6UTKTZAQEICAi6I6dKzGcRGohTbVCquZCFCtFq + qWKCAgMGoEMltkmZmA0SCZi9OnS3W+mlxyxkZmpE3nGKzO3bpc884skZ0i63JIzILqkGTZggACQhSlia + 7WEkzLmNayaaa2ABJMgqimqhSghAAAU5mrZJmZhCCsgut9c5x277us55zM1jFkNyTMll9G5MsSSShrck + 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 + IZjIBJLUjeYkyzI776butaa3qGrZnMzz4YzjkakmZn0ejWrrGLc8WtbvTlnnFTPXupIQAAggAAAZLnHP + kX2+zVxzb6nbr0XYiCGWRJbdlT5BmTZCApZIXMhkgBcpILJJJlevXrvpu6WrQupnPJnnJOfLliIze3p0 + 1vLV588WTvrzcJ0xnp367BIQAAggAACEM5znid/b2zlvvrW971oEIZGYEltFt+UkmaQhai2TIkEiiKGZ + MhMss779N71030aujITVZznjywNYz4MS6i9uvV1S3jOGdb3ny5m09PbYCCAAIQAoIDIMc8ubv6O/oznW + ++3TbOkEEkkZUiVrJdb+URmEIWhCCQIqCAxIkkkzevXvvW9b1brRWWRNZy585zisebzNZuZ079uvTck5 + Y82d9Ly4Z67m+vSwCKiLACLAWSguYZaJnPHK+vvvp22vXpqrmWSwiSZkARTGt235tkSAioAJBBBCEJmJ + JmZm+vXt01vetW3RZEJm5xnOYznK8PL02xJ069d730M48/JyxI301rdBACAAgAzKCspFqScss+/06127 + 7a0ESJMjGUkoNEJva35pJIuggkAQhAkISGYkmZL1773vWt73WhZMSM5mcEtZzjGvPrtdyXe7bvWrOOMe + Dz9Om97VAQAgAIAmctAskRbJmc29z6Hft17azQSSSZZMyEoWlJrS35hIpSAGTUQkSIWJJqSZkZzJvv6N + XWtXetjWVmZnODEjV1bgxM3V3Wrqhesmcef5fo61BAIqajJoyAlGMyXSySmS2dcc+tx6Or0du3SkiTMg + gEyLJal0jVo+WULYi5AEQkiIQzJZEkmbl6O/bdt1pdUSSTGQZlLbKi6tpTK7mN61h87yddVaQCAICKEy + rOEXRnE2C856/V36yTq6b1RMyZSI2sgBJqLaFo+YSgIZBYlkRJBGTMiSySS9evXp06VdIbIznMZCyWRW + qzqy2EzC23DPHy87ub3ukBAQEBTPPnTNVdJyw6lhfX7Pb0xzrd65UuYmSCklWwuQugmkj5xCEECFiQTM + IkhlmSQRr0devXWt0QUSTOLktEAmWN6tmY544XVXHDOvPvrXTewgVkSIUpZnHHNxrO7dNzhhrZZnt9Xp + 6Ouua7qhmmQghK2SAqgEPmEIQggIgzJCRMpEzMy266ejpvpvW6JAEkmUkuqSTJiTd1Jnhzxm6qZyTeXT + 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 + iamZ1tOL1+rpznPnMc+U6+r1b3q6588YyutW7t2mMZkBpvTS2KCi3RdUBIuhnlxhrpvV1E54xjOZff2u + sjMEBSzPMqszJASQkEBbSlKuilt461g5irvWfP4vJn1evc5cNdt8+PHPKx7t3jx4TXTr0773uTw+TlfT + 269emq58826o1bu5znMlDW60lNUIGqNUKkjeotmJI1uiZ58uUkdPobIMyiCwGYpEwCEmSAZLqqUNGjSW + 68urbZmZjO9WTjNdtOfHjNacuXmxMen09u2vB5GbOvq69um3HjnEzvpvW8JidLqpNW2TKyBq25l0aoAC + 6imiaKazFudGsXPPHPEjp37iAKglBCkMkhJDICKmqJbaGylPLbbdQGc5k7Z10tic+eM8ufHy8r26uvru + HPnjzd+/o1vdvTGOPPlq71qsy61sZhAAakNM3eqyDQAuhSgWg58cyZmuvTVoAhAUApCmSTNIQAWiWqpQ + U4W4taugmZljp0tGpM8uXHy8M61merXbcsxxu9b6W61q8eOufLXTWtznrdusViSlWi6kmKtujINBnQuq + sKi6mmZLnjyWnTeqCgyZjRYqaKQKEgIhQKJqoorJTmkkmrq3S5MitFM5zxzjPDkNd++osubdZXe2rOHD + lddN7lurYSYzbq1pqLjMNW2SC2rAKpbQqAY8+C226u9STQkzM6gltaoFIAAZNAAoAAOJMy3TV0C1kFJn + HK6vLyc2d7311rG+mVSW3d1rOPPjG9a1bq2FznF1bbaEiFtkg0oAKW0DIK58I1dW22pKJMMiFus3QpQA + AAACgAA4GZLq23Sili1gZxGl8+c42XWw1dZgt1da55zg1dXVytznNtuqsCyJbZAUUEKW6SZgJa5c61q2 + 6FzBczOZCKtzaNpooABSAAoBKA4ZJKulabjRTSIS5CZmQW5wutGSVvVqYxndW0UyaKUpIKgAUpClLnMA + aYwN6suqMQWTnmCKlFNgoJqlEKgCoDRCqOEkk0WpdWhopQZIWBKuZm2isGrQzAaqCFKUogZBQUoKazm5 + gFtxAast0tziEkxIICmyiIIW22gpAUAoKU5ZkzOiQluimhWimTJNWEKLYQIushcotLkpClMkAItoUpTQ + ziAF6ZmMZjVu9XQxmmJJIBa0ohlIkFumq0KQFKAaig8wzMgpq3Qus2rokrIKCAAAAoAICyEhCgastzdS + 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 + L//Z + + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/LinDeVisionTask.ResultsDisplay.cs b/精工涂胶检测项目/精工涂胶检测项目/LinDeVisionTask.ResultsDisplay.cs new file mode 100644 index 0000000..df5a392 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/LinDeVisionTask.ResultsDisplay.cs @@ -0,0 +1,226 @@ +// 警告:某些程序集引用无法自动解析。这可能会导致某些部分反编译错误, +// 例如属性 getter/setter 访问。要获得最佳反编译结果,请手动将缺少的引用添加到加载的程序集列表中。 +// LinDeVisionTask, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null +// LinDeVisionTask.ResultsDisplay +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows; +using System.Windows.Forms; +using System.Windows.Forms.Integration; +using Cognex.VisionPro; +using Cognex.VisionPro3D; +using ConVX.VXControl; + +public class ResultsDisplay : UserControl +{ + private Cog3DDisplayV2 cog3DDisplayV21; + + private IContainer components = null; + + private VXCircleLEDLight led_CurrentState; + + private VXCircleLabel vxCircleLabel8; + + private VXCircleLabel lbl_Result; + + private Panel panel1; + + private TableLayoutPanel tableLayoutPanel1; + + private VXCircleLEDLight led_CurrentError; + + private VXGroupBox groupBox1; + + private ElementHost elementHost1; + + public ResultsDisplay() + { + InitializeComponent(); + cog3DDisplayV21 = new Cog3DDisplayV2(); + cog3DDisplayV21.BackColor = Color.FromArgb(95, 95, 95); + elementHost1.Child = (UIElement)(object)cog3DDisplayV21; + DisplayData(Color.Gray, Color.Gray, "失败"); + } + + public void DisplayData(Color connectColor, Color statColor, string result) + { + if (base.InvokeRequired) + { + BeginInvoke((Action)delegate + { + DisplayData(connectColor, statColor, result); + }); + } + else + { + ((Control)(object)lbl_Result).Text = result.ToString(); + led_CurrentState.LedColor = connectColor; + led_CurrentError.LedColor = statColor; + } + } + + public void Display3DImage(Cog3DBox box, CogImage16Range TrainImage, CogImage16Range image) + { + if (base.InvokeRequired) + { + BeginInvoke((Action)delegate + { + Display3DImage(box, TrainImage, image); + }); + return; + } + cog3DDisplayV21.Clear(); + Cog3DBoxGraphic cog3DBoxGraphic = new Cog3DBoxGraphic(box); + cog3DBoxGraphic.Opacity = 0.5; + cog3DBoxGraphic.Color = CogColorConstants.Cyan; + cog3DBoxGraphic.DisplayState = Cog3DGraphicDisplayStateConstants.SurfaceWithWireFrame; + Cog3DRangeImageGraphic cog3DRangeImageGraphic = new Cog3DRangeImageGraphic(TrainImage); + cog3DRangeImageGraphic.Color = CogColorConstants.Green; + Cog3DRangeImageGraphic item = new Cog3DRangeImageGraphic(image); + cog3DDisplayV21.Add(item); + cog3DDisplayV21.Add(cog3DRangeImageGraphic); + cog3DDisplayV21.Add(cog3DBoxGraphic, cog3DRangeImageGraphic); + cog3DDisplayV21.BackColor = Color.FromArgb(95, 95, 95); + cog3DDisplayV21.FitView(); + } + + protected override void Dispose(bool disposing) + { + if (disposing && components != null) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + private void InitializeComponent() + { + //IL_000d: Unknown result type (might be due to invalid IL or missing references) + //IL_0017: Expected O, but got Unknown + //IL_0018: Unknown result type (might be due to invalid IL or missing references) + //IL_0022: Expected O, but got Unknown + //IL_0023: Unknown result type (might be due to invalid IL or missing references) + //IL_002d: Expected O, but got Unknown + //IL_004a: Unknown result type (might be due to invalid IL or missing references) + //IL_0054: Expected O, but got Unknown + //IL_0060: Unknown result type (might be due to invalid IL or missing references) + //IL_006a: Expected O, but got Unknown + this.components = new System.ComponentModel.Container(); + this.led_CurrentState = new VXCircleLEDLight(); + this.vxCircleLabel8 = new VXCircleLabel(); + this.lbl_Result = new VXCircleLabel(); + this.panel1 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox1 = new VXGroupBox(this.components); + this.elementHost1 = new System.Windows.Forms.Integration.ElementHost(); + this.led_CurrentError = new VXCircleLEDLight(); + this.panel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.Windows.Forms.Control)(object)this.groupBox1).SuspendLayout(); + base.SuspendLayout(); + ((System.Windows.Forms.Control)(object)this.led_CurrentState).Anchor = System.Windows.Forms.AnchorStyles.None; + ((System.Windows.Forms.Control)(object)this.led_CurrentState).BackColor = System.Drawing.Color.FromArgb(52, 52, 52); + this.led_CurrentState.BorderWidth = 3; + this.led_CurrentState.FillText = "连接状态"; + ((System.Windows.Forms.Control)(object)this.led_CurrentState).Font = new System.Drawing.Font("微软雅黑", 12f); + this.led_CurrentState.LedColor = System.Drawing.Color.Gray; + ((System.Windows.Forms.Control)(object)this.led_CurrentState).Location = new System.Drawing.Point(15, 4); + ((System.Windows.Forms.Control)(object)this.led_CurrentState).Name = "led_CurrentState"; + ((System.Windows.Forms.Control)(object)this.led_CurrentState).Size = new System.Drawing.Size(111, 30); + ((System.Windows.Forms.Control)(object)this.led_CurrentState).TabIndex = 38; + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).BackColor = System.Drawing.Color.Transparent; + this.vxCircleLabel8.BgColor = System.Drawing.Color.FromArgb(52, 52, 52); + this.vxCircleLabel8.BorderColor = System.Drawing.Color.Gray; + this.vxCircleLabel8.BorderWidth = 0; + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).Dock = System.Windows.Forms.DockStyle.Left; + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).Font = new System.Drawing.Font("微软雅黑", 12f); + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).ForeColor = System.Drawing.Color.White; + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).Location = new System.Drawing.Point(3, 78); + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).Name = "vxCircleLabel8"; + this.vxCircleLabel8.Radius = 5; + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).Size = new System.Drawing.Size(136, 39); + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).TabIndex = 41; + ((System.Windows.Forms.Control)(object)this.vxCircleLabel8).Text = "检测结果:"; + ((System.Windows.Forms.Label)(object)this.vxCircleLabel8).TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + ((System.Windows.Forms.Control)(object)this.lbl_Result).Anchor = System.Windows.Forms.AnchorStyles.Left; + ((System.Windows.Forms.Control)(object)this.lbl_Result).BackColor = System.Drawing.Color.Transparent; + this.lbl_Result.BgColor = System.Drawing.Color.FromArgb(52, 52, 52); + this.lbl_Result.BorderColor = System.Drawing.Color.Gray; + this.lbl_Result.BorderWidth = 1; + ((System.Windows.Forms.Control)(object)this.lbl_Result).Font = new System.Drawing.Font("微软雅黑", 12f); + ((System.Windows.Forms.Control)(object)this.lbl_Result).ForeColor = System.Drawing.Color.White; + ((System.Windows.Forms.Control)(object)this.lbl_Result).Location = new System.Drawing.Point(145, 83); + ((System.Windows.Forms.Control)(object)this.lbl_Result).Name = "lbl_Result"; + this.lbl_Result.Radius = 5; + ((System.Windows.Forms.Control)(object)this.lbl_Result).Size = new System.Drawing.Size(106, 29); + ((System.Windows.Forms.Control)(object)this.lbl_Result).TabIndex = 42; + ((System.Windows.Forms.Label)(object)this.lbl_Result).TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.panel1.Controls.Add(this.tableLayoutPanel1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(3, 585); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(592, 196); + this.panel1.TabIndex = 7; + this.tableLayoutPanel1.ColumnCount = 4; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 23.90572f)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25.92593f)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25f)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25f)); + this.tableLayoutPanel1.Controls.Add((System.Windows.Forms.Control)(object)this.led_CurrentError, 1, 0); + this.tableLayoutPanel1.Controls.Add((System.Windows.Forms.Control)(object)this.led_CurrentState, 0, 0); + this.tableLayoutPanel1.Controls.Add((System.Windows.Forms.Control)(object)this.lbl_Result, 1, 2); + this.tableLayoutPanel1.Controls.Add((System.Windows.Forms.Control)(object)this.vxCircleLabel8, 0, 2); + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 5; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20f)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20f)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20f)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20f)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 20f)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(594, 196); + this.tableLayoutPanel1.TabIndex = 43; + ((System.Windows.Forms.Control)(object)this.groupBox1).BackColor = System.Drawing.Color.FromArgb(52, 52, 52); + this.groupBox1.BorderColor = System.Drawing.Color.FromArgb(64, 64, 64); + ((System.Windows.Forms.Control)(object)this.groupBox1).Controls.Add(this.elementHost1); + ((System.Windows.Forms.Control)(object)this.groupBox1).Controls.Add(this.panel1); + ((System.Windows.Forms.Control)(object)this.groupBox1).Dock = System.Windows.Forms.DockStyle.Fill; + ((System.Windows.Forms.GroupBox)(object)this.groupBox1).FlatStyle = System.Windows.Forms.FlatStyle.Flat; + ((System.Windows.Forms.Control)(object)this.groupBox1).Font = new System.Drawing.Font("微软雅黑", 12f, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 134); + ((System.Windows.Forms.Control)(object)this.groupBox1).ForeColor = System.Drawing.Color.White; + ((System.Windows.Forms.Control)(object)this.groupBox1).Location = new System.Drawing.Point(0, 0); + ((System.Windows.Forms.Control)(object)this.groupBox1).Name = "groupBox1"; + ((System.Windows.Forms.Control)(object)this.groupBox1).Size = new System.Drawing.Size(598, 784); + ((System.Windows.Forms.Control)(object)this.groupBox1).TabIndex = 6; + ((System.Windows.Forms.GroupBox)(object)this.groupBox1).TabStop = false; + ((System.Windows.Forms.Control)(object)this.groupBox1).Text = "3D型号区分"; + this.elementHost1.Dock = System.Windows.Forms.DockStyle.Fill; + this.elementHost1.Location = new System.Drawing.Point(3, 35); + this.elementHost1.Name = "elementHost1"; + this.elementHost1.Size = new System.Drawing.Size(592, 550); + this.elementHost1.TabIndex = 5; + this.elementHost1.Text = "elementHost1"; + this.elementHost1.Child = null; + ((System.Windows.Forms.Control)(object)this.led_CurrentError).Anchor = System.Windows.Forms.AnchorStyles.None; + ((System.Windows.Forms.Control)(object)this.led_CurrentError).BackColor = System.Drawing.Color.FromArgb(52, 52, 52); + this.led_CurrentError.BorderWidth = 3; + this.led_CurrentError.FillText = "测量状态"; + ((System.Windows.Forms.Control)(object)this.led_CurrentError).Font = new System.Drawing.Font("微软雅黑", 12f); + this.led_CurrentError.LedColor = System.Drawing.Color.Gray; + ((System.Windows.Forms.Control)(object)this.led_CurrentError).Location = new System.Drawing.Point(163, 4); + ((System.Windows.Forms.Control)(object)this.led_CurrentError).Name = "led_CurrentError"; + ((System.Windows.Forms.Control)(object)this.led_CurrentError).Size = new System.Drawing.Size(111, 30); + ((System.Windows.Forms.Control)(object)this.led_CurrentError).TabIndex = 39; + base.AutoScaleDimensions = new System.Drawing.SizeF(9f, 18f); + base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + base.Controls.Add((System.Windows.Forms.Control)(object)this.groupBox1); + base.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + base.Name = "ResultsDisplay"; + base.Size = new System.Drawing.Size(598, 784); + this.panel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.Windows.Forms.Control)(object)this.groupBox1).ResumeLayout(false); + base.ResumeLayout(false); + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/ModbusTcpClass.cs b/精工涂胶检测项目/精工涂胶检测项目/ModbusTcpClass.cs new file mode 100644 index 0000000..292cdde --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/ModbusTcpClass.cs @@ -0,0 +1,346 @@ +using HslCommunication; +using HslCommunication.ModBus; +using System; +using System.Linq; +using System.Net.Sockets; +using System.Threading; +using System.Threading.Tasks; +using System.Runtime.Serialization.Formatters.Binary; +using System.IO; + +namespace 精工涂胶检测项目 +{ + public class ModbusTcpClient : IDisposable + { + private readonly ModbusTcpNet modbus; + private readonly string ipAddress; + private readonly int port; + private bool _autoReconnect; + private int _reconnectInterval = 5000; + private CancellationTokenSource _reconnectToken; + private bool _isConnected; // 自定义连接状态字段 + + public event EventHandler ConnectionStatusChanged; + public event EventHandler ErrorOccurred; + public event EventHandler DataReceived; + public event EventHandler DataSent; + + public ModbusTcpClient(string ip, int port = 502) + { + if (string.IsNullOrEmpty(ip)) ip = "192.168.1.30"; + if (port < 1 || port > 65535) port = 502; + + this.ipAddress = ip; + this.port = port; + modbus = new ModbusTcpNet(ip, port, 1) + { + ConnectTimeOut = 3000, + ReceiveTimeOut = 5000 + }; + } + + #region 连接状态管理(通过自定义字段实现) + public bool IsConnected => _isConnected; + + public OperateResult Connect() + { + try + { + OperateResult result = modbus.ConnectServer(); + _isConnected = result.IsSuccess; // 更新连接状态 + ConnectionStatusChanged?.Invoke(this, _isConnected); + return result; + } + catch (Exception ex) + { + ErrorOccurred?.Invoke(this, $"连接失败: {ex.Message}"); + _isConnected = false; + return new OperateResult(ex.Message); + } + } + + public void Disconnect() + { + modbus.ConnectClose(); + _isConnected = false; + ConnectionStatusChanged?.Invoke(this, false); + } + #endregion + + #region 数据读写方法 + public OperateResult ReadHoldingRegister(ushort address) + { + string modbusAddress = address.ToString(); + Func> readFunc = + (addr, _) => modbus.ReadInt16(addr); // 忽略长度参数 + + return Read(modbusAddress, 1, readFunc); + } + + public OperateResult ReadHoldingRegisters(ushort address, ushort count) + { + string modbusAddress = address.ToString(); + return Read(modbusAddress, count, (addr, cnt) => modbus.ReadInt16(addr, cnt)); + } + + /// + /// 写入单个保持寄存器 + /// + public OperateResult WriteSingleRegister(string address, short value) + { + if (!IsConnected) return new OperateResult("设备未连接"); + + try + { + OperateResult result = modbus.Write(address, value); + HandleWriteResult(result); + return result; + } + catch (Exception ex) + { + HandleWriteException(ex); + return new OperateResult(ex.Message); + } + } + + public OperateResult WriteSingleRegisterString(string address, string value) + { + if (!IsConnected) return new OperateResult("设备未连接"); + + try + { + OperateResult result = modbus.Write(address, value); + HandleWriteResult(result); + return result; + } + catch (Exception ex) + { + HandleWriteException(ex); + return new OperateResult(ex.Message); + } + } + + /// + /// 批量写入保持寄存器 + /// + public OperateResult WriteMultipleRegisters(string address, short[] values) + { + if (!IsConnected) return new OperateResult("设备未连接"); + + try + { + OperateResult result = modbus.Write(address, values); + HandleWriteResult(result); + return result; + } + catch (Exception ex) + { + HandleWriteException(ex); + return new OperateResult(ex.Message); + } + } + + /// + /// 写入32位浮点数(占用两个寄存器) + /// + public OperateResult WriteFloat(string address, float value) + { + try + { + byte[] bytes = BitConverter.GetBytes(value); + return WriteMultipleRegisters(address, new[] { + BitConverter.ToInt16(bytes, 0), + BitConverter.ToInt16(bytes, 2) + }); + } + catch (Exception ex) + { + HandleWriteException(ex); + return new OperateResult(ex.Message); + } + } + + public async Task> ReadHoldingRegisterAsync(ushort address,ushort length) + { + return await Task.Run(() => ReadHoldingRegisters(address,length)); + } + public async Task WriteHoldingRegisterAsync(string address,short value) + { + return await Task.Run(() => WriteSingleRegister(address, value)); + } + #region 辅助方法 + private void HandleWriteResult(OperateResult result) + { + if (!result.IsSuccess) + { + ErrorOccurred?.Invoke(this, $"写入失败: {result.Message}"); + _isConnected = false; + } + } + + private void HandleWriteException(Exception ex) + { + _isConnected = false; + ErrorOccurred?.Invoke(this, $"写入操作异常: {ex.Message}"); + } + #endregion + #endregion + + #region 核心方法 + private OperateResult Read(string address, ushort count, Func> readFunc) + { + if (!IsConnected) return new OperateResult("设备未连接"); + + try + { + var result = readFunc(address, count); + if (!result.IsSuccess) + { + ErrorOccurred?.Invoke(this, $"读取失败: {result.Message}"); + } + else + { + // 仅记录有效数据内容(无需序列化整个对象) + string dataString = GetDataString(result.Content); + DataReceived?.Invoke(this, $"地址:{address} 接收数据:{dataString}"); + } + return result; + } + catch (Exception ex) + { + _isConnected = false; + ErrorOccurred?.Invoke(this, $"读取异常: {ex.Message}"); + return new OperateResult(ex.Message); + } + } + + // 数据格式化辅助方法 + private string GetDataString(object data) + { + if (data is short[] shortArray) + return string.Join(", ", shortArray.Select(s => s.ToString())); + + if (data is short shortValue) + return shortValue.ToString(); + + if (data is byte[] bytes) + return BitConverter.ToString(bytes); + + return data?.ToString() ?? "空数据"; + } + + private OperateResult Write(string address, object value) + { + if (!IsConnected) return new OperateResult("设备未连接"); + + try + { + switch (value) + { + case short sVal: + DataSent?.Invoke(this, $"地址:{address} 发送数据:{value}"); + return WriteSingleRegister(address, sVal); + case short[] arrVal: + DataSent?.Invoke(this, $"地址:{address} 发送数据:{value}"); + return WriteMultipleRegisters(address, arrVal); + case float fVal: + DataSent?.Invoke(this, $"地址:{address} 发送数据:{value}"); + return WriteFloat(address, fVal); + default: + ErrorOccurred?.Invoke(this, $"不支持的数据类型: {value.GetType()}"); + return new OperateResult($"Unsupported type: {value.GetType()}"); + } + } + catch (Exception ex) + { + _isConnected = false; // 发生异常时标记为断开 + ErrorOccurred?.Invoke(this, $"写入异常: {ex.Message}"); + return new OperateResult(ex.Message); + } + } + #endregion + + #region 自动重连(增加心跳检测) + public bool AutoReconnect + { + get => _autoReconnect; + set + { + if (_autoReconnect == value) return; + _autoReconnect = value; + + if (value) StartReconnectMonitor(); + else StopReconnectMonitor(); + } + } + + private async void StartReconnectMonitor() + { + _reconnectToken = new CancellationTokenSource(); + while (!_reconnectToken.IsCancellationRequested) + { + await Task.Delay(_reconnectInterval, _reconnectToken.Token); + + // 通过心跳检测验证连接状态 + if (!await CheckConnectionAsync()) + { + ErrorOccurred?.Invoke(this, "尝试自动重连..."); + await ConnectAsync(); + } + } + } + + private async Task CheckConnectionAsync() + { + try + { + // 通过读取一个寄存器验证连接 + var result = await Task.Run(() => modbus.ReadInt16("1", 1)); + _isConnected = result.IsSuccess; + return _isConnected; + } + catch + { + _isConnected = false; + return false; + } + } + + private void StopReconnectMonitor() + { + _reconnectToken?.Cancel(); + _reconnectToken?.Dispose(); + _reconnectToken = null; + } + + public async Task ConnectAsync() + { + try + { + return await Task.Run(() => Connect()); + } + catch (Exception ex) + { + return new OperateResult(ex.Message); + } + } + + public int ReconnectInterval + { + get => _reconnectInterval; + set => _reconnectInterval = value; + } + #endregion + + #region 资源释放 + public void Dispose() + { + AutoReconnect = false; + modbus?.ConnectClose(); + modbus?.Dispose(); + _reconnectToken?.Dispose(); + GC.SuppressFinalize(this); + } + #endregion + } +} \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Program.cs b/精工涂胶检测项目/精工涂胶检测项目/Program.cs new file mode 100644 index 0000000..e815a5e --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Program.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace 精工涂胶检测项目 +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form_LoadingImage()); + Application.Run(new Form1()); + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Properties/AssemblyInfo.cs b/精工涂胶检测项目/精工涂胶检测项目/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f3e38f7 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("精工涂胶检测项目")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("HP Inc.")] +[assembly: AssemblyProduct("精工涂胶检测项目")] +[assembly: AssemblyCopyright("Copyright © HP Inc. 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("10c424d2-36a1-4d94-a034-a6801a1b17b5")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/精工涂胶检测项目/精工涂胶检测项目/Properties/Resources.Designer.cs b/精工涂胶检测项目/精工涂胶检测项目/Properties/Resources.Designer.cs new file mode 100644 index 0000000..f8ad37a --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace 精工涂胶检测项目.Properties +{ + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("精工涂胶检测项目.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 覆盖当前线程的 CurrentUICulture 属性 + /// 使用此强类型的资源类的资源查找。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Properties/Resources.resx b/精工涂胶检测项目/精工涂胶检测项目/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/Properties/Settings.Designer.cs b/精工涂胶检测项目/精工涂胶检测项目/Properties/Settings.Designer.cs new file mode 100644 index 0000000..c1cf246 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Properties/Settings.Designer.cs @@ -0,0 +1,145 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace 精工涂胶检测项目.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string TcpIP { + get { + return ((string)(this["TcpIP"])); + } + set { + this["TcpIP"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string TcpProt { + get { + return ((string)(this["TcpProt"])); + } + set { + this["TcpProt"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string PlcIP { + get { + return ((string)(this["PlcIP"])); + } + set { + this["PlcIP"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string PlcRack { + get { + return ((string)(this["PlcRack"])); + } + set { + this["PlcRack"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string PlcType { + get { + return ((string)(this["PlcType"])); + } + set { + this["PlcType"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string TcpStatus { + get { + return ((string)(this["TcpStatus"])); + } + set { + this["TcpStatus"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("192.168.1.30")] + public string ModbusIP { + get { + return ((string)(this["ModbusIP"])); + } + set { + this["ModbusIP"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("502")] + public string ModbusPort { + get { + return ((string)(this["ModbusPort"])); + } + set { + this["ModbusPort"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string PlcSlot { + get { + return ((string)(this["PlcSlot"])); + } + set { + this["PlcSlot"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Collections.Specialized.StringCollection ComboBoxItems { + get { + return ((global::System.Collections.Specialized.StringCollection)(this["ComboBoxItems"])); + } + set { + this["ComboBoxItems"] = value; + } + } + } +} diff --git a/精工涂胶检测项目/精工涂胶检测项目/Properties/Settings.settings b/精工涂胶检测项目/精工涂胶检测项目/Properties/Settings.settings new file mode 100644 index 0000000..0b78f2d --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/Properties/Settings.settings @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + 192.168.1.30 + + + 502 + + + + + + + + + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/TCPClass.cs b/精工涂胶检测项目/精工涂胶检测项目/TCPClass.cs new file mode 100644 index 0000000..85c6bb1 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/TCPClass.cs @@ -0,0 +1,275 @@ +using System; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Linq; +using System.Threading; + +namespace 精工涂胶检测项目 +{ + // 自定义事件参数类 + public class ClientConnectedEventArgs : EventArgs + { + public string ClientId { get; } + public IPEndPoint RemoteEndPoint { get; } + + public ClientConnectedEventArgs(TcpClient client) + { + ClientId = client.Client.RemoteEndPoint?.ToString(); + RemoteEndPoint = (IPEndPoint)client.Client.RemoteEndPoint; + } + } + + public class DataReceivedEventArgs : EventArgs + { + public string ClientId { get; } + public byte[] Data { get; } + + public DataReceivedEventArgs(string clientId, byte[] data) + { + ClientId = clientId; + Data = data; + } + } + + public class DataSendEventArgs : EventArgs + { + + public DataSendEventArgs() + { + + } + } + + public class TCPClass:IDisposable + { + // 服务器端成员 + private TcpListener _server; + private readonly object _clientsLock = new object(); + private List _connectedClients = new List(); + + private string _tcpStatus; + + // 客户端成员 + private TcpClient _client; + private NetworkStream _clientStream; + + //公共成员 + public string TcpStatus + { + get + { + return _tcpStatus; + } + } + public bool IsConnected => _client?.Connected == true; + public event EventHandler ServerStatusChanged; + + // 公共事件 + public event EventHandler ClientConnected; + public event EventHandler ClientDisconnected; + public event EventHandler DataReceived; + + private CancellationTokenSource _serverCts; + private bool _disposed = false; + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!_disposed) + { + if (disposing) + { + StopServer(); + _clientStream?.Dispose(); + _client?.Dispose(); + _server?.Stop(); + } + _disposed = true; + } + } + + #region 服务器功能 + public async Task StartServerAsync(int port) + { + _tcpStatus = "Server"; + _server = new TcpListener(IPAddress.Any, port); + _server.Start(); + OnServerStatusChanged($"服务器已启动,监听端口:{port}"); // 非阻塞通知 + + while (true) + { + var client = await _server.AcceptTcpClientAsync(); + lock (_clientsLock) + { + _connectedClients.Add(client); + } + OnClientConnected(client); + _ = HandleClientAsync(client); + } + } + // 广播给所有客户端 + public async Task BroadcastAsync(byte[] data) + { + List clientsCopy; + lock (_clientsLock) + { + _connectedClients.RemoveAll(c => !c.Connected); + clientsCopy = new List(_connectedClients); + } + + foreach (var client in clientsCopy) + { + try + { + if (client.Connected) + { + await SendToClientAsync(client, data); + } + } + catch (Exception ex) + { + OnServerStatusChanged($"发送失败: {ex.Message}"); + } + } + } + + private async Task HandleClientAsync(TcpClient client) + { + var stream = client.GetStream(); + var buffer = new byte[4096]; + var clientId = client.Client.RemoteEndPoint?.ToString(); + + try + { + while (true) + { + int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length); + if (bytesRead == 0) break; + + var data = new byte[bytesRead]; + Array.Copy(buffer, data, bytesRead); + OnDataReceived(clientId, data); + } + } + finally + { + lock (_clientsLock) + { + _connectedClients.Remove(client); + } + client.Dispose(); + OnClientDisconnected(clientId); + } + } + + public async Task SendToClientAsync(TcpClient client, byte[] data) + { + var stream = client.GetStream(); + await stream.WriteAsync(data, 0, data.Length); + } + + public void StopServer() + { + _server?.Stop(); + lock (_clientsLock) + { + foreach (var client in _connectedClients) + { + client.Dispose(); + } + _connectedClients.Clear(); + } + } + #endregion + + #region 客户端功能 + public async Task ConnectAsync(string ip, int port) + { + var mainForm = Application.OpenForms.OfType().FirstOrDefault(); + if (mainForm == null) return; + + _tcpStatus = "Client"; + _client = new TcpClient(); + await _client.ConnectAsync(ip, port); + mainForm.AddLog($"客户端已连接,主机IP:{ip},主机端口:{port}", 0); + _clientStream = _client.GetStream(); + _ = ReceiveDataAsync(); + } + + private async Task ReceiveDataAsync() + { + var buffer = new byte[4096]; + try + { + while (true) + { + int bytesRead = await _clientStream.ReadAsync(buffer, 0, buffer.Length); + if (bytesRead == 0) break; + + var data = new byte[bytesRead]; + Array.Copy(buffer, data, bytesRead); + OnDataReceived("Server", data); + } + } + catch + { + Disconnect(); + } + } + + public async Task SendAsync(byte[] data) + { + if (_client?.Connected == true) + { + await _clientStream.WriteAsync(data, 0, data.Length); + } + } + + public void Disconnect() + { + try + { + _clientStream?.Close(); + _client?.Close(); + OnClientDisconnected("Client"); + } + catch (Exception ex) + { + OnServerStatusChanged($"断开异常: {ex.Message}"); + } + } + #endregion + + #region 事件触发方法 + protected virtual void OnClientConnected(TcpClient client) + { + ClientConnected?.Invoke(this, new ClientConnectedEventArgs(client)); + } + + protected virtual void OnClientDisconnected(string clientId) + { + ClientDisconnected?.Invoke(this, clientId); + } + + protected virtual void OnDataReceived(string clientId, byte[] data) + { + DataReceived?.Invoke(this, new DataReceivedEventArgs(clientId, data)); + } + + protected virtual void OnServerStatusChanged(string message) + { + ServerStatusChanged?.Invoke(this, message); + } + #endregion + } +} + diff --git a/精工涂胶检测项目/精工涂胶检测项目/packages.config b/精工涂胶检测项目/精工涂胶检测项目/packages.config new file mode 100644 index 0000000..150feab --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/packages.config @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/精工涂胶检测项目/精工涂胶检测项目/精工涂胶检测项目.csproj b/精工涂胶检测项目/精工涂胶检测项目/精工涂胶检测项目.csproj new file mode 100644 index 0000000..23caa60 --- /dev/null +++ b/精工涂胶检测项目/精工涂胶检测项目/精工涂胶检测项目.csproj @@ -0,0 +1,565 @@ + + + + + Debug + AnyCPU + {10C424D2-36A1-4D94-A034-A6801A1B17B5} + WinExe + 精工涂胶检测项目 + 精工涂胶检测项目 + v4.8.1 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + true + + + bin\x86\Release\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + true + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + 7.3 + prompt + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 7.3 + prompt + true + + + + C:\Program Files\Cognex\VisionPro\bin\Cognex.Vision.Core.Net.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.AutoSelect.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Blob.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Blob.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CAD.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CalibFix.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CalibFix.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CalibFixPlus.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Caliper.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Caliper.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CNLSearch.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CNLSearch.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ColorExtractor.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ColorExtractor.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ColorMatch.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ColorMatch.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ColorSegmenter.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ColorSegmenter.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Comm.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Comm.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CompositeColorMatch.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CompositeColorMatch.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Core.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.CorePlus.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Database.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Dimensioning.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Dimensioning.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Display.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.EdgeInspect.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.EdgeInspect.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.FG1394DCAM.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.FGGigE.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.GenTL.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ID.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ID.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ImageFile.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ImageFile.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ImageProcessing.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ImageProcessing.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ImagingDevice.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Inspection.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Inspection.Controls.dll + + + False + True + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Interop.Core.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.LineMax.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.LineMax.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.LinescanDistortionCorrection.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.LinescanDistortionCorrection.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.OC.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.OCRMax.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.OCRMax.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.OCVMax.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.OCVMax.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.PatInspect.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.PatInspect.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.PixelMap.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.PixelMap.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.PMAlign.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.PMAlign.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.PMRedLine.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.PMRedLine.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.QuickBuild.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.QuickBuild.Core.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.QuickBuild.IO.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ResultsAnalysis.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ResultsAnalysis.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.SearchMax.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.SearchMax.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.SurfaceFX.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.SurfaceFX.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ToolGroup.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.ToolGroup.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Trevista.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro.Trevista.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro3D.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro3D.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro3D.Core.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro3D.Display.Controls.dll + + + False + C:\Program Files (x86)\Cognex\VisionPro\ReferencedAssemblies\Cognex.VisionPro3D.Graphic.dll + + + ..\packages\HslCommunication.12.3.1\lib\net451\HslCommunication.dll + + + ..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll + True + + + + ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll + + + ..\packages\S7netplus.0.20.0\lib\net462\S7.Net.dll + + + + ..\packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll + + + + ..\packages\System.Memory.4.6.3\lib\net462\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll + + + + + + + + + + + + + + + + Component + + + Form + + + FormCheck.cs + + + Form + + + FormVPP.cs + + + Form + + + FormLogin.cs + + + Form + + + FormSetParameter.cs + + + Form + + + FormCommunication.cs + + + Form + + + FormMain.cs + + + + Form + + + Form_LoadingImage.cs + + + + + + + FormCheck.cs + + + FormVPP.cs + + + FormLogin.cs + + + FormCommunication.cs + + + FormMain.cs + + + FormSetParameter.cs + + + Form_LoadingImage.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + {012F24C1-35B0-11D0-BF2D-0000E8D0D146} + 1 + 0 + 0 + tlbimp + False + True + + + {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} + 2 + 8 + 0 + primary + False + True + + + {4AC9E1DA-5BAD-4AC7-86E3-24F4CDCECA28} + 12 + 0 + 0 + primary + False + True + + + + \ No newline at end of file