Browse Source

1.修复mfc verification单点ui不显示bug
2.添加TM Slitdoor interlock

lixiang 1 year ago
parent
commit
5c5936c32c

+ 65 - 0
Venus/Venus_MainPages/ViewModels/MFCVerificationViewModel.cs

@@ -152,6 +152,10 @@ namespace Venus_MainPages.ViewModels
         public DelegateCommand AbortCommand =>
             _AbortCommand ?? (_AbortCommand = new DelegateCommand(OnAbort));
 
+        private DelegateCommand _FlashCommand;
+        public DelegateCommand FlashCommand =>
+            _FlashCommand ?? (_FlashCommand = new DelegateCommand(OnFlash));
+
 
         private DelegateCommand _SelectGasCommand;
         public DelegateCommand SelectGasCommand =>
@@ -200,6 +204,10 @@ namespace Venus_MainPages.ViewModels
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort");
         }
+        public void OnFlash()
+        {
+            InitTable();
+        }
         private void OnSelectGas()
         {
             MFCVerificationPoints.Clear();
@@ -543,6 +551,63 @@ namespace Venus_MainPages.ViewModels
                 MFCCalibrationTenPointsDataRecords[9].Gas8SetPoint = data8.Percent100Setpoint;
                 MFCCalibrationTenPointsDataRecords[9].Gas8Calculate = data8.Percent100Calculate;
             }
+
+
+            var onePointdata1 = VerificationDataOnePointRecords.Where(x => x.Name == $"MfcGas1").FirstOrDefault();
+            if (onePointdata1 != null)
+            {
+                MFCCalibrationOnePointDataRecords[0].Gas1SetPoint = onePointdata1.Setpoint;
+                MFCCalibrationOnePointDataRecords[0].Gas1Calculate = onePointdata1.Calculate;
+            }
+
+            var onePointdata2 = VerificationDataOnePointRecords.Where(x => x.Name == $"MfcGas2").FirstOrDefault();
+            if (onePointdata2 != null)
+            {
+                MFCCalibrationOnePointDataRecords[0].Gas2SetPoint = onePointdata2.Setpoint;
+                MFCCalibrationOnePointDataRecords[0].Gas2Calculate = onePointdata2.Calculate;
+            }
+
+            var onePointdata3 = VerificationDataOnePointRecords.Where(x => x.Name == $"MfcGas3").FirstOrDefault();
+            if (onePointdata3 != null)
+            {
+                MFCCalibrationOnePointDataRecords[0].Gas3SetPoint = onePointdata3.Setpoint;
+                MFCCalibrationOnePointDataRecords[0].Gas3Calculate = onePointdata3.Calculate;
+            }
+
+            var onePointdata4 = VerificationDataOnePointRecords.Where(x => x.Name == $"MfcGas4").FirstOrDefault();
+            if (onePointdata4 != null)
+            {
+                MFCCalibrationOnePointDataRecords[0].Gas4SetPoint = onePointdata4.Setpoint;
+                MFCCalibrationOnePointDataRecords[0].Gas4Calculate = onePointdata4.Calculate;
+            }
+
+            var onePointdata5 = VerificationDataOnePointRecords.Where(x => x.Name == $"MfcGas5").FirstOrDefault();
+            if (onePointdata5 != null)
+            {
+                MFCCalibrationOnePointDataRecords[0].Gas5SetPoint = onePointdata5.Setpoint;
+                MFCCalibrationOnePointDataRecords[0].Gas5Calculate = onePointdata5.Calculate;
+            }
+
+            var onePointdata6 = VerificationDataOnePointRecords.Where(x => x.Name == $"MfcGas6").FirstOrDefault();
+            if (onePointdata6 != null)
+            {
+                MFCCalibrationOnePointDataRecords[0].Gas6SetPoint = onePointdata6.Setpoint;
+                MFCCalibrationOnePointDataRecords[0].Gas6Calculate = onePointdata6.Calculate;
+            }
+
+            var onePointdata7 = VerificationDataOnePointRecords.Where(x => x.Name == $"MfcGas7").FirstOrDefault();
+            if (onePointdata7 != null)
+            {
+                MFCCalibrationOnePointDataRecords[0].Gas7SetPoint = onePointdata7.Setpoint;
+                MFCCalibrationOnePointDataRecords[0].Gas7Calculate = onePointdata7.Calculate;
+            }
+
+            var onePointdata8 = VerificationDataOnePointRecords.Where(x => x.Name == $"MfcGas8").FirstOrDefault();
+            if (onePointdata8 != null)
+            {
+                MFCCalibrationOnePointDataRecords[0].Gas8SetPoint = onePointdata8.Setpoint;
+                MFCCalibrationOnePointDataRecords[0].Gas8Calculate = onePointdata8.Calculate;
+            }
         }
         #endregion
     }

