Bladeren bron

Add the PreClean,PostClean in SequenceInfo && Add DESequenceFormat.xml for Sequence && Add Venus DETM IO && fix VCEA pump Open in UI

zhouhr 10 maanden geleden
bovenliggende
commit
8cf03142ec

+ 17 - 0
Venus/Framework/Common/Jobs/SequenceInfo.cs

@@ -29,6 +29,12 @@ namespace MECF.Framework.Common.Jobs
         public string Name { get; set; }
 
         [DataMember]
+        public string PreWaferCleanRecipe { get; set; }
+
+        [DataMember]
+        public string PostWaferCleanRecipe { get; set; }
+
+        [DataMember]
         public string WTWCleanRecipe { get; set; }
 
         [DataMember]
@@ -165,6 +171,17 @@ namespace MECF.Framework.Common.Jobs
                             {
                                 info.WTWCleanRecipe = attr.Value;
                             }
+
+                            if (attr.Name == "PreClean")
+                            {
+                                info.PreWaferCleanRecipe = attr.Value;
+                            }
+
+                            if (attr.Name == "PostClean")
+                            {
+                                info.PostWaferCleanRecipe = attr.Value;
+                            }
+
                         }
 
                         info.Steps.Add(stepInfo);

+ 1 - 1
Venus/Venus_MainPages/Unity/SystemConfigProvider.cs

@@ -20,7 +20,7 @@ namespace Venus_MainPages.Unity
         private int _currentChamberNumber = 0;
         //private int? _systemtype = null;
         private string[] _InstalledModules=null;
-        private List<string> _modulelist = new List<string>() { "EFEM", "TM", "LLA", "LLB", "SETM", "VCE1", "PMA", "PMB", "PMC", "PMD", "PME", "PMF" };
+        private List<string> _modulelist = new List<string>() { "EFEM", "TM", "LLA", "LLB","DETM" ,"SETM", "VCE1","VCEA","VCEB", "PMA", "PMB", "PMC", "PMD", "PME", "PMF" };
         public static SystemConfigProvider Instance
         {
             get

+ 7 - 0
Venus/Venus_MainPages/Venus_MainPages.csproj

@@ -337,6 +337,9 @@
     <Compile Include="Views\VenusSeOperationOverView.xaml.cs">
       <DependentUpon>VenusSeOperationOverView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\WaferAssociationSEUnit.xaml.cs">
+      <DependentUpon>WaferAssociationSEUnit.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\WaferAssociationUnit.xaml.cs">
       <DependentUpon>WaferAssociationUnit.xaml</DependentUpon>
     </Compile>
@@ -561,6 +564,10 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="Views\WaferAssociationSEUnit.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="Views\WaferAssociationUnit.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>

+ 1 - 1
Venus/Venus_MainPages/Venus_MainPages.csproj.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
-    <ProjectView>ProjectFiles</ProjectView>
+    <ProjectView>ShowAllFiles</ProjectView>
   </PropertyGroup>
 </Project>

+ 12 - 2
Venus/Venus_MainPages/ViewModels/DETMOperationViewModel.cs

@@ -201,7 +201,11 @@ namespace Venus_MainPages.ViewModels
 
         private DelegateCommand<object> _DETMPumpCommand;
         public DelegateCommand<object> DETMPumpCommand =>
-            _DETMPumpCommand ?? (_DETMPumpCommand = new DelegateCommand<object>(OnSetSEPump));
+            _DETMPumpCommand ?? (_DETMPumpCommand = new DelegateCommand<object>(OnSetDEPump));
+
+        private DelegateCommand<object> _VCEAPumpCommand;
+        public DelegateCommand<object> VCEAPumpCommand =>
+            _VCEAPumpCommand ?? (_VCEAPumpCommand = new DelegateCommand<object>(OnSetVCEAPump));
 
         private DelegateCommand<object> _PumpDown;
         public DelegateCommand<object> PumpDown =>
@@ -349,11 +353,17 @@ namespace Venus_MainPages.ViewModels
         {
             InvokeClient.Instance.Service.DoOperation($"{obj}.PumpDown");
         }
-        private void OnSetSEPump(object obj)
+        private void OnSetDEPump(object obj)
         {
             bool.TryParse(obj.ToString(), out bool Open);
             InvokeClient.Instance.Service.DoOperation("DETM.ControlPump", Open);
         }
+
+        private void OnSetVCEAPump(object obj)
+        {
+            bool.TryParse(obj.ToString(), out bool Open);
+            InvokeClient.Instance.Service.DoOperation("VCEA.ControlPump", Open);
+        }
         private void OnHome(object chamber)
         {
             InvokeClient.Instance.Service.DoOperation($"{chamber}.HOME");

+ 0 - 7
Venus/Venus_MainPages/ViewModels/VenusDeOperationOverViewModel.cs

@@ -597,8 +597,6 @@ namespace Venus_MainPages.ViewModels
                 {"Module", info.ModuleData.ModuleID},
                 {"SlotSequence", slotSequence.ToArray()},
                 {"AutoStart", true},
-                { "PreCleanRecipeName",info.PreCleanRecipeName},
-                { "PostCleanRecipeName",info.PostCleanRecipeName}
             };
             InvokeClient.Instance.Service.DoOperation("System.CreateSEJob", param);
         }
