| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 | using Aitex.Core.Common.DeviceData;using Aitex.Core.RT.SCCore;using ExcelLibrary.BinaryFileFormat;using MECF.Framework.Common.DataCenter;using MECF.Framework.Common.OperationCenter;using Prism.Commands;using Prism.Mvvm;using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;using System.Windows.Threading;using Venus_MainPages.Unity;using Venus_Themes.CustomControls;using Venus_Themes.UserControls;namespace Venus_MainPages.ViewModels{    public class DETMOperationViewModel : BindableBase    {        #region 私有变量        private bool m_TMValveN2IsOpen;        private bool m_TMSoftPumpIsOpen;        private bool m_TMSoftVentIsOpen;        private bool m_TMFastPumpIsOpen;        private bool m_TMFastVentIsOpen;        private bool m_VCEASoftPumpIsOpen;        private bool m_VCEASoftVentIsOpen;        private bool m_VCEAFastPumpIsOpen;        private bool m_VCEAFastVentIsOpen;        private bool m_VCEBSoftPumpIsOpen;        private bool m_VCEBSoftVentIsOpen;        private bool m_VCEBFastPumpIsOpen;        private bool m_VCEBFastVentIsOpen;        private bool m_PMAIsInstalled;        private bool m_PMBIsInstalled;        private bool m_PMCIsInstalled;        private bool m_PMDIsInstalled;        private bool m_VCEAIsInstalled;        private bool m_VCEBIsInstalled;        private bool m_VCEADoorIsOpen;        private bool m_VCEBDoorIsOpen;        private bool m_PMADoorIsOpen;        private bool m_PMBDoorIsOpen;        private bool m_PMCDoorIsOpen;        private bool m_PMDDoorIsOpen;        private bool m_VCEAOutDoorIsOpen;        private bool m_VCEBOutDoorIsOpen;        private bool m_TMIsVAC;        private bool m_TMIsATM;        private bool m_VCEAIsVAC;        private bool m_VCEAIsATM;        private bool m_VCEBIsVAC;        private bool m_VCEBIsATM;        private int m_GoToSlotNumber;        private bool m_TMIsOnline;        private Dictionary<string, object> m_RtDataValues = new Dictionary<string, object>();        private List<string> m_RtDataKeys = new List<string>();        #endregion        #region 暴露变量        public bool TMValveN2IsOpen        {            get => m_TMValveN2IsOpen;            set => SetProperty(ref m_TMValveN2IsOpen, value);        }        public bool TMSoftPumpIsOpen { get => m_TMSoftPumpIsOpen; set => SetProperty(ref m_TMSoftPumpIsOpen, value); }        public bool TMSoftVentIsOpen { get => m_TMSoftVentIsOpen; set => SetProperty(ref m_TMSoftVentIsOpen, value); }        public bool TMFastPumpIsOpen { get => m_TMFastPumpIsOpen; set => SetProperty(ref m_TMFastPumpIsOpen, value); }        public bool TMFastVentIsOpen { get => m_TMFastVentIsOpen; set => SetProperty(ref m_TMFastVentIsOpen, value); }        public bool VCEASoftPumpIsOpen { get => m_VCEASoftPumpIsOpen; set => SetProperty(ref m_VCEASoftPumpIsOpen, value); }        public bool VCEASoftVentIsOpen { get => m_VCEASoftVentIsOpen; set => SetProperty(ref m_VCEASoftVentIsOpen, value); }        public bool VCEAFastPumpIsOpen { get => m_VCEAFastPumpIsOpen; set => SetProperty(ref m_VCEAFastPumpIsOpen, value); }        public bool VCEAFastVentIsOpen { get => m_VCEAFastVentIsOpen; set => SetProperty(ref m_VCEAFastVentIsOpen, value); }        public bool VCEBSoftPumpIsOpen { get => m_VCEBSoftPumpIsOpen; set => SetProperty(ref m_VCEBSoftPumpIsOpen, value); }        public bool VCEBSoftVentIsOpen { get => m_VCEBSoftVentIsOpen; set => SetProperty(ref m_VCEBSoftVentIsOpen, value); }        public bool VCEBFastPumpIsOpen { get => m_VCEBFastPumpIsOpen; set => SetProperty(ref m_VCEBFastPumpIsOpen, value); }        public bool VCEBFastVentIsOpen { get => m_VCEBFastVentIsOpen; set => SetProperty(ref m_VCEBFastVentIsOpen, value); }        public bool TMIsVAC { get => m_TMIsVAC; set => SetProperty(ref m_TMIsVAC, value); }        public bool TMIsATM { get => m_TMIsATM; set => SetProperty(ref m_TMIsATM, value); }        public bool VCEAIsVAC { get => m_VCEAIsVAC; set => SetProperty(ref m_VCEAIsVAC, value); }        public bool VCEBIsVAC { get => m_VCEBIsVAC; set => SetProperty(ref m_VCEBIsVAC, value); }        public bool VCEAIsATM { get => m_VCEAIsATM; set => SetProperty(ref m_VCEAIsATM, value); }        public bool VCEBIsATM { get => m_VCEBIsATM; set => SetProperty(ref m_VCEBIsATM, value); }        public bool PMAIsInstalled { get => m_PMAIsInstalled; set => SetProperty(ref m_PMAIsInstalled, value); }        public bool PMBIsInstalled { get => m_PMBIsInstalled; set => SetProperty(ref m_PMBIsInstalled, value); }        public bool PMCIsInstalled { get => m_PMCIsInstalled; set => SetProperty(ref m_PMCIsInstalled, value); }        public bool PMDIsInstalled { get => m_PMDIsInstalled; set => SetProperty(ref m_PMDIsInstalled, value); }        public bool VCEAIsInstalled { get => m_VCEAIsInstalled; set => SetProperty(ref m_VCEAIsInstalled, value); }        public bool VCEBIsInstalled { get => m_VCEBIsInstalled; set => SetProperty(ref m_VCEBIsInstalled, value); }        public int GoToSlotNumber { get => m_GoToSlotNumber; set => SetProperty(ref m_GoToSlotNumber, value); }        public Dictionary<string, object> RtDataValues        {            get { return m_RtDataValues; }            set { SetProperty(ref m_RtDataValues, value); }        }        //public bool TMIsOFFline => !TMIsOnline;        public bool VCEADoorIsOpen { get => m_VCEADoorIsOpen; set => SetProperty(ref m_VCEADoorIsOpen, value); }        public bool VCEBDoorIsOpen { get => m_VCEBDoorIsOpen; set => SetProperty(ref m_VCEBDoorIsOpen, value); }        public bool PMADoorIsOpen { get => m_PMADoorIsOpen; set => SetProperty(ref m_PMADoorIsOpen, value); }        public bool PMBDoorIsOpen { get => m_PMBDoorIsOpen; set => SetProperty(ref m_PMBDoorIsOpen, value); }        public bool PMCDoorIsOpen { get => m_PMCDoorIsOpen; set => SetProperty(ref m_PMCDoorIsOpen, value); }        public bool PMDDoorIsOpen { get => m_PMDDoorIsOpen; set => SetProperty(ref m_PMDDoorIsOpen, value); }        public bool VCEAOutDoorIsOpen { get => m_VCEAOutDoorIsOpen; set => SetProperty(ref m_VCEAOutDoorIsOpen, value); }        public bool VCEBOutDoorIsOpen { get => m_VCEBOutDoorIsOpen; set => SetProperty(ref m_VCEBOutDoorIsOpen, value); }        #endregion        #region 构造函数        public DETMOperationViewModel()        {            addDataKeys();            string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');            PMAIsInstalled = allModules.Contains("PMA");            PMBIsInstalled = allModules.Contains("PMB");            PMCIsInstalled = allModules.Contains("PMC");            PMDIsInstalled = allModules.Contains("PMD");            VCEAIsInstalled = allModules.Contains("VCEA");            VCEBIsInstalled = allModules.Contains("VCEB");            RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);            //2023/10/20 朱永吉 郭治川 取消N2 valve 动画保持流的状态            TMValveN2IsOpen = true;            TMSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMSoftPumpValve.IsOpen");            TMSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMSoftVentValve.IsOpen");            TMFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMFastPumpValve.IsOpen");            TMFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMFastVentValve.IsOpen");            VCEASoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEASoftPumpValve.IsOpen");            VCEASoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEASoftVentValve.IsOpen");            VCEAFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEAFastPumpValve.IsOpen");            VCEAFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEAFastVentValve.IsOpen");            VCEBSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBSoftPumpValve.IsOpen");            VCEBSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBSoftVentValve.IsOpen");            VCEBFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBFastPumpValve.IsOpen");            VCEBFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBFastVentValve.IsOpen");            TMIsVAC = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMVACSensor.Value");            TMIsATM = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMIsATM");            //VCEAIsVAC = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEAVACSensor.Value");            //VCEBIsVAC = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEAVACSensor.Value");            VCEAIsATM = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEAIsATM");            VCEBIsATM = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBIsATM");            VCEADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEASlitDoorClosed");            VCEBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBSlitDoorClosed");            PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.PMASlitDoorClosed");            PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.PMBSlitDoorClosed");            PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.PMCSlitDoorClosed");            PMDDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.PMDSlitDoorClosed");            VCEAOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCEA.VCEOutDoorClosed");            VCEBOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCEB.VCEOutDoorClosed");            DispatcherTimer timer = new DispatcherTimer();            timer.Interval = TimeSpan.FromSeconds(0.5);            timer.Tick += timer_Tick;            timer.Start();        }        #endregion        #region 公共方法        private DelegateCommand<object> _ControlValveCommand;        public DelegateCommand<object> ControlValveCommand =>            _ControlValveCommand ?? (_ControlValveCommand = new DelegateCommand<object>(OnControlValve));        private DelegateCommand<object> _ControlSlitDoorCommand;        public DelegateCommand<object> ControlSlitDoorCommand =>            _ControlSlitDoorCommand ?? (_ControlSlitDoorCommand = new DelegateCommand<object>(OnControlSlitDoor));        private DelegateCommand<object> _MapCommand;        public DelegateCommand<object> MapCommand =>            _MapCommand ?? (_MapCommand = new DelegateCommand<object>(OnMap));        private DelegateCommand<object> _GoToLoadCommand;        public DelegateCommand<object> GoToLoadCommand =>            _GoToLoadCommand ?? (_GoToLoadCommand = new DelegateCommand<object>(OnGoToLoad));        private DelegateCommand<object> _GoToSlotCommand;        public DelegateCommand<object> GoToSlotCommand =>            _GoToSlotCommand ?? (_GoToSlotCommand = new DelegateCommand<object>(OnGoToSlot));        private DelegateCommand<object> _OpenDoorCommand;        public DelegateCommand<object> OpenDoorCommand =>            _OpenDoorCommand ?? (_OpenDoorCommand = new DelegateCommand<object>(OnOpenDoor));        private DelegateCommand<object> _CloseDoorCommand;        public DelegateCommand<object> CloseDoorCommand =>            _CloseDoorCommand ?? (_CloseDoorCommand = new DelegateCommand<object>(OnCloseDoor));        private DelegateCommand<object> _HOMECommand;        public DelegateCommand<object> HOMECommand =>            _HOMECommand ?? (_HOMECommand = new DelegateCommand<object>(OnHome));        private DelegateCommand<object> _DETMPumpCommand;        public DelegateCommand<object> DETMPumpCommand =>            _DETMPumpCommand ?? (_DETMPumpCommand = new DelegateCommand<object>(OnSetDEPump));        private DelegateCommand<object> _VCEAPumpCommand;        public DelegateCommand<object> VCEAPumpCommand =>            _VCEAPumpCommand ?? (_VCEAPumpCommand = new DelegateCommand<object>(OnSetVCEAPump));        private DelegateCommand<object> _PumpDown;        public DelegateCommand<object> PumpDown =>            _PumpDown ?? (_PumpDown = new DelegateCommand<object>(OnPumpDown));        private DelegateCommand<object> _Vent;        public DelegateCommand<object> Vent =>            _Vent ?? (_Vent = new DelegateCommand<object>(OnVent));        private DelegateCommand _tmhome;        public DelegateCommand TmHome =>            _tmhome ?? (_tmhome = new DelegateCommand(tmhome));        private DelegateCommand _abort;        public DelegateCommand Abort =>            _abort ?? (_abort = new DelegateCommand(abort));        private DelegateCommand _TMSetOnline;        public DelegateCommand TMSetOnline =>            _TMSetOnline ?? (_TMSetOnline = new DelegateCommand(TmSetOnline));        private DelegateCommand _TMSetOffline;        public DelegateCommand TMSetOffline =>            _TMSetOffline ?? (_TMSetOffline = new DelegateCommand(TmSetOffline));        private DelegateCommand<object> _VCEHome;        public DelegateCommand<object> VCEHome => _VCEHome ?? (_VCEHome = new DelegateCommand<object>(vceHome));        private DelegateCommand<object> _VCEClear;        public DelegateCommand<object> VCEClear => _VCEClear ?? (_VCEClear = new DelegateCommand<object>(vceClear));        private DelegateCommand<object> _VCEAbort;        public DelegateCommand<object> VCEAbort => _VCEAbort ?? (_VCEAbort = new DelegateCommand<object>(vceAbort));        #endregion        #region 私有方法        private void addDataKeys()        {            m_RtDataKeys.Add($"DETM.TMSoftPumpValve.IsOpen");            m_RtDataKeys.Add($"DETM.TMSoftVentValve.IsOpen");            m_RtDataKeys.Add($"DETM.TMFastPumpValve.IsOpen");            m_RtDataKeys.Add($"DETM.TMFastVentValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEASoftPumpValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEBSoftPumpValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEASoftVentValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEBSoftVentValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEAFastPumpValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEBFastPumpValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEAFastVentValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEBFastVentValve.IsOpen");            m_RtDataKeys.Add($"DETM.VCEASlitDoorClosed");            m_RtDataKeys.Add($"DETM.VCEBSlitDoorClosed");            m_RtDataKeys.Add($"DETM.PMASlitDoorClosed");            m_RtDataKeys.Add($"DETM.PMBSlitDoorClosed");            m_RtDataKeys.Add($"DETM.PMCSlitDoorClosed");            m_RtDataKeys.Add($"DETM.PMDSlitDoorClosed");            m_RtDataKeys.Add($"DETM.TMVACSensor.Value");            m_RtDataKeys.Add($"DETM.TMIsATM");            m_RtDataKeys.Add($"DETM.VCEAIsATM");            m_RtDataKeys.Add($"DETM.VCEBIsATM");            m_RtDataKeys.Add($"DETM.IsOnline");            m_RtDataKeys.Add($"DETM.IsOffline");            m_RtDataKeys.Add($"DETM.PumpIsRunning");            m_RtDataKeys.Add($"DETM.TMPipelinePressure.Value");            m_RtDataKeys.Add($"DETM.TMPressure.Value");            m_RtDataKeys.Add($"DETM.VCEAPressure.Value");            m_RtDataKeys.Add($"DETM.VCEBPressure.Value");            m_RtDataKeys.Add($"VCEA.VCEOutDoorClosed");            m_RtDataKeys.Add($"VCEB.VCEOutDoorClosed");            m_RtDataKeys.Add($"DETM.TM_MFC1.FeedBack");            m_RtDataKeys.Add($"DETM.TM_MFC1.SetPoint");        }        private void timer_Tick(object sender, EventArgs e)        {            RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);            TMSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMSoftPumpValve.IsOpen");            TMSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMSoftVentValve.IsOpen");            TMFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMFastPumpValve.IsOpen");            TMFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMFastVentValve.IsOpen");            VCEASoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEASoftPumpValve.IsOpen");            VCEASoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEASoftVentValve.IsOpen");            VCEAFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEAFastPumpValve.IsOpen");            VCEAFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEAFastVentValve.IsOpen");            VCEBSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBSoftPumpValve.IsOpen");            VCEBSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBSoftVentValve.IsOpen");            VCEBFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBFastPumpValve.IsOpen");            VCEBFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBFastVentValve.IsOpen");            VCEADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEASlitDoorClosed");            VCEBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBSlitDoorClosed");            PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.PMASlitDoorClosed");            PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.PMBSlitDoorClosed");            PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "DETM.PMCSlitDoorClosed");            VCEAOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCEA.VCEAOutDoorClosed");            VCEBOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCEB.VCEBOutDoorClosed");            TMIsVAC = (CommonFunction.GetValue<int>(RtDataValues, "DETM.TMPressure.Value") < Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"DETM.VACTargetPressure")));            TMIsATM = CommonFunction.GetValue<bool>(RtDataValues, "DETM.TMIsATM");            VCEAIsVAC = (CommonFunction.GetValue<int>(RtDataValues, "DETM.VCEAPressure.Value") < Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"VCEA.VACTargetPressure")));            VCEBIsVAC = (CommonFunction.GetValue<int>(RtDataValues, "DETM.VCEBPressure.Value") < Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"VCEB.VACTargetPressure")));            VCEAIsATM = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEAIsATM");            VCEBIsATM = CommonFunction.GetValue<bool>(RtDataValues, "DETM.VCEBIsATM");        }        private void TmSetOnline()        {            InvokeClient.Instance.Service.DoOperation("DETM.SetOnline");        }        private void TmSetOffline()        {            InvokeClient.Instance.Service.DoOperation("DETM.SetOffline");        }        private void vceHome(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{obj}.HOME");        }        private void vceClear(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{obj}.ClearError");        }        private void vceAbort(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{obj}.Abort");        }        private void tmhome()        {            InvokeClient.Instance.Service.DoOperation("DETM.Home");        }        private void abort()        {            InvokeClient.Instance.Service.DoOperation("DETM.Abort");        }        private void OnVent(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{obj}.Vent");        }        private void OnPumpDown(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{obj}.PumpDown");        }        private void OnSetDEPump(object obj)        {            bool.TryParse(obj.ToString(), out bool Open);            InvokeClient.Instance.Service.DoOperation("DETM.ControlPump", Open);        }        private void OnSetVCEAPump(object obj)        {            bool.TryParse(obj.ToString(), out bool Open);            InvokeClient.Instance.Service.DoOperation("VCEA.ControlPump", Open);        }        private void OnHome(object chamber)        {            InvokeClient.Instance.Service.DoOperation($"{chamber}.HOME");        }        private void OnOpenDoor(object chamber)        {            InvokeClient.Instance.Service.DoOperation($"{chamber}.DoorOpen");        }        private void OnCloseDoor(object chamber)        {            InvokeClient.Instance.Service.DoOperation($"{chamber}.DoorClose");        }        private void OnMap(object chamber)        {            InvokeClient.Instance.Service.DoOperation($"{chamber}.Map");        }        private void OnGoToLoad(object chamber)        {            InvokeClient.Instance.Service.DoOperation($"{chamber}.GotoLP");        }        private void OnGoToSlot(object chamber)        {            InvokeClient.Instance.Service.DoOperation($"{chamber}.Goto", GoToSlotNumber);        }        private void OnControlValve(object obj)        {            CommonValveControl commonValveControl = (CommonValveControl)obj;            if (commonValveControl.IsCanEdit == true)            {                InvokeClient.Instance.Service.DoOperation($"DETM.{commonValveControl.Tag}Valve.{AITValveOperation.GVTurnValve}", !commonValveControl.Status);            }        }        private void OnControlSlitDoor(object obj)        {            string Module = obj.ToString().Split(',')[0];            bool.TryParse(obj.ToString().Split(',')[1], out bool Open);            InvokeClient.Instance.Service.DoOperation($"DETM.SetSlitDoor", Module, Open);        }        #endregion    }}
 |