using FestoDebugger.Beckoff; using FestoDebugger.Models; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Data; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; using System.Windows.Media; using System.Windows.Threading; namespace FestoDebugger.ViewModels { public class MainViewModel : ViewModelBase { #region 内部变量 private static bool IsInDesignMode => DesignerProperties.GetIsInDesignMode(new DependencyObject()); private ObservableCollection _signalModuleDatas; /// /// 定时器 /// DispatcherTimer _timer; #endregion #region 属性 public ObservableCollection SignalModuleDatas { get => _signalModuleDatas; set => SetProperty(ref _signalModuleDatas, value); } #endregion public MainViewModel() { if (IsInDesignMode) { return; } LoadSignalConfig(); SignalModuleDatas = new ObservableCollection(); if (_timer == null) { _timer = new DispatcherTimer(); _timer.Interval = TimeSpan.FromMilliseconds(100); _timer.Tick += Timer_Tick; } _timer.Start(); } /// /// 加载配置文件,初始化数据 /// private void LoadSignalConfig() { BeckhoffManager.Instance.Initialize(); TwincatAdoManager.Instance.Initialize(); } /// /// 定时器执行 /// /// /// private void Timer_Tick(object sender, EventArgs e) { Dictionary NameValueDic = BeckhoffIOManager.Instance.GetNameValueDic(); foreach (KeyValuePair kvp in NameValueDic) { bool exists = SignalModuleDatas.Any(p => p.ModuleName == kvp.Key); if(!exists) { SignalModuleData signalModuleData = new SignalModuleData(); signalModuleData.ModuleName = kvp.Key; signalModuleData.SignalOn = (bool)kvp.Value; SignalModuleDatas.Add(signalModuleData); } else { SignalModuleDatas.FirstOrDefault(p => p.ModuleName == kvp.Key).SignalOn = (bool)kvp.Value; } } } } }