@@ -656,11 +654,6 @@ namespace Venus_MainPages.ViewModels
                     }
                 }
             }
-            //if (VCEAIsInstalled)
-            //{
-            //    VCEAwaferAssociation = info;
-            //}
-
 
         }
 

+ 4 - 4
Venus/Venus_MainPages/Views/DETMOperationView.xaml

@@ -261,8 +261,8 @@
                     <userControls:Pump Canvas.Left="586.5" Canvas.Top="570" Width="35" Height="35" IsOpen="{Binding RtDataValues[DETM.PumpIsRunning],Mode=TwoWay}" HorizontalAlignment="Left" VerticalAlignment="Center">
                         <userControls:Pump.ContextMenu>
                             <ContextMenu>
-                                <MenuItem Header="ON"  Command="{Binding SETMPumpCommand}" CommandParameter="True" IsChecked="{Binding RtDataValues[DETM.PumpIsRunning],Mode=OneWay}" IsEnabled="{Binding RtDataValues[DETM.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}"/>
-                                <MenuItem Header="OFF" Command="{Binding SETMPumpCommand}" CommandParameter="False" IsChecked="{Binding RtDataValues[DETM.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}" IsEnabled="{Binding RtDataValues[DETM.PumpIsRunning],Mode=OneWay}"/>
+                                <MenuItem Header="ON"  Command="{Binding DETMPumpCommand}" CommandParameter="True" IsChecked="{Binding RtDataValues[DETM.PumpIsRunning],Mode=OneWay}" IsEnabled="{Binding RtDataValues[DETM.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}"/>
+                                <MenuItem Header="OFF" Command="{Binding DETMPumpCommand}" CommandParameter="False" IsChecked="{Binding RtDataValues[DETM.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}" IsEnabled="{Binding RtDataValues[DETM.PumpIsRunning],Mode=OneWay}"/>
                             </ContextMenu>
                         </userControls:Pump.ContextMenu>
                     </userControls:Pump>
@@ -355,8 +355,8 @@
                     <userControls:Pump Canvas.Left="586.5" Canvas.Top="690" Width="35" Height="35" IsOpen="{Binding RtDataValues[VCEA.PumpIsRunning],Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Top">
                         <userControls:Pump.ContextMenu>
                             <ContextMenu>
-                                <MenuItem Header="ON"  Command="{Binding SETMPumpCommand}" CommandParameter="True" IsChecked="{Binding RtDataValues[VCEA.PumpIsRunning],Mode=OneWay}" IsEnabled="{Binding RtDataValues[VCEA.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}"/>
-                                <MenuItem Header="OFF" Command="{Binding SETMPumpCommand}" CommandParameter="False" IsChecked="{Binding RtDataValues[VCEA.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}" IsEnabled="{Binding RtDataValues[VCEA.PumpIsRunning],Mode=OneWay}"/>
+                                <MenuItem Header="ON"  Command="{Binding VCEAPumpCommand}" CommandParameter="True" IsChecked="{Binding RtDataValues[VCEA.PumpIsRunning],Mode=OneWay}" IsEnabled="{Binding RtDataValues[VCEA.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}"/>
+                                <MenuItem Header="OFF" Command="{Binding VCEAPumpCommand}" CommandParameter="False" IsChecked="{Binding RtDataValues[VCEA.PumpIsRunning],Converter={StaticResource BoolToBool},Mode=OneWay}" IsEnabled="{Binding RtDataValues[VCEA.PumpIsRunning],Mode=OneWay}"/>
                             </ContextMenu>
                         </userControls:Pump.ContextMenu>
                     </userControls:Pump>

+ 54 - 14
Venus/Venus_MainPages/Views/VenusDeOperationOverView.xaml

