Browse Source

将kepler与Venus UI配置分开,添加Heat Routine

lixiang 1 year ago
parent
commit
c8af7de363

+ 24 - 7
Venus/Venus_MainPages/ViewModels/RoleViewModel.cs

@@ -14,6 +14,7 @@ using Venus_MainPages.Roles;
 using System.Windows.Data;
 using WPF.Themes.UserControls;
 using System.IO;
+using MECF.Framework.Common.DataCenter;
 
 namespace Venus_MainPages.ViewModels
 {
@@ -89,21 +90,37 @@ namespace Venus_MainPages.ViewModels
         #endregion
 
 
-
+        string uiConfig;
         public RoleViewModel()
         {
             string configPath = "";
-            if (File.Exists($"Config/UIMenu.json"))
+            uiConfig = "";
+            object obj = QueryDataClient.Instance.Service.GetData("System.ConfigType");
+            var configType = (ConfigType)Convert.ToInt32(obj);
+            if (configType == ConfigType.Other || configType == ConfigType.Kepler2300 || configType == ConfigType.Kepler2200)
+            {
+                uiConfig = "_Kepler";
+            }
+            else if (configType == ConfigType.VenusSE || configType == ConfigType.VenusDE)
+            {
+                uiConfig = "_VenusSE";
+            }
+            else if (configType == ConfigType.Venus)
+            {
+                uiConfig = "_Venus";
+            }
+
+            if (File.Exists($"Config/UIMenu{uiConfig}.json"))
             {
-                configPath = $"Config/UIMenu.json";
+                configPath = $"Config/UIMenu{uiConfig}.json";
             }
-            else if (File.Exists($"Config/Menu.json"))
+            else if (File.Exists($"Config/Menu{uiConfig}.json"))
             {
-                configPath = $"Config/Menu.json";
+                configPath = $"Config/Menu{uiConfig}.json";
             }
             else
             {
-                //WPFMessageBox.ShowError("未发现UI Config配置文件,退出UI");
+                
             }
             RoleDefines = SerializeHelper.Instance.ReadFromJsonFile<ObservableCollection<RoleDefine>>(configPath);
 
@@ -127,7 +144,7 @@ namespace Venus_MainPages.ViewModels
             //        RoleDefines[i].Menus[j].Permission = MenuPermission.ReadWrite;
             //    } 
             //}
-            SerializeHelper.Instance.WriteToJsonFile<List<RoleDefine>>(RoleDefines.ToList(), "Config/UIMenu.json");
+            SerializeHelper.Instance.WriteToJsonFile<List<RoleDefine>>(RoleDefines.ToList(), $"Config/UIMenu{uiConfig}.json");
         }
 
         private void OnLoaded(Object myrecipeView)

+ 2 - 2
Venus/Venus_MainPages/Views/LoginView.xaml.cs

@@ -60,8 +60,8 @@ namespace Venus_MainPages.Views
                 return;
             }
             CurrentUser = new User(UserTextBox.Text, PassWordTextBox.Password, (Role)Enum.Parse(typeof(Role), (MangerComboBox.SelectedItem as ComboBoxItem).Content.ToString(), true));
-            this.Visibility = Visibility.Hidden;
-            //this.Close();
+            this.Close();
+
         }
     }
 }

+ 1 - 1
Venus/Venus_RT/App.config

@@ -28,7 +28,7 @@
 	<connectionStrings>
 		<add name="PostgreSQL"   connectionString="Server=localhost;Port=5432;User Id=postgres;Password=123456;Database=postgres;Enlist=true;Preload Reader=true;" />
 		<!--0是other,1是Venus,2是kepler2300,3是Kepler2200,4是VenusSE,5是VenusDE-->
-		<add name="ConfigType"   connectionString="3"/>
+		<add name="ConfigType"   connectionString="4"/>
 	</connectionStrings>
 	<system.serviceModel>
 		<!--<diagnostics>

+ 2 - 0
Venus/Venus_RT/Instances/ToolLoader.cs

