|
@@ -22,6 +22,13 @@ namespace Venus_RT.Modules.PMs
|
|
|
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 List<float> rfMatchC1 = new List<float>();
|
|
|
+ private List<float> rfMatchC2 = new List<float>();
|
|
|
+ private int rfMatchC1C2Index = 0;
|
|
|
+
|
|
|
+ private List<float> biasRfMatchC1 = new List<float>();
|
|
|
+ private List<float> biasRfMatchC2 = new List<float>();
|
|
|
+ private int biasRfMatchC1C2Index = 0;
|
|
|
|
|
|
public ProcessHelper(JetPMBase pm)
|
|
|
{
|
|
@@ -173,8 +180,28 @@ namespace Venus_RT.Modules.PMs
|
|
|
Chamber.GeneratorSetpower(0);
|
|
|
Chamber.GeneratorPowerOn(false);
|
|
|
}
|
|
|
- Chamber.SetMatchPosition(ProcessUnit.TuneCapPreset, ProcessUnit.LoadCapPreset);
|
|
|
-
|
|
|
+ int p1;
|
|
|
+ int p2;
|
|
|
+ if (ProcessUnit.TuneCapPreset > 0)
|
|
|
+ {
|
|
|
+ p1 = ProcessUnit.TuneCapPreset;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ p1 = ProcessUnit.AutoC1;
|
|
|
+ }
|
|
|
+ if (ProcessUnit.LoadCapPreset > 0)
|
|
|
+ {
|
|
|
+ p2 = ProcessUnit.LoadCapPreset;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ p2 = ProcessUnit.AutoC2;
|
|
|
+ }
|
|
|
+ Chamber.SetMatchPosition(p1, p2);
|
|
|
+ rfMatchC1.Clear();
|
|
|
+ rfMatchC1.Clear();
|
|
|
+ rfMatchC1C2Index = 0;
|
|
|
return RState.Running;
|
|
|
}
|
|
|
|
|
@@ -194,13 +221,44 @@ namespace Venus_RT.Modules.PMs
|
|
|
Chamber.GeneratorPowerOn(false);
|
|
|
}
|
|
|
|
|
|
- return RState.Running;
|
|
|
+ if (step.ElapsedTime() > rfMatchC1C2Index * 1000)
|
|
|
+ {
|
|
|
+ rfMatchC1.Add(Chamber.RFMatchC1);
|
|
|
+ rfMatchC2.Add(Chamber.RFMatchC2);
|
|
|
+ rfMatchC1C2Index += 1;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return RState.Running;
|
|
|
}
|
|
|
|
|
|
private void TCPUnit_End(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
- //Chamber.GeneratorSetpower(0);
|
|
|
- //Chamber.GeneratorPowerOn(false);
|
|
|
+ var ProcessUnit = unit as TCPUnit;
|
|
|
+ if (rfMatchC1.Count >=6)
|
|
|
+ {
|
|
|
+ float allValue = 0;
|
|
|
+ for (int i = 4; i < rfMatchC1.Count; i++)
|
|
|
+ {
|
|
|
+ allValue += rfMatchC1[i];
|
|
|
+ }
|
|
|
+ var average=allValue/ (rfMatchC1.Count-4);
|
|
|
+ ProcessUnit.AutoC1 = (int)average;
|
|
|
+ }
|
|
|
+ if (rfMatchC2.Count >= 6)
|
|
|
+ {
|
|
|
+ float allValue = 0;
|
|
|
+ for (int i = 4; i < rfMatchC2.Count; i++)
|
|
|
+ {
|
|
|
+ allValue += rfMatchC2[i];
|
|
|
+ }
|
|
|
+ var average = allValue / (rfMatchC2.Count - 4);
|
|
|
+ ProcessUnit.AutoC2 = (int)average;
|
|
|
+ }
|
|
|
+
|
|
|
+ rfMatchC1.Clear();
|
|
|
+ rfMatchC2.Clear();
|
|
|
+ rfMatchC1C2Index = 0;
|
|
|
}
|
|
|
|
|
|
private RState BiasUnit_Start(ProcessUnitBase unit, RecipeStep step)
|
|
@@ -211,14 +269,34 @@ namespace Venus_RT.Modules.PMs
|
|
|
Chamber.GeneratorBiasSetpower(ProcessUnit.BiasRFPower);
|
|
|
Chamber.GeneratorBiasPowerOn(true);
|
|
|
}
|
|
|
-
|
|
|
- Chamber.SetBiasMatchPosition(ProcessUnit.BiasTuneCapPreset, ProcessUnit.BiasLoadCapPreset);
|
|
|
+ int p1;
|
|
|
+ int p2;
|
|
|
+ if (ProcessUnit.BiasTuneCapPreset > 0)
|
|
|
+ {
|
|
|
+ p1 = ProcessUnit.BiasTuneCapPreset;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ p1 = ProcessUnit.AutoC1;
|
|
|
+ }
|
|
|
+ if (ProcessUnit.BiasLoadCapPreset > 0)
|
|
|
+ {
|
|
|
+ p2 = ProcessUnit.BiasLoadCapPreset;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ p2 = ProcessUnit.AutoC2;
|
|
|
+ }
|
|
|
+ Chamber.SetBiasMatchPosition(p1, p2);
|
|
|
if(ProcessUnit.BiasGeneratorMode == GeneratorMode.Pulsing)
|
|
|
{
|
|
|
Chamber.SetBiasPulseMode(true);
|
|
|
Chamber.SetBiasPulseRateFreq(ProcessUnit.PulseRateFreq);
|
|
|
Chamber.SetDiasPulseDutyCycle(ProcessUnit.PulseDutyCycle);
|
|
|
}
|
|
|
+ biasRfMatchC1.Clear();
|
|
|
+ biasRfMatchC1.Clear();
|
|
|
+ biasRfMatchC1C2Index = 0;
|
|
|
return RState.Running;
|
|
|
}
|
|
|
|
|
@@ -238,14 +316,43 @@ namespace Venus_RT.Modules.PMs
|
|
|
Chamber.GeneratorBiasSetpower(0);
|
|
|
Chamber.GeneratorBiasPowerOn(false);
|
|
|
}
|
|
|
-
|
|
|
+ if (step.ElapsedTime() > rfMatchC1C2Index * 1000)
|
|
|
+ {
|
|
|
+ biasRfMatchC1.Add(Chamber.BiasRFMatchC1);
|
|
|
+ biasRfMatchC2.Add(Chamber.BiasRFMatchC2);
|
|
|
+ biasRfMatchC1C2Index += 1;
|
|
|
+ }
|
|
|
return RState.Running;
|
|
|
}
|
|
|
|
|
|
private void BiasUnit_End(ProcessUnitBase unit, RecipeStep step)
|
|
|
{
|
|
|
+ var ProcessUnit = unit as BiasUnit;
|
|
|
Chamber.GeneratorBiasSetpower(0);
|
|
|
Chamber.GeneratorBiasPowerOn(false);
|
|
|
+ if (biasRfMatchC1.Count >= 6)
|
|
|
+ {
|
|
|
+ float allValue = 0;
|
|
|
+ for (int i = 4; i < biasRfMatchC1.Count; i++)
|
|
|
+ {
|
|
|
+ allValue += biasRfMatchC1[i];
|
|
|
+ }
|
|
|
+ var average = allValue / (biasRfMatchC1.Count - 4);
|
|
|
+ ProcessUnit.AutoC1 = (int)average;
|
|
|
+ }
|
|
|
+ if (biasRfMatchC2.Count >= 6)
|
|
|
+ {
|
|
|
+ float allValue = 0;
|
|
|
+ for (int i = 4; i < biasRfMatchC2.Count; i++)
|
|
|
+ {
|
|
|
+ allValue += biasRfMatchC2[i];
|
|
|
+ }
|
|
|
+ var average = allValue / (biasRfMatchC2.Count - 4);
|
|
|
+ ProcessUnit.AutoC2 = (int)average;
|
|
|
+ }
|
|
|
+ biasRfMatchC1.Clear();
|
|
|
+ biasRfMatchC1.Clear();
|
|
|
+ biasRfMatchC1C2Index = 0;
|
|
|
}
|
|
|
|
|
|
private RState GasControlUnit_Start(ProcessUnitBase unit, RecipeStep step)
|