@@ -23,6 +23,16 @@
         <converters:BoolToVisibility x:Key="boolToVisibility"/>
         <converters:BoolToVisibility2 x:Key="boolToVisibility2"/>
         <converters:BoolToBool x:Key="BoolToBool"/>
+
+        <Style x:Key="StyleTabControl" TargetType="{x:Type TabItem}">
+            <Setter Property="Background" Value="White"/>
+            <Setter Property="BorderThickness" Value="2"/>
+            <Style.Triggers>
+                <Trigger Property="IsSelected"  Value="True">
+                    <Setter Property="Background" Value="Gray"></Setter>
+                </Trigger>
+            </Style.Triggers>
+        </Style>
         <Style x:Key="SideButton" TargetType="Button">
             <Setter Property="Background" Value="#19799e" />
             <!-- 背景色 -->
@@ -345,24 +355,54 @@
                 </TextBlock>
             </Grid>
 
+            <TabControl Canvas.Top="50" Canvas.Left="1097" Width="540" Height="700" HorizontalAlignment="Left" VerticalAlignment="Center" Style="{x:Null}" Padding="10">
+                <TabItem Header="Carrier" Style="{StaticResource StyleTabControl}">
+                    <Grid>
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="*"/>
+                            <ColumnDefinition Width="*"/>
+                        </Grid.ColumnDefinitions>
+                        <Grid.RowDefinitions>
+                            <RowDefinition Height="*"/>
+                            <RowDefinition Height="Auto"/>
+                            <RowDefinition Height="Auto"/>
+                        </Grid.RowDefinitions>
+                        <ctrls:FOUPFrontView Grid.Column="0" Grid.Row="0" UnitData="{Binding VCEAModuleInfo}" ShowTitle="True" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                        <ctrls:FOUPFrontView Grid.Column="1" Grid.Row="0" UnitData="{Binding VCEBModuleInfo}" ShowTitle="True" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                        <TextBlock Margin="5" Text="VCEA" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center" Canvas.Top="621" Canvas.Left="1231" FontWeight="Bold"/>
+                        <TextBlock Margin="5" Text="VCEB" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" Canvas.Top="621" Canvas.Left="1489" FontWeight="Bold"/>
+                        <WrapPanel Orientation="Horizontal" Grid.Row="2" Width="260" Canvas.Left="1115" Canvas.Top="650" Cursor="" HorizontalAlignment="Left" VerticalAlignment="Center">
+                            <Button Style="{StaticResource SideButton}" Content="ReadMap"   HorizontalAlignment="Center" Command="{Binding VCEReadMap}" CommandParameter="VCEA"/>
+                            <Button Style="{StaticResource SideButton}" Content="Load Prepare"   HorizontalAlignment="Center" Command="{Binding VCELoadPrepare}"  CommandParameter="VCEA"/>
+                            <Button Style="{StaticResource SideButton}" Content="Load" HorizontalAlignment="Center" Command="{Binding VCELoad}" CommandParameter="VCEA"/>
+                            <Button Style="{StaticResource SideButton}" Content="UnLoad" HorizontalAlignment="Center" Command="{Binding VCEUnLoad}" CommandParameter="VCEA"/>
+                        </WrapPanel>
+                        <WrapPanel Orientation="Horizontal" Grid.Column="1" Grid.Row="2" Width="260" Canvas.Left="1375" Canvas.Top="650" Cursor="" HorizontalAlignment="Left" VerticalAlignment="Center">
+                            <Button Style="{StaticResource SideButton}" Content="ReadMap"   HorizontalAlignment="Center" Command="{Binding VCEReadMap}" CommandParameter="VCEB"/>
+                            <Button Style="{StaticResource SideButton}" Content="Load Prepare"   HorizontalAlignment="Center" Command="{Binding VCELoadPrepare}" CommandParameter="VCEB"/>
+                            <Button Style="{StaticResource SideButton}" Content="Load" HorizontalAlignment="Center" Command="{Binding VCELoad}" CommandParameter="VCEB"/>
+                            <Button Style="{StaticResource SideButton}" Content="UnLoad" HorizontalAlignment="Center" Command="{Binding VCEUnLoad}" CommandParameter="VCEB"/>
+                        </WrapPanel>
+                    </Grid>
+                    
+                </TabItem>
+                <TabItem Header="VCEA" Style="{StaticResource StyleTabControl}">
+                    <Viewbox Width="336" VerticalAlignment="Top">
+                        <local:WaferAssociationUnit WAInfo="{Binding VCEAwaferAssociation}"/>
+                    </Viewbox>
+                </TabItem>
+                <TabItem Header="VCEB" Style="{StaticResource StyleTabControl}">
+                    <Viewbox Width="336" VerticalAlignment="Top">
+                        <local:WaferAssociationUnit WAInfo="{Binding VCEBwaferAssociation}"/>
+                    </Viewbox>
+                </TabItem>
+            </TabControl>
+
+            
 
             <userControls:EFEMFrontView UnitData="{Binding TMModuleInfo}" Title="TMRobot"  Canvas.Top="505" Canvas.Left="74" HorizontalAlignment="Left" VerticalAlignment="Top" Height="89" />
 
