|
@@ -297,19 +297,47 @@ namespace Venus_RT.Modules.PMs
|
|
|
//}
|
|
|
_faCallback.RecipeStart(_chamber.Module.ToString(), recipeName);
|
|
|
WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.InProcess);
|
|
|
- _fdc.Reset();
|
|
|
+ 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");
|
|
|
+ _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;
|
|
|
}
|
|
@@ -378,7 +406,26 @@ 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)
|
|
|
+ {
|
|
|
+ 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;
|
|
|
+ }
|
|
|
var state = _currentRecipe.Steps[_currentStep].Start();
|
|
|
LOG.Write(eEvent.INFO_PROCESS, Module, $"Recipe:{CurrentRunningRecipe} Step{_currentStep + 1} Start");
|
|
|
_faCallback.RecipeStepStart(Module.ToString(), CurrentRunningRecipe, _currentStep);
|
|
@@ -513,7 +560,7 @@ 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, _fdc.DataList);
|
|
|
+ ProcessDataRecorder.StepEnd(RecipeId, _currentRecipe.Steps[_currentStep].StepNo-1, _fdc.DataList);
|
|
|
_faCallback.RecipeStepEnd(Module.ToString(), CurrentRunningRecipe, _currentStep);
|
|
|
return StartNewStep() != RState.Running;
|
|
|
}
|
|
@@ -560,11 +607,13 @@ 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();
|
|
|
}
|
|
|
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);
|
|
|
_stepTime.Stop();
|