Browse Source

2阶段/4阶段 添加时间判定逻辑

jiangjy 3 weeks ago
parent
commit
99195d694b

+ 14 - 0
Furnace/FurnaceRT/Config/FurnaceGemModel.xml

@@ -12098,6 +12098,7 @@
     <ECID id="3312200015" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase2.ValveAV201" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312200016" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase2.ValveAV66" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312200017" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase2.ValveSV227" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312200018" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase2.StabilityTime" value="" min="" max="" eventTrigger="" units="" description="StabilityTime" isArray="false" />
     <ECID id="3312210001" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase3.MFC51" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312210002" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase3.TrigMS501" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312210003" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase3.TrigMS502" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
@@ -12131,6 +12132,8 @@
     <ECID id="3312220014" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase4.ValveAV201" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312220015" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase4.ValveAV66" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312220016" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase4.ValveSV227" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312220017" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase4.MFC51" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312220018" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase4.StabilityTime" value="" min="" max="" eventTrigger="" units="" description="StabilityTime" isArray="false" />
     <ECID id="3312230001" valueType="Ascii" logicalName="PM1.N2Purge.N2PurgeAIRTo20PPM.ValveAV56" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312230002" valueType="Ascii" logicalName="PM1.N2Purge.N2PurgeAIRTo20PPM.ValveAV57" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312230003" valueType="Ascii" logicalName="PM1.N2Purge.N2PurgeAIRTo20PPM.ValveAV58" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
@@ -12179,6 +12182,17 @@
     <ECID id="3312270008" valueType="Ascii" logicalName="PM1.RecipeEditParameter.StepGroup.Group7" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312270009" valueType="Ascii" logicalName="PM1.RecipeEditParameter.StepGroup.Group8" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
     <ECID id="3312270010" valueType="Ascii" logicalName="PM1.RecipeEditParameter.StepGroup.Group9" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280001" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.TrigMS501" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280002" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.TrigMS520" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280003" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.TrigMS521" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280004" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.TrigMS522" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280005" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.ValveAV201" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280006" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.ValveAV202" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280007" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.ValveAV56" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280008" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.ValveAV57" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280009" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.ValveAV65" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280010" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.ValveAV66" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
+    <ECID id="3312280011" valueType="Ascii" logicalName="PM1.N2Purge.Manual_phase5.ValveSV227" value="" min="" max="" eventTrigger="" units="" description="" isArray="false" />
   </EquipmentConstants>
   <DataVariables>
     <DVID id="3003" valueType="Ascii" logicalName="PPChangeName" value="" eventTrigger="" description="Recipe change name(RCPID)" isArray="false" />

+ 21 - 5
Furnace/FurnaceRT/Config/System.sccfg

@@ -25,7 +25,6 @@
 		<config default="true" name="ZIPToDesktop" description="ZIP To Desktop" max="" min="" paramter="" tag="" unit="" type="Bool" />
 		<config default="true" name="EnableScheduleMaintenance" description="" max="" min="" paramter="" tag="" unit="" type="Bool" visible="false"/>
 		<config default="true" name="IsServiceControlMode" description="Is Service Control Mode" max="" min="" paramter="" tag="" unit="" type="Bool" />
-		<config default="60" name="StabilityTime" description="StabilityTime" max="999999" min="0" paramter="" tag="" unit="rpm" type="Double" visible="false" />
 		<config default="20" name="N2PurgeData" description="N2PurgeData" max="999999" min="0" paramter="" tag="" unit="rpm" type="Double" visible="false" />
 		<config default="185000" name="N2ToAirData" description="N2ToAirData" max="9999999" min="0" paramter="" tag="" unit="rpm" type="Double"  visible="false"/>
 		<config default="false" name="BypassInterlock" description="Bypass Interlock" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
@@ -441,7 +440,7 @@
 	<configs name="FFU" visible="false">
 		<config default="350" name="LSPEED" description="" max="9999" min="0" paramter="" tag="" unit=""  type="Double"   />
 		<config default="2500" name="HSPEED" description="" max="9999" min="0" paramter="" tag="" unit=""  type="Double"   />
-		
+
 		<configs name="FFU4">
 			<config default="2500" name="SetSpeed" description=" set speed" max="" min="" paramter="" tag="" unit=""  type="String"   />
 		</configs>
@@ -4671,7 +4670,7 @@
 			</configs>
 
 			<configs name="Manual_phase1" visible="false">
-				<config  type="Double"   default="430" max="1000" min="0"  name="MFC51"								   />
+				<config  type="Double"   default="400" max="1000" min="0"  name="MFC51"								   />
 				<config  type="Bool"   default="true"  name="ValveAV56"								   />
 				<config  type="Bool"   default="true"  name="ValveAV57"								   />
 				<config  type="Bool"   default="false" name="ValveAV65"								   />
@@ -4697,6 +4696,8 @@
 				<config  type="Bool"   default="false"  name="TrigMS520"						   />
 				<config  type="Bool"   default="false"  name="TrigMS521"						   />
 				<config  type="Bool"   default="false"  name="TrigMS522"								   />