-            <ctrls:FOUPFrontView UnitData="{Binding VCEAModuleInfo}" ShowTitle="True" Canvas.Top="80" Canvas.Left="1182" HorizontalAlignment="Left" VerticalAlignment="Center"/>
 
-            <ctrls:FOUPFrontView UnitData="{Binding VCEBModuleInfo}" ShowTitle="True" Canvas.Top="80" Canvas.Left="1410" HorizontalAlignment="Left" VerticalAlignment="Center"/>
-            <WrapPanel Orientation="Horizontal" Width="260" Canvas.Left="1115" Canvas.Top="650" Cursor="" HorizontalAlignment="Left" VerticalAlignment="Center">
-                <Button Style="{StaticResource SideButton}" Content="ReadMap"   HorizontalAlignment="Center" Command="{Binding VCEReadMap}" CommandParameter="VCEA"/>
-                <Button Style="{StaticResource SideButton}" Content="Load Prepare"   HorizontalAlignment="Center" Command="{Binding VCELoadPrepare}"  CommandParameter="VCEA"/>
-                <Button Style="{StaticResource SideButton}" Content="Load" HorizontalAlignment="Center" Command="{Binding VCELoad}" CommandParameter="VCEA"/>
-                <Button Style="{StaticResource SideButton}" Content="UnLoad" HorizontalAlignment="Center" Command="{Binding VCEUnLoad}" CommandParameter="VCEA"/>
-            </WrapPanel>
-            <WrapPanel Orientation="Horizontal" Width="260" Canvas.Left="1375" Canvas.Top="650" Cursor="" HorizontalAlignment="Left" VerticalAlignment="Center">
-                <Button Style="{StaticResource SideButton}" Content="ReadMap"   HorizontalAlignment="Center" Command="{Binding VCEReadMap}" CommandParameter="VCEB"/>
-                <Button Style="{StaticResource SideButton}" Content="Load Prepare"   HorizontalAlignment="Center" Command="{Binding VCELoadPrepare}" CommandParameter="VCEB"/>
-                <Button Style="{StaticResource SideButton}" Content="Load" HorizontalAlignment="Center" Command="{Binding VCELoad}" CommandParameter="VCEB"/>
-                <Button Style="{StaticResource SideButton}" Content="UnLoad" HorizontalAlignment="Center" Command="{Binding VCEUnLoad}" CommandParameter="VCEB"/>
-            </WrapPanel>
             <Border Canvas.Left="1650"  Canvas.Top="336" Background="Transparent" Padding="0,7" BorderThickness="3" BorderBrush="#376092" CornerRadius="5">
                 <StackPanel Orientation="Vertical" Width="150" Cursor="">
                     <Button Style="{StaticResource SideButton}" Content="Home All"   HorizontalAlignment="Center"  Command="{Binding HomeAll}" />

+ 148 - 0
Venus/Venus_MainPages/Views/WaferAssociationSEUnit.xaml

