浏览代码

Redesign Recipe module.

sangwq 1 年之前
父节点
当前提交
16f00701e5

+ 1 - 2
Venus/Venus_RT/Devices/EFEM/EfemBase.cs

@@ -111,8 +111,7 @@ namespace Venus_RT.Devices.EFEM
         public abstract bool Undock(ModuleName mod);
         public abstract bool Clamp(ModuleName mod, bool isUnloadClamp);
         public abstract bool Unclamp(ModuleName mod);
-        public abstract bool SetThick(ModuleName mod);
-        public abstract bool SetThin(ModuleName mod);
+        public abstract bool SetThickness(ModuleName mod, string thickness);
         public abstract void SetRobotMovingInfo(RobotAction action, Hand hand, ModuleName target);
     }
 }

+ 150 - 41
Venus/Venus_RT/Devices/EFEM/JetEfem.cs

@@ -27,6 +27,7 @@ namespace Venus_RT.Devices.EFEM
         private readonly SignalTower _signalT = new SignalTower();
         private readonly AsyncSocket _socket;
         private EfemMessage _currentMsg;
+        private EfemMessage _backroundMsg;
         private EfemMessage _revMsg;
 
         public override RState Status { get { return _status; } }
@@ -64,7 +65,7 @@ namespace Venus_RT.Devices.EFEM
         }
         public override void Reset()
         {
-
+            _status = RState.End;
         }
         public override void SetOnline(bool online)
         {
@@ -77,14 +78,11 @@ namespace Venus_RT.Devices.EFEM
 
         public override void SetBusy(ModuleName mod, bool online)
         {
-
+            _status = RState.Running;
         }
 
         public override bool HomeAll()
         {
-            if (!CheckEfemStatus())
-                return false;
-
             _currentMsg = new EfemMessage
             {
                 Operation = EfemOperation.Home,
@@ -97,18 +95,30 @@ namespace Venus_RT.Devices.EFEM
         }
         public override bool Home(ModuleName mod)
         {
-            if (!CheckEfemStatus())
-                return false;
+            if(ModuleHelper.IsLoadPort(mod))
+            {
+                _backroundMsg = new EfemMessage
+                {
+                    Operation = EfemOperation.Home,
+                    Head = EfemMessage.MsgHead.MOV,
+                    Parameters = new List<string> { Constant.ModuleString[mod] }
+                };
 
-            _currentMsg = new EfemMessage
+                return _socket.Write(_backroundMsg.ToString());
+            }
+            else
             {
-                Operation = EfemOperation.Home,
-                Head = EfemMessage.MsgHead.MOV,
-                Parameters = new List<string> { Constant.ModuleString[mod] }
-            };
+                _currentMsg = new EfemMessage
+                {
+                    Operation = EfemOperation.Home,
+                    Head = EfemMessage.MsgHead.MOV,
+                    Parameters = new List<string> { Constant.ModuleString[mod] }
+                };
 
-            _status = RState.Running;
-            return _socket.Write(_currentMsg.ToString());
+                _status = RState.Running;
+                return _socket.Write(_currentMsg.ToString());
+            }
+            
         }
         public override bool Halt()
         {
@@ -117,18 +127,15 @@ namespace Venus_RT.Devices.EFEM
 
         public override bool ClearError()
         {
-            if (!CheckEfemStatus())
-                return false;
 
-            _currentMsg = new EfemMessage
+            _backroundMsg = new EfemMessage
             {
                 Operation = EfemOperation.ClearError,
                 Head = EfemMessage.MsgHead.SET,
                 Parameters = new List<string> { "CLEAR" }
             };
 
-            _status = RState.Running;
-            return _socket.Write(_currentMsg.ToString());
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool PickExtend(ModuleName chamber, int slot, Hand hand)
         {
@@ -215,7 +222,6 @@ namespace Venus_RT.Devices.EFEM
             if (!CheckEfemStatus())
                 return false;
 
-
             Position SrcPos = new Position {  Module= station,Slot= (byte)slot };
             _currentMsg = new EfemMessage
             {
@@ -237,7 +243,6 @@ namespace Venus_RT.Devices.EFEM
             if (!CheckEfemStatus())
                 return false;
 
-
             Position DestPos = new Position { Module = station, Slot = (byte)slot };
             _currentMsg = new EfemMessage
             {
@@ -259,7 +264,6 @@ namespace Venus_RT.Devices.EFEM
             if (!CheckEfemStatus())
                 return false;
 
-
             Position DestPos = new Position { Module = station, Slot = (byte)0 };
             _currentMsg = new EfemMessage
             {
@@ -278,8 +282,22 @@ namespace Venus_RT.Devices.EFEM
         }
         public override bool Grip(Hand blade, bool isGrip)
         {
-            return true;
+            if (!CheckEfemStatus())
+                return false;
 
+            _currentMsg = new EfemMessage
+            {
+                Operation = EfemOperation.Grip,
+                Head = EfemMessage.MsgHead.SET,
+                Parameters = new List<string>
+                {
+                    isGrip ? "ON":"OFF",
+                    Constant.ArmString[blade]
+                }
+            };
+
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         }
         public override bool Map(ModuleName mod)
         {
@@ -328,59 +346,150 @@ namespace Venus_RT.Devices.EFEM
         }
         public override bool Align(ModuleName mod, float delayTime, WaferSize size)
         {
-            return true;
+            if (!CheckEfemStatus())
+                return false;
+
+            _currentMsg = new EfemMessage
+            {
+                Operation =  EfemOperation.Align,
+                Head = EfemMessage.MsgHead.MOV,
+                Parameters = new List<string> { mod.ToHWString(), size.ToString() }
+            };
+
+            _status = RState.Running;
+            return _socket.Write(_currentMsg.ToString());
         } 
         public override bool SetLamp(LightType light, LightStatus status)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.Light,
+                Head = EfemMessage.MsgHead.SET,
+                Parameters = new List<string> { Constant.STOWER, light.ToString(), status.ToString() }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Load(ModuleName mod)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.Load,
+                Head = EfemMessage.MsgHead.MOV,
+                Parameters = new List<string> { Constant.ModuleString[mod] }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Unload(ModuleName mod)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.Unload,
+                Head = EfemMessage.MsgHead.MOV,
+                Parameters = new List<string> { Constant.ModuleString[mod] }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool ReadCarrierId(ModuleName mod)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.CarrierId,
+                Head = EfemMessage.MsgHead.GET,
+                Parameters = new List<string> { Constant.ModuleString[mod] }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool WriteCarrierId(ModuleName mod, string id)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.CarrierId,
+                Head = EfemMessage.MsgHead.SET,
+                Parameters = new List<string> { Constant.ModuleString[mod], id }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool ReadTagData(ModuleName mod)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.CarrierId,
+                Head = EfemMessage.MsgHead.GET,
+                Parameters = new List<string> { Constant.ModuleString[mod] }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool WriteTagData(ModuleName mod, string tagData)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.CarrierId,
+                Head = EfemMessage.MsgHead.SET,
+                Parameters = new List<string> { Constant.ModuleString[mod], tagData }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Dock(ModuleName mod)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.Dock,
+                Head = EfemMessage.MsgHead.MOV,
+                Parameters = new List<string> { Constant.ModuleString[mod]}
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Undock(ModuleName mod)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.Undock,
+                Head = EfemMessage.MsgHead.MOV,
+                Parameters = new List<string> { Constant.ModuleString[mod]}
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Clamp(ModuleName mod, bool isUnloadClamp)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.Clamp,
+                Head = EfemMessage.MsgHead.MOV,
+                Parameters = new List<string> { Constant.ModuleString[mod] }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override bool Unclamp(ModuleName mod)
         {
-            return true;
-        }
-        public override bool SetThick(ModuleName mod)
-        {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.Unclamp,
+                Head = EfemMessage.MsgHead.MOV,
+                Parameters = new List<string> { Constant.ModuleString[mod] }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
-        public override bool SetThin(ModuleName mod)
+        public override bool SetThickness(ModuleName mod, string thickness)
         {
-            return true;
+            _backroundMsg = new EfemMessage
+            {
+                Operation = EfemOperation.SetThickness,
+                Head = EfemMessage.MsgHead.SET,
+                Parameters = new List<string> { Constant.ModuleString[mod], thickness.ToUpper() }
+            };
+
+            return _socket.Write(_backroundMsg.ToString());
         }
         public override void SetRobotMovingInfo(RobotAction action, Hand hand, ModuleName target)
         {

+ 2 - 2
Venus/Venus_RT/Devices/EFEM/Loadport.cs

@@ -158,7 +158,7 @@ namespace Venus_RT.Devices.EFEM
 
             SC.SetItemValue($"System.WaferThickness.{Module}WaferThicknessType", _waferThicknessType);
 
-            _controller.SetThick(Module);
+            _controller.SetThickness(Module, _waferThicknessType);
         }
 
         public void SetThin()
@@ -167,7 +167,7 @@ namespace Venus_RT.Devices.EFEM
 
             SC.SetItemValue($"System.WaferThickness.{Module}WaferThicknessType", _waferThicknessType);
 
-            _controller.SetThin(Module);
+            _controller.SetThickness(Module, _waferThicknessType);
         }
 
 

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

@@ -412,7 +412,7 @@ namespace Venus_RT.Devices
         {
             try
             {
-                if (Module=="PMB" && SC.GetValue<bool>($"PMB.Chiller.ChillerSameWithPMB") && SC.GetValue<bool>($"PMB.Chiller.EnableChiller")) 
+                if (Module=="PMB" && SC.GetValue<bool>($"PMB.Chiller.ChillerSameWithPMA") && SC.GetValue<bool>($"PMB.Chiller.EnableChiller")) 
                     return;
                 if (_timerQueryStatus.IsTimeout() && this.StatusSMC != SMCChillerState.ERROR)
                 {

+ 2 - 2
Venus/Venus_RT/Modules/PMs/PMProcessRoutine.cs

@@ -102,13 +102,13 @@ namespace Venus_RT.Modules.PMs
         {
             foreach(var step in recipe.Steps)
             {
-                if (ProcessHelper.LoadStepFuns(step) == false)
+                if (_processHelper.LoadStepFuns(step) == false)
 
                     return false;
 
                 foreach(ProcessUnitBase unit in step.LstUnit)
                 {
-                    if (ProcessHelper.LoadMethods(unit) == false)
+                    if (_processHelper.LoadMethods(unit) == false)
                     {
                         Stop($"Cannot find the process routine for unit:{unit.GetType()}");
                         return false;

+ 64 - 67
Venus/Venus_RT/Modules/PMs/ProcessDefine.cs

@@ -15,53 +15,52 @@ namespace Venus_RT.Modules.PMs
 
     class ProcessHelper
     {
-        static protected JetPMBase Chamber;
+        protected JetPMBase Chamber;
+        private string Module;
 
-        static Stopwatch sRFStopWatch = new Stopwatch();
-        static Stopwatch bRFStopWatch = new Stopwatch();
+        private static Dictionary<string, Func<ProcessUnitBase, RecipeStep, RState>> startHelper = new Dictionary<string, Func<ProcessUnitBase, RecipeStep, RState>>();
+        private static Dictionary<string, Func<ProcessUnitBase, RecipeStep, RState>> checkerHelper = new Dictionary<string, Func<ProcessUnitBase, RecipeStep, RState>>();
+        private static Dictionary<string, Action<ProcessUnitBase, RecipeStep>> endHelper = new Dictionary<string, Action<ProcessUnitBase, RecipeStep>>();
 
-
-        private static Dictionary<string, Func<ProcessUnitBase, RecipeStep, RState>> startHelper = new Dictionary<string, Func<ProcessUnitBase, RecipeStep, RState>>
+        public ProcessHelper(JetPMBase pm)
         {
-            {"PressureByPressureModeUnit",  PressureByPressureModeUnit_Start},
-            {"PressureByValveModeUnit",     PressureByValveModeUnit_Start},
-            {"TCPUnit",                     TCPUnit_Start},
-            {"BiasUnit",                    BiasUnit_Start},
-            {"GasControlUnit",              GasControlUnit_Start },
-            {"ESCHVUnit",                   ESCHVUnit_Start },
-            {"ProcessKitUnit",              ProcessKitUnit_Start },
-        };
-
-        private static Dictionary<string, Func<ProcessUnitBase, RecipeStep, RState>> checkerHelper = new Dictionary<string, Func<ProcessUnitBase, RecipeStep, RState>>
+            Chamber = pm;
+            Module = pm.Module.ToString() ;
+            Init();
+        }
+
+        private void Init()
         {
-            {"PressureByPressureModeUnit",  PressureByPressureModeUnit_Check},
-            {"PressureByValveModeUnit",     PressureByValveModeUnit_Check},
-            {"TCPUnit",                     TCPUnit_Check},
-            {"BiasUnit",                    BiasUnit_Check},
-            {"GasControlUnit",              GasControlUnit_Check},
-            {"ESCHVUnit",                   ESCHVUnit_Check},
-            {"ProcessKitUnit",              ProcessKitUnit_Check}
+            startHelper     [$"{Module}.PressureByPressureModeUnit"]  = (ProcessUnitBase unit, RecipeStep step) => PressureByPressureModeUnit_Start(unit, step);
+            checkerHelper   [$"{Module}.PressureByPressureModeUnit"]  = (ProcessUnitBase unit, RecipeStep step) => PressureByPressureModeUnit_Check(unit, step);
+            endHelper       [$"{Module}.PressureByPressureModeUnit"]  = (ProcessUnitBase unit, RecipeStep step) => PressureByPressureModeUnit_End(unit, step);
 
-        };
+            startHelper     [$"{Module}.PressureByValveModeUnit"]     = (ProcessUnitBase unit, RecipeStep step) => PressureByValveModeUnit_Start(unit, step);
+            checkerHelper   [$"{Module}.PressureByValveModeUnit"]     = (ProcessUnitBase unit, RecipeStep step) => PressureByValveModeUnit_Check(unit, step);
+            endHelper       [$"{Module}.PressureByValveModeUnit"]     = (ProcessUnitBase unit, RecipeStep step) => PressureByValveModeUnit_End(unit, step);
 
-        private static Dictionary<string, Action<ProcessUnitBase, RecipeStep>> endHelper = new Dictionary<string, Action<ProcessUnitBase, RecipeStep>>
-        {
-            {"PressureByPressureModeUnit",  PressureByPressureModeUnit_End},
-            {"PressureByValveModeUnit",     PressureByValveModeUnit_End},
-            {"TCPUnit",                     TCPUnit_End},
-            {"BiasUnit",                    BiasUnit_End},
-            {"GasControlUnit",              GasControlUnit_End},
-            {"ESCHVUnit",                   ESCHVUnit_End},
-            {"ProcessKitUnit",              ProcessKitUnit_End}
+            startHelper     [$"{Module}.TCPUnit"]                     = (ProcessUnitBase unit, RecipeStep step) => TCPUnit_Start(unit, step);
+            checkerHelper   [$"{Module}.TCPUnit"]                     = (ProcessUnitBase unit, RecipeStep step) => TCPUnit_Check(unit, step);
+            endHelper       [$"{Module}.TCPUnit"]                     = (ProcessUnitBase unit, RecipeStep step) => TCPUnit_End(unit, step);
 
-        };
+            startHelper     [$"{Module}.BiasUnit"]                    = (ProcessUnitBase unit, RecipeStep step) => BiasUnit_Start(unit, step);
+            checkerHelper   [$"{Module}.BiasUnit"]                    = (ProcessUnitBase unit, RecipeStep step) => BiasUnit_Check(unit, step);
+            endHelper       [$"{Module}.BiasUnit"]                    = (ProcessUnitBase unit, RecipeStep step) => BiasUnit_End(unit, step);
 
-        public ProcessHelper(JetPMBase pm)
-        {
-            Chamber = pm;
+            startHelper     [$"{Module}.GasControlUnit"]              = (ProcessUnitBase unit, RecipeStep step) => GasControlUnit_Start(unit, step);
+            checkerHelper   [$"{Module}.GasControlUnit"]              = (ProcessUnitBase unit, RecipeStep step) => GasControlUnit_Check(unit, step);
+            endHelper       [$"{Module}.GasControlUnit"]              = (ProcessUnitBase unit, RecipeStep step) => GasControlUnit_End(unit, step);
+
+            startHelper     [$"{Module}.ESCHVUnit"]                   = (ProcessUnitBase unit, RecipeStep step) => ESCHVUnit_Start(unit, step);
+            checkerHelper   [$"{Module}.ESCHVUnit"]                   = (ProcessUnitBase unit, RecipeStep step) => ESCHVUnit_Check(unit, step);
+            endHelper       [$"{Module}.ESCHVUnit"]                   = (ProcessUnitBase unit, RecipeStep step) => ESCHVUnit_End(unit, step);
+
+            startHelper     [$"{Module}.ProcessKitUnit"]              = (ProcessUnitBase unit, RecipeStep step) => ProcessKitUnit_Start(unit, step);
+            checkerHelper   [$"{Module}.ProcessKitUnit"]              = (ProcessUnitBase unit, RecipeStep step) => ProcessKitUnit_Check(unit, step);
+            endHelper       [$"{Module}.ProcessKitUnit"]              = (ProcessUnitBase unit, RecipeStep step) => ProcessKitUnit_End(unit, step);
         }
 
-        static private RState PressureByPressureModeUnit_Start(ProcessUnitBase unit, RecipeStep step)
+        private RState PressureByPressureModeUnit_Start(ProcessUnitBase unit, RecipeStep step)
         {
             var ProcessUnit = unit as PressureByPressureModeUnit;
             if (Chamber.SetPVPressure(ProcessUnit.StartPressure))
@@ -72,7 +71,7 @@ namespace Venus_RT.Modules.PMs
             return RState.Failed;
         }
 
-        static private RState PressureByPressureModeUnit_Check(ProcessUnitBase unit, RecipeStep step)
+        private RState PressureByPressureModeUnit_Check(ProcessUnitBase unit, RecipeStep step)
         {
             var ProcessUnit = unit as PressureByPressureModeUnit;
             if(ProcessUnit.EnableRamp)
@@ -91,12 +90,12 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private void PressureByPressureModeUnit_End(ProcessUnitBase unit, RecipeStep step)
+        private void PressureByPressureModeUnit_End(ProcessUnitBase unit, RecipeStep step)
         {
 
         }
 
-        static private RState PressureByValveModeUnit_Start(ProcessUnitBase unit, RecipeStep step)
+        private RState PressureByValveModeUnit_Start(ProcessUnitBase unit, RecipeStep step)
         {
             var ProcessUnit = unit as PressureByValveModeUnit;
             if(Chamber.SetPVPostion(ProcessUnit.StartPosition))
@@ -106,7 +105,7 @@ namespace Venus_RT.Modules.PMs
             return RState.Failed;
         }
 
-        static private RState PressureByValveModeUnit_Check(ProcessUnitBase unit, RecipeStep step)
+        private RState PressureByValveModeUnit_Check(ProcessUnitBase unit, RecipeStep step)
         {
             var ProcessUnit = unit as PressureByValveModeUnit;
             if(ProcessUnit.EnableRamp)
@@ -120,14 +119,13 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private void PressureByValveModeUnit_End(ProcessUnitBase unit, RecipeStep step)
+        private void PressureByValveModeUnit_End(ProcessUnitBase unit, RecipeStep step)
         {
 
         }
 
-        static private RState TCPUnit_Start(ProcessUnitBase unit, RecipeStep step)
+        private RState TCPUnit_Start(ProcessUnitBase unit, RecipeStep step)
         {
-            sRFStopWatch.Restart();
             var ProcessUnit = unit as TCPUnit;
             if (ProcessUnit.RFPower > 5)
             {
@@ -138,11 +136,11 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private RState TCPUnit_Check(ProcessUnitBase unit, RecipeStep step)
+        private RState TCPUnit_Check(ProcessUnitBase unit, RecipeStep step)
         {
             var _scPowerAlarmTime= SC.GetValue<double>($"{Chamber.Name}.Rf.PowerAlarmTime");
             var ProcessUnit = unit as TCPUnit;
-            if(ProcessUnit.MaxReflectedPower > 0 && Chamber.ReflectPower > ProcessUnit.MaxReflectedPower && sRFStopWatch.ElapsedMilliseconds > _scPowerAlarmTime*1000)
+            if(ProcessUnit.MaxReflectedPower > 0 && Chamber.ReflectPower > ProcessUnit.MaxReflectedPower && step.ElapsedTime() > _scPowerAlarmTime*1000)
             {
                 LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} failed, RF Reflect Power:{Chamber.ReflectPower} exceeds the Max Limit:{ProcessUnit.MaxReflectedPower}");
                 return RState.Failed;
@@ -157,15 +155,14 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private void TCPUnit_End(ProcessUnitBase unit, RecipeStep step)
+        private void TCPUnit_End(ProcessUnitBase unit, RecipeStep step)
         {
             Chamber.GeneratorSetpower(0);
             Chamber.GeneratorPowerOn(false);
         }
 
-        static private RState BiasUnit_Start(ProcessUnitBase unit, RecipeStep step)
+        private RState BiasUnit_Start(ProcessUnitBase unit, RecipeStep step)
         {
-            bRFStopWatch.Restart();
             var ProcessUnit = unit as BiasUnit;
             if (ProcessUnit.BiasRFPower > 5)
             {
@@ -183,12 +180,12 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private RState BiasUnit_Check(ProcessUnitBase unit, RecipeStep step)
+        private RState BiasUnit_Check(ProcessUnitBase unit, RecipeStep step)
         {
             var _scPowerAlarmTime = SC.GetValue<double>($"{Chamber.Name}.BiasRf.PowerAlarmTime");
 
             var ProcessUnit = unit as BiasUnit;
-            if (ProcessUnit.BiasMaxReflectedPower > 0 && Chamber.BiasReflectPower > ProcessUnit.BiasMaxReflectedPower && bRFStopWatch.ElapsedMilliseconds > _scPowerAlarmTime * 1000)
+            if (ProcessUnit.BiasMaxReflectedPower > 0 && Chamber.BiasReflectPower > ProcessUnit.BiasMaxReflectedPower && step.ElapsedTime() > _scPowerAlarmTime * 1000)
             {
                 LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} failed, Bias Reflect Power:{Chamber.BiasReflectPower} exceeds the Max Limit:{ProcessUnit.BiasMaxReflectedPower}");
                 return RState.Failed;
@@ -203,13 +200,13 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private void BiasUnit_End(ProcessUnitBase unit, RecipeStep step)
+        private void BiasUnit_End(ProcessUnitBase unit, RecipeStep step)
         {
             Chamber.GeneratorBiasSetpower(0);
             Chamber.GeneratorBiasPowerOn(false);
         }
 
-        static private RState GasControlUnit_Start(ProcessUnitBase unit, RecipeStep step)
+        private RState GasControlUnit_Start(ProcessUnitBase unit, RecipeStep step)
         {
             Chamber.OpenValve(ValveType.GasFinal, true);
             var ProcessUnit = unit as GasControlUnit;
@@ -240,7 +237,7 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private RState GasControlUnit_Check(ProcessUnitBase unit, RecipeStep step)
+        private RState GasControlUnit_Check(ProcessUnitBase unit, RecipeStep step)
         {
             var ProcessUnit = unit as GasControlUnit;
             if(ProcessUnit.EnableRamp)
@@ -258,7 +255,7 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private void GasControlUnit_End(ProcessUnitBase unit, RecipeStep step)
+        private void GasControlUnit_End(ProcessUnitBase unit, RecipeStep step)
         {
             Chamber.FlowGas(0, 0);
             Chamber.FlowGas(1, 0);
@@ -270,7 +267,7 @@ namespace Venus_RT.Modules.PMs
             Chamber.FlowGas(7, 0);
         }
 
-        static private RState ESCHVUnit_Start(ProcessUnitBase unit, RecipeStep step)
+        private RState ESCHVUnit_Start(ProcessUnitBase unit, RecipeStep step)
         {
             var ProcessUnit = unit as ESCHVUnit;
             Chamber.SetESCClampVoltage(ProcessUnit.ESCClampValtage);
@@ -279,7 +276,7 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private RState ESCHVUnit_Check(ProcessUnitBase unit, RecipeStep step)
+        private RState ESCHVUnit_Check(ProcessUnitBase unit, RecipeStep step)
         {
             if(Chamber.BackSideHeOutOfRange)
             {
@@ -290,32 +287,32 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        static private void ESCHVUnit_End(ProcessUnitBase unit, RecipeStep step)
+        private void ESCHVUnit_End(ProcessUnitBase unit, RecipeStep step)
         {
             Chamber.SetESCClampVoltage(0);
             //Chamber.SetBacksideHePressure(0);
             Chamber.SetBacksideHeThreshold(0, 0);
         }
 
-        static private RState ProcessKitUnit_Start(ProcessUnitBase unit, RecipeStep step)
+        private RState ProcessKitUnit_Start(ProcessUnitBase unit, RecipeStep step)
         {
             var ProcessUnit = unit as ProcessKitUnit;
             return RState.Running;
         }
 
-        static private RState ProcessKitUnit_Check(ProcessUnitBase unit, RecipeStep step)
+        private RState ProcessKitUnit_Check(ProcessUnitBase unit, RecipeStep step)
         {
             var ProcessUnit = unit as ProcessKitUnit;
             return RState.Running;
         }
 
-        static private void ProcessKitUnit_End(ProcessUnitBase unit, RecipeStep step)
+        private void ProcessKitUnit_End(ProcessUnitBase unit, RecipeStep step)
         {
         }
 
-        public static bool LoadMethods(ProcessUnitBase unit)
+        public bool LoadMethods(ProcessUnitBase unit)
         {
-            var className = unit.GetType().Name;
+            var className = $"{Module}.{unit.GetType().Name}";
             if(startHelper.ContainsKey(className) && checkerHelper.ContainsKey(className) && endHelper.ContainsKey(className))
             {
                 unit.starter = startHelper[className];
@@ -328,7 +325,7 @@ namespace Venus_RT.Modules.PMs
             return false;
         }
 
-        private static RState stepStarter(RecipeStep step)
+        private RState stepStarter(RecipeStep step)
         {
             step.StartStepTimer();
             switch (step.Type)
@@ -340,7 +337,7 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        private static RState stepChecker(RecipeStep step)
+        private RState stepChecker(RecipeStep step)
         {
             switch(step.Type)
             {
@@ -362,7 +359,7 @@ namespace Venus_RT.Modules.PMs
             return RState.Running;
         }
 
-        private static RState stepEnder(RecipeStep step)
+        private RState stepEnder(RecipeStep step)
         {
             if(step.Type == StepType.EndPoint)
             {
@@ -378,7 +375,7 @@ namespace Venus_RT.Modules.PMs
             return RState.End;
         }
 
-        public static bool LoadStepFuns(RecipeStep step)
+        public bool LoadStepFuns(RecipeStep step)
         {
             step.starter = stepStarter;
             step.checker = stepChecker;