Browse Source

Improve VenusSE pm viewmodel and vent function

hecl 1 year ago
parent
commit
1b4faf274b

+ 4 - 1
Venus/Venus_MainPages/ViewModels/OverVenusSEViewModel.cs

@@ -1613,7 +1613,10 @@ namespace Venus_MainPages.ViewModels
             MFC6SetPoint = 0;
             MFC7SetPoint = 0;
             MFC8SetPoint = 0;
-
+            MFC9SetPoint = 0;
+            MFC10SetPoint = 0;
+            MFC11SetPoint = 0;
+            MFC12SetPoint = 0;
         }
         private IEnumerable<string> GetFilesNames(string path)
         {

+ 41 - 0
Venus/Venus_RT/Config/PM/VenusSE/VenusSEDeviceModel.xml

@@ -248,4 +248,45 @@
 	<IoLids assembly="Venus_RT" classType=" Venus_RT.Devices.IODevices.IoLid">
 		<IoLid id="Lid" display="Lid" schematicId="" unit="" doMotorRelay="" doON="" doOFF="" diON="" diOFF="DI_Lid_Closed" />
 	</IoLids>
+  <IoHeaters assembly="Venus_RT" classType="Venus_RT.Devices.IoHeater">
+    <IoHeater id="ValveHeater" display="Valve Heater" schematicId="" unit="℃"
+           doPowerOn="DO_Valve_Heater_On"
+           diDeviation="DI_Valve_TC_Deviation_out_of_range"
+           diPowerOnFeedback="DI_Valve_Heater_On_FB"
+           diControlTcBroken="DI_Valve_Control_TC_Broken_Alarm"
+           diMonitorTcBroken="DI_Valve_Monitor_TC_Broken_Alarm"
+           aoSetPoint="AO_Valve_Temperature_Setpoint"
+           aoSetPointLimit="AO_Valve_Temp_Limit_Setpoint"
+           aiFeedback="AI_Valve_Control_TC_Temp"
+           aiMonitor="AI_Valve_Monitor_TC_Temp"
+           scSetPointLimit="ValveHeaterSetPointLimit" />
+
+    <IoHeater id="ForelineHeater" display="Foreline Heater" schematicId="" unit="℃"
+         doPowerOn="DO_Foreline_Heater_On"
+         diDeviation="DI_Foreline_TC_Deviation_out_of_range"
+         diPowerOnFeedback="DI_Foreline_Heater_On_FB"
+         diControlTcBroken="DI_Foreline_Control_TC_Broken_Alarm"
+         diMonitorTcBroken="DI_Foreline_Monitor_TC_Broken_Alarm"
+         aoSetPoint="AO_Foreline_Temperature_Setpoint"
+         aoSetPointLimit="AO_Foreline_Temp_Limit_Setpoint"
+         aiFeedback="AI_Fline_Control_TC_Temp"
+         aiMonitor="AI_Fline_Monitor_TC_Temp"
+         scSetPointLimit="ForeLineHeaterSetPointLimit" />
+
+    <IoHeater id="WallHeater" display="Wall Heater" schematicId="" unit="℃"
+              doPowerOn="DO_CHB_Wall_Heater_On"
+
+              diDeviation="DI_CHB_Wall_TC_Deviation_out_of_range"
+              diPowerOnFeedback="DI_CHB_Wall_Heater_On_FB"
+              diControlTcBroken="DI_CHB_Wall_Control_TC_Broken_Alarm"
+              diMonitorTcBroken="DI_CHB_Wall_Monitor_TC_Broken_Alarm"
+
+              aoSetPoint="AO_CHB_Wall_Temperature_Setpoint"
+              aoSetPointLimit="AO_CHB_Wall_Temp_Limit_Setpoint"
+
+              aiFeedback="AI_CHB_Wall_Control_TC_Temp"
+              aiMonitor="AI_CHB_Wall_Monitor_TC_Temp"
+
+              scSetPointLimit="WallHeaterSetPointLimit" />
+  </IoHeaters>
 </DeviceModelDefine>

+ 97 - 56
Venus/Venus_Simulator/Instances/SimulatorSystem.cs

@@ -257,7 +257,7 @@ namespace Venus_Simulator.Instances
                     SetAiValue($"{mod}.AI_Process_Pressure_100mt", 100);
                     //SetAiValue($"{mod}.AI_Chamber_Pressure_10t", ATM_PRESSURE);
                     SetAiValue($"{mod}.AI_Chamber_Pressure_Virtual", PROCESS_GAUGE);
-
+                    SetAiValue($"{mod}.AI_Foreline_Pressure_10t", 5001);
                     SetAiValue($"{mod}.AI_Chamber_Pressure_10t", 5000);
 
                     //// Temperature
@@ -618,7 +618,7 @@ namespace Venus_Simulator.Instances
                         case JetChamber.VenusSE:
                             MonitorPin(item.Key);
                             //MonitorVenuSESlitDoor(item.Key);
-                            MonitorPressure_VenusSE(item.Key);
+                            MonitorSEPressure(item.Key);
                             break;
                     }
                 }