+				<config default="60" name="StabilityTime" description="StabilityTime" max="999999" min="0" paramter="" tag="" unit="rpm" type="Double" visible="false" />
+
 			</configs>
 			<configs name="Manual_phase3" visible="false">
 				<config  type="Double"   default="400"  max="1000" min="0"  name="MFC51"								   />
@@ -4713,6 +4714,21 @@
 				<config  type="Bool"   default="true"  name="TrigMS522"								   />
 			</configs>
 			<configs name="Manual_phase4" visible="false">
+				<config  type="Double"   default="400"  max="1000" min="0"  name="MFC51"								   />
+				<config  type="Bool"   default="false"  name="ValveAV56"								   />
+				<config  type="Bool"   default="false"  name="ValveAV57"								   />
+				<config  type="Bool"   default="true" name="ValveAV65"								   />
+				<config  type="Bool"   default="true" name="ValveAV66"								   />
+				<config  type="Bool"   default="true" name="ValveSV227"								   />
+				<config  type="Bool"   default="true" name="ValveAV202"								   />
+				<config  type="Bool"   default="true" name="ValveAV201"								   />
+				<config  type="Bool"   default="true" name="TrigMS501"								   />
+				<config  type="Bool"   default="true"  name="TrigMS520"						   />
+				<config  type="Bool"   default="true" name="TrigMS521"						   />
+				<config  type="Bool"   default="true"  name="TrigMS522"								   />
+				<config default="60" name="StabilityTime" description="StabilityTime" max="999999" min="0" paramter="" tag="" unit="rpm" type="Double" visible="false" />
+			</configs>
+			<configs name="Manual_phase5" visible="false">
 				<config  type="Bool"   default="false"  name="ValveAV56"								   />
 				<config  type="Bool"   default="false"  name="ValveAV57"								   />
 				<config  type="Bool"   default="true" name="ValveAV65"								   />
@@ -5475,8 +5491,8 @@
       <config default="1" name="AO_Unit4CH16EnableIn" description="Unit4-CH16" paramter="" tag="" unit=""  max="1" min="0" type="Integer" visible="true" />
     </configs>-->
 		<configs name="RecipeEditParameter"  visible="false" >
-	
-	
+
+
 
 			<configs name="AUX">
 				<config default="false" name="IsModifyAll" description="IsModifyAll" max="" min="" paramter="" tag="" unit="" type="Bool"/>

BIN
Furnace/FurnaceRT/Config/VIDs/Equipment_VIDs_20250611.xlsx


File diff suppressed because it is too large
+ 1 - 1
Furnace/FurnaceRT/Config/VIDs/_ECID.xml


+ 17 - 10
Furnace/FurnaceRT/Equipments/PMs/PMN2Purge.cs

@@ -25,6 +25,7 @@ namespace FurnaceRT.Equipments.PMs
         private R_TRIG _trigN2DownRD = new R_TRIG();
         private R_TRIG _trigN2AirUpRD = new R_TRIG();
         private R_TRIG _trigN2AirDownRD = new R_TRIG();
+        private R_TRIG _trigN2AirDownTwoRD = new R_TRIG();
         private R_TRIG _trigSelectN2PurgeModeD = new R_TRIG();
 
         private Dictionary<string, Tuple<R_TRIG, List<Tuple<IDevice, string>>>> _n2PurgeSequenceAction;
@@ -33,7 +34,9 @@ namespace FurnaceRT.Equipments.PMs
         private N2PurgeModeEnum _N2PurgeMode = N2PurgeModeEnum.Auto;
         private double _n2PurgeData = 20;
         private double _n2ToAirData = 185000;
-        private double _stabilityTime = 30;
+
+        private double _manualPhase2StabilityTime = 60;
+        private double _manualPhase4StabilityTime = 60;
 
         private Dictionary<string, Stopwatch> _allTimeDict = new Dictionary<string, Stopwatch>();
         private void InitN2PurgeData()
@@ -49,7 +52,8 @@ namespace FurnaceRT.Equipments.PMs
         {
             _n2PurgeData = SC.ContainsItem($"System.N2PurgeData") ? SC.GetValue<double>("System.N2PurgeData") : 20;
             _n2ToAirData = SC.ContainsItem($"System.N2PurgeData") ? SC.GetValue<double>("System.N2ToAirData") : 185000;
-            _stabilityTime = SC.ContainsItem($"System.StabilityTime") ? SC.GetValue<double>("System.StabilityTime") : 30;
+            _manualPhase2StabilityTime = SC.ContainsItem($"PM1.N2Purge.Manual_phase2.StabilityTime") ? SC.GetValue<double>("PM1.N2Purge.Manual_phase2.StabilityTime") : 60;
+            _manualPhase4StabilityTime = SC.ContainsItem($"PM1.N2Purge.Manual_phase4.StabilityTime") ? SC.GetValue<double>("PM1.N2Purge.Manual_phase4.StabilityTime") : 60;
 
             _n2PurgeSequenceAction = ExtractionMethods.GetN2PurgeSequenceAction();
             _n2PurgeSequenceStatus = new Dictionary<string, Func<bool>>()
@@ -65,6 +69,7 @@ namespace FurnaceRT.Equipments.PMs
                 {N2PurgeModeEnum.Manual_phase2.ToString(),()=>  GetN2PurgePhase2()},
                 {N2PurgeModeEnum.Manual_phase3.ToString(),()=>  GetN2PurgePhase3() },
                 {N2PurgeModeEnum.Manual_phase4.ToString(),()=>  GetN2PurgePhase4() },
+                {N2PurgeModeEnum.Manual_phase5.ToString(),()=>  GetN2PurgePhase5() },
 
             };
             _allTimeDict = new Dictionary<string, Stopwatch>()
