|
@@ -57,7 +57,7 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
+
|
|
|
var selectN2PurgeMode = SC.ContainsItem("PM1.SelectN2PurgeMode") ? SC.GetStringValue("PM1.SelectN2PurgeMode") : "";
|
|
|
if (!string.IsNullOrEmpty(selectN2PurgeMode))
|
|
|
{
|
|
@@ -98,11 +98,11 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
{"Foup1",()=> GetN2PurgeFoup1Status()},
|
|
|
{"Foup2",()=> GetN2PurgeFoup2Status()},
|
|
|
|
|
|
- {N2PurgeModeEnum.Manual_phase1.ToString(),()=> GetN2PurgePhase1() },
|
|
|
- {N2PurgeModeEnum.Manual_phase2.ToString(),()=> GetN2PurgePhase2()},
|
|
|
- {N2PurgeModeEnum.Manual_phase3.ToString(),()=> GetN2PurgePhase3() },
|
|
|
- {N2PurgeModeEnum.Manual_phase4.ToString(),()=> GetN2PurgePhase4() },
|
|
|
- {N2PurgeModeEnum.Manual_phase5.ToString(),()=> GetN2PurgePhase5() },
|
|
|
+ {N2PurgeModeEnum.Manual_phase1.ToString(),()=> CheckN2PurgePhase1(out float o2Value) },
|
|
|
+ {N2PurgeModeEnum.Manual_phase2.ToString(),()=> CheckN2PurgePhase2(out float o2Value)},
|
|
|
+ {N2PurgeModeEnum.Manual_phase3.ToString(),()=> CheckN2PurgePhase3(out float o2Value) },
|
|
|
+ {N2PurgeModeEnum.Manual_phase4.ToString(),()=> CheckN2PurgePhase4(out float o2Value) },
|
|
|
+ {N2PurgeModeEnum.Manual_phase5.ToString(),()=> CheckN2PurgePhase5(out float o2Value) },
|
|
|
|
|
|
};
|
|
|
_allTimeDict = new Dictionary<string, Stopwatch>()
|
|
@@ -135,9 +135,9 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
{
|
|
|
if (_currentPhase == N2PurgeModeEnum.Manual_phase1)
|
|
|
{
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase2.ToString()].Invoke() && _canSwitchToPhase2)
|
|
|
+ if (CheckN2PurgePhase2(out float o2Value) && _canSwitchToPhase2)
|
|
|
{
|
|
|
- LOG.Info($" N2PurgeMode Trigger from Manual_phase1 to Manual_phase2,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($" N2PurgeMode Trigger from Manual_phase1 to Manual_phase2,O2:{o2Value}");
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase2.ToString());
|
|
|
}
|
|
|
}
|
|
@@ -150,9 +150,9 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
var second = _allTimeDict[N2PurgeModeEnum.Manual_phase2.ToString()].Elapsed.TotalSeconds;
|
|
|
if (second >= _manualPhase2StabilityTime)
|
|
|
{
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase1.ToString()].Invoke())
|
|
|
+ if (CheckN2PurgePhase1(out float o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger Manual_phase1 was triggered {_manualPhase2StabilityTime} seconds later,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger Manual_phase1 was triggered {second} seconds later,O2:{o2Value}");
|
|
|
N2PurgeFaileAlarm.Set();
|
|
|
|
|
|
_allTimeDict[N2PurgeModeEnum.Manual_phase2.ToString()].Restart();
|
|
@@ -162,9 +162,9 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase1.ToString());
|
|
|
|
|
|
}
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase2.ToString()].Invoke())
|
|
|
+ if (CheckN2PurgePhase2(out o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger Hold Manual_phase2 was triggered {_manualPhase2StabilityTime} seconds later,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger Hold Manual_phase2 was triggered {second} seconds later,O2:{o2Value}");
|
|
|
_allTimeDict[N2PurgeModeEnum.Manual_phase2.ToString()].Restart();
|
|
|
_allTimeDict[N2PurgeModeEnum.Manual_phase2.ToString()].Stop();
|
|
|
_canSwitchToPhase2 = false;
|
|
@@ -174,14 +174,14 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase1.ToString()].Invoke())
|
|
|
+ if (CheckN2PurgePhase1(out float o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase1,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase1,O2:{o2Value}");
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase1.ToString());
|
|
|
}
|
|
|
- else if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase2.ToString()].Invoke())
|
|
|
+ else if (CheckN2PurgePhase2(out o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase2,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase2,O2:{o2Value}");
|
|
|
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase2.ToString());
|
|
|
|
|
@@ -193,73 +193,72 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
|
|
|
if (_currentPhase == N2PurgeModeEnum.Manual_phase3)
|
|
|
{
|
|
|
+ var checkResult = CheckN2PurgePhase4(out float o2Value);
|
|
|
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase4.ToString()].Invoke())
|
|
|
+ if (!_allTimeDict[N2PurgeModeEnum.Manual_phase4.ToString()].IsRunning)
|
|
|
{
|
|
|
- if (!_allTimeDict[N2PurgeModeEnum.Manual_phase4.ToString()].IsRunning)
|
|
|
- {
|
|
|
- _allTimeDict[N2PurgeModeEnum.Manual_phase4.ToString()].Restart();
|
|
|
- }
|
|
|
- var second = _allTimeDict[N2PurgeModeEnum.Manual_phase4.ToString()].Elapsed.TotalSeconds;
|
|
|
-
|
|
|
- if (second >= _manualPhase4StabilityTime)
|
|
|
- {
|
|
|
- LOG.Info($"N2PurgeMode Trigger from Manual_phase3 to Manual_phase4 is triggered {_manualPhase4StabilityTime} seconds later,O2:{GetO2Density()}");
|
|
|
+ _allTimeDict[N2PurgeModeEnum.Manual_phase4.ToString()].Restart();
|
|
|
+ }
|
|
|
+ var second = _allTimeDict[N2PurgeModeEnum.Manual_phase4.ToString()].Elapsed.TotalSeconds;
|
|
|
|
|
|
- SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase4.ToString());
|
|
|
- _allTimeDict[N2PurgeModeEnum.Manual_phase4.ToString()].Stop();
|
|
|
- }
|
|
|
+ if (second >= _manualPhase4StabilityTime && checkResult)
|
|
|
+ {
|
|
|
+ LOG.Info($"N2PurgeMode Trigger from Manual_phase3 to Manual_phase4 is triggered {second} seconds later,O2:{o2Value}");
|
|
|
|
|
|
+ SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase4.ToString());
|
|
|
+ _allTimeDict[N2PurgeModeEnum.Manual_phase2.ToString()].Restart();
|
|
|
+ _allTimeDict[N2PurgeModeEnum.Manual_phase2.ToString()].Stop();
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
else if (_currentPhase == N2PurgeModeEnum.Manual_phase4)
|
|
|
{
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase5.ToString()].Invoke())
|
|
|
+ if (CheckN2PurgePhase5(out float o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger from Manual_phase4 to Manual_phase5,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger from Manual_phase4 to Manual_phase5,O2:{o2Value}");
|
|
|
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase5.ToString());
|
|
|
}
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase3.ToString()].Invoke())
|
|
|
- {
|
|
|
- LOG.Info($"N2PurgeMode Trigger from Manual_phase4 to Manual_phase3,O2:{GetO2Density()}");
|
|
|
+ //if (CheckN2PurgePhase3(out o2Value))
|
|
|
+ //{
|
|
|
+ // LOG.Info($"N2PurgeMode Trigger from Manual_phase4 to Manual_phase3,O2:{o2Value}");
|
|
|
|
|
|
- SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase3.ToString());
|
|
|
- }
|
|
|
+ // SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase3.ToString());
|
|
|
+ //}
|
|
|
|
|
|
}
|
|
|
else if (_currentPhase == N2PurgeModeEnum.Manual_phase5)
|
|
|
{
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase4.ToString()].Invoke())
|
|
|
+ if (CheckN2PurgePhase4(out float o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger from Manual_phase5 to Manual_phase4,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger from Manual_phase5 to Manual_phase4,O2:{o2Value}");
|
|
|
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase4.ToString());
|
|
|
}
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase3.ToString()].Invoke())
|
|
|
- {
|
|
|
- LOG.Info($"N2PurgeMode Trigger from Manual_phase5 to Manual_phase3,O2:{GetO2Density()}");
|
|
|
+ //if (CheckN2PurgePhase3(out o2Value))
|
|
|
+ //{
|
|
|
+ // LOG.Info($"N2PurgeMode Trigger from Manual_phase5 to Manual_phase3,O2:{o2Value}");
|
|
|
|
|
|
- SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase3.ToString());
|
|
|
- }
|
|
|
+ // SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase3.ToString());
|
|
|
+ //}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase3.ToString()].Invoke())
|
|
|
+ if (CheckN2PurgePhase3(out float o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase3,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase3,O2:{o2Value}");
|
|
|
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase3.ToString());
|
|
|
}
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase5.ToString()].Invoke())
|
|
|
+ if (CheckN2PurgePhase5(out o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase5,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase5,O2:{o2Value}");
|
|
|
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase5.ToString());
|
|
|
}
|
|
|
- if (_n2PurgeSequenceStatus[N2PurgeModeEnum.Manual_phase4.ToString()].Invoke())
|
|
|
+ if (CheckN2PurgePhase4(out o2Value))
|
|
|
{
|
|
|
- LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase4,O2:{GetO2Density()}");
|
|
|
+ LOG.Info($"N2PurgeMode Trigger Directly triggered Manual_phase4,O2:{o2Value}");
|
|
|
|
|
|
SetN2PurgeValveData(N2PurgeModeEnum.Manual_phase4.ToString());
|
|
|
}
|
|
@@ -337,7 +336,7 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
item.Value.Stop();
|
|
|
item.Value.Reset();
|
|
|
}
|
|
|
-
|
|
|
+ _canSwitchToPhase2 = true;
|
|
|
}
|
|
|
private void SetN2PurgeValveData(string mode, string msg = "")
|
|
|
{
|
|
@@ -431,30 +430,35 @@ namespace FurnaceRT.Equipments.PMs
|
|
|
/// 获取当前O2浓度
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
-
|
|
|
+
|
|
|
private float GetO2Density()
|
|
|
{
|
|
|
return IO.AI[$"PM1.AI_O2Concentration"].FloatValue;
|
|
|
}
|
|
|
- private bool GetN2PurgePhase1()
|
|
|
+ private bool CheckN2PurgePhase1(out float o2Value)
|
|
|
{
|
|
|
- return ((int)GetO2Density() >= _n2PurgeData) && GetLADoorOpenStatus();
|
|
|
+ o2Value = GetO2Density();
|
|
|
+ return ((int)o2Value >= _n2PurgeData) && GetLADoorOpenStatus();
|
|
|
}
|
|
|
- private bool GetN2PurgePhase2()
|
|
|
+ private bool CheckN2PurgePhase2(out float o2Value)
|
|
|
{
|
|
|
- return ((int)GetO2Density() < _n2PurgeData) && GetLADoorOpenStatus();
|
|
|
+ o2Value = GetO2Density();
|
|
|
+ return (o2Value < _n2PurgeData) && GetLADoorOpenStatus();
|
|
|
}
|
|
|
- private bool GetN2PurgePhase3()
|
|
|
+ private bool CheckN2PurgePhase3(out float o2Value)
|
|
|
{
|
|
|
- return ((int)GetO2Density()) < _n2ToAirData && GetLADoorOpenStatus();
|
|
|
+ o2Value = GetO2Density();
|
|
|
+ return ((int)o2Value) < _n2ToAirData && GetLADoorOpenStatus();
|
|
|
}
|
|
|
- private bool GetN2PurgePhase5()
|
|
|
+ private bool CheckN2PurgePhase5(out float o2Value)
|
|
|
{
|
|
|
- return ((int)GetO2Density()) >= _n2ToAirData && !GetLADoorOpenStatus();
|
|
|
+ o2Value = GetO2Density();
|
|
|
+ return ((int)o2Value) >= _n2ToAirData && !GetLADoorOpenStatus();
|
|
|
}
|
|
|
- private bool GetN2PurgePhase4()
|
|
|
+ private bool CheckN2PurgePhase4(out float o2Value)
|
|
|
{
|
|
|
- return ((int)GetO2Density()) >= _n2ToAirData && GetLADoorOpenStatus();
|
|
|
+ o2Value = GetO2Density();
|
|
|
+ return ((int)o2Value) >= _n2ToAirData && GetLADoorOpenStatus();
|
|
|
}
|
|
|
private bool GetN2PurgeAIRTo20PPMStatus()
|
|
|
{
|