Browse Source

TM Cycle ready.

sangwq 1 year ago
parent
commit
b741650da1

+ 1 - 1
Venus/Venus_RT/Modules/Schedulers/SchedulerPM.cs

@@ -27,7 +27,7 @@ namespace Venus_RT.Scheduler
     {
         public override bool IsAvailable
         {
-            get { return _entity.IsIdle /*&& _entity.IsOnline*/ && CheckTaskDone() && !_waitCompletejobClean; }
+            get { return _entity.IsIdle /*&& _entity.IsOnline*/ && CheckTaskDone() && !_waitCompletejobClean; } // 测试TMCycle, 暂时注释掉 _entity.IsOnline
 
         }
         public override bool IsOnline

+ 10 - 4
Venus/Venus_RT/Modules/Schedulers/SchedulerTMRobot.cs

@@ -102,9 +102,9 @@ namespace Venus_RT.Modules.Schedulers
                     {
                         SchedulerItem item = new SchedulerItem();
                         item.MoveType = ModuleHelper.IsLoadLock(swapItems[i].SourceModule) ? TMEntity.MSG.Pick : TMEntity.MSG.PMPick;
-                        item.target = swapItems[0].SourceModule;
+                        item.target = swapItems[i].SourceModule;
                         item.moveList = new Queue<MoveItem>();
-                        item.moveList.Enqueue(new MoveItem(swapItems[0].SourceModule, swapItems[0].SourceSlot, ModuleName.TM, i, (Hand)i));
+                        item.moveList.Enqueue(new MoveItem(swapItems[i].SourceModule, swapItems[i].SourceSlot, ModuleName.TM, i, (Hand)i));
                         _schedulerList.Enqueue(item);
 
                         swap.moveList.Enqueue(new MoveItem(ModuleName.TM, i, swapItems[i].DestinationModule, swapItems[i].DestinationSlot, (Hand)i));
@@ -122,7 +122,7 @@ namespace Venus_RT.Modules.Schedulers
                     if (!ModuleHelper.IsTM(swapItems[j].DestinationModule))
                     {
                         SchedulerItem item = new SchedulerItem();
-                        item.MoveType = ModuleHelper.IsLoadLock(swapItems[j].SourceModule) ?  TMEntity.MSG.Place : TMEntity.MSG.PMPlace;
+                        item.MoveType = ModuleHelper.IsLoadLock(swapItems[j].DestinationModule) ?  TMEntity.MSG.Place : TMEntity.MSG.PMPlace;
                         item.target = swapItems[j].DestinationModule;
                         item.moveList = new Queue<MoveItem>();
                         item.moveList.Enqueue(new MoveItem(ModuleName.TM, j - swapIndex, swapItems[j].DestinationModule, swapItems[j].DestinationSlot, (Hand)(j - swapIndex)));
@@ -233,7 +233,13 @@ namespace Venus_RT.Modules.Schedulers
                     return true;
 
                 _currentScheduler = _schedulerList.Dequeue();
-                if(_entity.CheckToPostMessage((int)_currentScheduler.MoveType, _currentScheduler.moveList.ToArray()))
+                Queue<MoveItem> moveItems = new Queue<MoveItem>();
+                foreach(var item in _currentScheduler.moveList)
+                {
+                    moveItems.Enqueue(item);
+                }
+
+                if(_entity.CheckToPostMessage((int)_currentScheduler.MoveType, moveItems))
                 {
                     _entityTaskToken = (int)_currentScheduler.MoveType;
                 }

+ 1 - 1
Venus/Venus_RT/Modules/TM/MFPMExtendRoutine.cs

@@ -53,7 +53,7 @@ namespace Venus_RT.Modules.TM
             }
             else
             {
-                LOG.Write(eEvent.ERR_TM, Module, $"Invalid target module : {_targetModule} for picking action");
+                LOG.Write(eEvent.ERR_TM, Module, $"Invalid target module : {_targetModule} for extending action");
                 return RState.Failed;
             }
 

+ 6 - 3
Venus/Venus_RT/Modules/TM/MFPMPickRoutine.cs

@@ -9,6 +9,8 @@ using Venus_Core;
 using Aitex.Core.RT.Log;
 using Aitex.Core.Util;
 using Venus_RT.Modules.PMs;
+using MECF.Framework.Common.Schedulers;
+using System.Collections.Generic;
 
 namespace Venus_RT.Modules.TM
 {
@@ -47,9 +49,10 @@ namespace Venus_RT.Modules.TM
                 return RState.Failed;
             }
 
-            _targetModule = (ModuleName)objs[0];
-            _targetSlot = (int)objs[1];
-            _hand = (Hand)objs[2];
+            var pickItem = (Queue<MoveItem>)objs[0];
+            _targetModule = pickItem.Peek().SourceModule;
+            _targetSlot = pickItem.Peek().SourceSlot;
+            _hand = pickItem.Peek().RobotHand;
 
             if (ModuleHelper.IsPm(_targetModule) && ModuleHelper.IsInstalled(_targetModule))
             {

+ 7 - 7
Venus/Venus_RT/Modules/TM/MFPMPlaceRoutine.cs

@@ -9,6 +9,8 @@ using Venus_Core;
 using Aitex.Core.RT.Log;
 using Aitex.Core.Util;
 using Venus_RT.Modules.PMs;
+using MECF.Framework.Common.Schedulers;
+using System.Collections.Generic;
 
 namespace Venus_RT.Modules.TM
 {
@@ -47,9 +49,10 @@ namespace Venus_RT.Modules.TM
                 return RState.Failed;
             }
 
-            _targetModule = (ModuleName)objs[0];
-            _targetSlot = (int)objs[1];
-            _hand = (Hand)objs[2];
+            var placeItem = (Queue<MoveItem>)objs[0];
+            _targetModule = placeItem.Peek().DestinationModule;
+            _targetSlot = placeItem.Peek().DestinationSlot;
+            _hand = placeItem.Peek().RobotHand;
 
             if (ModuleHelper.IsPm(_targetModule) && ModuleHelper.IsInstalled(_targetModule))
             {
@@ -57,7 +60,7 @@ namespace Venus_RT.Modules.TM
             }
             else
             {
-                LOG.Write(eEvent.ERR_TM, Module, $"Invalid target module : {_targetModule} for picking action");
+                LOG.Write(eEvent.ERR_TM, Module, $"Invalid target module : {_targetModule} for placing action");
                 return RState.Failed;
             }
 
@@ -110,7 +113,6 @@ namespace Venus_RT.Modules.TM
         {
             return _robot.PlaceRetract(_targetModule, _targetSlot, _hand);
         }
-
         private bool WaitRobotExtendDone()
         {
             if (_robot.Status == RState.Running)
@@ -128,7 +130,6 @@ namespace Venus_RT.Modules.TM
                 return true;
             }
         }
-
         private bool NotifyPMPlaceWafer()
         {
             _pmModule.PostMsg(PMEntity.MSG.LiftUpWafer);
@@ -156,7 +157,6 @@ namespace Venus_RT.Modules.TM
                 return true;
             }
         }
-
         private bool NotifyPMDone()
         {
             _pmModule.PostMsg(PMEntity.MSG.PlaceReady);

+ 2 - 2
Venus/Venus_RT/Modules/TM/MFPMRetractRoutine.cs

@@ -53,13 +53,13 @@ namespace Venus_RT.Modules.TM
             }
             else
             {
-                LOG.Write(eEvent.ERR_TM, Module, $"Invalid target module : {_targetModule} for picking action");
+                LOG.Write(eEvent.ERR_TM, Module, $"Invalid target module : {_targetModule} for retract action");
                 return RState.Failed;
             }
 
             if (_pmModule.IsSlitDoorClose)
             {
-                LOG.Write(eEvent.ERR_TM, Module, $"{_targetModule} slit door closed, can not extend robot arm");
+                LOG.Write(eEvent.ERR_TM, Module, $"{_targetModule} slit door closed, can not retract robot arm");
                 return RState.Failed;
             }
 

+ 7 - 4
Venus/Venus_RT/Modules/TM/MFPMSwapRoutine.cs

@@ -9,6 +9,8 @@ using Venus_Core;
 using Aitex.Core.RT.Log;
 using Aitex.Core.Util;
 using Venus_RT.Modules.PMs;
+using MECF.Framework.Common.Schedulers;
+using System.Collections.Generic;
 
 namespace Venus_RT.Modules.TM
 {
@@ -52,9 +54,10 @@ namespace Venus_RT.Modules.TM
                 return RState.Failed;
             }
 
-            _targetModule = (ModuleName)objs[0];
-            _targetSlot = (int)objs[1];
-            _pickHand = (Hand)objs[2];
+            var swapItem = (Queue<MoveItem>)objs[0];
+            _targetModule = swapItem.Peek().SourceModule;
+            _targetSlot = swapItem.Peek().SourceSlot;
+            _pickHand = swapItem.Peek().RobotHand;
             _placeHand = _pickHand == Hand.Blade2 ? Hand.Blade1 : Hand.Blade2;
 
             if (ModuleHelper.IsPm(_targetModule) && ModuleHelper.IsInstalled(_targetModule))
@@ -63,7 +66,7 @@ namespace Venus_RT.Modules.TM
             }
             else
             {
-                LOG.Write(eEvent.ERR_TM, Module, $"Invalid target module : {_targetModule} for picking action");
+                LOG.Write(eEvent.ERR_TM, Module, $"Invalid target module : {_targetModule} for swap action");
                 return RState.Failed;
             }
 