@@ -1141,14 +1141,16 @@ namespace Venus_Simulator.Instances
             //    }
             //}
         }
-
-        void MonitorPressure_Kepler(ModuleName mod)
+        void MonitorSEPressure(ModuleName mod)
         {
             string sAI_Foreline = "AI_Foreline_Pressure_10t";
+            string sAI_ChamberPressure = "AI_Chamber_Pressure_10t";
+            string sAI_ProcessPressure = "AI_Chamber_Pressure_Virtual";
 
 
 
 
+            // Foreline
 
             if (SkyPumpMockPMA._simPumpStatus == SkyPumpMockPMA.SimPumpStatus.Open || EdwardsPumpMockPMA._simPumpStatus == EdwardsPumpMockPMA.SimEdwardsPumpStatus.Open)
             {
@@ -1160,10 +1162,7 @@ namespace Venus_Simulator.Instances
             }
 
             // PLC 模拟量范围[0,4000], 电压[0, 10V], 压力[0, 760Torr]
-            string sAI_ChamberPressure = "AI_Chamber_Pressure_10t";
-            string sAI_ProcessPressure = "AI_Chamber_Pressure_Virtual";
-            //float chamber_pressure = GetMockChamberPressure(mod);
-            //float process_pressure = GetAiValue($"{mod}.AI_Chamber_Pressure_Virtual");
+
 
             // soft pump & fast pump
             DOAccessor fast_pump_vlv = IO.DO[$"{mod}.DO_Fast_Pumping_Valve"];
@@ -1172,78 +1171,76 @@ namespace Venus_Simulator.Instances
 
             if (fast_pump_vlv.Value || soft_pump_vlv.Value || turbo_pump_vlv.Value)
             {
+                //任意泵打开
+                float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
+                float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
                 if (fast_pump_vlv.Value && soft_pump_vlv.Value)
-                {
-                    float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
-                    float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
+                {//开双泵
                     if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
                     {
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - 30000);
-                        //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
+                        float targetChamberPressure = getAiValue_ChamberPressure - 30000 > 0 ? getAiValue_ChamberPressure - 30000 : 0;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetChamberPressure);
+
                     }
                     else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
                     {
-                        getAiValue_ProcessPressure = getAiValue_ChamberPressure;
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1500);
-                        SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1500);
+                        float targetChamberPressure = getAiValue_ProcessPressure - 1500 > 0 ? getAiValue_ProcessPressure - 1500 : 0;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetChamberPressure);
+                        SetAiValue($"{mod}.{sAI_ProcessPressure}", targetChamberPressure);
                     }
 
-                    //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - _rd.Next(15000, 16000));
-                    //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - _rd.Next(150, 160));
                 }
-                else if (fast_pump_vlv.Value)
+                else if (fast_pump_vlv.Value)//开
                 {
-                    float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
-                    float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
                     if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
                     {
-                        float targetPressure = getAiValue_ChamberPressure > 26000 ? GetAiValue($"{mod}.{sAI_ChamberPressure}") - 25000 : 20;
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetPressure);
+                        float targetChamberPressure = getAiValue_ChamberPressure - 25000 > 0 ? getAiValue_ChamberPressure - 25000 : 0;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetChamberPressure);
                         //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
                     }
                     else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
                     {
-                        getAiValue_ProcessPressure = getAiValue_ChamberPressure;
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1300);
-                        SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1300);
+                        float targetChamberPressure = getAiValue_ProcessPressure - 1300 > 0 ? getAiValue_ProcessPressure - 1300 : 0;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetChamberPressure);
+                        SetAiValue($"{mod}.{sAI_ProcessPressure}", targetChamberPressure);
                     }
