Procházet zdrojové kódy

1.添加RF Calibration功能
2.修复PartialPressure UI不显示bug

lixiang před 1 rokem
rodič
revize
af631c4aaa

+ 12 - 2
Venus/Venus_MainPages/ViewModels/OperationOverViewModel.cs

@@ -501,7 +501,7 @@ namespace Venus_MainPages.ViewModels
 
             ATMModeIsOn = Convert.ToBoolean(QueryDataClient.Instance.Service.GetConfig("System.IsATMMode")) == true ? "ATM Mode On" : "ATM Mode Off";
 
-            LOG.Info("开启OperationOverView界面");
+            LOG.Info("开启UI界面");
         }
 
 
@@ -552,21 +552,27 @@ namespace Venus_MainPages.ViewModels
         {
             var info = obj as WaferAssociationInfo;
             InvokeClient.Instance.Service.DoOperation("System.StartJob", info.LotId);
+            LOG.Info("System,Start Job");
+
         }
         private void OnStop(object obj)
         {
             var info = obj as WaferAssociationInfo;
             InvokeClient.Instance.Service.DoOperation("System.PauseJob", info.JobID);
+            LOG.Info("System,Pause Job");
         }
         private void OnAbort(object obj)
         {
             var info = obj as WaferAssociationInfo;
 
             InvokeClient.Instance.Service.DoOperation("System.ResumeJob", info.JobID);
+            LOG.Info("System,Resume Job");
+
         }
         private void OnHomeAll()
         {
             InvokeClient.Instance.Service.DoOperation("System.HomeAll");
+            LOG.Info("System,Home All");
         }
 
         private void OnResumeAllJob()
@@ -590,10 +596,14 @@ namespace Venus_MainPages.ViewModels
                     InvokeClient.Instance.Service.DoOperation("System.PauseJob", x);
                 });
             }
+            LOG.Info("System,Resume All Job");
+
         }
         private void OnAbortAll()
         {
             InvokeClient.Instance.Service.DoOperation("System.Abort");
+            LOG.Info("System, Abort");
+
         }
         private void OnReturnAllWafer()
         {
@@ -624,7 +634,7 @@ namespace Venus_MainPages.ViewModels
 
                 InvokeClient.Instance.Service.DoOperation("System.ReturnAllWafer", dialog.CoolingFlag, coolingtime, dialog.AlignFlag, angel);
             }
-
+            LOG.Info("System,Return All Wafer");
         }
 
         private void OnSetSequence(object obj)

+ 66 - 153
Venus/Venus_MainPages/ViewModels/OverKepler2200AViewModel.cs

@@ -974,9 +974,9 @@ namespace Venus_MainPages.ViewModels
         //public DelegateCommand HeCommand =>
         //    _HeCommand ?? (_HeCommand = new DelegateCommand(OnHe));
 
-        private DelegateCommand _RfCommand;
-        public DelegateCommand RfCommand =>
-            _RfCommand ?? (_RfCommand = new DelegateCommand(OnRf));
+        //private DelegateCommand _RfCommand;
+        //public DelegateCommand RfCommand =>
+        //    _RfCommand ?? (_RfCommand = new DelegateCommand(OnRf));
 
         private DelegateCommand _PurgeCommand;
         public DelegateCommand PurgeCommand =>
@@ -1014,9 +1014,9 @@ namespace Venus_MainPages.ViewModels
         public DelegateCommand ClosePendulumValveCommand =>
             _ClosePendulumValveCommand ?? (_ClosePendulumValveCommand = new DelegateCommand(OnClosePendulumValve));
 
-        private DelegateCommand<object> _PinUpDownCommand;
-        public DelegateCommand<object> PinUpDownCommand =>
-            _PinUpDownCommand ?? (_PinUpDownCommand = new DelegateCommand<object>(OnPinUpDown));
+        //private DelegateCommand<object> _PinUpDownCommand;
+        //public DelegateCommand<object> PinUpDownCommand =>
+        //    _PinUpDownCommand ?? (_PinUpDownCommand = new DelegateCommand<object>(OnPinUpDown));
 
         private DelegateCommand<object> _LidUpDownCommand;
         public DelegateCommand<object> LidUpDownCommand =>
@@ -1138,81 +1138,53 @@ namespace Venus_MainPages.ViewModels
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Home");
             LOG.Info($"{ModuleName},初始化");
         }
-        private async void OnGas()
+        private  void OnGas()
         {
-            await Task.Run(async () =>
-            {
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas1.SetPoint", MFC1SetPoint);
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas2.SetPoint", MFC2SetPoint);
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas3.SetPoint", MFC3SetPoint);
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas4.SetPoint", MFC4SetPoint);
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas5.SetPoint", MFC5SetPoint);
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas6.SetPoint", MFC6SetPoint);
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas7.SetPoint", MFC7SetPoint);
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas8.SetPoint", MFC8SetPoint);
-
-                await Task.Delay(1000);
-                object[] mfc = new object[8];
-                string[] mfcSetPoint = new string[8];
-
-                mfc[0] = MFC1Data.SetPoint;
-                mfc[1] = MFC2Data.SetPoint;
-                mfc[2] = MFC3Data.SetPoint;
-                mfc[3] = MFC4Data.SetPoint;
-                mfc[4] = MFC5Data.SetPoint;
-                mfc[5] = MFC6Data.SetPoint;
-                mfc[6] = MFC7Data.SetPoint;
-                mfc[7] = MFC8Data.SetPoint;
 
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.GasFlow}", mfc);
-                string operation = GasIsFlowing ? "关闭" : "打开";
+            object[] mfc = new object[8];
 
-                LOG.Info($"{ModuleName},{operation}GasFlow({mfc[0]},{mfc[1]},{mfc[2]},{mfc[3]},{mfc[4]},{mfc[5]},{mfc[6]},{mfc[7]})");
-
-            });
+            mfc[0] = MFC1SetPoint;
+            mfc[1] = MFC2SetPoint;
+            mfc[2] = MFC3SetPoint;
+            mfc[3] = MFC4SetPoint;
+            mfc[4] = MFC5SetPoint;
+            mfc[5] = MFC6SetPoint;
+            mfc[6] = 0d;
+            mfc[7] = 0d;
 
+            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.GasFlow}", mfc);
+            string operation = GasIsFlowing ? "关闭" : "打开";
 
+            LOG.Info($"{ModuleName},{operation} GasFlow({mfc[0]},{mfc[1]},{mfc[2]},{mfc[3]},{mfc[4]},{mfc[5]},{mfc[6]},{mfc[7]})");
         }
-        //private void OnHe()
+       
+        //private void OnRf()
         //{
-        //    if (PVHe1ValveIsOpen == true)
+        //    if (PMCurrentState == PMState.RfPowering)
         //    {
-        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHeFlow", 0.0d);
-        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHePressure", 0);
+        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
+        //        LOG.Info($"{ModuleName},关闭RF");
+
         //    }
         //    else
         //    {
-        //        if (HeIsPressureMode)
-        //        {
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHePressure", HeGasSetpoint);
-        //        }
-        //        else
-        //        {
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHeFlow", HeGasSetpoint);
-        //        }
+        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.RfPower}");
+        //        LOG.Info($"{ModuleName},开始RF,Power值{SRFFwdPowerSetpoint}");
         //    }
         //}
-        private void OnRf()
-        {
-            if (PMCurrentState == PMState.RfPowering)
-            {
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
-            }
-            else
-            {
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.RfPower}");
-            }
-        }
 
         private void OnPurge()
         {          
             if (PMCurrentState == PMState.Purging)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
+                LOG.Info($"{ModuleName},关闭Purge");
             }
             else
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Purge");
+                LOG.Info($"{ModuleName},开始Purge");
+
             }
         }
 
@@ -1221,37 +1193,23 @@ namespace Venus_MainPages.ViewModels
             if (PMCurrentState == PMState.Venting)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
+                LOG.Info($"{ModuleName},关闭Vent");
             }
             else
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Vent");
+                LOG.Info($"{ModuleName},开始Vent");
             }
 
         }
 
         private void OnPump()
-        {
-            //if (RtDataValues[$"{ModuleName}.FsmState"].ToString() == PMState.Pumping.ToString())
+        {            
             if (PMCurrentState == PMState.Pumping)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
                 return;
-            }
-
-            //if (PMCurrentState == PMState.pum)
-            //{
-            //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StopPump");
-            //    return;
-            //}
-            //string BasePressureSetPoint= RtConfigValues[$"{ModuleName}.Pump.PumpBasePressure"].ToString(); ;
-            //{
-            //    get { return RtConfigValues[$"{ModuleName}.Pump.PumpBasePressure"].ToString(); }
-            //}
-
-            //string PumpLimitSetPoint= RtConfigValues[$"{ModuleName}.Pump.PumpTimeLimit"].ToString();
-            //{
-            //    get { return RtConfigValues[$"{ModuleName}.Pump.PumpTimeLimit"].ToString(); }
-            //}
+            }         
 
             string BasePressureSetPoint = QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.Pump.PumpBasePressure").ToString();
 
@@ -1278,26 +1236,24 @@ namespace Venus_MainPages.ViewModels
             InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{ModuleName}.Pump.PumpTimeLimit", pumpLimit.ToString());
 
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Pump");
+            LOG.Info($"{ModuleName},开始Pump Down");
         }
 
         private void OnOpenPump()
-        {
-
-            //if (RtDataValues[$"{ModuleName}.FsmState"].ToString() == "LaunchingPump")
+        {         
             if (PMCurrentState == PMState.LaunchingPump)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
                 return;
-            }
-            //if (PumpIsOpen == true)
-            //{
-            //    return;
-            //}
+            }         
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartPump");
+            LOG.Info($"{ModuleName},打开Pump");
+
         }
         private void OnClosePump()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ClosePump");
+            LOG.Info($"{ModuleName},关闭Pump");
 
         }
         private void OnOpenTurboPump()
