Browse Source

PM&Simulator update

Intern01 1 year ago
parent
commit
b7129c8da5

+ 23 - 23
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AIoDefine.xml

@@ -9,13 +9,13 @@
 		<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="5" Name="DI_Lift_Pin_Up_POS" Device="" Addr="w20.05" />
+		<DI_ITEM Index="6" Name="DI_Lift_Pin_Down_POS" 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="10" Name="DI_Slit_Door_Open_POS" Device="" Addr="w20.10" />
+		<DI_ITEM Index="11" Name="DI_Slit_Door_Close_POS" 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="" />
@@ -24,17 +24,17 @@
 		<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="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="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="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="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="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="" />
@@ -60,18 +60,18 @@
 		<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="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="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="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="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="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="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="" />
@@ -82,21 +82,21 @@
 		<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="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="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="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="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="" />
@@ -144,8 +144,8 @@
 		<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="26" Name="DO_Lift_Pin_Up" Device="PV5" Addr="w1.10" />
+    <DO_ITEM Index="27" Name="DO_Lift_Pin_Down" Device="PV5" Addr="w1.11" />
 		<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" />

+ 1 - 1
Venus/Venus_Simulator/App.xaml.cs

@@ -17,7 +17,7 @@ namespace Venus_Simulator
             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");
+            SimulatorJetChamber.CurrentPMDChamber = (JetChamber)SystemConfig.Instance.GetValue<int>($"PMA.ChamberType");
 
 
 

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

@@ -59,6 +59,17 @@
     <SubView Id="SMCChillerPMC" Name="SMCChillerPMC" ViewClass="Venus_Simulator.Views.SimuSMCChillerPMCView" Assembly="Venus_Simulator" />
     <SubView Id="SMCChillerGridPMC" Name="Grid Chiller" ViewClass="Venus_Simulator.Views.SimuSMCChillerGridPMCView" Assembly="Venus_Simulator"/>
   </Navigation>
+  
+  <Navigation Id="PMD" Name="PMD" >
+
+    <SubView Id="io4" Name="IO-PMD" ViewClass="Venus_Simulator.Views.SimulatorIo4View" Assembly="Venus_Simulator"/>
+    <SubView Id="SkyPumpPMD" Name="SkyPumpPMD" ViewClass="Venus_Simulator.Views.SimuSkyPumpPMDView" Assembly="Venus_Simulator" />
+    <SubView Id="EdwardsPumpPMD" Name="EdwardsPumpPMD" ViewClass="Venus_Simulator.Views.SimuEdwardsPumpPMDView" Assembly="Venus_Simulator"/>
+    <SubView Id="AdTecRFGPMD" Name="AdTecRFGPMD" ViewClass="Venus_Simulator.Views.SimuAdTecGeneratorPMDView" Assembly="Venus_Simulator"/>
+    <SubView Id="AdTecMatchPMD" Name="AdTecMatchPMD" ViewClass="Venus_Simulator.Views.SimuAdTecMatchPMDView" Assembly="Venus_Simulator" />
+    <SubView Id="SMCChillerPMD" Name="SMCChillerPMD" ViewClass="Venus_Simulator.Views.SimuSMCChillerPMDView" Assembly="Venus_Simulator" />
+    <SubView Id="SMCChillerGridPMD" Name="Grid Chiller" ViewClass="Venus_Simulator.Views.SimuSMCChillerGridPMDView" Assembly="Venus_Simulator"/>
+  </Navigation>
 
 
 	<Navigation Id="TM" Name="TM">

+ 6 - 6
Venus/Venus_Simulator/Config/_ioDefineKepler2200A.xml

@@ -9,13 +9,13 @@
 		<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="5" Name="DI_Lift_Pin_Up_POS" Device="" Addr="w20.05" />
+		<DI_ITEM Index="6" Name="DI_Lift_Pin_Down_POS" 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="10" Name="DI_Slit_Door_Open_POS" Device="" Addr="w20.10" />
+		<DI_ITEM Index="11" Name="DI_Slit_Door_Close_POS" 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="" />
@@ -144,8 +144,8 @@
 		<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="26" Name="DO_Lift_Pin_Up" Device="PV5" Addr="w1.10" />
+    <DO_ITEM Index="27" Name="DO_Lift_Pin_Down" Device="PV5" Addr="w1.11" />
 		<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" />

+ 73 - 34
Venus/Venus_Simulator/Instances/SimulatorSystem.cs

@@ -9,6 +9,7 @@ using System.Collections.Generic;
 using Venus_Simulator.Devices;
 using System.Threading;
 using Venus_Core;