+ 8 - 4
Venus/Venus_RT/Modules/TM/MFPickRoutine.cs

@@ -8,6 +8,8 @@ using MECF.Framework.Common.SubstrateTrackings;
 using Venus_Core;
 using Aitex.Core.RT.Log;
 using Aitex.Core.Util;
+using MECF.Framework.Common.Schedulers;
+using System.Collections.Generic;
 
 namespace Venus_RT.Modules.TM
 {
@@ -46,11 +48,13 @@ namespace Venus_RT.Modules.TM
                 return RState.Failed;
             }
 
-            _targetModule = (ModuleName)objs[0];
-            _targetSlot = (int)objs[1];
-            _hand = (Hand)objs[2];
 
-            if(ModuleHelper.IsLoadLock(_targetModule) && ModuleHelper.IsInstalled(_targetModule))
+            var pickItem = (Queue<MoveItem>)objs[0];
+            _targetModule = pickItem.Peek().SourceModule;
+            _targetSlot = pickItem.Peek().SourceSlot;
+            _hand = pickItem.Peek().RobotHand;
+
+            if (ModuleHelper.IsLoadLock(_targetModule) && ModuleHelper.IsInstalled(_targetModule))
             {
                 _llModule = Singleton<RouteManager>.Instance.GetLL(_targetModule);
             }

