| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | using Aitex.Core.RT.Routine;using Aitex.Core.RT.SCCore;using VirgoRT.Devices;namespace VirgoRT.Modules.PMs{    class VentRoutine : PMRoutineBase, IRoutine    {        private enum VentSequence        {            kCloseValves,            kOpenSoftVentValve,            kOpenFastVentValve,            kVentToPrecision,            kVentDelay,            kCloseVentValve,            kEnd,            kCheckLidSignal,            kCheckSlitDoor,            kCheckThrottleValveStatus,            kCheckN2,            kOpenProcessValve,            kOpenN2Supply,            kCheckChamberPressure,            kCheckATM        }        private int _ventTime;        private int _ventTimeDelay = 1;  //执行Vent程序时(自动或手动Vent),先关闭PV2,延时2秒后打开PV3。        private int _checkATMTimeout = 90;        public VentRoutine(JetPM chamber) : base(chamber)        {            Name = "vent";            bUINotify = true;        }        public Result Start(params object[] objs)        {            // 预检查            if (CheckLid() == Result.RUN &&                CheckSlitDoor() == Result.RUN &&                CheckCDA() == Result.RUN)            {                Reset();                _chamber.CloseValves();                //_PressureTrip1 = SC.GetValue<int>($"{Module}.Pump.PressureTrip1") * 1000;                _ventTime = (int)SC.GetValue<double>($"{Module}.VentTime");                _checkATMTimeout = SC.GetValue<int>($"{Module}.CheckATMTimeout");                _ventTimeDelay = SC.GetValue<int>($"{Module}.VentTimeDelay");                Notify("Start");                return Result.RUN;            }            return Result.FAIL;        }        public Result Monitor()        {            try            {                //CheckThrottleValveFullOpen((int)VentSequence.kCheckThrottleValveStatus);                // 开阀                //OpenValve((int)VentSequence.kOpenSoftVentValve, ValveType.PURGE, true);                SetValve((int)VentSequence.kOpenProcessValve, ValveType.PROCESS, true);                // 监控压力                //CheckPressure((int)VentSequence.kCheckChamberPressure, _PressureTrip1, true, 30);                // 开阀                SetValve((int)VentSequence.kOpenFastVentValve, ValveType.FAST_VENT, true);                CheckATM2((int)VentSequence.kCheckATM, true, _checkATMTimeout);                // delay 3 seconds                TimeDelay((int)VentSequence.kVentDelay, _ventTimeDelay);                // 结束并关闭所有阀                CloseAllValve((int)VentSequence.kCloseValves, 0);                End((int)VentSequence.kEnd);            }            catch (RoutineBreakException)            {                return Result.RUN;            }            catch (RoutineFaildException)            {                //_chamber.OpenValve(ValveType.N2_SUPPLY, false);                _chamber.SetValveOnOff(ValveType.FAST_VENT, false);                _chamber.SetValveOnOff(ValveType.PURGE, false);                _chamber.SetValveOnOff(ValveType.PROCESS, false);                Notify("Error");                return Result.FAIL;            }            catch (System.Exception ex)            {                Stop(ex.Message);                return Result.FAIL;            }            Notify("Finish");            return Result.DONE;        }        public override void Abort()        {            _chamber.CloseValves();        }    }}
 |