+using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs;
 
 namespace Venus_Simulator.Instances
 {
@@ -55,6 +56,7 @@ namespace Venus_Simulator.Instances
                 SetDefaultValue(ModuleName.PMA, SimulatorJetChamber.CurrentPMAChamber);
                 SetDefaultValue(ModuleName.PMB, SimulatorJetChamber.CurrentPMBChamber);
                 SetDefaultValue(ModuleName.PMC, SimulatorJetChamber.CurrentPMCChamber);
+                SetDefaultValue(ModuleName.PMD, SimulatorJetChamber.CurrentPMDChamber);
             SetTMDefaultValue();
             
           
@@ -269,14 +271,15 @@ namespace Venus_Simulator.Instances
 
                     IO.DI[$"{mod}.DI_Water_Leak_Sensor"].Value = true;
 
-                    IO.DI[$"{mod}.DI_Lift_Pin_Up_Position"].Value = false;
-                    IO.DI[$"{mod}.DI_Lift_Pin_Down_Position"].Value = true;
+                    IO.DI[$"{mod}.DI_Lift_Pin_Up_POS"].Value = false;
+                    IO.DI[$"{mod}.DI_Lift_Pin_Down_POS"].Value = true;
                     IO.DI[$"{mod}.DI_Source_RF_Generator_Interlock"].Value = true;
                     IO.DI[$"{mod}.DI_Source_RF_Fan"].Value = true;
                     IO.DI[$"{mod}.DI_Turbo_Pump_Interlock"].Value = true;
 
-                    IO.DI[$"{mod}.DI_Slit_Door_Open_Position"].Value = false;
-                    IO.DI[$"{mod}.DI_Slit_Door_Close_Position"].Value = true;
+
+                    IO.DI[$"{mod}.DI_Slit_Door_Open_POS"].Value = false;
+                    IO.DI[$"{mod}.DI_Slit_Door_Close_POS"].Value = true;
                     IO.DI[$"{mod}.DI_CDA_Pressure_Switch"].Value = true;
 
                     IO.DI[$"{mod}.DI_S_Valve_TC_Deviation_out_of_range"].Value = false;
@@ -310,8 +313,15 @@ namespace Venus_Simulator.Instances
                     IO.DI[$"{mod}.DI_ESC_He_Pressure_100t_Guage_Alarm"].Value = false;
 
                     IO.DI[$"{mod}.DI_Gas_Box_Door_Switch"].Value = true;
+                    IO.DI[$"{mod}.DI_Lid_Up_Limit_Pos_SW"].Value = true;
+                    IO.DI[$"{mod}.DI_S_Valve_OT_Switch_Alarm"].Value = false;
+                    IO.DI[$"{mod}.DI_Lid_Down_Limit_Pos_SW"].Value = true;
                     IO.DI[$"{mod}.DI_Gas_Box_Pressure_Switch"].Value = true;
-
+                    IO.DI[$"{mod}.DI_TM_Safety_Door_Colse"].Value = true;
+                    IO.DI[$"{mod}.DI_ESC_Inner_Coolant_Flow_SW"].Value = true;
+                    IO.DI[$"{mod}.DI_ESC_Outer_Coolant_Flow_SW"].Value = true;
+                    IO.DI[$"{mod}.DI_Arm_Not_Extend_to_PM"].Value = true;
+                    IO.DI[$"{mod}.DI_Source_RF_Water_Flow_Switch"].Value = true;
                     //// pressure
                     SetAiValue($"{mod}.AI_Foreline_Pressure_10t", 5001);
                     SetAiValue($"{mod}.AI_Process_Pressure_100mt", 1000);
@@ -470,35 +480,64 @@ namespace Venus_Simulator.Instances
 
                         break;
                 }