+ 6 - 3
Venus/Venus_MainPages/Views/MFCVerificationView.xaml

@@ -87,6 +87,9 @@
 
                 <customControls:PathButton Content="Abort" Width="160"  FontSize="14" Margin="30,0,10,0" Command="{Binding AbortCommand}"/>
 
+                <customControls:PathButton Content="Flash" Width="160"  FontSize="14" Margin="30,0,10,0" Command="{Binding FlashCommand}"/>
+
+
             </StackPanel>
         </Grid>
 
@@ -1269,7 +1272,7 @@
 
         <ScrollViewer Canvas.Top="520" Canvas.Right="0" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Height="300">
             <DataGrid AutoGenerateColumns="False"  CanUserAddRows="False"
-                  ItemsSource="{Binding VerificationDataTenPointsRecords}" 
+                  ItemsSource="{Binding VerificationDataOnePointRecords}" 
                   FontFamily="Arial" FontSize="14">
 
 
@@ -1291,7 +1294,7 @@
                         </DataGridTextColumn.HeaderTemplate>
                     </DataGridTextColumn>
 
-                    <DataGridTextColumn  Binding="{Binding Percent10Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                    <DataGridTextColumn  Binding="{Binding Setpoint,Mode=OneWay}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                         <DataGridTextColumn.HeaderTemplate >
                             <DataTemplate>
                                 <TextBlock Text="Setpoint" />
@@ -1299,7 +1302,7 @@
                         </DataGridTextColumn.HeaderTemplate>
                     </DataGridTextColumn>
 
-                    <DataGridTextColumn  Binding="{Binding Percent10Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
+                    <DataGridTextColumn  Binding="{Binding Calculate,Mode=OneWay, StringFormat={}{0:F1}}" CanUserSort="True" CanUserReorder="False" IsReadOnly="True"  CanUserResize="False">
                         <DataGridTextColumn.HeaderTemplate >
                             <DataTemplate>
                                 <TextBlock Text="Calculate" />

+ 5 - 11
Venus/Venus_MainPages/Views/OverKepler2300View.xaml

@@ -554,29 +554,23 @@
 
                 <customControls:CommonValveControl   ValveOrientation="Horizontal" Status="{Binding GuageValveIsOpen,Mode=TwoWay}" Height="20" Width="20" Canvas.Left="1280" Canvas.Top="265" IsCanEdit="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}" Tag="27" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}"/>
 
-                <Border    BorderBrush="Gray"  BorderThickness="0"  Width="18" Height="6" Canvas.Left="1315" Canvas.Top="164" >
+                <Border  Background="White"  BorderBrush="Gray"  BorderThickness="0"  Width="18" Height="6" Canvas.Left="1315" Canvas.Top="164" >
                     <Border.RenderTransform>
                         <RotateTransform Angle="90"/>
                     </Border.RenderTransform>
-                    <Border.Background>
+                    <!--<Border.Background>
                         <LinearGradientBrush StartPoint="0.5 0" EndPoint="0.5 1">
                             <GradientStop Color="Gray" Offset="0"/>
                             <GradientStop Color="White"  Offset="0.5"/>
                             <GradientStop Color="Gray" Offset="1"/>
                         </LinearGradientBrush>
-                    </Border.Background>
+                    </Border.Background>-->
                 </Border>
