123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- using Aitex.Core.RT.Log;
- using Aitex.Core.Util;
- using Aitex.Sorter.Common;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.SubstrateTrackings;
- using FurnaceRT.Equipments.Systems;
- using FurnaceRT.Equipments.WaferRobots;
- using FurnaceRT.Equipments.FIMSs;
- namespace FurnaceRT.Equipments.Schedulers
- {
- public class SchedulerWaferRobot : SchedulerModule
- {
- public override bool IsAvailable
- {
- get { return _waferRobot.IsReady && _waferRobot.IsOnline && CheckTaskDone(); }
- }
-
- public override bool IsOnline
- {
- get { return _waferRobot.IsOnline; }
- }
- public override bool IsError
- {
- get { return _waferRobot.IsError; }
- }
- private WaferRobotModuleBase _waferRobot = null;
- private Hand _hand;
- private Hand _taskSwapPickHand;
- private Hand _taskSwapPlaceHand;
- private int _taskSwapPickSlot;
- private int _taskSwapPlaceSlot;
- public ModuleName PreviousTarget { get; set; }
- public SchedulerWaferRobot() : base(ModuleName.WaferRobot.ToString())
- {
- _waferRobot = Singleton<EquipmentManager>.Instance.Modules[ModuleName.WaferRobot] as WaferRobotModuleBase;
- PreviousTarget = ModuleName.System;
- }
- public override void ResetTask()
- {
- base.ResetTask();
- PreviousTarget = ModuleName.System;
- }
- public bool IsReadyForPick(Hand blade)
- {
- if(blade == Hand.Blade1)
- {
- return WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 0);
- }
- else if (blade == Hand.Blade2)
- {
- return WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 1) &&
- WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 2) &&
- WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 3) &&
- WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 4);
- }
- else
- {
- return WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 0) &&
- WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 1) &&
- WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 2) &&
- WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 3) &&
- WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 4);
- }
- }
- public bool IsReadyForPlace(Hand blade)
- {
- if (blade == Hand.Blade1)
- {
- return WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 0);
- }
- else if (blade == Hand.Blade2)
- {
- return WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 1) &&
- WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 2) &&
- WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 3) &&
- WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 4);
- }
- else
- {
- return WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 0) &&
- WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 1) &&
- WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 2) &&
- WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 3) &&
- WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 4);
- }
- }
- public bool Pick(ModuleName source, int slot, Hand hand)
- {
- _task = TaskType.Pick;
- _hand = hand;
- if (!_waferRobot.Pick(source, hand, slot, out string reason))
- {
- LOG.Write(reason);
- }
- 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;
- if (!_waferRobot.Place(destination, hand, slot, out string reason))
- {
- LOG.Write(reason);
- }
- PreviousTarget = destination;
- LogTaskStart(_task, $"{Module}.{hand}=>{destination}.{slot + 1}");
- return true;
- }
- public bool Map(ModuleName destination, int slotNumber, string slotMap, bool isCompareWithSlotMap, bool isCreateWafer, Hand hand)
- {
- _task = TaskType.Map;
- _hand = hand;
- if (!_waferRobot.Map(destination, hand, slotNumber, slotMap, isCompareWithSlotMap, isCreateWafer, out string reason))
- {
- LOG.Write(reason);
- }
- if (destination == ModuleName.FIMS1 || destination == ModuleName.FIMS2)
- (Singleton<EquipmentManager>.Instance.Modules[destination] as FIMSModule).IsMapping = true;
- PreviousTarget = destination;
- LogTaskStart(_task, $"{Module}.{hand}=> slot number = {slotNumber}");
- return true;
- }
- public bool Goto(ModuleName target, int slot, Hand hand )
- {
- PreviousTarget = target;
- _task = TaskType.Goto;
- //if (!_waferRobot.Goto(target, hand, slot, out string reason))
- //{
- // LOG.Write(reason);
- //}
-
- LogTaskStart(_task, $"robot {hand} goto {target}, slot {slot+1}");
- return true;
- }
- public bool CheckTaskDone()
- {
- bool ret = false;
- switch (_task)
- {
- case TaskType.None:
- ret = true;
- break;
- case TaskType.Pick:
- if (_hand == Hand.Both)
- {
- ret = WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 0)
- && WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 1)
- && WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 2)
- && WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 3)
- && WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 4);
- }
- else if(_hand == Hand.Blade1)
- {
- ret = WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 2);
- }
- else
- {
- ret = WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 1)
- && WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 2)
- && WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 3)
- && WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, 4);
- }
- break;
- case TaskType.Place:
- if (_hand == Hand.Both)
- {
- ret = WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 0)
- && WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 1)
- && WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 2)
- && WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 3)
- && WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 4);
- }
- else if (_hand == Hand.Blade1)
- {
- ret = WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 2);
- }
- else
- {
- ret = WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 1)
- && WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 2)
- && WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 3)
- && WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, 4);
- }
- break;
- case TaskType.Goto:
- ret = _waferRobot.IsReady;
- break;
- case TaskType.PickAndPlace:
- ret = WaferManager.Instance.CheckHasWafer(ModuleName.WaferRobot, (int)_taskSwapPickHand)
- && WaferManager.Instance.CheckNoWafer(ModuleName.WaferRobot, (int)_taskSwapPlaceHand);
- break;
- case TaskType.Map:
- var carrier = CarrierManager.Instance.GetCarrier(PreviousTarget, 0);
- if (carrier != null)
- ret = carrier.IsMapped;
- else
- ret = _waferRobot.IsReady;
- break;
- }
- if (ret && _task != TaskType.None)
- {
- LogTaskDone(_task, "");
- _task = TaskType.None;
- }
- return ret;
- }
- }
- }
|