-                //switch (SimulatorJetChamber.CurrentPMCChamber)
-                //{
-                //    case JetChamber.Venus:
-                //        // PMC
-                //        MonitorSlitDoor(ModuleName.PMC);
-                //        MonitorPin(ModuleName.PMC);
-                //        MonitorPressure(ModuleName.PMC);
-                //        //MonitorTemperature(ModuleName.PMB);
-                //        MonitorGas(ModuleName.PMC);
-                //        // MonitorRF(ModuleName.PMB);
-                //        ChangeTime(ModuleName.PMC);
-                //        //MonitorIOPumpCtrl(ModuleName.PMB);
-                //        break;
-
-                //    case JetChamber.Kepler2300:
-                //    case JetChamber.Kepler2200A:
-                //    case JetChamber.Kepler2200B:
-                //        // PMC
-                //        MonitorSlitDoor(ModuleName.PMC);
-                //        MonitorPin(ModuleName.PMC);
-                //        MonitorPressure_Kepler(ModuleName.PMC);
-                //        //MonitorTemperature(ModuleName.PMB);
-                //        MonitorGas(ModuleName.PMC);
-                //        // MonitorRF(ModuleName.PMB);
-                //        ChangeTime(ModuleName.PMC);
-                //        //MonitorIOPumpCtrl(ModuleName.PMB);
-                //        MonitorLid(ModuleName.PMC);
-                //        break;
-                //}
+                switch (SimulatorJetChamber.CurrentPMCChamber)
+                {
+                    case JetChamber.Venus:
+                        // PMC
+                        MonitorSlitDoor(ModuleName.PMC);
+                        MonitorPin(ModuleName.PMC);
+                        MonitorPressure(ModuleName.PMC);
+                        //MonitorTemperature(ModuleName.PMB);
+                        MonitorGas(ModuleName.PMC);
+                        // MonitorRF(ModuleName.PMB);
+                        ChangeTime(ModuleName.PMC);
+                        //MonitorIOPumpCtrl(ModuleName.PMB);
+                        break;
+
+                    case JetChamber.Kepler2300:
+                    case JetChamber.Kepler2200A:
+                    case JetChamber.Kepler2200B:
+                        // PMC
+                        MonitorSlitDoor(ModuleName.PMC);
+                        MonitorPin(ModuleName.PMC);
+                        MonitorPressure_Kepler(ModuleName.PMC);
+                        //MonitorTemperature(ModuleName.PMB);
+                        MonitorGas(ModuleName.PMC);
+                        // MonitorRF(ModuleName.PMB);
+                        ChangeTime(ModuleName.PMC);
+                        //MonitorIOPumpCtrl(ModuleName.PMB);
+                        MonitorLid(ModuleName.PMC);
+                        break;
+                }
+                switch (SimulatorJetChamber.CurrentPMDChamber)
+                {
+                    case JetChamber.Venus:
+                        // PMC
+                        MonitorSlitDoor(ModuleName.PMD);
+                        MonitorPin(ModuleName.PMD);
+                        MonitorPressure(ModuleName.PMD);
+                        //MonitorTemperature(ModuleName.PMB);
+                        MonitorGas(ModuleName.PMD);
+                        // MonitorRF(ModuleName.PMB);
+                        ChangeTime(ModuleName.PMD);
+                        //MonitorIOPumpCtrl(ModuleName.PMB);
+                        break;
+
+                    case JetChamber.Kepler2300:
+                    case JetChamber.Kepler2200A:
+                    case JetChamber.Kepler2200B:
+                        // PMC
+                        MonitorSlitDoor(ModuleName.PMD);
+                        MonitorPin(ModuleName.PMD);
+                        MonitorPressure_Kepler(ModuleName.PMD);
+                        //MonitorTemperature(ModuleName.PMB);
+                        MonitorGas(ModuleName.PMD);
+                        // MonitorRF(ModuleName.PMB);
+                        ChangeTime(ModuleName.PMD);
+                        //MonitorIOPumpCtrl(ModuleName.PMB);
+                        MonitorLid(ModuleName.PMD);
+                        break;
+                }
 
                 ChangeTime(ModuleName.TM);
 

+ 49 - 0
Venus/Venus_Simulator/Venus_Simulator.csproj

@@ -102,6 +102,9 @@
     <Compile Include="Views\SimuAdTecGeneratorPMBView.xaml.cs">
       <DependentUpon>SimuAdTecGeneratorPMBView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\SimuAdTecGeneratorPMDView.xaml.cs">
+      <DependentUpon>SimuAdTecGeneratorPMDView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\SimuAdTecGeneratorPMCView.xaml.cs">
       <DependentUpon>SimuAdTecGeneratorPMCView.xaml</DependentUpon>
     </Compile>
@@ -111,6 +114,9 @@
     <Compile Include="Views\SimuAdTecMatchPMAView.xaml.cs">
       <DependentUpon>SimuAdTecMatchPMAView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\SimuAdTecMatchPMDView.xaml.cs">
+      <DependentUpon>SimuAdTecMatchPMDView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\SimuAdTecMatchPMCView.xaml.cs">
       <DependentUpon>SimuAdTecMatchPMCView.xaml</DependentUpon>
     </Compile>
@@ -129,6 +135,9 @@
     <Compile Include="Views\SimuEdwardsPumpLLView.xaml.cs">
       <DependentUpon>SimuEdwardsPumpLLView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\SimuEdwardsPumpPMDView.xaml.cs">
+      <DependentUpon>SimuEdwardsPumpPMDView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\SimuEdwardsPumpPMCView.xaml.cs">
       <DependentUpon>SimuEdwardsPumpPMCView.xaml</DependentUpon>
     </Compile>
