using HMI.Core.Manager; using HMI.UI.Util; using PLCHelper; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Timers; using System.Windows; using System.Windows.Controls; namespace Plugin.BurnIn { /// /// Cooler.xaml 的交互逻辑 /// public partial class Cooler : UserControl, INotifyPropertyChanged { #region ... public virtual event PropertyChangedEventHandler PropertyChanged; protected virtual void Set([CallerMemberName] string name = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } protected void Set(ref T old, T @new, [CallerMemberName] string propertyName = null) { old = @new; if (propertyName != null) { Set(propertyName); } } #endregion public int index { get; private set; } public string Title { get; set; } private System.Timers.Timer timer; public Cooler(int index) { DataContext = this; this.index = index; this.Title = $"第{index + 1}路水冷机"; InitializeComponent(); } private ushort status; public ushort Status { get => status; set { Set(ref status, value); } } private int totalTime; private string labelContent = "吹水中"; public string LabelContent { get => labelContent; set { Set(ref labelContent, value); } } private void InitTimer(int time) { if (time <= 0) { time = 240; } totalTime = time; LabelContent = $"吹水中\r\n剩{totalTime}s..."; timer = new System.Timers.Timer(); timer.Interval = 1000; timer.Elapsed += Timer_Elapsed; timer.Enabled = true; } private void Timer_Elapsed(object sender, ElapsedEventArgs e) { try { timer.AutoReset = false; if (totalTime > 0) { totalTime -= 1; LabelContent = $"吹水中\r\n剩{totalTime}s..."; } else { if (S7Context.WriteData("", $"Cooler{index + 1}_Status", 0, out string errMsg)) { Status = 0; Dispatcher.Invoke(() => { startBtn.IsEnabled = true; }); } else { Dispatcher.Invoke(() => { ToastHelper.Error(errMsg); }); } Release(); } } catch (Exception ex) { } finally { if (timer?.Enabled == true) timer.AutoReset = true; } } private void Start_Click(object sender, RoutedEventArgs e) { if (timer != null) return; var btn = sender as Button; int totalTime = 240; try { var p = ParameterManager.GetCommonParameterByName("吹水时间")?.Value; if (!string.IsNullOrEmpty(p)) totalTime = int.Parse(p); } catch (Exception ex) { } if (MsgBoxHelper2.WarnChoose($"第 [{index + 1}] 路水冷机确定要{btn.Content}吗?") == MessageBoxResult.OK) { try { if (S7Context.WriteData("", $"Cooler{index + 1}_Status", 2, out string errMsg)) { Status = 2; InitTimer(totalTime); btn.IsEnabled = false; } else { ToastHelper.Error(errMsg); } } catch (Exception ex) { ToastHelper.Error(ex.Message); } } } private void Stop_Click(object sender, RoutedEventArgs e) { var btn = sender as Button; if (MsgBoxHelper2.WarnChoose($"第 [{index + 1}] 路水冷机确定要{btn.Content}吗?") == MessageBoxResult.OK) { try { if (timer != null) { timer.Enabled = false; timer.Dispose(); timer = null; } if (S7Context.WriteData("", $"Cooler{index + 1}_Status", 0, out string errMsg)) { Status = 0; startBtn.IsEnabled = true; } else { ToastHelper.Error(errMsg); } } catch (Exception ex) { ToastHelper.Error(ex.Message); } } } public void Release() { if (timer != null) { timer.Enabled = false; timer.Dispose(); timer = null; } } } }