-                <Border    BorderBrush="Gray"  BorderThickness="0"  Width="20" Height="6" Canvas.Left="1285" Canvas.Top="188" >
+                <Border  Background="White"  BorderBrush="Gray"  BorderThickness="0"  Width="20" Height="6" Canvas.Left="1285" Canvas.Top="188" >
                     <Border.RenderTransform>
                         <RotateTransform Angle="90"/>
                     </Border.RenderTransform>
-                    <Border.Background>
-                        <LinearGradientBrush StartPoint="0.5 0" EndPoint="0.5 1">
-                            <GradientStop Color="Gray" Offset="0"/>
-                            <GradientStop Color="White"  Offset="0.5"/>
-                            <GradientStop Color="Gray" Offset="1"/>
-                        </LinearGradientBrush>
-                    </Border.Background>
+                   
                 </Border>
                 <Ellipse Width="20" Height="20"  Canvas.Left="1302" Canvas.Top="150" Fill="{Binding IsATM,Converter={StaticResource boolToColor}}"  Stroke="Silver" StrokeThickness="2"></Ellipse>
                 <Ellipse Width="20" Height="20"  Canvas.Left="1272" Canvas.Top="200" Fill="{Binding IsVAC,Converter={StaticResource boolToColor}}"  Stroke="Silver" StrokeThickness="2"></Ellipse>

+ 2 - 2
Venus/Venus_MainPages/Views/TopView.xaml

@@ -67,8 +67,8 @@
   
             
             <StackPanel Orientation="Horizontal" Grid.Column="0"  Grid.Row="2" Grid.ColumnSpan="5">
-                <Label Content="Log" Style="{StaticResource TopLable_LeftTop}"  Width="100"  BorderThickness="1"   HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Height="32.5" FontWeight="Bold" FontSize="18" BorderBrush="Silver" />
-                <ComboBox  Width="1130" Canvas.Left="620" Canvas.Top="74.2" Height="32" 
+                <Label Content="Log" Style="{StaticResource TopLable_LeftTop}"  Width="92"  BorderThickness="1"   HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Height="32.5" FontWeight="Bold" FontSize="18" BorderBrush="Silver" />
+                <ComboBox  Width="1138" Canvas.Left="620" Canvas.Top="74.2" Height="32" 
                                        ItemsSource="{Binding EventLogList}"   
                                        SelectedIndex="{Binding EventLogListSelectedIndex}"
                                        VerticalContentAlignment="Center" FontSize="15" 

BIN
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200ADeviceModel.xml


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

@@ -173,19 +173,6 @@
 		<Limit do="DO_N2_Valve"			value="false" tip="N2 Valve"			tip.zh-CN="" tip.en-US="DO-10" />
 	</Action>
 
-	<Action do="DO_Slit_Door_Open" value="true" tip="Slit Door Open" tip.zh-CN="" tip.en-US="DO-24" >
-		<Limit di="DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0"/>
-		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
-		<Limit di="DI_Arm_Not_Extend_to_PM"	value="true" tip="Arm Not Extend to PM"	tip.zh-CN="" tip.en-US="DI-76" />
-
-	</Action>
-
-
-	<Action do="DO_Slit_Door_Close" value="true" tip="Slit Door Close" tip.zh-CN="" tip.en-US="DO-25" >
-		<Limit di="DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0"/>
-		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>
-		<Limit di="DI_Arm_Not_Extend_to_PM"	value="true" tip="Arm Not Extend to PM"	tip.zh-CN="" tip.en-US="DI-76" />
-	</Action>
 
 	<Action do="DO_Turbo_Pump_Pumping_Valve" value="true" tip="Turbo Pump Pumping Valve" tip.zh-CN="" tip.en-US="DO-29" >
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>

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

@@ -142,8 +142,8 @@
 		<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="24" Name="" Device="PV4" Addr="w1.08" />
+		<DO_ITEM Index="25" Name="" Device="PV4" Addr="w1.09" />
 		<DO_ITEM Index="26" Name="" />
 		<DO_ITEM Index="27" Name="" />
 		<DO_ITEM Index="28" Name="DO_Purge_Valve" Device="" Addr="w1.12"/>

