Browse Source

cancel Open PVN22 in SE,DE && add VenusVentRoutine && fix the bug in GasBoxLeakCheck && Change Logic in pumpdown&Vent in SE,DE

zhouhr 11 months ago
parent
commit
d95b8c7876

+ 13 - 0
Venus/Venus_MainPages/ViewModels/DETMOperationViewModel.cs

@@ -0,0 +1,13 @@
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Venus_MainPages.ViewModels
+{
+    public class DETMOperationViewModel : BindableBase
+    {
+    }
+}

+ 812 - 0
Venus/Venus_MainPages/Views/DETMOperationView.xaml

@@ -0,0 +1,812 @@
+<UserControl x:Class="Venus_MainPages.Views.SETMOperationView"
+             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:customControls="clr-namespace:Venus_Themes.CustomControls;assembly=Venus_Themes"
+             xmlns:userControls="clr-namespace:Venus_Themes.UserControls;assembly=Venus_Themes"
+             xmlns:converters="clr-namespace:Venus_Themes.Converters;assembly=Venus_Themes"
+             xmlns:converters2="clr-namespace:Venus_MainPages.Converters"
+             xmlns:prism="http://prismlibrary.com/"
+             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
+             prism:ViewModelLocator.AutoWireViewModel="True"
+             xmlns:local="clr-namespace:Venus_MainPages.Views" xmlns:viewmodels="clr-namespace:Venus_MainPages.ViewModels" d:DataContext="{d:DesignInstance Type=viewmodels:SETMOperationViewModel}"
+             mc:Ignorable="d"
+             d:DesignHeight="450" d:DesignWidth="800">
+    <UserControl.Resources>
+        <converters:BoolToBool   x:Key="BoolToBool"/>
+        <converters:BoolToColor  x:Key="boolToColor"/>
+        <converters:BoolToColor2  x:Key="boolToColor2"/>
+        <converters:BoolToColor4  x:Key="boolToColor4"/>
+        <converters:BoolToVisibility2 x:Key="BoolToVisibility2"/>
+
+
+        <converters2:AllMultiValueConverter  x:Key="AllMultiValueConverter"/>
+        <converters2:AnyMultiValueConverter  x:Key="AnyMultiValueConverter"/>
+
+        <Style x:Key="DoorAnimationStyle" TargetType="Rectangle">
+            <Setter Property="RenderTransform">
+                <Setter.Value>
+                    <RotateTransform Angle="0"/>
+                </Setter.Value>
+            </Setter>
+        </Style>
+
+        <Style TargetType="{x:Type TabPanel}">
+            <Setter Property="Background" Value="Transparent"></Setter>
+        </Style>
+
+        <Style TargetType="TabItem" x:Key="CustomTab">
+            <Setter Property="Template">
+                <Setter.Value>
+                    <ControlTemplate TargetType="TabItem">
+                        <Border Name="Border" BorderThickness="1,1,1,1" BorderBrush="Gainsboro" CornerRadius="3" Margin="10,0" Padding="3,1">
+                            <ContentPresenter x:Name="ContentSite"
+                                        VerticalAlignment="Center"
+                                        HorizontalAlignment="Center"
+                                        ContentSource="Header"
+                                        Margin="10,2"/>
+                        </Border>
+                        <ControlTemplate.Triggers>
+                            <Trigger Property="IsSelected" Value="True">
+                                <Setter TargetName="Border" Property="Background" Value="#376092" />
+                                <Setter TargetName="ContentSite" Property="TextBlock.Foreground" Value="White" />
+                            </Trigger>
+                            <Trigger Property="IsSelected" Value="False">
+                                <Setter TargetName="Border" Property="Background" Value="#95b3d7" />
+                            </Trigger>
+                        </ControlTemplate.Triggers>
+                    </ControlTemplate>
+                </Setter.Value>
+            </Setter>
+        </Style>
+    </UserControl.Resources>
+    <Canvas>
+
+        <Canvas>
+            <!-- 用于整体定位 -->
+
+            <Canvas Canvas.Left="100" Canvas.Top="80">
+
+                <userControls:VenusSETM Canvas.Top="134" Canvas.Left="500"     
+                                        VCEIsInstalled="{Binding VCEIsInstalled }" 
+                                        PMAIsInstalled="{Binding PMAIsInstalled}"
+                                        PMBIsInstalled="{Binding PMBIsInstalled}" 
+                                        PMCIsInstalled="{Binding PMCIsInstalled}"
+                                        VCEDoorIsOpen = "{Binding VCEDoorIsOpen}"
+                                        PMADoorIsOpen = "{Binding PMADoorIsOpen}"
+                                        PMBDoorIsOpen = "{Binding PMBDoorIsOpen}"
+                                        PMCDoorIsOpen = "{Binding PMCDoorIsOpen}"
+                                        VPAIsShow="False"  Panel.ZIndex="1"></userControls:VenusSETM>
+                <!--PMB Slit Door-->
+                <Rectangle Width="150" Height="22" Canvas.Top="134" Canvas.Left="548" Panel.ZIndex="100" HorizontalAlignment="Center" VerticalAlignment="Top" Fill="Transparent" Cursor="Hand"
+                           Visibility="{Binding PMBIsInstalled,Converter={StaticResource BoolToVisibility2}}"
+                           >
+                    <Rectangle.ContextMenu >
+                        <ContextMenu>
+                            <MenuItem Header="Open Door"  Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMB,True"  IsChecked="{Binding PMBDoorIsOpen}" IsEnabled="{Binding PMBDoorIsOpen,Converter={StaticResource BoolToBool}}"/>
+                            <MenuItem Header="Close Door" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMB,False"  IsChecked="{Binding PMBDoorIsOpen,Converter={StaticResource BoolToBool}}" IsEnabled="{Binding PMBDoorIsOpen}"/>
+                        </ContextMenu>
+                    </Rectangle.ContextMenu>
+                </Rectangle>
+
+                <!--VCE Slit Door-->
+                <Rectangle Width="150" Height="20" Canvas.Top="472" Canvas.Left="548" Panel.ZIndex="100" Fill="Transparent" Cursor="Hand"
+                           Visibility="{Binding VCEIsInstalled,Converter={StaticResource BoolToVisibility2}}">
+                    <Rectangle.ContextMenu >
+                        <ContextMenu>
+                            <MenuItem Header="Open Door"  Command="{Binding ControlSlitDoorCommand}"  CommandParameter="VCE1,True"  IsChecked="{Binding VCEDoorIsOpen}" IsEnabled="{Binding VCEDoorIsOpen,Converter={StaticResource BoolToBool}}"/>
+                            <MenuItem Header="Close Door" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="VCE1,False"  IsChecked="{Binding VCEDoorIsOpen,Converter={StaticResource BoolToBool}}" IsEnabled="{Binding VCEDoorIsOpen}"/>
+                        </ContextMenu>
+                    </Rectangle.ContextMenu>
+                </Rectangle>
+                <!--PMA Slit Door-->
+                <Rectangle Width="150" Height="20" Canvas.Top="180" Canvas.Left="522" Panel.ZIndex="100" HorizontalAlignment="Center" VerticalAlignment="Top"  Fill="Transparent" Cursor="Hand"
+                           Visibility="{Binding PMAIsInstalled,Converter={StaticResource BoolToVisibility2}}"
+                           >
+                    <Rectangle.ContextMenu >
+                        <ContextMenu>
+                            <MenuItem Header="Open Door"  Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMA,True"    IsChecked="{Binding PMADoorIsOpen}" IsEnabled="{Binding PMADoorIsOpen,Converter={StaticResource BoolToBool}}"/>
+                            <MenuItem Header="Close Door" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMA,False"    IsChecked="{Binding PMADoorIsOpen,Converter={StaticResource BoolToBool}}" IsEnabled="{Binding PMADoorIsOpen}"/>
+                        </ContextMenu>
+                    </Rectangle.ContextMenu>
+                    <Rectangle.RenderTransform>
+                        <RotateTransform Angle="90"></RotateTransform>
+                    </Rectangle.RenderTransform>
+                </Rectangle>
+                <!-- PMC -->
+                <Rectangle Width="150" Height="20" Canvas.Top="180" Canvas.Left="743" Panel.ZIndex="100" HorizontalAlignment="Center" VerticalAlignment="Top"  Fill="Transparent" Cursor="Hand"
+                           Visibility="{Binding PMCIsInstalled,Converter={StaticResource BoolToVisibility2}}"
+                           >
+                    <Rectangle.ContextMenu >
+                        <ContextMenu>
+                            <MenuItem Header="Open Door"  Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMC,True"    IsChecked="{Binding PMCDoorIsOpen}" IsEnabled="{Binding PMCDoorIsOpen,Converter={StaticResource BoolToBool}}"/>
+                            <MenuItem Header="Close Door" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMC,False"    IsChecked="{Binding PMCDoorIsOpen,Converter={StaticResource BoolToBool}}" IsEnabled="{Binding PMCDoorIsOpen}"/>
+                        </ContextMenu>
+                    </Rectangle.ContextMenu>
+
+                    <Rectangle.RenderTransform>
+                        <RotateTransform Angle="90"></RotateTransform>
+                    </Rectangle.RenderTransform>
+                </Rectangle>
+                <userControls:Vce Canvas.Top="462" Canvas.Left="520" Width="200" Height="180" HorizontalAlignment="Center" VerticalAlignment="Top" VCEOutDoorIsOpen="{Binding VCEOutDoorIsOpen}"></userControls:Vce>
+                <!-- 管道 -->
+                <Canvas Canvas.Top="270">
+                    <!-- N2 -->
+                    <userControls:FlowPipe   Height="8"  Width="180" Canvas.Left="80" Canvas.Top="50" IsFlowing="{Binding TMValveN2IsOpen}"/>
+                    <Image    Width="40" Height="25" Canvas.Top="42" Canvas.Left="40" Source="Pack://application:,,,/Venus_Themes;Component/Resources/Arrow.png" Stretch="Uniform"/>
+                    <TextBlock  FontSize="15" Canvas.Top="46" Canvas.Left="10" Text="N2"/>
+                    <userControls:FlowPipe   Height="8"  Width="180" Canvas.Left="260" Canvas.Top="54" RotateTransformValue="90">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="TMValveN2IsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="160" Canvas.Left="260" Canvas.Top="-105" RotateTransformValue="90">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="TMValveN2IsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+                    <!--<customControls:CommonValveControl Status="{Binding TMValveN2IsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Left="160" Canvas.Top="44"  Tag="TMValveN2" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding TMIsOFFline}" Panel.ZIndex="3"/>-->
+                    <userControls:FlowPipe   Height="8"  Width="50" Canvas.Left="259" Canvas.Top="-112" IsFlowing="{Binding TMValveN2IsOpen}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <Ellipse Width="20" Height="20"  Canvas.Left="111" Canvas.Top="44" Fill="White"  Stroke="Silver" StrokeThickness="2" Panel.ZIndex="3" HorizontalAlignment="Left" VerticalAlignment="Top"></Ellipse>
+                    <userControls:FlowPipe   Height="8"  Width="50" Canvas.Left="259" Canvas.Top="234" IsFlowing="{Binding TMValveN2IsOpen}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+
+                    <!-- TM vent -->
+                    <!-- Soft vent -->
+                    <userControls:TextboxWithLabel  Canvas.Top="-106" Canvas.Left="320" TextBoxValue="{Binding RtDataValues[SETM.TM_MFC1.SetPoint],Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  IsReadOnly="False"  LabelValue="MFC"  TextBoxColor="White" HorizontalAlignment="Left" VerticalAlignment="Center" Panel.ZIndex="3" Width="74"/>
+                    <userControls:TextboxWithLabel  Canvas.Top="-89" Canvas.Left="320" LabelValue="" TextBoxValue="{Binding RtDataValues[SETM.TM_MFC1.FeedBack],StringFormat='F1'}" TextBoxColor="#D7E4BD" Panel.ZIndex="3" HorizontalAlignment="Left" VerticalAlignment="Center" Width="74" Height="45" />
+                    <customControls:CommonValveControl Canvas.Left="412" Canvas.Top="-87" Status="{Binding TMSoftVentIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Tag="TMSoftVent" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding  RtDataValues[SETM.IsOffline]}" Panel.ZIndex="3" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="315" Canvas.Top="-81" IsFlowing="{Binding TMSoftVentIsOpen}" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="315" Canvas.Top="-110" IsFlowing="{Binding TMSoftVentIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="445" Canvas.Top="-110" IsFlowing="{Binding TMSoftVentIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <!-- fast vent -->
+                    <customControls:CommonValveControl Canvas.Left="365" Canvas.Top="-150" Status="{Binding TMFastVentIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Tag="TMFastVent" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding  RtDataValues[SETM.IsOffline]}" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="315" Canvas.Top="-144" IsFlowing="{Binding TMFastVentIsOpen}" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="315" Canvas.Top="-137" IsFlowing="{Binding TMFastVentIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="445" Canvas.Top="-137" IsFlowing="{Binding TMFastVentIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+
+                    <userControls:FlowPipe   Height="8"  Width="83" Canvas.Left="439" Canvas.Top="-112" HorizontalAlignment="Left" VerticalAlignment="Center">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="TMFastVentIsOpen"/>
+                                <Binding Path="TMSoftVentIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+
+
+                    <!-- vce vent -->
+                    <!-- vce fast vent-->
+                    <customControls:CommonValveControl Status="{Binding VCEFastVentIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Left="365" Canvas.Top="197"  Tag="VCEFastVent" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding  RtDataValues[SETM.IsOffline]}" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="315" Canvas.Top="204" IsFlowing="{Binding VCEFastVentIsOpen}" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="315" Canvas.Top="214" IsFlowing="{Binding VCEFastVentIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="445" Canvas.Top="214" IsFlowing="{Binding VCEFastVentIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+
+                    <!-- vce soft vent -->
+                    <customControls:CommonValveControl Status="{Binding VCESoftVentIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Left="365" Canvas.Top="258"  Tag="VCESoftVent" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding  RtDataValues[SETM.IsOffline]}" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="315" Canvas.Top="264" IsFlowing="{Binding VCESoftVentIsOpen}" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="315" Canvas.Top="234" IsFlowing="{Binding VCESoftVentIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="445" Canvas.Top="234" IsFlowing="{Binding VCESoftVentIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="82" Canvas.Left="439" Canvas.Top="234" HorizontalAlignment="Left" VerticalAlignment="Center">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="VCEFastVentIsOpen"/>
+                                <Binding Path="VCESoftVentIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+
+                    <!--TM pump-->
+                    <userControls:TextboxWithLabel  Canvas.Left="1080" Canvas.Top="39" LabelValue="CM(Torr)" TextBoxValue="{Binding RtDataValues[SETM.TMPipelinePressure.Value],StringFormat='F1'}" TextBoxColor="#D7E4BD" Panel.ZIndex="3"/>
+
+                    <!--TM fast pump-->
+                    <customControls:CommonValveControl Status="{Binding TMFastPumpIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Left="900" Canvas.Top="-151"  Tag="TMFastPump" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding  RtDataValues[SETM.IsOffline]}" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="850" Canvas.Top="-144" IsFlowing="{Binding TMFastPumpIsOpen}" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="850" Canvas.Top="-137"  IsFlowing="{Binding TMFastPumpIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="978" Canvas.Top="-137"  IsFlowing="{Binding TMFastPumpIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+
+                    <!--TM soft pump-->
+                    <customControls:CommonValveControl Status="{Binding TMSoftPumpIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Left="900" Canvas.Top="-87"  Tag="TMSoftPump" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding  RtDataValues[SETM.IsOffline]}" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="850" Canvas.Top="-81" IsFlowing="{Binding TMSoftPumpIsOpen}" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="850" Canvas.Top="-110" IsFlowing="{Binding TMSoftPumpIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="978" Canvas.Top="-110" IsFlowing="{Binding TMSoftPumpIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="724" Canvas.Top="-112" HorizontalAlignment="Left" VerticalAlignment="Center">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="TMSoftPumpIsOpen"/>
+                                <Binding Path="TMFastPumpIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="90" Canvas.Left="975" Canvas.Top="-112" HorizontalAlignment="Center" VerticalAlignment="Top">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="TMSoftPumpIsOpen"/>
+                                <Binding Path="TMFastPumpIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+
+
+                    <!-- vce pump-->
+
+                    <!-- vce fast pump-->
+                    <customControls:CommonValveControl Status="{Binding VCESoftPumpIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Left="900" Canvas.Top="198"  Tag="VCESoftPump" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding  RtDataValues[SETM.IsOffline]}" Panel.ZIndex="3" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="845" Canvas.Top="204" IsFlowing="{Binding VCESoftPumpIsOpen}" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="845" Canvas.Top="214"  IsFlowing="{Binding VCESoftPumpIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="973" Canvas.Top="214"  IsFlowing="{Binding VCESoftPumpIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+
+                    <!-- vce soft pump-->
+                    <customControls:CommonValveControl Status="{Binding VCEFastPumpIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Left="900" Canvas.Top="258"  Tag="VCEFastPump" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="{Binding  RtDataValues[SETM.IsOffline]}" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="845" Canvas.Top="264" IsFlowing="{Binding VCEFastPumpIsOpen}" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="845" Canvas.Top="234"  IsFlowing="{Binding VCEFastPumpIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="30" Canvas.Left="973" Canvas.Top="234"  IsFlowing="{Binding VCEFastPumpIsOpen}" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+
+                    <userControls:FlowPipe   Height="8"  Width="95" Canvas.Left="970" Canvas.Top="234" HorizontalAlignment="Left" VerticalAlignment="Center">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="VCESoftPumpIsOpen"/>
+                                <Binding Path="VCEFastPumpIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="719" Canvas.Top="234" HorizontalAlignment="Left" VerticalAlignment="Center">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="VCESoftPumpIsOpen"/>
+                                <Binding Path="VCEFastPumpIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+
+                    <!-- pump cm -->
+                    <!--<userControls:TextboxWithLabel  Canvas.Left="1089" Canvas.Top="38" LabelValue="CM7(Torr)" TextBoxValue="{Binding RtDataValues[TM.LLBPressureGauge.Value],StringFormat='F1'}" TextBoxColor="#D7E4BD" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top"/>-->
+
+                    <userControls:FlowPipe   Height="8"  Width="180" Canvas.Left="1074" Canvas.Top="-104" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="TMFastPumpIsOpen"/>
+                                <Binding Path="TMSoftPumpIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="165" Canvas.Left="1074" Canvas.Top="70" RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Top">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="VCEFastPumpIsOpen"/>
+                                <Binding Path="VCESoftPumpIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="120" Canvas.Left="1072" Canvas.Top="63" HorizontalAlignment="Left" VerticalAlignment="Center">
+                        <userControls:FlowPipe.IsFlowing>
+                            <MultiBinding Converter="{StaticResource AnyMultiValueConverter}">
+                                <Binding Path="VCESoftPumpIsOpen"/>
+                                <Binding Path="VCEFastPumpIsOpen"/>
+                                <Binding Path="TMFastPumpIsOpen"/>
+                                <Binding Path="TMSoftPumpIsOpen"/>
+                            </MultiBinding>
+                        </userControls:FlowPipe.IsFlowing>
+                    </userControls:FlowPipe>
+                    <userControls:Pump Canvas.Left="1183" Canvas.Top="50" Width="35" Height="35" IsOpen="{Binding RtDataValues[SETM.PumpIsRunning],Mode=TwoWay}" HorizontalAlignment="Left" VerticalAlignment="Center">
+                        <userControls:Pump.ContextMenu>
+                            <ContextMenu>
+                                <MenuItem Header="ON"  Command="{Binding SETMPumpCommand}" CommandParameter="True" IsChecked="{Binding RtDataValues[SETM.PumpIsRunning],Mode=OneWay}" IsEnabled="{Binding RtDataValues[SETM.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}"/>
+                                <MenuItem Header="OFF" Command="{Binding SETMPumpCommand}" CommandParameter="False" IsChecked="{Binding RtDataValues[SETM.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}" IsEnabled="{Binding RtDataValues[SETM.PumpIsRunning],Mode=OneWay}"/>
+                            </ContextMenu>
+                        </userControls:Pump.ContextMenu>
+                    </userControls:Pump>
+
+                    <!-- tm atm-->
+                    <userControls:TextboxWithLabel  Canvas.Left="920" Canvas.Top="45" LabelValue="CM(Torr)" TextBoxValue="{Binding RtDataValues[SETM.TMPressure.Value],StringFormat='F1'}" TextBoxColor="#D7E4BD" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+
+                    <Ellipse Width="20" Height="20"  Canvas.Left="859" Canvas.Top="85" Stroke="Silver" StrokeThickness="2" Panel.ZIndex="3" HorizontalAlignment="Left" VerticalAlignment="Center"  Fill="{Binding TMIsVAC,Converter={StaticResource boolToColor}}"></Ellipse>
+                    <Ellipse Width="20" Height="20"  Canvas.Left="886" Canvas.Top="41" Stroke="Silver" StrokeThickness="2"  Panel.ZIndex="3" HorizontalAlignment="Left" VerticalAlignment="Center" Fill="{Binding TMIsATM,Converter={StaticResource boolToColor}}"></Ellipse>
+                    <userControls:FlowPipe   Height="8"  Width="200" Canvas.Left="721" Canvas.Top="70" HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="2"/>
+                    <userControls:FlowPipe   Height="8"  Width="20" Canvas.Left="873" Canvas.Top="71" RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Center"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="20" Canvas.Left="900" Canvas.Top="55" RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Top"></userControls:FlowPipe>
+
+                    <!-- vce atm-->
+                    <userControls:TextboxWithLabel  Canvas.Left="815" Canvas.Top="306" LabelValue="CM(Torr)" TextBoxValue="{Binding RtDataValues[SETM.VCEPressure.Value],StringFormat='F1',TargetNullValue=0}" TextBoxColor="#D7E4BD" Panel.ZIndex="3" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <Ellipse Width="20" Height="20"  Canvas.Left="758" Canvas.Top="344" Stroke="Silver" StrokeThickness="2" Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top"  Fill="{Binding VCEIsVAC,Converter={StaticResource boolToColor}}"></Ellipse>
+                    <Ellipse Width="20" Height="20"  Canvas.Left="779" Canvas.Top="305" Stroke="Silver" StrokeThickness="2"  Panel.ZIndex="3" HorizontalAlignment="Center" VerticalAlignment="Top" Fill="{Binding VCEIsATM,Converter={StaticResource boolToColor}}"></Ellipse>
+
+                    <userControls:FlowPipe   Height="8"  Width="100" Canvas.Left="719" Canvas.Top="331" HorizontalAlignment="Center" VerticalAlignment="Top" Panel.ZIndex="2"/>
+                    <userControls:FlowPipe   Height="8"  Width="20" Canvas.Left="772" Canvas.Top="331" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+                    <userControls:FlowPipe   Height="8"  Width="20" Canvas.Left="793" Canvas.Top="319" RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top"></userControls:FlowPipe>
+
+
+                    <!-- 转角 -->
+                    <userControls:Pipe2    Canvas.Left="1061"  Canvas.Top="-112" HorizontalAlignment="Center" VerticalAlignment="Top" />
+                    <userControls:Pipe2    Canvas.Left="965"  Canvas.Top="-144" HorizontalAlignment="Center" VerticalAlignment="Top" />
+                    <userControls:Pipe2    Canvas.Left="432"  Canvas.Top="-144" HorizontalAlignment="Left" VerticalAlignment="Top" />
+                    <userControls:Pipe2    Canvas.Left="432"  Canvas.Top="204" HorizontalAlignment="Left" VerticalAlignment="Center" />
+                    <userControls:Pipe2    Canvas.Left="960"  Canvas.Top="204" HorizontalAlignment="Left" VerticalAlignment="Center" />
+                    <userControls:Pipe2    Canvas.Left="1074"  Canvas.Top="229" HorizontalAlignment="Left" VerticalAlignment="Center" RotateTransformValue="90" />
+                    <userControls:Pipe2    Canvas.Left="973"  Canvas.Top="259" HorizontalAlignment="Left" VerticalAlignment="Center" RotateTransformValue="90" />
+                    <userControls:Pipe2    Canvas.Left="445"  Canvas.Top="259" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="90" />
+                    <userControls:Pipe2    Canvas.Left="445"  Canvas.Top="-86" HorizontalAlignment="Center" VerticalAlignment="Top" RotateTransformValue="90" />
+                    <userControls:Pipe2    Canvas.Left="978"  Canvas.Top="-86" HorizontalAlignment="Left" VerticalAlignment="Center" RotateTransformValue="90" />
+                    <userControls:Pipe2    Canvas.Left="842"  Canvas.Top="-131" HorizontalAlignment="Left" VerticalAlignment="Center" RotateTransformValue="-90" />
+                    <userControls:Pipe2    Canvas.Left="307"  Canvas.Top="-131" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="-90" />
+                    <userControls:Pipe2    Canvas.Left="252"  Canvas.Top="-99" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="-90" />
+                    <userControls:Pipe2    Canvas.Left="307"  Canvas.Top="217" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="-90" />
+                    <userControls:Pipe2    Canvas.Left="837"  Canvas.Top="217" HorizontalAlignment="Left" VerticalAlignment="Center" RotateTransformValue="-90" />
+                    <userControls:Pipe2    Canvas.Left="850"  Canvas.Top="272" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="180" />
+                    <userControls:Pipe2    Canvas.Left="855"  Canvas.Top="-73" HorizontalAlignment="Left" VerticalAlignment="Center" RotateTransformValue="180" />
+                    <userControls:Pipe2    Canvas.Left="320"  Canvas.Top="-73" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="180" />
+                    <userControls:Pipe2    Canvas.Left="320"  Canvas.Top="272" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="180" />
+                    <userControls:Pipe2    Canvas.Left="265"  Canvas.Top="242" HorizontalAlignment="Left" VerticalAlignment="Top" RotateTransformValue="180" />
+
+                    <!-- 文字 -->
+                    <TextBlock  FontSize="15" Canvas.Top="70" Canvas.Left="162" Text="V1"/>
+                    <TextBlock  FontSize="15" Canvas.Top="-174" Canvas.Left="317" Text="TM Fast vent V5" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <TextBlock  FontSize="15" Canvas.Top="-62" Canvas.Left="394" HorizontalAlignment="Left" VerticalAlignment="Top" Height="43" Width="60"><Run Text="TM Soft "/><LineBreak/><Run Text="vent V4"/></TextBlock>
+                    <TextBlock  FontSize="15" Canvas.Top="173" Canvas.Left="316" Text="VCE Fast vent V5" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <TextBlock  FontSize="15" Canvas.Top="285" Canvas.Left="315" Text="VCE Soft vent V4" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+                    <TextBlock  FontSize="15" Canvas.Top="173" Canvas.Left="846" Text="VCE Soft Pump V3" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <TextBlock  FontSize="15" Canvas.Top="278" Canvas.Left="846" Text="VCE Fast Pump V2" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <TextBlock  FontSize="15" Canvas.Top="-57" Canvas.Left="849" Text="TM Soft Pump V2" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <TextBlock  FontSize="15" Canvas.Top="-175" Canvas.Left="849" Text="TM Fast Pump V3" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <TextBlock  FontSize="15" Canvas.Top="285" Canvas.Left="773" Text="ATM" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+                    <TextBlock  FontSize="15" Canvas.Top="366" Canvas.Left="753" Text="VAC" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <TextBlock  FontSize="15" Canvas.Top="24" Canvas.Left="879" Text="ATM" HorizontalAlignment="Center" VerticalAlignment="Top"/>
+                    <TextBlock  FontSize="15" Canvas.Top="105" Canvas.Left="854" Text="VAC" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+
+
+                </Canvas>
+
+            </Canvas>
+
+
+
+        </Canvas>
+        <Canvas>
+            <TabControl Height="500" Width="400" Canvas.Left="1370" Canvas.Top="14" Background="Transparent" TabStripPlacement="Top">
+
+                <TabItem Header="TM" Style="{StaticResource CustomTab}">
+                    <Grid>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="111*"/>
+                            <ColumnDefinition Width="284*"/>
+                        </Grid.ColumnDefinitions>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                        </Grid.RowDefinitions>
+                        <Border Grid.Row="0" Grid.Column="0" Background="#95b3d7" Margin="5,5,5,5" CornerRadius="5" Grid.ColumnSpan="2">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="1.5*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="*"/>
+                                </Grid.ColumnDefinitions>
+                                <Grid Grid.ColumnSpan="5">
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition Width="*"/>
+                                        <ColumnDefinition Width="*"/>
+                                    </Grid.ColumnDefinitions>
+                                    <Button  Grid.Column="0" Margin="10,5" IsEnabled="{Binding RtDataValues[SETM.IsOffline],Mode=TwoWay}" Command="{Binding TMSetOnline}">Online</Button>
+                                    <Button  Grid.Column="1" Margin="10,5" IsEnabled="{Binding RtDataValues[SETM.IsOnline],Mode=TwoWay}" Command="{Binding TMSetOffline}">Offline</Button>
+
+                                </Grid>
+
+                                <TextBlock Grid.Row="1" Grid.Column="0" TextAlignment="Center" VerticalAlignment="Center">leak Check</TextBlock>
+                                <TextBox Grid.Row="1" Grid.Column="2"   TextAlignment="Center" VerticalAlignment="Center">0.34 mt/min</TextBox>
+                                <Grid Grid.Column="4" Grid.RowSpan="2">
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                    </Grid.RowDefinitions>
+
+                                    <Button  Grid.Row="2" Margin="2"  Command="{Binding TmHome}">Home</Button>
+                                    <Button  Grid.Row="3" Margin="2"  Command="{Binding Abort}">Abort</Button>
+                                </Grid>
+                            </Grid>
+                        </Border>
+                        <Border Grid.Row="1" Grid.Column="0" Background="#95b3d7" Margin="5,5,5,5" Padding="20,10" CornerRadius="5" Grid.ColumnSpan="2">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0">Leak Check</Button>
+                                <Button Grid.Column="2" Grid.Row="0" Command="{Binding PumpDown}" CommandParameter="SETM">Pump Down</Button>
+                                <Button Grid.Column="0" Grid.Row="2" Command="{Binding Vent}" CommandParameter="SETM">Vent</Button>
+                                <Button Grid.Column="2" Grid.Row="2">Pump Purge</Button>
+                            </Grid>
+                        </Border>
+                        <Border  Grid.Row="2" Grid.Column="0" Grid.RowSpan="2" Background="#95b3d7" Margin="5" Padding="20,40" CornerRadius="5" Grid.ColumnSpan="2">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0" Content="PMA Door Open"  Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMA,True"  IsEnabled="{Binding PMADoorIsOpen,Converter={StaticResource BoolToBool}}"></Button>
+                                <Button Grid.Column="2" Grid.Row="0" Content="PMA Door Close" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMA,False" IsEnabled="{Binding PMADoorIsOpen}"></Button>
+                                <Button Grid.Column="0" Grid.Row="2" Content="PMB Door Open"  Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMB,True"  IsEnabled="{Binding PMBDoorIsOpen,Converter={StaticResource BoolToBool}}"></Button>
+                                <Button Grid.Column="2" Grid.Row="2" Content="PMB Door Close" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMB,False" IsEnabled="{Binding PMBDoorIsOpen}"></Button>
+                                <Button Grid.Column="0" Grid.Row="4" Content="PMC Door Open"  Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMC,True"  IsEnabled="{Binding PMCDoorIsOpen}"></Button>
+                                <Button Grid.Column="2" Grid.Row="4" Content="PMC Door Close" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="PMC,False" IsEnabled="{Binding PMCDoorIsOpen,Converter={StaticResource BoolToBool}}"></Button>
+                            </Grid>
+                        </Border>
+                    </Grid>
+                </TabItem>
+                <TabItem Header="VCEA" Style="{StaticResource CustomTab}">
+                    <Grid>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                        </Grid.RowDefinitions>
+
+                        <Border Grid.Row="0" Grid.Column="0" Background="#95b3d7" Margin="5" CornerRadius="5" >
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="1.5*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="*"/>
+                                </Grid.ColumnDefinitions>
+                                <Grid Grid.ColumnSpan="5">
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition Width="*"/>
+                                        <ColumnDefinition Width="*"/>
+                                    </Grid.ColumnDefinitions>
+                                    <Button  Grid.Column="0" Margin="10,5" IsEnabled="{Binding RtDataValues[SETM.IsOffline],Mode=TwoWay}" Command="{Binding TMSetOnline}">Online</Button>
+                                    <Button  Grid.Column="1" Margin="10,5" IsEnabled="{Binding RtDataValues[SETM.IsOnline],Mode=TwoWay}" Command="{Binding TMSetOffline}">Offline</Button>
+
+                                </Grid>
+                                <TextBlock Grid.Row="1" Grid.Column="0" TextAlignment="Center" VerticalAlignment="Center">leak Check</TextBlock>
+                                <TextBox Grid.Row="1" Grid.Column="2"   TextAlignment="Center" VerticalAlignment="Center">0.34 mt/min</TextBox>
+                                <Grid Grid.Column="4" Grid.Row="1">
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                    </Grid.RowDefinitions>
+                                    <Button  Grid.Row="0" Margin="1" Command="{Binding VCEHome}">Home</Button>
+                                    <Button  Grid.Row="2" Margin="1" Command="{Binding VCEAbort}">Abort</Button>
+                                </Grid>
+                            </Grid>
+                        </Border>
+                        <Border  Grid.Row="1" Grid.Column="0"  Background="#95b3d7" Margin="5" Padding="20,10" CornerRadius="5">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0">Leak check</Button>
+                                <Button Grid.Column="2" Grid.Row="0"  Command="{Binding PumpDown}" CommandParameter="VCE1">Pump Down</Button>
+                                <Button Grid.Column="0" Grid.Row="2" Command="{Binding Vent}" CommandParameter="VCE1">Vent</Button>
+
+                                <Button Grid.Column="2" Grid.Row="2"  Command="{Binding VCEClear}">Clear Error</Button>
+                            </Grid>
+                        </Border>
+                        <Border Grid.Row="2" Grid.Column="0" Padding="20,10"  Background="#95b3d7" Margin="5" CornerRadius="5">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height=".5*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0" Command="{Binding MapCommand}">Mapping</Button>
+                                <Button Grid.Column="2" Grid.Row="0" Command="{Binding GoToLoadCommand}">Go to load position</Button>
+                                <Grid Grid.Column="0" Grid.Row="2">
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition Width="*"></ColumnDefinition>
+                                        <ColumnDefinition Width="22"></ColumnDefinition>
+                                    </Grid.ColumnDefinitions>
+                                    <Button Grid.Column="0" Command="{Binding GoToSlotCommand}">Go to slot</Button>
+                                    <TextBox Grid.Column="1" Width="22" Text="{Binding GoToSlotNumber,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" VerticalAlignment="Center" Padding="0,10"></TextBox>
+                                </Grid>
+                                <Button Grid.Column="2" Grid.Row="2" Command="{Binding HOMECommand}">Home  plant</Button>
+                            </Grid>
+                        </Border>
+                        <Border  Grid.Row="3" Grid.Column="0"  Padding="20,10"  Background="#95b3d7" Margin="5" CornerRadius="5">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height=".5*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="VCE1,True"  IsEnabled="{Binding VCEDoorIsOpen,Converter={StaticResource BoolToBool}}">Inner Door Open</Button>
+                                <Button Grid.Column="2" Grid.Row="0" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="VCE1,False" IsEnabled="{Binding VCEDoorIsOpen}">Inner Door Close</Button>
+                                <Button Grid.Column="0" Grid.Row="2" Command="{Binding OpenDoorCommand}" IsEnabled="{Binding VCEOutDoorIsOpen}">Outer Door open</Button>
+                                <Button Grid.Column="2" Grid.Row="2" Command="{Binding CloseDoorCommand}" IsEnabled="{Binding VCEOutDoorIsOpen,Converter={StaticResource BoolToBool}}">Outer Door Close</Button>
+                            </Grid>
+                        </Border>
+                    </Grid>
+                </TabItem>
+
+                <TabItem Header="VCEB" Style="{StaticResource CustomTab}">
+                    <Grid>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height=".5*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                        </Grid.RowDefinitions>
+
+                        <Border Grid.Row="0" Grid.Column="0" Background="#95b3d7" Margin="5" CornerRadius="5" >
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="1.5*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="*"/>
+                                </Grid.ColumnDefinitions>
+                                <Grid Grid.ColumnSpan="5">
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition Width="*"/>
+                                        <ColumnDefinition Width="*"/>
+                                    </Grid.ColumnDefinitions>
+                                    <Button  Grid.Column="0" Margin="10,5" IsEnabled="{Binding RtDataValues[SETM.IsOffline],Mode=TwoWay}" Command="{Binding TMSetOnline}">Online</Button>
+                                    <Button  Grid.Column="1" Margin="10,5" IsEnabled="{Binding RtDataValues[SETM.IsOnline],Mode=TwoWay}" Command="{Binding TMSetOffline}">Offline</Button>
+
+                                </Grid>
+                                <TextBlock Grid.Row="1" Grid.Column="0" TextAlignment="Center" VerticalAlignment="Center">leak Check</TextBlock>
+                                <TextBox Grid.Row="1" Grid.Column="2"   TextAlignment="Center" VerticalAlignment="Center">0.34 mt/min</TextBox>
+                                <Grid Grid.Column="4" Grid.Row="1">
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                    </Grid.RowDefinitions>
+                                    <Button  Grid.Row="0" Margin="1" Command="{Binding VCEHome}">Home</Button>
+                                    <Button  Grid.Row="2" Margin="1" Command="{Binding VCEAbort}">Abort</Button>
+                                </Grid>
+                            </Grid>
+                        </Border>
+                        <Border  Grid.Row="1" Grid.Column="0"  Background="#95b3d7" Margin="5" Padding="20,40" CornerRadius="5">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0">Leak check</Button>
+                                <Button Grid.Column="2" Grid.Row="0"  Command="{Binding PumpDown}" CommandParameter="VCE1">Pump Down</Button>
+                                <Button Grid.Column="0" Grid.Row="2" Command="{Binding Vent}" CommandParameter="VCE1">Vent</Button>
+
+                                <Button Grid.Column="2" Grid.Row="2"  Command="{Binding VCEClear}">Clear Error</Button>
+                            </Grid>
+                        </Border>
+                        <Border Grid.Row="2" Grid.Column="0" Padding="20,40"  Background="#95b3d7" Margin="5" CornerRadius="5">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height=".5*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0" Command="{Binding MapCommand}">Mapping</Button>
+                                <Button Grid.Column="2" Grid.Row="0" Command="{Binding GoToLoadCommand}">Go to load position</Button>
+                                <Grid Grid.Column="0" Grid.Row="2">
+                                    <Grid.ColumnDefinitions>
+                                        <ColumnDefinition Width="*"></ColumnDefinition>
+                                        <ColumnDefinition Width="22"></ColumnDefinition>
+                                    </Grid.ColumnDefinitions>
+                                    <Button Grid.Column="0" Command="{Binding GoToSlotCommand}">Go to slot</Button>
+                                    <TextBox Grid.Column="1" Width="22" Text="{Binding GoToSlotNumber,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" VerticalAlignment="Center" Padding="0,10"></TextBox>
+                                </Grid>
+                                <Button Grid.Column="2" Grid.Row="2" Command="{Binding HOMECommand}">Home  plant</Button>
+                            </Grid>
+                        </Border>
+                        <Border  Grid.Row="3" Grid.Column="0"  Padding="20,40"  Background="#95b3d7" Margin="5" CornerRadius="5">
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"/>
+                                    <RowDefinition Height=".5*"/>
+                                    <RowDefinition Height="*"/>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition Width="*"></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="VCE1,True"  IsEnabled="{Binding VCEDoorIsOpen,Converter={StaticResource BoolToBool}}">Inner Door Open</Button>
+                                <Button Grid.Column="2" Grid.Row="0" Command="{Binding ControlSlitDoorCommand}"  CommandParameter="VCE1,False" IsEnabled="{Binding VCEDoorIsOpen}">Inner Door Close</Button>
+                                <Button Grid.Column="0" Grid.Row="2" Command="{Binding OpenDoorCommand}" IsEnabled="{Binding VCEOutDoorIsOpen}">Outer Door open</Button>
+                                <Button Grid.Column="2" Grid.Row="2" Command="{Binding CloseDoorCommand}" IsEnabled="{Binding VCEOutDoorIsOpen,Converter={StaticResource BoolToBool}}">Outer Door Close</Button>
+                            </Grid>
+                        </Border>
+                    </Grid>
+                </TabItem>
+                <TabItem Header="SMIFA" Style="{StaticResource CustomTab}">
+                    <Grid>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height=".5*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                        </Grid.RowDefinitions>
+
+                        <Border Grid.Row="0" Grid.Column="0" Background="#95b3d7" Margin="5" CornerRadius="5" >
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="1.5*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="*"/>
+                                </Grid.ColumnDefinitions>
+                                <TextBlock Grid.Row="0" Grid.Column="0" TextAlignment="Center" VerticalAlignment="Center">Status</TextBlock>
+                                <TextBlock Grid.Row="1" Grid.Column="0" TextAlignment="Center" VerticalAlignment="Center">Action Info</TextBlock>
+                                <TextBox Grid.Row="1" Grid.Column="2"   TextAlignment="Center" VerticalAlignment="Center">HOME OK</TextBox>
+                                <TextBox Grid.Row="0" Grid.Column="2"   TextAlignment="Center" VerticalAlignment="Center">offline</TextBox>
+                                <Grid Grid.Column="4" Grid.RowSpan="2">
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                    </Grid.RowDefinitions>
+                                    <Button  Grid.Row="0" Margin="2">Online</Button>
+                                    <Button  Grid.Row="1" Margin="2">Offline</Button>
+                                    <Button  Grid.Row="2" Margin="2">Home</Button>
+                                </Grid>
+                            </Grid>
+                        </Border>
+                        <Border Grid.RowSpan="3" Grid.Row="1" Padding="20,40"  Background="#95b3d7" Margin="5" CornerRadius="5">
+                            <Grid>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition></RowDefinition>
+                                    <RowDefinition Height=".5*"></RowDefinition>
+                                    <RowDefinition></RowDefinition>
+                                    <RowDefinition Height=".5*"></RowDefinition>
+                                    <RowDefinition></RowDefinition>
+                                    <RowDefinition Height="3*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0" Content="Foup clamp"></Button>
+                                <Button Grid.Column="2" Grid.Row="0" Content="Foup unclamp"></Button>
+                                <Button Grid.Column="0" Grid.Row="2" Content="Open cassette"></Button>
+                                <Button Grid.Column="2" Grid.Row="2" Content="Close cassette"></Button>
+                                <Button Grid.Column="0" Grid.Row="4" Content="Load cassette"></Button>
+                                <Button Grid.Column="2" Grid.Row="4" Content="Unload cassette "></Button>
+                            </Grid>
+                        </Border>
+                    </Grid>
+                </TabItem>
+
+                <TabItem Header="SMIFB" Style="{StaticResource CustomTab}">
+                    <Grid>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height=".5*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="*"/>
+                        </Grid.RowDefinitions>
+
+                        <Border Grid.Row="0" Grid.Column="0" Background="#95b3d7" Margin="5" CornerRadius="5" >
+                            <Grid>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                    <RowDefinition Height="*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition Width="*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="1.5*"/>
+                                    <ColumnDefinition Width=".3*"/>
+                                    <ColumnDefinition Width="*"/>
+                                </Grid.ColumnDefinitions>
+                                <TextBlock Grid.Row="0" Grid.Column="0" TextAlignment="Center" VerticalAlignment="Center">Status</TextBlock>
+                                <TextBlock Grid.Row="1" Grid.Column="0" TextAlignment="Center" VerticalAlignment="Center">Action Info</TextBlock>
+                                <TextBox Grid.Row="1" Grid.Column="2"   TextAlignment="Center" VerticalAlignment="Center">HOME OK</TextBox>
+                                <TextBox Grid.Row="0" Grid.Column="2"   TextAlignment="Center" VerticalAlignment="Center">offline</TextBox>
+                                <Grid Grid.Column="4" Grid.RowSpan="2">
+                                    <Grid.RowDefinitions>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                        <RowDefinition Height="*"></RowDefinition>
+                                    </Grid.RowDefinitions>
+                                    <Button  Grid.Row="0" Margin="2">Online</Button>
+                                    <Button  Grid.Row="1" Margin="2">Offline</Button>
+                                    <Button  Grid.Row="2" Margin="2">Home</Button>
+                                </Grid>
+                            </Grid>
+                        </Border>
+                        <Border Grid.RowSpan="3" Grid.Row="1" Padding="20,40"  Background="#95b3d7" Margin="5" CornerRadius="5">
+                            <Grid>
+                                <Grid.ColumnDefinitions>
+                                    <ColumnDefinition></ColumnDefinition>
+                                    <ColumnDefinition Width=".5*"></ColumnDefinition>
+                                    <ColumnDefinition></ColumnDefinition>
+                                </Grid.ColumnDefinitions>
+                                <Grid.RowDefinitions>
+                                    <RowDefinition></RowDefinition>
+                                    <RowDefinition Height=".5*"></RowDefinition>
+                                    <RowDefinition></RowDefinition>
+                                    <RowDefinition Height=".5*"></RowDefinition>
+                                    <RowDefinition></RowDefinition>
+                                    <RowDefinition Height="3*"></RowDefinition>
+                                </Grid.RowDefinitions>
+                                <Button Grid.Column="0" Grid.Row="0" Content="Foup clamp"></Button>
+                                <Button Grid.Column="2" Grid.Row="0" Content="Foup unclamp"></Button>
+                                <Button Grid.Column="0" Grid.Row="2" Content="Open cassette"></Button>
+                                <Button Grid.Column="2" Grid.Row="2" Content="Close cassette"></Button>
+                                <Button Grid.Column="0" Grid.Row="4" Content="Load cassette"></Button>
+                                <Button Grid.Column="2" Grid.Row="4" Content="Unload cassette "></Button>
+                            </Grid>
+                        </Border>
+                    </Grid>
+                </TabItem>
+            </TabControl>
+        </Canvas>
+    </Canvas>
+</UserControl>

+ 28 - 0
Venus/Venus_MainPages/Views/DETMOperationView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace Venus_MainPages.Views
+{
+    /// <summary>
+    /// DETMOperationView.xaml 的交互逻辑
+    /// </summary>
+    public partial class DETMOperationView : UserControl
+    {
+        public DETMOperationView()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 80 - 0
Venus/Venus_RT/Config/TM/DeviceModelVenusDE_MF.xml

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<DeviceModelDefine type="DETM" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DeviceModel.xsd">
+	<IoValves>
+		<IoValve id="TMFastPumpValve" display="TM Fast Pump Valve" schematicId="FastPumpTM" unit="" isNc="true"
+	        isDefaultOpen="false" diOpen="" doOpen="DO_TM_Fast_Pump" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="TMSoftPumpValve" display="TM Soft Pump Valve" schematicId="SoftPumpTM" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_TM_Soft_Pump" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="VCEASoftPumpValve" display="VCEA Soft Pump Valve" schematicId="SoftPumpVCEA" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_VCEA_Soft_Pump" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="VCEAFastPumpValve" display="VCEA Fast Pump Valve" schematicId="FastPumpVCEA" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_VCEA_Fast_Pump" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="VCEBSoftPumpValve" display="VCEB Soft Pump Valve" schematicId="SoftPumpVCEB" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_VCEB_Soft_Pump" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="VCEBFastPumpValve" display="VCEB Fast Pump Valve" schematicId="FastPumpVCEB" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_VCEB_Fast_Pump" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="TMFastVentValve" display="TM Fast Vent Valve" schematicId="FastVentTM" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_TM_Fast_Vent" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="TMSoftVentValve" display="TM Soft Vent Valve" schematicId="SoftVentTM" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_TM_Soft_Vent" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="VCEASoftVentValve" display="VCEA Soft Vent Valve" schematicId="SoftVentVCEA" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_VCEA_Soft_Vent" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="VCEAFastVentValve" display="VCEA Fast Vent Valve" schematicId="FastVentVCEA" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_VCEA_Fast_Vent" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="VCEBSoftVentValve" display="VCEB Soft Vent Valve" schematicId="SoftVentVCEB" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_VCEB_Soft_Vent" diCloseSensor="" diOpenSensor="" />
+		<IoValve id="VCEBFastVentValve" display="VCEB Fast Vent Valve" schematicId="FastVentVCEB" unit="" isNc="true"
+			isDefaultOpen="false" diOpen="" doOpen="DO_VCEB_Fast_Vent" diCloseSensor="" diOpenSensor="" />
+	</IoValves>
+
+	<IoSensors>
+
+		<IoSensor id="PMASlitDoorOpenEnable" display="PMA Slit Door Open Enable"  schematicId="" unit="" di="DI_PMA_SLIT_DOOR_OPEN_ENABLE" isLowAsNormal="" textOutTrigValue="false"
+						infoText="" warningText="" alarmText="" />
+		<IoSensor id="PMBSlitDoorOpenEnable" display="PMB Slit Door Open Enable"  schematicId="" unit="" di="DI_PMB_SLIT_DOOR_OPEN_ENABLE" isLowAsNormal="" textOutTrigValue="false"
+				infoText="" warningText="" alarmText="" />
+		<IoSensor id="PMCSlitDoorOpenEnable" display="PMC Slit Door Open Enable"  schematicId="" unit="" di="DI_PMC_SLIT_DOOR_OPEN_ENABLE" isLowAsNormal="" textOutTrigValue="false"
+				infoText="" warningText="" alarmText="" />
+		<IoSensor id="TMATMSensor" display="TM ATM Sensor"  schematicId="" unit="" di="DI_TM_ATM_SW" isLowAsNormal="" textOutTrigValue="false"
+				infoText="" warningText="" alarmText="" />
+		<IoSensor id="VCEAATMSensor" display="VCEA ATM Sensor"  schematicId="" unit="" di="DI_VCEA_ATM_SW" isLowAsNormal="" textOutTrigValue="false"
+				infoText="" warningText="" alarmText="" />
+		<IoSensor id="VCEBATMSensor" display="VCEB ATM Sensor"  schematicId="" unit="" di="DI_VCEB_ATM_SW" isLowAsNormal="" textOutTrigValue="false"
+				infoText="" warningText="" alarmText="" />
+	</IoSensors>
+	<IoCylinders assembly="Venus_RT" classType="Venus_RT.Devices.IoCylinder">
+		<IoCylinder id="VCEASlitDoor" display="VCEA Slit Door" schematicId="" unit="" doMotorRelay=""
+                doON="DO_VCEA_SlitDoor_Open" doOFF="DO_VCEA_SlitDoor_Close" diON="DI_VCEA_SlitDoor_Open_POS" diOFF="DI_VCEA_SlitDoor_Close_POS" />
+		<IoCylinder id="VCEBSlitDoor" display="VCEB Slit Door" schematicId="" unit="" doMotorRelay=""
+				doON="DO_VCEB_SlitDoor_Open" doOFF="DO_VCEB_SlitDoor_Close" diON="DI_VCEB_SlitDoor_Open_POS" diOFF="DI_VCEB_SlitDoor_Close_POS" />
+		<IoCylinder id="PMASlitDoor" display="PMA Slit Door" schematicId="" unit="" doMotorRelay=""
+                doON="DO_PMA_SlitDoor_Open" doOFF="DO_PMA_SlitDoor_Close" diON="DI_PMA_SlitDoor_Open_POS" diOFF="DI_PMA_SlitDoor_Close_POS" />
+		<IoCylinder id="PMBSlitDoor" display="PMB Slit Door" schematicId="" unit="" doMotorRelay=""									   
+				doON="DO_PMB_SlitDoor_Open" doOFF="DO_PMB_SlitDoor_Close" diON="DI_PMB_SlitDoor_Open_POS" diOFF="DI_PMB_SlitDoor_Close_POS" />
+		<IoCylinder id="PMCSlitDoor" display="PMC Slit Door" schematicId="" unit="" doMotorRelay=""									   
+                doON="DO_PMC_SlitDoor_Open" doOFF="DO_PMC_SlitDoor_Close" diON="DI_PMC_SlitDoor_Open_POS" diOFF="DI_PMC_SlitDoor_Close_POS" />
+	</IoCylinders>
+
+	<IoPressureMeters assembly="Venus_RT" classType="Venus_RT.Devices.IODevices.IoPressureMeter">
+		<IoPressureMeter id="TMPressure" display="TM Pressure" schematicId="" unit="mTorr"
+						    aiValue="AI_TM_Pressure" diGaugeFail="" scPrecision="" scOffset=""/>
+		<IoPressureMeter id="TMPipelinePressure" display="TM Pipeline Pressure" schematicId="" unit="mTorr"
+						    aiValue="AI_Foreline_Pressure" diGaugeFail="" scPrecision="" scOffset=""/>
+		<IoPressureMeter id="VCEAPressure" display="VCEA Pressure" schematicId="" unit="mTorr"
+						    aiValue="AI_Left_VCE_Pressure" diGaugeFail="" scPrecision="" scOffset=""/>
+		<IoPressureMeter id="VCEBPressure" display="VCEB Pressure" schematicId="" unit="mTorr"
+						    aiValue="AI_Right_VCE_Pressure" diGaugeFail="" scPrecision="" scOffset=""/>
+	</IoPressureMeters>
+
+	<IoMfcs assembly="Venus_RT" classType="Venus_RT.Devices.IODevices.IoMfc">
+		<IoMfc id="TM_MFC1" display="MFC1" schematicId="MFC1" unit="sccm"
+				aiFlow="AI_MFC_Flow" aoFlow="AO_MFC_Flow_Setpoint" diOffline="" aoRange=""
+				diPressureAlarm="DI_SYSTEM_N2_Pressure_SW"/>
+	</IoMfcs>
+
+	<IoHongHuControls assembly="Venus_RT" classType="Venus_RT.Devices.IODevices.IoHongHuControl">
+		<IoHongHuControl id="PressureControl" display="PressureControl" schematicId="PressureControl" unit="sccm" doMFCFlow="DO_Flow_Mode" doPressureMode="DO_Pressure_Mode" doVent="DO_TM_Soft_Vent" doPump="DO_TM_Soft_Pumping" aoMFCFlow="AO_MFC_Flow_Setpoint" aoPressure="AO_TM_Pressure_SetPoint"/>
+	</IoHongHuControls>
+
+</DeviceModelDefine>
+

+ 208 - 0
Venus/Venus_RT/Config/TM/_ioDefineVenusDE_MF.xml

@@ -0,0 +1,208 @@
+<?xml version='1.0'?>
+<IO_DEFINE xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
+	<Dig_In>
+		<DI_ITEM Index="0"  Name="DI_Smif1_Ready_to_load"		Device="" Addr="w0.00" Note="System CDA Pressure ok" />
+		<DI_ITEM Index="1"  Name="DI_Smif1_Ready_to_unload"		Device="" Addr="w0.01" Note="System CDA Pressure ok" />
+		<DI_ITEM Index="2"  Name="DI_Smif2_Ready_to_load"		Device="" Addr="w0.02" Note="System CDA Pressure ok" />
+		<DI_ITEM Index="3"  Name="DI_Smif2_Ready_to_unload"		Device="" Addr="w0.03" Note="System CDA Pressure ok" />
+		<DI_ITEM Index="4"  Name="DI_PMA_SLIT_DOOR_OPEN_ENABLE"	Device="" Addr="w0.04" Note="PMA SLIT DOOR OPEN  ENABLE" />
+		<DI_ITEM Index="5"  Name="DI_PMB_SLIT_DOOR_OPEN_ENABLE"	Device="" Addr="w0.05" Note="PMB SLIT DOOR OPEN  ENABLE" />
+		<DI_ITEM Index="6"  Name="DI_PMC_SLIT_DOOR_OPEN_ENABLE"	Device="" Addr="w0.06" Note="PMC SLIT DOOR OPEN  ENABLE" />
+		<DI_ITEM Index="7"  Name="DI_ROBOT_TO_VCEA_RETRACT"		Device="" Addr="w0.07" Note="ROBOT_TO_VCEA_RETRACT" />
+		<DI_ITEM Index="8"  Name="DI_ROBOT_TO_VCEB_RETRACT"		Device="" Addr="w0.08" Note="ROBOT_TO_VCEB_RETRACT" />
+		<DI_ITEM Index="9"  Name="DI_ROBOT_TO_PMA_RETRACT"		Device="" Addr="w0.09" Note="ROBOT_TO_PMA_RETRACT" />
+		<DI_ITEM Index="10" Name="DI_ROBOT_TO_PMB_RETRACT"		Device="" Addr="w0.10" Note="ROBOT_TO_PMB_RETRACT" />
+		<DI_ITEM Index="11" Name="DI_ROBOT_TO_PMC_RETRACT"		Device="" Addr="w0.11" Note="ROBOT_TO_PMC_RETRACT" />
+		<DI_ITEM Index="12" Name="DI_ROBOT_TO_PMD_RETRACT"		Device="" Addr="w0.12" Note="ROBOT_TO_PMD_RETRACT" />
+		<DI_ITEM Index="13" Name="DI_VCEA_Wafer_Sensor"			Device="" Addr="w0.13" Note="VCEA Wafer Sensor" />
+		<DI_ITEM Index="14" Name="DI_VCEB_Wafer_Sensor"			Device="" Addr="w0.14" Note="VCEB Wafer Sensor" />
+		<DI_ITEM Index="15" Name="DI_PMA_Wafer_Sensor"			Device="" Addr="w0.15" Note="PMA Wafer Sensor" />
+		<DI_ITEM Index="16" Name="DI_PMB_Wafer_Sensor"			Device="" Addr="w1.00" Note="PMB Wafer Sensor" />
+		<DI_ITEM Index="17" Name="DI_PMC_Wafer_Sensor"			Device="" Addr="w1.01" Note="PMC Wafer Sensor" />
+		<DI_ITEM Index="18" Name="DI_PMD_Wafer_Sensor"			Device="" Addr="w1.02" Note="PMD Wafer Sensor" />
+		<DI_ITEM Index="19" Name="DI_VCEA_SlitDoor_Open_POS"	Device="" Addr="w1.03" Note="VCEA SlitDoor Open POS" />
+		<DI_ITEM Index="20" Name="DI_VCEA_SlitDoor_Close_POS"	Device="" Addr="w1.04" Note="VCEA SlitDoor Close POS" />
+		<DI_ITEM Index="21" Name="DI_VCEB_SlitDoor_Open_POS"	Device="" Addr="w1.05" Note="VCEB SlitDoor Open POS" />
+		<DI_ITEM Index="22" Name="DI_VCEB_SlitDoor_Close_POS"	Device="" Addr="w1.06" Note="VCEB SlitDoor Close POS" />
+		<DI_ITEM Index="23" Name="DI_PMA_SlitDoor_Open_POS"		Device="" Addr="w1.07" Note="PMA SlitDoor Open POS" />
+		<DI_ITEM Index="24" Name="DI_PMA_SlitDoor_Close_POS"	Device="" Addr="w1.08" Note="PMA SlitDoor Close POS" />
+		<DI_ITEM Index="25" Name="DI_PMB_SlitDoor_Open_POS"		Device="" Addr="w1.09" Note="PMB SlitDoor Open POS" />
+		<DI_ITEM Index="26" Name="DI_PMB_SlitDoor_Close_POS"	Device="" Addr="w1.10" Note="PMB SlitDoor Close POS" />
+		<DI_ITEM Index="27" Name="DI_PMC_SlitDoor_Open_POS"		Device="" Addr="w1.11" Note="PMC SlitDoor Open POS" />
+		<DI_ITEM Index="28" Name="DI_PMC_SlitDoor_Close_POS"	Device="" Addr="w1.12" Note="PMC SlitDoor Close POS" />
+		<DI_ITEM Index="29" Name="DI_TM_N2_1_SW"				Device="" Addr="w1.13" Note="TM N2 1 SW" />
+		<DI_ITEM Index="30" Name="DI_TM_N2_2_SW"				Device="" Addr="w1.14" Note="TM_N2 2 SW" />
+		<DI_ITEM Index="31" Name="DI_TM_CDA_SW"					Device="" Addr="w1.15" Note="TM CDA SW" />
+		<DI_ITEM Index="32" Name="DI_TM_He_SW"					Device="" Addr="w2.00" Note="TM He SW" />
+		<DI_ITEM Index="33" Name="DI_LEAK"						Device="" Addr="w2.01" Note="LEAK" />
+		<DI_ITEM Index="34" Name="DI_VCEA_ATM_SW"				Device="" Addr="w2.02" Note="VCEA ATM SW" />
+		<DI_ITEM Index="35" Name="DI_VCEB_ATM_SW"				Device="" Addr="w2.03" Note="VCEB ATM SW" />
+		<DI_ITEM Index="36" Name="DI_TM_ATM_SW"					Device="" Addr="w2.04" Note="TM ATM SW" />
+		<DI_ITEM Index="37" Name=""								Device="" Addr=""		Note="" />
+		<DI_ITEM Index="38" Name=""								Device="" Addr=""		Note="" />
+		<DI_ITEM Index="39" Name=""								Device="" Addr=""		Note="" />
+		<DI_ITEM Index="40" Name="DI_AC_RACK_FAN_OK"			Device="" Addr="w2.08"	Note="AC RACK FAN OK" />
+		<DI_ITEM Index="41" Name="DI_AC_RACK_SMOKE_Out1"		Device="" Addr="w2.09"	Note="AC RACK 烟感out1" />
+		<DI_ITEM Index="42" Name="DI_AC_RACK_SMOKE_Out2"		Device="" Addr="w2.10"	Note="AC RACK 烟感out2" />
+		<DI_ITEM Index="43" Name="DI_FACTORY_SMOKE_Out"			Device="" Addr="w2.11"	Note="厂房烟感 out" />
+		<DI_ITEM Index="44" Name="DI_Abnormal_Exhaust_Gas"		Device="" Addr="w2.12"	Note="尾气处理异常" />
+		<DI_ITEM Index="45" Name="DI_VCEA_Cassette_Present"		Device="" Addr="w2.13"	Note="VCEA-cassette  present" />
+		<DI_ITEM Index="46" Name="DI_VCEB_Cassette_Present"		Device="" Addr="w2.14"	Note="VCEB-cassette  present" />
+		<DI_ITEM Index="47" Name="DI_VCEA_ADR_LOCKED"			Device="" Addr="w2.15"	Note="VCE-A-ADR-LOCKED" />
+		<DI_ITEM Index="48" Name="DI_VCEB_ADR_LOCKED"			Device="" Addr="w3.00"  Note="VCE-B-ADR-LOCKED" />
+		<DI_ITEM Index="49" Name="DI_TM_LID_Close"				Device="" Addr="w3.01"  Note="TM-LID-close" />
+		<DI_ITEM Index="50" Name="DI_LEFT_SMIF_READY"			Device="" Addr="w3.02"  Note="LEFT-SMIF-READY" />
+		<DI_ITEM Index="51" Name="DI_RIGHT_SMIF_READY"			Device="" Addr="w3.03"  Note="RIGHT-SMIF-READY" />
+		<DI_ITEM Index="52" Name="DI_LEFT_SMIF_POD_INPLACE"		Device="" Addr="w3.04"  Note="LEFT-SMIF-POD IN PLACE" />
+		<DI_ITEM Index="53" Name="DI_RIGHT_SMIF_POD_INPLACE"	Device="" Addr="w3.05"  Note="RIGHT-SMIF-POD IN PLACE" />
+		<DI_ITEM Index="54" Name="DI_LEFT_SMIF_ERRORE"			Device="" Addr="w3.06"  Note="LEFT-SMIF-ERROR" />
+		<DI_ITEM Index="55" Name="DI_RIGHT_SMIF_ERROR"			Device="" Addr="w3.07"  Note="RIGHT-SMIF-ERROR" />
+		<DI_ITEM Index="56" Name="DI_VCEA_EXTEND_ENABLE"		Device="" Addr="w3.08"  Note="VCE-A-EXTEND-ENABLE" />
+		<DI_ITEM Index="57" Name="DI_VCEB_EXTEND_ENABLE"		Device="" Addr="w3.09"  Note="VCE-B-EXTEND-ENABLE" />
+		<DI_ITEM Index="58" Name="DI_PMA_EXTEND_ENABLE"			Device="" Addr="w3.10"  Note="PMA-EXTEND-ENABLE" />
+		<DI_ITEM Index="59" Name="DI_PMB_EXTEND_ENABLE"			Device="" Addr="w3.11"  Note="PMB-EXTEND-ENABLE" />
+		<DI_ITEM Index="60" Name="DI_PMC_EXTEND_ENABLE"			Device="" Addr="w3.12"  Note="PMC-EXTEND-ENABLE" />
+		<DI_ITEM Index="61" Name="DI_Safty_Alarm"				Device="" Addr="w3.13"  Note="Safty-Alarm" />
+		<DI_ITEM Index="62" Name="DI_TM_Soft_Pump"				Device="" Addr="w5.00"  Note="TM-Soft-pump" />
+		<DI_ITEM Index="63" Name="DI_TM_Soft_Vent"				Device="" Addr="w5.01"  Note="TM-Soft-vent" />
+		
+	</Dig_In>
+	<Dig_Out>
+		<DO_ITEM Index="0"	 Name="DO_VCEA_SlitDoor_Open" Device="" Addr="w200.00" Note="VCE-A-slit-door-open"/>
+		<DO_ITEM Index="1"	 Name="DO_VCEA_SlitDoor_Close" Device="" Addr="w200.01" Note="VCE-A-slit-door-close"/>
+		<DO_ITEM Index="2"	 Name="DO_VCEB_SlitDoor_Open" Device="" Addr="w200.02" Note="VCE-B-slit-door-open"/>
+		<DO_ITEM Index="3"	 Name="DO_VCEB_SlitDoor_Close" Device="" Addr="w200.03" Note="VCE-B-slit-door-close"/>
+		<DO_ITEM Index="4"	 Name="DO_PMA_SlitDoor_Open" Device="" Addr="w200.04" Note="PMA-slit-door-open"/>
+		<DO_ITEM Index="5"	 Name="DO_PMA_SlitDoor_Close" Device="" Addr="w200.05" Note="PMA-slit-door-close"/>
+		<DO_ITEM Index="6"	 Name="DO_PMB_SlitDoor_Open" Device="" Addr="w200.06" Note="PMB-slit-door-open"/>
+		<DO_ITEM Index="7"   Name="DO_PMB_SlitDoor_Close" Device="" Addr="w200.07" Note="PMB-slit-door-close"/>
+		<DO_ITEM Index="8"   Name="DO_PMC_SlitDoor_Open" Device="" Addr="w200.08" Note="PMC-slit-door-open"/>
+		<DO_ITEM Index="9"   Name="DO_PMC_SlitDoor_Close" Device="" Addr="w200.09" Note="PMC-slit-door-close"/>
+		<DO_ITEM Index="10"  Name="DO_TM_Fast_Pump" Device="" Addr="w200.10" Note="TM-Fast-Pump"/>
+		<DO_ITEM Index="11"  Name="DO_TM_Soft_Pump" Device="" Addr="w200.11" Note="TM-Soft-Pump"/>
+		<DO_ITEM Index="12"  Name="DO_TM_Fast_Vent" Device="" Addr="w200.12" Note="TM-Fast-Vent"/>
+		<DO_ITEM Index="13"  Name="DO_TM_Soft_Vent" Device="" Addr="w200.13" Note="TM-Soft-Vent"/>
+		<DO_ITEM Index="14"  Name="DO_VCEA_Fast_Pump" Device="" Addr="w200.14" Note="VCE-A-Fast-Pump"/>
+		<DO_ITEM Index="15"  Name="DO_VCEA_Soft_Pump" Device="" Addr="w200.15" Note="VCE-A-Soft-Pump"/>
+		<DO_ITEM Index="16"  Name="DO_VCEB_Fast_Pump" Device="" Addr="w201.00" Note="VCE-B-Fast-Pump"/>
+		<DO_ITEM Index="17"  Name="DO_VCEB_Soft_Pump" Device="" Addr="w201.01" Note="VCE-B-Soft-Pump"/>
+		<DO_ITEM Index="18"  Name="DO_VCEA_Fast_Vent" Device="" Addr="w201.02" Note="VCE-A-Fast-Vent"/>
+		<DO_ITEM Index="19"  Name="DO_VCEA_Soft_Vent" Device="" Addr="w201.03" Note="VCE-A-Soft-Vent"/>
+		<DO_ITEM Index="20"  Name="DO_VCEB_Fast_Vent" Device="" Addr="w201.04" Note="VCE-B-Fast-Vent"/>
+		<DO_ITEM Index="21"  Name="DO_VCEB_Soft_Vent" Device="" Addr="w201.05" Note="VCE-B-Soft-Vent"/>
+		<DO_ITEM Index="22"  Name="DO_Water_Valve_IN" Device="" Addr="w201.06" Note="Water-Valve-IN"/>
+		<DO_ITEM Index="23"  Name="DO_BUZZER1" Device="" Addr="w201.07" Note="BUZZER1"/>
+		<DO_ITEM Index="24"  Name="DO_BUZZER2" Device="" Addr="w201.08" Note="BUZZER2"/>
+		<DO_ITEM Index="25"  Name="DO_RED" Device="" Addr="w201.09" Note="RED"/>
+		<DO_ITEM Index="26"  Name="DO_ORANGE" Device="" Addr="w201.10" Note="ORANGE"/>
+		<DO_ITEM Index="27"  Name="DO_GREEN" Device="" Addr="w201.11" Note="GREEN"/>
+		<DO_ITEM Index="28"  Name="DO_BLUE" Device="" Addr="w201.12" Note="BLUE"/>
+		<DO_ITEM Index="29"  Name="DO_Allow_PowerOff" Device="" Addr="w201.13" Note="系统允许断电"/>
+		<DO_ITEM Index="30"  Name="DO_Smif1_Load_Unload" Device="" Addr="w201.15" Note="1#smif load/unload"/>
+		<DO_ITEM Index="31"  Name="DO_Smif2_Load_Unload" Device="" Addr="w202.00" Note="2#smif load/unload"/>
+	</Dig_Out>
+	<Ana_Out>
+		<AO_ITEM Index="8" Name="AO_MFC_Flow_Setpoint" BufferOffset="8" Device="" Addr="d1016"  Note="MFC Flow Setpoint" />
+		<AO_ITEM Index="9" Name="AO_TM_Pressure_SetPoint" BufferOffset="50" Device="" Addr="d1018"  Note="TM Pressure Setpoint" />
+		<AO_ITEM Index="1" Name="" BufferOffset="" />
+		<AO_ITEM Index="2" Name="" BufferOffset=""  />
+		<AO_ITEM Index="3" Name="" BufferOffset="" />
+		<AO_ITEM Index="4" Name="" BufferOffset="" />
+		<AO_ITEM Index="6" Name="" BufferOffset="" />
+		<AO_ITEM Index="7" Name="" BufferOffset=""  />
+		<AO_ITEM Index="8" Name="" BufferOffset=""/>
+		<AO_ITEM Index="9" Name="" BufferOffset="" />
+		<AO_ITEM Index="10" Name="" BufferOffset="" />
+		<AO_ITEM Index="11" Name="" BufferOffset=""  />
+		<AO_ITEM Index="12" Name="" BufferOffset="" />
+		<AO_ITEM Index="13" Name="" BufferOffset="" />
+		<AO_ITEM Index="14" Name="" BufferOffset="" />
+		<AO_ITEM Index="15" Name="" BufferOffset="" />
+		<AO_ITEM Index="16" Name="" BufferOffset="" />
+		<AO_ITEM Index="17" Name="" BufferOffset="" />
+		<AO_ITEM Index="18" Name="" BufferOffset="" />
+		<AO_ITEM Index="19" Name="" BufferOffset="" />
+		<AO_ITEM Index="20" Name="" BufferOffset="" />
+		<AO_ITEM Index="21" Name="" />
+		<AO_ITEM Index="22" Name="" />
+		<AO_ITEM Index="23" Name="" />
+		<AO_ITEM Index="24" Name="" />
+		<AO_ITEM Index="25" Name="" />
+		<AO_ITEM Index="26" Name="" />
+		<AO_ITEM Index="27" Name="" />
+		<AO_ITEM Index="28" Name="" />
+		<AO_ITEM Index="29" Name="" />
+		<AO_ITEM Index="30" Name="" />
+		<AO_ITEM Index="31" Name="" />
+		<AO_ITEM Index="32" Name="" />
+		<AO_ITEM Index="33" Name="" />
+		<AO_ITEM Index="34" Name="" />
+		<AO_ITEM Index="35" Name="" />
+		<AO_ITEM Index="36" Name="" />
+		<AO_ITEM Index="37" Name="" />
+		<AO_ITEM Index="38" Name="" />
+		<AO_ITEM Index="39" Name="" />
+		<AO_ITEM Index="40" Name="" />
+		<AO_ITEM Index="41" Name="" />
+		<AO_ITEM Index="42" Name="" />
+		<AO_ITEM Index="43" Name="" />
+		<AO_ITEM Index="44" Name="" />
+		<AO_ITEM Index="45" Name="" />
+		<AO_ITEM Index="46" Name="" />
+		<AO_ITEM Index="47" Name="" />
+		<AO_ITEM Index="48" Name="" />
+		<AO_ITEM Index="49" Name="" />
+	</Ana_Out>
+	<Ana_In>
+		<AI_ITEM Index="0" Name="AI_Left_VCE_Pressure"  BufferOffset="0" Device="" Addr="d2000" />
+		<AI_ITEM Index="1" Name="AI_Right_VCE_Pressure"  BufferOffset="2" Device="" Addr="d2002" />
+		<AI_ITEM Index="2" Name="AI_TM_Pressure"  BufferOffset="4" Device="" Addr="d2004"/>
+		<AI_ITEM Index="3" Name="AI_MFC_Flow"  BufferOffset="6" Device="" Addr="d2006"/>
+		<AI_ITEM Index="4" Name="AI_VCE_Foreline_Pressure"  BufferOffset="8" Device="" Addr="d2008"/>
+		<AI_ITEM Index="5" Name=""/>
+		<AI_ITEM Index="6" Name="AI_TM_Foreline_Pressure"  BufferOffset="12" Device="" Addr="d2012"/>
+		<AI_ITEM Index="7" Name=""/>
+		<AI_ITEM Index="8" Name=""/>
+		<AI_ITEM Index="9" Name=""/>
+		<AI_ITEM Index="10" Name="" />
+		<AI_ITEM Index="11" Name=""/>
+		<AI_ITEM Index="12" Name=""/>
+		<AI_ITEM Index="13" Name=""/>
+		<AI_ITEM Index="14" Name=""/>
+		<AI_ITEM Index="15" Name=""/>
+		<AI_ITEM Index="16" Name=""/>
+		<AI_ITEM Index="17" Name=""/>
+		<AI_ITEM Index="18" Name=""/>
+		<AI_ITEM Index="19" Name=""/>
+		<AI_ITEM Index="20" Name=""/>
+		<AI_ITEM Index="21" Name="" />
+		<AI_ITEM Index="22" Name=""/>
+		<AI_ITEM Index="23" Name=""/>
+		<AI_ITEM Index="24" Name=""/>
+		<AI_ITEM Index="25" Name=""/>
+		<AI_ITEM Index="26" Name="" />
+		<AI_ITEM Index="27" Name="" />
+		<AI_ITEM Index="28" Name="" />
+		<AI_ITEM Index="29" Name="" />
+		<AI_ITEM Index="30" Name="" />
+		<AI_ITEM Index="31" Name="" />
+		<AI_ITEM Index="32" Name="" />
+		<AI_ITEM Index="33" Name="" />
+		<AI_ITEM Index="34" Name="" />
+		<AI_ITEM Index="35" Name="" />
+		<AI_ITEM Index="36" Name="" />
+		<AI_ITEM Index="37" Name="" />
+		<AI_ITEM Index="38" Name="" />
+		<AI_ITEM Index="39" Name="" />
+		<AI_ITEM Index="40" Name="" />
+		<AI_ITEM Index="41" Name="" />
+		<AI_ITEM Index="42" Name="" />
+		<AI_ITEM Index="43" Name="" />
+		<AI_ITEM Index="44" Name="" />
+		<AI_ITEM Index="45" Name="" />
+		<AI_ITEM Index="46" Name="" />
+		<AI_ITEM Index="47" Name="" />
+		<AI_ITEM Index="48" Name="" />
+		<AI_ITEM Index="49" Name="" />
+	</Ana_In>
+</IO_DEFINE>

+ 1 - 1
Venus/Venus_RT/Devices/JetVenusDEPM.cs

@@ -799,7 +799,7 @@ namespace Venus_RT.Devices
                 OpenValve(ValveType.Purge, true);
                 OpenValve(ValveType.GasFinal, false);
                 //OpenValve(ValveType.N2, true);
-                OpenValve(ValveType.PVN22, true);
+                //OpenValve(ValveType.PVN22, true);
                 TurnPendulumValve(true);
                 SetPVPressure(pressureSetpoint);
                 return true;

+ 1 - 1
Venus/Venus_RT/Devices/JetVenusSEPM.cs

@@ -1359,7 +1359,7 @@ namespace Venus_RT.Devices
                 SetPVPressure(pressureSetpoint);
                 OpenValve(ValveType.PV14, true);
                 OpenValve(ValveType.GasFinal, false);
-                OpenValve(ValveType.PVN22, true);
+                //OpenValve(ValveType.PVN22, true);
                 return true;
             }
             else

+ 66 - 1
Venus/Venus_RT/Modules/PMs/GasBoxLeakCheckRoutine.cs

@@ -249,7 +249,40 @@ namespace Venus_RT.Modules.PMs
             _chamber.OpenValve(ValveType.PV21, false);
             _chamber.OpenValve(ValveType.PV31, false);
             _chamber.OpenValve(ValveType.PV41, false);
-            if(_chamber.ChamberType==JetChamber.VenusSE|| _chamber.ChamberType == JetChamber.VenusDE)
+            if (_gasLineNums.Contains(5))
+            {
+                _chamber.OpenValve(ValveType.PV51, false);
+            }
+            if (_gasLineNums.Contains(6))
+            {
+                _chamber.OpenValve(ValveType.PV61, false);
+            }
+            if (_gasLineNums.Contains(7))
+            {
+                _chamber.OpenValve(ValveType.PV71, false);
+            }
+            if (_gasLineNums.Contains(8))
+            {
+                _chamber.OpenValve(ValveType.PV81, false);
+            }
+            if (_gasLineNums.Contains(9))
+            {
+                _chamber.OpenValve(ValveType.PV91, false);
+            }
+            if (_gasLineNums.Contains(10))
+            {
+                _chamber.OpenValve(ValveType.PVA1, false);
+            }
+            if (_gasLineNums.Contains(11))
+            {
+                _chamber.OpenValve(ValveType.PVB1, false);
+            }
+            if (_gasLineNums.Contains(12))
+            {
+                _chamber.OpenValve(ValveType.PVC1, false);
+            }
+
+            if (_chamber.ChamberType==JetChamber.VenusSE|| _chamber.ChamberType == JetChamber.VenusDE)
             {
                 _chamber.OpenValve(ValveType.PVN22, false);
             }
@@ -278,6 +311,38 @@ namespace Venus_RT.Modules.PMs
             _chamber.OpenValve(ValveType.PV21, false);
             _chamber.OpenValve(ValveType.PV31, false);
             _chamber.OpenValve(ValveType.PV41, false);
+            if (_gasLineNums.Contains(5))
+            {
+                _chamber.OpenValve(ValveType.PV51, false);
+            }
+            if (_gasLineNums.Contains(6))
+            {
+                _chamber.OpenValve(ValveType.PV61, false);
+            }
+            if (_gasLineNums.Contains(7))
+            {
+                _chamber.OpenValve(ValveType.PV71, false);
+            }
+            if (_gasLineNums.Contains(8))
+            {
+                _chamber.OpenValve(ValveType.PV81, false);
+            }
+            if (_gasLineNums.Contains(9))
+            {
+                _chamber.OpenValve(ValveType.PV91, false);
+            }
+            if (_gasLineNums.Contains(10))
+            {
+                _chamber.OpenValve(ValveType.PVA1, false);
+            }
+            if (_gasLineNums.Contains(11))
+            {
+                _chamber.OpenValve(ValveType.PVB1, false);
+            }
+            if (_gasLineNums.Contains(12))
+            {
+                _chamber.OpenValve(ValveType.PVC1, false);
+            }
         }
     }
 }

+ 43 - 5
Venus/Venus_RT/Modules/PMs/PMEntity.cs

@@ -123,6 +123,7 @@ namespace Venus_RT.Modules.PMs
         private readonly StartDryPumpRoutine _startDryPumpRoutine;
         private readonly StartTurboPumpRoutine _startTurboPumpRoutine;
         private readonly VentRoutine _ventRoutine;
+        private readonly VenusVentRoutine _venusVentRoutine;
         private readonly PumpDownRoutine _pumpRoutine;
         //private readonly LoadLockVentRoutine _ventLoadLockRoutine;
         //private readonly LoadLockPumpRoutine _pumpLoadLockRoutine;
@@ -434,6 +435,7 @@ namespace Venus_RT.Modules.PMs
             _startDryPumpRoutine = new StartDryPumpRoutine(_chamber);
             _startTurboPumpRoutine = new StartTurboPumpRoutine(_chamber);
             _ventRoutine = new VentRoutine(_chamber);
+            _venusVentRoutine = new VenusVentRoutine(_chamber);
             _pumpRoutine = new PumpDownRoutine(_chamber);
             //_ventLoadLockRoutine = new LoadLockVentRoutine(_chamber);
             //_pumpLoadLockRoutine = new LoadLockPumpRoutine(_chamber);
@@ -663,7 +665,7 @@ namespace Venus_RT.Modules.PMs
             DATA.Subscribe($"{Module}.IsInit", () => IsInit, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.IsOnline", () => _isOnline, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-            DATA.Subscribe($"{Module}.VentingFlag", () => _ventRoutine.VentingFlag, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe($"{Module}.VentingFlag", () => ChamberType == JetChamber.VenusSE || ChamberType == JetChamber.VenusDE ? _venusVentRoutine.VentingFlag: _ventRoutine.VentingFlag, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             //DATA.Subscribe($"{Module}.GetLeakCheckDatas", () => LeakCheckDataRecorder.GetAllLeakCheckData(Module.ToString()));
 
 
@@ -905,12 +907,30 @@ namespace Venus_RT.Modules.PMs
 
         private bool FnStartVent(object[] param)
         {
-            return _ventRoutine.Start() == RState.Running;
+            switch (ChamberType)
+            {
+                case JetChamber.VenusSE:
+                case JetChamber.VenusDE:
+                    return _venusVentRoutine.Start() == RState.Running;
+                default:
+                    return _ventRoutine.Start() == RState.Running;
+            }
         }
 
         private bool FnVentTimeout(object[] param)
         {
-            RState ret = _ventRoutine.Monitor();
+            RState ret;
+            switch (ChamberType)
+            {
+                case JetChamber.VenusSE:
+                case JetChamber.VenusDE:
+                    ret = _venusVentRoutine.Monitor();
+                    break;
+                default:
+                    ret = _ventRoutine.Monitor();
+                    break;
+            }
+
             if (ret == RState.Failed || ret == RState.Timeout)
             {
                 PostMsg(MSG.Error);
@@ -922,13 +942,31 @@ namespace Venus_RT.Modules.PMs
 
         private bool FnVentToPumping(object[] param)
         {
-            _ventRoutine.Abort();
+            switch (ChamberType)
+            {
+                case JetChamber.VenusSE:
+                case JetChamber.VenusDE:
+                    _venusVentRoutine.Abort();
+                    break;
+                default:
+                    _ventRoutine.Abort();
+                    break;
+            }
             return true; // FnStartPumpDown(param);
         }
 
         private bool FnAbortVent(object[] param)
         {
-            _ventRoutine.Abort();
+            switch (ChamberType)
+            {
+                case JetChamber.VenusSE:
+                case JetChamber.VenusDE:
+                    _venusVentRoutine.Abort();
+                    break;
+                default:
+                    _ventRoutine.Abort();
+                    break;
+            }
             return true;
         }
 

+ 49 - 9
Venus/Venus_RT/Modules/PMs/PumpDownRoutine.cs

@@ -26,6 +26,7 @@ namespace Venus_RT.Modules.PMs
             kGasFinal,
             kFinalStep,
             kCloseValve,
+            vFastPump,
             kEnd,
         }
 
@@ -60,7 +61,7 @@ namespace Venus_RT.Modules.PMs
                 _basePressure = (objs.Length >= 1) ? Convert.ToInt32(objs[0]) : SC.GetValue<int>($"{Module}.Pump.PumpBasePressure");
                 
                 if(jetChamber != JetChamber.VenusSE && jetChamber != JetChamber.VenusDE)
-                    _chamber.OpenValve(ValveType.PVN22, true);
+                	_chamber.OpenValve(ValveType.PVN22, true);
                 _chamber.OpenValve(ValveType.TurboPumpPumping, true);
                 _chamber.TurnPendulumValve(false);
                 
@@ -88,8 +89,8 @@ namespace Venus_RT.Modules.PMs
                 case JetChamber.VenusSE:
                     Runner.Delay(PumpStep.kDelay_2s, _delay_2s)
                           .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s)
-                          .Run(PumpStep.kSoftPump, HOFs.WrapAction(_chamber.OpenValve, ValveType.SoftPump, true), () => { return _chamber.ChamberPressure < _roughPumpPressure; })
-                          .Run(PumpStep.kFastPump, OpenFastPump, () => { return _chamber.ChamberPressure < _vHe2FlowPressure; })
+                          .Run(PumpStep.kSoftPump, HOFs.WrapAction(_chamber.OpenValve, ValveType.SoftPump, true), CheckToCrossPressure)
+                          .Run(PumpStep.vFastPump, VenusFastPump, () => { return _chamber.ChamberPressure <= _vHe2FlowPressure; })
                           .Delay(PumpStep.kHe2ExDelay, 3000)
                           .Run(PumpStep.kPVHe2, OpenHe2Valve, _delay_2s)
                           .Run(PumpStep.kISOValve, OpenISOValve, _delay_2s)
@@ -105,7 +106,7 @@ namespace Venus_RT.Modules.PMs
                 case JetChamber.Kepler2200B:
                     Runner.Delay(PumpStep.kDelay_2s, _delay_2s)
                           .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s)
-                          .Run(PumpStep.kSoftPump, HOFs.WrapAction(_chamber.OpenValve, ValveType.SoftPump, true), () => { return _chamber.ChamberPressure < _roughPumpPressure; })
+                          .Run(PumpStep.kSoftPump, HOFs.WrapAction(_chamber.OpenValve, ValveType.SoftPump, true), CheckToCrossPressure)
                           .Run(PumpStep.kFastPump, OpenFastPump,  () => { return _chamber.ChamberPressure < _vHe2FlowPressure; })
                           .Run(PumpStep.kISOValve, OpenISOValve, _delay_2s)
                           .Run(PumpStep.kVATValve, OpenVATValve, _delay_5s)
@@ -117,7 +118,7 @@ namespace Venus_RT.Modules.PMs
                 case JetChamber.VenusDE:
                     Runner.Delay(PumpStep.kDelay_2s, _delay_2s)
                           .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s)
-                          .RunIf(PumpStep.kFastPump, _chamber.ChamberPressure > _vHe2FlowPressure, OpenDEFastPump, () => { return _chamber.ChamberPressure < _vHe2FlowPressure; })
+                          .Run(PumpStep.kFastPump, OpenDEFastPump,  VenusFastPumpOver )
                           .Delay(PumpStep.kHe2ExDelay, 3000)
                           .Run(PumpStep.kPVHe2, OpenHe2Valve, _delay_2s)
                           .Run(PumpStep.kISOValve, OpenISOValve, _delay_2s)
@@ -161,9 +162,21 @@ namespace Venus_RT.Modules.PMs
             return Runner.Status;
         }
 
+        private bool CheckToCrossPressure()
+        {
+            if (_chamber.ChamberPressure < _roughPumpPressure)
+            {
+                _chamber.OpenValve(ValveType.SoftPump, false);
+                return true;
+            }
+            else
+                return false;
+
+        }
+
         private bool CloseValve()
         {
-            _chamber.OpenValve(ValveType.PVN22, true);
+            _chamber.OpenValve(ValveType.PVN22, false);
             return true;
         }
 
@@ -184,19 +197,46 @@ namespace Venus_RT.Modules.PMs
             _chamber.OpenValve(ValveType.Guage, true);
             return true;
         }
+
+        private bool VenusFastPumpOver()
+        {
+            if (_chamber.ChamberPressure < _vHe2FlowPressure)
+            {
+                _chamber.OpenValve(ValveType.FastPump, false);
+                return true;
+            }
+            else
+                return false;
+        }
+
+
+        private bool VenusFastPump()
+        {
+            _chamber.OpenValve(ValveType.SoftPump, false);
+            if (_chamber.ChamberPressure > _vHe2FlowPressure)
+            {
+                _chamber.OpenValve(ValveType.FastPump, true);
+            }
+
+
+            return true;
+        }
         private bool OpenFastPump()
         {
             _chamber.OpenValve(ValveType.SoftPump, false);
             _chamber.OpenValve(ValveType.FastPump, true);
-
             return true;
+
         }
 
         private bool OpenDEFastPump()
         {
-            //_chamber.OpenValve(ValveType.SoftPump, false);
             _chamber.OpenValve(ValveType.PVHe2, false);
-            _chamber.OpenValve(ValveType.FastPump, true);
+            //_chamber.OpenValve(ValveType.SoftPump, false);
+            if (_chamber.ChamberPressure > _vHe2FlowPressure)
+            {
+                _chamber.OpenValve(ValveType.FastPump, true);
+            }
 
             return true;
         }

+ 147 - 0
Venus/Venus_RT/Modules/PMs/VenusVentRoutine.cs

@@ -0,0 +1,147 @@
+using Aitex.Core.RT.Routine;
+using Aitex.Core.RT.SCCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Venus_Core;
+using Venus_RT.Devices;
+
+namespace Venus_RT.Modules.PMs
+{
+    class VenusVentRoutine : PMRoutineBase, IRoutine
+    {
+        private enum VentStep
+        {
+            vISODelay,
+            vClosePendulumValve,
+            vCloseTurboPurge,
+            vCloseTurboPumping,
+            vClosePVValves,
+            vDelayForPendulumValve,
+            vOpenVentValves,
+            vDelay_2,
+            vCloseVentValves,
+        }
+
+        //private int _ventTime;
+        private double _ventTimeDelay = 1;
+        private int _checkATMTimeout = 90;
+
+        public bool VentingFlag => _ventingflag;
+        private bool _ventingflag = false;
+
+        public VenusVentRoutine(JetPMBase chamber) : base(chamber)
+        {
+            Name = "PM Vent";
+
+        }
+
+        public RState Start(params object[] objs)
+        {
+            if (CheckLid() &&
+                CheckSlitDoor() &&
+                CheckCDA() &&
+                CheckATM())
+            {
+                Reset();
+
+
+                _checkATMTimeout = SC.GetValue<int>($"{Module}.CheckATMTimeout");
+                _ventTimeDelay = SC.GetValue<double>($"{Module}.OverVentTime");
+
+                if (Runner.Start(Module, Name) == RState.Running)
+                {
+                    _ventingflag = true;
+                    return RState.Running;
+                }
+                else
+                {
+                    _ventingflag = false;
+                    return RState.Failed;
+                }
+            }
+
+            return RState.Failed;
+        }
+        public RState Monitor()
+        {
+            Runner.Delay(VentStep.vISODelay,                _delay_2s)
+                .Run(VentStep.vClosePendulumValve,          PendulumValveClose,         () => { return _chamber.PendulumPosition == 0 && !_chamber.PendulumValveIsOpen(); })
+                .Delay(VentStep.vDelayForPendulumValve,     500)
+                .Run(VentStep.vCloseTurboPurge,             CloseTurboPurge,            _delay_3s)
+                .Run(VentStep.vCloseTurboPumping,           CloseTurboPumping,          _delay_3s)
+                .Run(VentStep.vClosePVValves,               ClosePVValves,              _delay_3s)
+                .Run(VentStep.vOpenVentValves,              OpenValve,                  () => { return _chamber.IsATM; }, _checkATMTimeout * 1000)
+                .Delay(VentStep.vDelay_2,                   (int)_ventTimeDelay)
+                .End(VentStep.vCloseVentValves,             CloseVentGasFinalValves,    _delay_2s);
+
+            _ventingflag = Runner.Status == RState.Running;
+
+            return Runner.Status;
+        }
+
+        private bool CloseTurboPumping()
+        {
+            _chamber.OpenValve(ValveType.TurboPumpPumping, false);
+            return true;
+        }
+
+        private bool CloseTurboPurge()
+        {
+            _chamber.OpenValve(ValveType.TurboPumpPurge, false);
+            return true;
+        }
+
+        private bool PendulumValveClose()
+        {
+            if (_chamber.PendulumValveIsOpen())
+            {
+                _chamber.TurnPendulumValve(false);
+            }
+
+            return true;
+        }
+
+        private bool ClosePVValves()
+        {
+            _chamber.OpenValve(ValveType.Guage, false);
+            if (_chamber.PendulumValveIsOpen())
+            {
+                return _chamber.TurnPendulumValve(false);
+
+            }
+
+            _chamber.OpenValve(ValveType.TurboPumpPumping, false);
+            _chamber.OpenValve(ValveType.TurboPumpPurge, false);
+            _chamber.OpenValve(ValveType.FastPump, false);
+            _chamber.OpenValve(ValveType.SoftPump, false);
+            return true;
+        }
+
+        private bool OpenValve()
+        {
+            _chamber.OpenValve(ValveType.PVN22, true);
+            _chamber.OpenValve(ValveType.N2, true);
+            _chamber.OpenValve(ValveType.GasFinal, true);
+            return true;
+        }
+
+        private bool CloseVentGasFinalValves()
+        {
+            if (_chamber.ChamberType == JetChamber.VenusSE || _chamber.ChamberType == JetChamber.VenusDE)
+            {
+                _chamber.OpenValve(ValveType.PVN22, false);
+            }
+            _chamber.OpenValve(ValveType.GasFinal, false);
+            _chamber.OpenValve(ValveType.N2, false);
+            return true;
+        }
+
+        public void Abort()
+        {
+            CloseAllValves();
+        }
+    }
+}

+ 1 - 0
Venus/Venus_RT/Venus_RT.csproj

@@ -430,6 +430,7 @@
     <Content Include="Config\TM\TMInterlock.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
+    <Resource Include="Config\TM\_ioDefineVenusDE_MF.xml" />
     <Content Include="Config\TM\_ioDefineVenusSETest_MF.xml">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>