@@ -0,0 +1,148 @@
+<UserControl x:Class="Venus_MainPages.Views.WaferAssociationSEUnit"
+             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:unity="clr-namespace:Venus_MainPages.Unity"
+             xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
+             mc:Ignorable="d" 
+             xmlns:sys="clr-namespace:System;assembly=mscorlib"
+             d:DesignHeight="450" d:DesignWidth="433" x:Name="WaferInfoUnit">
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+        <Grid VerticalAlignment="Top">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="Auto"></RowDefinition>
+                <RowDefinition Height="Auto"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid unity:GridOptions.ShowBorder="True" unity:GridOptions.LineBrush="Black"  unity:GridOptions.LineThickness="1">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="30"></RowDefinition>
+                    <RowDefinition Height="30"></RowDefinition>
+                    <RowDefinition Height="0"></RowDefinition>
+                    <RowDefinition Height="0"></RowDefinition>
+                    <RowDefinition Height="30"></RowDefinition>
+                    <RowDefinition Height="30"></RowDefinition>
+                    <RowDefinition Height="Auto"></RowDefinition>
+                    <RowDefinition Height="Auto"></RowDefinition>
+                </Grid.RowDefinitions>
+
+                <StackPanel Grid.Row="0" Orientation="Horizontal">
+                    <TextBlock Text="Lot ID:" TextWrapping="Wrap"  Foreground="{DynamicResource FG_Black}" FontSize="15" FontFamily="Arial" VerticalAlignment="Center" Width="75"></TextBlock>
+                    <TextBox Text="{Binding WFInfo.LotId, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" TextWrapping="Wrap"  Foreground="{DynamicResource FG_Black}" FontSize="15" FontFamily="Arial" VerticalAlignment="Center" Width="200" IsEnabled="False"></TextBox>
+                </StackPanel>
+                <StackPanel Grid.Row="1" Orientation="Horizontal">
+
+                    <TextBlock Text="Sequence:"  TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="15" FontFamily="Arial" VerticalAlignment="Center" Width="80"></TextBlock>
+
+                    <ComboBox Width="240" x:Name="cb"  DropDownOpened="cb_DropDownOpened"  SelectionChanged="cb_SelectionChanged"/>
+
+
+                </StackPanel>
+
+                <StackPanel Grid.Row="4" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
+                    <Button Content="Select All"    Height="25"    Command="{Binding SelectAllCommand}"   CommandParameter="{Binding ElementName=WaferInfoUnit,Path=WFInfo}" Width="125" Click="SelectAllButton_Click"/>
+                    <Button Content="DeSelect All"  Height="25"    Command="{Binding UnSelectAllCommand}" CommandParameter="{Binding ElementName=WaferInfoUnit,Path=WFInfo}" Width="125" Click="UnSelectAllButton_Click"/>
+                </StackPanel>
+
+                <Grid Grid.Row="5">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="1*"/>
+                        <ColumnDefinition Width="2*"/>
+                        <ColumnDefinition Width="1*"/>
+                        <ColumnDefinition Width="2*"/>
+                    </Grid.ColumnDefinitions>
+                    <TextBlock Grid.Column="0" Text="Name" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="15" FontFamily="Arial" VerticalAlignment="Center"></TextBlock>
+
+                    <TextBox Grid.Column="1" IsEnabled="True" Text="{Binding WFInfo.JobID, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" TextAlignment="Center" VerticalContentAlignment="Center"/>
+
+                    <TextBox Grid.Column="3" IsEnabled="True" Text="{Binding WFInfo.JobStatus, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" TextAlignment="Center" VerticalContentAlignment="Center"/>
+
+                    <TextBlock Text="Status" Grid.Column="2" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="15" FontFamily="Arial" VerticalAlignment="Center"></TextBlock>
+
+                </Grid>
+                <StackPanel Grid.Row="6" Orientation="Horizontal"  HorizontalAlignment="Center" VerticalAlignment="Center" >
+                    <Button Content="Create Job" Width="120" Height="25"  Command="{Binding CreateJobCommand}" CommandParameter="{Binding ElementName=WaferInfoUnit,Path=WFInfo}"/>
+                    <Button Content="Abort Job"  Width="120" Height="25"  Command="{Binding AbortJobCommand}"  CommandParameter="{Binding WFInfo.JobID,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
+                </StackPanel>
+                <StackPanel Grid.Row="7" Orientation="Horizontal"  VerticalAlignment="Center" HorizontalAlignment="Center">
+                    <Button Content="Start" Width="100" Height="25" Command="{Binding StartCommand}"  CommandParameter="{Binding ElementName=WaferInfoUnit,Path=WFInfo}"/>
+                    <Button Content="Stop" Width="100" Height="25" Margin="30,0,0,0" Command="{Binding StopCommand}" CommandParameter="{Binding ElementName=WaferInfoUnit,Path=WFInfo}"/>
+                    <Button Content="Abort" Width="100" Height="25" Margin="30,0,0,0" Command="{Binding AbortCommand}" CommandParameter="{Binding ElementName=WaferInfoUnit,Path=WFInfo}"/>
+                </StackPanel>
+            </Grid>
+
+            <ListBox Grid.Row="1"    
+                 
+                 ItemsSource="{Binding ElementName=WaferInfoUnit,Path=WFInfo.ModuleData.WaferManager.Wafers}" Name="list1">
+                <ListBox.Resources>
+                    <Style TargetType="ListBoxItem" BasedOn="{StaticResource ResourceKey={x:Type ListBoxItem}}">
+                        <Setter Property="Rectangle.StrokeThickness" Value="0"/>
+                    </Style>
+                </ListBox.Resources>
+                <ListBox.ItemTemplate>
+                    <DataTemplate>
+                        <Grid Height="18">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="Auto"></ColumnDefinition>
+                                <ColumnDefinition Width="Auto"></ColumnDefinition>
+                                <ColumnDefinition Width="Auto"></ColumnDefinition>
+                            </Grid.ColumnDefinitions>
+                            <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1"  Width="30" Padding="5,1">
+                                <TextBlock Name="txtSlotIndex" Text="{Binding SlotIndex}" Foreground="{DynamicResource FG_Black}" FontSize="12" FontFamily="Arial" VerticalAlignment="Center"></TextBlock>
+                            </Border>
+                            <Border Grid.Column="1" BorderBrush="{DynamicResource Table_BD}" BorderThickness="0,0,1,1" Width="250" >
+                                <Border.Style>
+                                    <Style>
+                                        <Style.Triggers>
+                                            <DataTrigger Binding="{Binding WaferStatus}" Value="0">
+                                                <Setter Property="Border.Background" Value="AliceBlue"/>
+                                            </DataTrigger>
+                                            <DataTrigger Binding="{Binding WaferStatus}" Value="1">
+                                                <Setter Property="Border.Background" Value="SkyBlue"/>
+                                            </DataTrigger>
+                                        </Style.Triggers>
+                                    </Style>
+                                </Border.Style>
+                                <TextBlock Name="txtSeqName" ToolTip="{Binding RelativeSource={RelativeSource Self}, Path=Text}" Text="{Binding SequenceName}" Foreground="{DynamicResource FG_Black}" FontSize="12" FontFamily="Arial" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
+                            </Border>
+
+                            <Border  Grid.Column="2" BorderBrush="{DynamicResource Table_BD}" BorderThickness="0,1,1,1"  Width="110" Padding="5,1" >
+                                <Button Width="60" Height="14"  Command="{Binding Path=DataContext.SetSequenceCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListBox}}" CommandParameter="{Binding}" IsEnabled="{Binding ElementName=WaferInfoUnit,Path=ButtonIsEnable}">
+                                    <Button.Style>
+                                        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource ResourceKey={x:Type Button}}">
+                                            <Setter Property="Button.Content" Value="Remove"/>
+                                            <Setter Property="FontSize" Value="10" />
+                                            <Style.Triggers>
+                                                <DataTrigger Binding="{Binding ElementName=txtSeqName, Path=Text}" Value="{x:Static sys:String.Empty}">
+                                                    <Setter Property="Button.Content" Value="Set"/>
+                                                </DataTrigger>
+                                                <DataTrigger Binding="{Binding WaferStatus}" Value="0">
+                                                    <Setter Property="Button.IsEnabled" Value="False"/>
+                                                </DataTrigger>
+                                            </Style.Triggers>
+                                        </Style>
+                                    </Button.Style>
+                                </Button>
+                            </Border>
+                        </Grid>
+                    </DataTemplate>
+                </ListBox.ItemTemplate>
+            </ListBox>
+
+            <!--<Grid>
+                <Grid.Style>
+                    <Style>
+                        <Style.Triggers>
+                            <DataTrigger Binding="{Binding WFInfo.ModuleData.IsInstalled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Value="false">
+                                <Setter Property="Grid.Visibility" Value="Collapsed"/>
+                            </DataTrigger>
+                        </Style.Triggers>
+                    </Style>
+                </Grid.Style>
+            </Grid>-->
+        </Grid>
+    </Grid>
+</UserControl>