@@ -1309,78 +1265,66 @@ namespace Venus_MainPages.ViewModels
             }
 
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartTurboPump");
+            LOG.Info($"{ModuleName},打开分子泵");
+
         }
 
         private void OnCloseTurboPump()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.CloseTurboPump");
+            LOG.Info($"{ModuleName},关闭分子泵");
         }
 
         private void OnOpenPendulumValve()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.TurnPendulumValve", true);
+            LOG.Info($"{ModuleName},打开钟摆阀");
+
         }
         private void OnClosePendulumValve()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.TurnPendulumValve", false);
+            LOG.Info($"{ModuleName},关闭钟摆阀");
         }
-        private void OnPinUpDown(object upDown)
-        {
-            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetLiftPin", Convert.ToBoolean(upDown));
-        }
+      
         private void OnLidUpDown(object upDown)
         {
             if (upDown.ToString() == "Up")
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Lid}.{AITCylinderOperation.Open}");
+                LOG.Info($"{ModuleName},打开Lid");
+
             }
             else
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Lid}.{AITCylinderOperation.Close}");
+                LOG.Info($"{ModuleName},关闭Lid");
             }
         }
         private void OnSetSRf()
         {
-
             if (SRFData.IsRfOn == true)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetSRf", SRFFwdPowerSetpoint, false);
+                LOG.Info($"{ModuleName},关闭RF");
             }
             else
             {
                 if (GasIsFlowing == true)
                 {
                     InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Match}.{AITRfOperation.SetMatchPosition}", SRFMatchC1, SRFMatchC2);
-
                     InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetSRf", SRFFwdPowerSetpoint, true);
                     InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Match}.{AITRfOperation.SetMatchProcessMode}", "Auto");
-
+                    LOG.Info($"{ModuleName},开始RF,Power值{SRFFwdPowerSetpoint}");
                 }
             }
-        }
-        //private void OnSetBRf()
-        //{
-
-        //    if (BRFData.IsRfOn == true)
-        //    {
-        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBRf", BRFFwdPowerSetpoint, false);
-        //    }
-        //    else
-        //    {
-        //        if (GasIsFlowing == true)
-        //        {
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.BiasMatch}.{AITRfOperation.SetMatchPosition}", BRFMatchC1, BRFMatchC2);
-
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBRf", BRFFwdPowerSetpoint, true);
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.BiasMatch}.{AITRfOperation.SetMatchProcessMode}", "Auto");
-
-        //        }
-        //    }
-        //}
+        }       
 
         private void OnPMAbort()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort");
+            LOG.Info($"{ModuleName},Abort");
+
         }
         private void OnOpenButterflyValveView()
         {
@@ -1398,33 +1342,7 @@ namespace Venus_MainPages.ViewModels
         private void OnLoadRecipe()
         {
             CurrentModuleRecipes = GetFilesNames(Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "Recipes", ModuleName, "Process")).ToList();
-        }
-
-        //private async void OnHV()
-        //{
-        //    if (ESCHVData.IsOn == true)
-        //    {
-        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetESCHVIsOn", false);
-
-        //    }
-        //    else
-        //    {
-        //        await Task.Run(async () =>
-        //        {
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetESCHVIsOn", true);
-        //            await Task.Delay(1000);
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetESCHV", ESCVoltage);
-
-        //        });
-        //    }
-
-
-        //}
-        //private void OnHVSet()
-        //{
-        //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetESCHV", ESCVoltage);
-
-        //}
+        }   
 
 
         private void OnRunRecipe(object obj)
@@ -1438,16 +1356,10 @@ namespace Venus_MainPages.ViewModels
             var recipePath = Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "Recipes", ModuleName, "Process", recipeName + ".rcp");
             CurrentRecipe = Recipe.Load(File.ReadAllText(recipePath));
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.RunRecipe}", recipeName, ModuleManager.ModuleInfos[ModuleName].WaferManager.Wafers[0].WaferID, "Process");
+            LOG.Info($"{ModuleName},Run Recipe {recipeName},");
         }
 
 
-
-        //private void OnOffChiller()
-        //{
-        //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.OnOffChiller", ChillerType.Chiller.ToString(),!ChillerIsOn);
-        //}
-
-
         private void OnHeater(object obj)
         {
             if (IsAutoMode == true)
@@ -1467,10 +1379,14 @@ namespace Venus_MainPages.ViewModels
         private void OnOnline()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Online}");
+            LOG.Info($"{ModuleName},Switch to Online");
+
         }
         private void OnOffline()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Offline}");
+            LOG.Info($"{ModuleName},Switch to Offline");
+
         }
         private void OnEndStep()
         {
@@ -1487,6 +1403,8 @@ namespace Venus_MainPages.ViewModels
         private void OnGotoPosition()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.HighTemperatureHeater.GotoPosition", SelectedPosition.Content);
+            LOG.Info($"{ModuleName},HighTemperatureHeater to {SelectedPosition.Content}");
+
         }
         private void OnSwitchHighTemperatureHeater()
         {
@@ -1552,14 +1470,9 @@ namespace Venus_MainPages.ViewModels
         #region 私有方法
         private void ClearData()
         {
-            //ESCVoltage = 0;
             SRFFwdPowerSetpoint = 0;
             SRFMatchC1 = 0;
             SRFMatchC2 = 0;
-            //BRFFwdPowerSetpoint = 0;
-            //BRFMatchC1 = 0;
-            //BRFMatchC2 = 0;
-            //HeGasSetpoint = 0;
             MFC1SetPoint = 0;
             MFC2SetPoint = 0;
             MFC3SetPoint = 0;
@@ -1654,7 +1567,7 @@ namespace Venus_MainPages.ViewModels
             MFC6Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas6");
             MFC7Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas7");
             MFC8Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas8");
-            MFCHeData = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcHe");
+            //MFCHeData = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcHe");
             MFCN2Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcN2");
 
             SRFData = CommonFunction.GetValue<AITRfData>(RtDataValues, $"{ModuleName}.{VenusDevice.Rf}.DeviceData");
@@ -1746,7 +1659,7 @@ namespace Venus_MainPages.ViewModels
             m_RtDataKeys.Add($"{ModuleName}.MfcGas6");
             m_RtDataKeys.Add($"{ModuleName}.MfcGas7");
             m_RtDataKeys.Add($"{ModuleName}.MfcGas8");
-            m_RtDataKeys.Add($"{ModuleName}.MfcHe");
+            //m_RtDataKeys.Add($"{ModuleName}.MfcHe");
             m_RtDataKeys.Add($"{ModuleName}.MfcN2");
 
 
@@ -1755,7 +1668,7 @@ namespace Venus_MainPages.ViewModels
             m_RtDataKeys.Add($"{ModuleName}.ProcessPressure");
 
             m_RtDataKeys.Add($"{ModuleName}.ChamberPressure");
-            m_RtDataKeys.Add($"{ModuleName}.ESCHePressure");
+            //m_RtDataKeys.Add($"{ModuleName}.ESCHePressure");
 
             m_RtDataKeys.Add($"{ModuleName}.IsATM");
             m_RtDataKeys.Add($"{ModuleName}.IsVAC");

+ 107 - 222
Venus/Venus_MainPages/ViewModels/OverKepler2200BViewModel.cs

@@ -62,12 +62,12 @@ namespace Venus_MainPages.ViewModels
 
 
         private float m_SRFFwdPowerSetpoint;
-        private float m_BRFFwdPowerSetpoint;
+        //private float m_BRFFwdPowerSetpoint;
 
         private float m_SRFMatchC1;
         private float m_SRFMatchC2;
-        private float m_BRFMatchC1;
-        private float m_BRFMatchC2;
+        //private float m_BRFMatchC1;
+        //private float m_BRFMatchC2;
 
         private double m_MFC1SetPoint;
         private double m_MFC2SetPoint;
@@ -93,7 +93,7 @@ namespace Venus_MainPages.ViewModels
         private AITMfcData m_MFC6Data;
         private AITMfcData m_MFC7Data;
         private AITMfcData m_MFC8Data;
-        private AITMfcData m_MFCHeData;
+        //private AITMfcData m_MFCHeData;
         private AITMfcData m_MFCN2Data;
 
         private AITMatchData m_MatchData;
@@ -132,7 +132,7 @@ namespace Venus_MainPages.ViewModels
         private int m_PositionValue;
         private bool m_IsPositionMode;
 
-        private int m_ESCVoltage;
+        //private int m_ESCVoltage;
 
         private bool m_GasIsFlowing;
         private bool m_IsProcessing;
@@ -144,14 +144,14 @@ namespace Venus_MainPages.ViewModels
         //private float m_ChillerTempSetpoint;
         //private float m_WallTempSetpoint;
 
-        private bool m_HeIsPressureMode = true;
+        //private bool m_HeIsPressureMode = true;
 
         //private bool m_ChillerIsOn;
 
         private float m_ChamberPressure;
         private float m_ProcessPressure;
         private float m_ForelinePressurePressure;
-        private float m_ESCHePressure;
+        //private float m_ESCHePressure;
 
 
 
@@ -185,7 +185,7 @@ namespace Venus_MainPages.ViewModels
         private float m_BiasMatchC1;
         private float m_BiasMatchC2;
 
-        private float m_RFBoxC1;
+        //private float m_RFBoxC1;
 
         private float m_PendulumValvePosition;
 
@@ -393,14 +393,14 @@ namespace Venus_MainPages.ViewModels
             }
         }
 
-        public float ESCHePressure
-        {
-            get { return m_ESCHePressure; }
-            set
-            {
-                SetProperty(ref m_ESCHePressure, value);
-            }
-        }
+        //public float ESCHePressure
+        //{
+        //    get { return m_ESCHePressure; }
+        //    set
+        //    {
+        //        SetProperty(ref m_ESCHePressure, value);
+        //    }
+        //}
 
         public float ChamberPressure
         {
@@ -583,11 +583,11 @@ namespace Venus_MainPages.ViewModels
             get { return m_MFC8Data; }
             set { SetProperty(ref m_MFC8Data, value); }
         }