@@ -101,6 +101,8 @@ namespace Venus_RT.Instances
 
             DATA.Subscribe("GetRTPath", () => AppDomain.CurrentDomain.BaseDirectory);
             DATA.Subscribe("System.PressureUnitType", () => (int)pressureType, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe("System.ConfigType", () => (int)RtInstance.ConfigType, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+
 
 
             Singleton<ResourceMonitor>.Instance.Initialize();

+ 210 - 198
Venus/Venus_RT/Modules/PMs/PMEntity.cs

@@ -118,29 +118,29 @@ namespace Venus_RT.Modules.PMs
         public ModuleName Module { get; }
         public PMStatus Status { get; private set; }
 
-        private readonly PMHomeRoutine              _home;
-        private readonly StartDryPumpRoutine        _startDryPumpRoutine;
-        private readonly StartTurboPumpRoutine      _startTurboPumpRoutine;
-        private readonly VentRoutine                _ventRoutine;
-        private readonly PumpDownRoutine            _pumpRoutine;
-        private readonly LoadLockVentRoutine        _ventLoadLockRoutine;
-        private readonly LoadLockPumpRoutine        _pumpLoadLockRoutine;
-        private readonly LoadLockPurgeRoutine       _purgeLoadLockRoutine;
-        private readonly LoadLockLeakCheckRoutine   _loadLockLeakCheckRoutine;
-        private readonly PMPurgeRoutine             _purgeRoutine;
-        private readonly PMGaslinePurgeRoutine      _gaslinePurgeRoutine;
-        private readonly PMLeakCheckRoutine         _leakCheckRoutine;
-        private readonly GasBoxLeakCheckRoutine     _gasBoxLeakCheckRoutine;
-        private readonly LLPlaceRoutine             _llPlaceRoutine;
-        private readonly LLPickRoutine              _llPickRoutine;
-        private readonly PMProcessRoutine           _processRoutine;
-        private readonly GasFlowRoutine             _gasFlowRoutine;
-        private readonly RFPowerSwitchRoutine       _rfPowerRoutine;
-        private readonly PMGasVerificationRoutine   _gasVerificationRoutine;
-        private readonly PMPartialPressureRoutine   _pmPartialPressureRoutine;
-        private readonly PMVATPerformanceRoutine    _pmVATPerformanceRoutine;
-
-        //private readonly PMControlPressureRoutine _pmControlPressureRoutine;
+        private readonly PMHomeRoutine _home;
+        private readonly StartDryPumpRoutine _startDryPumpRoutine;
+        private readonly StartTurboPumpRoutine _startTurboPumpRoutine;
+        private readonly VentRoutine _ventRoutine;
+        private readonly PumpDownRoutine _pumpRoutine;
+        private readonly LoadLockVentRoutine _ventLoadLockRoutine;
+        private readonly LoadLockPumpRoutine _pumpLoadLockRoutine;
+        private readonly LoadLockPurgeRoutine _purgeLoadLockRoutine;
+        private readonly LoadLockLeakCheckRoutine _loadLockLeakCheckRoutine;
+        private readonly PMPurgeRoutine _purgeRoutine;
+        private readonly PMGaslinePurgeRoutine _gaslinePurgeRoutine;
+        private readonly PMLeakCheckRoutine _leakCheckRoutine;
+        private readonly GasBoxLeakCheckRoutine _gasBoxLeakCheckRoutine;
+        private readonly LLPlaceRoutine _llPlaceRoutine;
+        private readonly LLPickRoutine _llPickRoutine;
+        private readonly PMProcessRoutine _processRoutine;
+        private readonly GasFlowRoutine _gasFlowRoutine;
+        private readonly RFPowerSwitchRoutine _rfPowerRoutine;
+        private readonly PMGasVerificationRoutine _gasVerificationRoutine;
+        private readonly PMPartialPressureRoutine _pmPartialPressureRoutine;
+        private readonly PMVATPerformanceRoutine _pmVATPerformanceRoutine;
+
+        private readonly PMHeatRoutine _pmHeatRoutine;
 
 
 
@@ -202,11 +202,11 @@ namespace Venus_RT.Modules.PMs
         {
             get
             {
-                switch((PMState)fsm.State)
+                switch ((PMState)fsm.State)
                 {
                     case PMState.Processing:
                     case PMState.Clean:
-                        if(Singleton<RouteManager>.Instance.IsAutoMode && IsOnline)
+                        if (Singleton<RouteManager>.Instance.IsAutoMode && IsOnline)
                         {
                             if (_dictRecipeTime.ContainsKey(_processRoutine.currentRecipeResult.RecipeName))
                             {
@@ -227,7 +227,7 @@ namespace Venus_RT.Modules.PMs
         public bool IsSlitDoorClose => _chamber.CheckSlitDoorClose();
         public bool LiftPinIsDown => _chamber.LiftPinIsDown;
         public bool LiftPinIsUp => _chamber.LiftPinIsUp;
-		public double ChamberPressure => _chamber.ChamberPressure;
+        public double ChamberPressure => _chamber.ChamberPressure;
 
         public bool IsVac => _chamber.IsVAC;
         public bool IsAtm => _chamber.IsATM;
@@ -242,7 +242,7 @@ namespace Venus_RT.Modules.PMs
         {
             if (!fsm.FindTransition(fsm.State, msg))
             {
-                EV.PostWarningLog(Module.ToString(), eEvent.WARN_State, $"{Module} is in { (PMState)fsm.State} state,can not do {(MSG)msg}");
+                EV.PostWarningLog(Module.ToString(), eEvent.WARN_State, $"{Module} is in {(PMState)fsm.State} state,can not do {(MSG)msg}");
                 return false;
             }
 
@@ -250,7 +250,7 @@ namespace Venus_RT.Modules.PMs
 
             return true;
         }
-        
+
         public int Invoke(string function, params object[] args)
         {
             switch (function)
@@ -402,7 +402,7 @@ namespace Venus_RT.Modules.PMs
             //    return false;
             //}
 
-            if(!IsInclude)
+            if (!IsInclude)
             {
                 LOG.Write(eEvent.WARN_PM, Module, $"{Module} is excluded,can not be put online");
                 return false;
@@ -426,67 +426,67 @@ namespace Venus_RT.Modules.PMs
 
         public PMEntity(ModuleName module)
         {
-            Module                  = module;
-            _chamber                = DEVICE.GetDevice<JetPMBase>(Module.ToString());
-            _home                   = new PMHomeRoutine(_chamber);
-            _startDryPumpRoutine    = new StartDryPumpRoutine(_chamber);
-            _startTurboPumpRoutine  = new StartTurboPumpRoutine(_chamber);
-            _ventRoutine            = new VentRoutine(_chamber);
-            _pumpRoutine            = new PumpDownRoutine(_chamber);
-            _ventLoadLockRoutine    = new LoadLockVentRoutine(_chamber);
-            _pumpLoadLockRoutine    = new LoadLockPumpRoutine(_chamber);
-            _purgeLoadLockRoutine   = new LoadLockPurgeRoutine(_chamber);
+            Module = module;
+            _chamber = DEVICE.GetDevice<JetPMBase>(Module.ToString());
+            _home = new PMHomeRoutine(_chamber);
+            _startDryPumpRoutine = new StartDryPumpRoutine(_chamber);
+            _startTurboPumpRoutine = new StartTurboPumpRoutine(_chamber);
+            _ventRoutine = new VentRoutine(_chamber);
+            _pumpRoutine = new PumpDownRoutine(_chamber);
+            _ventLoadLockRoutine = new LoadLockVentRoutine(_chamber);
+            _pumpLoadLockRoutine = new LoadLockPumpRoutine(_chamber);
+            _purgeLoadLockRoutine = new LoadLockPurgeRoutine(_chamber);
             _loadLockLeakCheckRoutine = new LoadLockLeakCheckRoutine(_chamber);
-            _purgeRoutine           = new PMPurgeRoutine(_chamber);
-            _gaslinePurgeRoutine    = new PMGaslinePurgeRoutine(_chamber);
-            _leakCheckRoutine       = new PMLeakCheckRoutine(_chamber);
+            _purgeRoutine = new PMPurgeRoutine(_chamber);
+            _gaslinePurgeRoutine = new PMGaslinePurgeRoutine(_chamber);
+            _leakCheckRoutine = new PMLeakCheckRoutine(_chamber);
             _gasBoxLeakCheckRoutine = new GasBoxLeakCheckRoutine(_chamber);
-            _llPlaceRoutine         = new LLPlaceRoutine(_chamber);
-            _llPickRoutine          = new LLPickRoutine(_chamber, _ventLoadLockRoutine);
-            _processRoutine         = new PMProcessRoutine(_chamber, _pumpRoutine);
-            _gasFlowRoutine         = new GasFlowRoutine(_chamber);
-            _rfPowerRoutine         = new RFPowerSwitchRoutine(_chamber, true);
+            _llPlaceRoutine = new LLPlaceRoutine(_chamber);
+            _llPickRoutine = new LLPickRoutine(_chamber, _ventLoadLockRoutine);
+            _processRoutine = new PMProcessRoutine(_chamber, _pumpRoutine);
+            _gasFlowRoutine = new GasFlowRoutine(_chamber);
+            _rfPowerRoutine = new RFPowerSwitchRoutine(_chamber, true);
             _gasVerificationRoutine = new PMGasVerificationRoutine(_chamber, _pumpRoutine);
-            _pmPartialPressureRoutine=new PMPartialPressureRoutine(_chamber);
+            _pmPartialPressureRoutine = new PMPartialPressureRoutine(_chamber);
             _pmVATPerformanceRoutine = new PMVATPerformanceRoutine(_chamber);
             //_pmControlPressureRoutine = new PMControlPressureRoutine(_chamber);
 
-
+            _pmHeatRoutine = new PMHeatRoutine(_chamber);
             fsm = new StateMachine<PMEntity>(Module.ToString(), (int)PMState.Init, 50);
 
             //Idle
-            EnterExitTransition((int)PMState.Idle,                          FnIdle,                 (int)FSM_MSG.NONE,      null);
-            EnterExitTransition<PMState, FSM_MSG>(PMState.Error,            fEnterError,            FSM_MSG.NONE,           null);
+            EnterExitTransition((int)PMState.Idle, FnIdle, (int)FSM_MSG.NONE, null);
+            EnterExitTransition<PMState, FSM_MSG>(PMState.Error, fEnterError, FSM_MSG.NONE, null);
+
+            EnterExitTransition<PMState, FSM_MSG>(PMState.ReadyForPick, fnEnterPickReady, FSM_MSG.NONE, fnExitPickReady);
+            EnterExitTransition<PMState, FSM_MSG>(PMState.ReadyForPlace, fnEnterPlaceReady, FSM_MSG.NONE, fnExitPlaceReady);
+            EnterExitTransition<PMState, FSM_MSG>(PMState.DropDownReady, fnEnterDropDownReady, FSM_MSG.NONE, fnExitDropDownReady);
+            EnterExitTransition<PMState, FSM_MSG>(PMState.LiftUpReady, fnEnterLiftUpReady, FSM_MSG.NONE, fnExitLiftUpReady);
 
-            EnterExitTransition<PMState, FSM_MSG>(PMState.ReadyForPick,     fnEnterPickReady,       FSM_MSG.NONE,   fnExitPickReady);
-            EnterExitTransition<PMState, FSM_MSG>(PMState.ReadyForPlace,    fnEnterPlaceReady,      FSM_MSG.NONE,   fnExitPlaceReady);
-            EnterExitTransition<PMState, FSM_MSG>(PMState.DropDownReady,    fnEnterDropDownReady,   FSM_MSG.NONE,   fnExitDropDownReady);
-            EnterExitTransition<PMState, FSM_MSG>(PMState.LiftUpReady,      fnEnterLiftUpReady,     FSM_MSG.NONE,   fnExitLiftUpReady);
-   
 
 
 
             //Home
             //EnterExitTransition((int)PMState.Homing, FnEnterHome, (int)FSM_MSG.NONE, FnExitHome);
 
-            AnyStateTransition(MSG.Error,       FnError,            PMState.Error);
-            AnyStateTransition(MSG.Online,      FnSetOnline,        FSM_STATE.SAME);
-            AnyStateTransition(MSG.Offline,     FnSetOffline,       FSM_STATE.SAME);
+            AnyStateTransition(MSG.Error, FnError, PMState.Error);
+            AnyStateTransition(MSG.Online, FnSetOnline, FSM_STATE.SAME);
+            AnyStateTransition(MSG.Offline, FnSetOffline, FSM_STATE.SAME);
 
-            Transition(PMState.Init,            FSM_MSG.TIMER,      FnTimeout,                  PMState.Init);
-            Transition(PMState.Init,            MSG.Home,           FnStartHome,                PMState.Homing);
-            Transition(PMState.Error,           MSG.Home,           FnStartHome,                PMState.Homing);
-            Transition(PMState.Idle,            MSG.Home,           FnStartHome,                PMState.Homing);
-            Transition(PMState.Homing,          MSG.Home,           FnStartHome,                PMState.Homing);
-            Transition(PMState.Homing,          FSM_MSG.TIMER,      FnMonitorHome,              PMState.Idle);
+            Transition(PMState.Init, FSM_MSG.TIMER, FnTimeout, PMState.Init);
+            Transition(PMState.Init, MSG.Home, FnStartHome, PMState.Homing);
+            Transition(PMState.Error, MSG.Home, FnStartHome, PMState.Homing);
+            Transition(PMState.Idle, MSG.Home, FnStartHome, PMState.Homing);
+            Transition(PMState.Homing, MSG.Home, FnStartHome, PMState.Homing);
+            Transition(PMState.Homing, FSM_MSG.TIMER, FnMonitorHome, PMState.Idle);
 
-            Transition(PMState.Idle,            FSM_MSG.TIMER,      FnIdleTimeout,              PMState.Idle);
-            Transition(PMState.Error,           FSM_MSG.TIMER,      FnErrorTimeout,             PMState.Error);
+            Transition(PMState.Idle, FSM_MSG.TIMER, FnIdleTimeout, PMState.Idle);
+            Transition(PMState.Error, FSM_MSG.TIMER, FnErrorTimeout, PMState.Error);
 
             //Launch DryPump sequence
-            Transition(PMState.Idle,            MSG.LaunchPump,     FnLaunchPump,               PMState.LaunchingPump);
-            Transition(PMState.LaunchingPump,   FSM_MSG.TIMER,      FnLaunchPumpTimeout,        PMState.Idle);
-            Transition(PMState.LaunchingPump,   MSG.Abort,          FnAbortStartPumping,        PMState.Idle);
+            Transition(PMState.Idle, MSG.LaunchPump, FnLaunchPump, PMState.LaunchingPump);
+            Transition(PMState.LaunchingPump, FSM_MSG.TIMER, FnLaunchPumpTimeout, PMState.Idle);
+            Transition(PMState.LaunchingPump, MSG.Abort, FnAbortStartPumping, PMState.Idle);
 
             //Launch TurboPump sequence
             Transition(PMState.Idle, MSG.LaunchTurboPump, FnLaunchTurboPump, PMState.LaunchingTurboPump);
@@ -494,148 +494,150 @@ namespace Venus_RT.Modules.PMs
             Transition(PMState.LaunchingTurboPump, MSG.Abort, FnAbortStartTurboPumping, PMState.Idle);
 
             //vent sequence
-            Transition(PMState.Idle,            MSG.Vent,           FnStartVent,                PMState.Venting);
-            Transition(PMState.Pumping,         MSG.Vent,           FnVentToPumping,            PMState.Venting);
-            Transition(PMState.Venting,         FSM_MSG.TIMER,      FnVentTimeout,              PMState.Idle);
-            Transition(PMState.Venting,         MSG.Abort,          FnAbortVent,                PMState.Idle);
+            Transition(PMState.Idle, MSG.Vent, FnStartVent, PMState.Venting);
+            Transition(PMState.Pumping, MSG.Vent, FnVentToPumping, PMState.Venting);
+            Transition(PMState.Venting, FSM_MSG.TIMER, FnVentTimeout, PMState.Idle);
+            Transition(PMState.Venting, MSG.Abort, FnAbortVent, PMState.Idle);
 
             //Pump sequence
-            Transition(PMState.Idle,            MSG.Pump,           FnStartPumpDown,            PMState.Pumping);
-            Transition(PMState.Venting,         MSG.Pump,           FnVentToPumping,            PMState.Pumping);
-            Transition(PMState.Pumping,         FSM_MSG.TIMER,      FnPumpDownTimeout,          PMState.Idle);
-            Transition(PMState.Pumping,         MSG.Abort,          FnAbortPumping,             PMState.Idle);
+            Transition(PMState.Idle, MSG.Pump, FnStartPumpDown, PMState.Pumping);
+            Transition(PMState.Venting, MSG.Pump, FnVentToPumping, PMState.Pumping);
+            Transition(PMState.Pumping, FSM_MSG.TIMER, FnPumpDownTimeout, PMState.Idle);
+            Transition(PMState.Pumping, MSG.Abort, FnAbortPumping, PMState.Idle);
 
             //Pump Loadlock sequence
-            Transition(PMState.Idle,            MSG.PumpLoadLock,   FnStartPumpDownLoadLock,    PMState.PumpingLoadLock);
-            Transition(PMState.VentingLoadLock, MSG.PumpLoadLock,   FnVentLoadLockToPumpingLoadLock, PMState.PumpingLoadLock);
-            Transition(PMState.PumpingLoadLock, FSM_MSG.TIMER,      FnPumpDownLoadLockTimeout,  PMState.Idle);
-            Transition(PMState.PumpingLoadLock, MSG.Abort,          FnAbortPumpingLoadLock,     PMState.Idle);
+            Transition(PMState.Idle, MSG.PumpLoadLock, FnStartPumpDownLoadLock, PMState.PumpingLoadLock);
+            Transition(PMState.VentingLoadLock, MSG.PumpLoadLock, FnVentLoadLockToPumpingLoadLock, PMState.PumpingLoadLock);
+            Transition(PMState.PumpingLoadLock, FSM_MSG.TIMER, FnPumpDownLoadLockTimeout, PMState.Idle);
+            Transition(PMState.PumpingLoadLock, MSG.Abort, FnAbortPumpingLoadLock, PMState.Idle);
 
             //Vent Loadlock sequence
-            Transition(PMState.Idle,            MSG.VentLoadLock,   FnStartVentLoadlock,        PMState.VentingLoadLock);
-            Transition(PMState.PumpingLoadLock, MSG.VentLoadLock,   FnPumpingLoadLockToVentLoadLock, PMState.VentingLoadLock);
-            Transition(PMState.VentingLoadLock, FSM_MSG.TIMER,      FnVentLoadLockTimeout,      PMState.Idle);
-            Transition(PMState.VentingLoadLock, MSG.Abort,          FnAbortVentLoadLock,        PMState.Idle);
+            Transition(PMState.Idle, MSG.VentLoadLock, FnStartVentLoadlock, PMState.VentingLoadLock);
+            Transition(PMState.PumpingLoadLock, MSG.VentLoadLock, FnPumpingLoadLockToVentLoadLock, PMState.VentingLoadLock);
+            Transition(PMState.VentingLoadLock, FSM_MSG.TIMER, FnVentLoadLockTimeout, PMState.Idle);
+            Transition(PMState.VentingLoadLock, MSG.Abort, FnAbortVentLoadLock, PMState.Idle);
 
             // Purge LoadLock sequence
-            Transition(PMState.Idle,            MSG.PurgeLoadLock,  FnStartPurgeLoadlock,       PMState.PurgingLoadLock);
-            Transition(PMState.PurgingLoadLock, FSM_MSG.TIMER,      FnPurgeLoadLockTimeout,     PMState.Idle);
-            Transition(PMState.PurgingLoadLock, MSG.Abort,          FnAbortPurgeLoadLock,       PMState.Idle);
+            Transition(PMState.Idle, MSG.PurgeLoadLock, FnStartPurgeLoadlock, PMState.PurgingLoadLock);
+            Transition(PMState.PurgingLoadLock, FSM_MSG.TIMER, FnPurgeLoadLockTimeout, PMState.Idle);
+            Transition(PMState.PurgingLoadLock, MSG.Abort, FnAbortPurgeLoadLock, PMState.Idle);
 
             //LoadLock Leak check sequence
-            Transition(PMState.Idle,                MSG.LoadLockLeakCheck,  FnStartLoadLockLeakCheck,       PMState.LoadLockLeakCheck);
-            Transition(PMState.LoadLockLeakCheck,   FSM_MSG.TIMER,          FnLoadLockLeakCheckTimeout,     PMState.Idle);
-            Transition(PMState.LoadLockLeakCheck,   MSG.Abort,              FnAbortLoadLockLeakCheck,       PMState.Idle);
+            Transition(PMState.Idle, MSG.LoadLockLeakCheck, FnStartLoadLockLeakCheck, PMState.LoadLockLeakCheck);
+            Transition(PMState.LoadLockLeakCheck, FSM_MSG.TIMER, FnLoadLockLeakCheckTimeout, PMState.Idle);
+            Transition(PMState.LoadLockLeakCheck, MSG.Abort, FnAbortLoadLockLeakCheck, PMState.Idle);
 
             // PM Purge sequence
-            Transition(PMState.Idle,            MSG.CyclePurge,         FnStartPurge,           PMState.Purging);
-            Transition(PMState.Purging,         FSM_MSG.TIMER,          FnPurgeTimeout,         PMState.Idle);
-            Transition(PMState.Purging,         MSG.Abort,              FnAbortPurge,           PMState.Idle);
+            Transition(PMState.Idle, MSG.CyclePurge, FnStartPurge, PMState.Purging);
+            Transition(PMState.Purging, FSM_MSG.TIMER, FnPurgeTimeout, PMState.Idle);
+            Transition(PMState.Purging, MSG.Abort, FnAbortPurge, PMState.Idle);
 
             // PM GasLine Purge sequence
-            Transition(PMState.Idle,            MSG.GasLinePurge,   FnStartGasLinePurge,        PMState.GasLinePurge);
-            Transition(PMState.GasLinePurge,    FSM_MSG.TIMER,      FnGasLinePurgeTimeout,      PMState.Idle);
-            Transition(PMState.GasLinePurge,    MSG.Abort,          FnAbortGasLinePurge,        PMState.Idle);
+            Transition(PMState.Idle, MSG.GasLinePurge, FnStartGasLinePurge, PMState.GasLinePurge);
+            Transition(PMState.GasLinePurge, FSM_MSG.TIMER, FnGasLinePurgeTimeout, PMState.Idle);
+            Transition(PMState.GasLinePurge, MSG.Abort, FnAbortGasLinePurge, PMState.Idle);
 
             //PM Leak check sequence
-            Transition(PMState.Idle,            MSG.LeakCheck,      FnStartPMLeakCheck,         PMState.LeakCheck);
-            Transition(PMState.LeakCheck,       FSM_MSG.TIMER,      FnPMLeakCheckTimeout,       PMState.Idle);
-            Transition(PMState.LeakCheck,       MSG.Abort,          FnAbortPMLeakCheck,         PMState.Idle);
+            Transition(PMState.Idle, MSG.LeakCheck, FnStartPMLeakCheck, PMState.LeakCheck);
+            Transition(PMState.LeakCheck, FSM_MSG.TIMER, FnPMLeakCheckTimeout, PMState.Idle);
+            Transition(PMState.LeakCheck, MSG.Abort, FnAbortPMLeakCheck, PMState.Idle);
 
             //PM GasBox Leak check sequence
-            Transition(PMState.Idle,                MSG.GasLeakCheck,   FnStartGasBoxLeakCheck,     PMState.GasBoxLeakCheck);
-            Transition(PMState.GasBoxLeakCheck,     FSM_MSG.TIMER,      FnGasBoxLeakCheckTimeout,   PMState.Idle);
-            Transition(PMState.GasBoxLeakCheck,     MSG.Abort,          FnAbortGasBoxLeakCheck,     PMState.Idle);
+            Transition(PMState.Idle, MSG.GasLeakCheck, FnStartGasBoxLeakCheck, PMState.GasBoxLeakCheck);
+            Transition(PMState.GasBoxLeakCheck, FSM_MSG.TIMER, FnGasBoxLeakCheckTimeout, PMState.Idle);
+            Transition(PMState.GasBoxLeakCheck, MSG.Abort, FnAbortGasBoxLeakCheck, PMState.Idle);
 
 
             // PlaceWafer from LoadLock Arm sequence
-            Transition(PMState.Idle,            MSG.LLPlace,        FnStartLLPlace,             PMState.LLPlacing);
-            Transition(PMState.LLPlacing,       FSM_MSG.TIMER,      FnLLPlaceTimeout,           PMState.Idle);
-            Transition(PMState.LLPlacing,       MSG.Abort,          FnAbortLLPlace,             PMState.Idle);
+            Transition(PMState.Idle, MSG.LLPlace, FnStartLLPlace, PMState.LLPlacing);
+            Transition(PMState.LLPlacing, FSM_MSG.TIMER, FnLLPlaceTimeout, PMState.Idle);
+            Transition(PMState.LLPlacing, MSG.Abort, FnAbortLLPlace, PMState.Idle);
 
             // PickWafer to LoadLock Arm sequence
-            Transition(PMState.Idle,            MSG.LLPick,         FnStartLLPick,              PMState.LLPicking);
-            Transition(PMState.LLPicking,       FSM_MSG.TIMER,      FnLLPickTimeout,            PMState.Idle);
-            Transition(PMState.LLPicking,       MSG.Abort,          FnAbortLLPick,              PMState.Idle);
+            Transition(PMState.Idle, MSG.LLPick, FnStartLLPick, PMState.LLPicking);
+            Transition(PMState.LLPicking, FSM_MSG.TIMER, FnLLPickTimeout, PMState.Idle);
+            Transition(PMState.LLPicking, MSG.Abort, FnAbortLLPick, PMState.Idle);
 
             // Process
-            Transition(PMState.Idle,            MSG.RunRecipe,      FnRunRecipe,                PMState.Processing);
-            Transition(PMState.Processing,      FSM_MSG.TIMER,      FnProcessTimeout,           PMState.Idle);
-            Transition(PMState.Processing,      MSG.Abort,          FnAbortProcess,             PMState.Idle);
+            Transition(PMState.Idle, MSG.RunRecipe, FnRunRecipe, PMState.Processing);
+            Transition(PMState.Processing, FSM_MSG.TIMER, FnProcessTimeout, PMState.Idle);
+            Transition(PMState.Processing, MSG.Abort, FnAbortProcess, PMState.Idle);
 
             // Clean
-            Transition(PMState.Idle,            MSG.Clean,          FnRunRecipe,                PMState.Clean);
-            Transition(PMState.Clean,           FSM_MSG.TIMER,      FnProcessTimeout,           PMState.Idle);
-            Transition(PMState.Clean,           MSG.Abort,          FnAbortProcess,             PMState.Idle);
+            Transition(PMState.Idle, MSG.Clean, FnRunRecipe, PMState.Clean);
+            Transition(PMState.Clean, FSM_MSG.TIMER, FnProcessTimeout, PMState.Idle);
+            Transition(PMState.Clean, MSG.Abort, FnAbortProcess, PMState.Idle);
 
             // Gas Flow sequence
-            Transition(PMState.Idle,            MSG.GasFlow,        FnStartGasFlow,             PMState.GasFlowing);
-            Transition(PMState.GasFlowing,      MSG.GasFlow,        FnAbortGasFlow,             PMState.Idle);
-            Transition(PMState.GasFlowing,      FSM_MSG.TIMER,      FnGasFlowTimeout,           PMState.Idle);
-            Transition(PMState.GasFlowing,      MSG.StopGasFlow,    FnStopGasFlow,              PMState.Idle);
-            Transition(PMState.GasFlowing,      MSG.Abort,          FnAbortGasFlow,             PMState.Idle);
+            Transition(PMState.Idle, MSG.GasFlow, FnStartGasFlow, PMState.GasFlowing);
+            Transition(PMState.GasFlowing, MSG.GasFlow, FnAbortGasFlow, PMState.Idle);
+            Transition(PMState.GasFlowing, FSM_MSG.TIMER, FnGasFlowTimeout, PMState.Idle);
+            Transition(PMState.GasFlowing, MSG.StopGasFlow, FnStopGasFlow, PMState.Idle);
+            Transition(PMState.GasFlowing, MSG.Abort, FnAbortGasFlow, PMState.Idle);
 
             //RF Power sequence
-            Transition(PMState.Idle,            MSG.RfPower,        FnStartRfPower,             PMState.RfPowering);
-            Transition(PMState.GasFlowing,      MSG.RfPower,        FnStartRfPower,             PMState.RfPowering);
-            Transition(PMState.RfPowering,      FSM_MSG.TIMER,      FnRfPowerTimeout,           PMState.Idle);
-            Transition(PMState.RfPowering,      MSG.Abort,          FnAbortRfPower,             PMState.Idle);
+            Transition(PMState.Idle, MSG.RfPower, FnStartRfPower, PMState.RfPowering);
+            Transition(PMState.GasFlowing, MSG.RfPower, FnStartRfPower, PMState.RfPowering);
+            Transition(PMState.RfPowering, FSM_MSG.TIMER, FnRfPowerTimeout, PMState.Idle);
+            Transition(PMState.RfPowering, MSG.Abort, FnAbortRfPower, PMState.Idle);
 
             //MFC verification
-            Transition(PMState.Idle,            MSG.MFCVerification,    FnStartMFCVerification,     PMState.MFCVerification);
-            Transition(PMState.MFCVerification, FSM_MSG.TIMER,          FnMFCVerificationTimeout,   PMState.Idle);
-            Transition(PMState.MFCVerification, MSG.Abort,              FnAbortMFCVerification,     PMState.Idle);
+            Transition(PMState.Idle, MSG.MFCVerification, FnStartMFCVerification, PMState.MFCVerification);
+            Transition(PMState.MFCVerification, FSM_MSG.TIMER, FnMFCVerificationTimeout, PMState.Idle);
+            Transition(PMState.MFCVerification, MSG.Abort, FnAbortMFCVerification, PMState.Idle);
 
             //////////////////////// Exchange Wafer with TM ///////////////////////////////////////////////////////
             // Pick Wafer from PM
-            Transition(PMState.Idle,            MSG.PreparePick,    FnStartPreparePick,     PMState.PreparePick);
-            Transition(PMState.PreparePick,     MSG.Abort,          FnAbortPreparePick,     PMState.Idle);
-            Transition(PMState.PreparePick,     FSM_MSG.TIMER,      FnPreparePickTimeout,   PMState.ReadyForPick);
-            Transition(PMState.PreparePick,     MSG.PreparePick,    null,                   PMState.PreparePick);
-            Transition(PMState.ReadyForPick,    MSG.Abort,          FnAbortPick,            PMState.Idle);
-            Transition(PMState.ReadyForPick,    MSG.DropDownWafer,  FnStartDropDownWafer,   PMState.DropDownWafer);
-
-            
-            Transition(PMState.ReadyForPick,    MSG.PreparePick,    null,                   PMState.ReadyForPick);
-            Transition(PMState.DropDownWafer,   FSM_MSG.TIMER,      FnDropDownTimeout,      PMState.DropDownReady);
-            Transition(PMState.DropDownReady,   MSG.PickReady,      FnStartFinishPick,      PMState.FinishPick);
-            Transition(PMState.ReadyForPick,    MSG.PickReady,      FnStartFinishPick,      PMState.FinishPick);
-            Transition(PMState.FinishPick,      FSM_MSG.TIMER,      FnFinishPickTimeout,    PMState.Idle);
-            
-            
+            Transition(PMState.Idle, MSG.PreparePick, FnStartPreparePick, PMState.PreparePick);
+            Transition(PMState.PreparePick, MSG.Abort, FnAbortPreparePick, PMState.Idle);
+            Transition(PMState.PreparePick, FSM_MSG.TIMER, FnPreparePickTimeout, PMState.ReadyForPick);
+            Transition(PMState.PreparePick, MSG.PreparePick, null, PMState.PreparePick);
+            Transition(PMState.ReadyForPick, MSG.Abort, FnAbortPick, PMState.Idle);
+            Transition(PMState.ReadyForPick, MSG.DropDownWafer, FnStartDropDownWafer, PMState.DropDownWafer);
+
+
+            Transition(PMState.ReadyForPick, MSG.PreparePick, null, PMState.ReadyForPick);
+            Transition(PMState.DropDownWafer, FSM_MSG.TIMER, FnDropDownTimeout, PMState.DropDownReady);
+            Transition(PMState.DropDownReady, MSG.PickReady, FnStartFinishPick, PMState.FinishPick);
+            Transition(PMState.ReadyForPick, MSG.PickReady, FnStartFinishPick, PMState.FinishPick);
+            Transition(PMState.FinishPick, FSM_MSG.TIMER, FnFinishPickTimeout, PMState.Idle);
+
+
             // Place Wafer to PM
-            Transition(PMState.Idle,            MSG.PreparePlace,   FnStartPreparePlace,    PMState.PreparePlace);
-            Transition(PMState.PreparePlace,    MSG.Abort,          FnAbortPreparePlace,    PMState.Idle);
-            Transition(PMState.PreparePlace,    FSM_MSG.TIMER,      FnPreparePlaceTimeout,  PMState.ReadyForPlace);
-            Transition(PMState.PreparePlace,    MSG.PreparePlace,   null,                   PMState.PreparePlace);
-            Transition(PMState.ReadyForPlace,   MSG.LiftUpWafer,    FnStartLiftUpWafer,     PMState.LiftUpWafer);
-            Transition(PMState.LiftUpWafer,     FSM_MSG.TIMER,      FnLiftUpTimeout,        PMState.LiftUpReady);
-            Transition(PMState.LiftUpReady,     MSG.PlaceReady,     FnStartFinishPlace,     PMState.FinishPlace);
-            Transition(PMState.ReadyForPlace,   MSG.PlaceReady,     FnStartFinishPlace,     PMState.FinishPlace);
-            Transition(PMState.PreparePlace,    MSG.Abort,          FnAortPlace,            PMState.Idle);
-            Transition(PMState.ReadyForPlace,   MSG.Abort,          FnAortPlace,            PMState.Idle);
-            Transition(PMState.ReadyForPlace,   MSG.PreparePlace,   null,                   PMState.ReadyForPlace);
-            Transition(PMState.LiftUpReady,     MSG.Abort,          FnAortPlace,            PMState.Idle);
-            Transition(PMState.FinishPlace,     FSM_MSG.TIMER,      FnFinishPlaceTimeout,   PMState.Idle);
-            
+            Transition(PMState.Idle, MSG.PreparePlace, FnStartPreparePlace, PMState.PreparePlace);
+            Transition(PMState.Heating, MSG.PreparePlace, FnStartPreparePlace, PMState.PreparePlace);
+            Transition(PMState.PreparePlace, MSG.Abort, FnAbortPreparePlace, PMState.Idle);
+            Transition(PMState.PreparePlace, FSM_MSG.TIMER, FnPreparePlaceTimeout, PMState.ReadyForPlace);
+            Transition(PMState.PreparePlace, MSG.PreparePlace, null, PMState.PreparePlace);
+            Transition(PMState.ReadyForPlace, MSG.LiftUpWafer, FnStartLiftUpWafer, PMState.LiftUpWafer);
+            Transition(PMState.LiftUpWafer, FSM_MSG.TIMER, FnLiftUpTimeout, PMState.LiftUpReady);
+            Transition(PMState.LiftUpReady, MSG.PlaceReady, FnStartFinishPlace, PMState.FinishPlace);
+            Transition(PMState.ReadyForPlace, MSG.PlaceReady, FnStartFinishPlace, PMState.FinishPlace);
+            Transition(PMState.PreparePlace, MSG.Abort, FnAortPlace, PMState.Idle);
+            Transition(PMState.ReadyForPlace, MSG.Abort, FnAortPlace, PMState.Idle);
+            Transition(PMState.ReadyForPlace, MSG.PreparePlace, null, PMState.ReadyForPlace);
+            Transition(PMState.LiftUpReady, MSG.Abort, FnAortPlace, PMState.Idle);
+            Transition(PMState.FinishPlace, FSM_MSG.TIMER, FnFinishPlaceTimeout, PMState.Idle);
+
 
             // Swap Wafer With PM
-            Transition(PMState.DropDownReady,   MSG.PreparePlace,   FnStartSwapPlace,       PMState.PreparePlace);
-            Transition(PMState.ReadyForPick,    MSG.PreparePlace,   FnStartPreparePlace,    PMState.PreparePlace);
+            Transition(PMState.DropDownReady, MSG.PreparePlace, FnStartSwapPlace, PMState.PreparePlace);
+            Transition(PMState.ReadyForPick, MSG.PreparePlace, FnStartPreparePlace, PMState.PreparePlace);
 
-            Transition(PMState.Idle,                    MSG.PartialPressure,    FnStartPartialPressure,     PMState.PartialPressureTesting);
-            Transition(PMState.PartialPressureTesting,  FSM_MSG.TIMER,          FnPartialPressureTimeout,   PMState.Idle);
-            Transition(PMState.PartialPressureTesting,  MSG.Abort,              FnAbortPartialPressure,     PMState.Idle);
-            Transition(PMState.Idle,                    MSG.VATPerformance,     FnStartVATPerformance,      PMState.VATPerformanceTesting);
-            Transition(PMState.VATPerformanceTesting,   FSM_MSG.TIMER,          FnVATPerformanceTimeout,    PMState.Idle);
-            Transition(PMState.VATPerformanceTesting,   MSG.Abort,              FnAbortVATPerformance,      PMState.Idle);
+            Transition(PMState.Idle, MSG.PartialPressure, FnStartPartialPressure, PMState.PartialPressureTesting);
+            Transition(PMState.PartialPressureTesting, FSM_MSG.TIMER, FnPartialPressureTimeout, PMState.Idle);
+            Transition(PMState.PartialPressureTesting, MSG.Abort, FnAbortPartialPressure, PMState.Idle);
+            Transition(PMState.Idle, MSG.VATPerformance, FnStartVATPerformance, PMState.VATPerformanceTesting);
+            Transition(PMState.VATPerformanceTesting, FSM_MSG.TIMER, FnVATPerformanceTimeout, PMState.Idle);
+            Transition(PMState.VATPerformanceTesting, MSG.Abort, FnAbortVATPerformance, PMState.Idle);
 
+            Transition(PMState.Idle, MSG.Heat, FnStartHeat, PMState.Heating);
             AnyStateTransition(FSM_MSG.TIMER, FnControlPressure, FSM_STATE.SAME);
             Running = true;
 
             WaferManager.Instance.SubscribeLocation(Module, 1);
         }
-       
+
         protected override bool Init()
         {
             DATA.Subscribe($"{Module}.FsmState", () => (((PMState)fsm.State)), SubscriptionAttribute.FLAG.IgnoreSaveDB);
@@ -644,7 +646,7 @@ namespace Venus_RT.Modules.PMs
 
             DATA.Subscribe($"{Module}.LoadLockPurge.PurgeCounter", () => _purgeLoadLockRoutine.PurgeCounter, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.PartialPressureCounter", () => _pmPartialPressureRoutine.counter, SubscriptionAttribute.FLAG.IgnoreSaveDB);
-            DATA.Subscribe($"{Module}.VATPerformanceCounter",  () => _pmVATPerformanceRoutine.counter, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe($"{Module}.VATPerformanceCounter", () => _pmVATPerformanceRoutine.counter, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.VATPerformanceResult", () => _pmVATPerformanceRoutine?.m_sb.ToString(), SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
             DATA.Subscribe($"{Module}.PartialPressureResult", () => _pmPartialPressureRoutine?.m_sb.ToString(), SubscriptionAttribute.FLAG.IgnoreSaveDB);
@@ -658,7 +660,7 @@ namespace Venus_RT.Modules.PMs
             DATA.Subscribe($"{Module}.IsInit", () => IsInit, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.IsOnline", () => _isOnline, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-            DATA.Subscribe($"{Module}.VentingFlag",()=>_ventRoutine.VentingFlag, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe($"{Module}.VentingFlag", () => _ventRoutine.VentingFlag, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             //DATA.Subscribe($"{Module}.GetLeakCheckDatas", () => LeakCheckDataRecorder.GetAllLeakCheckData(Module.ToString()));
 
 
@@ -701,7 +703,7 @@ namespace Venus_RT.Modules.PMs
 
             OP.Subscribe($"{Module}.GasLinePurge", (cmd, args) => CheckToPostMessage((int)MSG.GasLinePurge));
 
-            OP.Subscribe($"{Module}.ManualEndStep", (cmd, args) => ManualEndStep() );
+            OP.Subscribe($"{Module}.ManualEndStep", (cmd, args) => ManualEndStep());
 
             OP.Subscribe($"{Module}.{RtOperation.Online}", (cmd, args) => CheckToPostMessage((int)MSG.Online));
             OP.Subscribe($"{Module}.{RtOperation.Offline}", (cmd, args) => CheckToPostMessage((int)MSG.Offline));
@@ -711,8 +713,10 @@ namespace Venus_RT.Modules.PMs
             OP.Subscribe($"{Module}.{RtOperation.Exclude}", (cmd, args) => FnSetExclude());
 
 
-
-            LOG.PMErrorInterrupt += (pmname)=> PMErrorInterrupt(pmname);
+            if (ChamberType == JetChamber.Kepler2200A && ChamberType == JetChamber.Kepler2200B)
+            {
+                LOG.PMErrorInterrupt += (pmname) => PMErrorInterrupt(pmname);
+            }
 
             return true;
         }
@@ -978,7 +982,7 @@ namespace Venus_RT.Modules.PMs
 
         private bool FnStartPumpDownLoadLock(object[] param)
         {
-            return _pumpLoadLockRoutine.Start() ==  RState.Running;
+            return _pumpLoadLockRoutine.Start() == RState.Running;
         }
 
         private bool FnPumpDownLoadLockTimeout(object[] param)
@@ -1214,12 +1218,12 @@ namespace Venus_RT.Modules.PMs
                 return false;
             }
 
-            if(ret == RState.End)
+            if (ret == RState.End)
             {
                 _dictRecipeTime[_processRoutine.currentRecipeResult.RecipeName] = fsm.ElapsedTime;
                 return true;
             }
-            
+
             return false;
         }
         private bool FnAbortProcess(object[] param)
@@ -1275,7 +1279,7 @@ namespace Venus_RT.Modules.PMs
         private bool FnAbortRfPower(object[] param)
         {
             _rfPowerRoutine.Abort();
-            if(_gasFlowRoutine._gasStatus)
+            if (_gasFlowRoutine._gasStatus)
             {
                 _gasFlowRoutine.StopFlow();
             }
@@ -1284,8 +1288,8 @@ namespace Venus_RT.Modules.PMs
 
         private bool FnStartMFCVerification(object[] param)
         {
-            _gasVerificationRoutine.Init((string)param[0], Convert.ToDouble( param[1]), (int)param[2]);
-            return _gasVerificationRoutine.Start(param) ==  RState.Running;
+            _gasVerificationRoutine.Init((string)param[0], Convert.ToDouble(param[1]), (int)param[2]);
+            return _gasVerificationRoutine.Start(param) == RState.Running;
         }
 
         private bool FnMFCVerificationTimeout(object[] param)
@@ -1305,33 +1309,33 @@ namespace Venus_RT.Modules.PMs
             _gasVerificationRoutine.Abort();
             return true;
         }
-        private  bool FnControlPressure(object[] param)
+        private bool FnControlPressure(object[] param)
         {
             if (RouteManager.IsATMMode)
             {
                 return true;
             }
 
-            if (IsOnline == true && fsm.State!=(int)PMState.Processing && fsm.State!=(int)PMState.Clean)
+            if (IsOnline == true && fsm.State != (int)PMState.Processing && fsm.State != (int)PMState.Clean)
             {
                 if (startControlPressureFlag == true)
                 {
                     startControlPressureFlag = false;
 
-                    if (_chamber.GetPVPosition()<= 0)
+                    if (_chamber.GetPVPosition() <= 0)
                     {
                         LOG.Write(eEvent.WARN_PM, Module, $"{Module} control pressure fail,due to pendulum valve is not Open");
                         return false;
                     }
-                    if (_chamber.IsTurboPumpRunning==false)
+                    if (_chamber.IsTurboPumpRunning == false)
                     {
                         LOG.Write(eEvent.WARN_PM, Module, $"{Module} control pressure fail,due to turbo pump is not Open");
                         return false;
                     }
                     _controlPressureSetPoint = SC.GetValue<int>($"{Module}.ControlPressureSetPoint");
                     _controlFlowSetPoint = SC.GetValue<int>($"{Module}.ControlPressureN2FlowSetPoint");
-                    _chamber.StartControlPressure(_controlPressureSetPoint, _controlFlowSetPoint);                
-                }              
+                    _chamber.StartControlPressure(_controlPressureSetPoint, _controlFlowSetPoint);
+                }
             }
             else
             {
@@ -1425,7 +1429,7 @@ namespace Venus_RT.Modules.PMs
             //    return false;
             //}
 
-            
+
 
             return true;
         }
@@ -1523,6 +1527,14 @@ namespace Venus_RT.Modules.PMs
             _pmVATPerformanceRoutine.Abort();
             return true;
         }
+        private bool FnStartHeat(object[] param)
+        {
+            if (ChamberType == JetChamber.Kepler2200A || ChamberType == JetChamber.Kepler2200B)
+            {
+                _pmHeatRoutine.Start();
+            }
+            return true;
+        }
         #endregion
 
         private void _debugRoutine()
@@ -1541,59 +1553,59 @@ namespace Venus_RT.Modules.PMs
             {
                 PostMsg(MSG.Pump);
             }
-            else if(flag == 4)
+            else if (flag == 4)
             {
                 PostMsg(MSG.PumpLoadLock);
             }
-            else if(flag == 5)
+            else if (flag == 5)
             {
                 PostMsg(MSG.VentLoadLock);
             }
-            else if(flag == 6)
+            else if (flag == 6)
             {
                 PostMsg(MSG.PurgeLoadLock);
             }
-            else if(flag == 7)
+            else if (flag == 7)
             {
                 PostMsg(MSG.LaunchPump);
             }
-            else if(flag == 8)
+            else if (flag == 8)
             {
                 PostMsg(MSG.LaunchTurboPump);
             }
-            else if(flag == 9)
+            else if (flag == 9)
             {
                 PostMsg(MSG.LoadLockLeakCheck);
             }
-            else if(flag == 10)
+            else if (flag == 10)
             {
                 PostMsg(MSG.CyclePurge);
             }
-            else if(flag == 11)
+            else if (flag == 11)
             {
                 PostMsg(MSG.GasLinePurge);
             }
-            else if(flag == 12)
+            else if (flag == 12)
             {
                 PostMsg(MSG.LeakCheck);
             }
-            else if(flag == 13)
+            else if (flag == 13)
             {
                 PostMsg(MSG.GasLeakCheck);
             }
-            else if(flag == 14)
+            else if (flag == 14)
             {
                 PostMsg(MSG.LLPlace);
             }
-            else if(flag == 15)
+            else if (flag == 15)
             {
                 PostMsg(MSG.LLPick);
             }
-            else if(flag == 16)
+            else if (flag == 16)
             {
                 PostMsg(MSG.RunRecipe, "7777");
             }
-            else if(flag == 17)
+            else if (flag == 17)
             {
                 PostMsg(MSG.MFCVerification, "MFC2", (double)50, 10);
             }

+ 31 - 0
Venus/Venus_RT/Modules/PMs/PMHeatRoutine.cs

@@ -0,0 +1,31 @@
+using Aitex.Core.RT.Routine;
+using Venus_Core;
+using Venus_RT.Devices;
+
+namespace Venus_RT.Modules.PMs
+{
+     class PMHeatRoutine : PMRoutineBase, IRoutine
+    {
+       
+        public PMHeatRoutine(JetPMBase chamber) : base(chamber)
+        {
+            Name = "PM Heat";           
+        }
+        public RState Start(params object[] objs)
+        {
+            Reset();
+            _chamber.SetHighTemperatureHeaterTemperature(100);
+            return Runner.Start(Module, Name);
+        }
+
+        public RState Monitor()
+        {
+            return Runner.Status;
+        }
+
+        public void Abort()
+        {
+
+        }
+    }
+}

+ 1 - 0
Venus/Venus_RT/Venus_RT.csproj

@@ -231,6 +231,7 @@
     <Compile Include="Devices\TruPlasmaRF_Ethercat.cs" />
     <Compile Include="Devices\LzMatch_Ethercat.cs" />
     <Compile Include="Modules\DVIDName.cs" />
+    <Compile Include="Modules\PMs\PMHeatRoutine.cs" />
     <Compile Include="Modules\SMIF\SMIFEntity.cs" />
     <Compile Include="Devices\TM\HongHuTM.cs" />
     <Compile Include="Devices\TM\ITransferRobot.cs" />

+ 8 - 12
Venus/Venus_UI/App.xaml.cs

@@ -20,7 +20,6 @@ namespace Venus_UI
     public partial class App : PrismApplication
     {
         System.Threading.Mutex mutex;
-        public static User CurrentUser=new User ("admin","admin",Role.Manager);
         protected override void OnStartup(StartupEventArgs e)
         {
             bool ret;
@@ -35,17 +34,14 @@ namespace Venus_UI
             DispatcherUnhandledException += App_DispatcherUnhandledException;
             Singleton<LogManager>.Instance.Initialize();
 
-
-            //ShellView shellView = new ShellView();
-
-            LoginView loginView = new LoginView();
-            loginView.ShowDialog();
-            CurrentUser = loginView.CurrentUser;
-            if (!loginView.IsLoginSuccess)
-            {
-                Current.Shutdown();
-                return;
-            }
+            //LoginView loginView = new LoginView();
+            //loginView.ShowDialog();
+            //CurrentUser = loginView.CurrentUser;
+            //if (!loginView.IsLoginSuccess)
+            //{
+            //    Current.Shutdown();
+            //    return;
+            //}
             base.OnStartup(e);
 
         }

+ 1 - 0
Venus/Venus_UI/Config/Menu.json

@@ -1,6 +1,7 @@
 [
   {
     "Menus": [
+     
       {
         "FirstMenu": "Operation",
         "Permission": 2,

+ 990 - 0
Venus/Venus_UI/Config/Menu_Venus.json

@@ -0,0 +1,990 @@
+[
+  {
+    "Menus": [
+      {
+        "FirstMenu": "Operation",
+        "Permission": 0,
+        "SecondMenu": "Platform",
+        "View": "PlatformView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "System Config",
+        "View": "SystemConfigView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "Role",
+        "View": "RoleView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "SignalTower Config",
+        "View": "SignalTowerConfigView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Event",
+        "View": "EventView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Wafer History",
+        "View": "WaferHistoryDBView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Process History",
+        "View": "ProcessHistoryView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Data History",
+        "View": "DataHistoryView"
+      }
+    ],
+    "RoleName": "Manager",
+    "m_IsLocked": false,
+    "m_LockTime": 111
+  },
+  {
+    "Menus": [
+      {
+        "FirstMenu": "Operation",
+        "Permission": 0,
+        "SecondMenu": "OverView",
+        "View": "OperationOverView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "Platform",
+        "View": "PlatformView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 1,
+        "SecondMenu": "Sequence",
+        "View": "SequenceView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 0,
+        "SecondMenu": "FA",
+        "View": "FAView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "Efem",
+        "View": "EfemView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM Operation",
+        "View": "TMOperationView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM Transfer",
+        "View": "TMView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "Wafer Offset",
+        "View": "WaferOffsetView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "System Config",
+        "View": "SystemConfigView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "Role",
+        "View": "RoleView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "SignalTower Config",
+        "View": "SignalTowerConfigView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Event",
+        "View": "EventView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Wafer History",
+        "View": "WaferHistoryDBView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Process History",
+        "View": "ProcessHistoryView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Data History",
+        "View": "DataHistoryView"
+      }
+    ],
+    "RoleName": "Engineer",
+    "m_IsLocked": false,
+    "m_LockTime": 13
+  },
+  {
+    "Menus": [
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "OverView",
+        "View": "OperationOverView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "Platform",
+        "View": "PlatformView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "Sequence",
+        "View": "SequenceView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "FA",
+        "View": "FAView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "Efem",
+        "View": "EfemView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM Operation",
+        "View": "TMOperationView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM Transfer",
+        "View": "TMView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "Wafer Offset",
+        "View": "WaferOffsetView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "System Config",
+        "View": "SystemConfigView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "Role",
+        "View": "RoleView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "SignalTower Config",
+        "View": "SignalTowerConfigView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Event",
+        "View": "EventView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Wafer History",
+        "View": "WaferHistoryDBView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Process History",
+        "View": "ProcessHistoryView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Data History",
+        "View": "DataHistoryView"
+      }
+    ],
+    "RoleName": "Technician",
+    "m_IsLocked": false,
+    "m_LockTime": 3
+  },
+  {
+    "Menus": [
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "OverView",
+        "View": "OperationOverView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "Platform",
+        "View": "PlatformView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "Sequence",
+        "View": "SequenceView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "FA",
+        "View": "FAView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMC",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMD",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "Efem",
+        "View": "EfemView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM Operation",
+        "View": "TMOperationView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM Transfer",
+        "View": "TMView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "TM IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "Transfer",
+        "Permission": 2,
+        "SecondMenu": "Wafer Offset",
+        "View": "WaferOffsetView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "System Config",
+        "View": "SystemConfigView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "Role",
+        "View": "RoleView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "SignalTower Config",
+        "View": "SignalTowerConfigView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Event",
+        "View": "EventView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Wafer History",
+        "View": "WaferHistoryDBView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Process History",
+        "View": "ProcessHistoryView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Data History",
+        "View": "DataHistoryView"
+      }
+    ],
+    "RoleName": "Operator",
+    "m_IsLocked": false,
+    "m_LockTime": 4
+  }
+]

+ 726 - 0
Venus/Venus_UI/Config/Menu_VenusSE.json

@@ -0,0 +1,726 @@
+[
+  {
+    "Menus": [
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "SE Operation",
+        "View": "VenusSeOperationOverView"
+      },
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "Sequence",
+        "View": "SequenceView"
+      },
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "SE TM",
+        "View": "SETMOperationView"
+      },
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "TM Transfer",
+        "View": "SeTMView"
+      },
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "VCE",
+        "View": "VceView"
+      },
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "System Config",
+        "View": "SystemConfigView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "Role",
+        "View": "RoleView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "SignalTower Config",
+        "View": "SignalTowerConfigView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Event",
+        "View": "EventView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Wafer History",
+        "View": "WaferHistoryDBView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Process History",
+        "View": "ProcessHistoryView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Data History",
+        "View": "DataHistoryView"
+      }
+    ],
+    "RoleName": "Manager",
+    "m_IsLocked": false,
+    "m_LockTime": 111
+  },
+  {
+    "Menus": [
+      {
+        "FirstMenu": "SETM",
+        "Permission": 2,
+        "SecondMenu": "SE Operation",
+        "View": "VenusSeOperationOverView"
+      },
+      {
+        "FirstMenu": "SETM",
+        "Permission": 2,
+        "SecondMenu": "Sequence",
+        "View": "SequenceView"
+      },
+      {
+        "FirstMenu": "SETM",
+        "Permission": 2,
+        "SecondMenu": "SE TM",
+        "View": "SETMOperationView"
+      },
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "TM Transfer",
+        "View": "SeTMView"
+      },
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "VCE",
+        "View": "VceView"
+      },
+      {
+        "FirstMenu": "TMSE",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "System Config",
+        "View": "SystemConfigView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "Role",
+        "View": "RoleView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "SignalTower Config",
+        "View": "SignalTowerConfigView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Event",
+        "View": "EventView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Wafer History",
+        "View": "WaferHistoryDBView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Process History",
+        "View": "ProcessHistoryView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Data History",
+        "View": "DataHistoryView"
+      }
+    ],
+    "RoleName": "Engineer",
+    "m_IsLocked": false,
+    "m_LockTime": 13
+  },
+  {
+    "Menus": [
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "SE Operation",
+        "View": "VenusSeOperationOverView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "Sequence",
+        "View": "SequenceView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "SE TM",
+        "View": "SETMOperationView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "TM Transfer",
+        "View": "SeTMView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "VCE",
+        "View": "VceView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "System Config",
+        "View": "SystemConfigView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "Role",
+        "View": "RoleView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "SignalTower Config",
+        "View": "SignalTowerConfigView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Event",
+        "View": "EventView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Wafer History",
+        "View": "WaferHistoryDBView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Process History",
+        "View": "ProcessHistoryView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Data History",
+        "View": "DataHistoryView"
+      }
+    ],
+    "RoleName": "Technician",
+    "m_IsLocked": false,
+    "m_LockTime": 3
+  },
+  {
+    "Menus": [
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "SE Operation",
+        "View": "VenusSeOperationOverView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "Sequence",
+        "View": "SequenceView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "SE TM",
+        "View": "SETMOperationView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "TM Transfer",
+        "View": "SeTMView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "VCE",
+        "View": "VceView"
+      },
+      {
+        "FirstMenu": "Operation",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Operation",
+        "View": null
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "IO",
+        "View": "IOView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Recipe",
+        "View": "RecipeView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Gas&LeakCheck",
+        "View": "GasLeakCheckView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "MFC Verification",
+        "View": "MFCVerificationView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Partial Pressure",
+        "View": "PartialPressureView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "VAT Performance",
+        "View": "VATPerformanceView"
+      },
+      {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "RF Calibration",
+        "View": "RFCalibrationView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "System Config",
+        "View": "SystemConfigView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "Role",
+        "View": "RoleView"
+      },
+      {
+        "FirstMenu": "Configuration",
+        "Permission": 2,
+        "SecondMenu": "SignalTower Config",
+        "View": "SignalTowerConfigView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Event",
+        "View": "EventView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Wafer History",
+        "View": "WaferHistoryDBView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Process History",
+        "View": "ProcessHistoryView"
+      },
+      {
+        "FirstMenu": "DataLog",
+        "Permission": 2,
+        "SecondMenu": "Data History",
+        "View": "DataHistoryView"
+      }
+    ],
+    "RoleName": "Operator",
+    "m_IsLocked": false,
+    "m_LockTime": 4
+  }
+]

+ 7 - 1
Venus/Venus_UI/Venus_UI.csproj

@@ -160,7 +160,13 @@
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
     </EmbeddedResource>
-    <Content Include="Config\Menu.json">
+    <Content Include="Config\Menu_Kepler.json">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Config\Menu_Venus.json">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Config\Menu_VenusSE.json">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
     <None Include="Properties\Settings.settings">

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

@@ -3,8 +3,7 @@
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
-        xmlns:wnd="http://OpenSEMI.Ctrlib.com/presentation"
-        
+        xmlns:wnd="http://OpenSEMI.Ctrlib.com/presentation"        
         WindowStartupLocation="CenterScreen"
         xmlns:prism="http://prismlibrary.com/"
         mc:Ignorable="d"

+ 36 - 6
Venus/Venus_UI/Views/ShellView.xaml.cs

@@ -39,6 +39,7 @@ namespace Venus_UI.Views
         public List<TabControl> centerTabViews = new List<TabControl>();
         public List<AduRadioButtonIcon> buttonList = new List<AduRadioButtonIcon>();
         DispatcherTimer timer = new DispatcherTimer();
+        User CurrentUser = new User("admin", "admin", Role.Manager);
 
         //public DateTime Time
         //{ 
@@ -58,6 +59,14 @@ namespace Venus_UI.Views
         {
 
             InitializeComponent();
+
+            LoginView loginView = new LoginView();
+            loginView.ShowDialog();
+            CurrentUser = loginView.CurrentUser;
+            if (!loginView.IsLoginSuccess)
+            {
+               this.Close();
+            }
             m_regionManager = regionManager;
             m_regionNavigationService = regionNavigationService;
 
@@ -92,7 +101,7 @@ namespace Venus_UI.Views
             ResizeMode = ResizeMode.CanMinimize;
             this.WindowState = this.WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;
 
-
+            
 
 
         }
@@ -196,13 +205,29 @@ namespace Venus_UI.Views
             //VenusMenu = SerializeHelper.Instance.ReadFromJsonFile<List<VenusMenu>>($"Config/UIMenu.json");
             //App.currentUser
             string configPath = "";
-            if (File.Exists($"Config/UIMenu.json"))
+            string uiConfig = "";
+            object obj2 = QueryDataClient.Instance.Service.GetData("System.ConfigType");
+            var configType = (ConfigType)Convert.ToInt32(obj2);
+            if (configType == ConfigType.Other || configType == ConfigType.Kepler2300 || configType == ConfigType.Kepler2200)
+            {
+                uiConfig = "_Kepler";
+            }
+            else if (configType == ConfigType.VenusSE || configType == ConfigType.VenusDE)
             {
-                configPath = $"Config/UIMenu.json";
+                uiConfig = "_VenusSE";
             }
-            else if (File.Exists($"Config/Menu.json"))
+            else if (configType == ConfigType.Venus)
             {
-                configPath = $"Config/Menu.json";
+                uiConfig = "_Venus";
+            }
+
+            if (File.Exists($"Config/UIMenu{uiConfig}.json"))
+            {
+                configPath = $"Config/UIMenu{uiConfig}.json";
+            }
+            else if (File.Exists($"Config/Menu{uiConfig}.json"))
+            {
+                configPath = $"Config/Menu{uiConfig}.json";
             }
             else
             {
@@ -212,7 +237,7 @@ namespace Venus_UI.Views
             RoleDefines = SerializeHelper.Instance.ReadFromJsonFile<List<RoleDefine>>(configPath);
             string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
             //TabControl tabControl = new TabControl();
-            int role = (int)App.CurrentUser.Role;
+            int role = (int)CurrentUser.Role;
             var menu = RoleDefines[role].Menus;
             List<string> modules = new List<string>();
             for (int i = 0; i < menu.Count; i++)
@@ -268,6 +293,11 @@ namespace Venus_UI.Views
                     MethodInfo methodInfo = t.GetMethod("Init", new Type[] { typeof(string) });
                     methodInfo?.Invoke(obj, new object[] { "TM"});
                 }
+                else if (menu[i].FirstMenu == "TMSE" && menu[i].SecondMenu == "IO")
+                {
+                    MethodInfo methodInfo = t.GetMethod("Init", new Type[] { typeof(string) });
+                    methodInfo?.Invoke(obj, new object[] { "SETM" });
+                }
                 if (lastModule != menu[i].FirstMenu)
                 {
                     AduRadioButtonIcon aduRadioButtonIcon = new AduRadioButtonIcon();