using System; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using Virgo_DRT.Devices; namespace Virgo_DRT.Modules.PMs { class TemperatureControlRoutine : PMRoutineBase, IRoutine { private enum TCSequence { kCheckTemperature, kEnd } private int _checkSubstrateTempTimeout = 60; private double _TargetTemp = 0.0f; private double _tolerance; public TemperatureControlRoutine(JetPM chamber) : base(chamber) { Name = "PreHeat"; bUINotify = true; } public void Terminate() { } public Result Start(params object[] objs) { try { Reset(); _TargetTemp = (double)objs[0]; _checkSubstrateTempTimeout = SC.GetValue($"{Module}.CheckSubstrateTempTimeout"); _tolerance = SC.GetValue($"System.MaxTemperatureToleranceToTarget"); Notify($"开始, 目标 {_TargetTemp} ℃"); return Result.RUN; } catch { return Result.FAIL; } } public Result Monitor() { try { CheckSubstrateTemp((int)TCSequence.kCheckTemperature, _TargetTemp, _checkSubstrateTempTimeout, _tolerance); End((int)TCSequence.kEnd); } catch (RoutineBreakException) { return Result.RUN; } catch (RoutineFaildException) { Notify("出错 "); return Result.FAIL; } catch (System.Exception ex) { Stop(ex.Message); return Result.FAIL; } Notify("结束"); return Result.DONE; } public override void Abort() { } } }