Browse Source

AutoCycle enhancement.

sangwq 1 year ago
parent
commit
8d21b41b42

+ 5 - 0
Venus/Venus_Core/SerializeHelper.cs

@@ -492,5 +492,10 @@ namespace Venus_Unity
                 return str;
             }
         }
+
+        public static T DeepCopyJson<T>(T obj)
+        {
+            return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(obj));
+        }
     }
 }

+ 24 - 10
Venus/Venus_RT/Modules/AutoCycle.cs

@@ -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
     }

+ 5 - 3
Venus/Venus_RT/Modules/Schedulers/SchedulerEfemRobot.cs

@@ -188,10 +188,12 @@ namespace Venus_RT.Scheduler
             base.ResetTask();
 
             _entityTaskToken = (int)FSM_MSG.NONE;
-            if (_currentScheduler != null)
-            { 
-            _currentScheduler.Status = RState.End;
+            if(_currentScheduler != null)
+            {
+                _currentScheduler.moveList.Clear();
+                _currentScheduler.Status = RState.End;
             }
+                
 
         }
     }