+ 91 - 0
Venus/Venus_MainPages/Views/WaferAssociationSEUnit.xaml.cs

@@ -0,0 +1,91 @@
+using MECF.Framework.Common.DataCenter;
+using System;
+using System.Collections.Generic;
+using System.IO;
+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;
+using Venus_MainPages.Unity;
+
+namespace Venus_MainPages.Views
+{
+    /// <summary>
+    /// WaferAssociationSEUnit.xaml 的交互逻辑
+    /// </summary>
+    public partial class WaferAssociationSEUnit : UserControl
+    {
+        public WaferAssociationSEUnit()
+        {
+            InitializeComponent();
+        }
+
+        public WaferAssociationInfo WFInfo
+        {
+            get { return (WaferAssociationInfo)GetValue(WFInfoProperty); }
+            set { SetValue(WFInfoProperty, value); }
+        }
+        public static readonly DependencyProperty WFInfoProperty = DependencyProperty.Register("WFInfo", typeof(WaferAssociationSEUnit), typeof(WaferAssociationSEUnit));
+
+        public string SequenceName
+        {
+            get { return (string)GetValue(SequenceNameProperty); }
+            set { SetValue(SequenceNameProperty, value); }
+        }
+        public static readonly DependencyProperty SequenceNameProperty = DependencyProperty.Register("SequenceName", typeof(string), typeof(WaferAssociationSEUnit));
+
+        public int SelectedIndex
+        {
+            get { return (int)GetValue(SelectedIndexProperty); }
+            set { SetValue(SelectedIndexProperty, value); }
+        }
+        public static readonly DependencyProperty SelectedIndexProperty = DependencyProperty.Register("SelectedIndex", typeof(int), typeof(WaferAssociationSEUnit), new PropertyMetadata(1));
+
+        public bool ButtonIsEnable
+        {
+            get { return (bool)GetValue(ButtonIsEnableProperty); }
+            set { SetValue(ButtonIsEnableProperty, value); }
+        }
+        public static readonly DependencyProperty ButtonIsEnableProperty = DependencyProperty.Register("ButtonIsEnable", typeof(bool), typeof(WaferAssociationSEUnit), new PropertyMetadata(true));
+
+        private void cb_DropDownOpened(object sender, EventArgs e)
+        {
+            cb.ItemsSource = GetFilesNames(System.IO.Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "Recipes", "Sequence")).ToList();
+        }
+
+        private void cb_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            WFInfo.SequenceName = cb.SelectedValue.ToString();
+        }
+
+        private IEnumerable<string> GetFilesNames(string path)
+        {
+            if (Directory.Exists(path))
+            {
+                return Directory.GetFiles(path, "*.seq")
+      .Select(System.IO.Path.GetFileNameWithoutExtension);
+            }
+            else
+            {
+                return new List<string>();
+            }
+        }
+
+        private void SelectAllButton_Click(object sender, RoutedEventArgs e)
+        {
+            SelectedIndex = 0;
+        }
+        private void UnSelectAllButton_Click(object sender, RoutedEventArgs e)
+        {
+            SelectedIndex = 1;
+        }
+    }
+}

