| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | using Aitex.Core.RT.Routine;using Aitex.Core.RT.SCCore;using Venus_RT.Devices;using MECF.Framework.Common.Routine;using MECF.Framework.Common.Equipment;using Venus_Core;using Aitex.Core.RT.Log;using Venus_RT.Modules.PMs;namespace Venus_RT.Modules.TM{    class MFHomeRoutine : ModuleRoutineBase, IRoutine    {        private enum HomeStep        {            kLidDelay,            kRobot,            kRobotDelay,            kSlitDoor,            kSlitDoorDelay,            kPump,            kPumpDelay,            kATMSwitch,            kEnd,        }        private int _robotHomingTimeout = 120*1000;        private int _slitDoorHomingTimeout = 20 * 1000;        private int _pumpHomingTimeout = 120 * 1000;        private int _pumpDownHomingTimeout = 600 * 1000;        private bool _TMHomeRBFlag = false;        private readonly JetTM _JetTM;        private readonly ITransferRobot _robot;        private readonly MFPumpRoutine _pumpDownRoutine;        public int currentStepNo;        public MFHomeRoutine(JetTM jetTM, ITransferRobot robot, MFPumpRoutine pumpDownRoutine) : base(ModuleName.TM)        {            _JetTM = jetTM;            _robot = robot;            _pumpDownRoutine= pumpDownRoutine;            Name = "TM Home";        }        public RState Start(params object[] objs)        {            if (objs.Length>0 && objs[0].ToString() == "TMRobot")                _TMHomeRBFlag = true;            currentStepNo = 0;            if (!_JetTM.CheckLidClosed(Module))            {                Stop($"TM Lid Not Closed");                return RState.Failed;            }            Reset();            _robotHomingTimeout = SC.GetValue<int>($"{Module}.HomeTimeout") * 1000;                       return Runner.Start(Module, Name);        }        public RState Monitor()        {            Runner.Delay((int)HomeStep.kLidDelay,500)                  .Run((int)HomeStep.kRobot,      HomeRobot,     CheckRobotReady,       _robotHomingTimeout)                  .Delay((int)HomeStep.kRobotDelay,500)                  .Run((int)HomeStep.kSlitDoor,   HomeSlitDoor,  CheckSlitDoorReady,    _slitDoorHomingTimeout)                  .Delay((int)HomeStep.kSlitDoorDelay,500)                  .Run((int)HomeStep.kPump,       HomePump,      CheckPumpReady,        _pumpHomingTimeout)                  .Delay((int)HomeStep.kPumpDelay,500)                  .Run((int)HomeStep.kATMSwitch,  HomePumpDown,  CheckATMSwitchReady,   _pumpDownHomingTimeout)                  .End((int)HomeStep.kEnd,      NullFun,    _delay_50ms);            return Runner.Status;        }        private bool HomeRobot()        {            currentStepNo = 1;            return _robot.Home();        }        private bool CheckRobotReady()        {            return _robot.Status == RState.End;        }        private bool HomeSlitDoor()        {            _JetTM.HomeSlitDoor();            currentStepNo = 2;          return  _JetTM.CloseAllSlitDoor();        }        private bool CheckSlitDoorReady()        {            if (_JetTM.AllPMSlitDoorClosed && _JetTM.IsLLASlitDoorClosed && _JetTM.IsLLBSlitDoorClosed)            {                return true;            }            else            {                return false;            }        }        private bool HomePump()        {            if (RouteManager.IsATMMode || _TMHomeRBFlag)                return true;            currentStepNo = 3;            if ((bool)_JetTM.TMPumpIsRunning)            {                return true;            }            return _JetTM.TurnTMPump(true);        }        private bool CheckPumpReady()        {            if (RouteManager.IsATMMode || _TMHomeRBFlag)                return true;            if ((bool)_JetTM.TMPumpIsRunning)            {                return true;            }            else            {                return false;            }        }        private bool HomePumpDown()        {            if (RouteManager.IsATMMode || _TMHomeRBFlag)                return true;            currentStepNo = 4;            return _pumpDownRoutine.Start() == RState.Running;        }        private bool CheckATMSwitchReady()        {            if (RouteManager.IsATMMode || _TMHomeRBFlag)                return true;            var status = _pumpDownRoutine.Monitor();            if (_JetTM.IsTMVac && status == RState.End)            {                _JetTM.TurnSoftPumpValve(ModuleName.TM, false);                _JetTM.TurnFastPumpValve(ModuleName.TM, false);                return true;            }            else            {                //_pumpDownRoutine.Monitor();                return false;            }        }        public void Abort()        {        }    }}
 |