Browse Source

Revise DIReplen concurrency bug;

niuyx 1 month ago
parent
commit
77c816b572

+ 23 - 6
CyberX8_RT/Devices/Reservoir/CompactMembranReservoirDevice.cs

@@ -276,6 +276,10 @@ namespace CyberX8_RT.Devices.Reservoir
         /// 是否有其他DIReplen的警告
         /// </summary>
         private bool _isOtherDIReplenWarnOn = false;
+        /// <summary>
+        /// Facility DIReplen Off Warning
+        /// </summary>
+        private bool _isTotalDIReplenWarnOn = false;
         #endregion
 
         #region 属性
@@ -893,11 +897,19 @@ namespace CyberX8_RT.Devices.Reservoir
         /// <returns></returns>
         public bool CheckPreDiReplenCondition()
         {
-            //if (!CheckFacilitiesDiReplenStatus())
-            //{
-            //    LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, "Facilities DiReplen is Off");
-            //    return false;
-            //}
+            if (!CheckFacilitiesDiReplenStatus())
+            {
+                if (!_isTotalDIReplenWarnOn)
+                {
+                    _isTotalDIReplenWarnOn = true;
+                    LOG.WriteLog(eEvent.WARN_RESERVOIR, Module, "Facilities DiReplen is Off");
+                }
+                return false;
+            }
+            else
+            {
+                _isTotalDIReplenWarnOn = false;
+            }
             SafetyDevice safetyDevice = DEVICE.GetDevice<SafetyDevice>("Safety");
             if (safetyDevice != null && safetyDevice.SafetyData.ReservoirHighLevel)
             {
@@ -2557,7 +2569,12 @@ namespace CyberX8_RT.Devices.Reservoir
                 if (ReservoirData.ANSampleFlow) ANSampleOff("", null);
                 if (ReservoirData.CASampleFlow) CASampleOff("", null);
             }
-
+            //DIReplen总阀未开关闭槽体DIReplen;未初始化关闭槽体DIReplen
+            if (!systemFacility.DIReplenEnable || (reservoirEntity == null || !reservoirEntity.IsInitialized))
+            {
+                if (_reservoirData.ANDiReplen) ANDiReplenOff("", null);
+                if (_reservoirData.CADiReplen) CADiReplenOff("", null);
+            }
             if (reservoirEntity == null || !reservoirEntity.IsInitialized)
             {
                 if (_reservoirData.ANDiReplen) ANDiReplenOff("", null);

+ 25 - 7
CyberX8_RT/Devices/Reservoir/StandardHotReservoirDevice.cs

@@ -237,6 +237,10 @@ namespace CyberX8_RT.Devices.Reservoir
         /// 是否有其他DIReplen的警告
         /// </summary>
         private bool _isOtherDIReplenWarnOn = false;
+        /// <summary>
+        /// Facility DIReplen Off Warning
+        /// </summary>
+        private bool _isTotalDIReplenWarnOn = false;
         #endregion
 
         #region 属性
@@ -416,11 +420,17 @@ namespace CyberX8_RT.Devices.Reservoir
             WaterLevelMonitor();
             //TC SafeCheck
             TCSafeCheck();
-         
+
+            //DIReplen总阀未开关闭槽体DIReplen;未初始化关闭槽体DIReplen
             ReservoirEntity reservoirEntity = Singleton<RouteManager>.Instance.GetModule<ReservoirEntity>(Module);
-            if (reservoirEntity == null || !reservoirEntity.IsInitialized)
+            SystemFacilities systemFacility = DEVICE.GetDevice<SystemFacilities>("System.Facilities");
+            if (!systemFacility.DIReplenEnable || (reservoirEntity == null || !reservoirEntity.IsInitialized))
             {
                 if (IsDireplenOn) DIReplenOff("", null);
+            }
+            
+            if (reservoirEntity == null || !reservoirEntity.IsInitialized)
+            {
                 return true;
             }
             //DIReplen
@@ -1394,11 +1404,19 @@ namespace CyberX8_RT.Devices.Reservoir
         /// <returns></returns>
         public bool CheckPreDiReplenCondition()
         {
-            //if (!CheckFacilitiesDiReplenStatus())
-            //{
-            //    LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, "Facilities DiReplen is Off");
-            //    return false;
-            //}
+            if (!CheckFacilitiesDiReplenStatus())
+            {
+                if (!_isTotalDIReplenWarnOn)
+                {
+                    _isTotalDIReplenWarnOn = true;
+                    LOG.WriteLog(eEvent.WARN_RESERVOIR, Module, "Facilities DiReplen is Off");
+                }
+                return false;
+            }
+            else
+            {
+                _isTotalDIReplenWarnOn = false;
+            }
             SafetyDevice safetyDevice = DEVICE.GetDevice<SafetyDevice>("Safety");
             if (safetyDevice != null && safetyDevice.SafetyData.ReservoirHighLevel)
             {