SMIFViewModel.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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. namespace FurnaceUI.Views.Maintenances
  19. {
  20. public class SMIFViewModel : FurnaceUIViewModelBase
  21. {
  22. public bool IsManagerPermission { get => this.Permission == 3; }
  23. #region SMIFA sensors
  24. [Subscription("System.SensorSmif1PodLockPosition.DeviceData")]
  25. public AITSensorData SensorSmif1PodLockPosition { get; set; }
  26. [Subscription("System.SensorSmif1PodUnlockPosition.DeviceData")]
  27. public AITSensorData SensorSmif1PodUnlockPosition { get; set; }
  28. [Subscription("System.SensorSmif1PodOpenPosition.DeviceData")]
  29. public AITSensorData SensorSmif1PodOpenPosition { get; set; }
  30. [Subscription("System.SensorSmif1PodClosePosition.DeviceData")]
  31. public AITSensorData SensorSmif1PodClosePosition { get; set; }
  32. [Subscription("System.SensorSmif1PodPresence.DeviceData")]
  33. public AITSensorData SensorSmif1PodPresence { get; set; }
  34. [Subscription("System.SensorSmif1ZAxisUnloadPosition.DeviceData")]
  35. public AITSensorData SensorSmif1ZAxisUnloadPosition { get; set; }
  36. [Subscription("System.SensorSmif1ZAxisLoadPosition.DeviceData")]
  37. public AITSensorData SensorSmif1ZAxisLoadPosition { get; set; }
  38. [Subscription("System.SensorSmif1ZAxisPosition1.DeviceData")]
  39. public AITSensorData SensorSmif1ZAxisPosition1 { get; set; }
  40. [Subscription("System.SensorSmif1ZAxisPosition2.DeviceData")]
  41. public AITSensorData SensorSmif1ZAxisPosition2 { get; set; }
  42. [Subscription("System.SensorSmif1RotateAxisCheck1.DeviceData")]
  43. public AITSensorData SensorSmif1RotateAxisCheck1 { get; set; }
  44. [Subscription("System.SensorSmif1RotateAxisCheck2.DeviceData")]
  45. public AITSensorData SensorSmif1RotateAxisCheck2 { get; set; }
  46. [Subscription("System.SensorSmif1SlideAxisExtend.DeviceData")]
  47. public AITSensorData SensorSmif1SlideAxisExtend { get; set; }
  48. [Subscription("System.SensorSmif1SlideAxisRetract.DeviceData")]
  49. public AITSensorData SensorSmif1SlideAxisRetract { get; set; }
  50. [Subscription("System.SensorSmif1ProtrudedWafer.DeviceData")]
  51. public AITSensorData SensorSmif1ProtrudedWafer { get; set; }
  52. [Subscription("System.SensorSmif1Mapping.DeviceData")]
  53. public AITSensorData SensorSmif1Mapping { get; set; }
  54. [Subscription("System.SensorSmif1Ready.DeviceData")]
  55. public AITSensorData SensorSmif1Ready { get; set; }
  56. [Subscription("System.SensorSmif1Homed.DeviceData")]
  57. public AITSensorData SensorSmif1Homed { get; set; }
  58. #endregion
  59. #region SMIFB sensors
  60. [Subscription("System.SensorSmif2PodLockPosition.DeviceData")]
  61. public AITSensorData SensorSmif2PodLockPosition { get; set; }
  62. [Subscription("System.SensorSmif2PodUnlockPosition.DeviceData")]
  63. public AITSensorData SensorSmif2PodUnlockPosition { get; set; }
  64. [Subscription("System.SensorSmif2PodOpenPosition.DeviceData")]
  65. public AITSensorData SensorSmif2PodOpenPosition { get; set; }
  66. [Subscription("System.SensorSmif2PodClosePosition.DeviceData")]
  67. public AITSensorData SensorSmif2PodClosePosition { get; set; }
  68. [Subscription("System.SensorSmif2PodPresence.DeviceData")]
  69. public AITSensorData SensorSmif2PodPresence { get; set; }
  70. [Subscription("System.SensorSmif2ZAxisUnloadPosition.DeviceData")]
  71. public AITSensorData SensorSmif2ZAxisUnloadPosition { get; set; }
  72. [Subscription("System.SensorSmif2ZAxisLoadPosition.DeviceData")]
  73. public AITSensorData SensorSmif2ZAxisLoadPosition { get; set; }
  74. [Subscription("System.SensorSmif2ZAxisPosition1.DeviceData")]
  75. public AITSensorData SensorSmif2ZAxisPosition1 { get; set; }
  76. [Subscription("System.SensorSmif2ZAxisPosition2.DeviceData")]
  77. public AITSensorData SensorSmif2ZAxisPosition2 { get; set; }
  78. [Subscription("System.SensorSmif2RotateAxisCheck1.DeviceData")]
  79. public AITSensorData SensorSmif2RotateAxisCheck1 { get; set; }
  80. [Subscription("System.SensorSmif2RotateAxisCheck2.DeviceData")]
  81. public AITSensorData SensorSmif2RotateAxisCheck2 { get; set; }
  82. [Subscription("System.SensorSmif2SlideAxisExtend.DeviceData")]
  83. public AITSensorData SensorSmif2SlideAxisExtend { get; set; }
  84. [Subscription("System.SensorSmif2SlideAxisRetract.DeviceData")]
  85. public AITSensorData SensorSmif2SlideAxisRetract { get; set; }
  86. [Subscription("System.SensorSmif2ProtrudedWafer.DeviceData")]
  87. public AITSensorData SensorSmif2ProtrudedWafer { get; set; }
  88. [Subscription("System.SensorSmif2Mapping.DeviceData")]
  89. public AITSensorData SensorSmif2Mapping { get; set; }
  90. [Subscription("System.SensorSmif2Ready.DeviceData")]
  91. public AITSensorData SensorSmif2Ready { get; set; }
  92. [Subscription("System.SensorSmif2Homed.DeviceData")]
  93. public AITSensorData SensorSmif2Homed { get; set; }
  94. [Subscription("SMIFA.Status")]
  95. public string SMIFAStatus { get; set; }
  96. [Subscription("SMIFB.Status")]
  97. public string SMIFBStatus { get; set; }
  98. #endregion
  99. #region common sensor
  100. [Subscription("System.SensorSmifFfuOK.DeviceData")]
  101. public AITSensorData SensorSmifFfuOK { get; set; }
  102. [Subscription("System.SensorLightCurtainsStateSMIF.DeviceData")]
  103. public AITSensorData SensorLightCurtainsState { get; set; }
  104. [Subscription("System.SensorCDAPressureSensorState.DeviceData")]
  105. public AITSensorData SensorCDAPressureSensorState { get; set; }
  106. [Subscription("System.SensorEMOState.DeviceData")]
  107. public AITSensorData SensorEMOState { get; set; }
  108. [Subscription("System.SensorSafeDoorState.DeviceData")]
  109. public AITSensorData SensorSafeDoorState { get; set; }
  110. [Subscription("System.SensorSystemPowerONState.DeviceData")]
  111. public AITSensorData SensorSystemPowerONState { get; set; }
  112. [Subscription("System.SensorCSFfuOK.DeviceData")]
  113. public AITSensorData SensorCSFfuOK { get; set; }
  114. [Subscription("System.SensorIOPortFfuOK.DeviceData")]
  115. public AITSensorData SensorIOPortFfuOK { get; set; }
  116. [Subscription("System.SensorIOBtmExhFanOK.DeviceData")]
  117. public AITSensorData SensorIOBtmExhFanOK { get; set; }
  118. [Subscription("System.SensorFncExhFanOK.DeviceData")]
  119. public AITSensorData SensorFncExhFanOK { get; set; }
  120. #endregion
  121. public ObservableCollection<SensorViewItem> SMIFASensors { get; set; } = new ObservableCollection<SensorViewItem>();
  122. public ObservableCollection<SensorViewItem> SMIFBSensors { get; set; } = new ObservableCollection<SensorViewItem>();
  123. private string _paraA = "smif1";
  124. private string _paraB = "smif2";
  125. private string _paraSub = "status";
  126. public bool IsEnableHomeOperationSMIFA => SMIFAStatus == "Idle" || SMIFAStatus == "Init";
  127. public bool IsEnableHomeOperationSMIFB => SMIFBStatus == "Idle" || SMIFBStatus == "Init";
  128. public bool IsEnableManualOperationSMIFA => SMIFAStatus == "Idle";
  129. public bool IsEnableManualOperationSMIFB => SMIFBStatus == "Idle";
  130. public SMIFViewModel()
  131. {
  132. }
  133. protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)
  134. {
  135. base.InvokeBeforeUpdateProperty(data);
  136. if (SMIFASensors.Count == 0)
  137. {
  138. foreach (var key in data.Keys)
  139. {
  140. if (key.ToLower().Contains(_paraA))
  141. {
  142. SMIFASensors.Add(new SensorViewItem()
  143. {
  144. Index = SMIFASensors.Count + 1,
  145. Name = (data[key] as AITSensorData).DeviceName,
  146. DisplayName = (data[key] as AITSensorData).DisplayName,
  147. });
  148. }
  149. }
  150. foreach (var key in data.Keys)
  151. {
  152. if (!key.ToLower().Contains(_paraA) && !key.ToLower().Contains(_paraB) && !key.ToLower().Contains(_paraSub))
  153. {
  154. SMIFASensors.Add(new SensorViewItem()
  155. {
  156. Index = SMIFASensors.Count + 1,
  157. Name = (data[key] as AITSensorData).DeviceName,
  158. DisplayName = (data[key] as AITSensorData).DisplayName,
  159. });
  160. }
  161. }
  162. }
  163. if (SMIFBSensors.Count == 0)
  164. {
  165. foreach (var key in data.Keys)
  166. {
  167. if (key.ToLower().Contains(_paraB))
  168. {
  169. SMIFBSensors.Add(new SensorViewItem()
  170. {
  171. Index = SMIFBSensors.Count + 1,
  172. Name = (data[key] as AITSensorData).DeviceName,
  173. DisplayName = (data[key] as AITSensorData).DisplayName,
  174. });
  175. }
  176. }
  177. }
  178. }
  179. public override void UpdateSubscribe(Dictionary<string, object> data, object target, string module = null)
  180. {
  181. Parallel.ForEach(target.GetType().GetProperties().Where(_hasSubscriptionAttribute),
  182. property =>
  183. {
  184. PropertyInfo pi = (PropertyInfo)property;
  185. SubscriptionAttribute subscription = property.GetCustomAttributes(false).First(_isSubscriptionAttribute) as SubscriptionAttribute;
  186. string key = subscription.ModuleKey;
  187. key = module == null ? key : string.Format("{0}.{1}", module, key);
  188. if (_subscribedKeys.Contains(key) && data.ContainsKey(key))
  189. {
  190. try
  191. {
  192. var convertedValue = Convert.ChangeType(data[key], pi.PropertyType);
  193. var originValue = Convert.ChangeType(pi.GetValue(target, null), pi.PropertyType);
  194. if ((convertedValue as AITSensorData) != null && originValue != convertedValue)
  195. {
  196. pi.SetValue(target, convertedValue, null);
  197. //if ((convertedValue as AITSensorData).DeviceName.ToLower().Contains(_para))
  198. //{
  199. Update(SMIFASensors, convertedValue as AITSensorData);
  200. Update(SMIFBSensors, convertedValue as AITSensorData);
  201. //}
  202. }
  203. }
  204. catch (Exception ex)
  205. {
  206. LOG.Error("由RT返回的数据更新失败" + key, ex);
  207. }
  208. }
  209. });
  210. base.UpdateSubscribe(data, target, module);
  211. }
  212. public void ClosedCmd()
  213. {
  214. (GetView() as Window).Close();
  215. }
  216. private void Update(ObservableCollection<SensorViewItem> sensors, object obj)
  217. {
  218. AITSensorData data = obj as AITSensorData;
  219. if (data != null && sensors.Count > 0)
  220. {
  221. var item = sensors.SingleOrDefault(x => x.Name == data.DeviceName);
  222. if (item != null)
  223. {
  224. item.Value = data.Value;
  225. }
  226. }
  227. }
  228. public void Home(string obj)
  229. {
  230. InvokeClient.Instance.Service.DoOperation($"{obj}.Home");
  231. }
  232. public void Load(string obj)
  233. {
  234. InvokeClient.Instance.Service.DoOperation($"{obj}.Load");
  235. }
  236. public void Unload(string obj)
  237. {
  238. InvokeClient.Instance.Service.DoOperation($"{obj}.Unload");
  239. }
  240. public void StopSMIF(string obj)
  241. {
  242. InvokeClient.Instance.Service.DoOperation($"{obj}.StopSMIF");
  243. }
  244. }
  245. }