@@ -147,6 +156,9 @@
     <Compile Include="Views\SimulatorIo1View.xaml.cs">
       <DependentUpon>SimulatorIo1View.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\SimulatorIo4View.xaml.cs">
+      <DependentUpon>SimulatorIo4View.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\SimulatorIo3View.xaml.cs">
       <DependentUpon>SimulatorIo3View.xaml</DependentUpon>
     </Compile>
@@ -162,6 +174,9 @@
     <Compile Include="Views\SimuSkyPumpLLView.xaml.cs">
       <DependentUpon>SimuSkyPumpLLView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\SimuSkyPumpPMDView.xaml.cs">
+      <DependentUpon>SimuSkyPumpPMDView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\SimuSkyPumpPMCView.xaml.cs">
       <DependentUpon>SimuSkyPumpPMCView.xaml</DependentUpon>
     </Compile>
@@ -180,6 +195,9 @@
     <Compile Include="Views\SimuSMCChillerGridPMAView.xaml.cs">
       <DependentUpon>SimuSMCChillerGridPMAView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\SimuSMCChillerGridPMDView.xaml.cs">
+      <DependentUpon>SimuSMCChillerGridPMDView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\SimuSMCChillerGridPMCView.xaml.cs">
       <DependentUpon>SimuSMCChillerGridPMCView.xaml</DependentUpon>
     </Compile>
@@ -189,6 +207,9 @@
     <Compile Include="Views\SimuSMCChillerPMAView.xaml.cs">
       <DependentUpon>SimuSMCChillerPMAView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\SimuSMCChillerPMDView.xaml.cs">
+      <DependentUpon>SimuSMCChillerPMDView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\SimuSMCChillerPMCView.xaml.cs">
       <DependentUpon>SimuSMCChillerPMCView.xaml</DependentUpon>
     </Compile>
@@ -290,6 +311,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\SimuAdTecGeneratorPMDView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\SimuAdTecGeneratorPMCView.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -302,6 +327,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\SimuAdTecMatchPMDView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\SimuAdTecMatchPMCView.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -326,6 +355,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\SimuEdwardsPumpPMDView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\SimuEdwardsPumpPMCView.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -350,6 +383,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\SimulatorIo4View.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\SimulatorIo3View.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -370,6 +407,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\SimuSkyPumpPMDView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\SimuSkyPumpPMCView.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -394,6 +435,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\SimuSMCChillerGridPMDView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\SimuSMCChillerGridPMCView.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
@@ -406,6 +451,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\SimuSMCChillerPMDView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\SimuSMCChillerPMCView.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>

+ 1 - 1
Venus/Venus_Simulator/Views/SimuAdTecGeneratorPMCView.xaml.cs