+ 74 - 0
Venus/Venus_RT/Config/DESequenceFormat.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<Aitex>
+	<TableSequenceFormat RecipeVersion="Cluster">
+		<Catalog Type="Position">
+			<Item Name="Position" DisplayName="Position" InputType="ReadOnlySelection" >
+				<Selection Name="Aligner" DisplayName="PreAligner" Parameter="AlignerSelection,AlignAngle" />
+				<Selection Name="PM" DisplayName="PM" Parameter="PMSelection,PMARecipe,PMBRecipe,PMCRecipe,PMDRecipe,PreClean,WTWClean,PostClean" />
+			</Item>
+		</Catalog>
+
+		<Catalog Type="Parameter">
+
+
+			<Item Name="AlignerSelection" DisplayName="Aligner Selection" InputType="MultiSelection" >
+				<Selection Name="VPA" DisplayName="VPA"/>
+				<!--<Selection Name="Aligner2" DisplayName="Aligner2"/>-->
+			</Item>
+
+			<Item Name="PMSelection" DisplayName="PM Selection" InputType="MultiSelection" >
+				<Selection Name="PMA" DisplayName="PMA"/>
+				<Selection Name="PMB" DisplayName="PMB"/>
+				<Selection Name="PMC" DisplayName="PMC"/>
+				<Selection Name="PMD" DisplayName="PMD"/>
+			</Item>
+
+			<Item Name="PMARecipe" DisplayName="PMA Recipe" InputType="RecipeSelection" Parameter="PMA"    Min="0" Max="999999"  />
+			<Item Name="PMBRecipe" DisplayName="PMB Recipe" InputType="RecipeSelection" Parameter="PMB"    Min="0" Max="999999"  />
+			<Item Name="PMCRecipe" DisplayName="PMC Recipe" InputType="RecipeSelection" Parameter="PMC"    Min="0" Max="999999"  />
+			<Item Name="PMDRecipe" DisplayName="PMD Recipe" InputType="RecipeSelection" Parameter="PMD"    Min="0" Max="999999"  />
+
+
+			<Item Name="PreClean" DisplayName="Pre Clean" InputType="RecipeSelection"     Min="0" Max="999999"  />
+			<Item Name="PostClean" DisplayName="Post Clean" InputType="RecipeSelection"   Min="0" Max="999999"  />
+
+
+			<Item Name="AlignAngle" DisplayName="Align Angle" InputType="NumInput"   Min="0" Max="359"  />
+
+		</Catalog>
+	</TableSequenceFormat>
+	<TableSequenceData RecipeVersion="Cluster" CreatedBy="System" Barcode="" CreationTime="2016-05-13T13:56:44" LastRevisedBy="admin" LastRevisionTime="2015-10-13T13:56:44" Description="(Empty)">
+		<Step></Step>
+	</TableSequenceData>
+	<TableRecipeSchema>
+		<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+			<xs:simpleType name="booleanType">
+				<xs:restriction base="xs:string">
+					<xs:enumeration value="0" />
+					<xs:enumeration value="1" />
+					<xs:enumeration value="False" />
+					<xs:enumeration value="True" />
+					<xs:enumeration value="false" />
+					<xs:enumeration value="true" />
+				</xs:restriction>
+			</xs:simpleType>
+			<xs:element name="TableSequenceData">
+				<xs:complexType>
+					<xs:sequence>
+						<xs:element maxOccurs="unbounded" name="Step">
+
+						</xs:element>
+					</xs:sequence>
+					<xs:attribute name="RecipeVersion" type="xs:string" fixed="Cluster" use="required" />
+					<xs:attribute name="CreatedBy" type="xs:string" use="required" />
+					<xs:attribute name="CreationTime" type="xs:dateTime" use="required" />
+					<xs:attribute name="LastRevisedBy" type="xs:string" use="required" />
+					<xs:attribute name="LastRevisionTime" type="xs:dateTime" use="required" />
+					<xs:attribute name="Barcode" type="xs:string" use="required" />
+					<xs:attribute name="Description" type="xs:string" use="required" />
+				</xs:complexType>
+			</xs:element>
+		</xs:schema>
+	</TableRecipeSchema>
+	<Signature>axPPcBt+girefGdBoafkJf+pBhY=</Signature>
+</Aitex>

