| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363 | using Aitex.Core.Common.DeviceData;using Aitex.Core.RT.Log;using Aitex.Core.UI.ControlDataContext;using Aitex.Core.UI.MVVM;using Aitex.Core.Util;using MECF.Framework.Common.DataCenter;using MECF.Framework.Common.OperationCenter;using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Input;using FurnaceGasPanelUI.Models;using MECF.Framework.UI.Core.Control;using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;using Aitex.Core.UI.Control;using OpenSEMI.ClientBase;using Aitex.Core.UI.DeviceControl;using MECF.Framework.UI.Core.ExtendedControls;using System.Runtime.InteropServices;namespace FurnaceGasPanelUI.Views.Maintenances.SiBCN{    public class GasPanelViewModel : ThermalGasPanelUIViewModelBase    {        public ICommand CmdSetMfcFlow { get; set; }        public ICommand CmdSetMfmFlow { get; set; }        public bool _ismanagerPermission = true;        public Window WinOwner { get; set; }        public bool IsManagerPermission        {            get            {                return _ismanagerPermission;            }            set            {                _ismanagerPermission = value;                NotifyOfPropertyChange("IsManagerPermission");            }        }        private bool _isRecipeEdit = false;        private string backGroundStr = "#FFB0D1F1";        public bool ManualEnable { get; set; } = true;        public string ManualEnableColor        {            get            {                if (ManualEnable)                {                    return "Green";                }                return backGroundStr;            }        }        public void SwichManualEnable()        {            ManualEnable = true;        }        public void SwichMonitor()        {            ManualEnable = false;        }        public void SwichRecipe()        {            IsRecipeEdit = true;        }        public bool MonitorChecked { get; set; } = true;        public bool ManualChecked { get; set; } = false;        public bool IsRecipeEdit        {            get            {                return _isRecipeEdit;            }            set            {                _isRecipeEdit = value;                NotifyOfPropertyChange("IsRecipeEdit");            }        }        public bool EditTrue { get; set; } = false;        [Subscription("PM1.SensorRecipeOK")]        public AITSensorData SensorRecipeOK { get; set; }        [Subscription("PM1.SensorPROCManualOK")]        public AITSensorData SensorPROCManualOK { get; set; }        [Subscription("System.VentValve.DeviceData")]        public AITValveData VentValveData { get; set; }        [Subscription("System.PumpValve.DeviceData")]        public AITValveData PumpValveData { get; set; }        [Subscription("PM1.SensorTubeATMPressure.DeviceData")]        public AITSensorData SensorTubeATMPressure { get; set; }        [Subscription("System.TubePressure.DeviceData")]        public AITPressureMeterData TubePressureData { get; set; }        [Subscription("PM1.SensorVAC1.Value")]        public bool VAC1 { get; set; }        [Subscription("PM1.SensorVAC2.Value")]        public bool VAC2 { get; set; }        [Subscription("PM1.SensorVAC3.Value")]        public bool VAC3 { get; set; }        [Subscription("PM1.SensorVAC4.Value")]        public bool VAC4 { get; set; }        [Subscription("PM1.SensorVAC5.Value")]        public bool VAC5 { get; set; }        [Subscription("PM1.SensorVAC6.Value")]        public bool VAC6 { get; set; }        [Subscription("PM1.SensorPS13LStatus.Value")]        public bool VACATM { get; set; }        [Subscription("PM1.SensorVACDEPOOK.Value")]        public bool DEPOOK { get; set; }        [Subscription("PM1.SensorVACHFOK.Value")]        public bool HFClnOK { get; set; }        [Subscription("PM1.SensorVACF2OK.Value")]        public bool F2ClnOK { get; set; }        #region Valves        [Subscription("PM1.ValveAV1.DeviceData")]        public AITValveData ValveAV1 { get; set; }        [Subscription("PM1.ValveAV2.DeviceData")]        public AITValveData ValveAV2 { get; set; }        [Subscription("PM1.ValveAV3.DeviceData")]        public AITValveData ValveAV3 { get; set; }        [Subscription("PM1.ValveAV4.DeviceData")]        public AITValveData ValveAV4 { get; set; }        [Subscription("PM1.ValveAV5.DeviceData")]        public AITValveData ValveAV5 { get; set; }        [Subscription("PM1.ValveAV6.DeviceData")]        public AITValveData ValveAV6 { get; set; }        [Subscription("PM1.ValveAV7.DeviceData")]        public AITValveData ValveAV7 { get; set; }        [Subscription("PM1.ValveAV8.DeviceData")]        public AITValveData ValveAV8 { get; set; }        [Subscription("PM1.ValveAV9.DeviceData")]        public AITValveData ValveAV9 { get; set; }        [Subscription("PM1.ValveAV10.DeviceData")]        public AITValveData ValveAV10 { get; set; }        [Subscription("PM1.ValveAV11.DeviceData")]        public AITValveData ValveAV11 { get; set; }        [Subscription("PM1.ValveAV12.DeviceData")]        public AITValveData ValveAV12 { get; set; }        [Subscription("PM1.ValveAV13.DeviceData")]        public AITValveData ValveAV13 { get; set; }        [Subscription("PM1.ValveAV14.DeviceData")]        public AITValveData ValveAV14 { get; set; }        [Subscription("PM1.ValveAV15.DeviceData")]        public AITValveData ValveAV15 { get; set; }        [Subscription("PM1.ValveAV16.DeviceData")]        public AITValveData ValveAV16 { get; set; }        [Subscription("PM1.ValveAV17.DeviceData")]        public AITValveData ValveAV17 { get; set; }        [Subscription("PM1.ValveAV18.DeviceData")]        public AITValveData ValveAV18 { get; set; }        [Subscription("PM1.ValveAV19.DeviceData")]        public AITValveData ValveAV19 { get; set; }        [Subscription("PM1.ValveAV20.DeviceData")]        public AITValveData ValveAV20 { get; set; }        [Subscription("PM1.ValveAV21.DeviceData")]        public AITValveData ValveAV21 { get; set; }        [Subscription("PM1.ValveAV22.DeviceData")]        public AITValveData ValveAV22 { get; set; }        [Subscription("PM1.ValveAV23.DeviceData")]        public AITValveData ValveAV23 { get; set; }        [Subscription("PM1.ValveAV24.DeviceData")]        public AITValveData ValveAV24 { get; set; }        [Subscription("PM1.ValveAV25.DeviceData")]        public AITValveData ValveAV25 { get; set; }        [Subscription("PM1.ValveAV26.DeviceData")]        public AITValveData ValveAV26 { get; set; }        [Subscription("PM1.ValveAV27.DeviceData")]        public AITValveData ValveAV27 { get; set; }        [Subscription("PM1.ValveAV28.DeviceData")]        public AITValveData ValveAV28 { get; set; }        [Subscription("PM1.ValveAV29.DeviceData")]        public AITValveData ValveAV29 { get; set; }        [Subscription("PM1.ValveAV30.DeviceData")]        public AITValveData ValveAV30 { get; set; }        [Subscription("PM1.ValveAV31.DeviceData")]        public AITValveData ValveAV31 { get; set; }        [Subscription("PM1.ValveAV32.DeviceData")]        public AITValveData ValveAV32 { get; set; }        [Subscription("PM1.ValveAV33.DeviceData")]        public AITValveData ValveAV33 { get; set; }        [Subscription("PM1.ValveAV34.DeviceData")]        public AITValveData ValveAV34 { get; set; }        [Subscription("PM1.ValveAV35.DeviceData")]        public AITValveData ValveAV35 { get; set; }        [Subscription("PM1.ValveAV36.DeviceData")]        public AITValveData ValveAV36 { get; set; }        [Subscription("PM1.ValveAV37.DeviceData")]        public AITValveData ValveAV37 { get; set; }        [Subscription("PM1.ValveAV38.DeviceData")]        public AITValveData ValveAV38 { get; set; }        [Subscription("PM1.ValveAV39.DeviceData")] public AITValveData ValveAV39 { get; set; }        [Subscription("PM1.ValveAV40.DeviceData")] public AITValveData ValveAV40 { get; set; }        [Subscription("PM1.ValveAV41.DeviceData")] public AITValveData ValveAV41 { get; set; }        [Subscription("PM1.ValveAV42.DeviceData")] public AITValveData ValveAV42 { get; set; }        [Subscription("PM1.ValveAV43.DeviceData")] public AITValveData ValveAV43 { get; set; }        [Subscription("PM1.ValveAV44.DeviceData")] public AITValveData ValveAV44 { get; set; }        [Subscription("PM1.ValveAV45.DeviceData")] public AITValveData ValveAV45 { get; set; }        [Subscription("PM1.ValveAV46.DeviceData")] public AITValveData ValveAV46 { get; set; }        [Subscription("PM1.ValveAV47.DeviceData")] public AITValveData ValveAV47 { get; set; }        [Subscription("PM1.ValveAV48.DeviceData")] public AITValveData ValveAV48 { get; set; }        [Subscription("PM1.ValveAV49.DeviceData")] public AITValveData ValveAV49 { get; set; }        [Subscription("PM1.ValveAV50.DeviceData")] public AITValveData ValveAV50 { get; set; }        [Subscription("PM1.ValveAV51.DeviceData")] public AITValveData ValveAV51 { get; set; }        [Subscription("PM1.ValveAV52.DeviceData")] public AITValveData ValveAV52 { get; set; }        [Subscription("PM1.ValveAV53.DeviceData")] public AITValveData ValveAV53 { get; set; }        [Subscription("PM1.ValveAV54.DeviceData")] public AITValveData ValveAV54 { get; set; }        [Subscription("PM1.ValveAV55.DeviceData")] public AITValveData ValveAV55 { get; set; }        [Subscription("PM1.ValveAV56.DeviceData")]        public AITValveData ValveAV56 { get; set; }        [Subscription("PM1.ValveAV57.DeviceData")]        public AITValveData ValveAV57 { get; set; }        [Subscription("PM1.ValveAV58.DeviceData")]        public AITValveData ValveAV58 { get; set; }        [Subscription("PM1.ValveAV59.DeviceData")]        public AITValveData ValveAV59 { get; set; }        [Subscription("PM1.ValveAV60.DeviceData")]        public AITValveData ValveAV60 { get; set; }        [Subscription("PM1.ValveFIMS1N2Purge.DeviceData")]        public AITValveData ValveAV63 { get; set; }        [Subscription("PM1.ValveFIMS2N2Purge.DeviceData")]        public AITValveData ValveAV64 { get; set; }        [Subscription("PM1.ValveAV65.DeviceData")]        public AITValveData ValveAV65 { get; set; }        [Subscription("PM1.ValveAV66.DeviceData")]        public AITValveData ValveAV66 { get; set; }        [Subscription("PM1.ValveAV68.DeviceData")]        public AITValveData ValveAV68 { get; set; }        [Subscription("PM1.APC.ModeFeedback")]        public int APCModeFeedback { get; set; }        [Subscription("PM1.ValveAV71.DeviceData")]         public AITValveData ValveAV71Data { get; set; }        public AITValveData ValveAV71        {            get            {                return new AITValveData()                {                    DeviceName = ValveAV71Data.DeviceName,                    DisplayName = ValveAV71Data.DisplayName,                    UniqueName = ValveAV71Data.UniqueName,                    DefaultValue = ValveAV71Data.DefaultValue,                    SetPoint = ValveAV71Data.SetPoint,                    Feedback = APCModeFeedback != 5,                    ILKDiValue= ValveAV71Data.ILKDiValue,                    VirtualFeedback = ValveAV71Data.VirtualFeedback                };            }        }        [Subscription("PM1.ValveAV72.DeviceData")]        public AITValveData ValveAV72 { get; set; }        [Subscription("PM1.ValveAV73.DeviceData")]        public AITValveData ValveAV73 { get; set; }        [Subscription("PM1.ValveAV74.DeviceData")]        public AITValveData ValveAV74 { get; set; }        [Subscription("PM1.ValveAV75.DeviceData")]        public AITValveData ValveAV75 { get; set; }        [Subscription("PM1.ValveAV77.DeviceData")]        public AITValveData ValveAV77 { get; set; }        [Subscription("PM1.ValveAV81.DeviceData")]        public AITValveData ValveAV81 { get; set; }        [Subscription("PM1.ValveAV82.DeviceData")]        public AITValveData ValveAV82 { get; set; }        [Subscription("PM1.ValveAV83.DeviceData")]        public AITValveData ValveAV83 { get; set; }        [Subscription("PM1.ValveAV91.DeviceData")]        public AITValveData ValveDPR { get; set; }        public string ValveDPRBrush        {            get            {                if (ValveDPR != null && ValveDPR.Feedback)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.ValveBlowerPowerOn.DeviceData")]        public AITValveData ValveBWR { get; set; }        public string ValveBWRBrush        {            get            {                if (ValveBWR != null && ValveBWR.Feedback)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.IsCEXHOn")]        public bool IsCEXHOn { get; set; }        public string CEXHBrush        {            get            {                if (IsCEXHOn)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.IsF2ClnOn")]        public bool IsF2ClnOn { get; set; }        public string F2ClnBrush        {            get            {                if (IsF2ClnOn)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.IsHFClnOn")]        public bool IsHFClnOn { get; set; }        public string HFClnBrush        {            get            {                if (IsHFClnOn)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.IsDEPOOn")]        public bool IsDEPOOn { get; set; }        public string DEPOBrush        {            get            {                if (IsDEPOOn)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.HTR1Enable")]        public bool IsHTR1Enable { get; set; }        public string HTR1Brush        {            get            {                if (IsHTR1Enable)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.HTR2Enable")]        public bool IsHTR2Enable { get; set; }        public string HTR2Brush        {            get            {                if (IsHTR2Enable)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.HTR3Enable")]        public bool IsHTR3Enable { get; set; }        public string HTR3Brush        {            get            {                if (IsHTR3Enable)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.AUCPump.DeviceData")]        public AITValveData AUCPump { get; set; }        public string AUCPumpBrush        {            get            {                if (AUCPump != null && AUCPump.Feedback)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.BothPump.DeviceData")]        public AITValveData BothPump { get; set; }        public string BothPumpBrush        {            get            {                if (BothPump != null && BothPump.Feedback)                {                    return "Green";                }                return backGroundStr;            }        }        [Subscription("PM1.AGVPump.DeviceData")]        public AITValveData AGVPump { get; set; }        public string AGVPumpBrush        {            get            {                if (AGVPump != null && AGVPump.Feedback)                {                    return "Green";                }                return backGroundStr;            }        }        #endregion        #region MFCs        [Subscription("PM1.MFC1.DeviceData")]        public AITMfcData MFC1Data { get; set; }        [Subscription("PM1.MFC2.DeviceData")]        public AITMfcData MFC2Data { get; set; }        [Subscription("PM1.MFC3.DeviceData")]        public AITMfcData MFC3Data { get; set; }        [Subscription("PM1.MFC4.DeviceData")]        public AITMfcData MFC4Data { get; set; }        [Subscription("PM1.MFC5.DeviceData")]        public AITMfcData MFC5Data { get; set; }        [Subscription("PM1.MFC6.DeviceData")]        public AITMfcData MFC6Data { get; set; }        [Subscription("PM1.MFC7.DeviceData")]        public AITMfcData MFC7Data { get; set; }        [Subscription("PM1.MFC8.DeviceData")]        public AITMfcData MFC8Data { get; set; }        [Subscription("PM1.MFC9.DeviceData")]        public AITMfcData MFC9Data { get; set; }        [Subscription("PM1.MFC10.DeviceData")]        public AITMfcData MFC10Data { get; set; }        [Subscription("PM1.MFC11.DeviceData")]        public AITMfcData MFC11Data { get; set; }        [Subscription("PM1.MFC12.DeviceData")]        public AITMfcData MFC12Data { get; set; }        [Subscription("PM1.MFC13.DeviceData")] public AITMfcData MFC13Data { get; set; }        [Subscription("PM1.MFC14.DeviceData")] public AITMfcData MFC14Data { get; set; }        [Subscription("PM1.MFC15.DeviceData")] public AITMfcData MFC15Data { get; set; }        [Subscription("PM1.MFC16.DeviceData")] public AITMfcData MFC16Data { get; set; }        [Subscription("PM1.MFC51.DeviceData")]        public AITMfcData MFC51Data { get; set; }        #endregion        [Subscription("PM1.MFM57.DeviceData")]        public AITWaterFlowMeterData MFM57Flow { get; set; }        [Subscription("PM1.MFM1.DeviceData")]        public AITWaterFlowMeterData MFM1Flow { get; set; }        [Subscription("PM1.RfPower.IsPowerOn")]        public bool IsPowerOn { get; set; }        [Subscription("PM1.RfPower.PowerSetPoint")]        public float PowerSetPoint { get; set; }        [Subscription("PM1.RfPower.ForwardPower")]        public float ForwardPower { get; set; }        [Subscription("PM1.RfMatch.Capacitance1PositionFeedBack")]        public float Capacitance1PositionFeedBack { get; set; }        [Subscription("PM1.RfMatch.Capacitance2PositionFeedBack")]        public float Capacitance2PositionFeedBack { get; set; }        [Subscription("PM1.RfMatch.VppFeedBack")]        public float VppFeedBack { get; set; }        public ICommand CmdSetValve { get; set; }        private GasPanelStateType _selectedGasStateType = GasPanelStateType.Monitor;        public GasPanelStateType SelectedGasStateType        {            get            {                return _selectedGasStateType;            }            set            {                _selectedGasStateType = value;                NotifyOfPropertyChange(nameof(SelectedGasStateType));            }        }        public AnalogDeviceDataItem MFC1        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC1Data.UniqueName,                    DeviceId = MFC1Data.DeviceSchematicId,                    DisplayName = MFC1Data.DisplayName,                    Scale = MFC1Data.Scale,                    Unit = MFC1Data.Unit,                    FeedBack = MFC1Data.FeedBack,                    SetPoint = MFC1Data.SetPoint,                    VirtualFeedBack = MFC1Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC2        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC2Data.UniqueName,                    DeviceId = MFC2Data.DeviceSchematicId,                    DisplayName = MFC2Data.DisplayName,                    Scale = MFC2Data.Scale,                    Unit = MFC2Data.Unit,                    FeedBack = MFC2Data.FeedBack,                    SetPoint = MFC2Data.SetPoint,                    VirtualFeedBack = MFC2Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC3        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC3Data.UniqueName,                    DeviceId = MFC3Data.DeviceSchematicId,                    DisplayName = MFC3Data.DisplayName,                    Scale = MFC3Data.Scale,                    Unit = MFC3Data.Unit,                    FeedBack = MFC3Data.FeedBack,                    SetPoint = MFC3Data.SetPoint,                    VirtualFeedBack = MFC3Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC4        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC4Data.UniqueName,                    DeviceId = MFC4Data.DeviceSchematicId,                    DisplayName = MFC4Data.DisplayName,                    Scale = MFC4Data.Scale,                    Unit = MFC4Data.Unit,                    FeedBack = MFC4Data.FeedBack,                    SetPoint = MFC4Data.SetPoint,                    VirtualFeedBack = MFC4Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC5        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC5Data.UniqueName,                    DeviceId = MFC5Data.DeviceSchematicId,                    DisplayName = MFC5Data.DisplayName,                    Scale = MFC5Data.Scale,                    Unit = MFC5Data.Unit,                    FeedBack = MFC5Data.FeedBack,                    SetPoint = MFC5Data.SetPoint,                    VirtualFeedBack = MFC5Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC6        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC6Data.UniqueName,                    DeviceId = MFC6Data.DeviceSchematicId,                    DisplayName = MFC6Data.DisplayName,                    Scale = MFC6Data.Scale,                    Unit = MFC6Data.Unit,                    FeedBack = MFC6Data.FeedBack,                    SetPoint = MFC6Data.SetPoint,                    VirtualFeedBack = MFC6Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC7        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC7Data.UniqueName,                    DeviceId = MFC7Data.DeviceSchematicId,                    DisplayName = MFC7Data.DisplayName,                    Scale = MFC7Data.Scale,                    Unit = MFC7Data.Unit,                    FeedBack = MFC7Data.FeedBack,                    SetPoint = MFC7Data.SetPoint,                    VirtualFeedBack = MFC7Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC8        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC8Data.UniqueName,                    DeviceId = MFC8Data.DeviceSchematicId,                    DisplayName = MFC8Data.DisplayName,                    Scale = MFC8Data.Scale,                    Unit = MFC8Data.Unit,                    FeedBack = MFC8Data.FeedBack,                    SetPoint = MFC8Data.SetPoint,                    VirtualFeedBack = MFC8Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC9        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC9Data.UniqueName,                    DeviceId = MFC9Data.DeviceSchematicId,                    DisplayName = MFC9Data.DisplayName,                    Scale = MFC9Data.Scale,                    Unit = MFC9Data.Unit,                    FeedBack = MFC9Data.FeedBack,                    SetPoint = MFC9Data.SetPoint,                    VirtualFeedBack = MFC9Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC10        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC10Data.UniqueName,                    DeviceId = MFC10Data.DeviceSchematicId,                    DisplayName = MFC10Data.DisplayName,                    Scale = MFC10Data.Scale,                    Unit = MFC10Data.Unit,                    FeedBack = MFC10Data.FeedBack,                    SetPoint = MFC10Data.SetPoint,                    VirtualFeedBack = MFC10Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC11        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC11Data.UniqueName,                    DeviceId = MFC11Data.DeviceSchematicId,                    DisplayName = MFC11Data.DisplayName,                    Scale = MFC11Data.Scale,                    Unit = MFC11Data.Unit,                    FeedBack = MFC11Data.FeedBack,                    SetPoint = MFC11Data.SetPoint,                    VirtualFeedBack = MFC11Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC12        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC12Data.UniqueName,                    DeviceId = MFC12Data.DeviceSchematicId,                    DisplayName = MFC12Data.DisplayName,                    Scale = MFC12Data.Scale,                    Unit = MFC12Data.Unit,                    FeedBack = MFC12Data.FeedBack,                    SetPoint = MFC12Data.SetPoint,                    VirtualFeedBack = MFC12Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC13        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC13Data.UniqueName,                    DeviceId = MFC13Data.DeviceSchematicId,                    DisplayName = MFC13Data.DisplayName,                    Scale = MFC13Data.Scale,                    Unit = MFC13Data.Unit,                    FeedBack = MFC13Data.FeedBack,                    SetPoint = MFC13Data.SetPoint,                    VirtualFeedBack = MFC13Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC14        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC14Data.UniqueName,                    DeviceId = MFC14Data.DeviceSchematicId,                    DisplayName = MFC14Data.DisplayName,                    Scale = MFC14Data.Scale,                    Unit = MFC14Data.Unit,                    FeedBack = MFC14Data.FeedBack,                    SetPoint = MFC14Data.SetPoint,                    VirtualFeedBack = MFC14Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC15        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC15Data.UniqueName,                    DeviceId = MFC15Data.DeviceSchematicId,                    DisplayName = MFC15Data.DisplayName,                    Scale = MFC15Data.Scale,                    Unit = MFC15Data.Unit,                    FeedBack = MFC15Data.FeedBack,                    SetPoint = MFC15Data.SetPoint,                    VirtualFeedBack = MFC15Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC16        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC16Data.UniqueName,                    DeviceId = MFC16Data.DeviceSchematicId,                    DisplayName = MFC16Data.DisplayName,                    Scale = MFC16Data.Scale,                    Unit = MFC16Data.Unit,                    FeedBack = MFC16Data.FeedBack,                    SetPoint = MFC16Data.SetPoint,                    VirtualFeedBack = MFC16Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFC51        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFC",                    DeviceName = MFC51Data.UniqueName,                    DeviceId = MFC51Data.DeviceSchematicId,                    DisplayName = MFC51Data.DisplayName,                    Scale = MFC51Data.Scale,                    Unit = MFC51Data.Unit,                    FeedBack = MFC51Data.FeedBack,                    SetPoint = MFC51Data.SetPoint,                    VirtualFeedBack = MFC51Data.VirtualFeedBack                };            }        }        public AnalogDeviceDataItem MFM57        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFM",                    DeviceId = MFM57Flow.DeviceSchematicId,                    DisplayName = MFM57Flow.DisplayName,                    Scale = MFM57Flow.Scale,                    Unit = MFM57Flow.Unit,                    FeedBack = MFM57Flow.FeedBack,                    SetPoint = MFM57Flow.SetPoint,                };            }        }        public AnalogDeviceDataItem MFM1        {            get            {                return new AnalogDeviceDataItem                {                    Type = "MFM",                    DeviceName = MFM1Flow.DisplayName,                    DeviceId = MFM1Flow.DeviceSchematicId,                    DisplayName = MFM1Flow.DisplayName,                    Scale = MFM1Flow.Scale,                    Unit = MFM1Flow.Unit,                    FeedBack = MFM1Flow.FeedBack,                    SetPoint = MFM1Flow.SetPoint,                };            }        }        public string IsRfPowerOn        {            get            {                return IsPowerOn ? "On" : "Off";            }        }        private bool _manualCheckSelect = false;        private bool _manualCheck = true;        public bool ManualCheck        {            get => _manualCheck;            set            {                _manualCheck = value;                NotifyOfPropertyChange(nameof(ManualCheck));            }        }        private bool _manualCheckHide;        public bool ManumalCheckHide        {            get => _manualCheckHide;            set            {                _manualCheckHide = value;                NotifyOfPropertyChange(nameof(ManumalCheckHide));            }        }        public bool ValveTrue { get; set; } = true;        public bool ValveFalse { get; set; } = false;        private bool _enablePLCPointControl = false;        public bool EnablePLCPointControl        {            get => _enablePLCPointControl;            set            {                _enablePLCPointControl = value;                NotifyOfPropertyChange(nameof(EnablePLCPointControl));            }        }        public GasPanelViewModel()        {            CmdSetMfcFlow = new DelegateCommand<object>(PerformCmdSetMfcFlow);            CmdSetMfmFlow = new DelegateCommand<object>(PerformCmdSetMfmFlow);        }        public void SelectedGasStateTypeCmd(string cmd)        {            switch (cmd)            {                case "Manual":                    SelectedGasStateType = GasPanelStateType.Manual;                    ManualEnable = true;                    break;                case "Monitor":                    SelectedGasStateType = GasPanelStateType.Monitor;                    ManualEnable = true;                    break;                case "Recipe":                    SelectedGasStateType = GasPanelStateType.Recipe;                    ManualEnable = false;                    break;                default:                    break;            }        }        protected override void OnActivate()        {            base.OnActivate();            //  EnableServiceControl = (bool)QueryDataClient.Instance.Service.GetConfig("System.IsServiceControlMode");            //   IsMfcNRInstalled = (bool)QueryDataClient.Instance.Service.GetConfig("PM1.MFC.MfcNR.IsMFCInstalled");        }        public void SetEditClick()        {            IsRecipeEdit = true;            //  EnableServiceControl = false;        }        protected override void OnDeactivate(bool close)        {            base.OnDeactivate(close);            //IsManagerPermission = false;        }        public void SetManual()        {            if (!_manualCheckSelect)            {                _manualCheckSelect = !_manualCheckSelect;                IsManagerPermission = true;                EnablePLCPointControl = false;            }            else            {                IsManagerPermission = true;                ManualCheck = false;                ManumalCheckHide = true;                _manualCheckSelect = !_manualCheckSelect;                EnablePLCPointControl = true;            }        }        public void OpenAll()        {            if (!VentValveData.IsOpen)                InvokeClient.Instance.Service.DoOperation($"{VentValveData.UniqueName}.{AITValveOperation.GVTurnValve}", true);            if (!PumpValveData.IsOpen)                InvokeClient.Instance.Service.DoOperation($"{PumpValveData.UniqueName}.{AITValveOperation.GVTurnValve}", true);        }        public void CloseAll()        {            if (PumpValveData.IsOpen)                InvokeClient.Instance.Service.DoOperation($"{PumpValveData.UniqueName}.{AITValveOperation.GVTurnValve}", false);            if (VentValveData.IsOpen)                InvokeClient.Instance.Service.DoOperation($"{VentValveData.UniqueName}.{AITValveOperation.GVTurnValve}", false);        }        private void PerformCmdSetMfcFlow(object param)        {            object[] args = (object[])param; //0:devicename, 1:operation, 2:args            if (args.Length == 3)            {                InvokeClient.Instance.Service.DoOperation($"{args[0]}.{args[1]}", args[2]);            }           // SetCursorPos(0, 0);        }        private void PerformCmdSetMfmFlow(object param)        {            //object[] args = (object[])param; //0:devicename, 1:operation, 2:args            //if (args.Length == 3)            //{            //    InvokeClient.Instance.Service.DoOperation($"PM1.{args[0]}.{args[1]}", args[2]);            //}            //SetCursorPos(0, 0);        }        bool isSensorRecipeOK = false;        Dictionary<string, object> oldresult;        private Dictionary<string, object> ClearNotChangedValue(Dictionary<string, object> result)        {            Dictionary<string, object> temp = result;            if (oldresult == null)            {                oldresult = result;            }            else            {                try                {                    List<string> strkeys = new List<string>();                    foreach (var key in result.Keys)                    {                        if (_subscribedKeys.Contains(key) && oldresult.ContainsKey(key) && result.ContainsKey(key))                        {                            if (result[key].GetType() == typeof(AITValveData) && (((AITValveData)oldresult[key]).Feedback != ((AITValveData)result[key]).Feedback                                || ((AITValveData)oldresult[key]).VirtualFeedback != ((AITValveData)result[key]).VirtualFeedback))                            {                                strkeys.Add(key);                            }                            else if (result[key].GetType() == typeof(AITSensorData) && ((AITSensorData)oldresult[key]).Value != ((AITSensorData)result[key]).Value)                            {                                strkeys.Add(key);                            }                            else if (result[key].GetType() == typeof(AITMfcData) && (((AITMfcData)oldresult[key]).FeedBack != ((AITMfcData)result[key]).FeedBack ||                               ((AITMfcData)oldresult[key]).VirtualFeedBack != ((AITMfcData)result[key]).VirtualFeedBack) || ((AITMfcData)oldresult[key]).SetPoint!= ((AITMfcData)result[key]).SetPoint)                            {                                strkeys.Add(key);                            }                            else if (result[key].GetType() == typeof(float) && (float)oldresult[key] == (float)result[key])                            {                                strkeys.Add(key);                            }                            else if (result[key].GetType() == typeof(int) && (int)oldresult[key] == (int)result[key])                            {                                strkeys.Add(key);                            }                            else if (result[key].GetType() == typeof(bool) && (bool)oldresult[key] == (bool)result[key])                            {                                strkeys.Add(key);                            }                        }                    }                    for (int i = 0; i < strkeys.Count; i++)                    {                        temp.Remove(strkeys[i]);                    }                }                catch (Exception ex)                {                    LOG.Error("由RT返回的数据更新失败" + "ClearNotChangedValue", ex);                }            }            return temp;        }        protected override void Poll()        {            if (_subscribedKeys.Count > 0)            {                Dictionary<string, object> result = QueryDataClient.Instance.Service.PollData(_subscribedKeys);                Dictionary<string, object> Tempresult = new Dictionary<string, object>(result);                if (SelectedGasStateType != GasPanelStateType.Monitor)                {                    result = ClearNotChangedValue(result);                    oldresult = Tempresult;                }                if (result == null)                {                    LOG.Error("获取RT数据失败");                    return;                }                if (result.Count != _subscribedKeys.Count)                {                    string unknowKeys = string.Empty;                    foreach (string key in _subscribedKeys)                    {                        if (!result.ContainsKey(key))                        {                            unknowKeys += key + "\r\n";                        }                    }                }                InvokeBeforeUpdateProperty(result);                UpdateValue(result);                Application.Current?.Dispatcher.Invoke(new Action(() =>                {                    if (result.Count != 0)                    {                        InvokePropertyChanged();                    }                    InvokeAfterUpdateProperty(result);                }));            }        }        ///// <summary>           ///// 设置鼠标的坐标           ///// </summary>           ///// <param name="x">横坐标</param>           ///// <param name="y">纵坐标</param>           //[DllImport("User32")]        //public extern static void SetCursorPos(int x, int y);               protected override void InvokeBeforeUpdateProperty(Dictionary<string, object> data)        {            base.InvokeBeforeUpdateProperty(data);        }        protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)        {            base.InvokeAfterUpdateProperty(data);            if (SensorRecipeOK != null && SensorRecipeOK.Value)            {                if (isSensorRecipeOK != SensorRecipeOK.Value)                {                    _manualCheckSelect = false;                    IsManagerPermission = true;                    IsRecipeEdit = true;                    //  EnableServiceControl = false;                }                isSensorRecipeOK = SensorRecipeOK.Value;            }            MFCChangedUpdate();        }        private void MFCChangedUpdate()        {            if (MFC1.VirtualFeedBack != MFC1Data.VirtualFeedBack || MFC1.FeedBack != MFC1Data.FeedBack)            {                MFC1.VirtualFeedBack= MFC1Data.VirtualFeedBack;                MFC1.FeedBack = MFC1Data.FeedBack;            }            if (MFC2.VirtualFeedBack != MFC2Data.VirtualFeedBack || MFC2.FeedBack != MFC2Data.FeedBack)            {                MFC2.VirtualFeedBack = MFC2Data.VirtualFeedBack;                MFC2.FeedBack = MFC2Data.FeedBack;            }            if (MFC3.VirtualFeedBack != MFC3Data.VirtualFeedBack || MFC3.FeedBack != MFC3Data.FeedBack)            {                MFC3.VirtualFeedBack = MFC3Data.VirtualFeedBack;                MFC3.FeedBack = MFC3Data.FeedBack;            }            if (MFC4.VirtualFeedBack != MFC4Data.VirtualFeedBack || MFC4.FeedBack != MFC4Data.FeedBack)            {                MFC4.VirtualFeedBack = MFC4Data.VirtualFeedBack;                MFC4.FeedBack = MFC4Data.FeedBack;            }            if (MFC5.VirtualFeedBack != MFC5Data.VirtualFeedBack || MFC5.FeedBack != MFC5Data.FeedBack)            {                MFC5.VirtualFeedBack = MFC5Data.VirtualFeedBack;                MFC5.FeedBack = MFC5Data.FeedBack;            }            if (MFC6.VirtualFeedBack != MFC6Data.VirtualFeedBack || MFC6.FeedBack != MFC6Data.FeedBack)            {                MFC6.VirtualFeedBack = MFC6Data.VirtualFeedBack;                MFC6.FeedBack = MFC6Data.FeedBack;            }            if (MFC7.VirtualFeedBack != MFC7Data.VirtualFeedBack || MFC7.FeedBack != MFC7Data.FeedBack)            {                MFC7.VirtualFeedBack = MFC7Data.VirtualFeedBack;                MFC7.FeedBack = MFC7Data.FeedBack;            }            if (MFC8.VirtualFeedBack != MFC8Data.VirtualFeedBack || MFC8.FeedBack != MFC8Data.FeedBack)            {                MFC8.VirtualFeedBack = MFC8Data.VirtualFeedBack;                MFC8.FeedBack = MFC8Data.FeedBack;            }            if (MFC9.VirtualFeedBack != MFC9Data.VirtualFeedBack || MFC9.FeedBack != MFC9Data.FeedBack)            {                MFC9.VirtualFeedBack = MFC9Data.VirtualFeedBack;                MFC9.FeedBack = MFC9Data.FeedBack;            }            if (MFC10.VirtualFeedBack != MFC10Data.VirtualFeedBack || MFC10.FeedBack != MFC10Data.FeedBack)            {                MFC10.VirtualFeedBack = MFC10Data.VirtualFeedBack;                MFC10.FeedBack = MFC10Data.FeedBack;            }            if (MFC11.VirtualFeedBack != MFC11Data.VirtualFeedBack || MFC11.FeedBack != MFC11Data.FeedBack)            {                MFC11.VirtualFeedBack = MFC11Data.VirtualFeedBack;                MFC11.FeedBack = MFC11Data.FeedBack;            }            if (MFC12.VirtualFeedBack != MFC12Data.VirtualFeedBack || MFC12.FeedBack != MFC12Data.FeedBack)            {                MFC12.VirtualFeedBack = MFC12Data.VirtualFeedBack;                MFC12.FeedBack = MFC12Data.FeedBack;            }            if (MFC13.VirtualFeedBack != MFC13Data.VirtualFeedBack || MFC13.FeedBack != MFC13Data.FeedBack)            {                MFC13.VirtualFeedBack = MFC13Data.VirtualFeedBack;                MFC13.FeedBack = MFC13Data.FeedBack;            }            if (MFC14.VirtualFeedBack != MFC14Data.VirtualFeedBack || MFC14.FeedBack != MFC14Data.FeedBack)            {                MFC14.VirtualFeedBack = MFC14Data.VirtualFeedBack;                MFC14.FeedBack = MFC14Data.FeedBack;            }            if (MFC15.VirtualFeedBack != MFC15Data.VirtualFeedBack || MFC15.FeedBack != MFC15Data.FeedBack)            {                MFC15.VirtualFeedBack = MFC15Data.VirtualFeedBack;                MFC15.FeedBack = MFC15Data.FeedBack;            }            if (MFC16.VirtualFeedBack != MFC16Data.VirtualFeedBack || MFC16.FeedBack != MFC16Data.FeedBack)            {                MFC16.VirtualFeedBack = MFC16Data.VirtualFeedBack;                MFC16.FeedBack = MFC16Data.FeedBack;            }        }        public void SwichValue(string name)        {            if (SelectedGasStateType == GasPanelStateType.Monitor || SelectedGasStateType == GasPanelStateType.Recipe) return;            var dialog = new SwitchValueDialog { };            dialog.IsOpen = true;            switch (name.ToUpper())            {                case "BWR":                    dialog.IsOpen = ValveBWR.Feedback;                    break;                case "DPR":                    dialog.IsOpen = ValveDPR.Feedback;                    break;                case "CEXH":                    dialog.IsOpen = IsCEXHOn;                    break;                case "F2":                    dialog.IsOpen = IsF2ClnOn;                    break;                case "HF":                    dialog.IsOpen = IsHFClnOn;                    break;                case "DEPO":                    dialog.IsOpen = IsDEPOOn;                    break;            }            dialog.Owner = WinOwner;            dialog.Topmost = true;            dialog.WindowStartupLocation = WindowStartupLocation.CenterScreen;            dialog.DeviceName = $"Swich {name}";            dialog.ShowDialog();            if ((bool)dialog.IsSave)            {                switch (name.ToUpper())                {                    case "BWR":                        InvokeClient.Instance.Service.DoOperation($"{ValveBWR.UniqueName}.{AITValveOperation.GVTurnValve}", dialog.IsOpen);                        break;                    case "DPR":                        InvokeClient.Instance.Service.DoOperation($"{ValveDPR.UniqueName}.{AITValveOperation.GVTurnValve}", dialog.IsOpen);                        break;                    case "CEXH":                        InvokeClient.Instance.Service.DoOperation($"PM1.SetCEXHEnable", dialog.IsOpen);                        break;                    case "F2":                        InvokeClient.Instance.Service.DoOperation($"PM1.SetF2ClnEnable", dialog.IsOpen);                        break;                    case "HF":                        InvokeClient.Instance.Service.DoOperation($"PM1.SetHFClnEnable", dialog.IsOpen);                        break;                    case "DEPO":                        InvokeClient.Instance.Service.DoOperation($"PM1.SetDEPOEnable", dialog.IsOpen);                        break;                }            }        }        public void SetEnable(string name)        {            if (SelectedGasStateType == GasPanelStateType.Monitor || SelectedGasStateType == GasPanelStateType.Recipe) return;            var dialog = new SwitchValueDialog2 { };            dialog.IsOpen = true;            switch (name.ToUpper())            {                case "HTR1":                    dialog.IsOpen = IsHTR1Enable;                    break;                case "HTR2":                    dialog.IsOpen = IsHTR2Enable;                    break;                case "HTR3":                    dialog.IsOpen = IsHTR3Enable;                    break;            }            dialog.Owner = WinOwner;            dialog.Topmost = true;            dialog.WindowStartupLocation = WindowStartupLocation.CenterScreen;            dialog.DeviceName = $"Swich {name}";            dialog.ShowDialog();            if ((bool)dialog.IsSave)            {                switch (name.ToUpper())                {                    case "HTR1":                        InvokeClient.Instance.Service.DoOperation($"PM1.SetHTR1Enable", dialog.IsOpen);                        break;                    case "HTR2":                        InvokeClient.Instance.Service.DoOperation($"PM1.SetHTR2Enable", dialog.IsOpen);                        break;                    case "HTR3":                        InvokeClient.Instance.Service.DoOperation($"PM1.SetHTR3Enable", dialog.IsOpen);                        break;                }            }        }        public void SelectPump(string _pumpname)        {            if (SelectedGasStateType == GasPanelStateType.Monitor || SelectedGasStateType == GasPanelStateType.Recipe) return;            if (!DialogBox.Confirm($"Are you sure change {_pumpname} status?"))                return;            if (_pumpname == "AUC")            {                InvokeClient.Instance.Service.DoOperation($"{AUCPump.UniqueName}.{AITValveOperation.GVTurnValve}", !AUCPump.Feedback);            }            if (_pumpname == "AGV")            {                InvokeClient.Instance.Service.DoOperation($"{AGVPump.UniqueName}.{AITValveOperation.GVTurnValve}", !AGVPump.Feedback);            }            if (_pumpname == "Both")            {                InvokeClient.Instance.Service.DoOperation($"{BothPump.UniqueName}.{AITValveOperation.GVTurnValve}", !BothPump.Feedback);            }        }    }}
 |