LPSensorViewModel.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using Caliburn.Micro;
  2. using Caliburn.Micro.Core;
  3. using Aitex.Core.Common.DeviceData;
  4. using Aitex.Core.UI.ControlDataContext;
  5. using Aitex.Core.Util;
  6. using MECF.Framework.Common.DataCenter;
  7. using MECF.Framework.Common.OperationCenter;
  8. using FurnaceUI.Models;
  9. using FurnaceUI.Views.Editors;
  10. using System.Collections.ObjectModel;
  11. using System.Collections.Generic;
  12. using System.Threading.Tasks;
  13. using System.Reflection;
  14. using System;
  15. using Aitex.Core.RT.Log;
  16. using System.Linq;
  17. using System.Windows;
  18. using Aitex.Core.RT.SCCore;
  19. namespace FurnaceUI.Views.Maintenances
  20. {
  21. public class LPSensorViewModel : FurnaceUIViewModelBase
  22. {
  23. public bool IsManagerPermission { get => this.Permission == 3; }
  24. [Subscription("Rt.Status")]
  25. public string RtStatus { get; set; }
  26. public bool IsEnableManualOperation => IsSystemStaus;
  27. public bool IsSystemStaus => (RtStatus != "AutoRunning");
  28. #region stage sensors
  29. [Subscription("System.SensorStation17Presence.DeviceData")]
  30. public AITSensorData SensorStation17Presence { get; set; }
  31. [Subscription("System.SensorStation18Presence.DeviceData")]
  32. public AITSensorData SensorStation18Presence { get; set; }
  33. [Subscription("System.SensorStation17APresence.DeviceData")]
  34. public AITSensorData SensorStation17APresence { get; set; }
  35. [Subscription("System.SensorStation18APresence.DeviceData")]
  36. public AITSensorData SensorStation18APresence { get; set; }
  37. [Subscription("System.Valve1EX.DeviceData")]
  38. public AITSensorData Valve1EX { get; set; }
  39. [Subscription("System.Valve1RE.DeviceData")]
  40. public AITSensorData Valve1RE { get; set; }
  41. [Subscription("System.Valve2EX.DeviceData")]
  42. public AITSensorData Valve2EX { get; set; }
  43. [Subscription("System.Valve2RE.DeviceData")]
  44. public AITSensorData Valve2RE { get; set; }
  45. [Subscription("LP1.LoadportState")]
  46. public string LP1State { get; set; }
  47. [Subscription("LP2.LoadportState")]
  48. public string LP2State { get; set; }
  49. [Subscription("LP3.LoadportState")]
  50. public string LP3State { get; set; }
  51. [Subscription("LP4.LoadportState")]
  52. public string LP4State { get; set; }
  53. [Subscription("LP1.CarrierId")]
  54. public string LP1CarrierId { get; set; }
  55. [Subscription("LP2.CarrierId")]
  56. public string LP2CarrierId { get; set; }
  57. [Subscription("LP3.CarrierId")]
  58. public string LP3CarrierId { get; set; }
  59. [Subscription("LP4.CarrierId")]
  60. public string LP4CarrierId { get; set; }
  61. #endregion
  62. public ObservableCollection<SensorViewItem> LPSensors { get; set; } = new ObservableCollection<SensorViewItem>();
  63. public LPSensorViewModel()
  64. {
  65. }
  66. protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)
  67. {
  68. base.InvokeBeforeUpdateProperty(data);
  69. }
  70. public override void UpdateSubscribe(Dictionary<string, object> data, object target, string module = null)
  71. {
  72. Parallel.ForEach(target.GetType().GetProperties().Where(_hasSubscriptionAttribute),
  73. property =>
  74. {
  75. PropertyInfo pi = (PropertyInfo)property;
  76. SubscriptionAttribute subscription = property.GetCustomAttributes(false).First(_isSubscriptionAttribute) as SubscriptionAttribute;
  77. string key = subscription.ModuleKey;
  78. key = module == null ? key : string.Format("{0}.{1}", module, key);
  79. if (_subscribedKeys.Contains(key) && data.ContainsKey(key))
  80. {
  81. try
  82. {
  83. var convertedValue = Convert.ChangeType(data[key], pi.PropertyType);
  84. var originValue = Convert.ChangeType(pi.GetValue(target, null), pi.PropertyType);
  85. if ((convertedValue as AITSensorData) != null && originValue != convertedValue)
  86. {
  87. pi.SetValue(target, convertedValue, null);
  88. //if ((convertedValue as AITSensorData).DeviceName.ToLower().Contains(_para))
  89. //{
  90. Update(LPSensors, convertedValue as AITSensorData);
  91. //}
  92. }
  93. }
  94. catch (Exception ex)
  95. {
  96. LOG.Error("由RT返回的数据更新失败" + key, ex);
  97. }
  98. }
  99. });
  100. base.UpdateSubscribe(data, target, module);
  101. }
  102. private void Update(ObservableCollection<SensorViewItem> sensors, object obj)
  103. {
  104. AITSensorData data = obj as AITSensorData;
  105. if (data != null && sensors.Count > 0)
  106. {
  107. var item = sensors.SingleOrDefault(x => x.Name == data.DeviceName);
  108. if (item != null)
  109. {
  110. item.Value = data.Value;
  111. }
  112. }
  113. }
  114. public void Home(object para)
  115. {
  116. InvokeClient.Instance.Service.DoOperation($"{para}.Home", "");
  117. }
  118. public void SetClamp(object para)
  119. {
  120. InvokeClient.Instance.Service.DoOperation($"{para}.Unload", "");
  121. }
  122. public void SetRelease(object para)
  123. {
  124. InvokeClient.Instance.Service.DoOperation($"{para}.Load", "");
  125. }
  126. public void ReadCarrierId(string moduleID)
  127. {
  128. InvokeClient.Instance.Service.DoOperation($"{moduleID}.ReadCarrierId");
  129. }
  130. public void ClosedCmd()
  131. {
  132. (GetView() as Window).Close();
  133. }
  134. }
  135. }