Quellcode durchsuchen

add vpw recipe releated,vpw main/cell UI module

chenzk vor 4 Tagen
Ursprung
Commit
b079fb0436

+ 3 - 0
Framework/Common/RecipeCenter/VpwRinseStep.cs

@@ -13,6 +13,7 @@ namespace MECF.Framework.Common.RecipeCenter
         #region 内部变量
         private int _durationSeconds;
         private int _rotationSpeed;
+        private int _index;
         #endregion
 
         #region 属性
@@ -20,6 +21,8 @@ namespace MECF.Framework.Common.RecipeCenter
         public int DurationSeconds { get { return _durationSeconds; } set { _durationSeconds = value; InvokePropertyChanged(nameof(DurationSeconds)); } }
         [JsonProperty]
         public int RotationSpeed { get { return _rotationSpeed; } set { _rotationSpeed = value; InvokePropertyChanged(nameof(RotationSpeed)); } }
+        [JsonProperty]
+        public int Index { get { return _index; } set { _index = value; InvokePropertyChanged(nameof(Index)); } }
         #endregion
     }
 }

+ 132 - 1
PunkHPX8_MainPages/ViewModels/VpwRecipeViewModel.cs

@@ -2,7 +2,9 @@
 using Aitex.Core.Utilities;
 using MECF.Framework.Common.RecipeCenter;
 using MECF.Framework.Common.Utilities;
+
 using Prism.Mvvm;
+using PunkHPX8_Core;
 using PunkHPX8_MainPages.PMs;
 using PunkHPX8_Themes.UserControls;
 using System;
@@ -134,6 +136,40 @@ namespace PunkHPX8_MainPages.ViewModels
         public ICommand SaveAsRecipeCommand { get; private set; }
         [IgnorePropertyChange]
         public ICommand IsSprayBarRetractFalseCommand { get; private set; }
+
+        [IgnorePropertyChange]
+        public ICommand AddBelowCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand AddAboveCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand MoveUpCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand MoveDownCommand { get; private set; }
+
+        [IgnorePropertyChange]
+        public ICommand DeleteCommand { get; private set; }
+
+        public ICommand VentPrewetAddBelowCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand VentPrewetAddAboveCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand VentPrewetMoveUpCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand VentPrewetMoveDownCommand { get; private set; }
+
+        [IgnorePropertyChange]
+        public ICommand VentPrewetDeleteCommand { get; private set; }
+
+        public ICommand ExtendCleanAddBelowCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand ExtendCleanAddAboveCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand ExtendCleanMoveUpCommand { get; private set; }
+        [IgnorePropertyChange]
+        public ICommand ExtendCleanMoveDownCommand { get; private set; }
+
+        [IgnorePropertyChange]
+        public ICommand ExtendCleanDeleteCommand { get; private set; }
         #endregion
 
         public VpwRecipeViewModel()
@@ -145,6 +181,24 @@ namespace PunkHPX8_MainPages.ViewModels
             SaveAsRecipeCommand = new DelegateCommand<object>(SaveAsAction);
             IsSprayBarRetractFalseCommand = new DelegateCommand<object>(IsSprayBarRetractFalseAction);
 
+            AddBelowCommand = new DelegateCommand<object>(AddBelowAction);
+            AddAboveCommand = new DelegateCommand<object>(AddAboveAction);
+            MoveUpCommand = new DelegateCommand<object>(MoveUpAction);
+            MoveDownCommand = new DelegateCommand<object>(MoveDownAction);
+            DeleteCommand = new DelegateCommand<object>(DeleteAction);
+
+            VentPrewetAddBelowCommand = new DelegateCommand<object>(VentPrewetAddBelowAction);
+            VentPrewetAddAboveCommand = new DelegateCommand<object>(VentPrewetAddAboveAction);
+            VentPrewetMoveUpCommand = new DelegateCommand<object>(VentPrewetMoveUpAction);
+            VentPrewetMoveDownCommand = new DelegateCommand<object>(VentPrewetMoveDownAction);
+            VentPrewetDeleteCommand = new DelegateCommand<object>(VentPrewetDeleteAction);
+
+            ExtendCleanAddBelowCommand = new DelegateCommand<object>(ExtendCleanAddBelowAction);
+            ExtendCleanAddAboveCommand = new DelegateCommand<object>(ExtendCleanAddAboveAction);
+            ExtendCleanMoveUpCommand = new DelegateCommand<object>(ExtendCleanMoveUpAction);
+            ExtendCleanMoveDownCommand = new DelegateCommand<object>(ExtendCleanMoveDownAction);
+            ExtendCleanDeleteCommand = new DelegateCommand<object>(ExtendCleanDeleteAction);
+
             //Wafer尺寸集合
             WaferSizeLst = new List<int>();
             WaferSizeLst.Add(100);
@@ -242,6 +296,9 @@ namespace PunkHPX8_MainPages.ViewModels
                     Recipe.CreateDate = DateTime.Now;
                     Recipe.Ppid = recipeNameDialog.RecipeName;
                     Recipe.Description = recipeNameDialog.RecipeDescription;
+                    Recipe.VacuumRinseStep = new ObservableCollection<VpwRinseStep>();
+                    Recipe.VentRinseStep = new ObservableCollection<VpwRinseStep>();
+                    Recipe.ExtendCleanRinseStep = new ObservableCollection<VpwRinseStep>();
                     Enable = true;
                     _isEdit = false;
                 }
@@ -309,7 +366,7 @@ namespace PunkHPX8_MainPages.ViewModels
                 }
                 try
                 {
-                    _uiRecipeManager.SaveRecipe<RdsRecipe>(ENGINEERING, recipe.Ppid, "vpw", recipe);
+                    _uiRecipeManager.SaveRecipe<VpwRecipe>(ENGINEERING, recipe.Ppid, "vpw", recipe);
                     LoadRecipeData();
                     MessageBox.Show("Save As Recipe Success", "SaveAs Recipe", MessageBoxButton.OK, MessageBoxImage.Information);
                     Enable = false;
@@ -365,6 +422,13 @@ namespace PunkHPX8_MainPages.ViewModels
             if (Recipe != null)
             {
                 VpwRinseStep currentRinseSteps = new VpwRinseStep();
+                
+                currentRinseSteps.Index = SelectedVacuumPrewetIndex + 1;
+                for(int i = currentRinseSteps.Index; i<=Recipe.VacuumRinseStep.Count-1; i++)
+                {
+                    Recipe.VacuumRinseStep[i].Index++;
+                }
+
                 Recipe.VacuumRinseStep.Insert(SelectedVacuumPrewetIndex + 1, currentRinseSteps);
                 SelectedVacuumPrewetIndex++;
             }
@@ -386,6 +450,12 @@ namespace PunkHPX8_MainPages.ViewModels
                 }
                 else
                 {
+                    currentRinseSteps.Index = SelectedVacuumPrewetIndex;
+                    for (int i = currentRinseSteps.Index; i <= Recipe.VacuumRinseStep.Count-1; i++)
+                    {
+                        Recipe.VacuumRinseStep[i].Index++;
+                    }
+
                     Recipe.VacuumRinseStep.Insert(SelectedVacuumPrewetIndex, currentRinseSteps);
                     SelectedVacuumPrewetIndex--;
                 }