-        public AITMfcData MFCHeData
-        {
-            get { return m_MFCHeData; }
-            set { SetProperty(ref m_MFCHeData, value); }
-        }
+        //public AITMfcData MFCHeData
+        //{
+        //    get { return m_MFCHeData; }
+        //    set { SetProperty(ref m_MFCHeData, value); }
+        //}
         public AITMfcData MFCN2Data
         {
             get { return m_MFCN2Data; }
@@ -861,16 +861,16 @@ namespace Venus_MainPages.ViewModels
             get { return m_SRFFwdPowerSetpoint; }
             set { SetProperty(ref m_SRFFwdPowerSetpoint, value); }
         }
-        public float BRFFwdPowerSetpoint
-        {
-            get { return m_BRFFwdPowerSetpoint; }
-            set { SetProperty(ref m_BRFFwdPowerSetpoint, value); }
-        }
-        public int ESCVoltage
-        {
-            get { return m_ESCVoltage; }
-            set { SetProperty(ref m_ESCVoltage, value); }
-        }
+        //public float BRFFwdPowerSetpoint
+        //{
+        //    get { return m_BRFFwdPowerSetpoint; }
+        //    set { SetProperty(ref m_BRFFwdPowerSetpoint, value); }
+        //}
+        //public int ESCVoltage
+        //{
+        //    get { return m_ESCVoltage; }
+        //    set { SetProperty(ref m_ESCVoltage, value); }
+        //}
 
         public float SRFMatchC1
         {
@@ -890,16 +890,16 @@ namespace Venus_MainPages.ViewModels
                 SetProperty(ref m_MatchWorkMode, value);
             }
         }
-        public float BRFMatchC1
-        {
-            get { return m_BRFMatchC1; }
-            set { SetProperty(ref m_BRFMatchC1, value); }
-        }
-        public float BRFMatchC2
-        {
-            get { return m_BRFMatchC2; }
-            set { SetProperty(ref m_BRFMatchC2, value); }
-        }
+        //public float BRFMatchC1
+        //{
+        //    get { return m_BRFMatchC1; }
+        //    set { SetProperty(ref m_BRFMatchC1, value); }
+        //}
+        //public float BRFMatchC2
+        //{
+        //    get { return m_BRFMatchC2; }
+        //    set { SetProperty(ref m_BRFMatchC2, value); }
+        //}
         public bool GasIsFlowing
         {
             get { return m_GasIsFlowing; }
@@ -933,11 +933,11 @@ namespace Venus_MainPages.ViewModels
         //    set { SetProperty(ref m_WallTempSetpoint, value); }
         //}
 
-        public bool HeIsPressureMode
-        {
-            get { return m_HeIsPressureMode; }
-            set { SetProperty(ref m_HeIsPressureMode, value); }
-        }
+        //public bool HeIsPressureMode
+        //{
+        //    get { return m_HeIsPressureMode; }
+        //    set { SetProperty(ref m_HeIsPressureMode, value); }
+        //}
         //public bool ChillerIsOn
         //{
         //    get { return m_ChillerIsOn; }
@@ -999,9 +999,9 @@ namespace Venus_MainPages.ViewModels
         //public DelegateCommand HeCommand =>
         //    _HeCommand ?? (_HeCommand = new DelegateCommand(OnHe));
 
-        private DelegateCommand _RfCommand;
-        public DelegateCommand RfCommand =>
-            _RfCommand ?? (_RfCommand = new DelegateCommand(OnRf));
+        //private DelegateCommand _RfCommand;
+        //public DelegateCommand RfCommand =>
+        //    _RfCommand ?? (_RfCommand = new DelegateCommand(OnRf));
 
         private DelegateCommand _PurgeCommand;
         public DelegateCommand PurgeCommand =>
@@ -1039,9 +1039,9 @@ namespace Venus_MainPages.ViewModels
         public DelegateCommand ClosePendulumValveCommand =>
             _ClosePendulumValveCommand ?? (_ClosePendulumValveCommand = new DelegateCommand(OnClosePendulumValve));
 
-        private DelegateCommand<object> _PinUpDownCommand;
-        public DelegateCommand<object> PinUpDownCommand =>
-            _PinUpDownCommand ?? (_PinUpDownCommand = new DelegateCommand<object>(OnPinUpDown));
+        //private DelegateCommand<object> _PinUpDownCommand;
+        //public DelegateCommand<object> PinUpDownCommand =>
+        //    _PinUpDownCommand ?? (_PinUpDownCommand = new DelegateCommand<object>(OnPinUpDown));
 
         private DelegateCommand<object> _LidUpDownCommand;
         public DelegateCommand<object> LidUpDownCommand =>
@@ -1158,120 +1158,67 @@ namespace Venus_MainPages.ViewModels
             LOG.Info($"{ModuleName},初始化");
 
         }
-        private async void OnGas()
+        private void OnGas()
         {
-            await Task.Run(async () =>
-            {
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas1.SetPoint", MFC1SetPoint);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas2.SetPoint", MFC2SetPoint);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas3.SetPoint", MFC3SetPoint);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas4.SetPoint", MFC4SetPoint);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas5.SetPoint", MFC5SetPoint);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas6.SetPoint", MFC6SetPoint);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas7.SetPoint", MFC7SetPoint);
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcGas8.SetPoint", MFC8SetPoint);
-
-                //await Task.Delay(1000);
-                object[] mfc = new object[8];
-                //string[] mfcSetPoint = new string[8];
-
-                mfc[0] = MFC1SetPoint;
-                mfc[1] = MFC2SetPoint;
-                mfc[2] = MFC3SetPoint;
-                mfc[3] = MFC4SetPoint;
-                mfc[4] = MFC5SetPoint;
-                mfc[5] = MFC6SetPoint;
-                mfc[6] = MFC7SetPoint;
-                mfc[7] = MFC8SetPoint;
 
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.GasFlow}", mfc);
-                string operation = GasIsFlowing ? "关闭" : "打开";
+            object[] mfc = new object[8];
 
-                LOG.Info($"{ModuleName},{operation}GasFlow({mfc[0]},{mfc[1]},{mfc[2]},{mfc[3]},{mfc[4]},{mfc[5]},{mfc[6]},{mfc[7]})");
+            mfc[0] = MFC1SetPoint;
+            mfc[1] = MFC2SetPoint;
+            mfc[2] = MFC3SetPoint;
+            mfc[3] = MFC4SetPoint;
+            mfc[4] = MFC5SetPoint;
+            mfc[5] = MFC6SetPoint;
+            mfc[6] = 0d;
+            mfc[7] = 0d;
 
+            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.GasFlow}", mfc);
+            string operation = GasIsFlowing ? "关闭" : "打开";
 
-            });
-
+            LOG.Info($"{ModuleName},{operation} GasFlow({mfc[0]},{mfc[1]},{mfc[2]},{mfc[3]},{mfc[4]},{mfc[5]},{mfc[6]},{mfc[7]})");
 
         }
-        //private void OnHe()
+       
+        //private void OnRf()
         //{
-        //    if (PVHe1ValveIsOpen == true)
+        //    if (PMCurrentState == PMState.RfPowering)
         //    {
-        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHeFlow", 0.0d);
-        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHePressure", 0);
+        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
+        //        LOG.Info($"{ModuleName},关闭RF");
         //    }
         //    else
         //    {
-        //        if (HeIsPressureMode)
-        //        {
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHePressure", HeGasSetpoint);
-        //        }
-        //        else
-        //        {
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBacksideHeFlow", HeGasSetpoint);
-        //        }
+        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.RfPower}");
+        //        LOG.Info($"{ModuleName},开始RF,Power值{SRFFwdPowerSetpoint}");
         //    }
         //}
-        private void OnRf()
-        {
-            if (PMCurrentState == PMState.RfPowering)
-            {
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
-            }
-            else
-            {
-                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.RfPower}");
-            }
-        }
 
         private void OnPurge()
-        {
-            //if (RtDataValues[$"{ModuleName}.FsmState"].ToString() ==PMState.Purge.ToString())
-            //if (PMCurrentState == PMState.Purging || N2SetPoint<=0)
-            //{
-            //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcN2.SetPoint", 0);
-            //    await Task.Delay(1000);
-            //    //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StopPurge");
-            //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
-
-            //}
-            //else
-            //{
-            //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcN2.SetPoint", N2SetPoint);
-            //    await Task.Delay(1000);
-            //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Purge");
-            //}
+        {           
             if (PMCurrentState == PMState.Purging)
-            {
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcN2.SetPoint", 0);
-                //await Task.Delay(1000);
-                ////InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StopPurge");
+            {             
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
-
+                LOG.Info($"{ModuleName},关闭Purge");
             }
             else
-            {
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MfcN2.SetPoint", N2SetPoint);
-                //await Task.Delay(1000);
+            {           
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Purge");
+                LOG.Info($"{ModuleName},开始Purge");
             }
         }
 
         private void OnVent()
         {
-            //if (RtDataValues[$"{ModuleName}.FsmState"].ToString()==PMState.Venting.ToString())
             if (PMCurrentState == PMState.Venting)
             {
-                //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StopVent");
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
-
+                LOG.Info($"{ModuleName},关闭Vent");
             }
             else
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Vent");
+                LOG.Info($"{ModuleName},开始Vent");
             }
-
         }
 
         private void OnPump()
@@ -1283,21 +1230,6 @@ namespace Venus_MainPages.ViewModels
                 return;
             }
 
-            //if (PMCurrentState == PMState.pum)
-            //{
-            //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StopPump");
-            //    return;
-            //}
-            //string BasePressureSetPoint= RtConfigValues[$"{ModuleName}.Pump.PumpBasePressure"].ToString(); ;
-            //{
-            //    get { return RtConfigValues[$"{ModuleName}.Pump.PumpBasePressure"].ToString(); }
-            //}
-
-            //string PumpLimitSetPoint= RtConfigValues[$"{ModuleName}.Pump.PumpTimeLimit"].ToString();
-            //{
-            //    get { return RtConfigValues[$"{ModuleName}.Pump.PumpTimeLimit"].ToString(); }
-            //}
-
             string BasePressureSetPoint = QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.Pump.PumpBasePressure").ToString();
 
             string PumpLimitSetPoint = QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.Pump.PumpTimeLimit").ToString();
@@ -1323,32 +1255,26 @@ namespace Venus_MainPages.ViewModels
             InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{ModuleName}.Pump.PumpTimeLimit", pumpLimit.ToString());
 
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Pump");
+            LOG.Info($"{ModuleName},开始Pump Down");
         }
 
         private void OnOpenPump()
         {
-
-            //if (RtDataValues[$"{ModuleName}.FsmState"].ToString() == "LaunchingPump")
             if (PMCurrentState == PMState.LaunchingPump)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
                 return;
             }
