Browse Source

优化N2purge 时间触发

JET-JJY 3 weeks ago
parent
commit
7618563eb4
1 changed files with 26 additions and 22 deletions
  1. 26 22
      Furnace/FurnaceRT/Equipments/PMs/PMN2Purge.cs

+ 26 - 22
Furnace/FurnaceRT/Equipments/PMs/PMN2Purge.cs

@@ -44,6 +44,7 @@ namespace FurnaceRT.Equipments.PMs
 
             DATA.Subscribe($"{Module}.N2PurgeMode", () => SC.ContainsItem("PM1.SelectN2PurgeMode") ? SC.GetStringValue("PM1.SelectN2PurgeMode") : "");
         }
+
         private void InitN2PurgeConfigData()
         {
             _n2PurgeData = SC.ContainsItem($"System.N2PurgeData") ? SC.GetValue<double>("System.N2PurgeData") : 20;
@@ -110,36 +111,39 @@ namespace FurnaceRT.Equipments.PMs
             }
 
         }
-
-        private void ProcessPhase(R_TRIG r_TRIG, string modeKey)
+        bool CheckConditionInTime(string modeKey, int millisecondsTimeout, Func<bool> condition)
         {
-            if (_n2PurgeSequenceStatus[modeKey].Invoke())
+            var stopwatch = _allTimeDict[modeKey];
+            if (!_allTimeDict[modeKey].IsRunning)
             {
-                if (!_allTimeDict[modeKey].IsRunning)
-                {
-                    _allTimeDict[modeKey].Restart();
-                }
-                r_TRIG.CLK = _allTimeDict[modeKey].ElapsedMilliseconds > _stabilityTime * 1000;
-                if (r_TRIG.Q)
+                _allTimeDict[modeKey].Restart();
+            }
+            while (stopwatch.ElapsedMilliseconds < millisecondsTimeout)
+            {
+                if (!condition())
                 {
-
-                    if (_n2PurgeSequenceStatus[modeKey].Invoke())
-                    {
-                        LOG.Info($"N2PurgeMode Trigger {modeKey}!,O2:{GetO2Density()}");
-                        SetN2PurgeValveData(modeKey);
-                    }
+                    _allTimeDict[modeKey].Stop();
+                    _allTimeDict[modeKey].Reset();
+                    return false;
                 }
-
-
             }
-            else
+            if (stopwatch.ElapsedMilliseconds > millisecondsTimeout)
             {
                 _allTimeDict[modeKey].Stop();
                 _allTimeDict[modeKey].Reset();
             }
-
-
-
+            return true;
+        }
+        private void ProcessPhase(R_TRIG r_TRIG, string modeKey)
+        {
+            r_TRIG.CLK = CheckConditionInTime(modeKey, (int)3 * 1000, () => _n2PurgeSequenceStatus[modeKey].Invoke());
+            if (r_TRIG.Q)
+            {
+                LOG.Info($"N2PurgeMode Trigger {modeKey}!,O2:{GetO2Density()},time:{_allTimeDict[modeKey].ElapsedMilliseconds}");
+                SetN2PurgeValveData(modeKey);
+                _allTimeDict[modeKey].Stop();
+                _allTimeDict[modeKey].Reset();
+            }
         }
         public void RestAllN2PrugeRD()
         {
@@ -263,7 +267,7 @@ namespace FurnaceRT.Equipments.PMs
         }
         private bool GetN2PurgePhase4()
         {
-            return GetO2Density() >= _n2ToAirData ;
+            return GetO2Density() >= _n2ToAirData;
         }
         private bool GetN2PurgeAIRTo20PPMStatus()
         {