using Aitex.Core.Common.DeviceData; using Aitex.Core.RT.Log; using Aitex.Core.Util; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Reflection; using System.Threading.Tasks; using System.Windows; using FurnaceUI.Models; namespace FurnaceUI.Views.IOStatus { public class SensorsViewModel : FurnaceUIViewModelBase { #region Syste Properties [Subscription("SensorASOpenPosition.DeviceData", "System", "System")] public AITSensorData SensorASOpenPosition { get; set; } [Subscription("SensorASClosePosition.DeviceData", "System", "System")] public AITSensorData SensorASClosePosition { get; set; } [Subscription("SensorASUpPositionW.DeviceData", "System", "System")] public AITSensorData SensorASUpPositionW { get; set; } [Subscription("SensorASDownPosition.DeviceData", "System", "System")] public AITSensorData SensorASDownPosition { get; set; } [Subscription("SensorASOpenStatus.DeviceData", "System", "System")] public AITSensorData SensorASOpenStatus { get; set; } [Subscription("SensorASTiltStatus.DeviceData", "System", "System")] public AITSensorData SensorASTiltStatus { get; set; } [Subscription("SensorSideDoorFfuOK.DeviceData", "System", "System")] public AITSensorData SensorSideDoorFfuOK { get; set; } [Subscription("SensorZAxisUpLimit.DeviceData", "System", "System")] public AITSensorData SensorZAxisUpLimit { get; set; } [Subscription("SensorZAxisDownLimit.DeviceData", "System", "System")] public AITSensorData SensorZAxisDownLimit { get; set; } [Subscription("SensorBEHumanInterlock.DeviceData", "System", "System")] public AITSensorData SensorBEHumanInterlock { get; set; } [Subscription("SensorTAxisHome.DeviceData", "System", "System")] public AITSensorData SensorTAxisHome { get; set; } [Subscription("SensorCapClose.DeviceData", "System", "System")] public AITSensorData SensorCapClose { get; set; } [Subscription("SensorZone1.DeviceData", "System", "System")] public AITSensorData SensorZone1 { get; set; } [Subscription("SensorZone2.DeviceData", "System", "System")] public AITSensorData SensorZone2 { get; set; } [Subscription("SensorR5ArmNotExtendToBE.DeviceData", "System", "System")] public AITSensorData SensorR5ArmNotExtendToBE { get; set; } [Subscription("SensorCapILOK.DeviceData", "System", "System")] public AITSensorData SensorCapILOK { get; set; } [Subscription("SensorPPPosition.DeviceData", "System", "System")] public AITSensorData SensorPPPosition { get; set; } [Subscription("SensorHomePosition.DeciceData", "System", "System")] public AITSensorData SensorHomePosition { get; set; } #endregion #region EFEM properties [Subscription("SensorLightCurtainsStateEFEM.DeviceData", "System", "Efem")] public AITSensorData SensorLightCurtainsState { get; set; } [Subscription("SensorCDAPressureSensorState.DeviceData", "System", "Efem")] public AITSensorData SensorCDAPressureSensorState { get; set; } [Subscription("SensorEMOState.DeviceData", "System", "Efem")] public AITSensorData SensorEMOState { get; set; } [Subscription("SensorSafeDoorState.DeviceData", "System", "Efem")] public AITSensorData SensorSafeDoorState { get; set; } [Subscription("SensorSystemPowerONState.DeviceData", "System", "Efem")] public AITSensorData SensorSystemPowerONState { get; set; } [Subscription("SensorCSFfuOK.DeviceData", "System", "Efem")] public AITSensorData SensorCSFfuOK { get; set; } [Subscription("SensorIOPortFfuOKSensorIOPortFfuOK.DeviceData", "System", "Efem")] public AITSensorData SensorIOPortFfuOK { get; set; } [Subscription("SensorIOBtmExhFanOK.DeviceData", "System", "Efem")] public AITSensorData SensorIOBtmExhFanOK { get; set; } [Subscription("SensorFncExhFanOK.DeviceData", "System", "Efem")] public AITSensorData SensorFncExhFanOK { get; set; } #endregion #region Stocker Sensors [Subscription("SensorStation1Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation1Presence { get; set; } [Subscription("SensorStation2Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation2Presence { get; set; } [Subscription("SensorStation3Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation3Presence { get; set; } [Subscription("SensorStation4Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation4Presence { get; set; } [Subscription("SensorStation5Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation5Presence { get; set; } [Subscription("SensorStation6Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation6Presence { get; set; } [Subscription("SensorStation7Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation7Presence { get; set; } [Subscription("SensorStation8Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation8Presence { get; set; } [Subscription("SensorStation9Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation9Presence { get; set; } [Subscription("SensorStation10Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation10Presence { get; set; } [Subscription("SensorStation11Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation11Presence { get; set; } [Subscription("SensorStation12Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation12Presence { get; set; } [Subscription("SensorStation13Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation13Presence { get; set; } [Subscription("SensorStation14Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation14Presence { get; set; } [Subscription("SensorStation15Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation15Presence { get; set; } [Subscription("SensorStation16Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation16Presence { get; set; } [Subscription("SensorStation17Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation17Presence { get; set; } [Subscription("SensorStation18Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation18Presence { get; set; } [Subscription("SensorStation19Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation19Presence { get; set; } [Subscription("SensorStation20Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation20Presence { get; set; } [Subscription("SensorStation21Presence.DeviceData", "System", "Stocker")] public AITSensorData SensorStation21Presence { get; set; } #endregion #region CassetteProtrusion Sensor [Subscription("SensorCassetteProtrusion1.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion1 { get; set; } [Subscription("SensorCassetteProtrusion2.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion2 { get; set; } [Subscription("SensorCassetteProtrusion3.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion3 { get; set; } [Subscription("SensorCassetteProtrusion4.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion4 { get; set; } [Subscription("SensorCassetteProtrusion5.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion5 { get; set; } [Subscription("SensorCassetteProtrusion6.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion6 { get; set; } [Subscription("SensorCassetteProtrusion7.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion7 { get; set; } [Subscription("SensorCassetteProtrusion8.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion8 { get; set; } [Subscription("SensorCassetteProtrusion9.DeviceData", "System", "CassetteProtrusion")] public AITSensorData SensorCassetteProtrusion9 { get; set; } #endregion #region Stage Sensors [Subscription("SensorStage1LockPosition.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage1LockPosition { get; set; } [Subscription("SensorStage1UnlockPosition.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage1UnlockPosition { get; set; } [Subscription("SensorStage1LockValveFB.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage1LockValveFB { get; set; } [Subscription("SensorStage1UnlockValveFB.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage1UnlockValveFB { get; set; } [Subscription("SensorStage2LockPosition.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage2LockPosition { get; set; } [Subscription("SensorStage2UnlockPosition.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage2UnlockPosition { get; set; } [Subscription("SensorStage2LockValveFB.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage2LockValveFB { get; set; } [Subscription("SensorStage2UnlockValveFB.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage2UnlockValveFB { get; set; } [Subscription("SensorStage1CASSPresence.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage1CASSPresence { get; set; } [Subscription("SensorStage2CASSPresence.DeviceData", "System", "TransferStage")] public AITSensorData SensorStage2CASSPresence { get; set; } [Subscription("SensorR3NotExtendToStage1.DeviceData", "System", "TransferStage")] public AITSensorData SensorR3NotExtendToStage1 { get; set; } [Subscription("SensorR3NotExtendToStage2.DeviceData", "System", "TransferStage")] public AITSensorData SensorR3NotExtendToStage2 { get; set; } [Subscription("SensorR5NotExtendToStage1.DeviceData", "System", "TransferStage")] public AITSensorData SensorR5NotExtendToStage1 { get; set; } [Subscription("SensorR5NotExtendToStage2.DeviceData", "System", "TransferStage")] public AITSensorData SensorR5NotExtendToStage2 { get; set; } #endregion #region SmifA sensors [Subscription("SensorSmif1PodLockPosition.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1PodLockPosition { get; set; } [Subscription("SensorSmif1PodUnlockPosition.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1PodUnlockPosition { get; set; } [Subscription("SensorSmif1PodOpenPosition.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1PodOpenPosition { get; set; } [Subscription("SensorSmif1PodClosePosition.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1PodClosePosition { get; set; } [Subscription("SensorSmif1PodPresence.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1PodPresence { get; set; } [Subscription("SensorSmif1ZAxisUnloadPosition.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1ZAxisUnloadPosition { get; set; } [Subscription("SensorSmif1ZAxisLoadPosition.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1ZAxisLoadPosition { get; set; } [Subscription("SensorSmif1ZAxisPosition1.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1ZAxisPosition1 { get; set; } [Subscription("SensorSmif1ZAxisPosition2.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1ZAxisPosition2 { get; set; } [Subscription("SensorSmif1RotateAxisCheck1.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1RotateAxisCheck1 { get; set; } [Subscription("SensorSmif1RotateAxisCheck2.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1RotateAxisCheck2 { get; set; } [Subscription("SensorSmif1SlideAxisExtend.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1SlideAxisExtend { get; set; } [Subscription("SensorSmif1SlideAxisRetract.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1SlideAxisRetract { get; set; } [Subscription("SensorSmif1ProtrudedWafer.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1ProtrudedWafer { get; set; } [Subscription("SensorSmif1Mapping.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1Mapping { get; set; } [Subscription("SensorSmif1Ready.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1Ready { get; set; } [Subscription("SensorSmif1Homed.DeviceData", "System", "SmifA")] public AITSensorData SensorSmif1Homed { get; set; } #endregion #region SmifB sensors [Subscription("SensorSmif2PodLockPosition.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2PodLockPosition { get; set; } [Subscription("SensorSmif2PodUnlockPosition.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2PodUnlockPosition { get; set; } [Subscription("SensorSmif2PodOpenPosition.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2PodOpenPosition { get; set; } [Subscription("SensorSmif2PodClosePosition.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2PodClosePosition { get; set; } [Subscription("SensorSmif2PodPresence.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2PodPresence { get; set; } [Subscription("SensorSmif2ZAxisUnloadPosition.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2ZAxisUnloadPosition { get; set; } [Subscription("SensorSmif2ZAxisLoadPosition.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2ZAxisLoadPosition { get; set; } [Subscription("SensorSmif2ZAxisPosition1.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2ZAxisPosition1 { get; set; } [Subscription("SensorSmif2ZAxisPosition2.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2ZAxisPosition2 { get; set; } [Subscription("SensorSmif2RotateAxisCheck1.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2RotateAxisCheck1 { get; set; } [Subscription("SensorSmif2RotateAxisCheck2.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2RotateAxisCheck2 { get; set; } [Subscription("SensorSmif2SlideAxisExtend.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2SlideAxisExtend { get; set; } [Subscription("SensorSmif2SlideAxisRetract.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2SlideAxisRetract { get; set; } [Subscription("SensorSmif2ProtrudedWafer.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2ProtrudedWafer { get; set; } [Subscription("SensorSmif2Mapping.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2Mapping { get; set; } [Subscription("SensorSmif2Ready.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2Ready { get; set; } [Subscription("SensorSmif2Homed.DeviceData", "System", "SmifB")] public AITSensorData SensorSmif2Homed { get; set; } #endregion public ObservableCollection SensorsSystem{ get; set; } = new ObservableCollection(); public ObservableCollection SensorsEfem { get; set; } = new ObservableCollection(); public ObservableCollection SensorsStocker { get; set; } = new ObservableCollection(); public ObservableCollection SensorsCassetteProtrusion { get; set; } = new ObservableCollection(); public ObservableCollection SensorsTransferStage { get; set; } = new ObservableCollection(); public ObservableCollection SensorsSMIFA { get; set; } = new ObservableCollection(); public ObservableCollection SensorsSMIFB { get; set; } = new ObservableCollection(); public void Add(ObservableCollection Sensors,object obj) { AITSensorData data = obj as AITSensorData; int iIndex = -1; for (int i = 0; i < Sensors.Count; i++) { if (Sensors[i] == null) break; if (Sensors[i].DeviceName == data.DeviceName) { iIndex = i; break; } } if (iIndex >= 0) { Sensors[iIndex] = data; }else { Sensors.Add(data); } } protected override void InvokeAfterUpdateProperty(Dictionary data) { base.InvokeAfterUpdateProperty(data); } public override void UpdateSubscribe(Dictionary data, object target, string module = null) { Parallel.ForEach(target.GetType().GetProperties().Where(_hasSubscriptionAttribute), property => { PropertyInfo pi = (PropertyInfo)property; SubscriptionAttribute subscription = property.GetCustomAttributes(false).First(_isSubscriptionAttribute) as SubscriptionAttribute; string key = subscription.ModuleKey; key = module == null ? key : string.Format("{0}.{1}", module, key); if (_subscribedKeys.Contains(key) && data.ContainsKey(key)) { try { var convertedValue = Convert.ChangeType(data[key], pi.PropertyType); var originValue = Convert.ChangeType(pi.GetValue(target, null), pi.PropertyType); if (originValue != convertedValue) { pi.SetValue(target, convertedValue, null); switch (subscription.Params[0].ToString()) { case "System": Add(SensorsSystem,convertedValue as AITSensorData); break; case "Efem": Add(SensorsEfem, convertedValue as AITSensorData); break; case "Stocker": Add(SensorsStocker, convertedValue as AITSensorData); break; case "CassetteProtrusion": Add(SensorsCassetteProtrusion, convertedValue as AITSensorData); break; case "TransferStage": Add(SensorsTransferStage, convertedValue as AITSensorData); break; case "SmifA": Add(SensorsSMIFA, convertedValue as AITSensorData); break; case "SmifB": Add(SensorsSMIFB, convertedValue as AITSensorData); break; } } } catch (Exception ex) { LOG.Error("由RT返回的数据更新失败" + key, ex); } } }); } public void CloseCmd() { ((Window)GetView()).Close(); } } }