-            //if (PumpIsOpen == true)
-            //{
-            //    return;
-            //}
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartPump");
+            LOG.Info($"{ModuleName},打开Pump");
         }
         private void OnClosePump()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ClosePump");
-
+            LOG.Info($"{ModuleName},关闭Pump");
         }
         private void OnOpenTurboPump()
         {
-            //TurboIsOpen = true;
-            //if (RtDataValues[$"{ModuleName}.FsmState"].ToString() == "LaunchingTurbo")
             if (PMCurrentState == PMState.LaunchingTurboPump)
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
@@ -1356,35 +1282,41 @@ namespace Venus_MainPages.ViewModels
             }
 
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartTurboPump");
+            LOG.Info($"{ModuleName},打开分子泵");
         }
 
         private void OnCloseTurboPump()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.CloseTurboPump");
+            LOG.Info($"{ModuleName},关闭分子泵");
         }
 
         private void OnOpenPendulumValve()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.TurnPendulumValve", true);
+            LOG.Info($"{ModuleName},打开钟摆阀");
         }
         private void OnClosePendulumValve()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.TurnPendulumValve", false);
+            LOG.Info($"{ModuleName},关闭钟摆阀");
         }
-        private void OnPinUpDown(object upDown)
-        {
-            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetLiftPin", Convert.ToBoolean(upDown));
-        }
+        //private void OnPinUpDown(object upDown)
+        //{
+        //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetLiftPin", Convert.ToBoolean(upDown));
+        //}
         private void OnLidUpDown(object upDown)
         {
             //var value = (bool)upDown;
             if (upDown.ToString() == "Up")
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Lid}.{AITCylinderOperation.Open}");
+                LOG.Info($"{ModuleName},打开Lid");
             }
             else
             {
                 InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.Lid}.{AITCylinderOperation.Close}");
+                LOG.Info($"{ModuleName},关闭Lid");
             }
         }
         private void OnSetSRf()
@@ -1404,31 +1336,12 @@ namespace Venus_MainPages.ViewModels
 
                 }
             }
-        }
-        //private void OnSetBRf()
-        //{
-
-        //    if (BRFData.IsRfOn == true)
-        //    {
-        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBRf", BRFFwdPowerSetpoint, false);
-        //    }
-        //    else
-        //    {
-        //        if (GasIsFlowing == true)
-        //        {
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.BiasMatch}.{AITRfOperation.SetMatchPosition}", BRFMatchC1, BRFMatchC2);
-
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetBRf", BRFFwdPowerSetpoint, true);
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{VenusDevice.BiasMatch}.{AITRfOperation.SetMatchProcessMode}", "Auto");
-
-        //        }
-        //    }
-        //}
+        }       
 
         private void OnPMAbort()
         {
-
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort");
+            LOG.Info($"{ModuleName},Abort");
         }
         private void OnOpenButterflyValveView()
         {
@@ -1449,31 +1362,6 @@ namespace Venus_MainPages.ViewModels
             CurrentModuleRecipes = GetFilesNames(Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "Recipes", ModuleName, "Process")).ToList();
         }
 
-        //private async void OnHV()
-        //{
-        //    if (ESCHVData.IsOn == true)
-        //    {
-        //        InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetESCHVIsOn", false);
-
-        //    }
-        //    else
-        //    {
-        //        await Task.Run(async () =>
-        //        {
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetESCHVIsOn", true);
-        //            await Task.Delay(1000);
-        //            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetESCHV", ESCVoltage);
-
-        //        });
-        //    }
-
-
-        //}
-        //private void OnHVSet()
-        //{
-        //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetESCHV", ESCVoltage);
-
-        //}
 
 
         private void OnRunRecipe(object obj)
@@ -1487,16 +1375,10 @@ namespace Venus_MainPages.ViewModels
             var recipePath = Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "Recipes", ModuleName, "Process", recipeName + ".rcp");
             CurrentRecipe = Recipe.Load(File.ReadAllText(recipePath));
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.RunRecipe}", recipeName, ModuleManager.ModuleInfos[ModuleName].WaferManager.Wafers[0].WaferID, "Process");
+            LOG.Info($"{ModuleName},Run Recipe {recipeName},");
         }
 
 
-
-        //private void OnOffChiller()
-        //{
-        //    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.OnOffChiller", ChillerType.Chiller.ToString(), !ChillerIsOn);
-        //}
-
-
         private void OnHeater(object obj)
         {
             if (IsAutoMode == true)
@@ -1516,10 +1398,12 @@ namespace Venus_MainPages.ViewModels
         private void OnOnline()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Online}");
+            LOG.Info("{ModuleName},Switch to Online");
         }
         private void OnOffline()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Offline}");
+            LOG.Info("{ModuleName},Switch to Offline");
         }
         private void OnEndStep()
         {
@@ -1536,6 +1420,7 @@ namespace Venus_MainPages.ViewModels
         private void OnGotoPosition()
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.HighTemperatureHeater.GotoPosition", SelectedPosition.Content);
+            LOG.Info($"{ModuleName},HighTemperatureHeater to {SelectedPosition.Content}");
         }
         private void OnSwitchHighTemperatureHeater()
         {
@@ -1603,13 +1488,13 @@ namespace Venus_MainPages.ViewModels
         #region 私有方法
         private void ClearData()
         {
-            ESCVoltage = 0;
+            //ESCVoltage = 0;
             SRFFwdPowerSetpoint = 0;
             SRFMatchC1 = 0;
             SRFMatchC2 = 0;
-            BRFFwdPowerSetpoint = 0;
-            BRFMatchC1 = 0;
-            BRFMatchC2 = 0;
+            //BRFFwdPowerSetpoint = 0;
+            //BRFMatchC1 = 0;
+            //BRFMatchC2 = 0;
             HeGasSetpoint = 0;
             MFC1SetPoint = 0;
             MFC2SetPoint = 0;
@@ -1684,7 +1569,7 @@ namespace Venus_MainPages.ViewModels
 
 
             //LiftPinIsUp = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.LiftPinIsUp");
-            IsSlitDoorClosed = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsSlitDoorClosed");
+            IsSlitDoorClosed = CommonFunction.GetValue<bool>(RtDataValues, $"TM.{ModuleName}SlitDoor.IsClosed");
             IsLidClosed = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.IsLidClosed");
 
             PendulumValvePosition = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.GetPVPosition");
@@ -1705,7 +1590,7 @@ namespace Venus_MainPages.ViewModels
             MFC6Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas6");
             MFC7Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas7");
             MFC8Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcGas8");
-            MFCHeData = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcHe");
+            //MFCHeData = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcHe");
             MFCN2Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcN2");
 
             SRFData = CommonFunction.GetValue<AITRfData>(RtDataValues, $"{ModuleName}.{VenusDevice.Rf}.DeviceData");
@@ -1723,7 +1608,7 @@ namespace Venus_MainPages.ViewModels
             ProcessPressure = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.ProcessPressure");
             ForelinePressure = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.ForelinePressure");
 
-            ESCHePressure = float.Parse(RtDataValues[$"{ModuleName}.ESCHePressure"].ToString());
+            //ESCHePressure = float.Parse(RtDataValues[$"{ModuleName}.ESCHePressure"].ToString());
 
             //ChillerTemperature = float.Parse(RtDataValues[$"{ModuleName}.Chiller.Temp"].ToString());
 
@@ -1801,7 +1686,7 @@ namespace Venus_MainPages.ViewModels
             m_RtDataKeys.Add($"{ModuleName}.MfcGas6");
             m_RtDataKeys.Add($"{ModuleName}.MfcGas7");
             m_RtDataKeys.Add($"{ModuleName}.MfcGas8");
-            m_RtDataKeys.Add($"{ModuleName}.MfcHe");
+            //m_RtDataKeys.Add($"{ModuleName}.MfcHe");
             m_RtDataKeys.Add($"{ModuleName}.MfcN2");
 
 
@@ -1852,7 +1737,7 @@ namespace Venus_MainPages.ViewModels
             m_RtDataKeys.Add($"{ModuleName}.TurboPumpIsRunning");
             m_RtDataKeys.Add($"{ModuleName}.PumpIsRunning");
 
-            m_RtDataKeys.Add($"{ModuleName}.IsSlitDoorClosed");
+            m_RtDataKeys.Add($"TM.{ModuleName}SlitDoor.IsClosed");
             m_RtDataKeys.Add($"{ModuleName}.IsLidClosed");
 
             m_RtDataKeys.Add($"{ModuleName}.{VenusDevice.Rf}.DeviceData");

+ 2 - 2
Venus/Venus_MainPages/ViewModels/PartialPressureViewModel.cs

@@ -160,7 +160,7 @@ namespace Venus_MainPages.ViewModels
         }
         private  void OnStart()
         {
-            //timer.Start();
+            timer.Start();
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PartialPressureTest", m_GasIndex,1000* GasTime);         
         }
 
@@ -218,7 +218,7 @@ namespace Venus_MainPages.ViewModels
 
             if (CurrentLineSeries.Count == 10)
             {
-                //timer.Stop();
+                timer.Stop();
             }
             IsAutoMode = (bool)QueryDataClient.Instance.Service.GetData($"{ModuleName}.IsOnline");
         }