-                    //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - _rd.Next(12000, 13000));
-                    //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - _rd.Next(120, 130));
+
                 }
                 else if (soft_pump_vlv.Value)
                 {
-                    float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
-                    float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
                     if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
                     {
-                        float targetPressure = getAiValue_ChamberPressure > 23000 ? GetAiValue($"{mod}.{sAI_ChamberPressure}") - 22000 : 20;
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetPressure);
+                        float targetChamberPressure = getAiValue_ChamberPressure - 10000 > 0 ? getAiValue_ChamberPressure - 10000 : 0;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetChamberPressure);
                         //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
                     }
                     else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
                     {
-                        getAiValue_ProcessPressure = getAiValue_ChamberPressure;
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1100);
-                        SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 1100);
+                        float targetChamberPressure = getAiValue_ProcessPressure - 1100 > 0 ? getAiValue_ProcessPressure - 1100 : 0;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetChamberPressure);
+                        SetAiValue($"{mod}.{sAI_ProcessPressure}", targetChamberPressure);
                     }
-                    //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - _rd.Next(13000, 14000));
-                    //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - _rd.Next(100, 110));
                 }
                 else if (turbo_pump_vlv.Value)
                 {
-                    float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
-                    float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
 
                     getAiValue_ProcessPressure = getAiValue_ChamberPressure;
-                    SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 500);
-                    SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 500);
+
+                    if ((getAiValue_ChamberPressure - 500) >= 0)
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", getAiValue_ChamberPressure - 500);
+                    else
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", 0);
+
+                    if ((getAiValue_ProcessPressure - 500) >= 0)
+                        SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 500);
+                    else
+                        SetAiValue($"{mod}.{sAI_ProcessPressure}", 0);
+
                 }
             }
 
             // fast vent & purge
             DOAccessor vent_vlv = IO.DO[$"{mod}.DO_N2_Valve"];
-
-
             if (vent_vlv.Value)
             {
                 float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
@@ -1263,14 +1260,11 @@ namespace Venus_Simulator.Instances
                 {
                     SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") + 25000);
                 }
-                //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") + _rd.Next(25000, 30000));
-                //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") + _rd.Next(130, 150));
             }
 
 
             // Loadlock Pumping Valve
 
-
             // 压力值越界,复位
             float chamber_pressure1 = GetAiValue($"{mod}.{sAI_ChamberPressure}");
             if (chamber_pressure1 > ATM_PRESSURE)
@@ -1306,17 +1300,17 @@ namespace Venus_Simulator.Instances
             IO.DI[$"{mod}.DI_ATM_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") > ATM_THRESHOLD;
 
             // VAC switch
-            IO.DI[$"{mod}.DI_VAC_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") < VAC_SW_PRESSURE;
+            IO.DI[$"{mod}.DI_PM_VAC_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") < VAC_SW_PRESSURE;
+
 
         }
-        void MonitorPressure_VenusSE(ModuleName mod)
+        void MonitorPressure_Kepler(ModuleName mod)
         {
             string sAI_Foreline = "AI_Foreline_Pressure_10t";
-            string sAI_ChamberPressure = "AI_Chamber_Pressure_10t";
-            string sAI_ProcessPressure = "AI_Chamber_Pressure_Virtual";
-            DOAccessor fast_pump_vlv = IO.DO[$"{mod}.DO_Fast_Pumping_Valve"];
-            DOAccessor soft_pump_vlv = IO.DO[$"{mod}.DO_Soft_Pumping_Valve"];
-            DOAccessor turbo_pump_vlv = IO.DO[$"{mod}.DO_Turbo_Pump_Pumping_Valve"];
+
+
+
+
 
             if (SkyPumpMockPMA._simPumpStatus == SkyPumpMockPMA.SimPumpStatus.Open || EdwardsPumpMockPMA._simPumpStatus == EdwardsPumpMockPMA.SimEdwardsPumpStatus.Open)
             {
@@ -1327,6 +1321,17 @@ namespace Venus_Simulator.Instances
                 SetAiValue($"{mod}.{sAI_Foreline}", GetAiValue($"{mod}.{sAI_Foreline}") + _rd.Next(500, 600));
             }
 
+            // PLC 模拟量范围[0,4000], 电压[0, 10V], 压力[0, 760Torr]
+            string sAI_ChamberPressure = "AI_Chamber_Pressure_10t";
+            string sAI_ProcessPressure = "AI_Chamber_Pressure_Virtual";
+            //float chamber_pressure = GetMockChamberPressure(mod);
+            //float process_pressure = GetAiValue($"{mod}.AI_Chamber_Pressure_Virtual");
+
+            // soft pump & fast pump
+            DOAccessor fast_pump_vlv = IO.DO[$"{mod}.DO_Fast_Pumping_Valve"];
+            DOAccessor soft_pump_vlv = IO.DO[$"{mod}.DO_Soft_Pumping_Valve"];
+            DOAccessor turbo_pump_vlv = IO.DO[$"{mod}.DO_Turbo_Pump_Pumping_Valve"];
+
             if (fast_pump_vlv.Value || soft_pump_vlv.Value || turbo_pump_vlv.Value)
             {
                 if (fast_pump_vlv.Value && soft_pump_vlv.Value)
@@ -1354,7 +1359,8 @@ namespace Venus_Simulator.Instances
                     float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
                     if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
                     {
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - 25000);
+                        float targetPressure = getAiValue_ChamberPressure > 26000 ? GetAiValue($"{mod}.{sAI_ChamberPressure}") - 25000 : 20;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetPressure);
                         //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
                     }
                     else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
