Browse Source

BWR关联VFD 设定

jiangjy 3 weeks ago
parent
commit
63a20ed883

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

@@ -2312,6 +2312,8 @@
     <SVID id="339940001" valueType="Boolean" logicalName="PM1.SensorSL02002gasboxdoorsw12.Value" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="339950001" valueType="Boolean" logicalName="PM1.SensorSL05002LAdoorsw2.Value" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="339960001" valueType="Boolean" logicalName="PM1.SensorSL05004LAfurnacedoorsw.Value" value="" eventTrigger="" units="" description="" isArray="false" />
+    <SVID id="339970001" valueType="F8" logicalName="PM1.TrigVFD.AOValue" value="" eventTrigger="" units="" description="" isArray="false" />
+    <SVID id="339980001" valueType="F8" logicalName="PM1.TrigBufferPurgeTime.AOValue" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="630010001" valueType="Boolean" logicalName="Stocker1.CassetteHasWafer" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="630010002" valueType="Boolean" logicalName="Stocker1.FoupPresent" value="" eventTrigger="" units="" description="" isArray="false" />
     <SVID id="630010003" valueType="Boolean" logicalName="Stocker1.IsError" value="" eventTrigger="" units="" description="" isArray="false" />
@@ -12203,6 +12205,7 @@
     <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" />
+    <ECID id="3312290001" valueType="Ascii" logicalName="PM1.RHC.RHCVDFFrequency" value="" min="" max="" eventTrigger="" units="" description="RHC VDF Frequency" isArray="false" />
   </EquipmentConstants>
   <DataVariables>
     <DVID id="3003" valueType="Ascii" logicalName="PPChangeName" value="" eventTrigger="" description="Recipe change name(RCPID)" isArray="false" />

+ 1 - 0
Furnace/FurnaceRT/Config/IO/ELK/DeviceModelPM.xml

@@ -1285,6 +1285,7 @@
 
 		<IoTrigger id="TrigDPRON" display="" schematicId="" unit="" doTrigger="DO_DPR"/>
 		<IoTrigger id="TrigCEXHON" display="" schematicId="" unit="" doTrigger="DO_CEXH"/>
+		<IoTrigger id="TrigBWR" display="" schematicId="" unit="" doTrigger="DO_BlowerPowerOn"/>
 
 
 

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


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


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


+ 29 - 2
Furnace/FurnaceRT/Equipments/PMs/PMAux.cs

@@ -25,7 +25,7 @@ namespace FurnaceRT.Equipments.PMs
 
         private Dictionary<int, List<AITAuxData>> _auxDic;
         private int _currentAuxTable = 1;
-        private string _currentTableName ="";
+        private string _currentTableName = "";
         private bool _isF2ClnOn;
         private bool _isHFClnOn;
         private bool _isDEPOOn;
@@ -158,7 +158,7 @@ namespace FurnaceRT.Equipments.PMs
             set
             {
                 _isCEXHOn = value;
-             
+
                 TrigCEXHON?.SetTrigger(value, out _);
             }
         }
@@ -912,6 +912,33 @@ namespace FurnaceRT.Equipments.PMs
 
             return allFinish;
         }
+        private void SetVFD(bool setValue)
+        {
+            if (SC.ContainsItem("PM1.RHC.RHCVDFFrequency"))
+            {
+                if (setValue)
+                {
+                    TrigVFD?.SetAOTrigger((float)SC.GetValue<double>("PM1.RHC.RHCVDFFrequency"), out _);
+                }
+                else
+                {
+                    SC.SetItemValue("PM1.RHC.RHCVDFFrequency", 0);
+                    TrigVFD?.SetAOTrigger((float)SC.GetValue<double>("PM1.RHC.RHCVDFFrequency"), out _);
+                }
+            }
+        }
+
+        private bool SetBWREnable(object[] param)
+        {
+
+            if (param != null && param.Length > 0)
+            {
+                bool.TryParse(param[0].ToString(), out bool isEnable);
+
+                SetVFD(isEnable);
+            }
+            return true;
+        }
         private bool SetF2ClnEnable(object[] param)
         {
             if (param != null && param.Length > 0)

+ 6 - 1
Furnace/FurnaceRT/Equipments/PMs/PMModule.cs

@@ -602,7 +602,12 @@ namespace FurnaceRT.Equipments.PMs
                 SetBoatManualMotion(param);
                 return true;
             });