+ 248 - 43
Venus/Venus_MainPages/ViewModels/RFCalibrationViewModel.cs

@@ -2,7 +2,6 @@
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using Venus_Core;
 using Prism.Commands;
@@ -12,13 +11,15 @@ using Aitex.Core.Common.DeviceData;
 using MECF.Framework.Common.CommonData;
 using System.Xml.Serialization;
 using Aitex.Core.Util;
+using MECF.Framework.Common.OperationCenter;
+using LiveCharts;
 
 namespace Venus_MainPages.ViewModels
 {
-    public class RFCalibrationViewModel:BindableBase
+    public class RFCalibrationViewModel : BindableBase
     {
         #region 字段
-        public ObservableCollection<CalibrationTableItem> m_CalibrationItems=new ObservableCollection<CalibrationTableItem>();
+        public ObservableCollection<CalibrationTableItem> m_CalibrationItems = new ObservableCollection<CalibrationTableItem>();
         public string ModuleName;
         private CalibrationTableItem m_CurrentSelection;
         public AITRfData rf;
@@ -27,9 +28,17 @@ namespace Venus_MainPages.ViewModels
         private double _RFPhysicalMaxPower;
         private double _CurrentRFMaxPower;
         private double _RFCalibratedMaxPower;
-        private bool   _IsSelectedAllEnable;
+        private bool _IsSelectedAllEnable;
         private ObservableCollection<NotifiableCalibrationTableItem> _TableData;
         private AITRfData _CurrentSelectionRF;
+        private bool _IsNextEnable;
+        private JetChamber _JetChamber;
+        private bool _firstLoad = true;
+        private List<int> selectedIndexs = new List<int>();
+        public bool _IsSaveEnable = true;
+        private int _TableDataSelectedIndex;
+        ChartValues<double> m_SetPointLineSeries = new ChartValues<double>();
+        ChartValues<double> m_FeedBackLineSeries = new ChartValues<double>();
         #endregion
 
         #region 属性
@@ -42,10 +51,10 @@ namespace Venus_MainPages.ViewModels
         public CalibrationTableItem CurrentSelection
         {
             get { return m_CurrentSelection; }
-            set 
+            set
             {
                 ChangeSelection(value);
-                SetProperty(ref m_CurrentSelection, value); 
+                SetProperty(ref m_CurrentSelection, value);
             }
 
         }
@@ -91,6 +100,35 @@ namespace Venus_MainPages.ViewModels
             get { return _IsSelectedAllEnable; }
             set { SetProperty(ref _IsSelectedAllEnable, value); }
         }
+
+        public bool IsNextEnable
+        {
+            get { return _IsNextEnable; }
+            set { SetProperty(ref _IsNextEnable, value); }
+        }
+        public bool IsSaveEnable
+        {
+            get { return _IsSaveEnable; }
+            set { SetProperty(ref _IsSaveEnable, value); }
+        }
+        public int TableDataSelectedIndex
+        {
+            get { return _TableDataSelectedIndex; }
+            set
+            {
+                SetProperty(ref _TableDataSelectedIndex, value);
+            }
+        }
+        public ChartValues<double> SetPointLineSeries
+        {
+            get { return m_SetPointLineSeries; }
+            set { SetProperty(ref m_SetPointLineSeries, value); }
+        }
+        public ChartValues<double> FeedBackLineSeries
+        {
+            get { return m_FeedBackLineSeries; }
+            set { SetProperty(ref m_FeedBackLineSeries, value); }
+        }
         #endregion
 
         #region 命令
@@ -101,82 +139,152 @@ namespace Venus_MainPages.ViewModels
         private DelegateCommand _UnCheckCommand;
         public DelegateCommand UnCheckCommand =>
             _UnCheckCommand ?? (_UnCheckCommand = new DelegateCommand(OnUnCheck));
+
+        private DelegateCommand _StartCommand;
+        public DelegateCommand StartCommand =>
+            _StartCommand ?? (_StartCommand = new DelegateCommand(OnStart));
+
+        private DelegateCommand _NextCommand;
+        public DelegateCommand NextCommand =>
+            _NextCommand ?? (_NextCommand = new DelegateCommand(OnNext));
+
+        private DelegateCommand _EndCommand;
+        public DelegateCommand EndCommand =>
+            _EndCommand ?? (_EndCommand = new DelegateCommand(OnEnd));
+
+        private DelegateCommand _LoadedCommand;
+        public DelegateCommand LoadedCommand =>
+            _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(OnLoaded));
+
+        private DelegateCommand _SaveCommand;
+        public DelegateCommand SaveCommand =>
+            _SaveCommand ?? (_SaveCommand = new DelegateCommand(OnSave));
         #endregion
 
         #region 构造函数
-        public RFCalibrationViewModel() 
+        public RFCalibrationViewModel()
         {
-            CalibrationItems.Add(new CalibrationTableItem()
-            {
-                DisplayName = "Source RF",
-                ItemEnableScName = $"{ModuleName}.Rf.EnableCalibration",
-                ItemTableScName = $"{ModuleName}.Rf.CalibrationTable",
-            });
-            CalibrationItems.Add(new CalibrationTableItem()
-            {
-                DisplayName = "Bias RF",
-                ItemEnableScName = $"{ModuleName}.BiasRf.EnableCalibration",
-                ItemTableScName = $"{ModuleName}.BiasRf.CalibrationTable",
-            });
-            
+
+
         }
         #endregion
 
         #region 命令方法
