using System; using Aitex.Core.RT.Routine; using Venus_RT.Devices; using MECF.Framework.Common.Routine; using Venus_Core; namespace Venus_RT.Modules.PMs { class PMHomeRoutine : PMRoutineBase, IRoutine { enum RoutineStep { Home, End, } public PMHomeRoutine(JetPMBase chamber) : base(chamber) { Name = "PM Home"; } public RState Init() { return RState.End; } public RState Start(params object[] objs) { Reset(); return Runner.Start(Module, Name); } public RState Monitor() { Runner.Run(RoutineStep.Home, HOFs.WrapAction(_chamber.Home), IsHomed, 50000) .End(RoutineStep.End, () => { return true; }); return Runner.Status; } public void Abort() { } private bool IsHomed() { if (_chamber.ChamberType == JetChamber.Venus || _chamber.ChamberType == JetChamber.Kepler2300) { return _chamber.IsSlitDoorClosed && _chamber.LiftPinPosition == Venus_Core.MovementPosition.Down && _chamber.PVN22ValveIsOpen; } else if (_chamber.ChamberType == JetChamber.Kepler2200A || _chamber.ChamberType == JetChamber.Kepler2200B) { return _chamber.IsSlitDoorClosed && _chamber.PVN22ValveIsOpen; } else if(_chamber.ChamberType == JetChamber.VenusSE || _chamber.ChamberType == JetChamber.VenusDE) { return _chamber.IsSlitDoorClosed && _chamber.LiftPinPosition == Venus_Core.MovementPosition.Down; } return false; } } }