Sic05/Modules/Mainframe/UnLoads/UnLoadServoToRoutine.cs

165 lines
4.9 KiB
C#

using System;
using Aitex.Core.RT.Device;
using Aitex.Core.RT.Event;
using Aitex.Core.RT.Routine;
using Aitex.Core.RT.SCCore;
using MECF.Framework.Common.Equipment;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
using Mainframe.TMs;
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.UnLoad;
namespace Mainframe.UnLoads
{
public class UnLoadServoToRoutine : UnLoadBaseRoutine
{
enum RoutineStep
{
CheckForelinePressure,
RequestPump,
RequestPumpDelay,
SlowPump,
CloseSlowValve,
FastPump,
PumpDelay,
CloseFastValve,
Delay,
SlowVent,
CloseSlowVentValve,
TimeDelay1,
}
private double _pumpSwitchPressure;
private int _slowPumpTimeout = 100;
private int _fastPumpTimeout = 100;
private int _slowVentTimeout = 100;
private bool _useSettingValue;
private double _targetPressure;
private bool _needPump = false;
public void Init(double pressure)
{
_targetPressure = pressure;
_useSettingValue = true;
}
public UnLoadServoToRoutine(ModuleName module)
{
Module = module.ToString();
Name = "UnLoadServoTo";
}
public override Result Start(params object[] objs)
{
Reset();
if (!_useSettingValue)
{
_targetPressure = SC.GetConfigItem("TM.PressureBalance.BalancePressure").DoubleValue;
}
string reason;
if (!UnLoadDevice.SetFastVentValve(false, out reason) || !UnLoadDevice.SetSlowVentValve(false, out reason))
{
EV.PostAlarmLog(Module, $"Can not turn off valves, {reason}");
return Result.FAIL;
}
if (!UnLoadDevice.SetFastPumpValve(false, out reason) || !UnLoadDevice.SetSlowPumpValve(false, out reason))
{
EV.PostAlarmLog(Module, $"Can not turn off valves, {reason}");
return Result.FAIL;
}
bool isAtmMode = SC.GetValue<bool>("System.IsATMMode");
if (isAtmMode)
{
EV.PostInfoLog(Module, $"system in atm mode, {UnLoadDevice.Module} pump skipped");
return Result.DONE;
}
if (!UnLoadDevice.CheckLidClose())
{
EV.PostAlarmLog(Module, $"Can not pump, door is open");
return Result.FAIL;
}
if (!TMDevice.CheckSlitValveClose(ModuleHelper.Converter(UnLoadDevice.Module)))
{
EV.PostAlarmLog(Module, $"LoadLock Can not servo to pressure, slit valve is open");
return Result.FAIL;
}
if (Math.Abs(_targetPressure - UnLoadDevice.ChamberPressure) < SC.GetConfigItem("TM.PressureBalance.BalanceMaxDiffPressure").DoubleValue && UnLoadDevice.CheckVacuum())
{
return Result.DONE;
}
_needPump = UnLoadDevice.ChamberPressure > _targetPressure;
Notify("Start");
return Result.RUN;
}
public override Result Monitor()
{
try
{
TimeDelay((int)RoutineStep.TimeDelay1, 1);
if (_needPump)
{
//需要调节的压力低于打开快抽的压力
if (_targetPressure < _pumpSwitchPressure)
{
SlowPump((int)RoutineStep.SlowPump, _pumpSwitchPressure, _slowPumpTimeout);
FastPump((int)RoutineStep.FastPump, _targetPressure, _fastPumpTimeout);
CloseFastPumpValve((int)RoutineStep.CloseFastValve);
CloseSlowPumpValve((int)RoutineStep.CloseSlowValve);
}
else
{
SlowPump((int)RoutineStep.SlowPump, _targetPressure, _slowPumpTimeout);
CloseSlowPumpValve((int)RoutineStep.CloseSlowValve);
}
}
else
{
SlowVent((int)RoutineStep.SlowVent, _targetPressure, _slowVentTimeout);
CloseVentValve((int)RoutineStep.CloseSlowVentValve);
}
}
catch (RoutineBreakException)
{
return Result.RUN;
}
catch (RoutineFaildException)
{
return Result.FAIL;
}
Notify("Finished");
return Result.DONE;
}
public override void Abort()
{
UnLoadDevice.SetSlowPumpValve(false, out _);
UnLoadDevice.SetFastPumpValve(false, out _);
}
}
}