|
@@ -6,6 +6,7 @@ using Aitex.Core.RT.Log;
|
|
|
using Venus_Core;
|
|
|
using Aitex.Core.RT.SCCore;
|
|
|
using Aitex.Core.RT.Tolerance;
|
|
|
+using System.Diagnostics;
|
|
|
//#pragma warning disable 0436
|
|
|
|
|
|
namespace Venus_RT.Modules.PMs
|
|
@@ -40,6 +41,10 @@ namespace Venus_RT.Modules.PMs
|
|
|
private RecipeToleranceChecker _GasFlowToleranceChecker;
|
|
|
private RecipeToleranceChecker _RFToleranceChecker;
|
|
|
private RecipeToleranceChecker _BiasRFToleranceChecker;
|
|
|
+ private RecipeToleranceChecker _HeliumToleranceChecker;
|
|
|
+ private RecipeToleranceChecker _PressureToleranceChecker;
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|
|
|
private bool _isEnableMatchC1C2Offset;
|
|
@@ -47,7 +52,8 @@ namespace Venus_RT.Modules.PMs
|
|
|
private bool _isEnableBiasMatchC1C2Offset;
|
|
|
private int _biasMatchC1C2OffsetValue;
|
|
|
|
|
|
-
|
|
|
+ private bool _isInstalledEPD;
|
|
|
+ private Stopwatch _lastEPDStepTimeStopwatch;
|
|
|
public ProcessHelper(JetPMBase pm)
|
|
|
{
|
|
|
Chamber = pm;
|
|
@@ -56,6 +62,18 @@ namespace Venus_RT.Modules.PMs
|
|
|
_GasFlowToleranceChecker = new RecipeToleranceChecker(Module);
|
|
|
_RFToleranceChecker = new RecipeToleranceChecker(Module);
|
|
|
_BiasRFToleranceChecker = new RecipeToleranceChecker(Module);
|
|
|
+ _HeliumToleranceChecker = new RecipeToleranceChecker(Module);
|
|
|
+ _PressureToleranceChecker = new RecipeToleranceChecker(Module);
|
|
|
+
|
|
|
+ if (Chamber.ChamberType == JetChamber.Kepler2300 || Chamber.ChamberType == JetChamber.VenusSE || Chamber.ChamberType == JetChamber.VenusDE)
|
|
|
+ {
|
|
|
+ _isInstalledEPD = SC.GetValue<bool>($"{Module}.EPD.IsEnabled");
|
|
|
+ }
|
|
|
+ if (_isInstalledEPD)
|
|
|
+ {
|
|
|
+ _lastEPDStepTimeStopwatch = new Stopwatch();
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private void Init()
|
|
@@ -88,9 +106,9 @@ namespace Venus_RT.Modules.PMs
|
|
|
checkerHelper[$"{Module}.ESCHVUnit"] = (ProcessUnitBase unit, RecipeStep step) => ESCHVUnit_Check(unit, step);
|
|
|
endHelper[$"{Module}.ESCHVUnit"] = (ProcessUnitBase unit, RecipeStep step) => ESCHVUnit_End(unit, step);
|
|
|
|
|
|
- startHelper[$"{Module}.SEESCHVUnit"] = (ProcessUnitBase unit, RecipeStep step) => SEESCHVUnit_Start(unit, step);
|
|
|
- checkerHelper[$"{Module}.SEESCHVUnit"] = (ProcessUnitBase unit, RecipeStep step) => SEESCHVUnit_Check(unit, step);
|
|
|
- endHelper[$"{Module}.SEESCHVUnit"] = (ProcessUnitBase unit, RecipeStep step) => SEESCHVUnit_End(unit, step);
|
|
|
+ //startHelper[$"{Module}.SEESCHVUnit"] = (ProcessUnitBase unit, RecipeStep step) => SEESCHVUnit_Start(unit, step);
|
|
|
+ //checkerHelper[$"{Module}.SEESCHVUnit"] = (ProcessUnitBase unit, RecipeStep step) => SEESCHVUnit_Check(unit, step);
|
|
|
+ //endHelper[$"{Module}.SEESCHVUnit"] = (ProcessUnitBase unit, RecipeStep step) => SEESCHVUnit_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);
|
|
@@ -112,7 +130,14 @@ namespace Venus_RT.Modules.PMs
|
|
|
private RState PressureByPressureModeUnit_Start(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
var ProcessUnit = unit as PressureByPressureModeUnit;
|
|
|
+ List<ToleranceObject> toleranceObjects = new List<ToleranceObject>();
|
|
|
|
|
|
+ if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
+ {
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Pressure", ProcessUnit.StartValue, ProcessUnit.StartValueWarningRange, ProcessUnit.StartValueAlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+
|
|
|
+ _PressureToleranceChecker.Start(toleranceObjects);
|
|
|
+ }
|
|
|
if (ProcessUnit.PressureUnitMode == PressureUnitMode.Pressure)
|
|
|
{
|
|
|
if (Chamber.SetPVPressure(ProcessUnit.StartValue))
|
|
@@ -151,20 +176,13 @@ namespace Venus_RT.Modules.PMs
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (ProcessUnit.PressureUnitMode == PressureUnitMode.Pressure)
|
|
|
+ if (ProcessUnit.PressureUnitMode == PressureUnitMode.Pressure && ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
{
|
|
|
- if (step.Type == StepType.Stable && Chamber.ChamberPressure == ProcessUnit.StartValue)
|
|
|
- {
|
|
|
- return RState.End;
|
|
|
- }
|
|
|
+ return _PressureToleranceChecker.Monitor(Chamber.PendulumPressure);
|
|
|
}
|
|
|
- else if (ProcessUnit.PressureUnitMode == PressureUnitMode.Valve)
|
|
|
+ else if (ProcessUnit.PressureUnitMode == PressureUnitMode.Valve && ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
{
|
|
|
- if (step.Type == StepType.Stable && Chamber.GetPVPosition() == ProcessUnit.StartValue)
|
|
|
- {
|
|
|
- return RState.End;
|
|
|
- }
|
|
|
-
|
|
|
+ return _PressureToleranceChecker.Monitor(Chamber.PendulumPosition);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -173,7 +191,11 @@ namespace Venus_RT.Modules.PMs
|
|
|
|
|
|
private void PressureByPressureModeUnit_End(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
-
|
|
|
+ var ProcessUnit = unit as PressureByPressureModeUnit;
|
|
|
+ if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
+ {
|
|
|
+ _PressureToleranceChecker.End();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -266,7 +288,7 @@ namespace Venus_RT.Modules.PMs
|
|
|
}
|
|
|
if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
{
|
|
|
- _RFToleranceChecker.Monitor(Chamber.ForwardPower);
|
|
|
+ return _RFToleranceChecker.Monitor(Chamber.ForwardPower);
|
|
|
}
|
|
|
|
|
|
return RState.Running;
|
|
@@ -463,7 +485,6 @@ namespace Venus_RT.Modules.PMs
|
|
|
|
|
|
private RState GasControlUnit_Start(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
- List<ToleranceObject> toleranceObjects = new List<ToleranceObject>();
|
|
|
Chamber.OpenValve(ValveType.GasFinal, true);
|
|
|
var ProcessUnit = unit as GasControlUnit;
|
|
|
|
|
@@ -541,6 +562,7 @@ namespace Venus_RT.Modules.PMs
|
|
|
|
|
|
if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
{
|
|
|
+ List<ToleranceObject> toleranceObjects = new List<ToleranceObject>();
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas1", ProcessUnit.Gas1, ProcessUnit.Gas1WarningRange, ProcessUnit.Gas1AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas2", ProcessUnit.Gas2, ProcessUnit.Gas2WarningRange, ProcessUnit.Gas2AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas3", ProcessUnit.Gas3, ProcessUnit.Gas3WarningRange, ProcessUnit.Gas3AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
@@ -549,10 +571,6 @@ namespace Venus_RT.Modules.PMs
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas6", ProcessUnit.Gas6, ProcessUnit.Gas6WarningRange, ProcessUnit.Gas6AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas7", ProcessUnit.Gas7, ProcessUnit.Gas7WarningRange, ProcessUnit.Gas7AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas8", ProcessUnit.Gas8, ProcessUnit.Gas8WarningRange, ProcessUnit.Gas8AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
- }
|
|
|
-
|
|
|
- if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
- {
|
|
|
_GasFlowToleranceChecker.Start(toleranceObjects);
|
|
|
}
|
|
|
return RState.Running;
|
|
@@ -575,7 +593,7 @@ namespace Venus_RT.Modules.PMs
|
|
|
}
|
|
|
if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
{
|
|
|
- _GasFlowToleranceChecker.Monitor(Chamber.MFC1FeedBack, Chamber.MFC2FeedBack, Chamber.MFC3FeedBack, Chamber.MFC4FeedBack, Chamber.MFC5FeedBack, Chamber.MFC6FeedBack, Chamber.MFC7FeedBack, Chamber.MFC8FeedBack);
|
|
|
+ return _GasFlowToleranceChecker.Monitor(Chamber.MFC1FeedBack, Chamber.MFC2FeedBack, Chamber.MFC3FeedBack, Chamber.MFC4FeedBack, Chamber.MFC5FeedBack, Chamber.MFC6FeedBack, Chamber.MFC7FeedBack, Chamber.MFC8FeedBack);
|
|
|
}
|
|
|
return RState.Running;
|
|
|
}
|
|
@@ -655,11 +673,6 @@ namespace Venus_RT.Modules.PMs
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas4", ProcessUnit.Gas4, ProcessUnit.Gas4WarningRange, ProcessUnit.Gas4AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas5", ProcessUnit.Gas5, ProcessUnit.Gas5WarningRange, ProcessUnit.Gas5AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
toleranceObjects.Add(new ToleranceObject("Gas6", ProcessUnit.Gas6, ProcessUnit.Gas6WarningRange, ProcessUnit.Gas6AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
- {
|
|
|
_GasFlowToleranceChecker.Start(toleranceObjects);
|
|
|
}
|
|
|
return RState.Running;
|
|
@@ -670,7 +683,7 @@ namespace Venus_RT.Modules.PMs
|
|
|
var ProcessUnit = unit as Kepler2200GasControlUnit;
|
|
|
if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
{
|
|
|
- _GasFlowToleranceChecker.Monitor(Chamber.MFC1FeedBack, Chamber.MFC2FeedBack, Chamber.MFC3FeedBack, Chamber.MFC4FeedBack, Chamber.MFC5FeedBack, Chamber.MFC6FeedBack);
|
|
|
+ return _GasFlowToleranceChecker.Monitor(Chamber.MFC1FeedBack, Chamber.MFC2FeedBack, Chamber.MFC3FeedBack, Chamber.MFC4FeedBack, Chamber.MFC5FeedBack, Chamber.MFC6FeedBack);
|
|
|
}
|
|
|
return RState.Running;
|
|
|
}
|
|
@@ -747,11 +760,36 @@ namespace Venus_RT.Modules.PMs
|
|
|
{
|
|
|
Chamber.OpenValve(ValveType.PVC1, true);
|
|
|
}
|
|
|
+
|
|
|
+ if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
+ {
|
|
|
+ List<ToleranceObject> toleranceObjects = new List<ToleranceObject>();
|
|
|
+
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas1", ProcessUnit.Gas1, ProcessUnit.Gas1WarningRange, ProcessUnit.Gas1AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas2", ProcessUnit.Gas2, ProcessUnit.Gas2WarningRange, ProcessUnit.Gas2AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas3", ProcessUnit.Gas3, ProcessUnit.Gas3WarningRange, ProcessUnit.Gas3AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas4", ProcessUnit.Gas4, ProcessUnit.Gas4WarningRange, ProcessUnit.Gas4AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas5", ProcessUnit.Gas5, ProcessUnit.Gas5WarningRange, ProcessUnit.Gas5AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas6", ProcessUnit.Gas6, ProcessUnit.Gas6WarningRange, ProcessUnit.Gas6AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas7", ProcessUnit.Gas7, ProcessUnit.Gas7WarningRange, ProcessUnit.Gas7AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas8", ProcessUnit.Gas8, ProcessUnit.Gas8WarningRange, ProcessUnit.Gas8AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas9", ProcessUnit.Gas9, ProcessUnit.Gas9WarningRange, ProcessUnit.Gas9AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas10", ProcessUnit.Gas10, ProcessUnit.Gas10WarningRange, ProcessUnit.Gas10AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas11", ProcessUnit.Gas11, ProcessUnit.Gas11WarningRange, ProcessUnit.Gas11AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ toleranceObjects.Add(new ToleranceObject("Gas12", ProcessUnit.Gas12, ProcessUnit.Gas12WarningRange, ProcessUnit.Gas12AlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+
|
|
|
+ _GasFlowToleranceChecker.Start(toleranceObjects);
|
|
|
+ }
|
|
|
return RState.Running;
|
|
|
}
|
|
|
|
|
|
private RState VenusSEGasControlUnit_Check(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
+ var ProcessUnit = unit as VenusSEGasControlUnit;
|
|
|
+ if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
+ {
|
|
|
+ return _GasFlowToleranceChecker.Monitor(Chamber.MFC1FeedBack, Chamber.MFC2FeedBack, Chamber.MFC3FeedBack, Chamber.MFC4FeedBack, Chamber.MFC5FeedBack, Chamber.MFC6FeedBack, Chamber.MFC7FeedBack, Chamber.MFC8FeedBack, Chamber.MFC9FeedBack, Chamber.MFC10FeedBack, Chamber.MFC11FeedBack, Chamber.MFC12FeedBack);
|
|
|
+ }
|
|
|
return RState.Running;
|
|
|
}
|
|
|
|
|
@@ -770,65 +808,60 @@ namespace Venus_RT.Modules.PMs
|
|
|
Chamber.FlowGas(10, 0);
|
|
|
Chamber.FlowGas(11, 0);
|
|
|
Chamber.FlowGas(12, 0);
|
|
|
+ var ProcessUnit = unit as VenusSEGasControlUnit;
|
|
|
+ if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
+ {
|
|
|
+ _GasFlowToleranceChecker.End();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private RState ESCHVUnit_Start(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
var ProcessUnit = unit as ESCHVUnit;
|
|
|
|
|
|
- Chamber.SetESCClampVoltage(ProcessUnit.ESCClampValtage);
|
|
|
+ if (ProcessUnit.ESCClampValtage > 0)
|
|
|
+ {
|
|
|
+ Chamber.SetESCClampVoltage(ProcessUnit.ESCClampValtage);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Chamber.SetESCClampVoltage(0);
|
|
|
+ }
|
|
|
+ Chamber.SetBacksideHePressure(ProcessUnit.BacksideHelium);
|
|
|
|
|
|
- Chamber.SetBacksideHePressure(ProcessUnit.BacksideHelum);
|
|
|
- Chamber.SetBacksideHeThreshold(ProcessUnit.MinHeFlow, ProcessUnit.MaxHeFlow);
|
|
|
+ List<ToleranceObject> toleranceObjects = new List<ToleranceObject>();
|
|
|
+ if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
+ {
|
|
|
+ toleranceObjects.Add(new ToleranceObject("BacksideHelium", ProcessUnit.BacksideHelium, ProcessUnit.HeliumWarningRange, ProcessUnit.HeliumAlarmRange, ProcessUnit.ToleranceDelayTime, ProcessUnit.ToleranceMode));
|
|
|
+ _HeliumToleranceChecker.Start(toleranceObjects);
|
|
|
+ }
|
|
|
return RState.Running;
|
|
|
}
|
|
|
-
|
|
|
private RState ESCHVUnit_Check(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
var ProcessUnit = unit as ESCHVUnit;
|
|
|
- if (Chamber.BackSideHeOutOfRange && step.ElapsedTime() > ProcessUnit.CheckDelay)
|
|
|
+ //if (Chamber.BackSideHeOutOfRange && step.ElapsedTime() > ProcessUnit.CheckDelay)
|
|
|
+ //{
|
|
|
+ // LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} failed, Backside Helium out of range.");
|
|
|
+ // return RState.Failed;
|
|
|
+ //}
|
|
|
+ if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
{
|
|
|
- LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} failed, Backside Helium out of range.");
|
|
|
- return RState.Failed;
|
|
|
+ return _HeliumToleranceChecker.Monitor(Chamber.HeliumFeedBack);
|
|
|
}
|
|
|
-
|
|
|
return RState.Running;
|
|
|
}
|
|
|
-
|
|
|
- private void SEESCHVUnit_End(ProcessUnitBase unit, RecipeStep step)
|
|
|
+ private void ESCHVUnit_End(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
//Chamber.SetESCClampVoltage(0);
|
|
|
- Chamber.SESetBacksideHeThreshold(0, 0);
|
|
|
- }
|
|
|
-
|
|
|
- private RState SEESCHVUnit_Start(ProcessUnitBase unit, RecipeStep step)
|
|
|
- {
|
|
|
- var ProcessUnit = unit as SEESCHVUnit;
|
|
|
-
|
|
|
- Chamber.SetESCClampVoltage(ProcessUnit.ESCClampValtage);
|
|
|
-
|
|
|
- Chamber.SetBacksideHePressure(ProcessUnit.BacksideHelum);
|
|
|
- Chamber.SESetBacksideHeThreshold(ProcessUnit.MinHeFlow, ProcessUnit.MaxHeFlow);
|
|
|
- return RState.Running;
|
|
|
- }
|
|
|
-
|
|
|
- private RState SEESCHVUnit_Check(ProcessUnitBase unit, RecipeStep step)
|
|
|
- {
|
|
|
- var ProcessUnit = unit as SEESCHVUnit;
|
|
|
- if (Chamber.BackSideHeOutOfRange && step.ElapsedTime() > ProcessUnit.CheckDelay_ms)
|
|
|
+ //Chamber.SetBacksideHeThreshold(0, 0);
|
|
|
+ var ProcessUnit = unit as ESCHVUnit;
|
|
|
+ if (ProcessUnit.ToleranceMode != ToleranceMode.None)
|
|
|
{
|
|
|
- LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} failed, Backside Helium out of range.");
|
|
|
- return RState.Failed;
|
|
|
+ _HeliumToleranceChecker.End();
|
|
|
}
|
|
|
-
|
|
|
- return RState.Running;
|
|
|
}
|
|
|
|
|
|
- private void ESCHVUnit_End(ProcessUnitBase unit, RecipeStep step)
|
|
|
- {
|
|
|
- Chamber.SetESCClampVoltage(0);
|
|
|
- Chamber.SetBacksideHeThreshold(0, 0);
|
|
|
- }
|
|
|
private RState ProcessKitUnit_Start(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
var ProcessUnit = unit as ProcessKitUnit;
|
|
@@ -853,8 +886,6 @@ namespace Venus_RT.Modules.PMs
|
|
|
{
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
private RState RFBoxUnit_Start(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
var ProcessUnit = unit as RFBoxUnit;
|
|
@@ -924,7 +955,15 @@ namespace Venus_RT.Modules.PMs
|
|
|
// Chamber.EPDStepStart(step.EPDConfig, step.StepNo);
|
|
|
// break;
|
|
|
//}
|
|
|
- Chamber.EPDStepStart(step.EPDConfig, step.StepNo);
|
|
|
+ if (_isInstalledEPD)
|
|
|
+ {
|
|
|
+ Chamber.EPDStepStart(step.EPDConfig, step.StepNo);
|
|
|
+
|
|
|
+ if (step.Type == StepType.EndPoint)
|
|
|
+ {
|
|
|
+ _lastEPDStepTimeStopwatch.Restart();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
return RState.Running;
|
|
|
}
|
|
@@ -936,17 +975,49 @@ namespace Venus_RT.Modules.PMs
|
|
|
case StepType.Time:
|
|
|
return step.ElapsedTime() >= step.Time * 1000 ? RState.End : RState.Running;
|
|
|
case StepType.OverEtch:
|
|
|
- return step.ElapsedTime() >= (step.GetLastEPDStepTime() * step.OverEtchPercent / 100) ? RState.End : RState.Running;
|
|
|
+ var time = _lastEPDStepTimeStopwatch.ElapsedMilliseconds;
|
|
|
+ return step.ElapsedTime() >= (time * step.OverEtchPercent / 100) ? RState.End : RState.Running;
|
|
|
case StepType.EndPoint:
|
|
|
if (step.ElapsedTime() > step.MaxEndPointTime * 1000)
|
|
|
{
|
|
|
- LOG.Write(eEvent.INFO_PROCESS, Chamber.Module, $"Step:{step.StepNo} timeout, did not capture endpoint signal in {step.MaxEndPointTime} seconds");
|
|
|
- return RState.End;
|
|
|
+ LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} timeout, did not capture endpoint signal in {step.MaxEndPointTime} seconds");
|
|
|
+ return RState.Failed;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Chamber.EPDCaptured ? RState.End : RState.Running;
|
|
|
+ if (Chamber.EPDCaptured)
|
|
|
+ {
|
|
|
+ if (step.ElapsedTime() < step.MinEndPointTime * 1000)
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} timeout, capture endpoint signal less than {step.MinEndPointTime} seconds");
|
|
|
+ return RState.Failed;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return RState.End;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return RState.Running;
|
|
|
+ }
|
|
|
+ //return Chamber.EPDCaptured ? RState.End : RState.Running;
|
|
|
}
|
|
|
+ case StepType.Stable:
|
|
|
+ if (step.ElapsedTime() >= step.Time * 1000)
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} timeout, did not Stable in {step.Time} seconds");
|
|
|
+
|
|
|
+ return RState.Failed;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (_GasFlowToleranceChecker.IsStable && _PressureToleranceChecker.IsStable && _HeliumToleranceChecker.IsStable)
|
|
|
+ {
|
|
|
+ return RState.End;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return RState.Running;
|
|
|
}
|
|
|
|
|
|
return RState.Running;
|
|
@@ -954,10 +1025,20 @@ namespace Venus_RT.Modules.PMs
|
|
|
|
|
|
private RState stepEnder(RecipeStep step)
|
|
|
{
|
|
|
- if (step.Type == StepType.EndPoint)
|
|
|
+ //if (step.Type == StepType.EndPoint)
|
|
|
+ //{
|
|
|
+ // Chamber.EPDStepStop();
|
|
|
+ //}
|
|
|
+
|
|
|
+ if (_isInstalledEPD)
|
|
|
{
|
|
|
Chamber.EPDStepStop();
|
|
|
+ if (step.Type == StepType.EndPoint)
|
|
|
+ {
|
|
|
+ _lastEPDStepTimeStopwatch.Stop();
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
return RState.End;
|
|
|
}
|
|
|
|