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
+
+
+
+
+
+ 精工涂胶检测项目.Properties.Settings>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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