瀏覽代碼

添加pmc/kepler2200

lixiang 1 年之前
父節點
當前提交
f9a02a739a

+ 2 - 2
Venus/Framework/Common/DataCollection/DataCollectionManager.cs

@@ -302,7 +302,7 @@ namespace Aitex.Core.RT.DataCollection
 
                             try
                             {
-                                cmd.ExecuteNonQuery();
+                                //cmd.ExecuteNonQuery();
                             }
                             catch (Exception ex)
                             {
@@ -412,7 +412,7 @@ namespace Aitex.Core.RT.DataCollection
                 try
                 {
                     NpgsqlCommand cmd = new NpgsqlCommand(createTble.ToString(), _conn);
-                    cmd.ExecuteNonQuery();
+                    //cmd.ExecuteNonQuery();
                 }
                 catch (Exception ex1)
                 {

+ 6 - 0
Venus/Venus_MainPages/Unity/ModuleManager.cs

@@ -26,6 +26,12 @@ namespace Venus_MainPages.Unity
 
             if (installModules.Contains("PMB"))
                 ModulesID.Add("PMB");
+
+            if (installModules.Contains("PMC"))
+                ModulesID.Add("PMC");
+
+            if (installModules.Contains("PMD"))
+                ModulesID.Add("PMD");
         }
 
         public static void Initialize()

+ 8 - 0
Venus/Venus_MainPages/Venus_MainPages.csproj

@@ -174,6 +174,7 @@
     <Compile Include="ViewModels\IOViewModel.cs" />
     <Compile Include="ViewModels\MFCVerificationViewModel.cs" />
     <Compile Include="ViewModels\OperationOverViewModel.cs" />
+    <Compile Include="ViewModels\OverKepler2200AViewModel.cs" />
     <Compile Include="ViewModels\OverKepler2300ViewModel.cs" />
     <Compile Include="ViewModels\OverVenusViewModel.cs" />
     <Compile Include="ViewModels\PartialPressureViewModel.cs" />
@@ -224,6 +225,9 @@
     <Compile Include="Views\OperationOverView.xaml.cs">
       <DependentUpon>OperationOverView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\OverKepler2200AView.xaml.cs">
+      <DependentUpon>OverKepler2200AView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\OverKepler2300View.xaml.cs">
       <DependentUpon>OverKepler2300View.xaml</DependentUpon>
     </Compile>
@@ -349,6 +353,10 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="Views\OverKepler2200AView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\OverKepler2300View.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>

File diff suppressed because it is too large
+ 1675 - 0
Venus/Venus_MainPages/ViewModels/OverKepler2200AViewModel.cs


File diff suppressed because it is too large
+ 1226 - 0
Venus/Venus_MainPages/Views/OverKepler2200AView.xaml


+ 24 - 0
Venus/Venus_MainPages/Views/OverKepler2200AView.xaml.cs

@@ -0,0 +1,24 @@
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media;
+using Venus_MainPages.ViewModels;
+
+namespace Venus_MainPages.Views
+{
+    /// <summary>
+    /// OverView.xaml 的交互逻辑
+    /// </summary>
+    public partial class OverKepler2200AView : UserControl
+    {
+        public OverKepler2200AView()
+        {
+            InitializeComponent();
+        }
+        public void Init(string systemName)
+        {
+            (this.DataContext as OverKepler2200AViewModel).ModuleName = systemName;
+            (this.DataContext as OverKepler2200AViewModel).addDataKeys();
+        }
+
+    }
+}

+ 25 - 1
Venus/Venus_RT/Config/IoProviderConfig.xml

@@ -46,6 +46,30 @@
 		</Blocks>
 	</IoProvider>
 
+	<IoProvider load_condition="0" module="PMC" name="PLC" map_module="PMC"  class="MECF.Framework.RT.Core.IoProviders.MCProtocolPlc" assembly="MECF.Framework.RT.Core">
+		<Parameter ip="127.0.0.1" port="6733" network_id="1" station_id="1"></Parameter>
+		<Blocks>
+			<Block type="di" offset="0" size="640" value_type=""></Block>
+			<Block type="do" offset="0" size="640" value_type=""></Block>
+			<Block type="ai" offset="0" size="640" value_type=""></Block>
+			<Block type="ao" offset="0" size="640" value_type=""></Block>
+		</Blocks>
+	</IoProvider>
+
+
+	<IoProvider load_condition="1" module="PMC" name="PLC" map_module="PMC"   class="Venus_RT.Devices.FinsPlc" assembly="Venus_RT">
+		<Parameter  ip="192.168.10.13" port="9600"
+					diBlockType="WR" doBlockType="WR" aiBlockType="D" aoBlockType="D"
+					diStartPosition="20" doStartPosition="0" aiStartPosition="2000" aoStartPosition="1000" ></Parameter>
+		<Blocks>
+			<Block type="di" offset="0" size="128" value_type=""></Block>
+			<Block type="do" offset="0" size="128" value_type=""></Block>
+			<Block type="ai" offset="0" size="128" value_type=""></Block>
+			<Block type="ao" offset="0" size="128" value_type=""></Block>
+		</Blocks>
+	</IoProvider>
+	
+
 	<IoProvider load_condition="0" module="TM" name="PLC" map_module="TM" map_file="_ioDefineVenus_MF.xml" class="MECF.Framework.RT.Core.IoProviders.MCProtocolPlc" assembly="MECF.Framework.RT.Core">
 		<Parameter ip="127.0.0.1" port="6831" network_id="1" station_id="1"></Parameter>
 		<Blocks>
@@ -58,7 +82,7 @@
 
 
 	<IoProvider load_condition="1" module="TM" name="PLC" map_module="TM" map_file="_ioDefineVenus_MF.xml"  class="Venus_RT.Devices.FinsPlc" assembly="Venus_RT">
-		<Parameter  ip="192.168.10.21" port="9600"
+		<Parameter  ip="192.168.10.210" port="9600"
 					diBlockType="WR" doBlockType="WR" aiBlockType="D" aoBlockType="D"
 					diStartPosition="20" doStartPosition="0" aiStartPosition="2000" aoStartPosition="1000" ></Parameter>
 		<Blocks>

二進制
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200ADeviceModel.xml


+ 17 - 0
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AInterlock.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Interlock xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+
+ 
+
+  <Action do="DO_MFC3_Valve" value="true" tip="MFC3 Valve" tip.zh-CN="" tip.en-US="DO-13" >
+	<Limit di="DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0" />
+	<Limit di="DI_Slit_Door_Close_POS"	value="true" tip="DI Slit Door Close POS"	tip.zh-CN="" tip.en-US="DI-11" />
+	<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
+	<Limit di="DI_Gas_Box_Door_Switch"		value="true" tip="DI Gas Box Door SW"		tip.zh-CN="" tip.en-US="DI-51" />
+	<Limit di="DI_Gas_Box_Pressure_Switch"	value="true" tip="DI Gas Box Pressure SW"	tip.zh-CN="" tip.en-US="DI-52" />
+  </Action>
+  
+
+
+</Interlock>

+ 347 - 0
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AIoDefine.xml

@@ -0,0 +1,347 @@
+<?xml version='1.0'?>
+<IO_DEFINE xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
+
+	<!--文件根据210-0062-100_ IO LIST_KPL2200_PM_20230726.xlsx生成-->
+	<!--生成时间:08/03/2023 08:56:15-->
+	<Dig_In>
+		<DI_ITEM Index="0" Name="DI_Lid_Closed" Device="" Addr="w20.00" />
+		<DI_ITEM Index="1" Name="DI_ATM_Switch" Device="ATM_SW" Addr="w20.01" />
+		<DI_ITEM Index="2" Name="DI_VAC_Switch" Device="" Addr="w20.02" />
+		<DI_ITEM Index="3" Name="" />
+		<DI_ITEM Index="4" Name="DI_Water_Leak_Sensor" Device="" Addr="w20.04" />
+		<DI_ITEM Index="5" Name="DI_Lift_Pin_Up_Position" Device="" Addr="w20.05" />
+		<DI_ITEM Index="6" Name="DI_Lift_Pin_Down_Position" Device="" Addr="w20.06" />
+		<DI_ITEM Index="7" Name="DI_Source_RF_Generator_Interlock" Device="" Addr="w20.07" />
+		<DI_ITEM Index="8" Name="DI_Source_RF_Fan" Device="" Addr="w20.08" />
+		<DI_ITEM Index="9" Name="DI_Turbo_Pump_Interlock" Device="" Addr="w20.09" />
+		<DI_ITEM Index="10" Name="DI_Slit_Door_Open_Position" Device="" Addr="w20.10" />
+		<DI_ITEM Index="11" Name="DI_Slit_Door_Close_Position" Device="" Addr="w20.11" />
+		<DI_ITEM Index="12" Name="DI_CDA_Pressure_Switch" Device="" Addr="w20.12" />
+		<DI_ITEM Index="13" Name="" />
+		<DI_ITEM Index="14" Name="" />
+		<DI_ITEM Index="15" Name="DI_Chamber_Pressure_10t_Guage_Alarm" Device="VG_PPH" Addr="w20.15" />
+		<DI_ITEM Index="16" Name="DI_Process_Pressure_100mt_Guage_Alarm" Device="VG_PPL" Addr="w21.00" />
+		<DI_ITEM Index="17" Name="" />
+		<DI_ITEM Index="18" Name="DI_Foreline_Pressure_10t_Guage_Alarm" Device="VG_FL" Addr="w21.02" />
+		<DI_ITEM Index="19" Name="" />
+		<!--<DI_ITEM Index="20" Name="DI_S_Valve_TC_Deviation_out_of_range" Device="" Addr="w21.04" />-->
+		<DI_ITEM Index="21" Name="DI_S_Valve_Control_TC_Broken_Alarm" Device="" Addr="w21.05" />
+		<!--<DI_ITEM Index="22" Name="DI_S_Valve_Monitor_TC_Broken_Alarm" Device="" Addr="w21.06" />-->
+		<DI_ITEM Index="23" Name="DI_S_Valve_Heater_On_FB" Device="" Addr="w21.07" />
+		<!--<DI_ITEM Index="24" Name="DI_Foreline_TC_Deviation_out_of_range" Device="" Addr="w21.08" />
+		<DI_ITEM Index="25" Name="DI_Foreline_Control_TC_Broken_Alarm" Device="" Addr="w21.09" />
+		<DI_ITEM Index="26" Name="DI_Foreline_Monitor_TC_Broken_Alarm" Device="" Addr="w21.10" />
+		<DI_ITEM Index="27" Name="DI_Foreline_Heater_On_FB" Device="" Addr="w21.11" />
+		<DI_ITEM Index="28" Name="DI_CHB_Wall_TC_Deviation_out_of_range" Device="" Addr="w21.12" />-->
+		<DI_ITEM Index="29" Name="DI_CHB_H-HT_Control_TC_Broken_Alarm" Device="" Addr="w21.13" />
+		<!--<DI_ITEM Index="30" Name="DI_CHB_Wall_Monitor_TC_Broken_Alarm" Device="" Addr="w21.14" />-->
+		<DI_ITEM Index="31" Name="DI_CHB_H-HT_Heater_On_FB" Device="" Addr="w21.15" />
+		<DI_ITEM Index="32" Name="DI_CHB_H-HT_OT_Switch_Alarm" Device="" Addr="w22.00" />
+		<DI_ITEM Index="33" Name="" />
+		<DI_ITEM Index="34" Name="DI_PN2_Pressure_Switch" Device="PGN2" Addr="w22.02" Note="Gas Box" />
+		<DI_ITEM Index="35" Name="DI_MFC1_Pressure_Switch" Device="PG1" Addr="w22.03" Note="Gas Box" />
+		<DI_ITEM Index="36" Name="DI_MFC2_Pressure_Switch" Device="PG2" Addr="w22.04" Note="Gas Box" />
+		<DI_ITEM Index="37" Name="DI_MFC3_Pressure_Switch" Device="PG3" Addr="w22.05" Note="Gas Box" />
+		<DI_ITEM Index="38" Name="DI_MFC4_Pressure_Switch" Device="PG4" Addr="w22.06" Note="Gas Box" />
+		<DI_ITEM Index="39" Name="DI_MFC5_Pressure_Switch" Device="PG5" Addr="w22.07" Note="Gas Box" />
+		<DI_ITEM Index="40" Name="DI_MFC6_Pressure_Switch" Device="PG6" Addr="w22.08" Note="Gas Box" />
+		<DI_ITEM Index="41" Name="DI_MFC7_Pressure_Switch" Device="PG7" Addr="w22.09" Note="Gas Box" />
+		<DI_ITEM Index="42" Name="DI_MFC8_Pressure_Switch" Device="PG8" Addr="w22.10" Note="Gas Box" />
+		<DI_ITEM Index="43" Name="DI_N2_Purge_Pressure_Switch" Device="N2_P" Addr="w22.11" Note="Gas Box" />
+		<!--<DI_ITEM Index="44" Name="DI_ESC_He_Pressure_100t_Guage_Alarm" Device="VG_He" Addr="w22.12" Note="ESC配置" />-->
+		<DI_ITEM Index="45" Name="" />
+		<DI_ITEM Index="46" Name="" />
+		<DI_ITEM Index="47" Name="" />
+		<DI_ITEM Index="48" Name="" />
+		<DI_ITEM Index="49" Name="" />
+		<DI_ITEM Index="50" Name="" />
+		<DI_ITEM Index="51" Name="DI_Gas_Box_Door_Switch" Device="" Addr="w23.03" />
+		<DI_ITEM Index="52" Name="DI_Gas_Box_Pressure_Switch" Device="" Addr="w23.04" />
+		<DI_ITEM Index="53" Name="DI_Turbo_Pump_Water_Flow_Switch" Device="" Addr="w23.05" />
+		<DI_ITEM Index="54" Name="DI_Source_RF_Water_Flow_Switch" Device="" Addr="w23.06" />
+		<DI_ITEM Index="55" Name="" />
+		<!--<DI_ITEM Index="56" Name="DI_P_Valve_TC_Deviation_out_of_range" Device="" Addr="w23.08" />
+		<DI_ITEM Index="57" Name="DI_P_Valve_Control_TC_Broken_Alarm" Device="" Addr="w23.09" />
+		<DI_ITEM Index="58" Name="DI_P_Valve_Monitor_TC_Broken_Alarm" Device="" Addr="w23.10" />
+		<DI_ITEM Index="59" Name="DI_P_Valve_Heater_On_FB" Device="" Addr="w23.11" />-->
+		<DI_ITEM Index="60" Name="" />
+		<!--<DI_ITEM Index="61" Name="DI_Gas_Line_TC_Deviation_out_of_range" Device="" Addr="w23.13" />-->
+		<DI_ITEM Index="62" Name="DI_Gas_Line_Control_TC_Broken_Alarm" Device="" Addr="w23.14" />
+		<!--<DI_ITEM Index="63" Name="DI_Gas_Line_Monitor_TC_Broken_Alarm" Device="" Addr="w23.15" />-->
+		<DI_ITEM Index="64" Name="DI_Gas_Line_Heater_On_FB" Device="" Addr="w24.00" />
+		<!--<DI_ITEM Index="65" Name="DI_Gas_Line_OT_Switch_Alarm" Device="" Addr="w24.01" />-->
+		<DI_ITEM Index="66" Name="DI_S_Valve_OT_Switch_Alarm" Device="" Addr="w24.02" />
+		<!--<DI_ITEM Index="67" Name="DI_Foreline_OT_Switch_Alarm" Device="" Addr="w24.03" />-->
+		<DI_ITEM Index="68" Name="" />
+		<DI_ITEM Index="69" Name="" />
+		<DI_ITEM Index="70" Name="" />
+		<DI_ITEM Index="71" Name="" />
+		<DI_ITEM Index="72" Name="DI_Lid_Up_Button" Device="" Addr="w24.08" />
+		<DI_ITEM Index="73" Name="DI_Lid_Down_Button" Device="" Addr="w24.09" />
+		<DI_ITEM Index="74" Name="DI_Lid_Up_Limit_Pos_SW" Device="" Addr="w24.10" />
+		<DI_ITEM Index="75" Name="DI_Lid_Down_Limit_Pos_SW" Device="" Addr="w24.11" />
+		<DI_ITEM Index="76" Name="DI_Arm_Not_Extend_to_PM" Device="" Addr="w24.12" />
+		<DI_ITEM Index="77" Name="DI_TM_Safety_Door_Colse" Device="" Addr="w24.13" />
+		<!--<DI_ITEM Index="78" Name="DI_ESC_Inner_Coolant_Flow_SW" Device="" Addr="w24.14" />
+		<DI_ITEM Index="79" Name="DI_ESC_Outer_Coolant_Flow_SW" Device="" Addr="w24.15" />-->
+		<DI_ITEM Index="80" Name="DI_Top_Plate_Coolant_Flow_SW" Device="" Addr="w25.00" />
+		<DI_ITEM Index="81" Name="" />
+		<DI_ITEM Index="82" Name="" />
+		<DI_ITEM Index="83" Name="DI_Lid_Servo_Alarm" Device="" Addr="w25.03" />
+		<!--<DI_ITEM Index="84" Name="DI_ADAM-1_communication_Alarm" Device="" Addr="w25.04" />
+		<DI_ITEM Index="85" Name="DI_ADAM-2_communication_Alarm" Device="" Addr="w25.05" />-->
+		<DI_ITEM Index="86" Name="" />
+		<!--<DI_ITEM Index="87" Name="DI_ESC_inner_coolant_inlet_TC_Broken_Alarm" Device="" Addr="w25.07" />
+		<DI_ITEM Index="88" Name="DI_ESC_inner_coolant_outlet_TC_Broken_Alarm" Device="" Addr="w25.08" />
+		<DI_ITEM Index="89" Name="DI_ESC_outer_coolant_inlet_TC_Broken_Alarm" Device="" Addr="w25.09" />
+		<DI_ITEM Index="90" Name="DI_ESC_outer_coolant_outlet_TC_Broken_Alarm" Device="" Addr="w25.10" />
+		<DI_ITEM Index="91" Name="DI_Top_Plate_coolant_inlet_TC_Broken_Alarm" Device="" Addr="w25.11" />
+		<DI_ITEM Index="92" Name="DI_Top_Plate_coolant_outlet_TC_Broken_Alarm" Device="" Addr="w25.12" />-->
+		<DI_ITEM Index="93" Name="" />
+		<DI_ITEM Index="94" Name="" />
+		<DI_ITEM Index="95" Name="" />
+		<DI_ITEM Index="96" Name="DI_Lift_Servo_Alarm" Device="" Addr="w26.00" />
+		<DI_ITEM Index="97" Name="DI_Lift_Up_Limit_Pos_SW" Device="" Addr="w26.01" />
+		<DI_ITEM Index="98" Name="DI_Lift_Down_Limit_Pos_SW" Device="" Addr="w26.02" />
+		<DI_ITEM Index="99" Name="DI_Lift_Servo_ORG_Pos_SW" Device="" Addr="w26.03" />
+		<DI_ITEM Index="100" Name="DI_Lift_Servo_with_origin" Device="" Addr="w26.04" />
+		<DI_ITEM Index="101" Name="DI_Lift_Servo_servo_on" Device="" Addr="w26.05" />
+		<DI_ITEM Index="102" Name="DI_Lift_Servo_alarm" Device="" Addr="w26.06" />
+		<DI_ITEM Index="103" Name="DI_Lift_Servo_ORG_fail_alarm" Device="" Addr="w26.07" />
+		<DI_ITEM Index="104" Name="DI_Lift_Servo_ABS_fail_alarm" Device="" Addr="w26.08" />
+		<DI_ITEM Index="105" Name="DI_Lift_Servo_Over_software_Limit_alarm" Device="" Addr="w26.09" />
+		<DI_ITEM Index="106" Name="DI_Lift_Servo_Go_Position1_Complete" Device="" Addr="w26.10" />
+		<DI_ITEM Index="107" Name="DI_Lift_Servo_Go_Position2_Complete" Device="" Addr="w26.11" />
+		<DI_ITEM Index="108" Name="DI_Lift_Servo_Go_Position3_Complete" Device="" Addr="w26.12" />
+		<DI_ITEM Index="109" Name="" />
+		<DI_ITEM Index="110" Name="" />
+		<DI_ITEM Index="111" Name="" />
+	</Dig_In>
+	<Dig_Out>
+		<DO_ITEM Index="0" Name="DO_PVN21" Device="GPVN21" Addr="w0.00" Note="Gas Box" />
+		<DO_ITEM Index="1" Name="DO_PVN22" Device="GPVN22" Addr="w0.01" Note="Gas Box" />
+		<DO_ITEM Index="2" Name="DO_PV11" Device="GPV11" Addr="w0.02" Note="Gas Box" />
+		<DO_ITEM Index="3" Name="DO_PV12" Device="GPV12" Addr="w0.03" Note="Gas Box" />
+		<DO_ITEM Index="4" Name="DO_PV21" Device="GPV21" Addr="w0.04" Note="Gas Box" />
+		<DO_ITEM Index="5" Name="DO_PV22" Device="GPV22" Addr="w0.05" Note="Gas Box" />
+		<DO_ITEM Index="6" Name="DO_PV31" Device="GPV31" Addr="w0.06" Note="Gas Box" />
+		<DO_ITEM Index="7" Name="DO_PV32" Device="GPV32" Addr="w0.07" Note="Gas Box" />
+		<DO_ITEM Index="8" Name="DO_PV41" Device="GPV41" Addr="w0.08" Note="Gas Box" />
+		<DO_ITEM Index="9" Name="DO_PV42" Device="GPV42" Addr="w0.09" Note="Gas Box" />
+		<DO_ITEM Index="10" Name="DO_N2_Valve" Device="GPVN2" Addr="w0.10" Note="Gas Box" />
+		<DO_ITEM Index="11" Name="DO_MFC1_Valve" Device="GPV1" Addr="w0.11" Note="Gas Box" />
+		<DO_ITEM Index="12" Name="DO_MFC2_Valve" Device="GPV2" Addr="w0.12" Note="Gas Box" />
+		<DO_ITEM Index="13" Name="DO_MFC3_Valve" Device="GPV3" Addr="w0.13" Note="Gas Box" />
+		<DO_ITEM Index="14" Name="DO_MFC4_Valve" Device="GPV4" Addr="w0.14" Note="Gas Box" />
+		<DO_ITEM Index="15" Name="DO_MFC5_Valve" Device="GPV5" Addr="w0.15" Note="Gas Box" />
+		<DO_ITEM Index="16" Name="DO_MFC6_Valve" Device="GPV6" Addr="w1.00" Note="Gas Box" />
+		<DO_ITEM Index="17" Name="DO_MFC7_Valve" Device="GPV7" Addr="w1.01" Note="Gas Box" />
+		<DO_ITEM Index="18" Name="DO_MFC8_Valve" Device="GPV8" Addr="w1.02" Note="Gas Box" />
+		<DO_ITEM Index="19" Name="DO_N2_Purge1_Valve" Device="N2_Purge" Addr="w1.03" Note="Gas Box" />
+		<DO_ITEM Index="20" Name="DO_N2_Purge2_Valve" Device="N2_Purge" Addr="w1.04" Note="Gas Box" />
+		<DO_ITEM Index="21" Name="DO_Gas_Final_Valve" Device="PV1" Addr="w1.05" />
+		<DO_ITEM Index="22" Name="DO_Soft_Pumping_Valve" Device="PV2" Addr="w1.06" />
+		<DO_ITEM Index="23" Name="DO_Fast_Pumping_Valve" Device="PV3" Addr="w1.07" />
+		<DO_ITEM Index="24" Name="DO_Slit_Door_Open" Device="PV4" Addr="w1.08" />
+		<DO_ITEM Index="25" Name="DO_Slit_Door_Close" Device="PV4" Addr="w1.09" />
+		<DO_ITEM Index="26" Name="" />
+		<DO_ITEM Index="27" Name="" />
+		<DO_ITEM Index="28" Name="" />
+		<DO_ITEM Index="29" Name="DO_Turbo_Pump_Pumping_Valve" Device="PV6" Addr="w1.13" />
+		<DO_ITEM Index="30" Name="DO_Turbo_Pump_Purge_Valve" Device="PV7" Addr="w1.14" />
+		<DO_ITEM Index="31" Name="DO_Gauge_Valve" Device="PV8" Addr="w1.15" />
+		<DO_ITEM Index="32" Name="DO_Reset_Signal" Device="" Addr="w2.00" />
+		<DO_ITEM Index="33" Name="DO_S_Valve_Heater_On" Device="" Addr="w2.01" />
+		<!--<DO_ITEM Index="34" Name="DO_Foreline_Heater_On" Device="" Addr="w2.02" />-->
+		<DO_ITEM Index="35" Name="DO_CHB_H-HT_Heater_On" Device="" Addr="w2.03" />
+		<DO_ITEM Index="36" Name="" />
+		<DO_ITEM Index="37" Name="" />
+		<DO_ITEM Index="38" Name="" />
+		<DO_ITEM Index="39" Name="" />
+		<DO_ITEM Index="40" Name="" />
+		<DO_ITEM Index="41" Name="" />
+		<DO_ITEM Index="42" Name="" />
+		<DO_ITEM Index="43" Name="" />
+		<DO_ITEM Index="44" Name="" />
+		<DO_ITEM Index="45" Name="" />
+		<!--<DO_ITEM Index="46" Name="DO_P_Valve_Heater_On" Device="" Addr="w2.14" />-->
+		<DO_ITEM Index="47" Name="DO_Gas_Line_Heater_On" Device="" Addr="w2.15" />
+		<DO_ITEM Index="48" Name="" />
+		<DO_ITEM Index="49" Name="" />
+		<DO_ITEM Index="50" Name="DO_Lid_Up" Device="" Addr="w3.02" />
+		<DO_ITEM Index="51" Name="DO_Lid_Down" Device="" Addr="w3.03" />
+		<DO_ITEM Index="52" Name="" />
+		<DO_ITEM Index="53" Name="" />
+		<DO_ITEM Index="54" Name="" />
+		<DO_ITEM Index="55" Name="" />
+		<DO_ITEM Index="56" Name="" />
+		<DO_ITEM Index="57" Name="" />
+		<DO_ITEM Index="58" Name="DO_Lift_Servo_Go_Position1" Device="去位置1" Addr="w3.10" />
+		<DO_ITEM Index="59" Name="DO_Lift_Servo_Go_Position2" Device="去位置2" Addr="w3.11" />
+		<DO_ITEM Index="60" Name="DO_Lift_Servo_Go_Position3" Device="去位置3" Addr="w3.12" />
+		<DO_ITEM Index="61" Name="DO_Lift_Servo_Origin" Device="找原点" Addr="w3.13" />
+		<DO_ITEM Index="62" Name="DO_Lift_Servo_Stop" Device="停止" Addr="w3.14" />
+		<DO_ITEM Index="63" Name="DO_Lift_Servo_Manual_UP" Device="手动上升" Addr="w3.15" />
+		<DO_ITEM Index="64" Name="DO_Lift_Servo_Manual_DOWN" Device="手动下降" Addr="w4.00" />
+		<DO_ITEM Index="65" Name="" />
+		<DO_ITEM Index="66" Name="" />
+		<DO_ITEM Index="67" Name="" />
+		<DO_ITEM Index="68" Name="" />
+		<DO_ITEM Index="69" Name="" />
+		<DO_ITEM Index="70" Name="" />
+		<DO_ITEM Index="71" Name="" />
+		<DO_ITEM Index="72" Name="" />
+		<DO_ITEM Index="73" Name="" />
+		<DO_ITEM Index="74" Name="" />
+		<DO_ITEM Index="75" Name="" />
+		<DO_ITEM Index="76" Name="" />
+		<DO_ITEM Index="77" Name="" />
+		<DO_ITEM Index="78" Name="" />
+		<DO_ITEM Index="79" Name="" />
+		<DO_ITEM Index="80" Name="" />
+		<DO_ITEM Index="81" Name="" />
+		<DO_ITEM Index="82" Name="" />
+		<DO_ITEM Index="83" Name="" />
+		<DO_ITEM Index="84" Name="" />
+		<DO_ITEM Index="85" Name="" />
+		<DO_ITEM Index="86" Name="" />
+		<DO_ITEM Index="87" Name="" />
+		<DO_ITEM Index="88" Name="" />
+		<DO_ITEM Index="89" Name="" />
+		<DO_ITEM Index="90" Name="" />
+		<DO_ITEM Index="91" Name="" />
+		<DO_ITEM Index="92" Name="" />
+		<DO_ITEM Index="93" Name="" />
+		<DO_ITEM Index="94" Name="" />
+		<DO_ITEM Index="95" Name="" />
+		<DO_ITEM Index="96" Name="" />
+		<DO_ITEM Index="97" Name="" />
+		<DO_ITEM Index="98" Name="" />
+		<DO_ITEM Index="99" Name="" />
+		<DO_ITEM Index="100" Name="" />
+		<DO_ITEM Index="101" Name="" />
+		<DO_ITEM Index="102" Name="" />
+		<DO_ITEM Index="103" Name="" />
+		<DO_ITEM Index="104" Name="" />
+		<DO_ITEM Index="105" Name="" />
+		<DO_ITEM Index="106" Name="" />
+		<DO_ITEM Index="107" Name="" />
+		<DO_ITEM Index="108" Name="" />
+		<DO_ITEM Index="109" Name="" />
+		<DO_ITEM Index="110" Name="" />
+		<DO_ITEM Index="111" Name="" />
+	</Dig_Out>
+	<Ana_Out>
+		<AO_ITEM Index="0" Name="AO_MFC1_Flow_Setpoint" Device="" Addr="d1000" Note="MFC" />
+		<AO_ITEM Index="1" Name="AO_MFC2_Flow_Setpoint" Device="" Addr="d1002" Note="MFC" />
+		<AO_ITEM Index="2" Name="AO_MFC3_Flow_Setpoint" Device="" Addr="d1004" Note="MFC" />
+		<AO_ITEM Index="3" Name="AO_MFC4_Flow_Setpoint" Device="" Addr="d1006" Note="MFC" />
+		<AO_ITEM Index="4" Name="AO_MFC5_Flow_Setpoint" Device="" Addr="d1008" Note="MFC" />
+		<AO_ITEM Index="5" Name="AO_MFC6_Flow_Setpoint" Device="" Addr="d1010" Note="MFC" />
+		<AO_ITEM Index="6" Name="AO_MFC7_Flow_Setpoint" Device="" Addr="d1012" Note="MFC" />
+		<AO_ITEM Index="7" Name="AO_MFC8_Flow_Setpoint" Device="" Addr="d1014" Note="MFC" />
+		<!--<AO_ITEM Index="8" Name="AO_He_Flow_Setpoint" Device="" Addr="d1016" Note="MFC" />-->
+		<AO_ITEM Index="9" Name="AO_Turbo_Pump_N2_Flow_Setpoint" Device="" Addr="d1018" Note="MFC" />
+		<AO_ITEM Index="10" Name="AO_S_Valve_Temperature_Setpoint" Device="" Addr="d1020" Note="以前是Valve" />
+		<AO_ITEM Index="11" Name="AO_S_Valve_Temp_Limit_Setpoint" Device="" Addr="d1022" />
+		<!--<AO_ITEM Index="12" Name="AO_Foreline_Temperature_Setpoint" Device="" Addr="d1024" Note="前级管道设定温度" />
+		<AO_ITEM Index="13" Name="AO_Foreline_Temp_Limit_Setpoint" Device="" Addr="d1026" Note="Temp Limit" />-->
+		<AO_ITEM Index="14" Name="AO_CHB_H-HT_Temperature_Setpoint" Device="" Addr="d1028" Note="H-HT设定温度" />
+		<AO_ITEM Index="15" Name="AO_CHB_H-HT_Temp_Limit_Setpoint" Device="" Addr="d1030" Note="H-HT极限温度设定" />
+		<AO_ITEM Index="16" Name="AO_Heartbeat" Device="" Addr="d1032" Note="PC to PLC" />
+		<!--<AO_ITEM Index="17" Name="AO_ESC_He_Pressure_Setpoint" Device="" Addr="d1034" Note="ESC配置" />
+		<AO_ITEM Index="18" Name="AO_ESC_He_Control_Mode" Device="" Addr="d1036" />
+		<AO_ITEM Index="19" Name="AO_P_Valve_Temperature_Setpoint" Device="" Addr="d1038" Note="钟摆阀门加热设定温度" />
+		<AO_ITEM Index="20" Name="AO_P_Valve_Temp_Limit_Setpoint" Device="" Addr="d1040" Note="钟摆阀门Temp Limit" />-->
+		<AO_ITEM Index="21" Name="AO_Gas_Line_Temperature_Setpoint" Device="" Addr="d1042" Note="Gas Line加热设定温度" />
+		<AO_ITEM Index="22" Name="AO_Gas_Line_Temp_Limit_Setpoint" Device="" Addr="d1044" Note="Gas LineTemp Limit" />
+		<AO_ITEM Index="23" Name="" />
+		<AO_ITEM Index="24" Name="" />
+		<AO_ITEM Index="25" Name="" />
+		<AO_ITEM Index="26" Name="" />
+		<AO_ITEM Index="27" Name="" />
+		<AO_ITEM Index="28" Name="" />
+		<AO_ITEM Index="29" Name="AO_CHB_H-HT_Power_Distribute_Percent" Device="" Addr="d1058" />
+		<AO_ITEM Index="30" Name="" />
+		<AO_ITEM Index="31" Name="" />
+		<AO_ITEM Index="32" Name="" />
+		<AO_ITEM Index="33" Name="" />
+		<AO_ITEM Index="34" Name="" />
+		<AO_ITEM Index="35" Name="" />
+		<AO_ITEM Index="36" Name="" />
+		<AO_ITEM Index="37" Name="" />
+		<AO_ITEM Index="38" Name="" />
+		<AO_ITEM Index="39" Name="" />
+		<AO_ITEM Index="40" Name="" />
+		<AO_ITEM Index="41" Name="" />
+		<AO_ITEM Index="42" Name="" />
+		<AO_ITEM Index="43" Name="" />
+		<AO_ITEM Index="44" Name="" />
+		<AO_ITEM Index="45" Name="" />
+		<AO_ITEM Index="46" Name="" />
+		<AO_ITEM Index="47" Name="" />
+		<AO_ITEM Index="48" Name="" />
+		<AO_ITEM Index="49" Name="" />
+	</Ana_Out>
+	<Ana_In>
+		<AI_ITEM Index="0" Name="AI_Chamber_Pressure_10t" Device="" Addr="d2000" Note="float" />
+		<AI_ITEM Index="1" Name="AI_Process_Pressure_100mt" Device="" Addr="d2002" Note="float" />
+		<AI_ITEM Index="2" Name="AI_Foreline_Pressure_10t" Device="" Addr="d2004" Note="float" />
+		<!--<AI_ITEM Index="3" Name="AI_ESC_He_Pressure_100t" Device="" Addr="d2006" Note="float" />-->
+		<AI_ITEM Index="4" Name="AI_MFC1_Flow" Device="" Addr="d2008" Note="float" />
+		<AI_ITEM Index="5" Name="AI_MFC2_Flow" Device="" Addr="d2010" Note="float" />
+		<AI_ITEM Index="6" Name="AI_MFC3_Flow" Device="" Addr="d2012" Note="float" />
+		<AI_ITEM Index="7" Name="AI_MFC4_Flow" Device="" Addr="d2014" Note="float" />
+		<AI_ITEM Index="8" Name="AI_MFC5_Flow" Device="" Addr="d2016" Note="float" />
+		<AI_ITEM Index="9" Name="AI_MFC6_Flow" Device="" Addr="d2018" Note="float" />
+		<AI_ITEM Index="10" Name="AI_MFC7_Flow" Device="" Addr="d2020" Note="float" />
+		<AI_ITEM Index="11" Name="AI_MFC8_Flow" Device="" Addr="d2022" Note="float" />
+		<!--<AI_ITEM Index="12" Name="AI_ESC_He_Flow" Device="" Addr="d2024" Note="float" />-->
+		<AI_ITEM Index="13" Name="AI_Turbo_Pump_N2_Flow" Device="" Addr="d2026" Note="float" />
+		<AI_ITEM Index="14" Name="AI_S_Valve_Control_TC_Temp" Device="" Addr="d2028" Note="float" />
+		<AI_ITEM Index="15" Name="" />
+		<!--<AI_ITEM Index="16" Name="AI_Foreline_Control_TC_Temp" Device="" Addr="d2032" Note="float" />-->
+		<AI_ITEM Index="17" Name="" />
+		<AI_ITEM Index="18" Name="AI_CHB_H-HT_Control_TC_Temp" Device="" Addr="d2036" Note="float" />
+		<AI_ITEM Index="19" Name="" />
+		<AI_ITEM Index="20" Name="" />
+		<AI_ITEM Index="21" Name="" />
+		<AI_ITEM Index="22" Name="AI_Heartbeat_FB" Device="" Addr="d2044" Note="float" />
+		<AI_ITEM Index="23" Name="AI_Second" Device="" Addr="d2046" Note="float" />
+		<AI_ITEM Index="24" Name="AI_Minute" Device="" Addr="d2048" Note="float" />
+		<AI_ITEM Index="25" Name="AI_Time" Device="" Addr="d2050" Note="float" />
+		<AI_ITEM Index="26" Name="AI_Day" Device="" Addr="d2052" Note="float" />
+		<AI_ITEM Index="27" Name="AI_Month" Device="" Addr="d2054" Note="float" />
+		<AI_ITEM Index="28" Name="AI_Year" Device="" Addr="d2056" Note="float" />
+		<AI_ITEM Index="29" Name="" />
+		<AI_ITEM Index="30" Name="" />
+		<AI_ITEM Index="31" Name="AI_Chamber_Pressure_Virtual" Device="" Addr="d2062" Note="float" />
+		<!--<AI_ITEM Index="32" Name="AI_P_Valve_Control_TC_Temp" Device="" Addr="d2064" Note="float" />-->
+		<AI_ITEM Index="33" Name="AI_Gas_Line_Control_TC_Temp" Device="" Addr="d2066" Note="float" />
+		<AI_ITEM Index="34" Name="" />
+		<!--<AI_ITEM Index="35" Name="AI_S_Valve_Monitor_TC1_Temp" Device="" Addr="d2070" Note="float" />-->
+		<AI_ITEM Index="36" Name="" />
+		<AI_ITEM Index="37" Name="" />
+		<AI_ITEM Index="38" Name="" />
+		<!--<AI_ITEM Index="39" Name="AI_Foreline_Monitor_TC1_Temp" Device="" Addr="d2078" Note="float" />
+		<AI_ITEM Index="40" Name="AI_Foreline_Monitor_TC2_Temp" Device="" Addr="d2080" Note="float" />
+		<AI_ITEM Index="41" Name="AI_Foreline_Monitor_TC3_Temp" Device="" Addr="d2082" Note="float" />-->
+		<AI_ITEM Index="42" Name="" />
+		<!--<AI_ITEM Index="43" Name="AI_CHB_Wall_Monitor_TC1_Temp" Device="" Addr="d2086" Note="float" />
+		<AI_ITEM Index="44" Name="AI_CHB_Wall_Monitor_TC2_Temp" Device="" Addr="d2088" Note="float" />
+		<AI_ITEM Index="45" Name="AI_CHB_Wall_Monitor_TC3_Temp" Device="" Addr="d2090" Note="float" />-->
+		<AI_ITEM Index="46" Name="" />
+		<AI_ITEM Index="47" Name="" />
+		<AI_ITEM Index="48" Name="" />
+		<AI_ITEM Index="49" Name="" />
+		<AI_ITEM Index="50" Name="" />
+		<AI_ITEM Index="51" Name="" />
+		<AI_ITEM Index="52" Name="" />
+		<!--<AI_ITEM Index="53" Name="AI_ESC_inner_coolant_inlet_TC_Temp" Device="" Addr="d2106" Note="float" />
+		<AI_ITEM Index="54" Name="AI_ESC_inner_coolant_outlet_TC_Temp" Device="" Addr="d2108" Note="float" />
+		<AI_ITEM Index="55" Name="AI_ESC_outer_coolant_inlet_TC_Temp" Device="" Addr="d2110" Note="float" />
+		<AI_ITEM Index="56" Name="AI_ESC_outer_coolant_outlet_TC_Temp" Device="" Addr="d2112" Note="float" />
+		<AI_ITEM Index="57" Name="AI_Top_Plate_coolant_inlet_TC_Temp" Device="" Addr="d2114" Note="float" />
+		<AI_ITEM Index="58" Name="AI_Top_Plate_coolant_outlet_TC_Temp" Device="" Addr="d2116" Note="float" />-->
+	</Ana_In>
+</IO_DEFINE>

+ 449 - 0
Venus/Venus_RT/Config/System.sccfg

@@ -1119,4 +1119,453 @@
 		</configs>
 
 	</configs>
+
+	<!--PMC-->
+	<configs name="PMC" nameView="PMC" >
+		<config default="2" name="ChamberType"  nameView="Chamber Type" description="0=>Venus,1=>Kepler2300,2=>Kepler2200A,3=>Kepler2200B" max="3" min="0" paramter="" tag=""  unit="" type="Integer" visible="false"/>
+		<config default="120" name="PrepareTransferTimeout" nameView="Prepare Transfer Timeout" description="prepare transfer time out" max="99999" min="1" paramter="" tag="" unit="s" type="Integer" />
+		<config default="120" name="TransferWaferTimeout" nameView="Transfer Wafer Timeout" description="Transfer Wafer Timeout" max="99999" min="1" paramter="" tag="" unit="s" type="Integer" />
+		<config default="1" name="OpenGasValveTimeout" nameView="Open Gas Valve Timeout" description="开阀超时" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		<config default="1" name="TimeLimitOfCloseGasValve" nameView="Time Limit Of Close Gas Valve" description="" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+		<config default="1" name="OpenCloseSlitValveTimeout" nameView="Open Close Slit Valve Timeout" description="" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+		<config default="180" name="VentTime" nameView="Vent Time" description="" max="600" min="0" paramter="" tag="" unit="second" type="Integer" />
+		<config default="100" name="GasFlowPressureAlarmRange" nameView="Process Pressure Alarm Range" description="" max="760000" min="0" paramter="" tag="" unit="mtorr" type="Double" />
+		<config default="60" name="GasFlowPressureAlarmTime" nameView="Process Pressure Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Double" />
+		<config default="100" name="GasFlowPressureWarningRange" nameView="Process Pressure Warning Range" description="" max="760000" min="0" paramter="" tag="" unit="mtorr" type="Double" />
+		<config default="60" name="GasFlowPressureWarningTime" nameView="Process Pressure Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Double" />
+		<config default="true" name="EnableThrottleValve" nameView="Enable Throttle Valve" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+		<config default="150" name="ValveHeaterSetPointLimit" nameView="Valve Heater Set Point Limit" description="" max="500" min="0" paramter="" tag="" unit="" type="Integer" />
+		<config default="140" name="ForeLineHeaterSetPointLimit" nameView="ForeLine Heater Set Point Limit" description="" max="500" min="0" paramter="" tag="" unit="" type="Integer" />
+		<config default="120" name="CheckSubstrateTempTimeout" nameView="Check Substrate Temp Timeout" description="" max="3600" min="0" paramter="" tag="" unit="" type="Integer" />
+		<config default="90" name="CheckATMTimeout" nameView="Check ATM Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
+		<config default="2000" name="OverVentTime" nameView="Over Vent Time Delay" description="" max="60000" min="0" paramter="" tag="" unit="s" type="Integer" />
+		<config default="780000" name="ChamberBasePressureThreshold" nameView="Chamber Base Pressure Threshold" description="" max="1000000" min="0" paramter="" tag="" unit="mtorr" type="Double" />
+		<config default="120" name="ChamberBaseTemperatureThreshold" nameView="Chamber Base Temperature Threshold" description="" max="1000" min="0" paramter="" tag="" unit="°C" type="Double" />
+		<config default="10" name="ProcessPressureOffset" nameView="Process Pressure Offset" description="" max="100" min="0" paramter="" tag="" unit="mtorr" type="Double" />
+		<config default="7500" name="ChamberVolume" nameView="Chamber Volume" max="100000" min="0" paramter="" tag="" unit="mL" visible="false" type="Double" />
+		<config default="25" name="GasTemperature" nameView="Gas Temperature" max="1000" min="-1000" paramter="" tag="" unit="℃" visible="false" type="Double" />
+		<config default="9" name="TargetPressureInMFCVerification" nameView="MFC verification中的目标压力" max="100" min="0" paramter="" tag="" unit="Torr" visible="false" type="Double" />
+		<config default="180" name="GasFlowTimeInMFCVerification" nameView="MFC verification中的目标时间" max="1000" min="0" paramter="" tag="" unit="second" visible="false" type="Double" />
+		<config default="0" name="PickDelayTime" nameView="Pick Delay Time before retract robot arm(ms)" description="" max="10000" min="0" paramter="" tag="" unit="ms" type="Integer" />
+		<config default="0" name="PlaceDelayTime" nameView="Place Delay Time before retract robot arm(ms)" description="" max="10000" min="0" paramter="" tag="" unit="ms" type="Integer" />
+		<config default="Strip" name="ChamberLabel"  nameView="Chamber Label" description="Chamber名称" max="" min="" paramter="" tag=""  unit="" type="String" />
+		<config default="30" name="MaxDeviationInMFCVerification" nameView="MFC verification允许的最大偏差值(%)" max="100000" min="0" paramter="" tag="" unit="%" visible="false" type="Double" />
+		<config default="150" name="WallHeaterSetPointLimit" nameView="Wall Heater Set Point Limit" description="" max="500" min="0" paramter="" tag="" unit="" type="Integer" />
+		<config default="false" name="EnableWallHeater" nameView="Enable Chamber Wall Heater" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+		<config default="false" name="EnableGridHeater" nameView="Enable Chamber Grid Heater" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+		<config default="5" name="RecipeToleranceIgnoreTime" nameView="Ignore Time Before Check Recipe Step Tolerance" description="" max="60" min="0" paramter="" tag="" unit="s" type="Integer" />
+		<config default="1" name="RecipeRunningMode" nameView="0, only run current recipe; 1, include chuck/dechuck recipe" description="" max="5" min="0" paramter="" tag="" unit="" type="Integer" />
+		<config default="751" name="ForelineInterlockPressure" nameView="Foreline Interlock Pressure" description="" max="2000" min="500" paramter="" tag="" unit="°C" type="Double" />
+
+		<configs name="MFCVerification" nameView="MFC Verification" >
+			<config default="1" name="BasePressure" nameView="开始条件:腔体压力达到时开始流气" max="100" min="1" paramter="" tag="" unit="mTorr" visible="true" type="Double" />
+			<config default="180" name="PumpingTime" nameView="抽气时间" max="7200" min="0" paramter="" tag="" unit="second" visible="true" type="Integer" />
+			<config default="10" name="GasFlowTime" nameView="结束条件:流气多长时间" max="600" min="0" paramter="" tag="" unit="second" visible="true" type="Integer" />
+			<config default="180" name="HoldTime" nameView="Hold 时间" max="7200" min="0" paramter="" tag="" unit="second" visible="true" type="Integer" />
+			<config default="7500" name="ChamberVolume" nameView="Chamber Volume" max="100000" min="0" paramter="" tag="" unit="mL"  visible="false" type="Double" />
+			<config default="25" name="GasTemperature" nameView="Gas Temperature" max="1000" min="-1000" paramter="" tag="" unit="℃" visible="false" type="Double" />
+			<config default="9" name="TargetPressure" nameView="结束条件:腔体压力达到的最大值" max="100" min="0" paramter="" tag="" unit="Torr" visible="true" type="Double" />
+
+			<config default="30" name="MaxDeviation" nameView="结果检查:最大偏差,超过该值报警" max="100000" min="0" paramter="" tag="" unit="%" visible="true" type="Double" />
+			<config default="20" name="PressureStableTolerance" nameView="稳定条件:压力1秒内的最大变化范围" max="100000" min="0" paramter="" tag="" unit="mTorr" visible="true" type="Double" />
+			<config default="20" name="FlowStableTolerance" nameView="稳定条件:流量设定值和反馈值允许的最大偏差" max="100" min="0" paramter="" tag="" unit="%" visible="true" type="Double" />
+			<config default="5" name="CheckStableTimeout" nameView="稳定条件:在多长时间内处于稳定状态" max="100" min="0" paramter="" tag="" unit="%" visible="false" type="Double" />
+		</configs>
+
+		<configs name="Chiller" nameView="Chiller" >
+			<config default="true" name="EnableChiller" nameView="Enable Chiller" description="enable chiller or not" max="1" min="0" tag="" unit="" type="Bool" />
+			<config default="false" name="ChillerSameWithPMA" nameView="Chiller Same With PMA" description="enable chiller same with PMA or not" max="1" min="0" tag="" unit="" type="Bool" />
+			<config default="1" name="MFG" nameView="MFG" description="厂商, 1:SMC; 2, AIRSYS" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="1" name="CommunicationType" nameView="Communication Type" description="0:Analogue; 1:RS232; 2:Ethernet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="COM44" name="Port" nameView="Port" description="serial port name of pump" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="10" name="ChillerTemperatureOffset" nameView="Chiller Temperature Offset" description="" max="100" min="0" paramter="" tag="" unit="degree" type="Double" />
+			<config default="300" name="SetPointLimitMax" nameView="Chiller Set Point Limit Max" description="" max="500" min="0" paramter="" tag="" unit="degree" type="Double" />
+			<config default="0" name="SetPointLimitMin" nameView="Chiller Set Point Limit Min" description="" max="500" min="0" paramter="" tag="" unit="degree" type="Double" />
+			<config default="true" name="EnableToleranceAlarm" nameView="Enable Tolerance Alarm" description="Enable Tolerance Alarm" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="20" name="ToleranceAlarmRange" nameView="Tolerance Alarm Range" description="Tolerance Alarm Range" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="60" name="ToleranceAlarmTime" nameView="Tolerance Alarm Time" description="Tolerance Alarm Time" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="DryPump" nameView="Dry Pump" >
+			<config default="1" name="MFG" nameView="MFG" description="厂商, 1:Sky; 2:Edwards" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="1" name="CommunicationType" nameView="Communication Type" description="0:Analogue; 1:RS232; 2:Ethernet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="COM22" name="Port" nameView="Port" description="serial port name of pump" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="1000" name="ChamberForelinePressureThreshold" nameView="Chamber Foreline Pressure Threshold" description="" max="10000" min="0" paramter="" tag="" unit="mtorr" type="Double" />
+			<config default="20" name="ChamberForelinePressureTimeout" nameView="Chamber Foreline Pressure Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
+		</configs>
+		<configs name="Rf" nameView="Source RF" >
+			<config default="1" name="MFG" nameView="MFG" description="厂商, 1:AdTec; 2:Comet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="1" name="CommunicationType" nameView="Communication Type" description="0:Analogue; 1:RS232; 2:Ethernet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="COM14" name="Port" nameView="Port" description="serial port name of RFG" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="192.168.10.21:502" name="IPAddress" nameView="IP Address" description="RF IP,default 127.0.0.1:502" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="500" name="PowerAlarmRange" nameView="Power Alarm Range" description="" max="1000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="10" name="PowerAlarmTime" nameView="Power Alarm Time" description="" max="10" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="500" name="PowerWarningRange" nameView="Power Warning Range" description="" max="1000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="10" name="PowerWarningTime" nameView="Power Warning Time" description="" max="10" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="1" name="ReflectPowerAlarmRange" nameView="Reflect Power Alarm Range" description="" max="1000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="1" name="ReflectPowerAlarmTime" nameView="Reflect Power Alarm Time" description="" max="10" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="3000" name="PowerRange" nameView="Power Range" description="" max="30000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="1" name="Coefficient" nameView="Coefficient" description="" max="10" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="false" name="EnablePulsingFunction" nameView="Enable Pulsing Function" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="false" name="EnableReflectPower" nameView="Enable Reflect Power" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="false" name="EnableVoltageCurrent" nameView="Enable Voltage Current" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="1" name="PowerRegulationFactor" nameView="Power Regulation Factor" description="" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="1000" name="RfPowerAlarmRange" nameView="RF Power Alarm Range" description="" max="10000" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="3000" name="RfPowerAlarmTime" nameView="RF Power Alarm Time" description="" max="10000" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="3" name="RFTurnOnTimeout" nameView="RF Turn On Timeout" description="" max="10" min="0" paramter="" tag="" unit="S" type="Integer" />
+			<config default="false" name="EnableCalibration" nameView="是否校准" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
+			<config default="100#100;200#200;" name="CalibrationTable" nameView="校准表" max="" min="0" paramter="" tag="" unit="" visible="false" type="String" />
+		</configs>
+		<configs name="Match" nameView="Source Match" >
+			<config default="false" name="EnableMatch" nameView="Enable Source Match" description="enable match or not" max="1" min="0" tag="" unit="" type="Bool" />
+			<config default="1" name="MFG" nameView="MFG" description="厂商, 1:AdTec; 2:Comet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="1" name="CommunicationType" nameView="Communication Type" description="0:Analogue; 1:RS232; 2:Ethernet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="COM15" name="Port" nameView="Port" description="serial port name of match" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="192.168.10.21:502" name="IPAddress" nameView="IP Address" description="Match IP,default 127.0.0.1:502" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="1" name="MatchMode" nameView="Match Mode" description="" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="false" name="EnableC1C2Position" nameView="Enable Source C1 C2 Position" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+			<!--<config default="10" name="MatchPositionC1" nameView="CycleCount" description="" max="100" min="0" paramter="" tag="" unit="" type="Double" />
+      <config default="10" name="MatchPositionC2" nameView="CycleCount" description="" max="100" min="0" paramter="" tag="" unit="" type="Double" />-->
+		</configs>
+
+		<configs name="BiasRf" nameView="Bias RF" >
+			<config default="true" name="EnableBiasRF" nameView="Enable Bias RF" description="enable bias RF or not" max="1" min="0" tag="" unit="" type="Bool" />
+			<config default="2" name="MFG" nameView="MFG" description="厂商, 1:AdTec; 2:Comet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="2" name="CommunicationType" nameView="Communication Type" description="0:Analogue; 1:RS232; 2:Ethernet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="COM14" name="Port" nameView="Port" description="serial port name of RFG" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="127.0.0.1:502" name="IPAddress" nameView="IP Address" description="Bias RF IP,default 127.0.0.1:502" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="500" name="PowerAlarmRange" nameView="Power Alarm Range" description="" max="1000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="10" name="PowerAlarmTime" nameView="Power Alarm Time" description="" max="10" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="500" name="PowerWarningRange" nameView="Power Warning Range" description="" max="1000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="10" name="PowerWarningTime" nameView="Power Warning Time" description="" max="10" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="1" name="ReflectPowerAlarmRange" nameView="Reflect Power Alarm Range" description="" max="1000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="1" name="ReflectPowerAlarmTime" nameView="Reflect Power Alarm Time" description="" max="10" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="3000" name="PowerRange" nameView="Power Range" description="" max="30000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="1" name="Coefficient" nameView="Coefficient" description="" max="10" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="false" name="EnablePulsingFunction" nameView="Enable Pulsing Function" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="false" name="EnableReflectPower" nameView="Enable Reflect Power" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="false" name="EnableVoltageCurrent" nameView="Enable Voltage Current" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="1" name="PowerRegulationFactor" nameView="Power Regulation Factor" description="" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="1000" name="RfPowerAlarmRange" nameView="RF Power Alarm Range" description="" max="10000" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="3000" name="RfPowerAlarmTime" nameView="RF Power Alarm Time" description="" max="10000" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="false" name="EnableCalibration" nameView="是否校准" max="" min="" paramter="" tag="" unit="" visible="true" type="Bool" />
+			<config default="100#100;200#200;" name="CalibrationTable" nameView="校准表" max="" min="0" paramter="" tag="" unit="" visible="false" type="String" />
+		</configs>
+		<configs name="BiasMatch" nameView="Bias Match" >
+			<config default="false" name="EnableBiasMatch" nameView="Enable Bias Match" description="enable bias match or not" max="1" min="0" tag="" unit="" type="Bool" />
+			<config default="2" name="MFG" nameView="MFG" description="厂商, 1:AdTec; 2:Comet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="2" name="CommunicationType" nameView="Communication Type" description="0:Analogue; 1:RS232; 2:Ethernet" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="COM15" name="Port" nameView="Port" description="serial port name of match" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="127.0.0.1:502" name="IPAddress" nameView="IP Address" description="Bias Match IP,default 127.0.0.1:502" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="1" name="MatchMode" nameView="Match Mode" description="" max="10" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="false" name="EnableBiasC1C2Position" nameView="Enable Bias C1 C2 Position" description="" max="10" min="0" paramter="" tag="" unit="" type="Bool" />
+		</configs>
+		<configs name="MfcGas1" nameView="MFC Gas1" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable gas 1 or not" tag="" unit="" type="Bool" />
+			<config default="O2" name="GasName" nameView="Gas Name" description="Name of NO.1 gas stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcGas2" nameView="MFC Gas2" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable gas 2 or not" tag="" unit="" type="Bool" />
+			<config default="N2" name="GasName" nameView="Gas Name" description="Name of NO.2 gas stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcGas3" nameView="MFC Gas3" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable gas 3 or not" tag="" unit="" type="Bool" />
+			<config default="AR" name="GasName" nameView="Gas Name" description="Name of NO.3 gas stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcGas4" nameView="MFC Gas4" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable gas 4 or not" tag="" unit="" type="Bool" />
+			<config default="Gas4" name="GasName" nameView="Gas Name" description="Name of NO.4 gas stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="Mfc Enable Alarm" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="Mfc Alarm Range" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="Mfc Alarm Time" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcGas5" nameView="MFC Gas5" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable gas 5 or not" tag="" unit="" type="Bool" />
+			<config default="Gas5" name="GasName" nameView="Gas Name" description="Name of NO.5 gas stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="Mfc Enable Alarm" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="Mfc Alarm Range" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="Mfc Alarm Time" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcGas6" nameView="MFC Gas6" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable gas 6 or not" tag="" unit="" type="Bool" />
+			<config default="AR" name="GasName" nameView="Gas Name" description="Name of NO.6 gas stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcGas7" nameView="MFC Gas7" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable gas 7 or not" tag="" unit="" type="Bool" />
+			<config default="Gas4" name="GasName" nameView="Gas Name" description="Name of NO.7 gas stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="Mfc Enable Alarm" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="Mfc Alarm Range" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="Mfc Alarm Time" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcGas8" nameView="MFC Gas8" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable gas 8 or not" tag="" unit="" type="Bool" />
+			<config default="Gas5" name="GasName" nameView="Gas Name" description="Name of NO.8 gas stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="Mfc Enable Alarm" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="Mfc Alarm Range" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="Mfc Alarm Time" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcN2" nameView="MFC N2" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable N2 or not" tag="" unit="" type="Bool" />
+			<config default="N2" name="GasName" nameView="Gas Name" description="Name of N2 stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="Mfc Enable Alarm" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="Mfc Alarm Range" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="Mfc Alarm Time" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="MfcHe" nameView="MFC He" >
+			<config default="true" name="Enable" nameView="Enable" description="Enable He or not" tag="" unit="" type="Bool" />
+			<config default="He" name="GasName" nameView="Gas Name" description="Name of He stick" tag="" unit="" type="String" />
+			<config default="100" name="MfcN2Scale" nameView="MFC N2 Scale" description="Max scale by N2 tuning" max="10000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="MfcScaleFactor" nameView="MFC Scale Factor" description="Scale factor" max="10" min="0" tag="" unit="sccm" type="Double" />
+			<config default="100" name="DefaultSetPoint" nameView="Default Set Point" description="default setpoint" max="1000" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="1" name="FlowRegulationFactor" nameView="Flow Regulation Factor" description="flow regulation factor" max="10" min="0" tag="" unit="sccm" type="Integer" />
+			<config default="true" name="MfcEnableAlarm" nameView="MFC Enable Alarm" description="Mfc Enable Alarm" max="1" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="10" name="MfcAlarmRange" nameView="MFC Alarm Range" description="Mfc Alarm Range" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcAlarmTime" nameView="MFC Alarm Time" description="Mfc Alarm Time" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="MfcWarningRange" nameView="MFC Warning Range" description="" max="200" min="0" paramter="" tag="" unit="sccm" type="Integer" />
+			<config default="10" name="MfcWarningTime" nameView="MFC Warning Time" description="" max="60" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="Pump" nameView="Pump" >
+			<config default="30" name="LeakRate" nameView="Leak Rate" description="" max="756000" min="0" paramter="" tag="" unit="mTorrPerMin" type="Double" />
+			<config default="300" name="LeakCheckPumpingTime" nameView="Leak Check Pumping Time" description="" max="3000" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="180" name="LeakCheckHoldTime" nameView="Leak Check Hold Time" description="" max="3000" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="10" name="PumpBasePressure" nameView="Pump Base Pressure" description="" max="756000" min="0" paramter="" tag="" unit="mTorr" type="Integer" />
+			<config default="1" name="LeakCheckBasePressure" nameView="Leak Check Base Pressure" description="" max="100" min="0" paramter="" tag="" unit="mTorr" type="Double" />
+			<config default="1,2,3,4,5,6,7,8" name="LeakCheckGasLineNums" nameView="LeakCheck GasLineNums" description="GasLine numbers for Leak Check" tag="" unit="" type="String" />
+			<config default="120" name="PumpTimeLimit" nameView="Pump Time Limit" description="" max="3000" min="0" paramter="" tag="" unit="" type="Double" />
+			<config default="5" name="PumpValveDelay" nameView="Pump Valve Delay" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
+			<config default="75" name="RoughPumpDownPressure" description="PM Rough Pumping Pressure" max="200" min="0" paramter="" tag="" unit="Torr" type="Integer" />
+			<config default="200" name="PumpVHe2FlowPressure" nameView="He2 Flow Pressure" description="" max="756000" min="0" paramter="" tag="" unit="mTorr" type="Integer" />
+			<config default="100" name="LoadLockPumpBasePressure" description="LoadLock Pump Base Pressure" max="756000" min="0" paramter="" tag="" unit="mTorr" type="Integer" />
+			<config default="120" name="LoadLockPumpTimeLimit" description="LoadLock Pump Time Limit" max="3000" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="LoadLockPurgeVentPressure" description="LoadLock Purge Vent Pressure" max="760" min="0" paramter="" tag="" unit="Torr" type="Integer" />
+			<config default="30" name="LoadLockPurgeCycleCount" description="LoadLock Purge Cycle Count" max="200" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="120" name="LoadLockPurgePumpTime" description="LoadLock Purge Pump Time" max="7200" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="180" name="LoadLockLeakCheckPumpTime" description="LoadLock Leak Check Pump Time" max="7200" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="300" name="LoadLockLeakCheckWaitTime" description="LoadLock Leak Check Wait Time" max="7200" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="30" name="LoadLockLeakRate" description="LoadLock Leak Rate" max="756000" min="0" paramter="" tag="" unit="mTorrPerMin" type="Double" />
+		</configs>
+		<configs name="Purge" nameView="Purge" >
+			<config default="30" name="PurgeCycleCount" nameView="Purge Cycle Count" description="" max="200" min="0" paramter="" tag="" unit="times" type="Integer" />
+			<config default="1000" name="PurgeVentPressure" nameView="Purge Vent Pressure" description="" max="10000" min="0" paramter="" tag="" unit="mtorr" type="Integer" />
+			<config default="75" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="200" min="0" paramter="" tag="" unit="mtorr" type="Integer" />
+			<config default="60" name="PurgeVentTimeLimit" nameView="Purge Vent Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="60" name="PurgePumpTimeLimit" nameView="Purge Pump Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="PurgeVentStableTime" nameView="Purge Vent Stable Time" description="" max="600" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="60" name="PurgePumpTime" nameView="Purge Pump Time" description="" max="7200" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="30" name="GasPurgeCycleCount" nameView="Gas Purge Cycle Count" description="" max="200" min="0" paramter="" tag="" unit="times" type="Integer" />
+			<config default="5" name="GasPurgeFlowTime" nameView="Gas Purge Flow Time" description="" max="300" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="10" name="GasPurgePumpTime" nameView="Gas Purge Pump Time" description="" max="300" min="0" paramter="" tag="" unit="second" type="Integer" />
+		</configs>
+		<configs name="HeaterChamber" nameView="Heater Substrate" >
+			<config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+
+			<config name="TempOffsetPoint_1" nameView="Temp Offset Point 1" description="温度补偿点 1" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_1" nameView="Offset Value 1" description="补偿值 1" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_2" nameView="Temp Offset Point 2" description="温度补偿点 2" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_2" nameView="Offset Value 2" description="补偿值 2" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_3" nameView="Temp Offset Point 3" description="温度补偿点 3" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_3" nameView="Offset Value 3" description="补偿值 3" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_4" nameView="Temp Offset Point 4" description="温度补偿点 4" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_4" nameView="Offset Value 4" description="补偿值 4" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_5" nameView="Temp Offset Point 5" description="温度补偿点 5" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_5" nameView="Offset Value 5" description="补偿值 5" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_6" nameView="Temp Offset Point 6" description="温度补偿点 6" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_6" nameView="Offset Value 6" description="补偿值 6" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_7" nameView="Temp Offset Point 7" description="温度补偿点 7" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_7" nameView="Offset Value 7" description="补偿值 7" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_8" nameView="Temp Offset Point 8" description="温度补偿点 8" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_8" nameView="Offset Value 8" description="补偿值 8" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_9" nameView="Temp Offset Point 9" description="温度补偿点 9" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_9" nameView="Offset Value 9" description="补偿值 9" unit="degree" type="Double" max="300" min="0" />
+		</configs>
+
+		<configs name="WallHeater" nameView="Heater Wall" >
+			<config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+
+			<config name="TempOffsetPoint_1" nameView="Temp Offset Point 1" description="温度补偿点 1" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_1" nameView="Offset Value 1" description="补偿值 1" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_2" nameView="Temp Offset Point 2" description="温度补偿点 2" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_2" nameView="Offset Value 2" description="补偿值 2" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_3" nameView="Temp Offset Point 3" description="温度补偿点 3" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_3" nameView="Offset Value 3" description="补偿值 3" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_4" nameView="Temp Offset Point 4" description="温度补偿点 4" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_4" nameView="Offset Value 4" description="补偿值 4" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_5" nameView="Temp Offset Point 5" description="温度补偿点 5" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_5" nameView="Offset Value 5" description="补偿值 5" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_6" nameView="Temp Offset Point 6" description="温度补偿点 6" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_6" nameView="Offset Value 6" description="补偿值 6" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_7" nameView="Temp Offset Point 7" description="温度补偿点 7" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_7" nameView="Offset Value 7" description="补偿值 7" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_8" nameView="Temp Offset Point 8" description="温度补偿点 8" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_8" nameView="Offset Value 8" description="补偿值 8" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_9" nameView="Temp Offset Point 9" description="温度补偿点 9" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_9" nameView="Offset Value 9" description="补偿值 9" unit="degree" type="Double" max="300" min="0" />
+		</configs>
+
+		<configs name="ForelineHeater" nameView="Heater Foreline" >
+			<config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+
+			<config name="TempOffsetPoint_1" nameView="Temp Offset Point 1" description="温度补偿点 1" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_1" nameView="Offset Value 1" description="补偿值 1" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_2" nameView="Temp Offset Point 2" description="温度补偿点 2" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_2" nameView="Offset Value 2" description="补偿值 2" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_3" nameView="Temp Offset Point 3" description="温度补偿点 3" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_3" nameView="Offset Value 3" description="补偿值 3" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_4" nameView="Temp Offset Point 4" description="温度补偿点 4" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_4" nameView="Offset Value 4" description="补偿值 4" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_5" nameView="Temp Offset Point 5" description="温度补偿点 5" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_5" nameView="Offset Value 5" description="补偿值 5" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_6" nameView="Temp Offset Point 6" description="温度补偿点 6" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_6" nameView="Offset Value 6" description="补偿值 6" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_7" nameView="Temp Offset Point 7" description="温度补偿点 7" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_7" nameView="Offset Value 7" description="补偿值 7" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_8" nameView="Temp Offset Point 8" description="温度补偿点 8" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_8" nameView="Offset Value 8" description="补偿值 8" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_9" nameView="Temp Offset Point 9" description="温度补偿点 9" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_9" nameView="Offset Value 9" description="补偿值 9" unit="degree" type="Double" max="300" min="0" />
+		</configs>
+
+		<configs name="ValveHeater" nameView="Valve Heater" >
+			<config default="false" name="HeaterEnableTolerance" nameView="Enable Heater Deviation Check" description="" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="200" name="HeaterAlarmRange" nameView="Heater deviation Alarm Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="10" name="HeaterAlarmTime" nameView="Heater deviation Alarm Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+			<config default="100" name="HeaterWarningRange" nameView="Heater deviation Warning Range" description="" max="200" min="0" paramter="" tag="" unit="℃" type="Integer" />
+			<config default="10" name="HeaterWarningTime" nameView="Heater deviation Warning Time" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
+
+			<config name="TempOffsetPoint_1" nameView="Temp Offset Point 1" description="温度补偿点 1" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_1" nameView="Offset Value 1" description="补偿值 1" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_2" nameView="Temp Offset Point 2" description="温度补偿点 2" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_2" nameView="Offset Value 2" description="补偿值 2" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_3" nameView="Temp Offset Point 3" description="温度补偿点 3" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_3" nameView="Offset Value 3" description="补偿值 3" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_4" nameView="Temp Offset Point 4" description="温度补偿点 4" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_4" nameView="Offset Value 4" description="补偿值 4" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_5" nameView="Temp Offset Point 5" description="温度补偿点 5" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_5" nameView="Offset Value 5" description="补偿值 5" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_6" nameView="Temp Offset Point 6" description="温度补偿点 6" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_6" nameView="Offset Value 6" description="补偿值 6" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_7" nameView="Temp Offset Point 7" description="温度补偿点 7" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_7" nameView="Offset Value 7" description="补偿值 7" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_8" nameView="Temp Offset Point 8" description="温度补偿点 8" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_8" nameView="Offset Value 8" description="补偿值 8" unit="degree" type="Double" max="300" min="0" />
+			<config name="TempOffsetPoint_9" nameView="Temp Offset Point 9" description="温度补偿点 9" unit="degree" type="Integer" max="300" min="0" />
+			<config name="OffsetValue_9" nameView="Offset Value 9" description="补偿值 9" unit="degree" type="Double" max="300" min="0" />
+		</configs>
+		<configs name="ElectrostaticVoltageSource" nameView="Electrostatic Voltage Source">
+			<config default="COM64" name="Port" nameView="Port" description="serial port name of ElectrostaticVoltageSource" max="" min="" paramter="" tag="" unit="" type="String" />
+		</configs>
+		<configs name="TurboPump" nameView="Turbo Pump">
+			<config default="COM62" name="Port" nameView="Port" description="serial port name of TurboPump" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="500" name="ChamberForelinePressureThreshold" nameView="Chamber Foreline Pressure Threshold" description="" max="10000" min="0" paramter="" tag="" unit="mtorr" type="Double" />
+			<config default="30" name="ChamberForelinePressureTimeout" nameView="Chamber Foreline Pressure Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
+		</configs>
+		<configs name="PendulumValve" nameView="Pendulum Valve">
+			<config default="COM66" name="Port" nameView="Port" description="serial port name of PendulumValve" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="400" name="PressureFullRange" nameView="PressureFullRange" description="Pressure Full Range of PendulumValve" max="100000" min="0" paramter="" tag="" unit="mtorr" type="Integer" />
+		</configs>
+
+		<!--Clean-->
+		<configs name="IdleClean" nameView="Idle Clean" visible="false">
+			<config default="false" name="IsEnabled" nameView="Is Enabled" description="IsEnabled" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="" name="IdleCleanRecipe" nameView="Idle Clean Recipe" description="Purge recipe name" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="3000" name="IdleCleanTime" nameView="Idle Clean Time" description="Idle seconds after which run purge" max="99999" min="1" paramter="" tag="" unit="s" type="Integer" />
+		</configs>
+
+		<configs name="JobClean" nameView="Job Clean" visible="false">
+			<config default="false" name="IsEnabled" nameView="Is Enabled" description="IsEnabled" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="" name="PreJobCleanRecipe" nameView="PreJob Clean Recipe" description="pre job clean recipe name" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="" name="CompleteJobCleanRecipe" nameView="CompleteJob Clean Recipe" description="complete job clean recipe name" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="false" name="EnablePreJobClean" nameView="Enable PreJob Clean" description="Enable PreJob Clean" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="false" name="EnableCompleteJobClean" nameView="Enable Complete Job Clean" description="Enable Complete Job Clean" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+
+			<config default="3000" name="IdleCleanTime" nameView="Idle Clean Time" description="Idle seconds after which run purge" max="864000" min="0" paramter="" tag="" unit="s" type="Integer" />
+
+		</configs>
+
+
+		<configs name="EPD" nameView="EPD Setting">
+			<config default="true" name="IsEnabled" nameView="Is Enabled" description="IsEnabled" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="0" name="ChannelNumber" nameView="EPD Channel Number"  description="channel number" max="32" min="0" paramter="" tag="" unit="" type="Integer" />
+			<config default="127.0.0.1:1102" name="IPAddress" nameView="IP Address" description="EPD IP、端口设置;default 10.0.0.100:13000" max="" min="" paramter="" tag="" unit="" type="String" />
+			<config default="0" name="EPDType" nameView="EPD Type" description="EPD type, 0) by socket, 1) by WCF" max="32" min="0" paramter="" tag="" unit="" type="Integer" />
+		</configs>
+
+	</configs>
 </root>

+ 9 - 2
Venus/Venus_RT/Devices/DeviceManager.cs

@@ -57,6 +57,11 @@ namespace Venus_RT.Instances
                 JetChamber jetChamber = (JetChamber)SC.GetValue<int>("PMB.ChamberType");
                 InitPM(ModuleName.PMB, jetChamber);
             }
