SensorsViewModel.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. using Aitex.Core.Common.DeviceData;
  2. using Aitex.Core.RT.Log;
  3. using Aitex.Core.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using FurnaceUI.Models;
  12. namespace FurnaceUI.Views.IOStatus
  13. {
  14. public class SensorsViewModel : FurnaceUIViewModelBase
  15. {
  16. #region Syste Properties
  17. [Subscription("SensorASOpenPosition.DeviceData", "System", "System")]
  18. public AITSensorData SensorASOpenPosition { get; set; }
  19. [Subscription("SensorASClosePosition.DeviceData", "System", "System")]
  20. public AITSensorData SensorASClosePosition { get; set; }
  21. [Subscription("SensorASUpPositionW.DeviceData", "System", "System")]
  22. public AITSensorData SensorASUpPositionW { get; set; }
  23. [Subscription("SensorASDownPosition.DeviceData", "System", "System")]
  24. public AITSensorData SensorASDownPosition { get; set; }
  25. [Subscription("SensorASOpenStatus.DeviceData", "System", "System")]
  26. public AITSensorData SensorASOpenStatus { get; set; }
  27. [Subscription("SensorASTiltStatus.DeviceData", "System", "System")]
  28. public AITSensorData SensorASTiltStatus { get; set; }
  29. [Subscription("SensorSideDoorFfuOK.DeviceData", "System", "System")]
  30. public AITSensorData SensorSideDoorFfuOK { get; set; }
  31. [Subscription("SensorZAxisUpLimit.DeviceData", "System", "System")]
  32. public AITSensorData SensorZAxisUpLimit { get; set; }
  33. [Subscription("SensorZAxisDownLimit.DeviceData", "System", "System")]
  34. public AITSensorData SensorZAxisDownLimit { get; set; }
  35. [Subscription("SensorBEHumanInterlock.DeviceData", "System", "System")]
  36. public AITSensorData SensorBEHumanInterlock { get; set; }
  37. [Subscription("SensorTAxisHome.DeviceData", "System", "System")]
  38. public AITSensorData SensorTAxisHome { get; set; }
  39. [Subscription("SensorCapClose.DeviceData", "System", "System")]
  40. public AITSensorData SensorCapClose { get; set; }
  41. [Subscription("SensorZone1.DeviceData", "System", "System")]
  42. public AITSensorData SensorZone1 { get; set; }
  43. [Subscription("SensorZone2.DeviceData", "System", "System")]
  44. public AITSensorData SensorZone2 { get; set; }
  45. [Subscription("SensorR5ArmNotExtendToBE.DeviceData", "System", "System")]
  46. public AITSensorData SensorR5ArmNotExtendToBE { get; set; }
  47. [Subscription("SensorCapILOK.DeviceData", "System", "System")]
  48. public AITSensorData SensorCapILOK { get; set; }
  49. [Subscription("SensorPPPosition.DeviceData", "System", "System")]
  50. public AITSensorData SensorPPPosition { get; set; }
  51. [Subscription("SensorHomePosition.DeciceData", "System", "System")]
  52. public AITSensorData SensorHomePosition { get; set; }
  53. #endregion
  54. #region EFEM properties
  55. [Subscription("SensorLightCurtainsStateEFEM.DeviceData", "System", "Efem")]
  56. public AITSensorData SensorLightCurtainsState { get; set; }
  57. [Subscription("SensorCDAPressureSensorState.DeviceData", "System", "Efem")]
  58. public AITSensorData SensorCDAPressureSensorState { get; set; }
  59. [Subscription("SensorEMOState.DeviceData", "System", "Efem")]
  60. public AITSensorData SensorEMOState { get; set; }
  61. [Subscription("SensorSafeDoorState.DeviceData", "System", "Efem")]
  62. public AITSensorData SensorSafeDoorState { get; set; }
  63. [Subscription("SensorSystemPowerONState.DeviceData", "System", "Efem")]
  64. public AITSensorData SensorSystemPowerONState { get; set; }
  65. [Subscription("SensorCSFfuOK.DeviceData", "System", "Efem")]
  66. public AITSensorData SensorCSFfuOK { get; set; }
  67. [Subscription("SensorIOPortFfuOKSensorIOPortFfuOK.DeviceData", "System", "Efem")]
  68. public AITSensorData SensorIOPortFfuOK { get; set; }
  69. [Subscription("SensorIOBtmExhFanOK.DeviceData", "System", "Efem")]
  70. public AITSensorData SensorIOBtmExhFanOK { get; set; }
  71. [Subscription("SensorFncExhFanOK.DeviceData", "System", "Efem")]
  72. public AITSensorData SensorFncExhFanOK { get; set; }
  73. #endregion
  74. #region Stocker Sensors
  75. [Subscription("SensorStation1Presence.DeviceData", "System", "Stocker")]
  76. public AITSensorData SensorStation1Presence { get; set; }
  77. [Subscription("SensorStation2Presence.DeviceData", "System", "Stocker")]
  78. public AITSensorData SensorStation2Presence { get; set; }
  79. [Subscription("SensorStation3Presence.DeviceData", "System", "Stocker")]
  80. public AITSensorData SensorStation3Presence { get; set; }
  81. [Subscription("SensorStation4Presence.DeviceData", "System", "Stocker")]
  82. public AITSensorData SensorStation4Presence { get; set; }
  83. [Subscription("SensorStation5Presence.DeviceData", "System", "Stocker")]
  84. public AITSensorData SensorStation5Presence { get; set; }
  85. [Subscription("SensorStation6Presence.DeviceData", "System", "Stocker")]
  86. public AITSensorData SensorStation6Presence { get; set; }
  87. [Subscription("SensorStation7Presence.DeviceData", "System", "Stocker")]
  88. public AITSensorData SensorStation7Presence { get; set; }
  89. [Subscription("SensorStation8Presence.DeviceData", "System", "Stocker")]
  90. public AITSensorData SensorStation8Presence { get; set; }
  91. [Subscription("SensorStation9Presence.DeviceData", "System", "Stocker")]
  92. public AITSensorData SensorStation9Presence { get; set; }
  93. [Subscription("SensorStation10Presence.DeviceData", "System", "Stocker")]
  94. public AITSensorData SensorStation10Presence { get; set; }
  95. [Subscription("SensorStation11Presence.DeviceData", "System", "Stocker")]
  96. public AITSensorData SensorStation11Presence { get; set; }
  97. [Subscription("SensorStation12Presence.DeviceData", "System", "Stocker")]
  98. public AITSensorData SensorStation12Presence { get; set; }
  99. [Subscription("SensorStation13Presence.DeviceData", "System", "Stocker")]
  100. public AITSensorData SensorStation13Presence { get; set; }
  101. [Subscription("SensorStation14Presence.DeviceData", "System", "Stocker")]
  102. public AITSensorData SensorStation14Presence { get; set; }
  103. [Subscription("SensorStation15Presence.DeviceData", "System", "Stocker")]
  104. public AITSensorData SensorStation15Presence { get; set; }
  105. [Subscription("SensorStation16Presence.DeviceData", "System", "Stocker")]
  106. public AITSensorData SensorStation16Presence { get; set; }
  107. [Subscription("SensorStation17Presence.DeviceData", "System", "Stocker")]
  108. public AITSensorData SensorStation17Presence { get; set; }
  109. [Subscription("SensorStation18Presence.DeviceData", "System", "Stocker")]
  110. public AITSensorData SensorStation18Presence { get; set; }
  111. [Subscription("SensorStation19Presence.DeviceData", "System", "Stocker")]
  112. public AITSensorData SensorStation19Presence { get; set; }
  113. [Subscription("SensorStation20Presence.DeviceData", "System", "Stocker")]
  114. public AITSensorData SensorStation20Presence { get; set; }
  115. [Subscription("SensorStation21Presence.DeviceData", "System", "Stocker")]
  116. public AITSensorData SensorStation21Presence { get; set; }
  117. #endregion
  118. #region CassetteProtrusion Sensor
  119. [Subscription("SensorCassetteProtrusion1.DeviceData", "System", "CassetteProtrusion")]
  120. public AITSensorData SensorCassetteProtrusion1 { get; set; }
  121. [Subscription("SensorCassetteProtrusion2.DeviceData", "System", "CassetteProtrusion")]
  122. public AITSensorData SensorCassetteProtrusion2 { get; set; }
  123. [Subscription("SensorCassetteProtrusion3.DeviceData", "System", "CassetteProtrusion")]
  124. public AITSensorData SensorCassetteProtrusion3 { get; set; }
  125. [Subscription("SensorCassetteProtrusion4.DeviceData", "System", "CassetteProtrusion")]
  126. public AITSensorData SensorCassetteProtrusion4 { get; set; }
  127. [Subscription("SensorCassetteProtrusion5.DeviceData", "System", "CassetteProtrusion")]
  128. public AITSensorData SensorCassetteProtrusion5 { get; set; }
  129. [Subscription("SensorCassetteProtrusion6.DeviceData", "System", "CassetteProtrusion")]
  130. public AITSensorData SensorCassetteProtrusion6 { get; set; }
  131. [Subscription("SensorCassetteProtrusion7.DeviceData", "System", "CassetteProtrusion")]
  132. public AITSensorData SensorCassetteProtrusion7 { get; set; }
  133. [Subscription("SensorCassetteProtrusion8.DeviceData", "System", "CassetteProtrusion")]
  134. public AITSensorData SensorCassetteProtrusion8 { get; set; }
  135. [Subscription("SensorCassetteProtrusion9.DeviceData", "System", "CassetteProtrusion")]
  136. public AITSensorData SensorCassetteProtrusion9 { get; set; }
  137. #endregion
  138. #region Stage Sensors
  139. [Subscription("SensorStage1LockPosition.DeviceData", "System", "TransferStage")]
  140. public AITSensorData SensorStage1LockPosition { get; set; }
  141. [Subscription("SensorStage1UnlockPosition.DeviceData", "System", "TransferStage")]
  142. public AITSensorData SensorStage1UnlockPosition { get; set; }
  143. [Subscription("SensorStage1LockValveFB.DeviceData", "System", "TransferStage")]
  144. public AITSensorData SensorStage1LockValveFB { get; set; }
  145. [Subscription("SensorStage1UnlockValveFB.DeviceData", "System", "TransferStage")]
  146. public AITSensorData SensorStage1UnlockValveFB { get; set; }
  147. [Subscription("SensorStage2LockPosition.DeviceData", "System", "TransferStage")]
  148. public AITSensorData SensorStage2LockPosition { get; set; }
  149. [Subscription("SensorStage2UnlockPosition.DeviceData", "System", "TransferStage")]
  150. public AITSensorData SensorStage2UnlockPosition { get; set; }
  151. [Subscription("SensorStage2LockValveFB.DeviceData", "System", "TransferStage")]
  152. public AITSensorData SensorStage2LockValveFB { get; set; }
  153. [Subscription("SensorStage2UnlockValveFB.DeviceData", "System", "TransferStage")]
  154. public AITSensorData SensorStage2UnlockValveFB { get; set; }
  155. [Subscription("SensorStage1CASSPresence.DeviceData", "System", "TransferStage")]
  156. public AITSensorData SensorStage1CASSPresence { get; set; }
  157. [Subscription("SensorStage2CASSPresence.DeviceData", "System", "TransferStage")]
  158. public AITSensorData SensorStage2CASSPresence { get; set; }
  159. [Subscription("SensorR3NotExtendToStage1.DeviceData", "System", "TransferStage")]
  160. public AITSensorData SensorR3NotExtendToStage1 { get; set; }
  161. [Subscription("SensorR3NotExtendToStage2.DeviceData", "System", "TransferStage")]
  162. public AITSensorData SensorR3NotExtendToStage2 { get; set; }
  163. [Subscription("SensorR5NotExtendToStage1.DeviceData", "System", "TransferStage")]
  164. public AITSensorData SensorR5NotExtendToStage1 { get; set; }
  165. [Subscription("SensorR5NotExtendToStage2.DeviceData", "System", "TransferStage")]
  166. public AITSensorData SensorR5NotExtendToStage2 { get; set; }
  167. #endregion
  168. #region SmifA sensors
  169. [Subscription("SensorSmif1PodLockPosition.DeviceData", "System", "SmifA")]
  170. public AITSensorData SensorSmif1PodLockPosition { get; set; }
  171. [Subscription("SensorSmif1PodUnlockPosition.DeviceData", "System", "SmifA")]
  172. public AITSensorData SensorSmif1PodUnlockPosition { get; set; }
  173. [Subscription("SensorSmif1PodOpenPosition.DeviceData", "System", "SmifA")]
  174. public AITSensorData SensorSmif1PodOpenPosition { get; set; }
  175. [Subscription("SensorSmif1PodClosePosition.DeviceData", "System", "SmifA")]
  176. public AITSensorData SensorSmif1PodClosePosition { get; set; }
  177. [Subscription("SensorSmif1PodPresence.DeviceData", "System", "SmifA")]
  178. public AITSensorData SensorSmif1PodPresence { get; set; }
  179. [Subscription("SensorSmif1ZAxisUnloadPosition.DeviceData", "System", "SmifA")]
  180. public AITSensorData SensorSmif1ZAxisUnloadPosition { get; set; }
  181. [Subscription("SensorSmif1ZAxisLoadPosition.DeviceData", "System", "SmifA")]
  182. public AITSensorData SensorSmif1ZAxisLoadPosition { get; set; }
  183. [Subscription("SensorSmif1ZAxisPosition1.DeviceData", "System", "SmifA")]
  184. public AITSensorData SensorSmif1ZAxisPosition1 { get; set; }
  185. [Subscription("SensorSmif1ZAxisPosition2.DeviceData", "System", "SmifA")]
  186. public AITSensorData SensorSmif1ZAxisPosition2 { get; set; }
  187. [Subscription("SensorSmif1RotateAxisCheck1.DeviceData", "System", "SmifA")]
  188. public AITSensorData SensorSmif1RotateAxisCheck1 { get; set; }
  189. [Subscription("SensorSmif1RotateAxisCheck2.DeviceData", "System", "SmifA")]
  190. public AITSensorData SensorSmif1RotateAxisCheck2 { get; set; }
  191. [Subscription("SensorSmif1SlideAxisExtend.DeviceData", "System", "SmifA")]
  192. public AITSensorData SensorSmif1SlideAxisExtend { get; set; }
  193. [Subscription("SensorSmif1SlideAxisRetract.DeviceData", "System", "SmifA")]
  194. public AITSensorData SensorSmif1SlideAxisRetract { get; set; }
  195. [Subscription("SensorSmif1ProtrudedWafer.DeviceData", "System", "SmifA")]
  196. public AITSensorData SensorSmif1ProtrudedWafer { get; set; }
  197. [Subscription("SensorSmif1Mapping.DeviceData", "System", "SmifA")]
  198. public AITSensorData SensorSmif1Mapping { get; set; }
  199. [Subscription("SensorSmif1Ready.DeviceData", "System", "SmifA")]
  200. public AITSensorData SensorSmif1Ready { get; set; }
  201. [Subscription("SensorSmif1Homed.DeviceData", "System", "SmifA")]
  202. public AITSensorData SensorSmif1Homed { get; set; }
  203. #endregion
  204. #region SmifB sensors
  205. [Subscription("SensorSmif2PodLockPosition.DeviceData", "System", "SmifB")]
  206. public AITSensorData SensorSmif2PodLockPosition { get; set; }
  207. [Subscription("SensorSmif2PodUnlockPosition.DeviceData", "System", "SmifB")]
  208. public AITSensorData SensorSmif2PodUnlockPosition { get; set; }
  209. [Subscription("SensorSmif2PodOpenPosition.DeviceData", "System", "SmifB")]
  210. public AITSensorData SensorSmif2PodOpenPosition { get; set; }
  211. [Subscription("SensorSmif2PodClosePosition.DeviceData", "System", "SmifB")]
  212. public AITSensorData SensorSmif2PodClosePosition { get; set; }
  213. [Subscription("SensorSmif2PodPresence.DeviceData", "System", "SmifB")]
  214. public AITSensorData SensorSmif2PodPresence { get; set; }
  215. [Subscription("SensorSmif2ZAxisUnloadPosition.DeviceData", "System", "SmifB")]
  216. public AITSensorData SensorSmif2ZAxisUnloadPosition { get; set; }
  217. [Subscription("SensorSmif2ZAxisLoadPosition.DeviceData", "System", "SmifB")]
  218. public AITSensorData SensorSmif2ZAxisLoadPosition { get; set; }
  219. [Subscription("SensorSmif2ZAxisPosition1.DeviceData", "System", "SmifB")]
  220. public AITSensorData SensorSmif2ZAxisPosition1 { get; set; }
  221. [Subscription("SensorSmif2ZAxisPosition2.DeviceData", "System", "SmifB")]
  222. public AITSensorData SensorSmif2ZAxisPosition2 { get; set; }
  223. [Subscription("SensorSmif2RotateAxisCheck1.DeviceData", "System", "SmifB")]
  224. public AITSensorData SensorSmif2RotateAxisCheck1 { get; set; }
  225. [Subscription("SensorSmif2RotateAxisCheck2.DeviceData", "System", "SmifB")]
  226. public AITSensorData SensorSmif2RotateAxisCheck2 { get; set; }
  227. [Subscription("SensorSmif2SlideAxisExtend.DeviceData", "System", "SmifB")]
  228. public AITSensorData SensorSmif2SlideAxisExtend { get; set; }
  229. [Subscription("SensorSmif2SlideAxisRetract.DeviceData", "System", "SmifB")]
  230. public AITSensorData SensorSmif2SlideAxisRetract { get; set; }
  231. [Subscription("SensorSmif2ProtrudedWafer.DeviceData", "System", "SmifB")]
  232. public AITSensorData SensorSmif2ProtrudedWafer { get; set; }
  233. [Subscription("SensorSmif2Mapping.DeviceData", "System", "SmifB")]
  234. public AITSensorData SensorSmif2Mapping { get; set; }
  235. [Subscription("SensorSmif2Ready.DeviceData", "System", "SmifB")]
  236. public AITSensorData SensorSmif2Ready { get; set; }
  237. [Subscription("SensorSmif2Homed.DeviceData", "System", "SmifB")]
  238. public AITSensorData SensorSmif2Homed { get; set; }
  239. #endregion
  240. public ObservableCollection<AITSensorData> SensorsSystem{ get; set; } = new ObservableCollection<AITSensorData>();
  241. public ObservableCollection<AITSensorData> SensorsEfem { get; set; } = new ObservableCollection<AITSensorData>();
  242. public ObservableCollection<AITSensorData> SensorsStocker { get; set; } = new ObservableCollection<AITSensorData>();
  243. public ObservableCollection<AITSensorData> SensorsCassetteProtrusion { get; set; } = new ObservableCollection<AITSensorData>();
  244. public ObservableCollection<AITSensorData> SensorsTransferStage { get; set; } = new ObservableCollection<AITSensorData>();
  245. public ObservableCollection<AITSensorData> SensorsSMIFA { get; set; } = new ObservableCollection<AITSensorData>();
  246. public ObservableCollection<AITSensorData> SensorsSMIFB { get; set; } = new ObservableCollection<AITSensorData>();
  247. public void Add(ObservableCollection<AITSensorData> Sensors,object obj)
  248. {
  249. AITSensorData data = obj as AITSensorData;
  250. int iIndex = -1;
  251. for (int i = 0; i < Sensors.Count; i++)
  252. {
  253. if (Sensors[i] == null) break;
  254. if (Sensors[i].DeviceName == data.DeviceName)
  255. {
  256. iIndex = i;
  257. break;
  258. }
  259. }
  260. if (iIndex >= 0)
  261. {
  262. Sensors[iIndex] = data;
  263. }else
  264. {
  265. Sensors.Add(data);
  266. }
  267. }
  268. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  269. {
  270. base.InvokeAfterUpdateProperty(data);
  271. }
  272. public override void UpdateSubscribe(Dictionary<string, object> data, object target, string module = null)
  273. {
  274. Parallel.ForEach(target.GetType().GetProperties().Where(_hasSubscriptionAttribute),
  275. property =>
  276. {
  277. PropertyInfo pi = (PropertyInfo)property;
  278. SubscriptionAttribute subscription = property.GetCustomAttributes(false).First(_isSubscriptionAttribute) as SubscriptionAttribute;
  279. string key = subscription.ModuleKey;
  280. key = module == null ? key : string.Format("{0}.{1}", module, key);
  281. if (_subscribedKeys.Contains(key) && data.ContainsKey(key))
  282. {
  283. try
  284. {
  285. var convertedValue = Convert.ChangeType(data[key], pi.PropertyType);
  286. var originValue = Convert.ChangeType(pi.GetValue(target, null), pi.PropertyType);
  287. if (originValue != convertedValue)
  288. {
  289. pi.SetValue(target, convertedValue, null);
  290. switch (subscription.Params[0].ToString())
  291. {
  292. case "System":
  293. Add(SensorsSystem,convertedValue as AITSensorData);
  294. break;
  295. case "Efem":
  296. Add(SensorsEfem, convertedValue as AITSensorData);
  297. break;
  298. case "Stocker":
  299. Add(SensorsStocker, convertedValue as AITSensorData);
  300. break;
  301. case "CassetteProtrusion":
  302. Add(SensorsCassetteProtrusion, convertedValue as AITSensorData);
  303. break;
  304. case "TransferStage":
  305. Add(SensorsTransferStage, convertedValue as AITSensorData);
  306. break;
  307. case "SmifA":
  308. Add(SensorsSMIFA, convertedValue as AITSensorData);
  309. break;
  310. case "SmifB":
  311. Add(SensorsSMIFB, convertedValue as AITSensorData);
  312. break;
  313. }
  314. }
  315. }
  316. catch (Exception ex)
  317. {
  318. LOG.Error("由RT返回的数据更新失败" + key, ex);
  319. }
  320. }
  321. });
  322. }
  323. public void CloseCmd()
  324. {
  325. ((Window)GetView()).Close();
  326. }
  327. }
  328. }