From 1444e6b948c203e365f9141b54ce5d071d77c17e Mon Sep 17 00:00:00 2001 From: "wilmin.zheng" Date: Fri, 8 May 2026 13:11:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=85=A8=E6=9B=BF=E6=8D=A2=E6=8E=89Sy?= =?UTF-8?q?stem.Windows.Forms.Timer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../精工涂胶检测项目/Form/FormMain.cs | 136 ++++++++++++++---- 1 file changed, 110 insertions(+), 26 deletions(-) diff --git a/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.cs b/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.cs index 63dea28..df2ebe7 100644 --- a/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.cs +++ b/精工涂胶检测项目/精工涂胶检测项目/Form/FormMain.cs @@ -29,7 +29,9 @@ 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; +//≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 +//using Timer = System.Windows.Forms.Timer; +//≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 using System.Timers; namespace 精工涂胶检测项目 { @@ -108,13 +110,25 @@ namespace 精工涂胶检测项目 CogPMAlignTool mPM; CogFixtureTool mFIX; int currentStatus; - private Timer inactivityTimer; + #region ≡≡≡≡≡≡≡≡≡≡【inactivityTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【0】【BEGIN】 + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //private Timer inactivityTimer; + private System.Timers.Timer mInactivityTimer; + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 + #endregion ≡≡≡≡≡≡≡≡≡≡【inactivityTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【0】【END】 + FormLogin formLogin; private MyMessageFilter messageFilter; public ModbusTcpClient modbusClient; // 新增Modbus客户端实例 - private Timer modbusPollTimer; // 新增轮询定时器 - private System.Timers.Timer modbusHeartbeat; + #region ≡≡≡≡≡≡≡≡≡≡【modbusPollTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【0】【BEGIN】 + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //private Timer modbusPollTimer; // 新增轮询定时器 + private System.Timers.Timer mModbusPollTimer; + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 + #endregion ≡≡≡≡≡≡≡≡≡≡【modbusPollTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【0】【END】 + + private System.Timers.Timer modbusHeartbeat; public Plc plc; public bool _autoModbusReconnect = true; @@ -314,6 +328,8 @@ namespace 精工涂胶检测项目 // 再次回收(清理等待终结后的对象) GC.Collect(); } + + #region ≡≡≡≡≡≡≡≡≡≡【modbusPollTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【1】【BEGIN】 private void StartModbusPolling() { // 创建定时器:3000 毫秒 = 3 秒 _gcTimer = new System.Timers.Timer(3000); @@ -326,11 +342,19 @@ namespace 精工涂胶检测项目 // 启动定时器 _gcTimer.Start(); - if (modbusPollTimer == null) + + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //if (modbusPollTimer == null) + if (mModbusPollTimer == null) + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 { Vpro初始化(); - modbusPollTimer = new Timer { Interval = 1000 }; - modbusPollTimer.Tick += async (s, e) => + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //modbusPollTimer = new Timer { Interval = 1000 }; + //modbusPollTimer.Tick += async (s, e) => + mModbusPollTimer = new System.Timers.Timer(1000); + mModbusPollTimer.Elapsed += async (s, e) => + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 { if (!modbusClient.IsConnected) return; @@ -369,7 +393,6 @@ namespace 精工涂胶检测项目 } } - if (trigger == "\u0000" || trigger == "") { AddLog("相机收到PLC结束触发信号", 0); @@ -377,7 +400,6 @@ namespace 精工涂胶检测项目 AddLog("给PLC发送ResultAcq置零信号", 0); } - //触发标定程序 if (trigger == "\u0002") { @@ -393,8 +415,6 @@ namespace 精工涂胶检测项目 cog3DDisplayV2WF1.Clear(); } } - - } if (resultHeartBeat.IsSuccess) @@ -436,12 +456,23 @@ namespace 精工涂胶检测项目 }; } - if (!modbusPollTimer.Enabled) + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //if (!modbusPollTimer.Enabled) + //{ + // modbusPollTimer.Start(); + // AddLog("Modbus实时读取已启动", 0); + //} + + if (!mModbusPollTimer.Enabled) { - modbusPollTimer.Start(); + mModbusPollTimer.Start(); AddLog("Modbus实时读取已启动", 0); } - } + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 + } + #endregion ≡≡≡≡≡≡≡≡≡≡【modbusPollTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【1】【END】 + + public string ConvertShortsToAsciiString(short[] shorts, bool isLittleEndian = false) { var bytes = new List(); @@ -480,18 +511,30 @@ namespace 精工涂胶检测项目 { } + + + #region ≡≡≡≡≡≡≡≡≡≡【inactivityTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【1】【BEGIN】 private void 计时器初始化() { + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 // 初始化不活动计时器 - // 初始化不活动计时器 - inactivityTimer = new Timer(); - inactivityTimer.Interval = 300000; // 5秒 - inactivityTimer.Tick += InactivityTimer_Tick; + //inactivityTimer = new Timer(); + //inactivityTimer.Interval = 300000; // 5秒【这是5秒为啥写300秒,到底是多少】 + //inactivityTimer.Tick += InactivityTimer_Tick; + + mInactivityTimer = new System.Timers.Timer(5000); //5秒 + mInactivityTimer.Elapsed += InactivityTimer_Elapsed; + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 + // 初始化消息过滤器 messageFilter = new MyMessageFilter(); Application.AddMessageFilter(messageFilter); messageFilter.ActivityDetected += MessageFilter_ActivityDetected; } + #endregion ≡≡≡≡≡≡≡≡≡≡【inactivityTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【1】【END】 + + + private void Tcp事件注册() { //事件注册 @@ -538,36 +581,68 @@ namespace 精工涂胶检测项目 myJobManager.UserResultAvailable += MyJobManager_UserResultAvailable; } + + #region ≡≡≡≡≡≡≡≡≡≡【modbusPollTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【2】【BEGIN】 private void StopModbusPolling() { - if (modbusPollTimer != null && modbusPollTimer.Enabled) + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //if (modbusPollTimer != null && modbusPollTimer.Enabled) + //{ + // modbusPollTimer.Stop(); + // AddLog("Modbus断线,已停止实时读取", 1); + //} + + if (mModbusPollTimer != null && mModbusPollTimer.Enabled) { - modbusPollTimer.Stop(); + mModbusPollTimer.Stop(); AddLog("Modbus断线,已停止实时读取", 1); } + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 } + #endregion ≡≡≡≡≡≡≡≡≡≡【modbusPollTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【2】【END】 private void _modbusClient_Disconnected(object sender, string e) { AddLog($"PLC连接断开:{e}", 1); } - private void InactivityTimer_Tick(object sender, EventArgs e) + + #region ≡≡≡≡≡≡≡≡≡≡【inactivityTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【2】【BEGIN】 + + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //private void InactivityTimer_Tick(object sender, EventArgs e) + //{ + // if (currentStatus == 3) + // { + // SetMainEnabled(0, "登录"); + // inactivityTimer.Stop(); + // } + //} + + private void InactivityTimer_Elapsed(object sender, ElapsedEventArgs e) { if (currentStatus == 3) { SetMainEnabled(0, "登录"); - inactivityTimer.Stop(); + mInactivityTimer.Stop(); } } + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 + private void MessageFilter_ActivityDetected(object sender, EventArgs e) { if (currentStatus == 3) // 仅admin状态重置计时器 { - inactivityTimer.Stop(); - inactivityTimer.Start(); + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //inactivityTimer.Stop(); + //inactivityTimer.Start(); + + mInactivityTimer.Stop(); + mInactivityTimer.Start(); + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 } } + #endregion ≡≡≡≡≡≡≡≡≡≡【inactivityTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【2】【END】 /// /// 程序关闭方法 @@ -1680,6 +1755,8 @@ namespace 精工涂胶检测项目 public void SetMainEnabled(int status, string account) { currentStatus = status; // 更新当前状态 + + #region ≡≡≡≡≡≡≡≡≡≡【inactivityTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【3】【BEGIN】 switch (status) { case 0: @@ -1692,7 +1769,10 @@ namespace 精工涂胶检测项目 this.登录ToolStripMenuItem1.Text = "登录"; this.退出登录ToolStripMenuItem.Enabled = false; this.btn_Auto.Enabled = false; - inactivityTimer.Stop(); + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //inactivityTimer.Stop(); + mInactivityTimer.Stop(); + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 break; case 1: this.登录ToolStripMenuItem.Enabled = true; @@ -1728,9 +1808,13 @@ namespace 精工涂胶检测项目 this.登录ToolStripMenuItem1.Enabled = false; this.退出登录ToolStripMenuItem.Enabled = true; this.btn_Auto.Enabled = true; - inactivityTimer.Start(); + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【BEGIN】 + //inactivityTimer.Start(); + mInactivityTimer.Start(); + //≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡【END】 break; } + #endregion ≡≡≡≡≡≡≡≡≡≡【inactivityTimer 定时器修改】:由 System.Windows.Forms.Timer 改为 System.Timers.Timer ≡≡≡≡≡≡≡≡≡≡【3】【END】 } private void 登录ToolStripMenuItem_Click(object sender, EventArgs e)