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; using Aitex.Sorter.Common; 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($"{Module}.HomeTimeout") * 1000; return Runner.Start(Module, Name); } public RState Monitor() { Runner.Delay(HomeStep.kLidDelay, 500) .Run(HomeStep.kRobot, HomeRobot, CheckRobotReady, _robotHomingTimeout) .Delay(HomeStep.kRobotDelay, 500) .Run(HomeStep.kSlitDoor, HomeSlitDoor, CheckSlitDoorReady, _slitDoorHomingTimeout) .Delay(HomeStep.kSlitDoorDelay, 500) .Run(HomeStep.kPump, HomePump, CheckPumpReady, _pumpHomingTimeout) .Delay(HomeStep.kPumpDelay, 500) //.Run(HomeStep.kATMSwitch, HomePumpDown, CheckATMSwitchReady, _pumpDownHomingTimeout) .End(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 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() { } } }