-
+            OP.Subscribe($"{Name}.SetBWREnable", (out string reason, int time, object[] param) =>
+            {
+                reason = string.Empty;
+                SetBWREnable(param);
+                return true;
+            });
             OP.Subscribe($"{Name}.SetF2ClnEnable", (out string reason, int time, object[] param) =>
             {
                 reason = string.Empty;

+ 21 - 17
Furnace/FurnaceRT/Equipments/PMs/PMModuleRecipeExecutor.cs

@@ -3,6 +3,7 @@ using Aitex.Core.RT.Device.Unit;
 using Aitex.Core.RT.Event;
 using Aitex.Core.RT.Log;
 using Aitex.Core.RT.ParameterCenter;
+using Aitex.Core.RT.SCCore;
 using Aitex.Core.Util;
 using FurnaceRT.Devices;
 using FurnaceRT.Equipments.Boats;
@@ -22,7 +23,7 @@ namespace FurnaceRT.Equipments.PMs
         public bool IsMainRecipeComplete { get; set; }
         public bool IsHeaterProfile { get; set; }
         public bool IsHeaterProfileSuccess { get; set; }
-        public bool IsBoatMoveToLoadPosition{ get; private set; }
+        public bool IsBoatMoveToLoadPosition { get; private set; }
         public bool IsWaitBoatMoveComplete { get; private set; }
         private string _boatTargetPosition;
         private R_TRIG _profileTrig = new R_TRIG();
@@ -166,20 +167,20 @@ namespace FurnaceRT.Equipments.PMs
                 return false;
             }
             var paramArray = param[0].ToString().Split(';');
-            for(int i=0; i< paramArray.Length;i++)
+            for (int i = 0; i < paramArray.Length; i++)
             {
                 var item = paramArray[i];
                 if (string.IsNullOrEmpty(item))
                     continue;
                 var valveDatas = item.Split(',');
-                if(valveDatas != null && valveDatas.Length > 1)
+                if (valveDatas != null && valveDatas.Length > 1)
                 {
                     var valveName = valveDatas[0];
                     var valveSet = valveDatas[1];
                     if (valveSet == "Continue")
                         continue;
                     bool.TryParse(valveSet, out bool set);
-                    switch(valveName.ToUpper())
+                    switch (valveName.ToUpper())
                     {
                         case "F2CLN":
                             IsF2ClnOn = set;
@@ -268,6 +269,9 @@ namespace FurnaceRT.Equipments.PMs
                                 var valve = _valves.Find(x => x.Name == valveName);
                                 if (valve != null)
                                     valve.TurnValve(set, out _);
+
+                                SetVFD(set);
+
                             }
                             break;
                         default:
@@ -279,7 +283,7 @@ namespace FurnaceRT.Equipments.PMs
                             }
                             break;
                     }
-     
+
                 }
             }
             LOG.Write($"SetValves exec time {stopwatch.ElapsedMilliseconds}");