@@ -1372,7 +1378,8 @@ namespace Venus_Simulator.Instances
                     float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
                     if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
                     {
-                        SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") - 22000);
+                        float targetPressure = getAiValue_ChamberPressure > 23000 ? GetAiValue($"{mod}.{sAI_ChamberPressure}") - 22000 : 20;
+                        SetAiValue($"{mod}.{sAI_ChamberPressure}", targetPressure);
                         //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
                     }
                     else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
@@ -1394,6 +1401,38 @@ namespace Venus_Simulator.Instances
                     SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 500);
                 }
             }
+
+            // fast vent & purge
+            DOAccessor vent_vlv = IO.DO[$"{mod}.DO_N2_Valve"];
+
+
+            if (vent_vlv.Value)
+            {
+                float getAiValue_ChamberPressure = GetAiValue($"{mod}.{sAI_ChamberPressure}");
+                float getAiValue_ProcessPressure = GetAiValue($"{mod}.{sAI_ProcessPressure}");
+                if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure > 10000)
+                {
+                    SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") + 25000);
+                    //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") - 150);
+                }
+                else if (getAiValue_ProcessPressure <= 10000 && getAiValue_ChamberPressure <= 10000)
+                {
+                    getAiValue_ProcessPressure = getAiValue_ChamberPressure;
+                    SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") + 1300);
+                    SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") + 1300);
+                }
+                else
+                {
+                    SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") + 25000);
+                }
+                //SetAiValue($"{mod}.{sAI_ChamberPressure}", GetAiValue($"{mod}.{sAI_ChamberPressure}") + _rd.Next(25000, 30000));
+                //SetAiValue($"{mod}.{sAI_ProcessPressure}", GetAiValue($"{mod}.{sAI_ProcessPressure}") + _rd.Next(130, 150));
+            }
+
+
+            // Loadlock Pumping Valve
+
+
             // 压力值越界,复位
             float chamber_pressure1 = GetAiValue($"{mod}.{sAI_ChamberPressure}");
             if (chamber_pressure1 > ATM_PRESSURE)
@@ -1429,8 +1468,10 @@ namespace Venus_Simulator.Instances
             IO.DI[$"{mod}.DI_ATM_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") > ATM_THRESHOLD;
 
             // VAC switch
-            IO.DI[$"{mod}.DI_PM_VAC_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") < VAC_SW_PRESSURE;
+            IO.DI[$"{mod}.DI_VAC_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") < VAC_SW_PRESSURE;
+
         }
+       
         void MonitorPressure_Kepler2200A(ModuleName mod)
         {
             string sAI_Foreline = "AI_Foreline_Pressure_10t";

+ 3 - 1
Venus/Venus_Simulator/Venus_Simulator.csproj

@@ -604,7 +604,9 @@
   </ItemGroup>
   <ItemGroup />
   <ItemGroup>
-    <Resource Include="Config\_ioDefineVenusSE.xml" />
+    <Content Include="Config\_ioDefineVenusSE.xml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
     <Content Include="Config\_ioDefineKepler2200B.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>