|
@@ -32,7 +32,10 @@ namespace Venus_RT.Modules.PMs
|
|
|
public string CleanRecipeName { get; set; }
|
|
|
public RecipeHead ProcessRecipeHead { get; set; }
|
|
|
public DateTime RecipeStartTime { get; private set; }
|
|
|
-
|
|
|
+ public string WaferId { get; set; }
|
|
|
+ public string SlotID { get; set; }
|
|
|
+ public string LotID { get; set; }
|
|
|
+ public string FullRecipeName { get; set; }
|
|
|
private readonly PumpDownRoutine _pumpDownRoutine;
|
|
|
private readonly ProcessHelper _processHelper;
|
|
|
private bool _withWafer = true;
|
|
@@ -358,7 +361,16 @@ namespace Venus_RT.Modules.PMs
|
|
|
var result = step.Run();
|
|
|
if(result == RState.Failed)
|
|
|
{
|
|
|
- ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, CurrentRunningRecipe, "Fail", "", _chamber.Name, "", "");
|
|
|
+ WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Completed);
|
|
|
+ WaferInfo waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module.ToString()), 0);
|
|
|
+ if (!waferInfo.IsEmpty)
|
|
|
+ {
|
|
|
+ WaferId = waferInfo.InnerId.ToString();
|
|
|
+ SlotID = waferInfo.OriginSlot.ToString();
|
|
|
+ LotID = waferInfo.ProcessJob == null || string.IsNullOrEmpty(waferInfo.ProcessJob.ControlJobName) ? "" : waferInfo.ProcessJob.ControlJobName;
|
|
|
+ FullRecipeName = string.Format(@"{0}/{1}/{2}", ChuckRecipeName, ProcessRecipeName, DechuckRecipeName);
|
|
|
+ }
|
|
|
+ ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, FullRecipeName, "Fail", WaferId, _chamber.Name, LotID, SlotID);
|
|
|
UpdateWaferStatus(false);
|
|
|
Runner.Stop($"Recipe:{CurrentRunningRecipe}, Step:{_currentStep + 1} Failed");
|
|
|
FaEvent.FaPostAlarm(Module.ToString(), $"Recipe:{CurrentRunningRecipe}, Step:{_currentStep + 1} Failed");
|
|
@@ -424,16 +436,15 @@ namespace Venus_RT.Modules.PMs
|
|
|
_chamber.OpenValve(ValveType.Guage, true);
|
|
|
_chamber.SetPVPostion(1000);
|
|
|
WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Completed);
|
|
|
- string waferId = "", slotID = "", lotID = "", recipename = "";
|
|
|
WaferInfo waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module.ToString()), 0);
|
|
|
if (!waferInfo.IsEmpty)
|
|
|
{
|
|
|
- waferId = waferInfo.InnerId.ToString();
|
|
|
- slotID = waferInfo.OriginSlot.ToString();
|
|
|
- lotID = waferInfo.ProcessJob == null || string.IsNullOrEmpty(waferInfo.ProcessJob.ControlJobName) ? "" : waferInfo.ProcessJob.ControlJobName;
|
|
|
- recipename = string.Format(@"{0}/{1}/{2}", ChuckRecipeName, ProcessRecipeName, DechuckRecipeName);
|
|
|
+ WaferId = waferInfo.InnerId.ToString();
|
|
|
+ SlotID = waferInfo.OriginSlot.ToString();
|
|
|
+ LotID = waferInfo.ProcessJob == null || string.IsNullOrEmpty(waferInfo.ProcessJob.ControlJobName) ? "" : waferInfo.ProcessJob.ControlJobName;
|
|
|
+ FullRecipeName = string.Format(@"{0}/{1}/{2}", ChuckRecipeName, ProcessRecipeName, DechuckRecipeName);
|
|
|
}
|
|
|
- ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, recipename,"", waferId, _chamber.Name, lotID, slotID);
|
|
|
+ ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, FullRecipeName,"Success", WaferId, _chamber.Name, LotID, SlotID);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -441,11 +452,11 @@ namespace Venus_RT.Modules.PMs
|
|
|
{
|
|
|
if(bDone == false)
|
|
|
{
|
|
|
- WaferManager.Instance.UpdateWaferProcessStatus(ModuleName.PMA, 0, EnumWaferProcessStatus.Failed);
|
|
|
+ WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Failed);
|
|
|
if(_currentRecipe.Header.Type == RecipeType.Chuck)
|
|
|
{
|
|
|
// set wafer chucked flag even if the chuck recipe failed.
|
|
|
- WaferManager.Instance.UpdateWaferChuckStatus(ModuleName.PMA, 0, EnumWaferChuckStatus.Chucked);
|
|
|
+ WaferManager.Instance.UpdateWaferChuckStatus(Module, 0, EnumWaferChuckStatus.Chucked);
|
|
|
}
|
|
|
}
|
|
|
switch(_currentRecipe.Header.Type)
|
|
@@ -453,19 +464,26 @@ namespace Venus_RT.Modules.PMs
|
|
|
case RecipeType.Process:
|
|
|
break;
|
|
|
case RecipeType.Chuck:
|
|
|
- WaferManager.Instance.UpdateWaferChuckStatus(ModuleName.PMA, 0, EnumWaferChuckStatus.Chucked);
|
|
|
+ WaferManager.Instance.UpdateWaferChuckStatus(Module, 0, EnumWaferChuckStatus.Chucked);
|
|
|
break;
|
|
|
case RecipeType.DeChuck:
|
|
|
- WaferManager.Instance.UpdateWaferProcessStatus(ModuleName.PMA, 0, EnumWaferProcessStatus.Completed);
|
|
|
- WaferManager.Instance.UpdateWaferChuckStatus(ModuleName.PMA, 0, EnumWaferChuckStatus.Dechucked);
|
|
|
+ WaferManager.Instance.UpdateWaferProcessStatus(Module, 0, EnumWaferProcessStatus.Completed);
|
|
|
+ WaferManager.Instance.UpdateWaferChuckStatus(Module, 0, EnumWaferChuckStatus.Dechucked);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void Abort()
|
|
|
{
|
|
|
- ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, CurrentRunningRecipe, "Fail", "", _chamber.Name, "", "");
|
|
|
-
|
|
|
+ WaferInfo waferInfo = WaferManager.Instance.GetWafer(ModuleHelper.Converter(Module.ToString()), 0);
|
|
|
+ if (!waferInfo.IsEmpty)
|
|
|
+ {
|
|
|
+ WaferId = waferInfo.InnerId.ToString();
|
|
|
+ SlotID = waferInfo.OriginSlot.ToString();
|
|
|
+ LotID = waferInfo.ProcessJob == null || string.IsNullOrEmpty(waferInfo.ProcessJob.ControlJobName) ? "" : waferInfo.ProcessJob.ControlJobName;
|
|
|
+ FullRecipeName = string.Format(@"{0}/{1}/{2}", ChuckRecipeName, ProcessRecipeName, DechuckRecipeName);
|
|
|
+ }
|
|
|
+ ProcessDataRecorder.RecordPrecess(Guid.NewGuid().ToString(), RecipeStartTime, DateTime.Now, FullRecipeName, "Fail", WaferId, _chamber.Name, LotID, SlotID);
|
|
|
_chamber.GeneratorBiasPowerOn(false);
|
|
|
_chamber.GeneratorPowerOn(false);
|
|
|
_chamber.TurnPendulumValve(false);
|