@@ -403,6 +473,10 @@ namespace PunkHPX8_MainPages.ViewModels
                 {
                     int currentIndex = SelectedVacuumPrewetIndex;
                     VpwRinseStep currentRinseSteps = Recipe.VacuumRinseStep[SelectedVacuumPrewetIndex];
+                    
+                    currentRinseSteps.Index -= 1;
+                    Recipe.VacuumRinseStep[SelectedVacuumPrewetIndex-1].Index += 1;
+                    
                     Recipe.VacuumRinseStep.RemoveAt(SelectedVacuumPrewetIndex);
                     Recipe.VacuumRinseStep.Insert(currentIndex - 1, currentRinseSteps);
                     SelectedVacuumPrewetIndex = currentIndex - 1;
@@ -421,6 +495,10 @@ namespace PunkHPX8_MainPages.ViewModels
                 {
                     int currentIndex = SelectedVacuumPrewetIndex;
                     VpwRinseStep currentRinseSteps = Recipe.VacuumRinseStep[SelectedVacuumPrewetIndex];
+                    
+                    currentRinseSteps.Index += 1;
+                    Recipe.VacuumRinseStep[SelectedVacuumPrewetIndex + 1].Index -= 1;
+                    
                     Recipe.VacuumRinseStep.RemoveAt(SelectedVacuumPrewetIndex);
                     Recipe.VacuumRinseStep.Insert(currentIndex + 1, currentRinseSteps);
                     SelectedVacuumPrewetIndex = currentIndex + 1;
@@ -437,6 +515,10 @@ namespace PunkHPX8_MainPages.ViewModels
             {
                 if (Recipe != null && Recipe.VacuumRinseStep.Count > SelectedVacuumPrewetIndex)
                 {
+                    for (int i = SelectedVacuumPrewetIndex + 1; i <= Recipe.VacuumRinseStep.Count - 1; i++)
+                    {
+                        Recipe.VacuumRinseStep[i].Index -= 1;
+                    }
                     Recipe.VacuumRinseStep.RemoveAt(SelectedVacuumPrewetIndex);
                 }
             }
@@ -453,6 +535,13 @@ namespace PunkHPX8_MainPages.ViewModels
             if (Recipe != null)
             {
                 VpwRinseStep currentRinseSteps = new VpwRinseStep();
+
+                currentRinseSteps.Index = SelectedVentPrewetIndex + 1;
+                for (int i = currentRinseSteps.Index; i <= Recipe.VentRinseStep.Count - 1; i++)
+                {
+                    Recipe.VentRinseStep[i].Index++;
+                }
+                
                 Recipe.VentRinseStep.Insert(SelectedVentPrewetIndex + 1, currentRinseSteps);
                 SelectedVentPrewetIndex++;
             }
@@ -474,6 +563,12 @@ namespace PunkHPX8_MainPages.ViewModels
                 }
                 else
                 {
+                    currentRinseSteps.Index = SelectedVentPrewetIndex;
+                    for (int i = currentRinseSteps.Index; i <= Recipe.VentRinseStep.Count - 1; i++)
+                    {
+                        Recipe.VentRinseStep[i].Index++;
+                    }
+                    
                     Recipe.VentRinseStep.Insert(SelectedVentPrewetIndex, currentRinseSteps);
                     SelectedVentPrewetIndex--;
                 }
@@ -491,6 +586,10 @@ namespace PunkHPX8_MainPages.ViewModels
                 {
                     int currentIndex = SelectedVentPrewetIndex;
                     VpwRinseStep currentRinseSteps = Recipe.VentRinseStep[SelectedVentPrewetIndex];
+
+                    currentRinseSteps.Index -= 1;
+                    Recipe.VentRinseStep[SelectedVentPrewetIndex - 1].Index += 1;
+
                     Recipe.VentRinseStep.RemoveAt(SelectedVentPrewetIndex);
                     Recipe.VentRinseStep.Insert(currentIndex - 1, currentRinseSteps);
                     SelectedVentPrewetIndex = currentIndex - 1;
@@ -509,6 +608,10 @@ namespace PunkHPX8_MainPages.ViewModels
                 {
                     int currentIndex = SelectedVentPrewetIndex;
                     VpwRinseStep currentRinseSteps = Recipe.VentRinseStep[SelectedVentPrewetIndex];
+
+                    currentRinseSteps.Index += 1;
+                    Recipe.VentRinseStep[SelectedVentPrewetIndex + 1].Index -= 1;
+
                     Recipe.VentRinseStep.RemoveAt(SelectedVentPrewetIndex);
                     Recipe.VentRinseStep.Insert(currentIndex + 1, currentRinseSteps);
                     SelectedVentPrewetIndex = currentIndex + 1;
@@ -525,6 +628,10 @@ namespace PunkHPX8_MainPages.ViewModels
             {
                 if (Recipe != null && Recipe.VentRinseStep.Count > SelectedVentPrewetIndex)
                 {
+                    for (int i = SelectedVentPrewetIndex + 1; i <= Recipe.VentRinseStep.Count - 1; i++)
+                    {
+                        Recipe.VentRinseStep[i].Index -= 1;
+                    }
                     Recipe.VentRinseStep.RemoveAt(SelectedVentPrewetIndex);
                 }
             }
@@ -541,6 +648,13 @@ namespace PunkHPX8_MainPages.ViewModels
             if (Recipe != null)
             {
                 VpwRinseStep currentRinseSteps = new VpwRinseStep();
+
+                currentRinseSteps.Index = SelectedExtendCleanIndex + 1;
+                for (int i = currentRinseSteps.Index; i <= Recipe.ExtendCleanRinseStep.Count - 1; i++)
+                {
+                    Recipe.ExtendCleanRinseStep[i].Index++;
+                }
+
                 Recipe.ExtendCleanRinseStep.Insert(SelectedExtendCleanIndex + 1, currentRinseSteps);
                 SelectedExtendCleanIndex++;
             }
@@ -562,6 +676,11 @@ namespace PunkHPX8_MainPages.ViewModels
                 }
                 else
                 {
+                    currentRinseSteps.Index = SelectedExtendCleanIndex;
+                    for (int i = currentRinseSteps.Index; i <= Recipe.ExtendCleanRinseStep.Count - 1; i++)
+                    {
+                        Recipe.ExtendCleanRinseStep[i].Index++;
+                    }
                     Recipe.ExtendCleanRinseStep.Insert(SelectedExtendCleanIndex, currentRinseSteps);
                     SelectedExtendCleanIndex--;
                 }
@@ -579,6 +698,10 @@ namespace PunkHPX8_MainPages.ViewModels
                 {
                     int currentIndex = SelectedExtendCleanIndex;
                     VpwRinseStep currentRinseSteps = Recipe.ExtendCleanRinseStep[SelectedExtendCleanIndex];
+
+                    currentRinseSteps.Index -= 1;
+                    Recipe.ExtendCleanRinseStep[SelectedExtendCleanIndex - 1].Index += 1;
+
                     Recipe.ExtendCleanRinseStep.RemoveAt(SelectedExtendCleanIndex);
                     Recipe.ExtendCleanRinseStep.Insert(currentIndex - 1, currentRinseSteps);
                     SelectedExtendCleanIndex = currentIndex - 1;
@@ -597,6 +720,10 @@ namespace PunkHPX8_MainPages.ViewModels
                 {
                     int currentIndex = SelectedExtendCleanIndex;
                     VpwRinseStep currentRinseSteps = Recipe.ExtendCleanRinseStep[SelectedExtendCleanIndex];
+
+                    currentRinseSteps.Index += 1;
+                    Recipe.ExtendCleanRinseStep[SelectedExtendCleanIndex + 1].Index -= 1;
+
                     Recipe.ExtendCleanRinseStep.RemoveAt(SelectedExtendCleanIndex);
                     Recipe.ExtendCleanRinseStep.Insert(currentIndex + 1, currentRinseSteps);
                     SelectedExtendCleanIndex = currentIndex + 1;
@@ -613,6 +740,10 @@ namespace PunkHPX8_MainPages.ViewModels
             {
                 if (Recipe != null && Recipe.ExtendCleanRinseStep.Count > SelectedExtendCleanIndex)
                 {
+                    for (int i = SelectedExtendCleanIndex + 1; i <= Recipe.ExtendCleanRinseStep.Count - 1; i++)
+                    {
+                        Recipe.ExtendCleanRinseStep[i].Index -= 1;
+                    }
                     Recipe.ExtendCleanRinseStep.RemoveAt(SelectedExtendCleanIndex);
                 }
             }

+ 1 - 1
PunkHPX8_MainPages/Views/VPWCellView.xaml

@@ -53,7 +53,7 @@
                         ChamberOpen="{Binding VpwMainCommonData.ChamberOpened}"
                          />
         </Grid>
-        <Grid Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Grid.RowSpan="3" HorizontalAlignment="Left">
+        <Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Grid.RowSpan="3" HorizontalAlignment="Center" Margin="-120,100,0,0">
             <UserControls:VPWCellUIControl ModuleName="{Binding Module}"
                                            DripValve="{Binding VpwCellCommonData.FlowDrip}"
                                            SmallValve="{Binding VpwCellCommonData.FlowSmall}"

+ 184 - 13
PunkHPX8_MainPages/Views/VpwRecipeView.xaml

@@ -93,13 +93,17 @@
             </GroupBox>
         </Grid>
         <Grid Grid.Row="2" Grid.Column="2">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="200"></RowDefinition>
+                <RowDefinition Height="*"></RowDefinition>
+            </Grid.RowDefinitions>
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="350"></ColumnDefinition>
                 <ColumnDefinition Width="350"></ColumnDefinition>
                 <ColumnDefinition Width="350"></ColumnDefinition>
                 <ColumnDefinition Width="350"></ColumnDefinition>
             </Grid.ColumnDefinitions>
-            <GroupBox  Header="1 Vacuum Prewet" Grid.Column="3"  Padding="10">
+            <GroupBox  Header="1.Vacuum Prewet" Grid.Column="3"  Padding="10" Grid.Row="0" Grid.RowSpan="2">
                 <Grid>
                     <Grid.RowDefinitions>
                         <RowDefinition Height="75"></RowDefinition>
@@ -113,11 +117,11 @@
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="300"></ColumnDefinition>
                     </Grid.ColumnDefinitions>
-                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  Content="Add Below" Height="25" Width="80" FontSize="10" Command="{Binding AddBelowCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-150,-20,0"></Button>
-                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  Content="Add Above" Height="25" Width="80" FontSize="10" Command="{Binding AddAboveCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-80,-20,0"></Button>
-                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  Content="Move Up" Height="25" Width="80" FontSize="10" Command="{Binding MoveUpCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-10,-20,0"></Button>
-                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  Content="Move Down" Height="25" Width="80" FontSize="10" Command="{Binding MoveDownCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,60,-20,0"></Button>
-                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  Content="Delete" Height="25" Width="80" FontSize="10" Command="{Binding DeleteCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,130,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Add Below" Height="25" Width="80" FontSize="10" Command="{Binding AddBelowCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-150,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Add Above" Height="25" Width="80" FontSize="10" Command="{Binding AddAboveCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-80,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Move Up" Height="25" Width="80" FontSize="10" Command="{Binding MoveUpCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-10,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Move Down" Height="25" Width="80" FontSize="10" Command="{Binding MoveDownCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,60,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Delete" Height="25" Width="80" FontSize="10" Command="{Binding DeleteCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,130,-20,0"></Button>
                     <UserControls:GroupTextBoxControl Grid.Row="0" Title="Vacuum Target" Unit="Toor" MinValue="0" MaxValue="200"  Width="300"
                                                                  IntValue="{Binding Recipe.VacuumTarget,Mode=TwoWay}" 
                                                                  ValidResult="{Binding PropertyValidResultDic[VacuumTarget],Mode=TwoWay}" />
@@ -127,10 +131,10 @@
                     <GroupBox Grid.Row="2" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
                         <Grid>
                             <Label Content="Spray Bar" Height="30" VerticalAlignment="Top" />
-                            <RadioButton Content="RET" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
-           Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.IsSprayBarRetract ,Mode=TwoWay}" Margin="158,-1,0,-6" ></RadioButton>
-                            <RadioButton Content="EXT" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
-            Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.IsSprayBarRetract,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="EXT" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
+           Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.IsSprayBarRetract ,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="158,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="RET" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
+            Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.IsSprayBarRetract,Mode=TwoWay}" Margin="220,-1,0,-6" ></RadioButton>
                         </Grid>
                     </GroupBox>
                     <GroupBox Grid.Row="3" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
@@ -161,12 +165,13 @@ Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.Vac
                         </Grid>
                     </GroupBox>
                     <DataGrid x:Name="VacuumPrewetRinseGrid" Width="215" MinRowHeight="27" Grid.Row="6" AutoGenerateColumns="False"  CanUserAddRows="False"  FontFamily="Arial" FontSize="14" Margin="-70,10,0,0" 
-          ItemsSource="{Binding Recipe.VacuumRinseStep}" SelectionMode="Single" IsEnabled="{Binding Enable}" SelectedIndex="{Binding SelectedRampIndex,Mode=TwoWay}">
+          ItemsSource="{Binding Recipe.VacuumRinseStep}" SelectionMode="Single" IsEnabled="{Binding Enable}" SelectedIndex="{Binding SelectedVacuumPrewetIndex,Mode=TwoWay}"
+                              ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ScrollViewer.VerticalScrollBarVisibility="Auto">
                         <DataGrid.Resources>
                             <extendedControls:BindingProxy x:Key="DataShowProxy"  Data="{Binding}" />
                         </DataGrid.Resources>
                         <DataGrid.Columns>
-                            <DataGridTextColumn Header="Step" Width="50"  Binding="{Binding CurrentRampDurartionSeconds,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False"/>
+                            <DataGridTextColumn Header="Step" IsReadOnly="True" Width="50"  Binding="{Binding Index,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False"/>
                             <DataGridTextColumn Header="Time(sec)" Width="80"  Binding="{Binding DurationSeconds,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False" >
                             </DataGridTextColumn>
                             <DataGridTextColumn Header="Speed(rpm)" Width="85"  Binding="{Binding RotationSpeed,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False" />
@@ -174,7 +179,173 @@ Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.Vac
                     </DataGrid>
                 </Grid>
             </GroupBox>
-          
+
+            <GroupBox  Header="0.Prewet Prepare" Grid.Column="0"  Padding="10"  Grid.Row="0">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="45"></RowDefinition>
+                        <RowDefinition Height="75"></RowDefinition>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="58.205"></ColumnDefinition>
+                        <ColumnDefinition Width="241.795"/>
+                    </Grid.ColumnDefinitions>
+                    <UserControls:GroupTextBoxControl Grid.Row="1" Title="DIW Loop DO" Unit="ppm" MinValue="0" MaxValue="10"  Width="300"
+                                                                 IntValue="{Binding Recipe.DiwLoopDoSet,Mode=TwoWay}" 
+                                                                 ValidResult="{Binding PropertyValidResultDic[DiwLoopDoSet],Mode=TwoWay}" Grid.ColumnSpan="2" />
+                    <GroupBox Grid.Row="0" IsEnabled="{Binding Enable}" Margin="0,10,0,0" Grid.ColumnSpan="2">
+                        <Grid>
+                            <Label Content="Purge Enable" Height="30" VerticalAlignment="Top" />
+                            <RadioButton Content="True" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
+           Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.PurgeEnable,Mode=TwoWay}" Margin="158,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="False" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
+            Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.PurgeEnable,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
+                        </Grid>
+                    </GroupBox>
+                </Grid>
+            </GroupBox>
+
+            <GroupBox  Header="4.Spin Off" Grid.Column="0"  Padding="10"  Grid.Row="1">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="75"></RowDefinition>
+                        <RowDefinition Height="75"></RowDefinition>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="58.205"></ColumnDefinition>
+                        <ColumnDefinition Width="241.795"/>
+                    </Grid.ColumnDefinitions>
+                    <UserControls:GroupTextBoxControl Grid.Row="0" Title="Spin Speed" Unit="rpm" MinValue="0" MaxValue="1000"  Width="300"
+                                                      IntValue="{Binding Recipe.SpinSpeed,Mode=TwoWay}" 
+                                                      ValidResult="{Binding PropertyValidResultDic[SpinSpeed],Mode=TwoWay}" Grid.ColumnSpan="2" />
+                    <UserControls:GroupTextBoxControl Grid.Row="1" Title="Spin Time" Unit="sec" MinValue="0" MaxValue="10"  Width="300"
+                                   IntValue="{Binding Recipe.SpinTime,Mode=TwoWay}" 
+                                   ValidResult="{Binding PropertyValidResultDic[SpinTime],Mode=TwoWay}" Grid.ColumnSpan="2" />
+
+                </Grid>
+            </GroupBox>
+
+            <GroupBox  Header="2.Vent Prewet" Grid.Column="1"  Padding="10" Grid.Row="0" Grid.RowSpan="2">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="45"></RowDefinition>
+                        <RowDefinition Height="45"></RowDefinition>
+                        <RowDefinition Height="45"></RowDefinition>
+                        <RowDefinition Height="200"></RowDefinition>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="300"></ColumnDefinition>
+                    </Grid.ColumnDefinitions>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Add Below" Height="25" Width="80" FontSize="10" Command="{Binding VentPrewetAddBelowCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-150,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Add Above" Height="25" Width="80" FontSize="10" Command="{Binding VentPrewetAddAboveCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-80,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Move Up" Height="25" Width="80" FontSize="10" Command="{Binding VentPrewetMoveUpCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-10,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Move Down" Height="25" Width="80" FontSize="10" Command="{Binding VentPrewetMoveDownCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,60,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Delete" Height="25" Width="80" FontSize="10" Command="{Binding VentPrewetDeleteCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,130,-20,0"></Button>
+                   
+                    <GroupBox Grid.Row="0" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
+                        <Grid>
+                            <Label Content="Drip Enable" Height="30" VerticalAlignment="Top" />
+                            <RadioButton Content="True" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
+Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.VentPrewetDripEnable ,Mode=TwoWay}" Margin="158,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="False" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
+ Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.VentPrewetDripEnable,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
+                        </Grid>
+                    </GroupBox>
+                    <GroupBox Grid.Row="1" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
+                        <Grid>
+                            <Label Content="Small Enable" Height="30" VerticalAlignment="Top" />
+                            <RadioButton Content="True" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
+Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.VentPrewetSmallEnable ,Mode=TwoWay}" Margin="158,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="False" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
+ Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.VentPrewetSmallEnable,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
+                        </Grid>
+                    </GroupBox>
+                    <GroupBox Grid.Row="2" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
+                        <Grid>
+                            <Label Content="Large" Height="30" VerticalAlignment="Top" />
+                            <RadioButton Content="True" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
+Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.VentPrewetLargeEnable ,Mode=TwoWay}" Margin="158,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="False" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
+ Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.VentPrewetLargeEnable,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
+                        </Grid>
+                    </GroupBox>
+                    <DataGrid x:Name="VentPrewetRinseGrid" Width="215" MinRowHeight="27" Grid.Row="6" AutoGenerateColumns="False"  CanUserAddRows="False"  FontFamily="Arial" FontSize="14" Margin="-70,10,0,0" 
+          ItemsSource="{Binding Recipe.VentRinseStep}" SelectionMode="Single" IsEnabled="{Binding Enable}" SelectedIndex="{Binding SelectedVentPrewetIndex,Mode=TwoWay}"
+                              ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ScrollViewer.VerticalScrollBarVisibility="Auto" >
+                        <DataGrid.Resources>
+                            <extendedControls:BindingProxy x:Key="DataShowProxy"  Data="{Binding}" />
+                        </DataGrid.Resources>
+                        <DataGrid.Columns>
+                            <DataGridTextColumn Header="Step" Width="50"  IsReadOnly="True" Binding="{Binding Index,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False"/>
+                            <DataGridTextColumn Header="Time(sec)" Width="80"  Binding="{Binding DurationSeconds,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False" >
+                            </DataGridTextColumn>
+                            <DataGridTextColumn Header="Speed(rpm)" Width="85"  Binding="{Binding RotationSpeed,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False" />
+                        </DataGrid.Columns>
+                    </DataGrid>
+                </Grid>
+            </GroupBox>
+
+            <GroupBox  Header="3.Extend Clean" Grid.Column="2"  Padding="10" Grid.Row="0" Grid.RowSpan="2">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="45"></RowDefinition>
+                        <RowDefinition Height="45"></RowDefinition>
+                        <RowDefinition Height="45"></RowDefinition>
+                        <RowDefinition Height="200"></RowDefinition>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="300"></ColumnDefinition>
+                    </Grid.ColumnDefinitions>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Add Below" Height="25" Width="80" FontSize="10" Command="{Binding ExtendCleanAddBelowCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-150,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Add Above" Height="25" Width="80" FontSize="10" Command="{Binding ExtendCleanAddAboveCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-80,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Move Up" Height="25" Width="80" FontSize="10" Command="{Binding ExtendCleanMoveUpCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,-10,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Move Down" Height="25" Width="80" FontSize="10" Command="{Binding ExtendCleanMoveDownCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,60,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Delete" Height="25" Width="80" FontSize="10" Command="{Binding ExtendCleanDeleteCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,130,-20,0"></Button>
+
+                    <GroupBox Grid.Row="0" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
+                        <Grid>
+                            <Label Content="Drip Enable" Height="30" VerticalAlignment="Top" />
+                            <RadioButton Content="True" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
+Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.ExtendCleanDripEnable ,Mode=TwoWay}" Margin="158,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="False" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
+ Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.ExtendCleanDripEnable,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
+                        </Grid>
+                    </GroupBox>
+                    <GroupBox Grid.Row="1" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
+                        <Grid>
+                            <Label Content="Small Enable" Height="30" VerticalAlignment="Top" />
+                            <RadioButton Content="True" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
+Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.ExtendCleanSmallEnable ,Mode=TwoWay}" Margin="158,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="False" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
+ Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.ExtendCleanSmallEnable,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
+                        </Grid>
+                    </GroupBox>
+                    <GroupBox Grid.Row="2" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
+                        <Grid>
+                            <Label Content="Large" Height="30" VerticalAlignment="Top" />
+                            <RadioButton Content="True" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Left"
+Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.ExtendCleanLargeEnable ,Mode=TwoWay}" Margin="158,-1,0,-6" ></RadioButton>
+                            <RadioButton Content="False" Height="30" Width="60" VerticalContentAlignment="Center" HorizontalAlignment="Center" 
+ Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.ExtendCleanLargeEnable,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
+                        </Grid>
+                    </GroupBox>
+                    <DataGrid x:Name="ExtendCleanRinseGrid" Width="215" MinRowHeight="27" Grid.Row="6" AutoGenerateColumns="False"  CanUserAddRows="False"  FontFamily="Arial" FontSize="14" Margin="-70,10,0,0" 
+          ItemsSource="{Binding Recipe.ExtendCleanRinseStep}" SelectionMode="Single" IsEnabled="{Binding Enable}" SelectedIndex="{Binding SelectedExtendCleanIndex,Mode=TwoWay}"
+                              ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ScrollViewer.VerticalScrollBarVisibility="Auto">
+                        <DataGrid.Resources>
+                            <extendedControls:BindingProxy x:Key="DataShowProxy"  Data="{Binding}" />
+                        </DataGrid.Resources>
+                        <DataGrid.Columns>
+                            <DataGridTextColumn Header="Step" Width="50"  IsReadOnly="True" Binding="{Binding Index,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False"/>
+                            <DataGridTextColumn Header="Time(sec)" Width="80"  Binding="{Binding DurationSeconds,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False" >
+                            </DataGridTextColumn>
+                            <DataGridTextColumn Header="Speed(rpm)" Width="85"  Binding="{Binding RotationSpeed,Mode=TwoWay}" CanUserSort="false" CanUserReorder="False" CanUserResize="False" />
+                        </DataGrid.Columns>
+                    </DataGrid>
+                </Grid>
+            </GroupBox>
+
+
         </Grid>
     </Grid>
 </UserControl>

+ 1 - 0
PunkHPX8_MainPages/Views/VpwRecipeView.xaml.cs

@@ -30,5 +30,6 @@ namespace PunkHPX8_MainPages.Views
         {
             (this.DataContext as VpwRecipeViewModel).LoadRecipeData();
         }
+
     }
 }

+ 1 - 1
PunkHPX8_RT/Config/Devices/Beckhoffcfg - plctask.xml

@@ -75,7 +75,7 @@
 
 		<!--////////////////////////////////////////////////// ALL AXIS BEGIN //////////////////////////////////////////////////-->
 
-		<Axis Name="VPW1.Rotation" MotorType="Kollmorgen" COEAddress="192.168.0.14.4.1" COEPort="1016" DebugLogging="false">
+		<Axis Name="VPW1.Rotation" MotorType="Yaskawa" COEAddress="192.168.0.14.4.1" COEPort="1016" DebugLogging="false">
 			<Input Address="MAIN.VPW1RotationStatusWord" Type="StatusWord" DataType="uint"/>
 			<Input Address="MAIN.VPW1RotationDigitalInputs" Type="DigitalInputs" DataType="udint"/>
 			<Input Address="MAIN.VPW1RotationMotorPosition" Type="MotorPosition" DataType="dint"/>

+ 3 - 0
PunkHPX8_Themes/PunkHPX8_Themes.csproj

@@ -1229,6 +1229,9 @@
     <Content Include="Themes\Images\parts\vtmrobot\dock.png" />
     <Content Include="Themes\Images\parts\vtmrobot\hand.png" />
     <Content Include="Themes\Images\parts\wafer.png" />
+    <Resource Include="Themes\Images\parts\VpwUp.png" />
+    <Resource Include="Themes\Images\parts\VpwCell.png" />
+    <Resource Include="Themes\Images\parts\VpwShelf.png" />
     <Content Include="Themes\Images\pms\chamberplasmaon.png" />
     <Content Include="Themes\Images\pms\levelSensor.png" />
     <Content Include="Themes\Images\pms\mfcPipe.png" />

BIN
PunkHPX8_Themes/Themes/Images/parts/VpwCell.png


BIN
PunkHPX8_Themes/Themes/Images/parts/VpwShelf.png


BIN
PunkHPX8_Themes/Themes/Images/parts/VpwUp.png


+ 28 - 13
PunkHPX8_Themes/UserControls/VPWCellUIControl.xaml

@@ -42,7 +42,7 @@
         </ContextMenu>
     </UserControl.Resources>
     <Canvas>
-        <Grid Height="50" Width="100" Canvas.Left="50" Canvas.Top="98"  >
+        <Grid Height="50" Width="100" Canvas.Left="149" Canvas.Top="110"  >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -54,11 +54,11 @@
                            ContextMenu="{StaticResource DripValve}"/>
             </Grid>
             <Grid Grid.Row="1">
-                <Label Margin="12,0,0,0" Height="30" Width="100" FontSize="10"  FontWeight="Bold" Content="Drip" />
+                <Label Margin="62,-18,-8,8" Height="30" FontSize="10"  FontWeight="Bold" Content="Drip" />
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="182" Canvas.Top="100" >
+        <Grid Height="50" Width="100" Canvas.Left="258" Canvas.Top="109" >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -70,27 +70,27 @@
                            ContextMenu="{StaticResource SmallValve}"/>
             </Grid>
             <Grid Grid.Row="1">
-                <Label Margin="12,0,0,0" Height="30" Width="100" FontSize="10"  FontWeight="Bold" Content="Small" />
+                <Label Margin="60,-20,-16,10" Height="30" FontSize="10"  FontWeight="Bold" Content="Small" />
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="321" Canvas.Top="100"  >
+        <Grid Height="50" Width="100" Canvas.Left="355" Canvas.Top="111" HorizontalAlignment="Left" VerticalAlignment="Center"  >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
             </Grid.RowDefinitions>
-            <Grid Grid.Row="0">
+            <Grid Grid.Row="0" Margin="0,-1,0,1">
                 <customControls:CommonValveControl Height="16" Width="16"   ValveOrientation="Horizontal" 
                            Status="{Binding ElementName=self,Path=LargeValve}"  
                            IsCanEdit="True" 
                            ContextMenu="{StaticResource LargeValve}"/>
             </Grid>
             <Grid Grid.Row="1">
-                <Label Margin="12,0,0,0" Height="30" Width="100" FontSize="10"  FontWeight="Bold" Content="Large" />
+                <Label Margin="62,-22,-30,12" Height="30" FontSize="10"  FontWeight="Bold" Content="Large" />
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="38" Canvas.Top="203" >
+        <Grid Height="50" Width="100" Canvas.Left="436" Canvas.Top="203" HorizontalAlignment="Center" VerticalAlignment="Top" >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -106,12 +106,12 @@
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="173" Canvas.Top="196" >
+        <Grid Height="50" Width="100" Canvas.Left="451" Canvas.Top="378" HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="2">
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
             </Grid.RowDefinitions>
-            <Grid Grid.Row="0">
+            <Grid Grid.Row="0" >
                 <customControls:CommonValveControl Height="16" Width="16"   ValveOrientation="Horizontal" 
                            Status="{Binding ElementName=self,Path=DrainValve}"  
                            IsCanEdit="True" 
@@ -122,7 +122,7 @@
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="309" Canvas.Top="193" >
+        <Grid Height="50" Width="100" Canvas.Left="43" Canvas.Top="431" Panel.ZIndex="2">
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -138,7 +138,7 @@
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="120" Canvas.Left="73" Canvas.Top="26"  >
+        <Grid Height="50" Width="120" Canvas.Left="420" Canvas.Top="14"  >
             <Grid.RowDefinitions>
                 <RowDefinition Height="20"></RowDefinition>
                 <RowDefinition Height="30"></RowDefinition>
@@ -158,7 +158,7 @@
             </Border>
         </Grid>
 
-        <Grid Height="50" Width="120" Canvas.Left="257" Canvas.Top="29"  >
+        <Grid Height="50" Width="120" Canvas.Left="76" Canvas.Top="377"  >
             <Grid.RowDefinitions>
                 <RowDefinition Height="20"></RowDefinition>
                 <RowDefinition Height="30"></RowDefinition>
@@ -177,6 +177,21 @@
                 <TextBlock  Text="Toor" Foreground="Lime" FontSize="12" FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Center"/>
             </Border>
         </Grid>
+        <Image Source="pack://application:,,,/PunkHPX8_Themes;component/Themes/Images/parts/VpwUp.png" Height="84"  Width="254"  HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="181" Canvas.Top="163"/>
+        <Image Source="pack://application:,,,/PunkHPX8_Themes;component/Themes/Images/parts/VpwCell.png" Height="236"  Width="236"  HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="187" Canvas.Top="247"/>
+
+        <userControls:FlowPipe  Height="6" Width="360" IsFlowing="{Binding RinseCommonData.FillValve}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="195" Canvas.Top="66" HorizontalAlignment="Left" VerticalAlignment="Center" />
+        <userControls:FlowPipe IsFlowing="{Binding RinseCommonData.DrainValve}" Height="8"  Width="124"  RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Center" Panel.ZIndex="-1" Canvas.Left="409" Canvas.Top="70"/>
+        <userControls:FlowPipe IsFlowing="{Binding RinseCommonData.DrainValve}" Height="8"  Width="124"  RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top" Panel.ZIndex="-1" Canvas.Left="203" Canvas.Top="67"/>
+        <userControls:FlowPipe IsFlowing="{Binding RinseCommonData.DrainValve}" Height="8"  Width="124"  RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Center" Panel.ZIndex="-1" Canvas.Left="312" Canvas.Top="71"/>
+
+        <userControls:FlowPipe  Height="6" Width="130" IsFlowing="{Binding ElementName=self,Path=VentValve}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="424" Canvas.Top="215" HorizontalAlignment="Left" VerticalAlignment="Top" />
+        <userControls:FlowPipe  Height="6" Width="230" IsFlowing="{Binding ElementName=self,Path=DrainValve}" IsReverse="False" Panel.ZIndex="1" Canvas.Left="321" Canvas.Top="391" HorizontalAlignment="Left" VerticalAlignment="Center" />
+        <userControls:FlowPipe  Height="6" Width="260" IsFlowing="{Binding ElementName=self,Path=DrainValve}" IsReverse="False" Panel.ZIndex="1" Canvas.Left="48" Canvas.Top="443" HorizontalAlignment="Center" VerticalAlignment="Top" />
 
+        <Label  Height="26" Width="63" FontSize="10"  FontWeight="Bold" Content="DIW In" Canvas.Left="552" Canvas.Top="58" HorizontalAlignment="Center" VerticalAlignment="Top" />
+        <Label  Height="26" Width="63" FontSize="10"  FontWeight="Bold" Content="N2 In" Canvas.Left="553" Canvas.Top="207" HorizontalAlignment="Left" VerticalAlignment="Top" />
+        <Label  Height="26" Width="63" FontSize="10"  FontWeight="Bold" Content="To Drain" Canvas.Left="540" Canvas.Top="368" HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="0.302,1.385" />
+        <Label  Height="26" Width="80" FontSize="10"  FontWeight="Bold" Content="To VAC Pump" Canvas.Left="2" Canvas.Top="421" HorizontalAlignment="Center" VerticalAlignment="Top" />
     </Canvas>
 </UserControl>

+ 56 - 12
PunkHPX8_Themes/UserControls/VPWMainUIControl.xaml

@@ -38,7 +38,7 @@
         </ContextMenu>
     </UserControl.Resources>
     <Canvas>
-        <Grid Height="50" Width="100" Canvas.Left="50" Canvas.Top="98"  >
+        <Grid Height="50" Width="100" Canvas.Left="206" Canvas.Top="107"  >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -54,7 +54,7 @@
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="182" Canvas.Top="100" >
+        <Grid Height="50" Width="100" Canvas.Left="575" Canvas.Top="107" >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -70,7 +70,7 @@
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="321" Canvas.Top="100"  >
+        <Grid Height="50" Width="100" Canvas.Left="206" Canvas.Top="226"  >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -86,7 +86,7 @@
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="474" Canvas.Top="102" >
+        <Grid Height="50" Width="100" Canvas.Left="250" Canvas.Top="624" >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -102,7 +102,7 @@
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="100" Canvas.Left="624" Canvas.Top="108" >
+        <Grid Height="50" Width="100" Canvas.Left="510" Canvas.Top="624" HorizontalAlignment="Left" VerticalAlignment="Center" >
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"></RowDefinition>
                 <RowDefinition Height="20"></RowDefinition>
@@ -118,7 +118,7 @@
             </Grid>
         </Grid>
 
-        <Grid Height="50" Width="120" Canvas.Left="330" Canvas.Top="24"  >
+        <Grid Height="50" Width="120" Canvas.Left="282" Canvas.Top="66"  >
             <Grid.RowDefinitions>
                 <RowDefinition Height="20"></RowDefinition>
                 <RowDefinition Height="30"></RowDefinition>
@@ -138,12 +138,56 @@
             </Border>
         </Grid>
 
-        <userControls:ReservoirPump IsEnabled="True" ModuleName="{Binding ModuleName,ElementName=self}" PumpType="BoosterPump" RotateTransformValue="0" IsOpenPump="{Binding IsBoosterPumpOpen,Mode=TwoWay,ElementName=self}" Height="60" Width="60"  Tag="26" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="146" Canvas.Top="194" />
-        <userControls:ReservoirPump IsEnabled="True" ModuleName="{Binding ModuleName,ElementName=self}" PumpType="DegasPump" RotateTransformValue="0" IsOpenPump="{Binding IsDegasPumpOpen,Mode=TwoWay,ElementName=self}" Height="60" Width="60"   Tag="26" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="290" Canvas.Top="195" />
-        <userControls:ReservoirPump IsEnabled="True" ModuleName="{Binding ModuleName,ElementName=self}" PumpType="VacuumPump" RotateTransformValue="0" IsOpenPump="{Binding IsVacuumPumpOpen,Mode=TwoWay,ElementName=self}" Height="60" Width="60"   Tag="26" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="432" Canvas.Top="199"  />
-        <Label  Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="Booster Pump" Canvas.Left="128" Canvas.Top="266" />
-        <Label  Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="Degas Pump" Canvas.Left="273" Canvas.Top="268" />
-        <Label  Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="Vacuum Pump" Canvas.Left="423" Canvas.Top="270" />
+        <userControls:ReservoirPump IsEnabled="True" ModuleName="{Binding ModuleName,ElementName=self}" PumpType="BoosterPump" RotateTransformValue="0" IsOpenPump="{Binding IsBoosterPumpOpen,Mode=TwoWay,ElementName=self}" Height="60" Width="60"  Tag="26" HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="99" Canvas.Top="70" />
+        <userControls:ReservoirPump IsEnabled="True" ModuleName="{Binding ModuleName,ElementName=self}" PumpType="DegasPump" RotateTransformValue="0" IsOpenPump="{Binding IsDegasPumpOpen,Mode=TwoWay,ElementName=self}" Height="60" Width="60"   Tag="26" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Left="99" Canvas.Top="187" />
+        <userControls:ReservoirPump IsEnabled="True" ModuleName="{Binding ModuleName,ElementName=self}" PumpType="VacuumPump" RotateTransformValue="0" IsOpenPump="{Binding IsVacuumPumpOpen,Mode=TwoWay,ElementName=self}" Height="60" Width="60"   Tag="26" HorizontalAlignment="Left" VerticalAlignment="Center" Canvas.Left="396" Canvas.Top="694" RenderTransformOrigin="0.25,0.517"  >
+            <local:ReservoirPump.RenderTransform>
+                <TransformGroup>
+                    <ScaleTransform/>
+                    <SkewTransform/>
+                    <RotateTransform Angle="-89.495"/>
+                    <TranslateTransform/>
+                </TransformGroup>
+            </local:ReservoirPump.RenderTransform>
+        </userControls:ReservoirPump>
+        <Label  Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="Booster Pump" Canvas.Left="86" Canvas.Top="136" />
+        <Label  Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="Degas Pump" Canvas.Left="86" Canvas.Top="263" />
+        <Label  Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="Vacuum Pump" Canvas.Left="376" Canvas.Top="740" HorizontalAlignment="Left" VerticalAlignment="Center" />
+        <Label  Height="20" Width="51" FontSize="10"  FontWeight="Bold" Content="DIW In" Canvas.Left="17" Canvas.Top="110" HorizontalAlignment="Center" VerticalAlignment="Top" />
+        <Label  Height="26" Width="63" FontSize="10"  FontWeight="Bold" Content="N2 Purge" Canvas.Left="698" Canvas.Top="42" HorizontalAlignment="Center" VerticalAlignment="Top" />
+        <Image Source="pack://application:,,,/PunkHPX8_Themes;component/Themes/Images/parts/VpwUp.png" Height="84"  Width="254"  HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="182" Canvas.Top="304"/>
+        <Image Source="pack://application:,,,/PunkHPX8_Themes;component/Themes/Images/parts/VpwUp.png" Height="84"  Width="254"  HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="446" Canvas.Top="304"/>
+        <Image Source="pack://application:,,,/PunkHPX8_Themes;component/Themes/Images/parts/VpwCell.png" Height="236"  Width="236"  HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="183" Canvas.Top="392"/>
+        <Image Source="pack://application:,,,/PunkHPX8_Themes;component/Themes/Images/parts/VpwCell.png" Height="236"  Width="236"  HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="440" Canvas.Top="392"/>
+        <Image Source="pack://application:,,,/PunkHPX8_Themes;component/Themes/Images/parts/VpwShelf.png" Height="186"  Width="292"  HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="276" Canvas.Top="422"/>
 
+        <userControls:FlowPipe  Height="6" Width="180" IsFlowing="{Binding IsBoosterPumpOpen,ElementName=self}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="71" Canvas.Top="119" HorizontalAlignment="Left" VerticalAlignment="Center" />
+        <userControls:FlowPipe  Height="6" Width="360" IsFlowing="{Binding RinseCommonData.FillValve}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="261" Canvas.Top="119" HorizontalAlignment="Left" VerticalAlignment="Center" />
+        <userControls:FlowPipe  Height="6" Width="400" IsFlowing="{Binding RinseCommonData.FillValve}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="330" Canvas.Top="265" HorizontalAlignment="Left" VerticalAlignment="Top" />
+        <userControls:FlowPipe  Height="6" Width="100" IsFlowing="{Binding RinseCommonData.FillValve}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="630" Canvas.Top="119" HorizontalAlignment="Left" VerticalAlignment="Center" />
+        <userControls:FlowPipe IsFlowing="{Binding RinseCommonData.DrainValve}" Height="8"  Width="124"  RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="418" Canvas.Top="119"/>
+        <userControls:FlowPipe IsFlowing="{Binding RinseCommonData.DrainValve}" Height="8"  Width="150"  RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="730" Canvas.Top="119"/>
+        <userControls:FlowPipe IsFlowing="{Binding RinseCommonData.DrainValve}" Height="8"  Width="80"  RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="530" Canvas.Top="265"/>
+        <userControls:FlowPipe IsFlowing="{Binding RinseCommonData.DrainValve}" Height="8"  Width="80"  RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Center" Panel.ZIndex="1" Canvas.Left="338" Canvas.Top="265"/>
+        <userControls:FlowPipe IsReverse="True" IsFlowing="{Binding IsVacuumPumpOpen,Mode=TwoWay,ElementName=self}" Height="8"  Width="40"  RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="437" Canvas.Top="641"/>
+        <userControls:FlowPipe IsFlowing="{Binding ElementName=self,Path=VPW1VACValve}" Height="8"  Width="40"  RotateTransformValue="90" HorizontalAlignment="Center" VerticalAlignment="Top" Panel.ZIndex="1" Canvas.Left="304" Canvas.Top="593"/>
+        <userControls:FlowPipe IsFlowing="{Binding ElementName=self,Path=VPW2VACValve}" Height="8"  Width="40"  RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Center" Panel.ZIndex="1" Canvas.Left="564" Canvas.Top="593"/>
+        <userControls:FlowPipe  Height="6" Width="160" IsFlowing="{Binding IsDegasPumpOpen,ElementName=self}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="100" Canvas.Top="237" HorizontalAlignment="Left" VerticalAlignment="Center" />
+        <userControls:FlowPipe  Height="6" Width="160" IsFlowing="{Binding RinseCommonData.FillValve}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="255" Canvas.Top="237" HorizontalAlignment="Left" VerticalAlignment="Top" />
+        <userControls:FlowPipe  Height="6" Width="135" IsFlowing="{Binding IsVacuumPumpOpen,ElementName=self}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="296" Canvas.Top="636" HorizontalAlignment="Left" VerticalAlignment="Top" />
+        <userControls:FlowPipe  Height="6" Width="135" IsFlowing="{Binding IsVacuumPumpOpen,ElementName=self}" IsReverse="False" Panel.ZIndex="-1" Canvas.Left="430" Canvas.Top="636" HorizontalAlignment="Center" VerticalAlignment="Top" />
+
+        <Canvas Width="40" Height="20" Canvas.Left="710" Canvas.Top="79" HorizontalAlignment="Left" VerticalAlignment="Top" RenderTransformOrigin="0.5,0.5" >
+            <Canvas.RenderTransform>
+                <TransformGroup>
+                    <ScaleTransform/>
+                    <SkewTransform/>
+                    <RotateTransform Angle="-89.31"/>
+                    <TranslateTransform/>
+                </TransformGroup>
+            </Canvas.RenderTransform>
+            <Polygon Width="10" Points="0,10 20,0 20,20" Fill="Black" StrokeThickness="1" HorizontalAlignment="Left" VerticalAlignment="Center"></Polygon>
+            <Polygon Points="0,0 30,0 30,4 0,4" Fill="Black" StrokeThickness="1" Canvas.Left="10" Canvas.Top="8" HorizontalAlignment="Left" VerticalAlignment="Center"></Polygon>
+        </Canvas>
     </Canvas>
 </UserControl>