@@ -72,7 +77,8 @@ namespace FurnaceRT.Equipments.PMs
                 {N2PurgeModeEnum.Manual_phase1.ToString(),new Stopwatch() },
                 {N2PurgeModeEnum.Manual_phase2.ToString(),new Stopwatch()},
                 {N2PurgeModeEnum.Manual_phase3.ToString(),new Stopwatch()},
-                {N2PurgeModeEnum.Manual_phase4.ToString(),new Stopwatch() }
+                {N2PurgeModeEnum.Manual_phase4.ToString(),new Stopwatch() },
+                {N2PurgeModeEnum.Manual_phase5.ToString(),new Stopwatch() }
             };
             _rTrigDict = new Dictionary<string, R_TRIG>();
         }
@@ -101,12 +107,13 @@ namespace FurnaceRT.Equipments.PMs
                 case N2PurgeModeEnum.N2PurgeMode:
 
                     ProcessPhase(_trigN2UpRD, N2PurgeModeEnum.Manual_phase1.ToString());
-                    ProcessPhase(_trigN2DownRD, N2PurgeModeEnum.Manual_phase2.ToString());
+                    ProcessPhase(_trigN2DownRD, N2PurgeModeEnum.Manual_phase2.ToString(), true, (int)(_manualPhase2StabilityTime * 1000));
                     break;
                 case N2PurgeModeEnum.ATMMode:
 
                     ProcessPhase(_trigN2AirDownRD, N2PurgeModeEnum.Manual_phase3.ToString());
-                    ProcessPhase(_trigN2AirUpRD, N2PurgeModeEnum.Manual_phase4.ToString());
+                    ProcessPhase(_trigN2AirUpRD, N2PurgeModeEnum.Manual_phase4.ToString(), true, (int)(_manualPhase4StabilityTime * 1000));
+                    ProcessPhase(_trigN2AirDownTwoRD, N2PurgeModeEnum.Manual_phase5.ToString());
                     break;
             }
 
@@ -134,9 +141,9 @@ namespace FurnaceRT.Equipments.PMs
             }
             return true;
         }
-        private void ProcessPhase(R_TRIG r_TRIG, string modeKey)
+        private void ProcessPhase(R_TRIG r_TRIG, string modeKey, bool needCheck = false, int time = 0)
         {
-            r_TRIG.CLK = _n2PurgeSequenceStatus[modeKey].Invoke();
+            r_TRIG.CLK = needCheck ? (CheckConditionInTime(modeKey, time, () => _n2PurgeSequenceStatus[modeKey].Invoke())) : _n2PurgeSequenceStatus[modeKey].Invoke();
             if (r_TRIG.Q)
             {
                 LOG.Info($"N2PurgeMode Trigger {modeKey}!,O2:{GetO2Density()},time:{_allTimeDict[modeKey].ElapsedMilliseconds}");
@@ -266,15 +273,15 @@ namespace FurnaceRT.Equipments.PMs
         }
         private bool GetN2PurgePhase3()
         {
-            return GetLADoorOpenStatus();
+            return GetO2Density() < _n2ToAirData && GetLADoorOpenStatus();
         }
         private bool GetN2PurgePhase5()
         {
-            return GetO2Density() >= _n2ToAirData && GetLADoorOpenStatus();
+            return GetO2Density() >= _n2ToAirData && !GetLADoorOpenStatus();
         }
         private bool GetN2PurgePhase4()
         {
-            return GetO2Density() >= _n2ToAirData;
+            return GetO2Density() >= _n2ToAirData && GetLADoorOpenStatus();
         }
         private bool GetN2PurgeAIRTo20PPMStatus()
         {

+ 3 - 3
Furnace/FurnaceSimulator/Instances/SimulatorSystem.cs

@@ -19,7 +19,7 @@ namespace FurnaceSimulator.Instances
         private PeriodicJob _thread;
         private int _shuttleServoStation;
         private int _robotServoStation;
-        private bool _enableN2purge = false;
+        private bool _enableN2purge = true;
 
         Random _rd = new Random();
 
@@ -691,8 +691,8 @@ namespace FurnaceSimulator.Instances
             //IO.DI[$"PM1.DI_IV2REALOUT"].Value = IO.DO[$"PM1.DO_IV2ValveOpen"].Value;
         }
         bool increasing = true;
-        int start = 1;
-        int end = 40;
+        int start = 184950;
+        int end = 185050;
         private void MonitorMFC()
         {
             for (int i = 1; i < 52; i++)