|
@@ -36,9 +36,14 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
public enum MovingStatus
|
|
|
{
|
|
|
- Staying,
|
|
|
+ Idle,
|
|
|
Waiting,
|
|
|
Moving,
|
|
|
+
|
|
|
+ // PM Status
|
|
|
+ WaitProcess,
|
|
|
+ StartProcess,
|
|
|
+ Processing,
|
|
|
}
|
|
|
class ModuleFlag
|
|
|
{
|
|
@@ -48,7 +53,7 @@ namespace Venus_RT.Modules
|
|
|
public ModuleFlag(ModulePriority _priority)
|
|
|
{
|
|
|
Priority = _priority;
|
|
|
- MovingStatus = MovingStatus.Staying;
|
|
|
+ MovingStatus = MovingStatus.Idle;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -542,6 +547,7 @@ namespace Venus_RT.Modules
|
|
|
private void epilogue()
|
|
|
{
|
|
|
CheckWaferArrived();
|
|
|
+ ProcessPMTask();
|
|
|
|
|
|
UpdateProcessJobStatus();
|
|
|
UpdateControlJobStatus();
|
|
@@ -563,7 +569,7 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
foreach(var mod in _vacSchedulers)
|
|
|
{
|
|
|
- if (mod.Value.IsAvailable && _vacModules[mod.Key].MovingStatus == MovingStatus.Staying)
|
|
|
+ if (mod.Value.IsAvailable && _vacModules[mod.Key].MovingStatus == MovingStatus.Idle)
|
|
|
{
|
|
|
if(ModuleHelper.IsLoadLock(mod.Key))
|
|
|
{
|
|
@@ -814,6 +820,41 @@ namespace Venus_RT.Modules
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void ProcessPMTask()
|
|
|
+ {
|
|
|
+ foreach(var mod in _vacModules)
|
|
|
+ {
|
|
|
+ if(ModuleHelper.IsPm(mod.Key))
|
|
|
+ {
|
|
|
+ if(_vacSchedulers[mod.Key].IsAvailable)
|
|
|
+ {
|
|
|
+ switch (mod.Value.MovingStatus)
|
|
|
+ {
|
|
|
+ case MovingStatus.WaitProcess:
|
|
|
+ {
|
|
|
+ _vacSchedulers[mod.Key].EventWaferArrived?.Invoke(this, new WaferMoveArgs(ModuleName.TMRobot, 0, mod.Key, 0));
|
|
|
+ mod.Value.MovingStatus = MovingStatus.StartProcess;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case MovingStatus.Processing:
|
|
|
+ mod.Value.MovingStatus = MovingStatus.Idle;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ switch(mod.Value.MovingStatus)
|
|
|
+ {
|
|
|
+ case MovingStatus.StartProcess:
|
|
|
+ mod.Value.MovingStatus = MovingStatus.Processing;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private Hand GetTMRobotFreeHand()
|
|
|
{
|
|
|
var blade1HasWafer = WaferManager.Instance.CheckHasWafer(ModuleName.TMRobot, 0);
|
|
@@ -970,7 +1011,7 @@ namespace Venus_RT.Modules
|
|
|
}
|
|
|
private bool ProcessLLEFEMRobotTask(ModuleName ll)
|
|
|
{
|
|
|
- if (_vacModules[ll].MovingStatus != MovingStatus.Staying)
|
|
|
+ if (_vacModules[ll].MovingStatus != MovingStatus.Idle)
|
|
|
return false;
|
|
|
|
|
|
var robotSlots = GetEfemRobotWaferReadyInHands(ll);
|
|
@@ -1307,7 +1348,7 @@ namespace Venus_RT.Modules
|
|
|
if (!string.IsNullOrEmpty(recipeName))
|
|
|
{
|
|
|
var recipeContent =
|
|
|
- RecipeFileManager.Instance.LoadRecipe($"", recipeName, false);
|
|
|
+ RecipeFileManager.Instance.LoadRecipe($"{module}", recipeName, false);
|
|
|
if (string.IsNullOrEmpty(recipeContent))
|
|
|
{
|
|
|
reason = $"Can not find recipe file{recipeName}";
|
|
@@ -1454,6 +1495,15 @@ namespace Venus_RT.Modules
|
|
|
_vacWaferTargets.Remove(tar.Key);
|
|
|
if(!ModuleHelper.IsTMRobot(tar.Key.Module))
|
|
|
wafer.NextSequenceStep++;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.WARN_ROUTER, ModuleName.System, $"Wafer {wafer.WaferOrigin} Skip increase NextSequenceStep while move to {tar.Key.Module}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // should not go here
|
|
|
+ LOG.Write(eEvent.ERR_ROUTINE_FAILED, ModuleName.System, $"wafer {wafer.WaferOrigin} iner id dismatch, before move{tar.Value}, after move {wafer.InnerId}.");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1464,14 +1514,18 @@ namespace Venus_RT.Modules
|
|
|
{
|
|
|
foreach(var item in _movingItems)
|
|
|
{
|
|
|
- if(!ModuleHelper.IsTMRobot(item.DestinationModule))
|
|
|
+ if(ModuleHelper.IsPm(item.DestinationModule))
|
|
|
+ {
|
|
|
+ _vacModules[item.DestinationModule].MovingStatus = MovingStatus.WaitProcess;
|
|
|
+ }
|
|
|
+ else if(ModuleHelper.IsLoadLock(item.DestinationModule))
|
|
|
{
|
|
|
- _vacModules[item.DestinationModule].MovingStatus = MovingStatus.Staying;
|
|
|
+ _vacModules[item.DestinationModule].MovingStatus = MovingStatus.Idle;
|
|
|
}
|
|
|
|
|
|
- if(!ModuleHelper.IsTMRobot(item.SourceModule))
|
|
|
+ if(ModuleHelper.IsLoadLock(item.SourceModule) || (ModuleHelper.IsPm(item.SourceModule) && _vacModules[item.SourceModule].MovingStatus == MovingStatus.Moving))
|
|
|
{
|
|
|
- _vacModules[item.SourceModule].MovingStatus = MovingStatus.Staying;
|
|
|
+ _vacModules[item.SourceModule].MovingStatus = MovingStatus.Idle;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1508,7 +1562,7 @@ namespace Venus_RT.Modules
|
|
|
{
|
|
|
if(ModuleHelper.IsLoadLock(item.Module))
|
|
|
{
|
|
|
- _vacModules[item.Module].MovingStatus = MovingStatus.Staying;
|
|
|
+ _vacModules[item.Module].MovingStatus = MovingStatus.Idle;
|
|
|
}
|
|
|
}
|
|
|
|