TemperatureControllerViewModel.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. using Aitex.Core.Util;
  2. using MECF.Framework.Common.CommonData.TemperatureControl;
  3. using MECF.Framework.Common.DataCenter;
  4. using MECF.Framework.Common.Device.TemperatureController;
  5. using MECF.Framework.Common.Utilities;
  6. using CyberX8_MainPages.Model;
  7. using Prism.Mvvm;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Collections.ObjectModel;
  11. using System.Linq;
  12. using System.Reflection;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Timers;
  16. using System.Windows.Threading;
  17. using MECF.Framework.Common.Persistent.Temperature;
  18. using MECF.Framework.Common.Persistent.Prewet;
  19. using MECF.Framework.Common.Persistent.Reservoirs;
  20. namespace CyberX8_MainPages.ViewModels
  21. {
  22. public class TemperatureControllerViewModel : BindableBase
  23. {
  24. #region 常量
  25. private const string TEMPERATURE_DEVICELIST = "TemperatureDeviceList";
  26. private const string TEMPERATURE_DATA = "TemperatureData";
  27. private const string IS_CONNECTED = "IsConnected";
  28. private const string PERSISTENT_VALUE = "PersistentValue";
  29. #endregion
  30. #region 内部变量
  31. /// <summary>
  32. /// Temperature设备配置
  33. /// </summary>
  34. private ObservableCollection<TemperatureUIData> _temperatureUIDatas;
  35. /// <summary>
  36. /// 持久化数据
  37. /// </summary>
  38. private TCPersistentValue _tCPersistent;
  39. /// <summary>
  40. /// 模块名称
  41. /// </summary>
  42. private string _moduleName;
  43. /// <summary>
  44. /// 查询后台数据集合
  45. /// </summary>
  46. private List<string> _rtDataKeys = new List<string>();
  47. /// <summary>
  48. /// 查询后台的数据
  49. /// </summary>
  50. private Dictionary<string, object> _rtDataValues;
  51. /// <summary>
  52. /// 定时器
  53. /// </summary>
  54. private DispatcherTimer _timer;
  55. /// <summary>
  56. ///当前模式是否可用
  57. /// </summary>
  58. private bool _isEnabled;
  59. /// <summary>
  60. /// Persistent
  61. /// </summary>
  62. private ReservoirsPersistentValue _reservoirsPersistent;
  63. #endregion
  64. #region 属性
  65. /// <summary>
  66. /// 模块名称
  67. /// </summary>
  68. public string ModuleName { get { return _moduleName; } set { SetProperty(ref _moduleName, value); } }
  69. /// <summary>
  70. /// Temperature设备数据集合
  71. /// </summary>
  72. public ObservableCollection<TemperatureUIData> TemperatureUIDatas { get { return _temperatureUIDatas; } set { SetProperty(ref _temperatureUIDatas, value); } }
  73. public TCPersistentValue TCPersistent
  74. {
  75. get { return _tCPersistent; }
  76. set { SetProperty(ref _tCPersistent, value); }
  77. }
  78. public bool IsEnabled
  79. {
  80. get { return _isEnabled; }
  81. set { SetProperty(ref _isEnabled, value); }
  82. }
  83. public ReservoirsPersistentValue ReservoirsPersistent
  84. {
  85. get { return _reservoirsPersistent; }
  86. set { SetProperty(ref _reservoirsPersistent, value); }
  87. }
  88. #endregion
  89. /// <summary>
  90. /// 构造函数
  91. /// </summary>
  92. public TemperatureControllerViewModel()
  93. {
  94. }
  95. /// <summary>
  96. /// 加载数据
  97. /// </summary>
  98. public void LoadData(string systemName)
  99. {
  100. ModuleName = systemName;
  101. List<string> lst = new List<string>();
  102. lst.Add($"{ModuleName}.{TEMPERATURE_DEVICELIST}");
  103. _rtDataValues = QueryDataClient.Instance.Service.PollData(lst);
  104. if (_rtDataValues != null)
  105. {
  106. TemperatureDeviceConfig config = CommonFunction.GetValue<TemperatureDeviceConfig>(_rtDataValues, $"{ModuleName}.{TEMPERATURE_DEVICELIST}");
  107. TemperatureUIDatas = new ObservableCollection<TemperatureUIData>();
  108. foreach(TemperatureDevice item in config.TemperatureDevices)
  109. {
  110. TemperatureUIData temp = new TemperatureUIData();
  111. temp.ReserviorName = item.ReserviorName;
  112. temp.Name = item.Name;
  113. TemperatureUIDatas.Add(temp);
  114. }
  115. InitialKeys(config);
  116. }
  117. if (_timer == null)
  118. {
  119. _timer = new DispatcherTimer();
  120. _timer.Interval = TimeSpan.FromMilliseconds(200);
  121. _timer.Tick += Timer_Tick;
  122. }
  123. _timer.Start();
  124. }
  125. /// <summary>
  126. /// 定时器执行
  127. /// </summary>
  128. /// <param name="sender"></param>
  129. /// <param name="e"></param>
  130. private void Timer_Tick(object sender, EventArgs e)
  131. {
  132. if (_rtDataKeys.Count != 0)
  133. {
  134. _rtDataValues = QueryDataClient.Instance.Service.PollData(_rtDataKeys);
  135. if (_rtDataValues != null && _rtDataValues.Count != 0 && TemperatureUIDatas != null)
  136. {
  137. foreach (TemperatureUIData item in TemperatureUIDatas)
  138. {
  139. TemperatureControllerData data = CommonFunction.GetValue<TemperatureControllerData>(_rtDataValues, $"{item.Name}.{TEMPERATURE_DATA}");
  140. if (data != null)
  141. {
  142. data.IsConnected = CommonFunction.GetValue<bool>(_rtDataValues, $"{item.Name}.{IS_CONNECTED}");
  143. TCPersistent = CommonFunction.GetValue<TCPersistentValue>(_rtDataValues, $"{item.Name}.{PERSISTENT_VALUE}");
  144. ReservoirsPersistent = CommonFunction.GetValue<ReservoirsPersistentValue>(_rtDataValues, $"{item.ReserviorName}.{PERSISTENT_VALUE}");
  145. data.AutoStatus = ReservoirsPersistent.OperatingMode;
  146. data.SetPoint = TCPersistent.SetPoint;
  147. data.SetPointMaxValue = TCPersistent.SetPointHighLimit;
  148. data.SetPointMinValue = TCPersistent.SetPointLowLimit;
  149. item.SetValue(data);
  150. if ("Auto".Equals(item.AutoStatus) || (item.Alarm!=null && (item.Alarm.Substring(0, 10) + item.Alarm.Substring(13, 1) + item.Alarm.Substring(15)).Contains("1")))
  151. {
  152. item.IsEnable = false;
  153. }
  154. else
  155. {
  156. item.IsEnable = true;
  157. }
  158. if ("Auto".Equals(item.AutoStatus) || (item.Alarm != null && (item.Alarm.Substring(0, 10) + item.Alarm.Substring(13, 1) + item.Alarm.Substring(15)).Contains("1")) || "Disable".Equals(item.ControlOperationModel))
  159. {
  160. item.IsApplyEnable = false;
  161. }
  162. else
  163. {
  164. item.IsApplyEnable = true;
  165. }
  166. }
  167. }
  168. }
  169. }
  170. }
  171. /// <summary>
  172. /// 隐藏
  173. /// </summary>
  174. public void Hide()
  175. {
  176. if (_timer != null)
  177. {
  178. _timer.Stop();
  179. }
  180. }
  181. /// <summary>
  182. /// 初始化Keys
  183. /// </summary>
  184. private void InitialKeys(TemperatureDeviceConfig config)
  185. {
  186. _rtDataKeys.Clear();
  187. foreach (TemperatureDevice item in config.TemperatureDevices)
  188. {
  189. _rtDataKeys.Add($"{item.Name}.{TEMPERATURE_DATA}");
  190. _rtDataKeys.Add($"{item.Name}.{IS_CONNECTED}");
  191. _rtDataKeys.Add($"{item.Name}.{PERSISTENT_VALUE}");
  192. _rtDataKeys.Add($"{item.ReserviorName}.{PERSISTENT_VALUE}");
  193. }
  194. }
  195. }
  196. }