| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 | 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<AITSensorData> SensorsSystem{ get; set; } = new ObservableCollection<AITSensorData>();        public ObservableCollection<AITSensorData> SensorsEfem { get; set; } = new ObservableCollection<AITSensorData>();        public ObservableCollection<AITSensorData> SensorsStocker { get; set; } = new ObservableCollection<AITSensorData>();        public ObservableCollection<AITSensorData> SensorsCassetteProtrusion { get; set; } = new ObservableCollection<AITSensorData>();        public ObservableCollection<AITSensorData> SensorsTransferStage { get; set; } = new ObservableCollection<AITSensorData>();        public ObservableCollection<AITSensorData> SensorsSMIFA { get; set; } = new ObservableCollection<AITSensorData>();        public ObservableCollection<AITSensorData> SensorsSMIFB { get; set; } = new ObservableCollection<AITSensorData>();        public void Add(ObservableCollection<AITSensorData> 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<string, object> data)        {            base.InvokeAfterUpdateProperty(data);        }        public override void UpdateSubscribe(Dictionary<string, object> 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();        }    }}
 |