@@ -412,7 +416,7 @@ namespace FurnaceRT.Equipments.PMs
             var ret = true;
             foreach (var heater in _heaters)
             {
-                if(!heater.CheckWaitCondition(out string info))
+                if (!heater.CheckWaitCondition(out string info))
                 {
                     reason += $"{info} \n";
                     ret = false;
@@ -422,9 +426,9 @@ namespace FurnaceRT.Equipments.PMs
         }
         public void AbortRecipe()
         {
-            _processMFCs.ForEach(x=>x.Terminate());
-            _heaters.ForEach(x=>x.Terminate());
-            _valves.ForEach(x=>x.Terminate());
+            _processMFCs.ForEach(x => x.Terminate());
+            _heaters.ForEach(x => x.Terminate());
+            _valves.ForEach(x => x.Terminate());
             ZAxisDevice.ServoStop();
             RAxisDevice.ServoStop();
             APC.Terminate();
@@ -442,7 +446,7 @@ namespace FurnaceRT.Equipments.PMs
             {
                 IsHeaterProfile = true;
                 var ret = true;
-                foreach(var heater in _heaters)
+                foreach (var heater in _heaters)
                 {
                     if (!heater.CheckProfileFinish(out string info))
                     {
@@ -469,8 +473,8 @@ namespace FurnaceRT.Equipments.PMs
                 {
                     IsHeaterProfileSuccess = true;
                     _profileTrig.CLK = true;
-                    _heaters.ForEach(x=>x.DeviceData.ProfileStatus = "Normal End");
-                    _heaters.ForEach(x=>x.ProfileFinish());
+                    _heaters.ForEach(x => x.DeviceData.ProfileStatus = "Normal End");
+                    _heaters.ForEach(x => x.ProfileFinish());
                     if (_profileTrig.Q)
                         SaveHeaterProflieToCorrectTable(_heaters[0].CurrentCorrectFileName, _heaters[0].CurrentCorrectIndex);//更新profile table
                 }
@@ -510,7 +514,7 @@ namespace FurnaceRT.Equipments.PMs
             }
 
             XmlElement targetStepNode = nodeSteps[tableIndex - 1] as XmlElement;
-            if(targetStepNode != null)
+            if (targetStepNode != null)
             {
                 var correctionDataString = targetStepNode.GetAttribute("CorrectionData");
                 if (string.IsNullOrEmpty(correctionDataString))
@@ -527,7 +531,7 @@ namespace FurnaceRT.Equipments.PMs
                 }
 
                 List<string> newCorrectionDatas = new List<string>();
-                for (int i=0;i< correctionDatas.Length;i++)
+                for (int i = 0; i < correctionDatas.Length; i++)
                 {
                     var datas = correctionDatas[i];
                     var dataArry = datas.Split(';');
@@ -575,11 +579,11 @@ namespace FurnaceRT.Equipments.PMs
                     }
 
                     FurnaceRT.Devices.IoHeater heater = null;
-                    if(_heaters.Count > i)
+                    if (_heaters.Count > i)
                     {
                         heater = _heaters[i];
                     }
-                    if(heater != null)
+                    if (heater != null)
                     {
                         newCorrectionDatas.Add($"Index:{correctParameter.No};Name:{correctParameter.Name};ProfileTemp:{heater.DeviceData.HeaterPV};ProfileCorrect:{(heater.DeviceData.HeaterPV - heater.DeviceData.CascadePV).ToString("f1")};CascadeTCCorrect:{heater.DeviceData.CascadePV};ProfileTCCalib:{correctParameter.ProfileTCCalib}");
                         heater.DeviceData.ProfileResult = correctParameter.ProfileCorrect;
@@ -598,7 +602,7 @@ namespace FurnaceRT.Equipments.PMs
                     doc.Save(fileStream);
                 }
             }
-            
+
         }
         private bool SetAlarmConditionTable(object[] param)
         {

+ 4 - 2
Furnace/FurnaceUI/Views/Operations/Maintenances/ManualSetViewModel.cs

@@ -964,6 +964,8 @@ namespace FurnaceUI.Views.Recipes
                     if (gasPanelTwoView.DictChangedPumpValve.Count > 0)
                     {
                         PumpSetValues.Clear();
+                        F2HFClnOrHFCl2Values.Clear();
+
                         if (gasPanelTwoView.AGVPumpData != null && gasPanelTwoView.AGVPumpData.DefaultValue != gasPanelTwoView.AGVPumpData.Feedback)
                         {
                             PumpSetValues.Add(gasPanelTwoView.AGVPumpData.UniqueName, gasPanelTwoView.AGVPumpData.Feedback);
@@ -991,6 +993,7 @@ namespace FurnaceUI.Views.Recipes
                         if (gasPanelTwoView.ValveBWRData != null && gasPanelTwoView.ValveBWRData.DefaultValue != gasPanelTwoView.ValveBWRData.Feedback)
                         {
                             PumpSetValues.Add(gasPanelTwoView.ValveBWRData.UniqueName, gasPanelTwoView.ValveBWRData.Feedback);
+                            F2HFClnOrHFCl2Values.Add("PM1.SetBWREnable", gasPanelTwoView.ValveBWRData.Feedback);
                             //  InvokeClient.Instance.Service.DoOperation($"{gasPanelTwoView.ValveBWRData.UniqueName}.{AITValveOperation.GVTurnValve}", gasPanelTwoView.ValveBWRData.Feedback);
                         }
                         if (gasPanelTwoView.ValveDPRData != null && gasPanelTwoView.ValveDPRData.DefaultValue != gasPanelTwoView.ValveDPRData.Feedback)
@@ -1029,7 +1032,6 @@ namespace FurnaceUI.Views.Recipes
                             PumpSetValues.Add(gasPanelTwoView.CZEROData.UniqueName, gasPanelTwoView.CZEROData.Feedback);
                         }
 
-                        F2HFClnOrHFCl2Values.Clear();
                         if (gasPanelTwoView.IsDEPOOn != gasPanelTwoView.IsOldDEPOOn)
                         {
                             F2HFClnOrHFCl2Values.Add("PM1.SetDEPOEnable", gasPanelTwoView.IsDEPOOn);
@@ -1630,7 +1632,7 @@ namespace FurnaceUI.Views.Recipes
                     //}
                     break;
                 case "AUX":
-                    
+
                     RecipeAUXSetViewModel recipeAUXSetViewModel = new RecipeAUXSetViewModel();
                     if (_aUXDatas != null && _aUXDatas.Count > 0)
                     {