| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | using Aitex.Core.Common;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.CarrierRobots;using FurnaceRT.Equipments.Systems;using MECF.Framework.Common.Jobs;namespace FurnaceRT.Equipments.Schedulers{    public class SchedulerCarrierRobot : SchedulerModule    {        public override bool IsAvailable        {            get { return _carrierRobot.IsReady && _carrierRobot.IsOnline && CheckTaskDone(); }        }        public override bool IsOnline        {            get { return _carrierRobot.IsOnline; }        }        public override bool IsError        {            get { return _carrierRobot.IsError; }        }        private CarrierRobotModule _carrierRobot = null;        private CarrierPara _carrierPara = null;        private Hand _hand;        private ModuleName _source1;        private ModuleName _source2;        private int _sourceSlot1;        private int _sourceSlot2;        private ModuleName _destination1;        private ModuleName _destination2;        private int _destinationSlot1;        private int _destinationSlot2;        public ModuleName PreviousTarget { get; set; }        public SchedulerCarrierRobot() : base(ModuleName.CarrierRobot.ToString())        {            _carrierRobot = Singleton<EquipmentManager>.Instance.Modules[ModuleName.CarrierRobot] as CarrierRobotModule;            PreviousTarget = ModuleName.System;        }        public override void ResetTask()        {            base.ResetTask();            PreviousTarget = ModuleName.System;        }        public bool IsReadyForPick(Hand blade)        {            return CarrierManager.Instance.CheckNoCarrier(ModuleName.CarrierRobot, (int)blade);        }        public bool IsReadyForPlace(Hand blade)        {            return CarrierManager.Instance.CheckHasCarrier(ModuleName.CarrierRobot, (int)blade);        }        public bool Pick(ModuleName source, int slot, Hand hand)        {            _task = TaskType.Pick;            _hand = hand;            if (!_carrierRobot.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 (!_carrierRobot.Place(destination, hand, slot, out string reason))            {                LOG.Write(reason);            }            PreviousTarget = destination;            LogTaskStart(_task, $"{Module}.{hand}=>{destination}.{slot + 1}");            return true;        }        public bool Goto(ModuleName destination, int slot, Hand hand, bool isPickReady)        {            _task = TaskType.Goto;            _hand = hand;            if (!_carrierRobot.Goto(destination, hand, slot, isPickReady, out string reason))            {                LOG.Write(reason);            }            PreviousTarget = destination;            LogTaskStart(_task, $"{Module}.{hand}=>{destination}.{slot + 1}");            return true;        }        public bool Load(ModuleName source, int slot, Hand hand, ModuleName destinationStocker,            CarrierType carrierType, string reservedCarrierId, CarrierPara carrierPara)        {            _task = TaskType.Load;            _hand = hand;            if (!_carrierRobot.Load(source, hand, slot, destinationStocker, carrierType, reservedCarrierId, out string reason))            {                LOG.Write(reason);            }            _carrierPara = carrierPara;            PreviousTarget = source;            LogTaskStart(_task, $"{source}.{slot + 1}=>{Module}.{hand}");            return true;        }        public bool Unload(ModuleName destination, int slot, Hand hand, CarrierPara carrierPara)        {            _task = TaskType.Unload;            _hand = hand;            if (!_carrierRobot.Unload(destination, hand, slot, out string reason))            {                LOG.Write(reason);            }            _carrierPara = carrierPara;            PreviousTarget = destination;            LogTaskStart(_task, $"{Module}.{hand}=>{destination}.{slot + 1}");            return true;        }        public bool CheckTaskDone()        {            bool ret = false;            switch (_task)            {                case TaskType.None:                    ret = true;                    break;                case TaskType.Map:                    ret = _carrierRobot.IsReady;                    break;                case TaskType.Goto:                    ret = _carrierRobot.IsReady;                    break;                case TaskType.Load:                    ret = CarrierManager.Instance.CheckHasCarrier(ModuleName.CarrierRobot, 0);                    if (ret && _carrierPara != null)                    {                        _carrierPara.IsLoaded = true;                    }                    break;                case TaskType.Unload:                    ret = CarrierManager.Instance.CheckNoCarrier(ModuleName.CarrierRobot, 0);                    if (ret && _carrierPara != null)                    {                        _carrierPara.IsUnloaded = true;                    }                    break;                case TaskType.Pick:                    ret = CarrierManager.Instance.CheckHasCarrier(ModuleName.CarrierRobot, 0);                    break;                case TaskType.Place:                    ret = CarrierManager.Instance.CheckNoCarrier(ModuleName.CarrierRobot, 0);                    break;            }            if (ret && _task != TaskType.None)            {                LogTaskDone(_task, "");                _task = TaskType.None;            }            return ret;        }    }}
 |