|
@@ -140,6 +140,8 @@ namespace Venus_RT.Modules
|
|
|
private List<ModuleName> _waitPostCleanPMs = new List<ModuleName>();
|
|
|
private List<ModuleName> _waitWTWCleanPMs = new List<ModuleName>();
|
|
|
|
|
|
+ private List<Guid> _lstReturnWafers = new List<Guid>();
|
|
|
+
|
|
|
public bool HasJobRunning => _lstControlJobs.Count > 0;
|
|
|
|
|
|
#region public interface
|
|
@@ -565,6 +567,27 @@ namespace Venus_RT.Modules
|
|
|
_cycleState = RState.End;
|
|
|
}
|
|
|
|
|
|
+ public bool ManualReturnWafer(object[] objs)
|
|
|
+ {
|
|
|
+ ModuleName SourceModule = (ModuleName)objs[0];
|
|
|
+ int SourceSlot = (int)objs[1];
|
|
|
+
|
|
|
+ if (!_vacSchedulers.Keys.Contains(SourceModule) && !_atmSchedulers.Keys.Contains(SourceModule))
|
|
|
+ {
|
|
|
+ LOG.Write(eEvent.WARN_ROUTER, $"Invalid source module {SourceModule}");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(WaferManager.Instance.CheckNoWafer(SourceModule, SourceSlot))
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ var _wafer_id = WaferManager.Instance.GetWafer(SourceModule, SourceSlot).InnerId;
|
|
|
+ _lstReturnWafers.Add(_wafer_id);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
#endregion
|
|
|
|
|
@@ -1700,9 +1723,10 @@ namespace Venus_RT.Modules
|
|
|
{
|
|
|
int Processed = 0;
|
|
|
int Empty = 0;
|
|
|
+ List<ModuleName> usedPMs = GetPmUsedInRunningPj();
|
|
|
foreach (var module in _vacModules)
|
|
|
{
|
|
|
- if (ModuleHelper.IsPm(module.Key) && _vacSchedulers[module.Key].IsAvailable && _vacModules[module.Key].MovingStatus == MovingStatus.Idle)
|
|
|
+ if (ModuleHelper.IsPm(module.Key) && usedPMs.Contains(module.Key) && _vacSchedulers[module.Key].IsAvailable && _vacModules[module.Key].MovingStatus == MovingStatus.Idle)
|
|
|
{
|
|
|
var wafer = WaferManager.Instance.GetWafer(module.Key, 0);
|
|
|
if(wafer.IsEmpty)
|