MainViewModel.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using FestoDebugger.Beckoff;
  2. using FestoDebugger.Models;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Collections.ObjectModel;
  6. using System.ComponentModel;
  7. using System.Data;
  8. using System.Linq;
  9. using System.Net;
  10. using System.Net.Sockets;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. using System.Windows.Input;
  15. using System.Windows.Media;
  16. using System.Windows.Threading;
  17. namespace FestoDebugger.ViewModels
  18. {
  19. public class MainViewModel : ViewModelBase
  20. {
  21. #region 内部变量
  22. private static bool IsInDesignMode => DesignerProperties.GetIsInDesignMode(new DependencyObject());
  23. private ObservableCollection<SignalModuleData> _signalModuleDatas;
  24. /// <summary>
  25. /// 定时器
  26. /// </summary>
  27. DispatcherTimer _timer;
  28. #endregion
  29. #region 属性
  30. public ObservableCollection<SignalModuleData> SignalModuleDatas
  31. {
  32. get => _signalModuleDatas;
  33. set => SetProperty(ref _signalModuleDatas, value);
  34. }
  35. #endregion
  36. public MainViewModel()
  37. {
  38. if (IsInDesignMode)
  39. {
  40. return;
  41. }
  42. LoadSignalConfig();
  43. SignalModuleDatas = new ObservableCollection<SignalModuleData>();
  44. if (_timer == null)
  45. {
  46. _timer = new DispatcherTimer();
  47. _timer.Interval = TimeSpan.FromMilliseconds(100);
  48. _timer.Tick += Timer_Tick;
  49. }
  50. _timer.Start();
  51. }
  52. /// <summary>
  53. /// 加载配置文件,初始化数据
  54. /// </summary>
  55. private void LoadSignalConfig()
  56. {
  57. BeckhoffManager.Instance.Initialize();
  58. TwincatAdoManager.Instance.Initialize();
  59. }
  60. /// <summary>
  61. /// 定时器执行
  62. /// </summary>
  63. /// <param name="sender"></param>
  64. /// <param name="e"></param>
  65. private void Timer_Tick(object sender, EventArgs e)
  66. {
  67. Dictionary<string, object> NameValueDic = BeckhoffIOManager.Instance.GetNameValueDic();
  68. foreach (KeyValuePair<string, object> kvp in NameValueDic)
  69. {
  70. bool exists = SignalModuleDatas.Any(p => p.ModuleName == kvp.Key);
  71. if(!exists)
  72. {
  73. SignalModuleData signalModuleData = new SignalModuleData();
  74. signalModuleData.ModuleName = kvp.Key;
  75. signalModuleData.SignalOn = (bool)kvp.Value;
  76. SignalModuleDatas.Add(signalModuleData);
  77. }
  78. else
  79. {
  80. SignalModuleDatas.FirstOrDefault(p => p.ModuleName == kvp.Key).SignalOn = (bool)kvp.Value;
  81. }
  82. }
  83. }
  84. }
  85. }