using System; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using VirgoRT.Devices; namespace VirgoRT.Modules.PMs { class TemperatureControlRoutine : PMRoutineBase, IRoutine { private enum TCSequence { kCheckTemperature, kEnd } private int _checkSubstrateTempTimeout = 60; private double _TargetTemp = 0.0f; private double _OffsetTemp = 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"); _OffsetTemp = SC.GetValue($"{Module}.Chiller.ChillerTemperatureOffset"); Notify($"开始, 目标 {_TargetTemp} ℃, 偏移值 { _OffsetTemp} ℃"); return Result.RUN; } catch { return Result.FAIL; } } public Result Monitor() { try { if (SC.GetValue($"{Module}.Chiller.EnableChiller")) { CheckCoolantTemp((int)TCSequence.kCheckTemperature, _TargetTemp, _OffsetTemp, _checkSubstrateTempTimeout, _tolerance); } else { 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() { } } }