+            if (ModuleHelper.IsInstalled(ModuleName.PMC))
+            {
+                JetChamber jetChamber = (JetChamber)SC.GetValue<int>("PMC.ChamberType");
+                InitPM(ModuleName.PMC, jetChamber);
+            }
 
             if (ModuleHelper.IsInstalled(ModuleName.TM))
                 InitTM(ModuleName.TM);
@@ -174,11 +179,13 @@ namespace Venus_RT.Instances
                 case JetChamber.Venus:
                     AddCustomDevice(new JetVenusPM(mod));
                     break;
-
                 case JetChamber.Kepler2300:
+                    AddCustomDevice(new JetKepler2300PM(mod));
+                    break;
                 case JetChamber.Kepler2200A:
+                    AddCustomDevice(new JetKepler2200APM(mod));
+                    break;
                 case JetChamber.Kepler2200B:
-                    AddCustomDevice(new JetKepler2300PM(mod));
                     break;
             }
 

+ 936 - 0
Venus/Venus_RT/Devices/JetKepler2200APM.cs

@@ -0,0 +1,936 @@
+using Aitex.Core.Common.DeviceData;
+using Aitex.Core.RT.Device;
+using Aitex.Core.RT.Device.Unit;
+using Aitex.Core.RT.SCCore;
+using Aitex.Core.RT.Log;
+using MECF.Framework.Common.Device.Bases;
+using MECF.Framework.Common.Equipment;
+using System;
+using System.Collections.Generic;
+using Venus_Core;
+using Venus_RT.Devices.IODevices;
+using Venus_RT.Devices.EPD;
+using MECF.Framework.Common.SubstrateTrackings;
+using IoMfc = Venus_RT.Devices.IODevices.IoMfc;
+using System.Threading.Tasks;
+
+namespace Venus_RT.Devices
+{
+    class JetKepler2200APM : JetPMBase
+    {
+        private readonly IoLid _Lid;
+        private readonly IoLid _LidLoadlock;
+
+        private readonly IoCylinder _slitDoor;
+        private readonly IoCylinder _LiftPin;
+        private readonly IoCylinder _LoadLockArm;
+
+        private readonly IoValve _PVN21Valve;
+        private readonly IoValve _PVN22Valve;
+        private readonly IoValve _PV11Valve;
+        private readonly IoValve _PV12Valve;
+        private readonly IoValve _PV21Valve;
+        private readonly IoValve _PV22Valve;
+        private readonly IoValve _PV31Valve;
+        private readonly IoValve _PV32Valve;
+        private readonly IoValve _PV41Valve;
+        private readonly IoValve _PV42Valve;
+        private readonly IoValve _N2Valve;
+        private readonly IoValve _Mfc1Valve;
+        private readonly IoValve _Mfc2Valve;
+        private readonly IoValve _Mfc3Valve;
+        private readonly IoValve _Mfc4Valve;
+        private readonly IoValve _Mfc5Valve;
+        private readonly IoValve _Mfc6Valve;
+        private readonly IoValve _Mfc7Valve;
+        private readonly IoValve _Mfc8Valve;
+        private readonly IoValve _PVHe1Valve;
+        private readonly IoValve _PVHe2Valve;
+        private readonly IoValve _GasFinalValve;
+        private readonly IoValve _SoftPumpValve;
+        private readonly IoValve _FastPumpValve;
+        private readonly IoValve _TurboPumpPumpingValve;
+        private readonly IoValve _TurboPumpPurgeValve;
+        private readonly IoValve _GuageValve;
+        private readonly IoValve _LoadlockVentValve;
+        private readonly IoValve _LoadlockPumpingValve;
+
+        private readonly IoSensor _ATM_sw;
+        private readonly IoSensor _CDAPressure;
+        private readonly IoSensor _ATM_Loadlock_sw;
+        private readonly IoSensor _N2Pressure_sw;
+        private readonly IoSensor _VAC_sw;
+        private readonly IoSensor _WLK_sw;
+        private readonly IoSensor _Water_Flow;
+        private readonly IoSensor _RFG_Interlock;
+        private readonly IoSensor _PM_Lid_Closed;
+        private readonly IoSensor _Source_RF_Fan;
+        private readonly IoSensor _PM_SlitDoor_Closed;
+        private readonly IoSensor _TurboPumpInterlock;
+        private readonly IoSensor _GasBoxDoor;
+        private readonly IoSensor _GasBoxPressure;
+
+
+        private readonly PumpBase _MainPump;
+        private readonly ESC5HighVoltage _ESCHV;
+        private readonly AdixenTurboPump _TurboPump;
+        private readonly PendulumValve _pendulumValve;
+
+        private readonly ChillerBase _Chiller;
+
+        private readonly RfPowerBase _Generator;//srf=>AdTecGenerator
+        private readonly RfPowerBase _GeneratorBias;//brf=>CometRF
+        private readonly RfMatchBase _Match;
+        private readonly RfMatchBase _BiasMatch;
+
+        private readonly IoSignalTower _SignalTower;
+
+        private readonly IoHeater _ForelineTC;
+        private readonly IoHeater _WallTC;
+
+        private readonly IoPressureControl _pressureController;
+
+        private readonly IoGasStick[] _gasLines;
+        private readonly IoGasStick _gasLineN2;
+        private readonly IoBacksideHe _backsideHe;
+
+        private readonly IoMfc _heMfc;
+
+
+        private readonly double _foreline_interlock_pressure = 750;
+
+
+        // 盖子的状态
+        public override bool IsLidClosed => _Lid.OFFFeedback;
+        public override bool IsLidLoadlockClosed => _LidLoadlock.OFFFeedback;
+
+        public override bool IsSlitDoorClosed => !_slitDoor.ONFeedback && _slitDoor.OFFFeedback;
+
+        public override bool IsPumpRunning => _MainPump.IsRunning;
+        public override bool IsTurboPumpRunning => _TurboPump.IsRunning;
+        public override bool IsTurboPumpAtSpeed => _TurboPump.AtSpeed;
+        public override float TurboPumpSpeed => _TurboPump.Speed;
+        public override bool HasPumpError => _MainPump.IsError || !_MainPump.IsRunning;
+
+        public override bool HasTurboPumpError => _TurboPump.IsError || !_TurboPump.IsRunning;
+
+        public override bool IsCDA_OK => _CDAPressure.Value;
+
+        public override bool IsFastPumpOpened => _FastPumpValve.Status;
+        public override bool IsSoftPumpOpened => _SoftPumpValve.Status;
+        public override bool IsMfc1ValveOpened => _Mfc1Valve.Status;
+        public override bool IsMfc2ValveOpened => _Mfc2Valve.Status;
+        public override bool IsMfc3ValveOpened => _Mfc3Valve.Status;
+        public override bool IsMfc4ValveOpened => _Mfc4Valve.Status;
+        public override bool IsMfc5ValveOpened => _Mfc5Valve.Status;
+        public override bool IsMfc6ValveOpened => _Mfc6Valve.Status;
+        public override bool IsMfc7ValveOpened => _Mfc7Valve.Status;
+        public override bool IsMfc8ValveOpened => _Mfc8Valve.Status;
+
+        public override bool IsGuageValveOpened => _GuageValve.Status;
+
+        // 压力信号
+        public override bool IsATM => _ATM_sw.Value;
+
+        public override bool PVN22ValveIsOpen => _PVN22Valve.Status;
+        public override bool LiftPinIsDown => _LiftPin.OFFFeedback;
+        public override bool LiftPinIsUp => _LiftPin.ONFeedback;
+
+        public override bool IsATMLoadlock => _ATM_Loadlock_sw.Value;
+        public override bool IsVACLoadLock => LoadlockPressure <= 1000;
+        public override bool IsVAC => _VAC_sw.Value;
+        public override bool IsWaterFlowOk => true;
+        public override bool IsWLK => _WLK_sw.Value;
+        public override bool IsRFGInterlockOn => _RFG_Interlock.Value;
+
+        public override bool PMLidClosed => _PM_Lid_Closed.Value;
+        public override bool TurboPumpInterlock => _TurboPumpInterlock.Value;
+        public override bool SourceRFFanInterlock => _Source_RF_Fan.Value;
+        public override bool SlitDoorClosed => _PM_SlitDoor_Closed.Value;
+
+        public override double ProcessLowPressure => _pressureController.ProcessLow.Value;
+        public override double ProcessHighPressure => _pressureController.ProcessHigh.Value;
+        public override double ProcessPressure => _pressureController.ProcessGauge.Value;
+        public override double ChamberPressure => _pressureController.PressureGauge.Value;
+        public override double ForelinePressure => _pressureController.ForelineGauge.Value;
+        public override double TargetPressure => _pressureController.TargetPressure;
+        public override double LoadlockPressure => 0;
+        public override double ESCHePressure => _pressureController.ESCHeGauge.Value;
+
+        public override int ESCOutputVoltage => _ESCHV.OutputVoltage;
+        public override double ESCPositiveOutputCurrent => _ESCHV.PositiveOutputCurrent;
+
+        public override double ESCNegativeOutputCurrent => _ESCHV.NegativeOutputCurrent;
+        public override bool IsHVOn => _ESCHV.IsOn;
+
+        public override float CoolantInletTempFB => _Chiller.CoolantInletTcFeedback;
+        public override float CoolantOutletTempFB => _Chiller.CoolantOutletTcFeedback;
+
+        public override bool ChillerIsRunning => _Chiller.IsRunning;
+
+        //Loadlock_Arm
+        public override bool IsLoadlockArmRetract => _LoadLockArm.OFFFeedback;
+        public override bool IsLoadlockArmExtend => _LoadLockArm.ONFeedback;
+        //Loadlock_Arm DO
+        public override bool LoadlockArmRetract => _LoadLockArm.OFFSetPoint;
+        public override bool LoadlockArmExtend => _LoadLockArm.ONSetPoint;
+
+        public override float ReflectPower => _Generator.ReflectPower;
+        public override float BiasReflectPower => _GeneratorBias.ReflectPower;
+
+        public override bool BackSideHeOutOfRange => _backsideHe.OutOfRange;
+
+        public new ModuleName Module { get; }
+
+        public override MovementPosition LiftPinPosition
+        {
+            get
+            {
+                MovementPosition pos = MovementPosition.Unknown;
+                if (_LiftPin.ONFeedback && !_LiftPin.OFFFeedback)
+                {
+                    pos = MovementPosition.Up;
+                }
+                else if (!_LiftPin.ONFeedback && _LiftPin.OFFFeedback)
+                {
+                    pos = MovementPosition.Down;
+                }
+                return pos;
+            }
+        }
+
+        public override bool CheckAtm()
+        {
+            return _ATM_sw.Value && ChamberPressure > 700000;
+        }
+        public override bool CheckSlitDoorOpen()
+        {
+            return _slitDoor.State == CylinderState.Open;
+        }
+
+        public override bool CheckSlitDoorClose()
+        {
+            return _slitDoor.State == CylinderState.Close;
+        }
+
+        public override bool CheckLiftUp()
+        {
+            return _LiftPin.State == CylinderState.Open;
+        }
+
+        public override bool CheckLiftDown()
+        {
+            return _LiftPin.State == CylinderState.Close;
+        }
+        public override double TotalGasSetpoint
+        {
+            get
+            {
+                double sum = 0;
+                foreach (var gas in _gasLines)
+                {
+                    sum += gas.FlowSP;
+                }
+                return sum;
+            }
+        }
+
+        public override bool HasGasOutOfRange
+        {
+            get
+            {
+                foreach (var gas in _gasLines)
+                {
+                    if (!gas.IsOutOfRange)
+                        return false;
+                }
+                return true;
+            }
+        }
+        public override bool PendulumValveIsOpen()
+        {
+            return _pendulumValve.IsOpen;
+        }
+
+        #region 构造函数
+        public JetKepler2200APM(ModuleName moduleName) : base(moduleName)
+        {
+             Module = moduleName;
+            _Lid = DEVICE.GetDevice<IoLid>($"{Module}.{VenusDevice.Lid}");
+            _LidLoadlock = DEVICE.GetDevice<IoLid>($"{Module}.{VenusDevice.LidLoadlock}");
+
+            _slitDoor = DEVICE.GetDevice<IoCylinder>($"{Module}.{VenusDevice.SlitDoor}");
+            _LiftPin = DEVICE.GetDevice<IoCylinder>($"{Module}.{VenusDevice.LiftPin}");
+            _LoadLockArm = DEVICE.GetDevice<IoCylinder>($"{Module}.{VenusDevice.LoadLockArm}");
+
+            _PVN21Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePVN21}");
+            _PVN22Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePVN22}");
+            _PV11Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePV11}");
+            _PV12Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePV12}");
+            _PV21Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePV21}");
+            _PV22Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePV22}");
+            _PV31Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePV31}");
+            _PV32Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePV32}");
+            _PV41Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePV41}");
+            _PV42Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePV42}");
+            _N2Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveN2}");
+            _Mfc1Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveMfc1}");
+            _Mfc2Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveMfc2}");
+            _Mfc3Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveMfc3}");
+            _Mfc4Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveMfc4}");
+            _Mfc5Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveMfc5}");
+            _Mfc6Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveMfc6}");
+            _Mfc7Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveMfc7}");
+            _Mfc8Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveMfc8}");
+            _PVHe1Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePVHe1}");
+            _PVHe2Valve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValvePVHe2}");
+            _GasFinalValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveGasFinal}");
+            _SoftPumpValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveSoftPump}");
+            _FastPumpValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveFastPump}");
+            _TurboPumpPumpingValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveTurboPumpPumping}");
+            _TurboPumpPurgeValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveTurboPumpPurge}");
+            _GuageValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveGuage}");
+            _LoadlockVentValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockVent}");
+            _LoadlockPumpingValve = DEVICE.GetDevice<IoValve>($"{Module}.{VenusDevice.ValveLoadlockPumping}");
+            _heMfc = DEVICE.GetDevice<IoMfc>($"{Module}.MfcHe");
+            _ATM_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorATMSwitch");
+            _ATM_Loadlock_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorLoadlockATMSwitch");
+            _N2Pressure_sw = DEVICE.GetDevice<IoSensor>($"{Module}.N2PressureOk");
+            _VAC_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorVacSwitch");
+            _Water_Flow = DEVICE.GetDevice<IoSensor>($"{Module}.SensorWaterFlowOk");
+            _WLK_sw = DEVICE.GetDevice<IoSensor>($"{Module}.SensorWaterLeakOk");
+            _CDAPressure = DEVICE.GetDevice<IoSensor>($"{Module}.SensorCDAPressureOk");
+            _RFG_Interlock = DEVICE.GetDevice<IoSensor>($"{Module}.GeneratorInterlock");
+
+            _PM_Lid_Closed = DEVICE.GetDevice<IoSensor>($"{Module}.SensorPMLidClosed");
+            _Source_RF_Fan = DEVICE.GetDevice<IoSensor>($"{Module}.SensorSourceRFFan");
+            _PM_SlitDoor_Closed = DEVICE.GetDevice<IoSensor>($"{Module}.SensorSlitDoorClosed");
+            _TurboPumpInterlock = DEVICE.GetDevice<IoSensor>($"{Module}.TurboPumpInterlock");
+            _GasBoxDoor = DEVICE.GetDevice<IoSensor>($"{Module}.GasBoxDoorSW");
+            _GasBoxPressure = DEVICE.GetDevice<IoSensor>($"{Module}.GasBoxPressureSW");
+
+
+            _ForelineTC = DEVICE.GetDevice<IoHeater>($"{Module}.ForelineHeater");
+            _WallTC = DEVICE.GetDevice<IoHeater>($"{Module}.WallHeater");
+
+
+            _SignalTower = DEVICE.GetDevice<IoSignalTower>($"{Module}.SignalTower");
+
+            _CDAPressure = DEVICE.GetDevice<IoSensor>($"{Module}.SensorCDAPressureOk");
+            _pressureController = DEVICE.GetDevice<IoPressureControl>($"{Module}.{VenusDevice.PressureControl}");
+
+            _gasLines = new IoGasStick[8];
+            for (int index = 0; index < 8; index++)
+            {
+                _gasLines[index] = DEVICE.GetDevice<IoGasStick>($"{Module}.GasStick{index + 1}");
+            }
+
+            _gasLineN2 = DEVICE.GetDevice<IoGasStick>($"{Module}.GasStickN2");
+            _backsideHe = DEVICE.GetDevice<IoBacksideHe>($"{Module}.BacksideHelium");
+
+            _MainPump = DEVICE.GetDevice<PumpBase>($"{Module}.{VenusDevice.MainPump}");
+            // RS232 Dry pump, SKY
+            if (SC.GetValue<int>($"{Module}.DryPump.CommunicationType") == (int)CommunicationType.RS232)
+            {
+                if (SC.GetValue<int>($"{Module}.DryPump.MFG") == (int)DryPumpMFG.SKY)
+                {
+                    _MainPump = DEVICE.GetDevice<SkyPump>($"{Module}.{VenusDevice.MainPump}");
+                }
+                else if (SC.GetValue<int>($"{Module}.DryPump.MFG") == (int)DryPumpMFG.Edwards)
+                {
+                    _MainPump = DEVICE.GetDevice<EdwardsPump>($"{Module}.{VenusDevice.MainPump}");
+                }
+            }
+
+            _ESCHV = DEVICE.GetDevice<ESC5HighVoltage>($"{Module}.{VenusDevice.ESCHV}");
+            _TurboPump = DEVICE.GetDevice<AdixenTurboPump>($"{Module}.{VenusDevice.TurboPump}");
+            _pendulumValve = DEVICE.GetDevice<PendulumValve>($"{Module}.{VenusDevice.PendulumValve}");
+
+            if (SC.GetValue<bool>($"{Module}.Chiller.EnableChiller") &&
+                SC.GetValue<int>($"{Module}.Chiller.CommunicationType") == (int)CommunicationType.RS232)
+            {
+                if (SC.GetValue<int>($"{Module}.Chiller.MFG") == (int)ChillerMFG.SMC)
+                {
+                    _Chiller = DEVICE.GetDevice<SMCChiller>($"{Module}.{VenusDevice.Chiller}");
+                }
+                else if (SC.GetValue<int>($"{Module}.Chiller.MFG") == (int)ChillerMFG.AIRSYS)
+                {
+                    _Chiller = DEVICE.GetDevice<AIRSYSChiller>($"{Module}.{VenusDevice.Chiller}");
+                }
+            }
+
+
+            // RS223 AdTec Generator
+            if (SC.GetValue<int>($"{Module}.Rf.CommunicationType") == (int)CommunicationType.RS232 &&
+                SC.GetValue<int>($"{Module}.Rf.MFG") == (int)GeneratorMFG.AdTec)
+            {
+                _Generator = DEVICE.GetDevice<AdTecGenerator>($"{Module}.{VenusDevice.Rf}");
+            }
+
+            // Ethernet Comet Generator Bias
+            if (SC.GetValue<bool>($"{Module}.BiasRf.EnableBiasRF"))
+            {
+                if (SC.GetValue<int>($"{Module}.BiasRf.CommunicationType") == (int)CommunicationType.Ethernet &&
+                    SC.GetValue<int>($"{Module}.BiasRf.MFG") == (int)GeneratorMFG.Comet)
+                {
+                    _GeneratorBias = DEVICE.GetDevice<CometRF>($"{Module}.{VenusDevice.BiasRf}");
+                }
+                else if (SC.GetValue<int>($"{Module}.BiasRf.MFG") == (int)GeneratorMFG.AdTec)
+                {
+                    _GeneratorBias = DEVICE.GetDevice<AdTecGenerator>($"{Module}.{VenusDevice.BiasRf}");
+                }
+            }
+
+            // RS232 AdTec match
+            if (SC.GetValue<int>($"{Module}.Match.CommunicationType") == (int)CommunicationType.RS232 &&
+                SC.GetValue<int>($"{Module}.Match.MFG") == (int)MatchMFG.AdTec)
+            {
+                _Match = DEVICE.GetDevice<AdTecMatch>($"{Module}.{VenusDevice.Match}");
+            }
+
+            // Bias Match
+            if (SC.GetValue<bool>($"{Module}.BiasMatch.EnableBiasMatch") &&
+                SC.GetValue<int>($"{Module}.BiasMatch.CommunicationType") == (int)CommunicationType.RS232 &&
+                SC.GetValue<int>($"{Module}.BiasMatch.MFG") == (int)MatchMFG.AdTec)
+            {
+                _BiasMatch = DEVICE.GetDevice<AdTecMatch>($"{Module}.{VenusDevice.BiasMatch}");
+            }
+
+            _foreline_interlock_pressure = SC.GetValue<double>($"{Module}.ForelineInterlockPressure");
+
+        }
+
+        #endregion
+
+        public override void CloseValves()
+        {
+            _PVN21Valve.TurnValve(false, out _);
+            // _PVN22Valve.TurnValve(false, out _);
+            _PV11Valve.TurnValve(false, out _);
+            _PV12Valve.TurnValve(false, out _);
+            _PV21Valve.TurnValve(false, out _);
+            _PV22Valve.TurnValve(false, out _);
+            _PV31Valve.TurnValve(false, out _);
+            _PV32Valve.TurnValve(false, out _);
+            _PV41Valve.TurnValve(false, out _);
+            _PV42Valve.TurnValve(false, out _);
+
+            _PVHe1Valve.TurnValve(false, out _);
+            _PVHe2Valve.TurnValve(false, out _);
+            _GasFinalValve.TurnValve(false, out _);
+            _SoftPumpValve.TurnValve(false, out _);
+            _FastPumpValve.TurnValve(false, out _);
+            _TurboPumpPumpingValve.TurnValve(false, out _);
+            _TurboPumpPurgeValve.TurnValve(false, out _);
+            _GuageValve.TurnValve(false, out _);
+
+
+            _N2Valve.TurnValve(false, out _);
+            _FastPumpValve.TurnValve(false, out _);
+
+            _Mfc1Valve.TurnValve(false, out _);
+            _Mfc2Valve.TurnValve(false, out _);
+            _Mfc3Valve.TurnValve(false, out _);
+            _Mfc4Valve.TurnValve(false, out _);
+            _Mfc5Valve.TurnValve(false, out _);
+            _Mfc6Valve.TurnValve(false, out _);
+            _Mfc7Valve.TurnValve(false, out _);
+            _Mfc8Valve.TurnValve(false, out _);
+
+            foreach (var stick in _gasLines)
+            {
+                stick.Stop();
+            }
+        }
+
+        public override void TurnDryPump(bool on)
+        {
+            //_pressureController.StartPump(on);
+            _MainPump?.SetPumpOnOff(on);
+        }
+
+        public override void TurnTurboPump(bool on)
+        {
+            _TurboPump?.SetPumpOnOff(on);
+        }
+
+        public override void OpenValve(ValveType vlvType, bool on)
+        {
+            switch (vlvType)
+            {
+                case ValveType.PVN21:
+                    _PVN21Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PVN22:
+                    _PVN22Valve.TurnValve(on, out _);
+                    LOG.Write(eEvent.EV_DEVICE_INFO, Module, $"{(on ? "打开" : "关闭")} 阀 {vlvType.ToString()}");
+
+                    break;
+                case ValveType.PV11:
+                    _PV11Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PV12:
+                    _PV12Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PV21:
+                    _PV21Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PV22:
+                    _PV22Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PV31:
+                    _PV31Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PV32:
+                    _PV32Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PV41:
+                    _PV41Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PV42:
+                    _PV42Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.N2:
+                    _N2Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PVHe1:
+                    _PVHe1Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.PVHe2:
+                    _PVHe2Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.GasFinal:
+                    _GasFinalValve.TurnValve(on, out _);
+                    break;
+                case ValveType.SoftPump:
+                    _SoftPumpValve.TurnValve(on, out _);
+                    break;
+                case ValveType.FastPump:
+                    _FastPumpValve.TurnValve(on, out _);
+                    break;
+                case ValveType.TurboPumpPumping:
+                    _TurboPumpPumpingValve.TurnValve(on, out _);
+                    break;
+                case ValveType.TurboPumpPurge:
+                    _TurboPumpPurgeValve.TurnValve(on, out _);
+                    break;
+                case ValveType.Guage:
+                    _GuageValve.TurnValve(on, out _);
+                    break;
+                case ValveType.LoadlockVent:
+                    _LoadlockVentValve.TurnValve(on, out _);
+                    break;
+                case ValveType.LoadlockPumping:
+                    _LoadlockPumpingValve.TurnValve(on, out _);
+                    break;
+                case ValveType.Mfc1:
+                    _Mfc1Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.Mfc2:
+                    _Mfc2Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.Mfc3:
+                    _Mfc3Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.Mfc4:
+                    _Mfc4Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.Mfc5:
+                    _Mfc5Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.Mfc6:
+                    _Mfc6Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.Mfc7:
+                    _Mfc7Valve.TurnValve(on, out _);
+                    break;
+                case ValveType.Mfc8:
+                    _Mfc8Valve.TurnValve(on, out _);
+                    break;
+                default:
+                    throw new ArgumentOutOfRangeException($"Argument error {vlvType}-{on}");
+
+            }
+        }
+
+        public override void Monitor()
+        {
+            foreach (var gas in _gasLines)
+            {
+                gas.Monitor();
+            }
+
+            CheckPermanentInterlock();
+        }
+
+
+        protected override void CheckPermanentInterlock()
+        {
+            if (ProcessPressure > 100 && _GuageValve.SetPoint)
+            {
+                _GuageValve.TurnValve(false, out _);
+                LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ProcessPressure} exceed 100 mtorr, Guage Valve (DO-31) closed automaticlly.");
+            }
+        }
+
+        public override void CheckIdleInterlock()
+        {
+            if (ForelinePressure > _foreline_interlock_pressure)
+            {
+                if (_TurboPumpPumpingValve.SetPoint || _TurboPumpPurgeValve.SetPoint || _pendulumValve.IsOpen)
+                {
+                    _pendulumValve.TurnValve(false);
+                    _TurboPumpPurgeValve.TurnValve(false, out _);
+                    _TurboPumpPumpingValve.TurnValve(false, out _);
+
+                    LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Foreline pressure:{ForelinePressure} exceed {_foreline_interlock_pressure} mtorr, Pendulum valve & PV6 & PV7 closed automaticlly.");
+                }
+            }
+        }
+
+        public override void BuzzerBlinking(double time)
+        {
+            _SignalTower.BuzzerBlinking(time);
+        }
+
+        public override void SwitchOnBuzzerAndRed()
+        {
+            _SignalTower.SwitchOnBuzzerAndRed("", null);
+        }
+
+        public override void Home()
+        {
+            // 与yp讨论过,PM 初始化不需要
+
+            SetLiftPin(MovementPosition.Down, out _);
+
+            SetSlitDoor(false, out _);
+
+            //2023/03/08添加
+            OpenValve(ValveType.PVN22, true);
+            //2023/04/25临时添加
+            //RetractWafer();
+
+
+        }
+
+        public override bool SetLiftPin(MovementPosition dirt, out string reason)
+        {
+            reason = string.Empty;
+
+            switch (dirt)
+            {
+                case MovementPosition.Down:
+                    return _LiftPin.SetCylinder(false, out reason);
+                case MovementPosition.Up:
+                    return _LiftPin.SetCylinder(true, out reason);
+                case MovementPosition.Left:
+                case MovementPosition.Right:
+                case MovementPosition.Middle:
+                    throw new ArgumentException("Movement argument error");
+            }
+
+            return true;
+        }
+
+        public override bool SetSlitDoor(bool open, out string reason)
+        {
+            reason = string.Empty;
+
+            //if(open)
+            //{
+            //    bool _isATMMode = SC.GetValue<bool>("System.IsATMMode");
+            //    if(_isATMMode)
+            //    {
+            //        if(!IsATM)
+            //        {
+            //            reason = $"{Module} is not ATM, can not open slit door";
+            //            LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
+            //            return false;
+            //        }
+
+            //        if(!IsATMLoadlock)
+            //        {
+            //            reason = $"LoadLock is not ATM, can not open slit door";
+            //            LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
+            //            return false;
+            //        }
+            //    }
+            //    else
+            //    {
+            //        double maxPressureDifference = SC.GetValue<double>("System.PMLLMaxPressureDifference");
+            //        if (Math.Abs(LoadlockPressure - ChamberPressure) > maxPressureDifference)
+            //        {
+            //            reason = $"{Module} and Loadlock pressure difference exceeds the max limit {maxPressureDifference}";
+            //            LOG.Write(eEvent.ERR_DEVICE_INFO, Module, reason);
+            //            return false;
+            //        }
+            //    }
+
+            //}
+
+            return _slitDoor.SetCylinder(open, out reason);
+        }
+
+        public override bool RetractWafer()
+        {
+            return _LoadLockArm.SetCylinder(false, out _);
+        }
+
+        public override bool ExtendWafer()
+        {
+            return _LoadLockArm.SetCylinder(true, out _);
+        }
+        public override bool FlowGas(int gasNum, double val)
+        {
+            if (_gasLines.Length <= gasNum)
+                return false;
+
+
+            _gasLines[gasNum].Flow(val);
+            return true;
+        }
+
+        public override bool StopGas(int gasNum)
+        {
+            if (_gasLines.Length <= gasNum)
+                return false;
+
+            _gasLines[gasNum].Stop();
+            return true;
+        }
+
+        public override bool FlowN2(double val)
+        {
+            _gasLineN2.Flow(val);
+            return true;
+        }
+
+        public override bool StopN2()
+        {
+            _gasLineN2.Stop();
+            return true;
+        }
+
+        public override void StopAllGases()
+        {
+            foreach (var line in _gasLines)
+            {
+                line.Stop();
+            }
+        }
+
+        public override bool TurnPendulumValve(bool on)
+        {
+            return _pendulumValve.TurnValve(on);
+        }
+
+        public override bool SetPVPressure(int pressure)
+        {
+            return _pendulumValve.SetPressure(pressure);
+        }
+
+        public override bool SetPVPostion(int position)
+        {
+            return _pendulumValve.SetPosition(position);
+        }
+
+        public override int GetPVPosition()
+        {
+            return _pendulumValve.Position;
+        }
+
+        public override async void HeatChiller(double value, double offset)
+        {
+            _Chiller?.SetChillerTemp((float)value, (float)offset);
+            await Task.Delay(1000);
+            _Chiller?.SetChillerOnOff(true);
+        }
+
+        public override void OnOffChiller(bool onoff)
+        {
+            _Chiller?.SetChillerOnOff(onoff);
+        }
+
+        public override bool CheckChillerStatus()
+        {
+            return _Chiller != null /*&& _Chiller.IsRunning*/ && !_Chiller.IsError;
+        }
+
+
+        public override void SetGeneratorCommunicationMode(int mode)
+        {
+            _Generator?.SetCommunicationMode(mode);
+        }
+
+        public override bool GeneratorPowerOn(bool on)
+        {
+            if (_Generator == null) return false;
+
+            if (on && !IsRFGInterlockOn)
+            {
+                LOG.Write(eEvent.ERR_RF, Module, "射频电源 Interlock条件不满足");
+                return false;
+            }
+
+            return _Generator.SetPowerOnOff(on, out _);
+        }
+
+        public override bool GeneratorSetpower(float val)
+        {
+            if (_Generator == null) return false;
+
+            if (Math.Abs(val) > 0.01)
+                _Generator.SetPower((ushort)val);
+            return true;
+        }
+
+        public override bool GeneratorBiasPowerOn(bool on)
+        {
+            if (_GeneratorBias == null) return false;
+
+            if (on && !IsRFGInterlockOn)
+            {
+                LOG.Write(eEvent.ERR_RF, Module, "Bias射频电源 Interlock条件不满足");
+                return false;
+            }
+
+            return _GeneratorBias.SetPowerOnOff(on, out _);
+        }
+
+        public override bool GeneratorBiasSetpower(float val)
+        {
+            if (_GeneratorBias == null) return false;
+
+            if (Math.Abs(val) > 0.01)
+                _GeneratorBias.SetPower((ushort)val);
+            return true;
+        }
+
+        public override bool OnOffSetESCHV(bool val)
+        {
+            return _ESCHV.SetPowerOnOff(val);
+        }
+
+        public override bool SetWallTCTemperature(float value)
+        {
+            return _WallTC.RampTemp(value);
+        }
+        public override bool GeneratorBiasSetMatchMode(bool val)
+        {
+            if (_GeneratorBias == null) return false;
+            string reason = string.Empty;
+            _GeneratorBias.SetMatchingAutoMode(val, out reason);
+            return true;
+        }
+
+        public override bool SetMatchPosition(float c1, float c2)
+        {
+            if (_Match == null) return false;
+            string reason = string.Empty;
+            _Match.SetMatchPosition(c1, c2, out reason);
+            return true;
+        }
+
+        public override bool SetBiasMatchPosition(float c1, float c2)
+        {
+            if (_BiasMatch == null) return false;
+            string reason = string.Empty;
+            _BiasMatch.SetMatchPosition(c1, c2, out reason);
+            return true;
+        }
+
+        public override bool SetBiasPulseMode(bool on)
+        {
+            if (_GeneratorBias == null) return false;
+            _GeneratorBias.SetPulseMode(on);
+            return true;
+        }
+        public override bool SetBiasPulseRateFreq(int nFreq)
+        {
+            if (_GeneratorBias == null) return false;
+            _GeneratorBias.SetPulseRateFreq(nFreq);
+            return true;
+        }
+
+        public override bool SetDiasPulseDutyCycle(int percentage)
+        {
+            if (_GeneratorBias == null) return false;
+            _GeneratorBias.SetPulseDutyCycle(percentage);
+            return true;
+        }
+
+        public override bool SetESCClampVoltage(int nVoltage)
+        {
+            if (_ESCHV == null) return false;
+
+            return _ESCHV.SetOutputVoltage(nVoltage);
+        }
+
+        public override bool CheckGeneratorAndHVInterlock(VenusDevice device)
+        {
+            eEvent evt = device == VenusDevice.Rf ? eEvent.ERR_RF : eEvent.ERR_ESC_HV;
+            if (!PMLidClosed)
+            {
+                LOG.Write(evt, Module, $"Cannot Power ON {device} as PM Lid is Open.");
+                return false;
+            }
+
+            if (!IsVAC)
+            {
+                LOG.Write(evt, Module, $"Cannot Power ON {device} as PM is not Vacuum.");
+                return false;
+            }
+
+            if (!IsWaterFlowOk)
+            {
+                LOG.Write(evt, Module, $"Cannot Power ON {device} as Water Flow is OFF.");
+                return false;
+            }
+
+            if (!IsRFGInterlockOn)
+            {
+                LOG.Write(evt, Module, $"Cannot Power ON {device} as Generator Interlock is OFF.");
+                return false;
+            }
+
+            if (!SourceRFFanInterlock)
+            {
+                LOG.Write(evt, Module, $"Cannot Power ON {device} as Source RF Fan is OFF.");
+                return false;
+            }
+
+            if (!SlitDoorClosed)
+            {
+                LOG.Write(evt, Module, $"Cannot Power ON {device} as Slit Door is open.");
+                return false;
+            }
+
+            if ((device == VenusDevice.ESCHV || device == VenusDevice.BiasRf) && WaferManager.Instance.CheckNoWafer(Module, 0))
+            {
+                LOG.Write(evt, Module, $"Cannot Power ON {device} as {Module} has no wafer");
+                return false;
+            }
+
+            return true;
+        }
+
+        public override void SetBacksideHeFlow(double flow)
+        {
+            if (_backsideHe == null) return;
+            _backsideHe.Flow(flow);
+        }
+
+        public override bool SetBacksideHePressure(float mTorr)
+        {
+            if (_backsideHe == null) return false;
+            return _backsideHe.SetBacksideHelium(mTorr);
+        }
+
+        public override bool SetBacksideHeThreshold(int nMin, int nMax)
+        {
+            if (_backsideHe == null) return false;
+            return _backsideHe.SetFlowThreshold(nMin, nMax);
+        }
+    }
+}

