ButterflyValveViewModel.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using MECF.Framework.Common.DataCenter;
  2. using MECF.Framework.Common.OperationCenter;
  3. using Prism.Commands;
  4. using Prism.Mvvm;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Threading;
  11. namespace Venus_MainPages.ViewModels
  12. {
  13. public class ButterflyValveViewModel : BindableBase
  14. {
  15. #region 私有字段
  16. private string ModuleName = "PMA";
  17. private string m_DeviceName = "PendulumValve";
  18. private bool m_IsPositionMode;
  19. private int m_SetValue;
  20. private int? m_FeedBackValue;
  21. private List<string> m_RtDataKeys;
  22. private Dictionary<string, object> m_RtDataValues;
  23. #endregion
  24. #region 属性
  25. public bool IsPositionMode
  26. {
  27. get { return m_IsPositionMode; }
  28. set
  29. {
  30. if (SetValue > 1000&&value==true)
  31. {
  32. SetValue = 1000;
  33. }
  34. SetProperty(ref m_IsPositionMode, value);
  35. }
  36. }
  37. public int SetValue
  38. {
  39. get { return m_SetValue; }
  40. set
  41. {
  42. if (value > 1000 && IsPositionMode==true)
  43. {
  44. value = 1000;
  45. }
  46. if (value < 0 && IsPositionMode == true)
  47. {
  48. value = 0;
  49. }
  50. SetProperty(ref m_SetValue, value);
  51. }
  52. }
  53. public int? FeedBackValue
  54. {
  55. get { return m_FeedBackValue; }
  56. set { SetProperty(ref m_FeedBackValue, value); }
  57. }
  58. public string DeviceName
  59. {
  60. get { return m_DeviceName; }
  61. set { SetProperty(ref m_DeviceName, value); }
  62. }
  63. public Dictionary<string, object> RtDataValues
  64. {
  65. get { return m_RtDataValues; }
  66. set { SetProperty(ref m_RtDataValues, value); }
  67. }
  68. #endregion
  69. #region 命令
  70. private DelegateCommand _SetCommand;
  71. public DelegateCommand SetCommand =>
  72. _SetCommand ?? (_SetCommand = new DelegateCommand(OnSet));
  73. #endregion
  74. public ButterflyValveViewModel()
  75. {
  76. m_RtDataKeys = new List<string>();
  77. m_RtDataKeys.Add($"{ModuleName}.PendulumValve.Position");
  78. m_RtDataKeys.Add($"{ModuleName}.PendulumValve.Pressure");
  79. DispatcherTimer timer = new DispatcherTimer();
  80. timer.Interval = TimeSpan.FromSeconds(1);
  81. timer.Tick += timer_Tick;
  82. timer.Start();
  83. }
  84. #region 命令方法
  85. private void OnSet()
  86. {
  87. if (IsPositionMode == true)
  88. {
  89. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetPVPostion",SetValue);
  90. }
  91. else
  92. {
  93. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetPVPressure",SetValue);
  94. }
  95. }
  96. void timer_Tick(object sender, EventArgs e)
  97. {
  98. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  99. if (IsPositionMode == true)
  100. {
  101. FeedBackValue = (int)RtDataValues[$"{ModuleName}.PendulumValve.Position"];
  102. ////SetValue = (SetValue > 1000||SetValue<0) ? 0 : SetValue;
  103. //if (SetValue > 1000)
  104. //{
  105. //SetValue = 1000;
  106. //}
  107. }
  108. else
  109. {
  110. FeedBackValue = (int)RtDataValues[$"{ModuleName}.PendulumValve.Pressure"];
  111. }
  112. }
  113. #endregion
  114. }
  115. }