@@ -20,7 +20,7 @@ namespace Venus_Simulator.Views
     {
         public string Title
         {
-            get { return "AdTec RFG PMB simulator"; }
+            get { return "AdTec RFG PMC simulator"; }
         }
 
         public MockAdTecGeneratorViewModelPMC() : base("AdTecPMCRFG")

+ 53 - 0
Venus/Venus_Simulator/Views/SimuAdTecGeneratorPMDView.xaml

@@ -0,0 +1,53 @@
+<UserControl x:Class="Venus_Simulator.Views.SimuAdTecGeneratorPMDView"
+             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:local="clr-namespace:Venus_Simulator.Views"
+             xmlns:commons="clr-namespace:MECF.Framework.Simulator.Core.Commons;assembly=MECF.Framework.Simulator.Core"
+             mc:Ignorable="d" 
+             d:DesignHeight="900" d:DesignWidth="1200">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="100"></RowDefinition>
+            <RowDefinition Height="0"></RowDefinition>
+            <RowDefinition Height="50"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+        </Grid.RowDefinitions>
+        <commons:SerialPortTitleView Grid.Row="0"></commons:SerialPortTitleView>
+        <Grid  Grid.Row="1" Height="350" Width="1200">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="300"></RowDefinition>
+                <RowDefinition Height="50"></RowDefinition>
+            </Grid.RowDefinitions>
+        </Grid>
+        <StackPanel Grid.Row="2" Orientation="Horizontal" Width="1200">
+            <Button Content="Clear Log" Width="100" Height="35"   Command="{Binding ClearLogCommand}"></Button>
+        </StackPanel>
+        <DataGrid Grid.Row="3" FontSize="16" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding TransactionLogItems}"
+                      ScrollViewer.CanContentScroll="True"
+                      ScrollViewer.VerticalScrollBarVisibility="Auto"
+                      ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                      Width="1200" Height="Auto" VerticalAlignment="Top">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="Time" Width="200" IsReadOnly="True" Binding="{Binding OccurTime, UpdateSourceTrigger=PropertyChanged}" />
+                <DataGridTextColumn Header="Incoming" Width="500" IsReadOnly="True"  Binding="{Binding Incoming, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+                <DataGridTextColumn Header="Outgoing" Width="500" IsReadOnly="True"  Binding="{Binding Outgoing, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+            </DataGrid.Columns>
+        </DataGrid>
+    </Grid>
+</UserControl>

+ 31 - 0
Venus/Venus_Simulator/Views/SimuAdTecGeneratorPMDView.xaml.cs

@@ -0,0 +1,31 @@
+using System.Windows.Controls;
+using MECF.Framework.Simulator.Core.Commons;
+using Venus_Simulator.Devices;
+
+namespace Venus_Simulator.Views
+{
+    /// <summary>
+    /// Interaction logic for SimuAdTecGeneratorView.xaml
+    /// </summary>
+    public partial class SimuAdTecGeneratorPMDView : UserControl
+    {
+        public SimuAdTecGeneratorPMDView()
+        {
+            InitializeComponent();
+            this.DataContext = new MockAdTecGeneratorViewModelPMD();
+        }
+    }
+
+    class MockAdTecGeneratorViewModelPMD : SerialPortDeviceViewModel
+    {
+        public string Title
+        {
+            get { return "AdTec RFG PMD simulator"; }
+        }
+
+        public MockAdTecGeneratorViewModelPMD() : base("AdTecPMDRFG")
+        {
+            Init(new AdTecGeneratorMockPMC());
+        }
+    }
+}

+ 53 - 0
Venus/Venus_Simulator/Views/SimuAdTecMatchPMDView.xaml

@@ -0,0 +1,53 @@
+<UserControl x:Class="Venus_Simulator.Views.SimuAdTecMatchPMDView"
+             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:local="clr-namespace:Venus_Simulator.Views"
+             xmlns:commons="clr-namespace:MECF.Framework.Simulator.Core.Commons;assembly=MECF.Framework.Simulator.Core"
+             mc:Ignorable="d" 
+             d:DesignHeight="900" d:DesignWidth="1200">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="100"></RowDefinition>
+            <RowDefinition Height="0"></RowDefinition>
+            <RowDefinition Height="50"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+        </Grid.RowDefinitions>
+        <commons:SerialPortTitleView Grid.Row="0"></commons:SerialPortTitleView>
+        <Grid  Grid.Row="1" Height="350" Width="800">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="300"></RowDefinition>
+                <RowDefinition Height="50"></RowDefinition>
+            </Grid.RowDefinitions>
+        </Grid>
+        <StackPanel Grid.Row="2" Orientation="Horizontal" Width="1200">
+            <Button Content="Clear Log" Width="100" Height="35"   Command="{Binding ClearLogCommand}"></Button>
+        </StackPanel>
+        <DataGrid Grid.Row="3" FontSize="16" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding TransactionLogItems}"
+                      ScrollViewer.CanContentScroll="True"
+                      ScrollViewer.VerticalScrollBarVisibility="Auto"
+                      ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                      Width="1200" Height="Auto" VerticalAlignment="Top">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="Time" Width="200" IsReadOnly="True" Binding="{Binding OccurTime, UpdateSourceTrigger=PropertyChanged}" />
+                <DataGridTextColumn Header="Incoming" Width="500" IsReadOnly="True"  Binding="{Binding Incoming, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+                <DataGridTextColumn Header="Outgoing" Width="500" IsReadOnly="True"  Binding="{Binding Outgoing, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+            </DataGrid.Columns>
+        </DataGrid>
+    </Grid>
+</UserControl>

+ 31 - 0
Venus/Venus_Simulator/Views/SimuAdTecMatchPMDView.xaml.cs

@@ -0,0 +1,31 @@
+using System.Windows.Controls;
+using MECF.Framework.Simulator.Core.Commons;
+using Venus_Simulator.Devices;
+
+namespace Venus_Simulator.Views
+{
+    /// <summary>
+    /// Interaction logic for SimuAdTecMatchView.xaml
+    /// </summary>
+    public partial class SimuAdTecMatchPMDView : UserControl
+    {
+        public SimuAdTecMatchPMDView()
+        {
+            InitializeComponent();
+            this.DataContext = new MockAdTecMatchViewModelPMD();
+        }
+    }
+
+    class MockAdTecMatchViewModelPMD : SerialPortDeviceViewModel
+    {
+        public string Title
+        {
+            get { return "AdTEC match PMD simulator"; }
+        }
+
+        public MockAdTecMatchViewModelPMD() : base("AdTecMatchPMDSimulator")
+        {
+            Init(new AdTecMatchMockPMC());
+        }
+    }
+}

+ 53 - 0
Venus/Venus_Simulator/Views/SimuEdwardsPumpPMDView.xaml

@@ -0,0 +1,53 @@
+<UserControl x:Class="Venus_Simulator.Views.SimuEdwardsPumpPMDView"
+             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:local="clr-namespace:Venus_Simulator.Views"
+             xmlns:commons="clr-namespace:MECF.Framework.Simulator.Core.Commons;assembly=MECF.Framework.Simulator.Core"
+             mc:Ignorable="d" 
+             d:DesignHeight="900" d:DesignWidth="1200">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="100"></RowDefinition>
+            <RowDefinition Height="0"></RowDefinition>
+            <RowDefinition Height="50"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+        </Grid.RowDefinitions>
+        <commons:SerialPortTitleView Grid.Row="0"></commons:SerialPortTitleView>
+        <Grid  Grid.Row="1" Height="350" Width="900">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="300"></RowDefinition>
+                <RowDefinition Height="50"></RowDefinition>
+            </Grid.RowDefinitions>
+        </Grid>
+        <StackPanel Grid.Row="2" Orientation="Horizontal" Width="1200">
+            <Button Content="Clear Log" Width="100" Height="35"   Command="{Binding ClearLogCommand}"></Button>
+        </StackPanel>
+        <DataGrid Grid.Row="3" FontSize="16" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding TransactionLogItems}"
+                      ScrollViewer.CanContentScroll="True"
+                      ScrollViewer.VerticalScrollBarVisibility="Auto"
+                      ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                      Width="1200" Height="Auto" VerticalAlignment="Top">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="Time" Width="200" IsReadOnly="True" Binding="{Binding OccurTime, UpdateSourceTrigger=PropertyChanged}" />
+                <DataGridTextColumn Header="Incoming" Width="500" IsReadOnly="True"  Binding="{Binding Incoming, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+                <DataGridTextColumn Header="Outgoing" Width="500" IsReadOnly="True"  Binding="{Binding Outgoing, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+            </DataGrid.Columns>
+        </DataGrid>
+    </Grid>
+</UserControl>

+ 31 - 0
Venus/Venus_Simulator/Views/SimuEdwardsPumpPMDView.xaml.cs

@@ -0,0 +1,31 @@
+using System.Windows.Controls;
+using MECF.Framework.Simulator.Core.Commons;
+using Venus_Simulator.Devices;
+
+namespace Venus_Simulator.Views
+{
+    /// <summary>
+    /// SimuEdwardsPumpView.xaml 的交互逻辑
+    /// </summary>
+    public partial class SimuEdwardsPumpPMDView : UserControl
+    {
+        public SimuEdwardsPumpPMDView()
+        {
+            InitializeComponent();
+            this.DataContext = new MockEdwardsPumpViewModelPMD();
+        }
+    }
+
+    class MockEdwardsPumpViewModelPMD : SerialPortDeviceViewModel
+    {
+        public string Title
+        {
+            get { return "Edwards pump PMD simulator"; }
+        }
+
+        public MockEdwardsPumpViewModelPMD() : base("EdwardsPumpPMDSimulator")
+        {
+            Init(new EdwardsPumpMockPMC());
+        }
+    }
+}

+ 53 - 0
Venus/Venus_Simulator/Views/SimuSMCChillerGridPMDView.xaml

@@ -0,0 +1,53 @@
+<UserControl x:Class="Venus_Simulator.Views.SimuSMCChillerGridPMDView"
+             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:local="clr-namespace:Venus_Simulator.Views"
+             xmlns:commons="clr-namespace:MECF.Framework.Simulator.Core.Commons;assembly=MECF.Framework.Simulator.Core"
+             mc:Ignorable="d" 
+             d:DesignHeight="900" d:DesignWidth="1200">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="100"></RowDefinition>
+            <RowDefinition Height="0"></RowDefinition>
+            <RowDefinition Height="50"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+        </Grid.RowDefinitions>
+        <commons:SerialPortTitleView Grid.Row="0"></commons:SerialPortTitleView>
+        <Grid  Grid.Row="1" Height="350" Width="900">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="300"></RowDefinition>
+                <RowDefinition Height="50"></RowDefinition>
+            </Grid.RowDefinitions>
+        </Grid>
+        <StackPanel Grid.Row="2" Orientation="Horizontal" Width="1200">
+            <Button Content="Clear Log" Width="100" Height="35"   Command="{Binding ClearLogCommand}"></Button>
+        </StackPanel>
+        <DataGrid Grid.Row="3" FontSize="16" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding TransactionLogItems}"
+                      ScrollViewer.CanContentScroll="True"
+                      ScrollViewer.VerticalScrollBarVisibility="Auto"
+                      ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                      Width="1200" Height="Auto" VerticalAlignment="Top">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="Time" Width="200" IsReadOnly="True" Binding="{Binding OccurTime, UpdateSourceTrigger=PropertyChanged}" />
+                <DataGridTextColumn Header="Incoming" Width="500" IsReadOnly="True"  Binding="{Binding Incoming, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+                <DataGridTextColumn Header="Outgoing" Width="500" IsReadOnly="True"  Binding="{Binding Outgoing, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+            </DataGrid.Columns>
+        </DataGrid>
+    </Grid>
+</UserControl>

+ 31 - 0
Venus/Venus_Simulator/Views/SimuSMCChillerGridPMDView.xaml.cs

@@ -0,0 +1,31 @@
+using System.Windows.Controls;
+using MECF.Framework.Simulator.Core.Commons;
+using Venus_Simulator.Devices;
+
+namespace Venus_Simulator.Views
+{
+    /// <summary>
+    /// SimuSMCChillerPMDView.xaml 的交互逻辑
+    /// </summary>
+    public partial class SimuSMCChillerGridPMDView : UserControl
+    {
+        public SimuSMCChillerGridPMDView()
+        {
+            InitializeComponent();
+            this.DataContext = new MockSMCChillerGridViewModelPMD();
+        }
+    }
+
+    class MockSMCChillerGridViewModelPMD : SerialPortDeviceViewModel
+    {
+        public string Title
+        {
+            get { return "SMD Chiller PMC simulator"; }
+        }
+
+        public MockSMCChillerGridViewModelPMD() : base("SkyPumpPMDSimulator")
+        {
+            Init(new SMCChillerMock("COM57"));
+        }
+    }
+}

+ 53 - 0
Venus/Venus_Simulator/Views/SimuSMCChillerPMDView.xaml

@@ -0,0 +1,53 @@
+<UserControl x:Class="Venus_Simulator.Views.SimuSMCChillerPMDView"
+             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:local="clr-namespace:Venus_Simulator.Views"
+             xmlns:commons="clr-namespace:MECF.Framework.Simulator.Core.Commons;assembly=MECF.Framework.Simulator.Core"
+             mc:Ignorable="d" 
+             d:DesignHeight="900" d:DesignWidth="1200">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="100"></RowDefinition>
+            <RowDefinition Height="0"></RowDefinition>
+            <RowDefinition Height="50"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+        </Grid.RowDefinitions>
+        <commons:SerialPortTitleView Grid.Row="0"></commons:SerialPortTitleView>
+        <Grid  Grid.Row="1" Height="350" Width="900">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="300"></RowDefinition>
+                <RowDefinition Height="50"></RowDefinition>
+            </Grid.RowDefinitions>
+        </Grid>
+        <StackPanel Grid.Row="2" Orientation="Horizontal" Width="1200">
+            <Button Content="Clear Log" Width="100" Height="35"   Command="{Binding ClearLogCommand}"></Button>
+        </StackPanel>
+        <DataGrid Grid.Row="3" FontSize="16" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding TransactionLogItems}"
+                      ScrollViewer.CanContentScroll="True"
+                      ScrollViewer.VerticalScrollBarVisibility="Auto"
+                      ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                      Width="1200" Height="Auto" VerticalAlignment="Top">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="Time" Width="200" IsReadOnly="True" Binding="{Binding OccurTime, UpdateSourceTrigger=PropertyChanged}" />
+                <DataGridTextColumn Header="Incoming" Width="500" IsReadOnly="True"  Binding="{Binding Incoming, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+                <DataGridTextColumn Header="Outgoing" Width="500" IsReadOnly="True"  Binding="{Binding Outgoing, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+            </DataGrid.Columns>
+        </DataGrid>
+    </Grid>
+</UserControl>

+ 31 - 0
Venus/Venus_Simulator/Views/SimuSMCChillerPMDView.xaml.cs

@@ -0,0 +1,31 @@
+using System.Windows.Controls;
+using MECF.Framework.Simulator.Core.Commons;
+using Venus_Simulator.Devices;
+
+namespace Venus_Simulator.Views
+{
+    /// <summary>
+    /// SimuSMCChillerPMDView.xaml 的交互逻辑
+    /// </summary>
+    public partial class SimuSMCChillerPMDView : UserControl
+    {
+        public SimuSMCChillerPMDView()
+        {
+            InitializeComponent();
+            this.DataContext = new MockSMCChillerViewModelPMD();
+        }
+    }
+
+    class MockSMCChillerViewModelPMD : SerialPortDeviceViewModel
+    {
+        public string Title
+        {
+            get { return "SMC Chiller PMD simulator"; }
+        }
+
+        public MockSMCChillerViewModelPMD() : base("SMCChillerPMDSimulator")
+        {
+            Init(new SMCChillerMock("COM97"));
+        }
+    }
+}

+ 53 - 0
Venus/Venus_Simulator/Views/SimuSkyPumpPMDView.xaml

@@ -0,0 +1,53 @@
+<UserControl x:Class="Venus_Simulator.Views.SimuSkyPumpPMDView"
+             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:local="clr-namespace:Venus_Simulator.Views"
+             xmlns:commons="clr-namespace:MECF.Framework.Simulator.Core.Commons;assembly=MECF.Framework.Simulator.Core"
+             mc:Ignorable="d" 
+             d:DesignHeight="900" d:DesignWidth="1200">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="100"></RowDefinition>
+            <RowDefinition Height="0"></RowDefinition>
+            <RowDefinition Height="50"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+        </Grid.RowDefinitions>
+        <commons:SerialPortTitleView Grid.Row="0"></commons:SerialPortTitleView>
+        <Grid  Grid.Row="1" Height="350" Width="900">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="300"></RowDefinition>
+                <RowDefinition Height="50"></RowDefinition>
+            </Grid.RowDefinitions>
+        </Grid>
+        <StackPanel Grid.Row="2" Orientation="Horizontal" Width="1200">
+            <Button Content="Clear Log" Width="100" Height="35"   Command="{Binding ClearLogCommand}"></Button>
+        </StackPanel>
+        <DataGrid Grid.Row="3" FontSize="16" AutoGenerateColumns="False" CanUserAddRows="False" CanUserResizeRows="False" CanUserSortColumns="False" ItemsSource="{Binding TransactionLogItems}"
+                      ScrollViewer.CanContentScroll="True"
+                      ScrollViewer.VerticalScrollBarVisibility="Auto"
+                      ScrollViewer.HorizontalScrollBarVisibility="Auto"
+                      Width="1200" Height="Auto" VerticalAlignment="Top">
+            <DataGrid.Columns>
+                <DataGridTextColumn Header="Time" Width="200" IsReadOnly="True" Binding="{Binding OccurTime, UpdateSourceTrigger=PropertyChanged}" />
+                <DataGridTextColumn Header="Incoming" Width="500" IsReadOnly="True"  Binding="{Binding Incoming, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+                <DataGridTextColumn Header="Outgoing" Width="500" IsReadOnly="True"  Binding="{Binding Outgoing, UpdateSourceTrigger=PropertyChanged}">
+                    <DataGridTextColumn.ElementStyle>
+                        <Style TargetType="TextBlock">
+                            <Setter Property="TextWrapping" Value="Wrap" />
+                            <Setter Property="Height" Value="auto" />
+                        </Style>
+                    </DataGridTextColumn.ElementStyle>
+                </DataGridTextColumn>
+            </DataGrid.Columns>
+        </DataGrid>
+    </Grid>
+</UserControl>

+ 31 - 0
Venus/Venus_Simulator/Views/SimuSkyPumpPMDView.xaml.cs

@@ -0,0 +1,31 @@
+using System.Windows.Controls;
+using MECF.Framework.Simulator.Core.Commons;
+using Venus_Simulator.Devices;
+
+namespace Venus_Simulator.Views
+{
+    /// <summary>
+    /// Interaction logic for SimuAdTecMatchView.xaml
+    /// </summary>
+    public partial class SimuSkyPumpPMDView : UserControl
+    {
+        public SimuSkyPumpPMDView()
+        {
+            InitializeComponent();
+            this.DataContext = new MockSkyPumpViewModelPMD();
+        }
+    }
+
+    class MockSkyPumpViewModelPMD : SerialPortDeviceViewModel
+    {
+        public string Title
+        {
+            get { return "Sky pump PMD simulator"; }
+        }
+
+        public MockSkyPumpViewModelPMD() : base("SkyPumpPMDSimulator")
+        {
+            Init(new SkyPumpMockPMC());
+        }
+    }
+}

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

@@ -0,0 +1,241 @@
+<UserControl x:Class="Venus_Simulator.Views.SimulatorIo4View"
+             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/SimulatorIo4View.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 SimulatorIo4View : UserControl
+    {
+        public SimulatorIo4View()
+        {
+            InitializeComponent();
+            DataContext = new IoViewModel(6732, "PMD.PLC", PathManager.GetCfgDir() + $"_ioDefine{SimulatorJetChamber.CurrentPMDChamber}.xml", "PMD");
+
+            this.IsVisibleChanged += IOView_IsVisibleChanged;
+        }
+
+        private void IOView_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
+        {
+            if (this.DataContext == null)
+            {
+            }
+            (DataContext as TimerViewModelBase).EnableTimer(IsVisible);
+        }
+
+    }
+ 
+}