|
@@ -23,6 +23,7 @@ using Venus_Core;
|
|
|
|
|
|
using Venus_RT.Modules.Schedulers;
|
|
|
using Venus_RT.Scheduler;
|
|
|
+using Venus_Unity;
|
|
|
|
|
|
namespace Venus_RT.Modules
|
|
|
{
|
|
@@ -474,6 +475,7 @@ namespace Venus_RT.Modules
|
|
|
public void Clear()
|
|
|
{
|
|
|
_efemRobot.ResetTask();
|
|
|
+ _tmRobot.ResetTask();
|
|
|
foreach (var module in _vacSchedulers)
|
|
|
{
|
|
|
module.Value.ResetTask();
|
|
@@ -615,8 +617,7 @@ namespace Venus_RT.Modules
|
|
|
bool SearchWaferDestination(SlotItem outSlot, out SlotItem destSlot)
|
|
|
{
|
|
|
destSlot = new SlotItem(ModuleName.System, -1);
|
|
|
- var wafer = WaferManager.Instance.GetWafer(outSlot.Module, outSlot.Slot);
|
|
|
-
|
|
|
+ var wafer = GetCloneWafer(outSlot.Module, outSlot.Slot);
|
|
|
if (wafer.IsEmpty || wafer.ProcessJob == null || wafer.ProcessJob.Sequence == null || wafer.NextSequenceStep >= wafer.ProcessJob.Sequence.Steps.Count)
|
|
|
return false;
|
|
|
|
|
@@ -704,7 +705,7 @@ namespace Venus_RT.Modules
|
|
|
if (IsLoadLockReservedByEFEM(slot.Module))
|
|
|
continue;
|
|
|
|
|
|
- var wafer = WaferManager.Instance.GetWafer(slot.Module, slot.Slot);
|
|
|
+ var wafer = GetCloneWafer(slot.Module, slot.Slot);
|
|
|
|
|
|
if (wafer.IsEmpty || wafer.ProcessJob == null || wafer.ProcessJob.Sequence == null || wafer.NextSequenceStep >= wafer.ProcessJob.Sequence.Steps.Count)
|
|
|
continue;
|
|
@@ -910,7 +911,7 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
private bool IsVacWaferReadyOut(ModuleName mod, int slot)
|
|
|
{
|
|
|
- var wafer = WaferManager.Instance.GetWafer(mod, slot);
|
|
|
+ var wafer = GetCloneWafer(mod, slot);
|
|
|
|
|
|
if (wafer.IsEmpty)
|
|
|
return false;
|
|
@@ -989,7 +990,7 @@ namespace Venus_RT.Modules
|
|
|
var slots = new List<int>();
|
|
|
for(int i = 0; i < 2; i++)
|
|
|
{
|
|
|
- var wafer = WaferManager.Instance.GetWafer(ModuleName.EfemRobot, i);
|
|
|
+ var wafer = GetCloneWafer(ModuleName.EfemRobot, i);
|
|
|
if (wafer.IsEmpty)
|
|
|
continue;
|
|
|
|
|
@@ -1014,7 +1015,7 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
bool IsAtmWaferReadyOut(ModuleName mod, int slot)
|
|
|
{
|
|
|
- var wafer = WaferManager.Instance.GetWafer(mod, slot);
|
|
|
+ var wafer = GetCloneWafer(mod, slot);
|
|
|
|
|
|
if (wafer.IsEmpty)
|
|
|
return false;
|
|
@@ -1183,7 +1184,7 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
private bool IsForwardPathBlocking(ModuleName mod, int slot)
|
|
|
{
|
|
|
- var wafer = WaferManager.Instance.GetWafer(mod, slot);
|
|
|
+ var wafer = GetCloneWafer(mod, slot);
|
|
|
if (wafer.IsEmpty || wafer.ProcessJob == null || wafer.ProcessJob.Sequence == null || wafer.NextSequenceStep >= wafer.ProcessJob.Sequence.Steps.Count)
|
|
|
return false;
|
|
|
|
|
@@ -1446,7 +1447,7 @@ namespace Venus_RT.Modules
|
|
|
|
|
|
private bool CheckWaferNeedProcessAndPMAvailable(ModuleName waferModule, int waferSlot, ModuleName processIn = ModuleName.System)
|
|
|
{
|
|
|
- WaferInfo wafer = WaferManager.Instance.GetWafer(waferModule, waferSlot);
|
|
|
+ WaferInfo wafer = GetCloneWafer(waferModule, waferSlot);
|
|
|
|
|
|
if (wafer.IsEmpty)
|
|
|
return false;
|
|
@@ -1759,7 +1760,7 @@ namespace Venus_RT.Modules
|
|
|
{
|
|
|
for (int i = 0; i < pj.SlotWafers.Count; ++i)
|
|
|
{
|
|
|
- WaferInfo wafer = WaferManager.Instance.GetWafer(pj.SlotWafers[i].Item1, pj.SlotWafers[i].Item2);
|
|
|
+ WaferInfo wafer = GetCloneWafer(pj.SlotWafers[i].Item1, pj.SlotWafers[i].Item2);
|
|
|
if (wafer.IsEmpty)
|
|
|
return false;
|
|
|
|
|
@@ -1884,7 +1885,7 @@ namespace Venus_RT.Modules
|
|
|
foreach (var pjSlotWafer in pj.SlotWafers)
|
|
|
{
|
|
|
countPerCycle++;
|
|
|
- WaferInfo wafer = WaferManager.Instance.GetWafer(pjSlotWafer.Item1, pjSlotWafer.Item2);
|
|
|
+ WaferInfo wafer = GetCloneWafer(pjSlotWafer.Item1, pjSlotWafer.Item2);
|
|
|
if (!wafer.IsEmpty && !IsWaferNeedGotoModule(wafer, ModuleName.PMA) && !IsWaferNeedGotoModule(wafer, ModuleName.PMB))
|
|
|
countProcessed++;
|
|
|
}
|
|
@@ -1944,6 +1945,19 @@ namespace Venus_RT.Modules
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static WaferInfo GetCloneWafer(ModuleName mod, int slot)
|
|
|
+ {
|
|
|
+ var Wafer = WaferManager.Instance.GetWafer(mod, slot);
|
|
|
+ if (Wafer.IsEmpty || Wafer.ProcessJob == null || Wafer.ProcessJob.Sequence == null)
|
|
|
+ return Wafer;
|
|
|
+
|
|
|
+ var cloneWafer = SerializeHelper.DeepCopyJson(Wafer);
|
|
|
+
|
|
|
+ if (Wafer.IsEmpty || Wafer.ProcessJob == null || Wafer.ProcessJob.Sequence == null)
|
|
|
+ return Wafer;
|
|
|
+
|
|
|
+ return cloneWafer;
|
|
|
+ }
|
|
|
|
|
|
#endregion
|
|
|
}
|