+ 2 - 0
Venus/Venus_RT/Modules/Autotransfer_LP_FA.cs

@@ -50,6 +50,8 @@ namespace Venus_RT.Modules
             {ModuleName.LP2, "2"},
             {ModuleName.LP3, "3"},
             {ModuleName.VCE1, "1"},
+            {ModuleName.VCEA, "1"},
+            {ModuleName.VCEB, "2"},
         };
         public SchedulerFACallback()
         {

+ 6 - 1
Venus/Venus_RT/Modules/PMs/VenusSequenceFileContext.cs

@@ -22,11 +22,16 @@ namespace Venus_RT.Modules.PMs
             {
                 string configContent = PathManager.GetCfgDir() + @"\SequenceFormat.xml";
 
-                if (ModuleHelper.IsInstalled(ModuleName.VCE1))
+                if (ModuleHelper.IsInstalled(ModuleName.SETM))
                 {
                     configContent = PathManager.GetCfgDir() + @"\SESequenceFormat.xml";
                 }
 
+                if (ModuleHelper.IsInstalled(ModuleName.DETM))
+                {
+                    configContent = PathManager.GetCfgDir() + @"\DESequenceFormat.xml";
+                }
+
                 XmlDocument xmlDom = new XmlDocument();
                 xmlDom.Load(configContent);
 

+ 3 - 0
Venus/Venus_RT/Venus_RT.csproj

@@ -370,6 +370,9 @@
     <Content Include="Config\DataGroup.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
+    <Content Include="Config\DESequenceFormat.xml">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="Config\EquipmentVariables.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>

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

@@ -294,6 +294,11 @@ namespace Venus_UI.Views
                     MethodInfo methodInfo = t.GetMethod("Init", new Type[] { typeof(string) });
                     methodInfo?.Invoke(obj, new object[] { "SETM" });
                 }
+                else if (menu[i].FirstMenu == "Operation" && menu[i].SecondMenu == "IO1")
+                {
+                    MethodInfo methodInfo = t.GetMethod("Init", new Type[] { typeof(string) });
+                    methodInfo?.Invoke(obj, new object[] { "DETM" });
+                }
                 if (lastModule != menu[i].FirstMenu)
                 {
                     AduRadioButtonIcon aduRadioButtonIcon = new AduRadioButtonIcon();