|
@@ -969,7 +969,7 @@ namespace Venus_RT.Modules
|
|
|
_faCallback.JobCreateFailed(module, lotId, jobId, "");
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (!RouteManager.IsATMMode && !CheckSequenceRecipeFileValid(pj.Sequence, out reason))
|
|
|
{
|
|
|
LOG.Write(eEvent.WARN_ROUTER, ModuleName.System, $"recipe file not valid in the sequence, {reason}");
|
|
@@ -1165,7 +1165,13 @@ namespace Venus_RT.Modules
|
|
|
LOG.Write(eEvent.WARN_ROUTER, ModuleName.System, reason);
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
+ if (RtInstance.ConfigType == ConfigType.Kepler2200)
|
|
|
+ {
|
|
|
+ if (!CheckSequenceKepler2200TemperatureReady(GetFirstProcessJob(cj).Sequence))
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
if (cj.State == EnumControlJobState.WaitingForStart)
|
|
|
{
|
|
|
cj.SetState(EnumControlJobState.Executing);
|
|
@@ -1876,6 +1882,7 @@ namespace Venus_RT.Modules
|
|
|
{
|
|
|
temperature = temp;
|
|
|
}
|
|
|
+
|
|
|
var waferTask = new WaferTask((ModuleName)wafer.OriginStation,
|
|
|
wafer.OriginSlot,
|
|
|
pm,
|
|
@@ -3493,6 +3500,54 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
+ private bool CheckSequenceKepler2200TemperatureReady(SequenceInfo seq)
|
|
|
+ {
|
|
|
+ for (int i = 0; i < seq.Steps.Count; i++)
|
|
|
+ {
|
|
|
+ SequenceStepInfo stepInfo = seq.Steps[i];
|
|
|
+ foreach (var module in stepInfo.StepModules)
|
|
|
+ {
|
|
|
+ if (ModuleHelper.IsPm(module))
|
|
|
+ {
|
|
|
+ string attr = $"{module}Recipe";
|
|
|
+ if (stepInfo.StepParameter.ContainsKey(attr)
|
|
|
+ && !string.IsNullOrWhiteSpace((string)stepInfo.StepParameter[attr]))
|
|
|
+ {
|
|
|
+ var recipeName = (string)stepInfo.StepParameter[attr];
|
|
|
+ var recipeContent =
|
|
|
+ RecipeFileManager.Instance.LoadRecipe($"{module}", recipeName, false, "Process");
|
|
|
+ var recipe = Recipe.Load(recipeContent);
|
|
|
+ float currentChamberTemperature;
|
|
|
+ switch (module)
|
|
|
+ {
|
|
|
+ case ModuleName.PMA:
|
|
|
+ currentChamberTemperature = Singleton<RouteManager>.Instance.PMA.ChamberTemperature;
|
|
|
+ break;
|
|
|
+ case ModuleName.PMB:
|
|
|
+ currentChamberTemperature = Singleton<RouteManager>.Instance.PMB.ChamberTemperature;
|
|
|
+ break;
|
|
|
+ case ModuleName.PMC:
|
|
|
+ currentChamberTemperature = Singleton<RouteManager>.Instance.PMC.ChamberTemperature;
|
|
|
+ break;
|
|
|
+ case ModuleName.PMD:
|
|
|
+ currentChamberTemperature = Singleton<RouteManager>.Instance.PMD.ChamberTemperature;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ currentChamberTemperature = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (recipe.Header.Temperature!=null && recipe.Header.Temperature!="" && (currentChamberTemperature > Convert.ToSingle(recipe.Header.Temperature) + 10 || currentChamberTemperature < Convert.ToSingle(recipe.Header.Temperature) - 10))
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.ERR_ROUTER, ModuleName.System, $"Start job失败,由于{module}腔体温度{currentChamberTemperature}与{recipeName} Recipe温度{recipe.Header.Temperature}不匹配");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
private bool CheckSequenceRecipeFileValid(SequenceInfo seq, out string reason)
|
|
|
{
|