|
@@ -47,12 +47,13 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
private N2PurgeModeEnum _currentPhase;
|
|
private N2PurgeModeEnum _currentPhase;
|
|
|
private double _manualPhase2StabilityTime = 0;
|
|
private double _manualPhase2StabilityTime = 0;
|
|
|
private double _manualPhase4StabilityTime = 0;
|
|
private double _manualPhase4StabilityTime = 0;
|
|
|
-
|
|
|
|
|
private bool _enableAbortN2purge = true;
|
|
private bool _enableAbortN2purge = true;
|
|
|
|
|
|
|
|
private int _phase1CycleCount = 0;
|
|
private int _phase1CycleCount = 0;
|
|
|
private int _phase1CycleCountSC = 0;
|
|
private int _phase1CycleCountSC = 0;
|
|
|
private bool _canSwitchToPhase2 = true;
|
|
private bool _canSwitchToPhase2 = true;
|
|
|
|
|
+ private FilterChecker _filterCheckerTank1 = new FilterChecker();
|
|
|
|
|
+ private FilterChecker _filterCheckerTank2 = new FilterChecker();
|
|
|
|
|
|
|
|
private Dictionary<string, Stopwatch> _allTimeDict = new Dictionary<string, Stopwatch>();
|
|
private Dictionary<string, Stopwatch> _allTimeDict = new Dictionary<string, Stopwatch>();
|
|
|
private void InitN2PurgeData()
|
|
private void InitN2PurgeData()
|
|
@@ -82,6 +83,9 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
var enumCurrentPhase = (N2PurgeModeEnum)Enum.Parse(typeof(N2PurgeModeEnum), currentPhase);
|
|
var enumCurrentPhase = (N2PurgeModeEnum)Enum.Parse(typeof(N2PurgeModeEnum), currentPhase);
|
|
|
_currentPhase = enumCurrentPhase;
|
|
_currentPhase = enumCurrentPhase;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ _filterCheckerTank1.CheckInterval = 1;
|
|
|
|
|
+ _filterCheckerTank2.CheckInterval = 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void InitN2PurgeConfigData()
|
|
private void InitN2PurgeConfigData()
|
|
@@ -136,9 +140,8 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
}
|
|
}
|
|
|
private void MonitorTank1LeakAgeExec()
|
|
private void MonitorTank1LeakAgeExec()
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
- tank1_TRIG.CLK = SensorHCDTANKH != null && SensorHCDTANKH.Value;
|
|
|
|
|
- if (tank1_TRIG.Q)
|
|
|
|
|
|
|
+ _filterCheckerTank1.Monitor(SensorHCDTANKH != null && SensorHCDTANKH.Value);
|
|
|
|
|
+ if (_filterCheckerTank1.Trig)
|
|
|
{
|
|
{
|
|
|
LOG.Info($"SensorHCDTANKH trigger:{SensorHCDTANKH.Value}");
|
|
LOG.Info($"SensorHCDTANKH trigger:{SensorHCDTANKH.Value}");
|
|
|
SetHREFEnable(new object[1] { false });
|
|
SetHREFEnable(new object[1] { false });
|
|
@@ -175,9 +178,8 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
}
|
|
}
|
|
|
private void MonitorTank2LeakAgeExec()
|
|
private void MonitorTank2LeakAgeExec()
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
- tank2_TRIG.CLK = SensorCSOURCETANKH != null && SensorCSOURCETANKH.Value;
|
|
|
|
|
- if (tank2_TRIG.Q)
|
|
|
|
|
|
|
+ _filterCheckerTank2.Monitor(SensorCSOURCETANKH != null && SensorCSOURCETANKH.Value);
|
|
|
|
|
+ if (_filterCheckerTank2.Trig)
|
|
|
{
|
|
{
|
|
|
LOG.Info($"SensorCSOURCETANKH trigger:{SensorCSOURCETANKH.Value}");
|
|
LOG.Info($"SensorCSOURCETANKH trigger:{SensorCSOURCETANKH.Value}");
|
|
|
SetCREFEnable(new object[1] { false });
|
|
SetCREFEnable(new object[1] { false });
|
|
@@ -768,7 +770,7 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
var time = (float)SC.GetValue<double>("PM1.N2Purge.O2DetectorFOUPToFOUPTime");
|
|
var time = (float)SC.GetValue<double>("PM1.N2Purge.O2DetectorFOUPToFOUPTime");
|
|
|
TrigN2PurgeExchangeFOUPTOFOUPWaitTime.SetAOTrigger(time, out _);
|
|
TrigN2PurgeExchangeFOUPTOFOUPWaitTime.SetAOTrigger(time, out _);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
SetN2PurgeModePhase(n2PurgeModeEnum);
|
|
SetN2PurgeModePhase(n2PurgeModeEnum);
|
|
|
//这2个SV下发值应该根据什么阶段下发什么值
|
|
//这2个SV下发值应该根据什么阶段下发什么值
|
|
|
if (n2PurgeModeEnum == N2PurgeModeEnum.WaferCharge.ToString())
|
|
if (n2PurgeModeEnum == N2PurgeModeEnum.WaferCharge.ToString())
|