From af014ed33ca8c1e0587a2e4045cd4007ea6db0c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?liming=20=E8=94=A1?= Date: Tue, 21 Jul 2026 19:37:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JY.Inspection/HomeForm.cs | 24 ++----- JY.Inspection/HomeFormExtend.cs | 29 ++++++++ JY.Inspection/JY.Inspection.csproj | 3 + JY.Model/.vs/JY.Model.csproj.dtbcache.json | 1 + JY.Model/Common/ScheduledTask.cs | 55 +++++++++++++++ JY.Model/Common/TaskScheduler.cs | 78 ++++++++++++++++++++++ JY.Model/JY.Model.csproj | 6 +- JY.Model/JY.Model.csproj.user | 6 ++ 8 files changed, 182 insertions(+), 20 deletions(-) create mode 100644 JY.Inspection/HomeFormExtend.cs create mode 100644 JY.Model/.vs/JY.Model.csproj.dtbcache.json create mode 100644 JY.Model/Common/ScheduledTask.cs create mode 100644 JY.Model/Common/TaskScheduler.cs create mode 100644 JY.Model/JY.Model.csproj.user diff --git a/JY.Inspection/HomeForm.cs b/JY.Inspection/HomeForm.cs index b48b8e1..678db00 100644 --- a/JY.Inspection/HomeForm.cs +++ b/JY.Inspection/HomeForm.cs @@ -152,7 +152,6 @@ namespace JY.Inspection private ByteTransformBase TransformBase = new ByteTransformBase(); - /// /// 用于电芯出站时向FMS上报出站及生产数据 /// @@ -417,8 +416,7 @@ namespace JY.Inspection #endregion - - #region 页面事件 + #region 页面事件 private void HomeForm_Load(object sender, EventArgs e) { @@ -471,6 +469,8 @@ namespace JY.Inspection _speech.SelectVoice(neededVoice.VoiceInfo.Name); } + InitTaskScheduler(); + LogManagerControl.AddLog("程序已启动", LogAddtype.local); } @@ -867,7 +867,6 @@ namespace JY.Inspection { while (true) { - if (mCOMState.Token.IsCancellationRequested) { return; @@ -875,8 +874,6 @@ namespace JY.Inspection resetEventRecv.WaitOne(); if (isEnabled) { - - if (master !=null) { try @@ -884,8 +881,7 @@ namespace JY.Inspection List resylt = GetListInt(13); List resylt_float = new List(); OperateResult result = new OperateResult(); - - + for (int i = 0; i < Global.Instructions.Count; i++) { ushort startAddress = (ushort)System.Convert.ToInt32(Global.Instructions[i], 16); @@ -912,7 +908,7 @@ namespace JY.Inspection resylt_float.Add((Convert.ToDouble(resylt[index++]) / 10)); //线电压UAC resylt_float.Add((Convert.ToDouble(resylt[index++]) / 10)); - ; + //电流IA resylt_float.Add((Convert.ToDouble(resylt[index++]) / 1000)); //电流IB @@ -940,7 +936,7 @@ namespace JY.Inspection for (int i = 0; i < resylt.Count; i++) { omronPLCCom.lstMcUI[0].WriteDReg($"W380[{i.ToString()}]", (float)resylt_float[i]); - + } } this.Invoke(new Action(() => @@ -1402,9 +1398,6 @@ namespace JY.Inspection FrmCCDQuery frm = new FrmCCDQuery(); frm.ShowDialog(); } - - - #endregion #region PLC读写 @@ -1560,10 +1553,7 @@ namespace JY.Inspection omronPLCCom.lstMcUI[i].OmronStart(false); omronPLCCom.lstMcUI[i].IsRun = false; omronPLCCom.lstMcUI[i].btnStart.Text = "启动"; - omronPLCCom.lstMcUI[i].HeartBeat = false; - - - + omronPLCCom.lstMcUI[i].HeartBeat = false; } } } diff --git a/JY.Inspection/HomeFormExtend.cs b/JY.Inspection/HomeFormExtend.cs new file mode 100644 index 0000000..9d10da3 --- /dev/null +++ b/JY.Inspection/HomeFormExtend.cs @@ -0,0 +1,29 @@ +using JY.Model; +using JY.Model.Common; +using NPOI.SS.Formula.Functions; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; + +namespace JY.Inspection +{ + public partial class HomeForm + { + #region 定时任务 + TaskScheduler scheduler = null; + private void InitTaskScheduler() + { + if (scheduler == null) + { + scheduler = new TaskScheduler(); + } + + scheduler.AddTask(state => { + Debug.WriteLine("Hello"); + }, interval: 1000 * 60); + } + #endregion + } +} diff --git a/JY.Inspection/JY.Inspection.csproj b/JY.Inspection/JY.Inspection.csproj index 385c97e..d79d98f 100644 --- a/JY.Inspection/JY.Inspection.csproj +++ b/JY.Inspection/JY.Inspection.csproj @@ -307,6 +307,9 @@ Component + + Form + diff --git a/JY.Model/.vs/JY.Model.csproj.dtbcache.json b/JY.Model/.vs/JY.Model.csproj.dtbcache.json new file mode 100644 index 0000000..0fe2ded --- /dev/null +++ b/JY.Model/.vs/JY.Model.csproj.dtbcache.json @@ -0,0 +1 @@ +{"RootPath":"D:\\CodeProject\\1440\\JY.Model","ProjectFileName":"JY.Model.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"BL.Entity\\Chart24HourData.cs"},{"SourceFile":"BL.Entity\\RequestResult.cs"},{"SourceFile":"DB.Entity\\AbnormalVoice.cs"},{"SourceFile":"DB.Entity\\AlarmData.cs"},{"SourceFile":"DB.Entity\\CamInfor.cs"},{"SourceFile":"DB.Entity\\HourprodEntity.cs"},{"SourceFile":"DB.Entity\\ChartDataType.cs"},{"SourceFile":"DB.Entity\\BlankingData.cs"},{"SourceFile":"DB.Entity\\ParaRange.cs"},{"SourceFile":"DB.Entity\\PLCConfigBase.cs"},{"SourceFile":"DB.Entity\\PLCConfigPara.cs"},{"SourceFile":"DB.Entity\\ProductModel.cs"},{"SourceFile":"DB.Entity\\ProductParaBase.cs"},{"SourceFile":"DB.Entity\\ProductPara.cs"},{"SourceFile":"DB.Entity\\SystemConfig.cs"},{"SourceFile":"DB.Entity\\FeedingData.cs"},{"SourceFile":"DB.Entity\\TrayTestEntry.cs"},{"SourceFile":"Enums\\EnumAutority.cs"},{"SourceFile":"Enums\\EnumResultType.cs"},{"SourceFile":"Enums\\EnumSearchType.cs"},{"SourceFile":"Enums\\EnumUpMesStatus.cs"},{"SourceFile":"Excel\\CollectItemCfg.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"}],"References":[{"Reference":"D:\\CodeProject\\1440\\packages\\CsvHelper.30.0.1\\lib\\net45\\CsvHelper.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\CodeProject\\1440\\packages\\SqlSugar.5.1.4.207\\lib\\SqlSugar.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\CodeProject\\1440\\packages\\System.Buffers.4.5.1\\lib\\net461\\System.Buffers.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.ComponentModel.DataAnnotations.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\CodeProject\\1440\\packages\\System.Memory.4.5.4\\lib\\net461\\System.Memory.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Numerics.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\CodeProject\\1440\\packages\\System.Numerics.Vectors.4.5.0\\lib\\net46\\System.Numerics.Vectors.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"D:\\CodeProject\\1440\\packages\\System.Runtime.CompilerServices.Unsafe.4.5.3\\lib\\net461\\System.Runtime.CompilerServices.Unsafe.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Facades\\System.ValueTuple.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"D:\\JY.Inspection\\JY.Model.dll","OutputItemRelativePath":"JY.Model.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]} \ No newline at end of file diff --git a/JY.Model/Common/ScheduledTask.cs b/JY.Model/Common/ScheduledTask.cs new file mode 100644 index 0000000..87b095d --- /dev/null +++ b/JY.Model/Common/ScheduledTask.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Concurrent; +using System.Threading; + +namespace JY.Model.Common +{ + public class ScheduledTask : IDisposable + { + private Timer _timer; + private readonly TimerCallback _callback; + private readonly object _state; + + public Guid TaskId { get; } + public int Interval { get; private set; } // 毫秒 + public bool IsRunning { get; private set; } + + public ScheduledTask(Guid taskId, TimerCallback callback, int interval, object state = null) + { + TaskId = taskId; + _callback = callback; + Interval = interval; + _state = state; + IsRunning = false; + } + + public void Start() + { + if (IsRunning) return; + _timer = new Timer(_callback, _state, 0, Interval); + IsRunning = true; + } + + public void ChangeInterval(int newInterval) + { + Interval = newInterval; + if (IsRunning && _timer != null) + { + _timer.Change(0, newInterval); + } + } + + public void Stop() + { + if (!IsRunning) return; + _timer?.Change(Timeout.Infinite, Timeout.Infinite); + IsRunning = false; + } + + public void Dispose() + { + Stop(); + _timer?.Dispose(); + } + } +} diff --git a/JY.Model/Common/TaskScheduler.cs b/JY.Model/Common/TaskScheduler.cs new file mode 100644 index 0000000..43ef01e --- /dev/null +++ b/JY.Model/Common/TaskScheduler.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace JY.Model.Common +{ + /// + /// 定时任务管理器 + /// + public class TaskScheduler : IDisposable + { + private readonly ConcurrentDictionary _tasks + = new ConcurrentDictionary(); + + /// + /// 添加一个新任务 + /// + public Guid AddTask(TimerCallback callback, int interval, object state = null) + { + var taskId = Guid.NewGuid(); + var task = new ScheduledTask(taskId, callback, interval, state); + _tasks[taskId] = task; + task.Start(); + return taskId; + } + + /// + /// 移除一个任务 + /// + public bool RemoveTask(Guid taskId) + { + if (_tasks.TryRemove(taskId, out var task)) + { + task.Dispose(); + return true; + } + return false; + } + + /// + /// 修改任务间隔 + /// + public bool ChangeInterval(Guid taskId, int newInterval) + { + if (_tasks.TryGetValue(taskId, out var task)) + { + task.ChangeInterval(newInterval); + return true; + } + return false; + } + + /// + /// 停止所有任务 + /// + public void StopAll() + { + foreach (var task in _tasks.Values) + { + task.Stop(); + } + } + + public void Dispose() + { + StopAll(); + foreach (var task in _tasks.Values) + { + task.Dispose(); + } + _tasks.Clear(); + } + } +} diff --git a/JY.Model/JY.Model.csproj b/JY.Model/JY.Model.csproj index 56fde9a..de44b3f 100644 --- a/JY.Model/JY.Model.csproj +++ b/JY.Model/JY.Model.csproj @@ -67,6 +67,8 @@ + + @@ -93,8 +95,6 @@ - - - + \ No newline at end of file diff --git a/JY.Model/JY.Model.csproj.user b/JY.Model/JY.Model.csproj.user new file mode 100644 index 0000000..0b24643 --- /dev/null +++ b/JY.Model/JY.Model.csproj.user @@ -0,0 +1,6 @@ + + + + ProjectFiles + + \ No newline at end of file