+ 7 - 1
Venus/Venus_RT/Modules/RouteManager.cs

@@ -108,7 +108,10 @@ namespace Venus_RT.Modules
             {
                 return (EFEM?.IsError ?? false)
                        || (PMA?.IsError ?? false)
-                       || (PMB?.IsError ?? false);
+                       || (PMB?.IsError ?? false)
+                       || (PMC?.IsError ?? false)
+                       || (PMD?.IsError ?? false)
+                       ;
             }
         }
 
@@ -521,6 +524,9 @@ namespace Venus_RT.Modules
         {
             PMA?.Initialize();
             PMB?.Initialize();
+            PMC?.Initialize();
+            PMD?.Initialize();
+
             TM?.Initialize();
             LLA?.Initialize();
             LLB?.Initialize();

+ 10 - 1
Venus/Venus_RT/Venus_RT.csproj

@@ -148,6 +148,7 @@
     <Compile Include="Devices\IODevices\IoSwitch.cs" />
     <Compile Include="Devices\IODevices\IoTMPressureCtl.cs" />
     <Compile Include="Devices\JetEPDBase.cs" />
+    <Compile Include="Devices\JetKepler2200APM.cs" />
     <Compile Include="Devices\JetPMBase.cs" />
     <Compile Include="Devices\JetVenusPM.cs" />
     <Compile Include="Devices\JetKepler2300PM.cs" />
@@ -261,6 +262,15 @@
       <DependentUpon>Settings.settings</DependentUpon>
       <DesignTimeSharedInput>True</DesignTimeSharedInput>
     </Compile>
+    <Content Include="Config\PM\Kepler2200A\Kepler2200AIoDefine.xml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Config\PM\Kepler2200A\Kepler2200AInterlock.xml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Config\PM\Kepler2200A\Kepler2200ADeviceModel.xml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
     <Content Include="Config\PM\Kepler2300\Kepler2300DeviceModel.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
@@ -397,7 +407,6 @@
     </BootstrapperPackage>
   </ItemGroup>
   <ItemGroup>
-    <Folder Include="Config\PM\Kepler2200A\" />
     <Folder Include="Config\PM\Kepler2200B\" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+ 3 - 0
Venus/Venus_Simulator/App.xaml.cs

@@ -16,6 +16,9 @@ namespace Venus_Simulator
             SystemConfig.Instance.Initialize();
             SimulatorJetChamber.CurrentPMAChamber = (JetChamber)SystemConfig.Instance.GetValue<int>($"PMA.ChamberType");
             SimulatorJetChamber.CurrentPMBChamber = (JetChamber)SystemConfig.Instance.GetValue<int>($"PMB.ChamberType");
+            SimulatorJetChamber.CurrentPMCChamber = (JetChamber)SystemConfig.Instance.GetValue<int>($"PMC.ChamberType");
+            SimulatorJetChamber.CurrentPMDChamber = (JetChamber)SystemConfig.Instance.GetValue<int>($"PMD.ChamberType");
+
 
 
             UiApplication.Instance.Initialize(new UiInstance());

+ 7 - 0
Venus/Venus_Simulator/Config/UILayout.xml

@@ -49,6 +49,13 @@
 
   </Navigation>
 
+	<Navigation Id="PMC" Name="PMC" >
+
+		<SubView Id="io3" Name="IO-PMC" ViewClass="Venus_Simulator.Views.SimulatorIo3View" Assembly="Venus_Simulator"/>		
+
+	</Navigation>
+
+
 	<Navigation Id="TM" Name="TM">
 		<SubView Id="ioTM" Name="IO-TM" ViewClass="Venus_Simulator.Views.SimulatorIoTMView" Assembly="Venus_Simulator"/>
 		<SubView Id="TM" Name="TM" ViewClass="Venus_Simulator.Views.Simu_TMView" Assembly="Venus_Simulator" />

+ 347 - 0
Venus/Venus_Simulator/Config/_ioDefineKepler2200A.xml

@@ -0,0 +1,347 @@
+<?xml version='1.0'?>
+<IO_DEFINE xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
+
+	<!--文件根据210-0062-100_ IO LIST_KPL2200_PM_20230726.xlsx生成-->
+	<!--生成时间:08/03/2023 08:56:15-->
+	<Dig_In>
+		<DI_ITEM Index="0" Name="DI_Lid_Closed" Device="" Addr="w20.00" />
+		<DI_ITEM Index="1" Name="DI_ATM_Switch" Device="ATM_SW" Addr="w20.01" />
+		<DI_ITEM Index="2" Name="DI_VAC_Switch" Device="" Addr="w20.02" />
+		<DI_ITEM Index="3" Name="" />
+		<DI_ITEM Index="4" Name="DI_Water_Leak_Sensor" Device="" Addr="w20.04" />
+		<DI_ITEM Index="5" Name="DI_Lift_Pin_Up_Position" Device="" Addr="w20.05" />
+		<DI_ITEM Index="6" Name="DI_Lift_Pin_Down_Position" Device="" Addr="w20.06" />
+		<DI_ITEM Index="7" Name="DI_Source_RF_Generator_Interlock" Device="" Addr="w20.07" />
+		<DI_ITEM Index="8" Name="DI_Source_RF_Fan" Device="" Addr="w20.08" />
+		<DI_ITEM Index="9" Name="DI_Turbo_Pump_Interlock" Device="" Addr="w20.09" />
+		<DI_ITEM Index="10" Name="DI_Slit_Door_Open_Position" Device="" Addr="w20.10" />
+		<DI_ITEM Index="11" Name="DI_Slit_Door_Close_Position" Device="" Addr="w20.11" />
+		<DI_ITEM Index="12" Name="DI_CDA_Pressure_Switch" Device="" Addr="w20.12" />
+		<DI_ITEM Index="13" Name="" />
+		<DI_ITEM Index="14" Name="" />
+		<DI_ITEM Index="15" Name="DI_Chamber_Pressure_10t_Guage_Alarm" Device="VG_PPH" Addr="w20.15" />
+		<DI_ITEM Index="16" Name="DI_Process_Pressure_100mt_Guage_Alarm" Device="VG_PPL" Addr="w21.00" />
+		<DI_ITEM Index="17" Name="" />
+		<DI_ITEM Index="18" Name="DI_Foreline_Pressure_10t_Guage_Alarm" Device="VG_FL" Addr="w21.02" />
+		<DI_ITEM Index="19" Name="" />
+		<DI_ITEM Index="20" Name="DI_S_Valve_TC_Deviation_out_of_range" Device="" Addr="w21.04" />
+		<DI_ITEM Index="21" Name="DI_S_Valve_Control_TC_Broken_Alarm" Device="" Addr="w21.05" />
+		<DI_ITEM Index="22" Name="DI_S_Valve_Monitor_TC_Broken_Alarm" Device="" Addr="w21.06" />
+		<DI_ITEM Index="23" Name="DI_S_Valve_Heater_On_FB" Device="" Addr="w21.07" />
+		<DI_ITEM Index="24" Name="DI_Foreline_TC_Deviation_out_of_range" Device="" Addr="w21.08" />
+		<DI_ITEM Index="25" Name="DI_Foreline_Control_TC_Broken_Alarm" Device="" Addr="w21.09" />
+		<DI_ITEM Index="26" Name="DI_Foreline_Monitor_TC_Broken_Alarm" Device="" Addr="w21.10" />
+		<DI_ITEM Index="27" Name="DI_Foreline_Heater_On_FB" Device="" Addr="w21.11" />
+		<DI_ITEM Index="28" Name="DI_CHB_Wall_TC_Deviation_out_of_range" Device="" Addr="w21.12" />
+		<DI_ITEM Index="29" Name="DI_CHB_H-HT_Control_TC_Broken_Alarm" Device="" Addr="w21.13" />
+		<DI_ITEM Index="30" Name="DI_CHB_Wall_Monitor_TC_Broken_Alarm" Device="" Addr="w21.14" />
+		<DI_ITEM Index="31" Name="DI_CHB_H-HT_Heater_On_FB" Device="" Addr="w21.15" />
+		<DI_ITEM Index="32" Name="DI_CHB_H-HT_OT_Switch_Alarm" Device="" Addr="w22.00" />
+		<DI_ITEM Index="33" Name="" />
+		<DI_ITEM Index="34" Name="DI_PN2_Pressure_Switch" Device="PGN2" Addr="w22.02" Note="Gas Box" />
+		<DI_ITEM Index="35" Name="DI_MFC1_Pressure_Switch" Device="PG1" Addr="w22.03" Note="Gas Box" />
+		<DI_ITEM Index="36" Name="DI_MFC2_Pressure_Switch" Device="PG2" Addr="w22.04" Note="Gas Box" />
+		<DI_ITEM Index="37" Name="DI_MFC3_Pressure_Switch" Device="PG3" Addr="w22.05" Note="Gas Box" />
+		<DI_ITEM Index="38" Name="DI_MFC4_Pressure_Switch" Device="PG4" Addr="w22.06" Note="Gas Box" />
+		<DI_ITEM Index="39" Name="DI_MFC5_Pressure_Switch" Device="PG5" Addr="w22.07" Note="Gas Box" />
+		<DI_ITEM Index="40" Name="DI_MFC6_Pressure_Switch" Device="PG6" Addr="w22.08" Note="Gas Box" />
+		<DI_ITEM Index="41" Name="DI_MFC7_Pressure_Switch" Device="PG7" Addr="w22.09" Note="Gas Box" />
+		<DI_ITEM Index="42" Name="DI_MFC8_Pressure_Switch" Device="PG8" Addr="w22.10" Note="Gas Box" />
+		<DI_ITEM Index="43" Name="DI_N2_Purge_Pressure_Switch" Device="N2_P" Addr="w22.11" Note="Gas Box" />
+		<DI_ITEM Index="44" Name="DI_ESC_He_Pressure_100t_Guage_Alarm" Device="VG_He" Addr="w22.12" Note="ESC配置" />
+		<DI_ITEM Index="45" Name="" />
+		<DI_ITEM Index="46" Name="" />
+		<DI_ITEM Index="47" Name="" />
+		<DI_ITEM Index="48" Name="" />
+		<DI_ITEM Index="49" Name="" />
+		<DI_ITEM Index="50" Name="" />
+		<DI_ITEM Index="51" Name="DI_Gas_Box_Door_Switch" Device="" Addr="w23.03" />
+		<DI_ITEM Index="52" Name="DI_Gas_Box_Pressure_Switch" Device="" Addr="w23.04" />
+		<DI_ITEM Index="53" Name="DI_Turbo_Pump_Water_Flow_Switch" Device="" Addr="w23.05" />
+		<DI_ITEM Index="54" Name="DI_Source_RF_Water_Flow_Switch" Device="" Addr="w23.06" />
+		<DI_ITEM Index="55" Name="" />
+		<DI_ITEM Index="56" Name="DI_P_Valve_TC_Deviation_out_of_range" Device="" Addr="w23.08" />
+		<DI_ITEM Index="57" Name="DI_P_Valve_Control_TC_Broken_Alarm" Device="" Addr="w23.09" />
+		<DI_ITEM Index="58" Name="DI_P_Valve_Monitor_TC_Broken_Alarm" Device="" Addr="w23.10" />
+		<DI_ITEM Index="59" Name="DI_P_Valve_Heater_On_FB" Device="" Addr="w23.11" />
+		<DI_ITEM Index="60" Name="" />
+		<DI_ITEM Index="61" Name="DI_Gas_Line_TC_Deviation_out_of_range" Device="" Addr="w23.13" />
+		<DI_ITEM Index="62" Name="DI_Gas_Line_Control_TC_Broken_Alarm" Device="" Addr="w23.14" />
+		<DI_ITEM Index="63" Name="DI_Gas_Line_Monitor_TC_Broken_Alarm" Device="" Addr="w23.15" />
+		<DI_ITEM Index="64" Name="DI_Gas_Line_Heater_On_FB" Device="" Addr="w24.00" />
+		<DI_ITEM Index="65" Name="DI_Gas_Line_OT_Switch_Alarm" Device="" Addr="w24.01" />
+		<DI_ITEM Index="66" Name="DI_S_Valve_OT_Switch_Alarm" Device="" Addr="w24.02" />
+		<DI_ITEM Index="67" Name="DI_Foreline_OT_Switch_Alarm" Device="" Addr="w24.03" />
+		<DI_ITEM Index="68" Name="" />
+		<DI_ITEM Index="69" Name="" />
+		<DI_ITEM Index="70" Name="" />
+		<DI_ITEM Index="71" Name="" />
+		<DI_ITEM Index="72" Name="DI_Lid_Up_Button" Device="" Addr="w24.08" />
+		<DI_ITEM Index="73" Name="DI_Lid_Down_Button" Device="" Addr="w24.09" />
+		<DI_ITEM Index="74" Name="DI_Lid_Up_Limit_Pos_SW" Device="" Addr="w24.10" />
+		<DI_ITEM Index="75" Name="DI_Lid_Down_Limit_Pos_SW" Device="" Addr="w24.11" />
+		<DI_ITEM Index="76" Name="DI_Arm_Not_Extend_to_PM" Device="" Addr="w24.12" />
+		<DI_ITEM Index="77" Name="DI_TM_Safety_Door_Colse" Device="" Addr="w24.13" />
+		<DI_ITEM Index="78" Name="DI_ESC_Inner_Coolant_Flow_SW" Device="" Addr="w24.14" />
+		<DI_ITEM Index="79" Name="DI_ESC_Outer_Coolant_Flow_SW" Device="" Addr="w24.15" />
+		<DI_ITEM Index="80" Name="DI_Top_Plate_Coolant_Flow_SW" Device="" Addr="w25.00" />
+		<DI_ITEM Index="81" Name="" />
+		<DI_ITEM Index="82" Name="" />
+		<DI_ITEM Index="83" Name="DI_Lid_Servo_Alarm" Device="" Addr="w25.03" />
+		<DI_ITEM Index="84" Name="DI_ADAM-1_communication_Alarm" Device="" Addr="w25.04" />
+		<DI_ITEM Index="85" Name="DI_ADAM-2_communication_Alarm" Device="" Addr="w25.05" />
+		<DI_ITEM Index="86" Name="" />
+		<DI_ITEM Index="87" Name="DI_ESC_inner_coolant_inlet_TC_Broken_Alarm" Device="" Addr="w25.07" />
+		<DI_ITEM Index="88" Name="DI_ESC_inner_coolant_outlet_TC_Broken_Alarm" Device="" Addr="w25.08" />
+		<DI_ITEM Index="89" Name="DI_ESC_outer_coolant_inlet_TC_Broken_Alarm" Device="" Addr="w25.09" />
+		<DI_ITEM Index="90" Name="DI_ESC_outer_coolant_outlet_TC_Broken_Alarm" Device="" Addr="w25.10" />
+		<DI_ITEM Index="91" Name="DI_Top_Plate_coolant_inlet_TC_Broken_Alarm" Device="" Addr="w25.11" />
+		<DI_ITEM Index="92" Name="DI_Top_Plate_coolant_outlet_TC_Broken_Alarm" Device="" Addr="w25.12" />
+		<DI_ITEM Index="93" Name="" />
+		<DI_ITEM Index="94" Name="" />
+		<DI_ITEM Index="95" Name="" />
+		<DI_ITEM Index="96" Name="DI_Lift_Servo_Alarm" Device="" Addr="w26.00" />
+		<DI_ITEM Index="97" Name="DI_Lift_Up_Limit_Pos_SW" Device="" Addr="w26.01" />
+		<DI_ITEM Index="98" Name="DI_Lift_Down_Limit_Pos_SW" Device="" Addr="w26.02" />
+		<DI_ITEM Index="99" Name="DI_Lift_Servo_ORG_Pos_SW" Device="" Addr="w26.03" />
+		<DI_ITEM Index="100" Name="DI_Lift_Servo_with_origin" Device="" Addr="w26.04" />
+		<DI_ITEM Index="101" Name="DI_Lift_Servo_servo_on" Device="" Addr="w26.05" />
+		<DI_ITEM Index="102" Name="DI_Lift_Servo_alarm" Device="" Addr="w26.06" />
+		<DI_ITEM Index="103" Name="DI_Lift_Servo_ORG_fail_alarm" Device="" Addr="w26.07" />
+		<DI_ITEM Index="104" Name="DI_Lift_Servo_ABS_fail_alarm" Device="" Addr="w26.08" />
+		<DI_ITEM Index="105" Name="DI_Lift_Servo_Over_software_Limit_alarm" Device="" Addr="w26.09" />
+		<DI_ITEM Index="106" Name="DI_Lift_Servo_Go_Position1_Complete" Device="" Addr="w26.10" />
+		<DI_ITEM Index="107" Name="DI_Lift_Servo_Go_Position2_Complete" Device="" Addr="w26.11" />
+		<DI_ITEM Index="108" Name="DI_Lift_Servo_Go_Position3_Complete" Device="" Addr="w26.12" />
+		<DI_ITEM Index="109" Name="" />
+		<DI_ITEM Index="110" Name="" />
+		<DI_ITEM Index="111" Name="" />
+	</Dig_In>
+	<Dig_Out>
+		<DO_ITEM Index="0" Name="DO_PVN21" Device="GPVN21" Addr="w0.00" Note="Gas Box" />
+		<DO_ITEM Index="1" Name="DO_PVN22" Device="GPVN22" Addr="w0.01" Note="Gas Box" />
+		<DO_ITEM Index="2" Name="DO_PV11" Device="GPV11" Addr="w0.02" Note="Gas Box" />
+		<DO_ITEM Index="3" Name="DO_PV12" Device="GPV12" Addr="w0.03" Note="Gas Box" />
+		<DO_ITEM Index="4" Name="DO_PV21" Device="GPV21" Addr="w0.04" Note="Gas Box" />
+		<DO_ITEM Index="5" Name="DO_PV22" Device="GPV22" Addr="w0.05" Note="Gas Box" />
+		<DO_ITEM Index="6" Name="DO_PV31" Device="GPV31" Addr="w0.06" Note="Gas Box" />
+		<DO_ITEM Index="7" Name="DO_PV32" Device="GPV32" Addr="w0.07" Note="Gas Box" />
+		<DO_ITEM Index="8" Name="DO_PV41" Device="GPV41" Addr="w0.08" Note="Gas Box" />
+		<DO_ITEM Index="9" Name="DO_PV42" Device="GPV42" Addr="w0.09" Note="Gas Box" />
+		<DO_ITEM Index="10" Name="DO_N2_Valve" Device="GPVN2" Addr="w0.10" Note="Gas Box" />
+		<DO_ITEM Index="11" Name="DO_MFC1_Valve" Device="GPV1" Addr="w0.11" Note="Gas Box" />
+		<DO_ITEM Index="12" Name="DO_MFC2_Valve" Device="GPV2" Addr="w0.12" Note="Gas Box" />
+		<DO_ITEM Index="13" Name="DO_MFC3_Valve" Device="GPV3" Addr="w0.13" Note="Gas Box" />
+		<DO_ITEM Index="14" Name="DO_MFC4_Valve" Device="GPV4" Addr="w0.14" Note="Gas Box" />
+		<DO_ITEM Index="15" Name="DO_MFC5_Valve" Device="GPV5" Addr="w0.15" Note="Gas Box" />
+		<DO_ITEM Index="16" Name="DO_MFC6_Valve" Device="GPV6" Addr="w1.00" Note="Gas Box" />
+		<DO_ITEM Index="17" Name="DO_MFC7_Valve" Device="GPV7" Addr="w1.01" Note="Gas Box" />
+		<DO_ITEM Index="18" Name="DO_MFC8_Valve" Device="GPV8" Addr="w1.02" Note="Gas Box" />
+		<DO_ITEM Index="19" Name="DO_N2_Purge1_Valve" Device="N2_Purge" Addr="w1.03" Note="Gas Box" />
+		<DO_ITEM Index="20" Name="DO_N2_Purge2_Valve" Device="N2_Purge" Addr="w1.04" Note="Gas Box" />
+		<DO_ITEM Index="21" Name="DO_Gas_Final_Valve" Device="PV1" Addr="w1.05" />
+		<DO_ITEM Index="22" Name="DO_Soft_Pumping_Valve" Device="PV2" Addr="w1.06" />
+		<DO_ITEM Index="23" Name="DO_Fast_Pumping_Valve" Device="PV3" Addr="w1.07" />
+		<DO_ITEM Index="24" Name="DO_Slit_Door_Open" Device="PV4" Addr="w1.08" />
+		<DO_ITEM Index="25" Name="DO_Slit_Door_Close" Device="PV4" Addr="w1.09" />
+		<DO_ITEM Index="26" Name="" />
+		<DO_ITEM Index="27" Name="" />
+		<DO_ITEM Index="28" Name="" />
+		<DO_ITEM Index="29" Name="DO_Turbo_Pump_Pumping_Valve" Device="PV6" Addr="w1.13" />
+		<DO_ITEM Index="30" Name="DO_Turbo_Pump_Purge_Valve" Device="PV7" Addr="w1.14" />
+		<DO_ITEM Index="31" Name="DO_Gauge_Valve" Device="PV8" Addr="w1.15" />
+		<DO_ITEM Index="32" Name="DO_Reset_Signal" Device="" Addr="w2.00" />
+		<DO_ITEM Index="33" Name="DO_S_Valve_Heater_On" Device="" Addr="w2.01" />
+		<DO_ITEM Index="34" Name="DO_Foreline_Heater_On" Device="" Addr="w2.02" />
+		<DO_ITEM Index="35" Name="DO_CHB_H-HT_Heater_On" Device="" Addr="w2.03" />
+		<DO_ITEM Index="36" Name="" />
+		<DO_ITEM Index="37" Name="" />
+		<DO_ITEM Index="38" Name="" />
+		<DO_ITEM Index="39" Name="" />
+		<DO_ITEM Index="40" Name="" />
+		<DO_ITEM Index="41" Name="" />
+		<DO_ITEM Index="42" Name="" />
+		<DO_ITEM Index="43" Name="" />
+		<DO_ITEM Index="44" Name="" />
+		<DO_ITEM Index="45" Name="" />
+		<DO_ITEM Index="46" Name="DO_P_Valve_Heater_On" Device="" Addr="w2.14" />
+		<DO_ITEM Index="47" Name="DO_Gas_Line_Heater_On" Device="" Addr="w2.15" />
+		<DO_ITEM Index="48" Name="" />
+		<DO_ITEM Index="49" Name="" />
+		<DO_ITEM Index="50" Name="DO_Lid_Up" Device="" Addr="w3.02" />
+		<DO_ITEM Index="51" Name="DO_Lid_Down" Device="" Addr="w3.03" />
+		<DO_ITEM Index="52" Name="" />
+		<DO_ITEM Index="53" Name="" />
+		<DO_ITEM Index="54" Name="" />
+		<DO_ITEM Index="55" Name="" />
+		<DO_ITEM Index="56" Name="" />
+		<DO_ITEM Index="57" Name="" />
+		<DO_ITEM Index="58" Name="DO_Lift_Servo_Go_Position1" Device="去位置1" Addr="w3.10" />
+		<DO_ITEM Index="59" Name="DO_Lift_Servo_Go_Position2" Device="去位置2" Addr="w3.11" />
+		<DO_ITEM Index="60" Name="DO_Lift_Servo_Go_Position3" Device="去位置3" Addr="w3.12" />
+		<DO_ITEM Index="61" Name="DO_Lift_Servo_Origin" Device="找原点" Addr="w3.13" />
+		<DO_ITEM Index="62" Name="DO_Lift_Servo_Stop" Device="停止" Addr="w3.14" />
+		<DO_ITEM Index="63" Name="DO_Lift_Servo_Manual_UP" Device="手动上升" Addr="w3.15" />
+		<DO_ITEM Index="64" Name="DO_Lift_Servo_Manual_DOWN" Device="手动下降" Addr="w4.00" />
+		<DO_ITEM Index="65" Name="" />
+		<DO_ITEM Index="66" Name="" />
+		<DO_ITEM Index="67" Name="" />
+		<DO_ITEM Index="68" Name="" />
+		<DO_ITEM Index="69" Name="" />
+		<DO_ITEM Index="70" Name="" />
+		<DO_ITEM Index="71" Name="" />
+		<DO_ITEM Index="72" Name="" />
+		<DO_ITEM Index="73" Name="" />
+		<DO_ITEM Index="74" Name="" />
+		<DO_ITEM Index="75" Name="" />
+		<DO_ITEM Index="76" Name="" />
+		<DO_ITEM Index="77" Name="" />
+		<DO_ITEM Index="78" Name="" />
+		<DO_ITEM Index="79" Name="" />
+		<DO_ITEM Index="80" Name="" />
+		<DO_ITEM Index="81" Name="" />
+		<DO_ITEM Index="82" Name="" />
+		<DO_ITEM Index="83" Name="" />
+		<DO_ITEM Index="84" Name="" />
+		<DO_ITEM Index="85" Name="" />
+		<DO_ITEM Index="86" Name="" />
+		<DO_ITEM Index="87" Name="" />
+		<DO_ITEM Index="88" Name="" />
+		<DO_ITEM Index="89" Name="" />
+		<DO_ITEM Index="90" Name="" />
+		<DO_ITEM Index="91" Name="" />
+		<DO_ITEM Index="92" Name="" />
+		<DO_ITEM Index="93" Name="" />
+		<DO_ITEM Index="94" Name="" />
+		<DO_ITEM Index="95" Name="" />
+		<DO_ITEM Index="96" Name="" />
+		<DO_ITEM Index="97" Name="" />
+		<DO_ITEM Index="98" Name="" />
+		<DO_ITEM Index="99" Name="" />
+		<DO_ITEM Index="100" Name="" />
+		<DO_ITEM Index="101" Name="" />
+		<DO_ITEM Index="102" Name="" />
+		<DO_ITEM Index="103" Name="" />
+		<DO_ITEM Index="104" Name="" />
+		<DO_ITEM Index="105" Name="" />
+		<DO_ITEM Index="106" Name="" />
+		<DO_ITEM Index="107" Name="" />
+		<DO_ITEM Index="108" Name="" />
+		<DO_ITEM Index="109" Name="" />
+		<DO_ITEM Index="110" Name="" />
+		<DO_ITEM Index="111" Name="" />
+	</Dig_Out>
+	<Ana_Out>
+		<AO_ITEM Index="0" Name="AO_MFC1_Flow_Setpoint" Device="" Addr="d1000" Note="MFC" />
+		<AO_ITEM Index="1" Name="AO_MFC2_Flow_Setpoint" Device="" Addr="d1002" Note="MFC" />
+		<AO_ITEM Index="2" Name="AO_MFC3_Flow_Setpoint" Device="" Addr="d1004" Note="MFC" />
+		<AO_ITEM Index="3" Name="AO_MFC4_Flow_Setpoint" Device="" Addr="d1006" Note="MFC" />
+		<AO_ITEM Index="4" Name="AO_MFC5_Flow_Setpoint" Device="" Addr="d1008" Note="MFC" />
+		<AO_ITEM Index="5" Name="AO_MFC6_Flow_Setpoint" Device="" Addr="d1010" Note="MFC" />
+		<AO_ITEM Index="6" Name="AO_MFC7_Flow_Setpoint" Device="" Addr="d1012" Note="MFC" />
+		<AO_ITEM Index="7" Name="AO_MFC8_Flow_Setpoint" Device="" Addr="d1014" Note="MFC" />
+		<AO_ITEM Index="8" Name="AO_He_Flow_Setpoint" Device="" Addr="d1016" Note="MFC" />
+		<AO_ITEM Index="9" Name="AO_Turbo_Pump_N2_Flow_Setpoint" Device="" Addr="d1018" Note="MFC" />
+		<AO_ITEM Index="10" Name="AO_S_Valve_Temperature_Setpoint" Device="" Addr="d1020" Note="以前是Valve" />
+		<AO_ITEM Index="11" Name="AO_S_Valve_Temp_Limit_Setpoint" Device="" Addr="d1022" />
+		<AO_ITEM Index="12" Name="AO_Foreline_Temperature_Setpoint" Device="" Addr="d1024" Note="前级管道设定温度" />
+		<AO_ITEM Index="13" Name="AO_Foreline_Temp_Limit_Setpoint" Device="" Addr="d1026" Note="Temp Limit" />
+		<AO_ITEM Index="14" Name="AO_CHB_H-HT_Temperature_Setpoint" Device="" Addr="d1028" Note="H-HT设定温度" />
+		<AO_ITEM Index="15" Name="AO_CHB_H-HT_Temp_Limit_Setpoint" Device="" Addr="d1030" Note="H-HT极限温度设定" />
+		<AO_ITEM Index="16" Name="AO_Heartbeat" Device="" Addr="d1032" Note="PC to PLC" />
+		<AO_ITEM Index="17" Name="AO_ESC_He_Pressure_Setpoint" Device="" Addr="d1034" Note="ESC配置" />
+		<AO_ITEM Index="18" Name="AO_ESC_He_Control_Mode" Device="" Addr="d1036" />
+		<AO_ITEM Index="19" Name="AO_P_Valve_Temperature_Setpoint" Device="" Addr="d1038" Note="钟摆阀门加热设定温度" />
+		<AO_ITEM Index="20" Name="AO_P_Valve_Temp_Limit_Setpoint" Device="" Addr="d1040" Note="钟摆阀门Temp Limit" />
+		<AO_ITEM Index="21" Name="AO_Gas_Line_Temperature_Setpoint" Device="" Addr="d1042" Note="Gas Line加热设定温度" />
+		<AO_ITEM Index="22" Name="AO_Gas_Line_Temp_Limit_Setpoint" Device="" Addr="d1044" Note="Gas LineTemp Limit" />
+		<AO_ITEM Index="23" Name="" />
+		<AO_ITEM Index="24" Name="" />
+		<AO_ITEM Index="25" Name="" />
+		<AO_ITEM Index="26" Name="" />
+		<AO_ITEM Index="27" Name="" />
+		<AO_ITEM Index="28" Name="" />
+		<AO_ITEM Index="29" Name="AO_CHB_H-HT_Power_Distribute_Percent" Device="" Addr="d1058" />
+		<AO_ITEM Index="30" Name="" />
+		<AO_ITEM Index="31" Name="" />
+		<AO_ITEM Index="32" Name="" />
+		<AO_ITEM Index="33" Name="" />
+		<AO_ITEM Index="34" Name="" />
+		<AO_ITEM Index="35" Name="" />
+		<AO_ITEM Index="36" Name="" />
+		<AO_ITEM Index="37" Name="" />
+		<AO_ITEM Index="38" Name="" />
+		<AO_ITEM Index="39" Name="" />
+		<AO_ITEM Index="40" Name="" />
+		<AO_ITEM Index="41" Name="" />
+		<AO_ITEM Index="42" Name="" />
+		<AO_ITEM Index="43" Name="" />
+		<AO_ITEM Index="44" Name="" />
+		<AO_ITEM Index="45" Name="" />
+		<AO_ITEM Index="46" Name="" />
+		<AO_ITEM Index="47" Name="" />
+		<AO_ITEM Index="48" Name="" />
+		<AO_ITEM Index="49" Name="" />
+	</Ana_Out>
+	<Ana_In>
+		<AI_ITEM Index="0" Name="AI_Chamber_Pressure_10t" Device="" Addr="d2000" Note="float" />
+		<AI_ITEM Index="1" Name="AI_Process_Pressure_100mt" Device="" Addr="d2002" Note="float" />
+		<AI_ITEM Index="2" Name="AI_Foreline_Pressure_10t" Device="" Addr="d2004" Note="float" />
+		<AI_ITEM Index="3" Name="AI_ESC_He_Pressure_100t" Device="" Addr="d2006" Note="float" />
+		<AI_ITEM Index="4" Name="AI_MFC1_Flow" Device="" Addr="d2008" Note="float" />
+		<AI_ITEM Index="5" Name="AI_MFC2_Flow" Device="" Addr="d2010" Note="float" />
+		<AI_ITEM Index="6" Name="AI_MFC3_Flow" Device="" Addr="d2012" Note="float" />
+		<AI_ITEM Index="7" Name="AI_MFC4_Flow" Device="" Addr="d2014" Note="float" />
+		<AI_ITEM Index="8" Name="AI_MFC5_Flow" Device="" Addr="d2016" Note="float" />
+		<AI_ITEM Index="9" Name="AI_MFC6_Flow" Device="" Addr="d2018" Note="float" />
+		<AI_ITEM Index="10" Name="AI_MFC7_Flow" Device="" Addr="d2020" Note="float" />
+		<AI_ITEM Index="11" Name="AI_MFC8_Flow" Device="" Addr="d2022" Note="float" />
+		<AI_ITEM Index="12" Name="AI_ESC_He_Flow" Device="" Addr="d2024" Note="float" />
+		<AI_ITEM Index="13" Name="AI_Turbo_Pump_N2_Flow" Device="" Addr="d2026" Note="float" />
+		<AI_ITEM Index="14" Name="AI_S_Valve_Control_TC_Temp" Device="" Addr="d2028" Note="float" />
+		<AI_ITEM Index="15" Name="" />
+		<AI_ITEM Index="16" Name="AI_Foreline_Control_TC_Temp" Device="" Addr="d2032" Note="float" />
+		<AI_ITEM Index="17" Name="" />
+		<AI_ITEM Index="18" Name="AI_CHB_H-HT_Control_TC_Temp" Device="" Addr="d2036" Note="float" />
+		<AI_ITEM Index="19" Name="" />
+		<AI_ITEM Index="20" Name="" />
+		<AI_ITEM Index="21" Name="" />
+		<AI_ITEM Index="22" Name="AI_Heartbeat_FB" Device="" Addr="d2044" Note="float" />
+		<AI_ITEM Index="23" Name="AI_Second" Device="" Addr="d2046" Note="float" />
+		<AI_ITEM Index="24" Name="AI_Minute" Device="" Addr="d2048" Note="float" />
+		<AI_ITEM Index="25" Name="AI_Time" Device="" Addr="d2050" Note="float" />
+		<AI_ITEM Index="26" Name="AI_Day" Device="" Addr="d2052" Note="float" />
+		<AI_ITEM Index="27" Name="AI_Month" Device="" Addr="d2054" Note="float" />
+		<AI_ITEM Index="28" Name="AI_Year" Device="" Addr="d2056" Note="float" />
+		<AI_ITEM Index="29" Name="" />
+		<AI_ITEM Index="30" Name="" />
+		<AI_ITEM Index="31" Name="AI_Chamber_Pressure_Virtual" Device="" Addr="d2062" Note="float" />
+		<AI_ITEM Index="32" Name="AI_P_Valve_Control_TC_Temp" Device="" Addr="d2064" Note="float" />
+		<AI_ITEM Index="33" Name="AI_Gas_Line_Control_TC_Temp" Device="" Addr="d2066" Note="float" />
+		<AI_ITEM Index="34" Name="" />
+		<AI_ITEM Index="35" Name="AI_S_Valve_Monitor_TC1_Temp" Device="" Addr="d2070" Note="float" />
+		<AI_ITEM Index="36" Name="" />
+		<AI_ITEM Index="37" Name="" />
+		<AI_ITEM Index="38" Name="" />
+		<AI_ITEM Index="39" Name="AI_Foreline_Monitor_TC1_Temp" Device="" Addr="d2078" Note="float" />
+		<AI_ITEM Index="40" Name="AI_Foreline_Monitor_TC2_Temp" Device="" Addr="d2080" Note="float" />
+		<AI_ITEM Index="41" Name="AI_Foreline_Monitor_TC3_Temp" Device="" Addr="d2082" Note="float" />
+		<AI_ITEM Index="42" Name="" />
+		<AI_ITEM Index="43" Name="AI_CHB_Wall_Monitor_TC1_Temp" Device="" Addr="d2086" Note="float" />
+		<AI_ITEM Index="44" Name="AI_CHB_Wall_Monitor_TC2_Temp" Device="" Addr="d2088" Note="float" />
+		<AI_ITEM Index="45" Name="AI_CHB_Wall_Monitor_TC3_Temp" Device="" Addr="d2090" Note="float" />
+		<AI_ITEM Index="46" Name="" />
+		<AI_ITEM Index="47" Name="" />
+		<AI_ITEM Index="48" Name="" />
+		<AI_ITEM Index="49" Name="" />
+		<AI_ITEM Index="50" Name="" />
+		<AI_ITEM Index="51" Name="" />
+		<AI_ITEM Index="52" Name="" />
+		<AI_ITEM Index="53" Name="AI_ESC_inner_coolant_inlet_TC_Temp" Device="" Addr="d2106" Note="float" />
+		<AI_ITEM Index="54" Name="AI_ESC_inner_coolant_outlet_TC_Temp" Device="" Addr="d2108" Note="float" />
+		<AI_ITEM Index="55" Name="AI_ESC_outer_coolant_inlet_TC_Temp" Device="" Addr="d2110" Note="float" />
+		<AI_ITEM Index="56" Name="AI_ESC_outer_coolant_outlet_TC_Temp" Device="" Addr="d2112" Note="float" />
+		<AI_ITEM Index="57" Name="AI_Top_Plate_coolant_inlet_TC_Temp" Device="" Addr="d2114" Note="float" />
+		<AI_ITEM Index="58" Name="AI_Top_Plate_coolant_outlet_TC_Temp" Device="" Addr="d2116" Note="float" />
+	</Ana_In>
+</IO_DEFINE>

+ 10 - 0
Venus/Venus_Simulator/Venus_Simulator.csproj

@@ -134,6 +134,9 @@
     <Compile Include="Views\SimulatorIo1View.xaml.cs">
       <DependentUpon>SimulatorIo1View.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\SimulatorIo3View.xaml.cs">
+      <DependentUpon>SimulatorIo3View.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\SimulatorIo2View.xaml.cs">
       <DependentUpon>SimulatorIo2View.xaml</DependentUpon>
     </Compile>
@@ -313,6 +316,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\SimulatorIo3View.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\SimulatorIo2View.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -380,6 +387,9 @@
   </ItemGroup>
   <ItemGroup />
   <ItemGroup>
+    <Content Include="Config\_ioDefineKepler2200A.xml">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
     <Content Include="Config\UILayout.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>

+ 241 - 0
Venus/Venus_Simulator/Views/SimulatorIo3View.xaml

@@ -0,0 +1,241 @@
+<UserControl x:Class="Venus_Simulator.Views.SimulatorIo3View"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+             xmlns:control="clr-namespace:MECF.Framework.UI.Core.Control;assembly=MECF.Framework.UI.Core"
+             xmlns:ctrl="http://OpenSEMI.Ctrlib.com/presentation"  
+             xmlns:views="clr-namespace:Venus_Simulator.Views"
+             xmlns:toolkit="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
+             mc:Ignorable="d" 
+             d:DesignHeight="450" d:DesignWidth="1900">
+    <UserControl.Resources>
+        <views:BoolBackgroundConverter x:Key="BoolBackgroundConverter"/>
+
+        <SolidColorBrush x:Key="DataGrid_Cell_BD" Color="Gray"/>
+
+
+        <Style x:Key="Lamp-Button" TargetType="{x:Type views:IoButton}">
+            <Setter Property="Width" Value="16"/>
+            <Setter Property="Height" Value="16"/>
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="{x:Type views:IoButton}">
+                        <Grid>
+                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True" Content=""/>
+
+                            <Ellipse     Stroke="Gray" StrokeThickness="2"  
+                                         Fill="DarkGray"  />
+                            <Ellipse x:Name="Highlight"   Stroke="Gray" StrokeThickness="2"   
+                                     Fill="Lime"  />
+                        </Grid>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsChecked" Value="True">
+                                <Setter Property="Visibility" TargetName="Highlight" Value="Visible"/>
+                            </Trigger>
+                            <Trigger Property="IsChecked" Value="False">
+                                <Setter Property="Visibility" TargetName="Highlight" Value="Collapsed"/>
+                            </Trigger>
+                            <Trigger Property="IsMouseOver" Value="False">
+                                <Setter Property="Opacity" TargetName="Highlight" Value="1"/>
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+    </UserControl.Resources>
+    <Grid ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Visible"  >
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="480"/>
+            <ColumnDefinition Width="480"/>
+            <ColumnDefinition Width="500"/>
+            <ColumnDefinition Width="480"/>
+        </Grid.ColumnDefinitions>
+
+        <TabControl Grid.Column="0" Margin="20,0,0,0" >
+            <TabItem Header="DI">
+                <ListView ItemsSource="{Binding Path=DIs}" 
+                          Grid.Column="2" 
+                          AlternationCount="2"
+                          VerticalAlignment="Top"
+                          FontSize="12"
+                          Name="DIListView">
+                    <ListView.View>
+                        <GridView>
+                            <GridViewColumn Width="30"
+                                        Header="Index"
+                                        DisplayMemberBinding="{Binding Path=Index}" />
+
+                            <GridViewColumn Width="250"
+                                        Header="Name"
+                                        DisplayMemberBinding="{Binding Path=Name}"  />
+
+                            <GridViewColumn Width="70"
+                                        Header="Address"
+                                        DisplayMemberBinding="{Binding Path=Address}"  />
+
+                            <GridViewColumn Width="50" Header="Status">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <Grid Width="35">
+                                            <views:IoButton HorizontalAlignment="Center"
+                                                            ON="{Binding Path=BoolValue}"  Style="{StaticResource Lamp-Button}"  IsChecked="{Binding BoolValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
+                                         >
+                                            </views:IoButton>
+                                        </Grid>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="50" Header="Hold">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <CheckBox x:Name="ckHold" IsChecked="{Binding Path=HoldValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="25" Height="25" ></CheckBox>
+
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+
+
+
+                        </GridView>
+                    </ListView.View>
+                </ListView>
+            </TabItem>
+        </TabControl>
+        <TabControl Grid.Column="1" Margin="20,0,0,0">
+            <TabItem Header="DO">
+                <ListView ItemsSource="{Binding Path=DOs}" 
+                          Grid.Column="3" 
+                          AlternationCount="2"
+                          VerticalAlignment="Top"
+                          FontSize="12"
+                          Name="DOListView">
+
+                    <ListView.View>
+                        <GridView>
+                            <GridViewColumn Width="30"
+                                        Header="Index"
+                                        DisplayMemberBinding="{Binding Path=Index}" />
+
+                            <GridViewColumn Width="250"
+                                        Header="Name"
+                                        DisplayMemberBinding="{Binding Path=Name}"  />
+
+                            <GridViewColumn Width="70"
+                                        Header="Address"
+                                        DisplayMemberBinding="{Binding Path=Address}"  />
+
+                            <GridViewColumn Width="50" Header="Status">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate >
+                                        <Grid Width="35">
+                                            <views:IoButton HorizontalAlignment="Center"
+                                                            ON="{Binding Path=BoolValue}"  Style="{StaticResource Lamp-Button}"  IsChecked="{Binding BoolValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
+                                            </views:IoButton>
+                                        </Grid>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="50" Header="Hold">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <CheckBox x:Name="ckHold" IsChecked="{Binding Path=HoldValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="25" Height="25" ></CheckBox>
+
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                        </GridView>
+                    </ListView.View>
+                </ListView>
+            </TabItem>
+        </TabControl>
+
+        <TabControl Grid.Column="2" Margin="15,0,0,0">
+            <TabItem Header="AI">
+                <ListView ItemsSource="{Binding Path=AIs}"
+                          AlternationCount="2"
+                          Name="AIListView"
+                          FontSize="12"
+                          VerticalAlignment="Top" >
+                    <ListView.View>
+                        <GridView>
+                            <GridViewColumn Width="30"
+                                        Header="Index"
+                                        DisplayMemberBinding="{Binding Path=Index}" />
+
+                            <GridViewColumn Width="250"
+                                        Header="Name"
+                                        DisplayMemberBinding="{Binding Path=Name}"  />
+
+                            <GridViewColumn Width="70"
+                                        Header="Address"
+                                        DisplayMemberBinding="{Binding Path=Address}"  />
+                            <GridViewColumn Width="80" Header="Value">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate >
+                                        <toolkit:IntegerUpDown Text="{Binding Path=ShortValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="60"/>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="50" Header="Hold">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <CheckBox x:Name="ckHold" IsChecked="{Binding Path=HoldValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="25" Height="25" ></CheckBox>
+
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                        </GridView>
+                    </ListView.View>
+                </ListView>
+            </TabItem>
+
+        </TabControl>
+        <TabControl Grid.Column="3" Margin="20,0,0,0">
+
+            <TabItem Header="AO">
+                <ListView ItemsSource="{Binding Path=AOs}"
+                          Grid.Column="1" 
+                          AlternationCount="2"
+                          FontSize="12"
+                          VerticalAlignment="Top"
+                          Name="AOListView">
+                    <ListView.View>
+                        <GridView>
+                            <GridViewColumn Width="50"
+                                        Header="Index"
+                                        DisplayMemberBinding="{Binding Path=Index}" />
+
+                            <GridViewColumn Width="250"
+                                        Header="Name"
+                                        DisplayMemberBinding="{Binding Path=Name}"  />
+
+                            <GridViewColumn Width="70"
+                                        Header="Address"
+                                        DisplayMemberBinding="{Binding Path=Address}"  />
+
+                            <GridViewColumn Width="80" Header="Value">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate >
+                                        <toolkit:IntegerUpDown Text="{Binding Path=ShortValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="60"/>
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                            <GridViewColumn Width="50" Header="Hold">
+                                <GridViewColumn.CellTemplate>
+                                    <DataTemplate>
+                                        <CheckBox x:Name="ckHold" IsChecked="{Binding Path=HoldValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="25" Height="25" ></CheckBox>
+
+                                    </DataTemplate>
+                                </GridViewColumn.CellTemplate>
+                            </GridViewColumn>
+                        </GridView>
+                    </ListView.View>
+                </ListView>
+            </TabItem>
+        </TabControl>
+
+    </Grid>
+</UserControl>

+ 37 - 0
Venus/Venus_Simulator/Views/SimulatorIo3View.xaml.cs

@@ -0,0 +1,37 @@
+using System;
+using System.Collections.ObjectModel;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using Aitex.Common.Util;
+using Aitex.Core.UI.MVVM;
+using MECF.Framework.Common.IOCore;
+using Venus_Simulator.Instances;
+
+namespace Venus_Simulator.Views
+{
+    /// <summary>
+    /// IoView.xaml 的交互逻辑
+    /// </summary>
+    public partial class SimulatorIo3View : UserControl
+    {
+        public SimulatorIo3View()
+        {
+            InitializeComponent();
+            DataContext = new IoViewModel(6733, "PMC.PLC", PathManager.GetCfgDir() + $"_ioDefine{SimulatorJetChamber.CurrentPMCChamber}.xml", "PMC");
+
+            this.IsVisibleChanged += IOView_IsVisibleChanged;
+        }
+
+        private void IOView_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
+        {
+            if (this.DataContext == null)
+            {
+            }
+            (DataContext as TimerViewModelBase).EnableTimer(IsVisible);
+        }
+
+    }
+ 
+}

+ 1 - 1
Venus/Venus_UI/Config/VenusMenu.json

@@ -115,7 +115,7 @@
   },
   {
     "Id": "PMC",
-    "IsShow": "false",
+    "IsShow": "true",
     "MenuItem": [
       {
         "Id": "Operation",