using System; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using VirgoRT.Devices; using VirgoCommon; namespace VirgoRT.Modules.PMs { class PMPostTransferRoutine : PMRoutineBase, IRoutine { enum RoutineStep { PumpDown, SetPinDown, SetSlitDoor, SlitDoorDelay, kEnd } private int _timeout; private MovementPosition _liftPinPosition; public PMPostTransferRoutine(JetPM chamber) : base(chamber) { Name = "PostTransfer"; } public Result Start(params object[] objs) { Reset(); GetLiftPinSetting(objs); _timeout = SC.GetValue($"{Module}.PrepareTransferTimeout"); Notify("Start"); return Result.RUN; } public Result Monitor() { try { SetLiftPinPos((int)RoutineStep.SetPinDown, _liftPinPosition, _timeout); SetSlitDoor((int)RoutineStep.SetSlitDoor, false, _timeout); End((int)RoutineStep.kEnd); } catch (RoutineBreakException) { return Result.RUN; } catch (RoutineFaildException) { Notify("Error"); return Result.FAIL; } catch (Exception ex) { Stop(ex.Message); return Result.FAIL; } Notify("Finish"); return Result.DONE; } public override void Abort() { } private void GetLiftPinSetting(object[] objs) { _liftPinPosition = MovementPosition.Down; if (objs.Length >= 1 && (string)objs[0] != "Pick") { int pos = SC.GetValue($"{Module}.LiftPinPositionAfterPlace"); if (pos == 1) _liftPinPosition = MovementPosition.Middle; else if (pos == 2) _liftPinPosition = MovementPosition.Up; } } } }