BIN
Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BDeviceModel.xml


+ 0 - 13
Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BInterlock.xml

@@ -173,19 +173,6 @@
 		<Limit do="DO_N2_Valve"			value="false" tip="N2 Valve"			tip.zh-CN="" tip.en-US="DO-10" />
 	</Action>
 
-	<Action do="DO_Slit_Door_Open" value="true" tip="Slit Door Open" tip.zh-CN="" tip.en-US="DO-24" >
-		<Limit di="DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0"/>
-		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12" />
-		<Limit di="DI_Arm_Not_Extend_to_PM"	value="true" tip="Arm Not Extend to PM"	tip.zh-CN="" tip.en-US="DI-76" />
-
-	</Action>
-
-
-	<Action do="DO_Slit_Door_Close" value="true" tip="Slit Door Close" tip.zh-CN="" tip.en-US="DO-25" >
-		<Limit di="DI_Lid_Closed"		value="true" tip="DI Lid Closed"			tip.zh-CN="" tip.en-US="DI-0"/>
-		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>
-		<Limit di="DI_Arm_Not_Extend_to_PM"	value="true" tip="Arm Not Extend to PM"	tip.zh-CN="" tip.en-US="DI-76" />
-	</Action>
 
 	<Action do="DO_Turbo_Pump_Pumping_Valve" value="true" tip="Turbo Pump Pumping Valve" tip.zh-CN="" tip.en-US="DO-29" >
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>

+ 2 - 2
Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BIoDefine.xml

@@ -142,8 +142,8 @@
 		<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="24" Name="" Device="PV4" Addr="w1.08" />
+		<DO_ITEM Index="25" Name="" Device="PV4" Addr="w1.09" />
 		<DO_ITEM Index="26" Name="" />
 		<DO_ITEM Index="27" Name="" />
 		<DO_ITEM Index="28" Name="DO_Purge_Valve" Device="" Addr="w1.12"/>

+ 2 - 1
Venus/Venus_RT/Config/System.sccfg

@@ -258,7 +258,8 @@
 		<config default="4" name="SlotNumber" nameView="Slot number"  description="槽位个数" max="60" min="1" paramter="" tag="" unit="" type="Integer" />
 		<config default="2000" name="OverVentTime" nameView="Over Vent Time Delay" description="" max="60000" min="0" paramter="" tag="" unit="ms" type="Integer" />
 		<config default="0" name="MFCWriteMode" nameView="MFCWriteMode" description=" 0:Flow; 1:Percent" max="1" min="0" paramter="" tag="" unit="" type="Integer" />
-
+		<config default="100" name="ControlPressureCheckPoint" nameView="Control Pressure CheckPoint" description="LLA Chamber 控压 检测值" max="300" min="0" paramter="" tag="" unit="mTorr" type="Integer" />
+		<config default="90"  name="ControlPressureSetPoint"   nameView="Control Pressure SetPoint"   description="LLA Chamber 控压 设定值" max="200" min="0" paramter="" tag="" unit="mTorr" type="Integer" />
 		<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" />

+ 54 - 3
Venus/Venus_RT/Config/TM/TMInterlock.xml

@@ -22,7 +22,7 @@
 	<Action do="DO_Purge_Valve_TM"					value="true" tip="Purge Valve TM"	tip.zh-CN="" tip.en-US="DO-03" >
 		<Limit di="DI_TM_CHB_Door_Closed"	value="true" tip="TM CHB Lid Door Closed"			tip.zh-CN="" tip.en-US="DI-17" />
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
-		<Limit di="DI_N2_Pressure_Switch"			value="true" tip="N2 Pressure Switch"		tip.zh-CN="" tip.en-US="DI-21" />	
+		<Limit di="DI_N2_Pressure_Switch"			value="true" tip="N2 Pressure Switch"		tip.zh-CN="" tip.en-US="DI-21" />
 	</Action>
 
 	<Action do="DO_Vent_Valve_TM"					value="true" tip="Soft Vent Valve TM"	tip.zh-CN="" tip.en-US="DO-04" >
