| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using Aitex.Core.RT.Fsm;
 
- using Aitex.Core.RT.Log;
 
- using Aitex.Core.Util;
 
- using Aitex.Sorter.Common;
 
- using Venus_RT.Modules;
 
- using MECF.Framework.Common.Equipment;
 
- using MECF.Framework.Common.SubstrateTrackings;
 
- namespace Venus_RT.Scheduler
 
- {
 
-     public class SchedulerEfemRobot : SchedulerModule
 
-     {
 
-         public override bool IsAvailable
 
-         {
 
-             get { return _entity.IsIdle && /*_entity.IsOnline && */CheckTaskDone(); }
 
-         }
 
-         public override bool IsOnline
 
-         {
 
-             get { return _entity.IsOnline; }
 
-         }
 
-         public override bool IsError
 
-         {
 
-             get { return _entity.IsError; }
 
-         }
 
-         private EfemEntity _entity = null;
 
-         private Hand _hand;
 
-         private int _entityTaskToken = (int)FSM_MSG.NONE;
 
-         private Hand _taskSwapPickHand;
 
-         private Hand _taskSwapPlaceHand;
 
-         private int _taskSwapPickSlot;
 
-         private int _taskSwapPlaceSlot;
 
-         public ModuleName PreviousTarget { get; set; }
 
-         public SchedulerEfemRobot() : base(ModuleName.EfemRobot.ToString())
 
-         {
 
-             _entity = Singleton<RouteManager>.Instance.EFEM;
 
-             PreviousTarget = ModuleName.System;
 
-         }
 
-         public bool IsReadyForPick(Hand blade)
 
-         {
 
-             return WaferManager.Instance.CheckNoWafer(ModuleName.EfemRobot, (int)blade);
 
-         }
 
-         public bool IsReadyForPlace(Hand blade)
 
-         {
 
-             return WaferManager.Instance.CheckHasWafer(ModuleName.EfemRobot, (int)blade);
 
-         }
 
-         public bool Pick(ModuleName source, int slot, Hand hand)
 
-         {
 
-             _task = TaskType.Pick;
 
-             _hand = hand;
 
-             _entityTaskToken = _entity.InvokePick(source, slot, hand, WaferManager.Instance.GetWafer(source, slot).Size);
 
-             PreviousTarget = source;
 
-             LogTaskStart(_task, $"{source}.{slot + 1}=>{Module}.{hand}");
 
-             return true;
 
-         }
 
-         public bool Place(ModuleName destination, int slot, Hand hand)
 
-         {
 
-             _task = TaskType.Place;
 
-             _hand = hand;
 
-             _entityTaskToken = _entity.InvokePlace(destination, slot, hand, 
 
-                 WaferManager.Instance.GetWafer(ModuleName.EfemRobot, hand==Hand.Blade1 ? 0:1).Size);
 
-             PreviousTarget = destination;
 
-             LogTaskStart(_task, $"{Module}.{hand}=>{destination}.{slot + 1}");
 
-             return true;
 
-         }
 
-         public bool PickAndPlace(ModuleName target, int pickSlot, int placeSlot, Hand pickHand, Hand placeHand)
 
-         {
 
-             PreviousTarget = target;
 
-             _task = TaskType.PickAndPlace;
 
-             _taskSwapPickHand = pickHand;
 
-             _taskSwapPlaceHand = placeHand;
 
-             _taskSwapPickSlot = pickSlot;
 
-             _taskSwapPlaceSlot = placeSlot;
 
-             _entityTaskToken = _entity.InvokePickAndPlace(target, pickHand, pickSlot, placeHand, placeSlot,  WaferManager.Instance.GetWafer(target, pickSlot).Size);
 
-             LogTaskStart(_task, $" {target}.{pickSlot + 1}=>{Module}.{pickHand} && {Module}.{placeHand}=>{target}.{placeSlot + 1}");
 
-             return true;
 
-         }
 
-         public bool Goto(ModuleName target, int slot )
 
-         {
 
-             _task = TaskType.Goto;
 
-             _entityTaskToken = _entity.InvokeGoto(target, slot );
 
-             PreviousTarget = target;
 
-             LogTaskStart(_task, $"Robot goto {target}.{slot + 1}");
 
-             return true;
 
-         }
 
-         public bool Map(ModuleName destination )
 
-         {
 
-             _task = TaskType.Map;
 
-             
 
-             _entityTaskToken = _entity.InvokeMap(destination.ToString());
 
-             LogTaskStart(_task, $"{Module} mapping");
 
-             PreviousTarget = destination;
 
-             return true;
 
-         }
 
-         public bool Monitor()
 
-         {
 
-             return true;
 
-         }
 
-         public bool CheckTaskDone()
 
-         {
 
-             bool ret = false;
 
-             switch (_task)
 
-             {
 
-                 case TaskType.None:
 
-                     ret = true;
 
-                     break;
 
-                 case TaskType.Pick:
 
-                     ret = WaferManager.Instance.CheckHasWafer(ModuleName.EfemRobot, (int)_hand);
 
-                     if (ret)
 
-                     {
 
-                         WaferArriveTicks[(int) _hand] = DateTime.Now.Ticks;
 
-                     }
 
-                     break;
 
-                 case TaskType.Place:
 
-                     ret = WaferManager.Instance.CheckNoWafer(ModuleName.EfemRobot, (int)_hand);
 
-                     break;
 
-                 case TaskType.Map:
 
-                     ret = _entity.CheckAcked(_entityTaskToken) && _entity.IsIdle;
 
-                     break;
 
-                 case TaskType.Goto:
 
-                     ret = _entity.CheckAcked(_entityTaskToken) && _entity.IsIdle;
 
-                     break;
 
-                 case TaskType.PickAndPlace:
 
-                     ret = WaferManager.Instance.CheckHasWafer(ModuleName.EfemRobot, (int)_taskSwapPickHand)
 
-                           && WaferManager.Instance.CheckNoWafer(ModuleName.EfemRobot, (int)_taskSwapPlaceHand);
 
-                     if (ret)
 
-                     {
 
-                         WaferArriveTicks[(int)_taskSwapPickHand] = DateTime.Now.Ticks;
 
-                     }
 
-                     break;
 
-             }
 
-             if (ret && _task != TaskType.None)
 
-             {
 
-                 LogTaskDone(_task, "");
 
-                 _task = TaskType.None;
 
-             }
 
-             return ret;
 
-         }
 
-     }
 
- }
 
 
  |