+ 6 - 3
Venus/Venus_RT/Modules/TM/MFPlaceRoutine.cs

@@ -8,6 +8,8 @@ using MECF.Framework.Common.SubstrateTrackings;
 using Venus_Core;
 using Aitex.Core.RT.Log;
 using Aitex.Core.Util;
+using MECF.Framework.Common.Schedulers;
+using System.Collections.Generic;
 
 namespace Venus_RT.Modules.TM
 {
@@ -47,9 +49,10 @@ namespace Venus_RT.Modules.TM
                 return RState.Failed;
             }
 
-            _targetModule = (ModuleName)objs[0];
-            _targetSlot = (int)objs[1];
-            _hand = (Hand)objs[2];
+             var placeItem = (Queue<MoveItem>)objs[0];
+            _targetModule = placeItem.Peek().DestinationModule;
+            _targetSlot = placeItem.Peek().DestinationSlot;
+            _hand = placeItem.Peek().RobotHand;
 
             if (ModuleHelper.IsLoadLock(_targetModule) && ModuleHelper.IsInstalled(_targetModule))
             {

+ 42 - 17
Venus/Venus_RT/Modules/TMCycle.cs

@@ -87,6 +87,21 @@ namespace Venus_RT.Modules
                 cycleCount = (int)objs[1];
             }
 
+            // temp debug
+            {
+                for(int i = 0; i < _sourceSlotNumber; i ++)
+                {
+                    WaferManager.Instance.CreateWafer(_sourceModule, i, Aitex.Core.Common.WaferStatus.Normal);
+                    WaferManager.Instance.DeleteWafer(_destinationModule, i);
+                }
+
+                WaferManager.Instance.DeleteWafer(ModuleName.TM, 0);
+                WaferManager.Instance.DeleteWafer(ModuleName.TM, 1);
+                WaferManager.Instance.DeleteWafer(ModuleName.PMA, 0);
+                WaferManager.Instance.DeleteWafer(ModuleName.PMB, 0);
+            }
+            // temp debug
+
             return Runner.Start(Module, Name);
         }
 
@@ -134,6 +149,21 @@ namespace Venus_RT.Modules
             return slots;
         }
 
+        List<int> GetReadyOutSlot(ModuleName module, int slotCount)
+        {
+            List<int> slots = new List<int>();
+            for (int i = 0; i < slotCount; i++)
+            {
+                if (WaferManager.Instance.CheckHasWafer(module, i))
+                    slots.Add(i);
+
+                if (slots.Count >= 2)
+                    return slots;
+            }
+
+            return slots;
+        }
+
         List<ModuleName> GetReadyOutPMs()
         {
             List<ModuleName> outpm = new List<ModuleName>();
@@ -174,29 +204,24 @@ namespace Venus_RT.Modules
 
         private bool ReturnBack()
         {
-            if (IsModuleAvailable(_sourceModule) && IsModuleAvailable(_destinationModule))
+            if (IsModuleAvailable(_sourceModule) && IsModuleAvailable(_destinationModule) && _TMRobot.IsAvailable)
             {
-                if (_ReturnWafers.Count == 0)
-                    return _TMRobot.IsAvailable;
-
 
                 var InSlots = GetReadyInSlot(_sourceModule, _sourceSlotNumber);
-                foreach (var slot in InSlots)
+                var OutSlots = GetReadyOutSlot(_destinationModule, _destinationSlotNumber);
+                if (InSlots.Count == 0 || OutSlots.Count == 0)
+                    return true;
+
+                Queue<MoveItem> items = new Queue<MoveItem>();
+                for(int i = 0; i < Math.Min(InSlots.Count, OutSlots.Count); i++)
                 {
-                    if(_ReturnWafers.Count > 0)
-                    {
-                        var move = _ReturnWafers.Dequeue();
-                        move.DestinationSlot = slot;
-                        _runningItems.Enqueue(move);
-                    }
+                    items.Enqueue(new MoveItem(_destinationModule, OutSlots[i], _sourceModule, InSlots[i], (Hand)i));
                 }
-            }
-
 
-            if (_TMRobot.IsAvailable && _runningItems.Count > 0)
-            {
-                if(_TMRobot.PostMoveItems(_runningItems.ToArray()))
-                    _runningItems.Clear();
+                if(items.Count > 0)
+                {
+                    _TMRobot.PostMoveItems(items.ToArray());
+                }
             }
 
             return false;