@@ -34,7 +34,7 @@
 	<Action do="DO_Soft_Pumping_Valve_LLA"					value="true" tip="Soft Pumping Valve LLA"	tip.zh-CN="" tip.en-US="DO-06" >
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_LLA_E_Slit_Door_close_Position"			value="true" tip="LLA In Slit Door close Position"		tip.zh-CN="" tip.en-US="DI-23" />
-		<Limit di="DI_LLA_Lid_Door_Closed"			value="true" tip="LLA Lid Door Closed"		tip.zh-CN="" tip.en-US="DI-26" />		
+		<Limit di="DI_LLA_Lid_Door_Closed"			value="true" tip="LLA Lid Door Closed"		tip.zh-CN="" tip.en-US="DI-26" />
 	</Action>
 
 	<Action do="DO_Fast_Pumping_Valve_LLA"					value="true" tip="Fast Pumping Valve LLA"	tip.zh-CN="" tip.en-US="DO-07" >
@@ -88,7 +88,7 @@
 	<Action do="DO_Soft_Pumping_Valve_LLB"				value="true" tip="Soft Pumping Valve LLB"	tip.zh-CN="" tip.en-US="DO-16" >
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
 		<Limit di="DI_LLB_E_Slit_Door_close_Position"	value="true" tip="LLB In Slit Door close Position"		tip.zh-CN="" tip.en-US="DI-28" />
-		<Limit di="DI_EFEM_Side_Door_Closed"				value="true" tip="EFEM Side Panel Closed"			tip.zh-CN="" tip.en-US="DI-31" />	
+		<Limit di="DI_EFEM_Side_Door_Closed"				value="true" tip="EFEM Side Panel Closed"			tip.zh-CN="" tip.en-US="DI-31" />
 	</Action>
 
 	<Action do="DO_Fast_Pumping_Valve_LLB"			value="true"  tip="Fast Pumping Valve LLB"		tip.zh-CN="" tip.en-US="DO-17" >
@@ -142,4 +142,55 @@
 		<Limit di="DI_Water_Leak_Sensor"				value="true" tip="Water Leak Sensor"		tip.zh-CN="" tip.en-US="DI-3" />
 	</Action>
 
+	<Action do="DO_PMA_SlitDoor_Open"					value="true" tip="PMA Slit Door Open"		tip.zh-CN="" tip.en-US="DO-13" >
+		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
+		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
+		<Limit di="DI_PMA_Lid_Closed"			    value="true" tip="PMA CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-42" />
+	</Action>
+
+
+	<Action do="DO_PMA_SlitDoor_Close"				value="true" tip="PMA Slit Door Close"	tip.zh-CN="" tip.en-US="DO-14" >
+		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
+		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
+		<Limit di="DI_PMA_Lid_Closed"			    value="true" tip="PMA CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-42" />
+	</Action>
+
+	<Action do="DO_PMB_SlitDoor_Open"					value="true" tip="PMB Slit Door Open"		tip.zh-CN="" tip.en-US="DO-13" >
+		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
+		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
+		<Limit di="DI_PMB_Lid_Closed"			    value="true" tip="PMB CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-43" />
+	</Action>
+
+
+	<Action do="DO_PMB_SlitDoor_Close"				value="true" tip="PMB Slit Door Close"	tip.zh-CN="" tip.en-US="DO-14" >
+		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
+		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
+		<Limit di="DI_PMB_Lid_Closed"			    value="true" tip="PMB CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-43" />
+	</Action>
+
+	<Action do="DO_PMC_SlitDoor_Open"					value="true" tip="PMC Slit Door Open"		tip.zh-CN="" tip.en-US="DO-13" >
+		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
+		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
+		<Limit di="DI_PMC_Lid_Closed"			    value="true" tip="PMC CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-54" />
+	</Action>
+
+
+	<Action do="DO_PMC_SlitDoor_Close"				value="true" tip="PMC Slit Door Close"	tip.zh-CN="" tip.en-US="DO-14" >
+		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
+		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
+		<Limit di="DI_PMC_Lid_Closed"			    value="true" tip="PMC CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-54" />
+	</Action>
+
+	<Action do="DO_PMD_SlitDoor_Open"					value="true" tip="PMD Slit Door Open"		tip.zh-CN="" tip.en-US="DO-13" >
+		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
+		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
+		<Limit di="DI_PMD_Lid_Closed"			    value="true" tip="PMD CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-55" />
+	</Action>
+
+
+	<Action do="DO_PMD_SlitDoor_Close"				value="true" tip="PMD Slit Door Close"	tip.zh-CN="" tip.en-US="DO-14" >
+		<Limit di="DI_TM_CHB_Door_Closed"	        value="true" tip="TM CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-17" />
+		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="CDA Pressure Switch"		tip.zh-CN="" tip.en-US="DI-19" />
+		<Limit di="DI_PMD_Lid_Closed"			    value="true" tip="PMD CHB Lid Door Closed"	tip.zh-CN="" tip.en-US="DI-55" />
+	</Action>
 </Interlock>