+        private void OnLoaded()
+        {
+            if (_firstLoad)
+            {
+                _firstLoad = false;
+                _JetChamber = (JetChamber)Enum.Parse(typeof(JetChamber), QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.ChamberType").ToString());
+                CalibrationItems.Add(new CalibrationTableItem()
+                {
+                    DisplayName = "Source RF",
+                    ItemEnableScName = $"{ModuleName}.Rf.EnableCalibration",
+                    ItemTableScName = $"{ModuleName}.Rf.CalibrationTable",
+                });
+                //CalibrationItems.Add(new CalibrationTableItem()
+                //{
+                //    DisplayName = "Bias RF",
+                //    ItemEnableScName = $"{ModuleName}.BiasRf.EnableCalibration",
+                //    ItemTableScName = $"{ModuleName}.BiasRf.CalibrationTable",
+                //});
+                if (_JetChamber != JetChamber.Kepler2200A && _JetChamber != JetChamber.Kepler2200B)
+                {
+                    CalibrationItems.Add(new CalibrationTableItem()
+                    {
+                        DisplayName = "Bias RF",
+                        ItemEnableScName = $"{ModuleName}.BiasRf.EnableCalibration",
+                        ItemTableScName = $"{ModuleName}.BiasRf.CalibrationTable",
+                    });
+                }
+            }
+        }
         public void OnCheck()
         {
-            if (TableData != null && TableData.Count > 0) 
+            if (TableData != null && TableData.Count > 0)
             {
                 for (int i = 0; i < TableData.Count; i++)
                 {
                     TableData[i].IsSelected = true;
                 }
             }
-            //TableData.ForEachDo(x =>
-            //{
-            //    x.IsSelected = true;
-            //    x.InvokePropertyChanged("IsSelected");
-            //});
            
+
         }
 
         public void OnUnCheck()
-        {
-            //if (TableData != null && TableData.Count > 0)
-            //    TableData.ForEachDo(x =>
-            //    {
-            //        x.IsSelected = false;
-            //        x.InvokePropertyChanged("IsSelected");
-            //    });
+        {          
             if (TableData != null && TableData.Count > 0)
             {
                 for (int i = 0; i < TableData.Count; i++)
                 {
                     TableData[i].IsSelected = false;
                 }
+            }           
+        }
+
+        public void OnStart()
+        {
+            selectedIndexs = new List<int>();
+            for (int i = 0; i < TableData.Count; i++)
+            {
+                if (TableData[i].IsSelected)
+                {
+                    TableData[i].ForwardPowerUI = 0;
+                    TableData[i].ForwardPowerMeter = 0;
+                    TableData[i].ReflectedPower = 0;
+                    selectedIndexs.Add(i);
+                }
+
+                IsSelectedAllEnable = false;
+                TableData[i].SetPointEnable = false;
+                TableData[i].IsSelectedEnable = false;
+                TableData[i].InvokePropertyChanged("SetPointEnable");
+                TableData[i].InvokePropertyChanged("IsSelectedEnable");
             }
+
+            IsNextEnable = true;
+            IsSaveEnable = false;
+            Next();
         }
+        public void OnNext()
+        {
+            Next();
+        }
+        public  void OnEnd()
+        {
+            var rf = GetRFbyDisplayName(CurrentSelection.DisplayName);
+            if (rf == null)
+                return;
+            InvokeClient.Instance.Service.DoOperation($"{rf.Module}.{rf.DeviceName}.{AITRfOperation.SetPower}", 0F);
+            
+            InvokeClient.Instance.Service.DoOperation($"{rf.Module}.{rf.DeviceName}.{AITRfOperation.SetPowerOnOff}", "false");
+            selectedIndexs = new List<int>();
+            TableDataSelectedIndex = 0;
+            CalcResult();
+        }
+
         #endregion
 
         #region 私有方法
         protected void ChangeSelection(CalibrationTableItem item)
         {
-            string name=item.DisplayName== "Source RF"?VenusDevice.Rf.ToString():VenusDevice.BiasRf.ToString();
-            CurrentSelectionRF= rf = (AITRfData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.{name}.DeviceData");
+            string name = item.DisplayName == "Source RF" ? VenusDevice.Rf.ToString() : VenusDevice.BiasRf.ToString();
+            CurrentSelectionRF = rf = (AITRfData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.{name}.DeviceData");
             if (rf == null) return;
 
-            
-            GeneratorSerialNumber =  QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.GeneratorSerialNumber")?.ToString();
-            SensorSerialNumber    =  QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.SensorSerialNumber")?.ToString();
+
+            GeneratorSerialNumber = QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.GeneratorSerialNumber")?.ToString();
+            SensorSerialNumber = QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.SensorSerialNumber")?.ToString();
             double result;
-            double.TryParse(QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.RFPhysicalMaxPower")?.ToString(),out result);
+            double.TryParse(QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.RFPhysicalMaxPower")?.ToString(), out result);
             RFPhysicalMaxPower = result;
-            double.TryParse(QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.CurrentRFMaxPower")?.ToString(),out result);
+            double.TryParse(QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.CurrentRFMaxPower")?.ToString(), out result);
             CurrentRFMaxPower = result;
-            double.TryParse(QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.RFCalibratedMaxPower")?.ToString(),out result);
+            double.TryParse(QueryDataClient.Instance.Service.GetConfig($"{rf.Module}.{rf.DeviceName}.RFCalibratedMaxPower")?.ToString(), out result);
             RFCalibratedMaxPower = result;
 
-            var tableValues = QueryDataClient.Instance.Service.GetConfig($"{ModuleName}{item.ItemTableDetailScName}");
+            var tableValues = QueryDataClient.Instance.Service.GetConfig($"{item.ItemTableDetailScName}");
             if (tableValues == null)
                 return;
 
@@ -211,7 +319,92 @@ namespace Venus_MainPages.ViewModels
             TableData = new ObservableCollection<NotifiableCalibrationTableItem>(tableData);
         }
 
+        public void Next()
+        {
+            if (selectedIndexs.Count > 0)
+            {
+                TableDataSelectedIndex = selectedIndexs[0];
+                RFCalibration(TableData[TableDataSelectedIndex]);
+                selectedIndexs.RemoveAt(0);
+            }
+            else
+            {
+                CalcResult();
+            }
+        }
+        private void RFCalibration(NotifiableCalibrationTableItem tableItem)
+        {
+            var rf = GetRFbyDisplayName(tableItem.DisplayName);
+            if (rf == null)
+                return;
 
+            IsNextEnable = false;
+            InvokeClient.Instance.Service.DoOperation($"{rf.Module}.{rf.DeviceName}.{AITRfOperation.SetPower}", tableItem.SetPoint);
+            if (!rf.IsRfOn)
+                InvokeClient.Instance.Service.DoOperation($"{rf.Module}.{rf.DeviceName}.{AITRfOperation.SetPowerOnOff}", "true");
+            Task.Delay(10*1000).ContinueWith(x =>
+            {
+                UpdateForwardPower(tableItem);
+                IsNextEnable = true;
+            });
+
+        }
+
+        private AITRfData GetRFbyDisplayName(string displayName)
+        {
+            switch (displayName)
+            {
+                case "Source RF":
+
+                    return (AITRfData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.{VenusDevice.Rf}.DeviceData");
+                case "Bias RF":
+                    return (AITRfData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.{VenusDevice.BiasRf}.DeviceData");
+            }
+            return null;
+        }
+        private void UpdateForwardPower(NotifiableCalibrationTableItem tableItem)
+        {
+            var tableDataItem = TableData.FirstOrDefault(x => x.SetPoint == tableItem.SetPoint);
+            if (tableDataItem != null)
+                tableDataItem.ForwardPowerUI = GetRFbyDisplayName(tableItem.DisplayName).ForwardPower;
+        }
+        private void CalcResult()
+        {
+            IsNextEnable = false;
+            IsSaveEnable = true;
+            //RenderableSeries = new ObservableCollection<IRenderableSeries>();
+            //var ForwardPowerMeterLine = new ChartDataLine(CurrentSelection.DisplayName + " ForwardPowerMeter/SetPoint", CurrentSelection.DisplayName + " ForwardPowerMeter/SetPoint", System.Windows.Media.Color.FromRgb(Color.Red.R, Color.Red.G, Color.Red.B));
+            //var SetPointLine = new ChartDataLine(CurrentSelection.DisplayName + " SetPoint/SetPoint", CurrentSelection.DisplayName + " SetPoint/SetPoint", System.Windows.Media.Color.FromRgb(Color.Blue.R, Color.Blue.G, Color.Blue.B));
+            for (int i = 0; i < TableData.Count; i++)
+            {
+                //if (TableData[i].IsSelected)
+                //{
+                //    ForwardPowerMeterLine.Append(TableData[i].SetPoint, TableData[i].ForwardPowerMeter);
+                //    SetPointLine.Append(TableData[i].SetPoint, TableData[i].SetPoint);
+                //}
+                IsSelectedAllEnable = true;
+                TableData[i].SetPointEnable = true;
+                TableData[i].IsSelectedEnable = true;
+                TableData[i].InvokePropertyChanged("SetPointEnable");
+                TableData[i].InvokePropertyChanged("IsSelectedEnable");
+            }
+            //RenderableSeries.Add(ForwardPowerMeterLine);
+            //RenderableSeries.Add(SetPointLine);
+            if (TableData.Count(x => x.IsSelected) == 0)
+                return;
+            RFCalibratedMaxPower = CurrentRFMaxPower * 100 / (100 - TableData.Where(x => x.IsSelected).Average(x => x.Difference));
+        }
+        private void OnSave()
+        {
+            SetPointLineSeries.Clear();
+            FeedBackLineSeries.Clear();
+
+            for (int i = 0; i < TableData.Count; i++)
+            {
+                SetPointLineSeries.Add(TableData[i].SetPoint);
+                FeedBackLineSeries.Add(TableData[i].ForwardPowerUI);
+            } 
+        }
         #endregion
     }
     public class CalibrationTableItem
@@ -228,7 +421,19 @@ namespace Venus_MainPages.ViewModels
     {
         public string DisplayName { get; set; }
 
-        public bool IsSelected { get; set; }
+        private bool _IsSelected;
+        public bool IsSelected
+        {
+            get
+            {
+                return _IsSelected;
+            }
+            set
+            {
+                _IsSelected = value;
+                InvokePropertyChanged("IsSelected");
+            }
+        }
 
         [XmlIgnore]
         public bool IsSelectedEnable { get; set; } = true;

+ 4 - 0
Venus/Venus_MainPages/ViewModels/TMOperationViewModel.cs

@@ -1,4 +1,5 @@
 using Aitex.Core.Common.DeviceData;
+using Aitex.Core.RT.Log;
 using MECF.Framework.Common.DataCenter;
 using MECF.Framework.Common.Equipment;
 using MECF.Framework.Common.OperationCenter;
@@ -463,6 +464,9 @@ namespace Venus_MainPages.ViewModels
             if (commonValveControl.IsCanEdit == true)
             {
                 InvokeClient.Instance.Service.DoOperation($"TM.{commonValveControl.Tag.ToString()}.{AITValveOperation.GVTurnValve}", !commonValveControl.Status);
+                string operation = commonValveControl.Status ? "关闭" : "打开";
+
+                LOG.Info($"{ModuleName.TM},{operation}{commonValveControl.Tag.ToString()}");
             }
         }
         private void OnOpenTMPump()

+ 1 - 1
Venus/Venus_MainPages/Views/OverVenusView.xaml

@@ -68,7 +68,7 @@
                 <TextBlock Text="SRF Fan"    Margin="5,0,5,0" Grid.Column="0" FontSize="15"  HorizontalAlignment="Center" VerticalAlignment="Center" />
                 <Ellipse                     Grid.Column="1" Width="16" Height="16"  Fill="{Binding SourceRFFanInterlock,Converter={StaticResource boolToColor4}}"   Stroke="Silver"  StrokeThickness="2"></Ellipse>
 
-                <TextBlock Text="Wafer Leak"   Margin="15,0,5,0"  Grid.Column="2" FontSize="15"  HorizontalAlignment="Center" VerticalAlignment="Center" />
+                <TextBlock Text="Water Leak"   Margin="15,0,5,0"  Grid.Column="2" FontSize="15"  HorizontalAlignment="Center" VerticalAlignment="Center" />
                 <Ellipse                     Grid.Column="3" Width="16" Height="16"  Fill="{Binding IsWLK,Converter={StaticResource boolToColor4}}"   Stroke="Silver" StrokeThickness="2"></Ellipse>
 
                 <TextBlock Text="Wafer Flow"  Margin="15,0,5,0" Grid.Column="4"  FontSize="15" HorizontalAlignment="Center" VerticalAlignment="Center" />

+ 47 - 65
Venus/Venus_MainPages/Views/RFCalibrationView.xaml

@@ -9,12 +9,18 @@
              xmlns:prism="http://prismlibrary.com/"
              prism:ViewModelLocator.AutoWireViewModel="True"
              xmlns:controls="http://OpenSEMI.Ctrlib.com/presentation"
+             xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
              mc:Ignorable="d" 
-             d:DesignHeight="450" d:DesignWidth="800">
+             d:DesignHeight="450" d:DesignWidth="1920">
+    <i:Interaction.Triggers>
+        <i:EventTrigger EventName="Loaded">
+            <i:InvokeCommandAction Command="{Binding LoadedCommand}"/>
+        </i:EventTrigger>
+    </i:Interaction.Triggers>
     <Grid>
         <Grid.ColumnDefinitions>
-            <ColumnDefinition  Width="160"/>
-            <ColumnDefinition Width="900"/>
+            <ColumnDefinition  Width="100"/>
+            <ColumnDefinition  Width="800"/>
             <ColumnDefinition />
         </Grid.ColumnDefinitions>
         <DataGrid Grid.Column="0"   HorizontalAlignment="Left" CanUserAddRows="False" AutoGenerateColumns="False" RowHeaderWidth="0"
@@ -22,7 +28,7 @@
                   SelectedItem="{Binding CurrentSelection}"
                   ItemsSource="{Binding CalibrationItems}" Margin="0,5,0,0" >
             <DataGrid.Columns>
-                <DataGridTemplateColumn Header="Name" Width="150">
+                <DataGridTemplateColumn Header="Name" Width="90">
                     <DataGridTemplateColumn.CellTemplate>
                         <DataTemplate>
                             <TextBlock Text="{Binding DisplayName}" Margin="5,0" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Left" VerticalAlignment="Center" />
@@ -50,32 +56,11 @@
                 </Border>
 
 
-                <Button Content="Save" Grid.Column="1" Width="70" Height="30"  Margin="0" Padding="0" Canvas.Left="385" Canvas.Top="4" IsEnabled="{Binding IsSaveEnable}" >
-                    <!--<i:Interaction.Triggers>
-                        <i:EventTrigger EventName="Click">
-                            <cal:ActionMessage MethodName="Save">
-                            </cal:ActionMessage>
-                        </i:EventTrigger>
-                    </i:Interaction.Triggers>-->
-                </Button>
-
-                <Button Content="Reload" Grid.Column="1" Width="70" Height="30"  Margin="0" Padding="0" Canvas.Left="473" Canvas.Top="4" >
-                    <!--<i:Interaction.Triggers>
-                        <i:EventTrigger EventName="Click">
-                            <cal:ActionMessage MethodName="Reload">
-                            </cal:ActionMessage>
-                        </i:EventTrigger>
-                    </i:Interaction.Triggers>-->
-                </Button>
-
-                <Button Content="Export" Grid.Column="1" Width="70" Height="30" Padding="0" Canvas.Left="561" Canvas.Top="4" HorizontalAlignment="Left" VerticalAlignment="Center" >
-                    <!--<i:Interaction.Triggers>
-                        <i:EventTrigger EventName="Click">
-                            <cal:ActionMessage MethodName="Export">
-                            </cal:ActionMessage>
-                        </i:EventTrigger>
-                    </i:Interaction.Triggers>-->
-                </Button>
+                <Button Content="Save" Grid.Column="1" Width="70" Height="30"  Margin="0" Padding="0" Canvas.Left="385" Canvas.Top="4" IsEnabled="{Binding IsSaveEnable}" Command="{Binding SaveCommand}"/>
+
+                <Button Content="Reload" Grid.Column="1" Width="70" Height="30"  Margin="0" Padding="0" Canvas.Left="473" Canvas.Top="4" Command="{Binding ReLoadCommand}"/>
+
+                <Button Content="Export" Grid.Column="1" Width="70" Height="30" Padding="0" Canvas.Left="561" Canvas.Top="4" HorizontalAlignment="Left" VerticalAlignment="Center" Command="{Binding ExportCommand}"/>
 
                 <deviceControl:AITRfGenerator DeviceData="{Binding CurrentSelectionRF}" Canvas.Left="662" Canvas.Top="10" HorizontalAlignment="Left" VerticalAlignment="Center" ></deviceControl:AITRfGenerator>
 
@@ -171,38 +156,38 @@
                         </DataGridTemplateColumn.CellTemplate>
                     </DataGridTemplateColumn>
 
-                    <DataGridTemplateColumn Header="Forward Power (UI)" Width="200">
+                    <DataGridTemplateColumn Header="Forward Power (UI)" Width="160">
                         <DataGridTemplateColumn.CellTemplate>
                             <DataTemplate>
-                                <TextBlock Text="{Binding ForwardPowerUI,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="180" Margin="5,0" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" >
+                                <TextBlock Text="{Binding ForwardPowerUI,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="150" Margin="5,0" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" >
                                 </TextBlock>
                             </DataTemplate>
                         </DataGridTemplateColumn.CellTemplate>
                     </DataGridTemplateColumn>
 
-                    <DataGridTemplateColumn Header="Forward Power (Meter)" Width="200">
+                    <DataGridTemplateColumn Header="Forward Power (Meter)" Width="160">
                         <DataGridTemplateColumn.CellTemplate>
                             <DataTemplate>
-                                <controls:TextBoxEx Text="{Binding ForwardPowerMeter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MinValue="-999999" MaxValue="999999"  EditBoxMode="Decimal"  Width="180" Margin="5,0" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Center" VerticalAlignment="Center" >
+                                <controls:TextBoxEx Text="{Binding ForwardPowerMeter,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MinValue="-999999" MaxValue="999999"  EditBoxMode="Decimal"  Width="150" Margin="5,0" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Center" VerticalAlignment="Center" >
                                 </controls:TextBoxEx>
                             </DataTemplate>
                         </DataGridTemplateColumn.CellTemplate>
                     </DataGridTemplateColumn>
 
-                    <DataGridTemplateColumn Header="Reflected Power (Meter)" Width="200">
+                    <DataGridTemplateColumn Header="Reflected Power (Meter)" Width="160">
                         <DataGridTemplateColumn.CellTemplate>
                             <DataTemplate>
-                                <controls:TextBoxEx Text="{Binding ReflectedPower,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MinValue="-999999" MaxValue="999999" EditBoxMode="Decimal" Width="180" Margin="5,0" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Center" VerticalAlignment="Center" >
+                                <controls:TextBoxEx Text="{Binding ReflectedPower,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" MinValue="-999999" MaxValue="999999" EditBoxMode="Decimal" Width="150" Margin="5,0" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Center" VerticalAlignment="Center" >
                                 </controls:TextBoxEx>
                             </DataTemplate>
                         </DataGridTemplateColumn.CellTemplate>
                     </DataGridTemplateColumn>
 
-                    <DataGridTemplateColumn Header="%Difference" Width="100">
+                    <DataGridTemplateColumn Header="%Difference" Width="110">
                         <DataGridTemplateColumn.CellTemplate>
                             <DataTemplate>
                                 <Border Background="{Binding DifferenceBackground,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">
-                                    <TextBlock  Text="{Binding Difference,Mode=OneWay,UpdateSourceTrigger=PropertyChanged, StringFormat=\{0:F3\}}" FontSize="14"  Height="25" HorizontalAlignment="Center" TextAlignment="Center"/>
+                                    <TextBlock  Text="{Binding Difference,Mode=OneWay,UpdateSourceTrigger=PropertyChanged, StringFormat=\{0:F3\}}" FontSize="14"  Height="25" HorizontalAlignment="Center" TextAlignment="Center" Padding="0 5 0 0"/>
                                 </Border>
                             </DataTemplate>
                         </DataGridTemplateColumn.CellTemplate>
@@ -215,38 +200,35 @@
 
                 <StackPanel Orientation="Horizontal" IsEnabled="{Binding SystemInManual}">
 
-                    <Button Content="Start" Width="70" Height="30"  Margin="10" Padding="0" Focusable="False">
-                        <!--<i:Interaction.Triggers>
-                            <i:EventTrigger EventName="Click">
-                                <cal:ActionMessage MethodName="Start">
-                                </cal:ActionMessage>
-                            </i:EventTrigger>
-                        </i:Interaction.Triggers>-->
-                    </Button>
-
-                    <Button Content="Next" Width="70" Height="30"  Margin="10" Padding="0" Focusable="False" IsEnabled="{Binding IsNextEnable}">
-                        <!--<i:Interaction.Triggers>
-                            <i:EventTrigger EventName="Click">
-                                <cal:ActionMessage MethodName="Next">
-                                </cal:ActionMessage>
-                            </i:EventTrigger>
-                        </i:Interaction.Triggers>-->
-                    </Button>
-
-                    <Button Content="End" Width="70" Height="30"  Margin="10" Padding="0">
-                        <!--<i:Interaction.Triggers>
-                            <i:EventTrigger EventName="Click">
-                                <cal:ActionMessage MethodName="End">
-                                </cal:ActionMessage>
-                            </i:EventTrigger>
-                        </i:Interaction.Triggers>-->
-                    </Button>
+                    <Button Content="Start" Width="70" Height="30"  Margin="10" Padding="0" Focusable="False" Command="{Binding StartCommand}"/>
+
+                    <Button Content="Next" Width="70" Height="30"  Margin="10" Padding="0" Focusable="False" IsEnabled="{Binding IsNextEnable}" Command="{Binding NextCommand}"/>
+
+                    <Button Content="End" Width="70" Height="30"  Margin="10" Padding="0" Command="{Binding EndCommand}"/>
 
                 </StackPanel>
             </Canvas>
 
 
         </Grid>
-
+        <lvc:CartesianChart  Grid.Column="2" LegendLocation="Right"  Hoverable="True"  DataTooltip="{x:Null}" Grid.Row="1" Height="700" >
+            <lvc:CartesianChart.Series>
+                <lvc:LineSeries Title="SetPoint"    Width="1"  Values="{Binding SetPointLineSeries}"   Fill="Transparent" LineSmoothness="0" PointGeometry="{x:Null}" />
+                <lvc:LineSeries Title="FeedBack"    Width="1"  Values="{Binding FeedBackLineSeries}"   Fill="Transparent" LineSmoothness="0" PointGeometry="{x:Null}"/>
+            </lvc:CartesianChart.Series>
+
+            <lvc:CartesianChart.AxisX>
+                <lvc:Axis Title="" Labels="100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000" FontSize="15" Foreground="Black">
+                    <lvc:Axis.Separator>
+                        <lvc:Separator Step="1"/>
+                    </lvc:Axis.Separator>
+                </lvc:Axis>
+            </lvc:CartesianChart.AxisX>
+            <lvc:CartesianChart.AxisY>
+                <lvc:Axis Title=""  FontSize="15" Foreground="Black">
+
+                </lvc:Axis>
+            </lvc:CartesianChart.AxisY>
+        </lvc:CartesianChart>
     </Grid>
 </UserControl>

+ 5 - 1
Venus/Venus_RT/Devices/IODevices/IoCylinder.cs

@@ -237,7 +237,11 @@ namespace Venus_RT.Devices
         public void Monitor()
         {
             try
-            {           
+            {
+                if (_doON == null || _doOFF == null)
+                {
+                    return;
+                }
                 if (_timer.IsTimeout())
                 {
                     _timer.Stop();

+ 1 - 1
Venus/Venus_RT/Devices/JetKepler2200APM.cs

@@ -883,7 +883,7 @@ namespace Venus_RT.Devices
         public async override Task<bool> AbortControlPressure()
         {
             OpenValve(ValveType.N2, false);
-            OpenValve(ValveType.PVN22, false);
+            //OpenValve(ValveType.PVN22, false);
             await Task.Delay(500);
             OpenValve(ValveType.Purge, false);
             return true;

+ 1 - 1
Venus/Venus_RT/Devices/JetKepler2200BPM.cs

@@ -948,7 +948,7 @@ namespace Venus_RT.Devices
         public async override Task<bool> AbortControlPressure()
         {
             OpenValve(ValveType.N2, false);
-            OpenValve(ValveType.PVN22, false);
+            //OpenValve(ValveType.PVN22, false);
             await Task.Delay(500);
             OpenValve(ValveType.Purge, false);
             return true;

+ 1 - 1
Venus/Venus_RT/Devices/JetKepler2300PM.cs

@@ -679,7 +679,7 @@ namespace Venus_RT.Devices
 
         protected override void CheckPermanentInterlock()
         {
-            if (ProcessPressure>99 && _GuageValve.SetPoint)
+            if (ProcessPressure>=100 && _GuageValve.SetPoint)
             {
                 _GuageValve.TurnValve(false, out _);
                 LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ProcessPressure} exceed 99 mtorr, Guage Valve (DO-31) closed automaticlly.");

+ 1 - 0
Venus/Venus_RT/Devices/JetPMBase.cs

@@ -223,6 +223,7 @@ namespace Venus_RT.Devices
             DATA.Subscribe($"{Name}.GetPVPosition", () => GetPVPosition());
 
             DATA.Subscribe($"{Name}.ESCHV.Temp", () => CoolantOutletTempFB);
+
             DATA.Subscribe($"{Name}.Chiller.Temp", () => CoolantInletTempFB);
 
             //DATA.Subscribe($"{Name}.Chiller.IsOn", () => ChillerIsRunning, SubscriptionAttribute.FLAG.IgnoreSaveDB);

+ 4 - 1
Venus/Venus_RT/Devices/JetVenusPM.cs

@@ -108,7 +108,7 @@ namespace Venus_RT.Devices
         private readonly double _foreline_interlock_pressure = 750;
 
         private Stopwatch _GasRFStopWatch = new Stopwatch();
-        private bool _GasFlag = false;
+        private bool _GasFlag;
 
         // 盖子的状态
         public override bool IsLidClosed => _Lid.OFFFeedback;
@@ -461,6 +461,9 @@ namespace Venus_RT.Devices
 
             _foreline_interlock_pressure = SC.GetValue<double>($"{Module}.ForelineInterlockPressure");
 
+
+            DATA.Subscribe($"{Name}.ESCHV.Voltage", () => _ESCHV.OutputVoltage);
+
         }
 
         #endregion

+ 4 - 0
Venus/Venus_RT/Modules/LLs/LLEntity.cs

@@ -377,6 +377,8 @@ namespace Venus_RT.Modules
                 return false;
             }
             IsInclude = true;
+            LOG.Write(eEvent.INFO_LL, Module, $"{Module}  Set Include Success");
+
             return true;
         }
         private bool FnSetExclude()
@@ -387,6 +389,8 @@ namespace Venus_RT.Modules
                 return false;
             }
             IsInclude = false;
+            LOG.Write(eEvent.INFO_LL, Module, $"{Module}  Set Exclude Success");
+
             return true;
         }
         private bool fnAbort(object[] param)

+ 4 - 0
Venus/Venus_RT/Modules/PMs/PMEntity.cs

@@ -347,6 +347,8 @@ namespace Venus_RT.Modules.PMs
                 return false;
             }
             IsInclude = true;
+            LOG.Write(eEvent.INFO_PM, Module, $"{Module}  Set Include Success");
+
             return true;
         }
         private bool FnSetExclude()
@@ -356,6 +358,8 @@ namespace Venus_RT.Modules.PMs
                 LOG.Write(eEvent.WARN_PM, Module, $"{Module} is online,can not set Exclude");
                 return false;
             }
+            LOG.Write(eEvent.INFO_PM, Module, $"{Module}  Set Exclude Success");
+
             IsInclude = false;
             return true;
         }

+ 1 - 1
Venus/Venus_RT/Modules/TM/MFPMPickRoutine.cs

@@ -53,7 +53,7 @@ namespace Venus_RT.Modules.TM
         private int _pickDelayTime = 0;
         private ModuleName _targetModule;
         private PMEntity  _pmModule;
-        private TMEntity _tmModule;
+        //private TMEntity _tmModule;
         private int _targetSlot;
         private Hand _hand;
 

+ 1 - 1
Venus/Venus_RT/Modules/TM/TMEntity.cs

@@ -164,7 +164,7 @@ namespace Venus_RT.Modules
         private int _controlPressureSetPoint = 90;
         private int _controlFlowSetPoint = 90;
         //private readonly Timer controlPressureTimer;
-        private bool _allPMSlitDoorClosed;
+        //private bool _allPMSlitDoorClosed;
         public TMEntity()
         {
             //_tm                 = Singleton<JetTM>.Instance;

+ 8 - 32
Venus/Venus_UI/Config/UIMenu.json

@@ -67,7 +67,7 @@
       },
       {
         "Id": "MFCVerification",
-        "Name": "MFCVerification",
+        "Name": "MFC Calibration",
         "View": "MFCVerificationView",
         "IsShow": "true"
 
@@ -88,13 +88,7 @@
         "Id": "RFCalibration",
         "Name": "RF Calibration",
         "View": "RFCalibrationView",
-        "IsShow": "false"
-      },
-      {
-        "Id": "CleanRecipe",
-        "Name": "Idle Clean",
-        "View": "CleanRecipeView",
-        "IsShow": "false"
+        "IsShow": "true"
       }
 
     ]
@@ -134,7 +128,7 @@
       },
       {
         "Id": "MFCVerification",
-        "Name": "MFCVerification",
+        "Name": "MFC Calibration",
         "View": "MFCVerificationView",
         "IsShow": "true"
 
@@ -156,13 +150,7 @@
         "Id": "RFCalibration",
         "Name": "RF Calibration",
         "View": "RFCalibrationView",
-        "IsShow": "false"
-      },
-      {
-        "Id": "CleanRecipe",
-        "Name": "Idle Clean",
-        "View": "CleanRecipeView",
-        "IsShow": "false"
+        "IsShow": "true"
       }
 
     ]
@@ -199,7 +187,7 @@
       {
         "Id": "MFCVerification",
         "IsShow": "true",
-        "Name": "MFCVerification",
+        "Name": "MFC Calibration",
         "View": "MFCVerificationView"
       },
       {
@@ -218,13 +206,7 @@
         "Id": "RFCalibration",
         "Name": "RF Calibration",
         "View": "RFCalibrationView",
-        "IsShow": "false"
-      },
-      {
-        "Id": "CleanRecipe",
-        "Name": "Idle Clean",
-        "View": "CleanRecipeView",
-        "IsShow": "false"
+        "IsShow": "true"
       }
 
     ]
@@ -263,7 +245,7 @@
       {
         "Id": "MFCVerification",
         "IsShow": "true",
-        "Name": "MFCVerification",
+        "Name": "MFC Calibration",
         "View": "MFCVerificationView"
       },
       {
@@ -282,13 +264,7 @@
         "Id": "RFCalibration",
         "Name": "RF Calibration",
         "View": "RFCalibrationView",
-        "IsShow": "false"
-      },
-      {
-        "Id": "CleanRecipe",
-        "Name": "Idle Clean",
-        "View": "CleanRecipeView",
-        "IsShow": "false"
+        "IsShow": "true"
       }
 
     ]

+ 24 - 0
Venus/Venus_UI/Config/UIMenuList.json

@@ -83,6 +83,12 @@
         "Name": "VAT Performance",
         "View": "VATPerformanceView",
         "IsShow": "true"
+      },
+      {
+        "Id": "RFCalibration",
+        "Name": "RF Calibration",
+        "View": "RFCalibrationView",
+        "IsShow": "true"
       }
 
     ]
@@ -139,6 +145,12 @@
         "Name": "VAT Performance",
         "View": "VATPerformanceView",
         "IsShow": "true"
+      },
+      {
+        "Id": "RFCalibration",
+        "Name": "RF Calibration",
+        "View": "RFCalibrationView",
+        "IsShow": "true"
       }
 
     ]
@@ -189,6 +201,12 @@
         "Name": "VAT Performance",
         "View": "VATPerformanceView",
         "IsShow": "true"
+      },
+      {
+        "Id": "RFCalibration",
+        "Name": "RF Calibration",
+        "View": "RFCalibrationView",
+        "IsShow": "true"
       }
 
     ]
@@ -241,6 +259,12 @@
         "Name": "VAT Performance",
         "View": "VATPerformanceView",
         "IsShow": "true"
+      },
+      {
+        "Id": "RFCalibration",
+        "Name": "RF Calibration",
+        "View": "RFCalibrationView",
+        "IsShow": "true"
       }
 
     ]

+ 1 - 1
Venus/Venus_UI/Views/ShellView.xaml.cs

@@ -608,7 +608,7 @@ namespace Venus_UI.Views
         }
         #endregion
 
-        private async  void Window_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
+        private   void Window_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
         {
             //this.buttonList[2].IsChecked = true;
             //await Task.Delay(5);