|
@@ -297,49 +297,53 @@ namespace Venus_RT.Modules.PMs
|
|
|
//}
|
|
|
_faCallback.RecipeStart(_chamber.Module.ToString(), recipeName);
|
|
|
WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.InProcess);
|
|
|
- switch (_jetChamber)
|
|
|
- {
|
|
|
- case JetChamber.Kepler2200A:
|
|
|
- case JetChamber.Kepler2200B:
|
|
|
- List<string> kepler2200Names = new List<string>();
|
|
|
- kepler2200Names.Add($"{Module}.MfcGas1.FeedBack");
|
|
|
- kepler2200Names.Add($"{Module}.MfcGas2.FeedBack");
|
|
|
- kepler2200Names.Add($"{Module}.MfcGas3.FeedBack");
|
|
|
- kepler2200Names.Add($"{Module}.MfcGas4.FeedBack");
|
|
|
- kepler2200Names.Add($"{Module}.MfcGas5.FeedBack");
|
|
|
- kepler2200Names.Add($"{Module}.MfcGas6.FeedBack");
|
|
|
- kepler2200Names.Add($"{Module}.Rf.ForwardPower");
|
|
|
- _fdc.Reset(kepler2200Names);
|
|
|
- break;
|
|
|
|
|
|
- case JetChamber.Kepler2300:
|
|
|
- List<string> kepler2300Names = new List<string>();
|
|
|
- kepler2300Names.Add($"{Module}.MfcGas1.FeedBack");
|
|
|
- kepler2300Names.Add($"{Module}.MfcGas2.FeedBack");
|
|
|
- kepler2300Names.Add($"{Module}.MfcGas3.FeedBack");
|
|
|
- kepler2300Names.Add($"{Module}.MfcGas4.FeedBack");
|
|
|
- kepler2300Names.Add($"{Module}.MfcGas5.FeedBack");
|
|
|
- kepler2300Names.Add($"{Module}.MfcGas6.FeedBack");
|
|
|
- kepler2300Names.Add($"{Module}.MfcGas7.FeedBack");
|
|
|
- kepler2300Names.Add($"{Module}.MfcGas8.FeedBack");
|
|
|
- kepler2300Names.Add($"{Module}.Rf.ForwardPower");
|
|
|
- kepler2300Names.Add($"{Module}.BiasRf.ForwardPower");
|
|
|
-
|
|
|
- _fdc.Reset(kepler2300Names);
|
|
|
- break;
|
|
|
+ if (_recipeType == RecipeType.Process)
|
|
|
+ {
|
|
|
+ switch (_jetChamber)
|
|
|
+ {
|
|
|
+ case JetChamber.Kepler2200A:
|
|
|
+ case JetChamber.Kepler2200B:
|
|
|
+ List<string> kepler2200Names = new List<string>();
|
|
|
+ kepler2200Names.Add($"{Module}.MfcGas1.FeedBack");
|
|
|
+ kepler2200Names.Add($"{Module}.MfcGas2.FeedBack");
|
|
|
+ kepler2200Names.Add($"{Module}.MfcGas3.FeedBack");
|
|
|
+ kepler2200Names.Add($"{Module}.MfcGas4.FeedBack");
|
|
|
+ kepler2200Names.Add($"{Module}.MfcGas5.FeedBack");
|
|
|
+ kepler2200Names.Add($"{Module}.MfcGas6.FeedBack");
|
|
|
+ kepler2200Names.Add($"{Module}.Rf.ForwardPower");
|
|
|
+ _fdc.Reset(kepler2200Names);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case JetChamber.Kepler2300:
|
|
|
+ List<string> kepler2300Names = new List<string>();
|
|
|
+ kepler2300Names.Add($"{Module}.MfcGas1.FeedBack");
|
|
|
+ kepler2300Names.Add($"{Module}.MfcGas2.FeedBack");
|
|
|
+ kepler2300Names.Add($"{Module}.MfcGas3.FeedBack");
|
|
|
+ kepler2300Names.Add($"{Module}.MfcGas4.FeedBack");
|
|
|
+ kepler2300Names.Add($"{Module}.MfcGas5.FeedBack");
|
|
|
+ kepler2300Names.Add($"{Module}.MfcGas6.FeedBack");
|
|
|
+ kepler2300Names.Add($"{Module}.MfcGas7.FeedBack");
|
|
|
+ kepler2300Names.Add($"{Module}.MfcGas8.FeedBack");
|
|
|
+ kepler2300Names.Add($"{Module}.Rf.ForwardPower");
|
|
|
+ kepler2300Names.Add($"{Module}.BiasRf.ForwardPower");
|
|
|
+
|
|
|
+ _fdc.Reset(kepler2300Names);
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
return Runner.Start(Module, Name);
|
|
|
}
|
|
|
public RState Monitor()
|
|
|
{
|
|
|
Runner
|
|
|
- .Run(ProcessStep.PreparePressure, PreparePressure, IsPressureReady)
|
|
|
- .Run(ProcessStep.PrepareTemperature, PrepareTemp, IsTempReady)
|
|
|
- .RunIf(ProcessStep.RunChuckRecipe, needchuck, StartChuckRecipe, CheckRecipeDone, 5 * 60 * 60 * 1000)
|
|
|
- .RunIf(ProcessStep.RunProcessRecipe, needprocess, StartProcessRecipe, CheckRecipeDone, 5 * 60 * 60 * 1000)
|
|
|
- .RunIf(ProcessStep.RunDechuckRecipe, needdechuck, StartDechuckRecipe, CheckRecipeDone, 5 * 60 * 60 * 1000)
|
|
|
- .RunIf(ProcessStep.RunCleanRecipe, needclean, StartCleanRecipe, CheckRecipeDone, 5 * 60 * 60 * 1000)
|
|
|
- .End(ProcessStep.End, ProcessDone, _delay_1s);
|
|
|
+ .Run(ProcessStep.PreparePressure, PreparePressure, IsPressureReady)
|
|
|
+ .Run(ProcessStep.PrepareTemperature, PrepareTemp, IsTempReady)
|
|
|
+ .RunIf(ProcessStep.RunChuckRecipe, needchuck, StartChuckRecipe, CheckRecipeDone, 5 * 60 * 60 * 1000)
|
|
|
+ .RunIf(ProcessStep.RunProcessRecipe, needprocess, StartProcessRecipe, CheckRecipeDone, 5 * 60 * 60 * 1000)
|
|
|
+ .RunIf(ProcessStep.RunDechuckRecipe, needdechuck, StartDechuckRecipe, CheckRecipeDone, 5 * 60 * 60 * 1000)
|
|
|
+ .RunIf(ProcessStep.RunCleanRecipe, needclean, StartCleanRecipe, CheckRecipeDone, 5 * 60 * 60 * 1000)
|
|
|
+ .End(ProcessStep.End, ProcessDone, _delay_1s);
|
|
|
|
|
|
return Runner.Status;
|
|
|
}
|
|
@@ -408,25 +412,29 @@ namespace Venus_RT.Modules.PMs
|
|
|
|
|
|
ProcessDataRecorder.StepStart(RecipeId, _currentRecipe.Steps[_currentStep].StepNo, $"{Module}:{_currentRecipe.Header.Name}:{_currentRecipe.Steps[_currentStep].Description}", _currentRecipe.Steps[_currentStep].Time);
|
|
|
_stepTime.Restart();
|
|
|
- switch (_jetChamber)
|
|
|
+ if (_recipeType == RecipeType.Process)
|
|
|
{
|
|
|
- case JetChamber.Kepler2200A:
|
|
|
- var kepler2200AGasSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[1] as Kepler2200GasControlUnit;
|
|
|
- var kepler2200ARFSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[3] as TCPUnit;
|
|
|
- _fdc.Start(kepler2200AGasSetPoints.Gas1, kepler2200AGasSetPoints.Gas2, kepler2200AGasSetPoints.Gas3, kepler2200AGasSetPoints.Gas4, kepler2200AGasSetPoints.Gas5, kepler2200AGasSetPoints.Gas6, kepler2200ARFSetPoints.RFPower);
|
|
|
- break;
|
|
|
- case JetChamber.Kepler2200B:
|
|
|
- var kepler2200BGasSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[1] as Kepler2200GasControlUnit;
|
|
|
- var kepler2200BRFSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[4] as TCPUnit;
|
|
|
- _fdc.Start(kepler2200BGasSetPoints.Gas1, kepler2200BGasSetPoints.Gas2, kepler2200BGasSetPoints.Gas3, kepler2200BGasSetPoints.Gas4, kepler2200BGasSetPoints.Gas5, kepler2200BGasSetPoints.Gas6, kepler2200BRFSetPoints.RFPower);
|
|
|
- break;
|
|
|
- case JetChamber.Kepler2300:
|
|
|
- var kepler2300GasSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[3] as GasControlUnit;
|
|
|
- var kepler2300RFSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[1] as TCPUnit;
|
|
|
- var kepler2300BiasRFSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[2] as BiasUnit;
|
|
|
+ switch (_jetChamber)
|
|
|
+ {
|
|
|
+ case JetChamber.Kepler2200A:
|
|
|
+ var kepler2200AGasSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[1] as Kepler2200GasControlUnit;
|
|
|
+ var kepler2200ARFSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[3] as TCPUnit;
|
|
|
+ _fdc.Start(kepler2200AGasSetPoints.Gas1, kepler2200AGasSetPoints.Gas2, kepler2200AGasSetPoints.Gas3, kepler2200AGasSetPoints.Gas4, kepler2200AGasSetPoints.Gas5, kepler2200AGasSetPoints.Gas6, kepler2200ARFSetPoints.RFPower);
|
|
|
+ break;
|
|
|
+ case JetChamber.Kepler2200B:
|
|
|
+ var kepler2200BGasSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[1] as Kepler2200GasControlUnit;
|
|
|
+ var kepler2200BRFSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[4] as TCPUnit;
|
|
|
+ _fdc.Start(kepler2200BGasSetPoints.Gas1, kepler2200BGasSetPoints.Gas2, kepler2200BGasSetPoints.Gas3, kepler2200BGasSetPoints.Gas4, kepler2200BGasSetPoints.Gas5, kepler2200BGasSetPoints.Gas6, kepler2200BRFSetPoints.RFPower);
|
|
|
+ break;
|
|
|
+ case JetChamber.Kepler2300:
|
|
|
+ var kepler2300GasSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[3] as GasControlUnit;
|
|
|
+ var kepler2300RFSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[1] as TCPUnit;
|
|
|
+ var kepler2300BiasRFSetPoints = _currentRecipe.Steps[_currentStep].LstUnit[2] as BiasUnit;
|
|
|
+
|
|
|
+ _fdc.Start(kepler2300GasSetPoints.Gas1, kepler2300GasSetPoints.Gas2, kepler2300GasSetPoints.Gas3, kepler2300GasSetPoints.Gas4, kepler2300GasSetPoints.Gas5, kepler2300GasSetPoints.Gas6, kepler2300GasSetPoints.Gas7, kepler2300GasSetPoints.Gas8, kepler2300RFSetPoints.RFPower, kepler2300BiasRFSetPoints.BiasRFPower);
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
- _fdc.Start(kepler2300GasSetPoints.Gas1, kepler2300GasSetPoints.Gas2, kepler2300GasSetPoints.Gas3, kepler2300GasSetPoints.Gas4, kepler2300GasSetPoints.Gas5, kepler2300GasSetPoints.Gas6, kepler2300GasSetPoints.Gas7, kepler2300GasSetPoints.Gas8,kepler2300RFSetPoints.RFPower,kepler2300BiasRFSetPoints.BiasRFPower);
|
|
|
- break;
|
|
|
}
|
|
|
var state = _currentRecipe.Steps[_currentStep].Start();
|
|
|
LOG.Write(eEvent.INFO_PROCESS, Module, $"Recipe:{CurrentRunningRecipe} Step{_currentStep + 1} Start");
|
|
@@ -505,10 +513,10 @@ namespace Venus_RT.Modules.PMs
|
|
|
switch (step.Type)
|
|
|
{
|
|
|
case StepType.Time:
|
|
|
- currentRecipeResult.RecipeStepSetTime = step.Time;
|
|
|
+ currentRecipeResult.RecipeStepSetTime = step.Time;
|
|
|
break;
|
|
|
case StepType.OverEtch:
|
|
|
- currentRecipeResult.RecipeStepSetTime = (int)_processHelper.lastEPDStepTime / 1000 ;
|
|
|
+ currentRecipeResult.RecipeStepSetTime = (int)_processHelper.lastEPDStepTime / 1000;
|
|
|
break;
|
|
|
default:
|
|
|
currentRecipeResult.RecipeStepSetTime = null;
|
|
@@ -562,7 +570,10 @@ namespace Venus_RT.Modules.PMs
|
|
|
_currentStep++;
|
|
|
LOG.Write(eEvent.INFO_PROCESS, Module, $"Recipe:{CurrentRunningRecipe} Step{_currentStep} End");
|
|
|
ProcessDataRecorder.StepStart(RecipeId, _currentRecipe.Steps[_currentStep].StepNo, $"{Module}:{_currentRecipe.Header.Name}:{_currentRecipe.Steps[_currentStep].Description}", _currentRecipe.Steps[_currentStep].Time);
|
|
|
- ProcessDataRecorder.StepEnd(RecipeId, _currentRecipe.Steps[_currentStep].StepNo-1, _fdc.DataList);
|
|
|
+ if (_recipeType == RecipeType.Process)
|
|
|
+ {
|
|
|
+ ProcessDataRecorder.StepEnd(RecipeId, _currentRecipe.Steps[_currentStep].StepNo - 1, _fdc.DataList);
|
|
|
+ }
|
|
|
_faCallback.RecipeStepEnd(Module.ToString(), CurrentRunningRecipe, _currentStep);
|
|
|
return StartNewStep() != RState.Running;
|
|
|
}
|
|
@@ -609,15 +620,18 @@ namespace Venus_RT.Modules.PMs
|
|
|
ProcessDataRecorder.RecordPrecess(RecipeId, RecipeStartTime, RecipeEndTime, _currentRecipe.Header.Name, result, WaferId, _chamber.Name, LotID, SlotID, _currentRecipe.Header.Type.ToString());
|
|
|
break;
|
|
|
}
|
|
|
- ProcessDataRecorder.StepEnd(RecipeId, _currentRecipe.Steps[_currentStep].StepNo, _fdc.DataList);
|
|
|
- _fdc.Stop();
|
|
|
+ if (_recipeType == RecipeType.Process)
|
|
|
+ {
|
|
|
+ ProcessDataRecorder.StepEnd(RecipeId, _currentRecipe.Steps[_currentStep].StepNo, _fdc.DataList);
|
|
|
+ _fdc.Stop();
|
|
|
+ }
|
|
|
}
|
|
|
private bool ProcessDone()
|
|
|
{
|
|
|
_currentRecipe.Steps[_currentStep].End();
|
|
|
|
|
|
_faCallback.RecipeComplete(Module.ToString(), CurrentRunningRecipe);
|
|
|
- RecipeFileManager.Instance.SaveRecipe(Module.ToString(), _currentRecipe.Header.Type.ToString(), _currentRecipe.Header.Name, RecipeUnity.RecipeToString(_currentRecipe),false,false);
|
|
|
+ RecipeFileManager.Instance.SaveRecipe(Module.ToString(), _currentRecipe.Header.Type.ToString(), _currentRecipe.Header.Name, RecipeUnity.RecipeToString(_currentRecipe), false, false);
|
|
|
_stepTime.Stop();
|
|
|
WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Idle);
|
|
|
WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Completed);
|
|
@@ -675,7 +689,7 @@ namespace Venus_RT.Modules.PMs
|
|
|
_chamber.OpenValve(ValveType.TurboPumpPumping, true);
|
|
|
_chamber.OpenValve(ValveType.TurboPumpPurge, true);
|
|
|
|
|
|
- if ( _chamber.ChamberType == JetChamber.VenusSE)
|
|
|
+ if (_chamber.ChamberType == JetChamber.VenusSE)
|
|
|
{
|
|
|
await Task.Delay(3000);
|
|
|
_chamber.OnOffSetESCHV(false);
|