+ 1 - 0
Venus/Venus_RT/Devices/IODevices/IoCylinder.cs

@@ -40,6 +40,7 @@ namespace Venus_RT.Devices
         {
             get
             {
+                if(_doON==null || _doOFF==null) return (int)CylinderState.Error;
                 if (_doON.Value && _doOFF.Value) return (int)CylinderState.Error;
                 if (_doON.Value && !_doOFF.Value) return (int)CylinderState.Open;
                 if (!_doON.Value && _doOFF.Value) return (int)CylinderState.Close;

+ 18 - 19
Venus/Venus_RT/Modules/TM/MFPMSwapRoutine.cs

@@ -144,21 +144,20 @@ namespace Venus_RT.Modules.TM
                 case JetChamber.Venus:
                 case JetChamber.Kepler2300:
 
-                    Runner.Wait(SwapStep.WaitPMReady, () => _pmModule.IsIdle, _delay_60s)
-                          .RunIf(SwapStep.PreRotation, _JetTM.PreRotateModules.ContainsKey(_targetModule), RotateArm, WaitRotateDone)
-                          .Run(SwapStep.OpenSlitDoor, OpenPMSlitDoor, OpenPMSlitDoorIsOK)
-
-                          .Run(SwapStep.PickPrepare, PickPrepare, IsModuleReadyForPick)
-                          .Run(SwapStep.PickExtend, PickExtend, WaitRobotExtendDone)
-                          .Run(SwapStep.DropDownWafer, NotifyPMPickWafer, WaitPMWaferDropDown)
-                          .Delay(SwapStep.PickDelay, _pickDelayTime)
-                          .Run(SwapStep.PickRetract, PickRetract, WaitRobotRetractDone)
-                          .Run(SwapStep.PlacePrepare, PlacePrepare, IsModuleReadyForPlace)
-                          .Run(SwapStep.PlaceExtend, PlaceExtend, WaitRobotExtendDone)
-                          .Run(SwapStep.LiftUpWafer, NotifyLiftUpWafer, WaitPMWaferLiftUp)
-                          .Delay(SwapStep.PlaceDelay, _placeDelayTime)
-                          .Run(SwapStep.PlaceRetract, PlaceRetract, WaitRobotRetractDone)
-                          .Run(SwapStep.CloseSlitDoor, ClosePMSlitDoor, ClosePMSlitDoorIsOK)
+                    Runner.Wait(SwapStep.WaitPMReady,     () => _pmModule.IsIdle,                             _delay_60s)
+                          .RunIf(SwapStep.PreRotation,    _JetTM.PreRotateModules.ContainsKey(_targetModule), RotateArm, WaitRotateDone)
+                          .Run(SwapStep.OpenSlitDoor,     OpenPMSlitDoor,                                     OpenPMSlitDoorIsOK)
+                          .Run(SwapStep.PickPrepare,      PickPrepare,                                        IsModuleReadyForPick)
+                          .Run(SwapStep.PickExtend,       PickExtend,                                         WaitRobotExtendDone)
+                          .Run(SwapStep.DropDownWafer,    NotifyPMPickWafer,                                  WaitPMWaferDropDown)
+                          .Delay(SwapStep.PickDelay,                                                          _pickDelayTime)
+                          .Run(SwapStep.PickRetract,      PickRetract,                                        WaitRobotRetractDone)
+                          .Run(SwapStep.PlacePrepare,     PlacePrepare,                                       IsModuleReadyForPlace)
+                          .Run(SwapStep.PlaceExtend,      PlaceExtend,                                        WaitRobotExtendDone)
+                          .Run(SwapStep.LiftUpWafer,      NotifyLiftUpWafer,                                  WaitPMWaferLiftUp)
+                          .Delay(SwapStep.PlaceDelay,     _placeDelayTime)
+                          .Run(SwapStep.PlaceRetract,     PlaceRetract,                                       WaitRobotRetractDone)
+                          .Run(SwapStep.CloseSlitDoor,    ClosePMSlitDoor,                                    ClosePMSlitDoorIsOK)
 
                           .End(SwapStep.NotifyDone, NotifyPMDone, _delay_50ms);
                     break;
@@ -203,8 +202,8 @@ namespace Venus_RT.Modules.TM
         }
         private bool IsModuleReadyForPick()
         {
-            //return _pmModule.Status == PMEntity.PMStatus.Ready_For_Pick && _pmModule.IsSlitDoorOpen;
-            return _pmModule.Status == PMEntity.PMStatus.Ready_For_Pick;
+            return _pmModule.Status == PMEntity.PMStatus.Ready_For_Pick && _pmModule.IsSlitDoorOpen;
+            //return _pmModule.Status == PMEntity.PMStatus.Ready_For_Pick;
 
         }
 
@@ -225,8 +224,8 @@ namespace Venus_RT.Modules.TM
 
         private bool IsModuleReadyForPlace()
         {
-            //return _pmModule.Status == PMEntity.PMStatus.Ready_For_Place && _pmModule.IsSlitDoorOpen;
-            return _pmModule.Status == PMEntity.PMStatus.Ready_For_Place;
+            return _pmModule.Status == PMEntity.PMStatus.Ready_For_Place && _pmModule.IsSlitDoorOpen;
+            //return _pmModule.Status == PMEntity.PMStatus.Ready_For_Place;
 
         }
 

+ 7 - 0
Venus/Venus_Simulator/Instances/SimulatorSystem.cs

@@ -620,6 +620,13 @@ namespace Venus_Simulator.Instances
             IO.DI[$"{mod}.DI_LLA_ATM_Switch"].Value = true;
             IO.DI[$"{mod}.DI_LLB_ATM_Switch"].Value = true;
 
+            IO.DI[$"{mod}.DI_PMA_Lid_Closed"].Value = true;
+            IO.DI[$"{mod}.DI_PMB_Lid_Closed"].Value = true;
+            IO.DI[$"{mod}.DI_PMC_Lid_Closed"].Value = true;
+            IO.DI[$"{mod}.DI_PMD_Lid_Closed"].Value = true;
+
+
+
 
             // Datetime
             SetAiValue($"{mod}.AI_Year", DateTime.Today.Year);

+ 5 - 6
Venus/Venus_UI/Views/ShellView.xaml.cs

@@ -557,7 +557,7 @@ namespace Venus_UI.Views
             //FrameworkElement elem = source.Content as FrameworkElement;
             RenderTargetBitmap targetBitmap = new RenderTargetBitmap(
                                        1920,
-                                       1080,
+                                       1030,
                                        96d,
                                        96d,
                                        PixelFormats.Default);
@@ -573,12 +573,11 @@ namespace Venus_UI.Views
         }
         #endregion
 
-        private   void Window_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
+        private async  void Window_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
         {
-            
-            //this.buttonList[1].IsChecked = true;
-            ////await Task.Delay(1000);
-            //SaveWindowContent(this, "test.png");
+            //this.buttonList[2].IsChecked = true;
+            //await Task.Delay(5);
+            //SaveWindowContent(this, "test.jpg");
             //this.buttonList[0].IsChecked = true;
         }      
     }