Browse Source

revise vpw recipe

chenzk 2 days ago
parent
commit
1faa7077b3

+ 30 - 0
Framework/Common/RecipeCenter/VpwRecipe.cs

@@ -31,16 +31,25 @@ namespace MECF.Framework.Common.RecipeCenter
         private bool _vacuumPrewetSmallEnable;
         private bool _vacuumPrewetLargeEnable;
         private ObservableCollection<VpwRinseStep> _vacuumRinseStep;
+        private int _vacuumPrewetFlowSetPoint;
+        private int _vacuumPrewetFlowWarningPercent;
+        private int _vacuumPrewetFlowErrorPercent;
 
         private bool _ventPrewetDripEnable;
         private bool _ventPrewetSmallEnable;
         private bool _ventPrewetLargeEnable;
         private ObservableCollection<VpwRinseStep> _ventRinseStep;
+        private int _ventPrewetFlowSetPoint;
+        private int _ventPrewetFlowWarningPercent;
+        private int _ventPrewetFlowErrorPercent;
 
         private bool _extendCleanDripEnable;
         private bool _extendCleanSmallEnable;
         private bool _extendCleanLargeEnable;
         private ObservableCollection<VpwRinseStep> _extendCleanRinseStep;
+        private int _extendCleanFlowSetPoint;
+        private int _extendCleanFlowWarningPercent;
+        private int _extendCleanFlowErrorPercent;
 
         private int _spinSpeed;
         private int _spinTime;
@@ -95,6 +104,12 @@ namespace MECF.Framework.Common.RecipeCenter
 
         [JsonProperty]
         public ObservableCollection<VpwRinseStep> VacuumRinseStep { get { return _vacuumRinseStep; } set { _vacuumRinseStep = value; InvokePropertyChanged(nameof(VacuumRinseStep)); } }
+        [JsonProperty]
+        public int VacuumPrewetFlowSetPoint { get { return _vacuumPrewetFlowSetPoint; } set { _vacuumPrewetFlowSetPoint = value; InvokePropertyChanged(nameof(VacuumPrewetFlowSetPoint)); } }
+        [JsonProperty]
+        public int VacuumPrewetFlowWarningPercent { get { return _vacuumPrewetFlowWarningPercent; } set { _vacuumPrewetFlowWarningPercent = value; InvokePropertyChanged(nameof(VacuumPrewetFlowWarningPercent)); } }
+        [JsonProperty]
+        public int VacuumPrewetFlowErrorPercent { get { return _vacuumPrewetFlowErrorPercent; } set { _vacuumPrewetFlowErrorPercent = value; InvokePropertyChanged(nameof(VacuumPrewetFlowErrorPercent)); } }
 
         [JsonProperty]
         public bool VentPrewetDripEnable { get { return _ventPrewetDripEnable; } set { _ventPrewetDripEnable = value; InvokePropertyChanged(nameof(VentPrewetDripEnable)); } }
@@ -109,6 +124,14 @@ namespace MECF.Framework.Common.RecipeCenter
         public ObservableCollection<VpwRinseStep> VentRinseStep { get { return _ventRinseStep; } set { _ventRinseStep = value; InvokePropertyChanged(nameof(VentRinseStep)); } }
 
         [JsonProperty]
+        public int VentPrewetFlowSetPoint { get { return _ventPrewetFlowSetPoint; } set { _ventPrewetFlowSetPoint = value; InvokePropertyChanged(nameof(VentPrewetFlowSetPoint)); } }
+        [JsonProperty]
+        public int VentPrewetFlowWarningPercent { get { return _ventPrewetFlowWarningPercent; } set { _ventPrewetFlowWarningPercent = value; InvokePropertyChanged(nameof(VentPrewetFlowWarningPercent)); } }
+        [JsonProperty]
+        public int VentPrewetFlowErrorPercent { get { return _ventPrewetFlowErrorPercent; } set { _ventPrewetFlowErrorPercent = value; InvokePropertyChanged(nameof(VentPrewetFlowErrorPercent)); } }
+
+
+        [JsonProperty]
         public bool ExtendCleanDripEnable { get { return _extendCleanDripEnable; } set { _extendCleanDripEnable = value; InvokePropertyChanged(nameof(ExtendCleanDripEnable)); } }
 
         [JsonProperty]
@@ -121,6 +144,13 @@ namespace MECF.Framework.Common.RecipeCenter
         public ObservableCollection<VpwRinseStep> ExtendCleanRinseStep { get { return _extendCleanRinseStep; } set { _extendCleanRinseStep = value; InvokePropertyChanged(nameof(ExtendCleanRinseStep)); } }
 
         [JsonProperty]
+        public int ExtendCleanFlowSetPoint { get { return _extendCleanFlowSetPoint; } set { _extendCleanFlowSetPoint = value; InvokePropertyChanged(nameof(ExtendCleanFlowSetPoint)); } }
+        [JsonProperty]
+        public int ExtendCleanFlowWarningPercent { get { return _extendCleanFlowWarningPercent; } set { _extendCleanFlowWarningPercent = value; InvokePropertyChanged(nameof(ExtendCleanFlowWarningPercent)); } }
+        [JsonProperty]
+        public int ExtendCleanFlowErrorPercent { get { return _extendCleanFlowErrorPercent; } set { _extendCleanFlowErrorPercent = value; InvokePropertyChanged(nameof(ExtendCleanFlowErrorPercent)); } }
+
+        [JsonProperty]
         public int SpinSpeed { get { return _spinSpeed; } set { _spinSpeed = value; InvokePropertyChanged(nameof(SpinSpeed)); } }
         
         [JsonProperty]

+ 9 - 0
PunkHPX8_MainPages/ViewModels/VpwRecipeViewModel.cs

@@ -217,6 +217,15 @@ namespace PunkHPX8_MainPages.ViewModels
             PropertyValidResultDic["DiwLoopDoSet"] = false;
             PropertyValidResultDic["SpinSpeed"] = false;
             PropertyValidResultDic["SpinTime"] = false;
+            PropertyValidResultDic["VacuumPrewetFlowSetPoint"] = false;
+            PropertyValidResultDic["VacuumPrewetFlowWarningPercent"] = false;
+            PropertyValidResultDic["VacuumPrewetFlowErrorPercent"] = false;
+            PropertyValidResultDic["VentPrewetFlowSetPoint"] = false;
+            PropertyValidResultDic["VentPrewetFlowWarningPercent"] = false;
+            PropertyValidResultDic["VentPrewetFlowErrorPercent"] = false;
+            PropertyValidResultDic["ExtendCleanFlowSetPoint"] = false;
+            PropertyValidResultDic["ExtendCleanFlowWarningPercent"] = false;
+            PropertyValidResultDic["ExtendCleanFlowErrorPercent"] = false;
         }
 
         public void LoadRecipeData()

+ 53 - 22
PunkHPX8_MainPages/Views/VpwRecipeView.xaml

@@ -117,11 +117,24 @@
                     <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 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>
+                    <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,0,-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,70,-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,140,-20,0"></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Move Down" Height="26" Width="80" FontSize="10" Command="{Binding MoveDownCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,165,-20,-50" ></Button>
+                    <Button Grid.Row="6" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Delete" Height="26" Width="80" FontSize="10" Command="{Binding DeleteCommand}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,210,-20,-80"/>
+
+                    <UserControls:GroupTextBoxControl Grid.Row="6" Title="Flow Set Ponit" Unit="L/min" MinValue="0" MaxValue="10" Width="120" Margin="0,0,200,119"
+                                       IntValue="{Binding Recipe.VacuumPrewetFlowSetPoint,Mode=TwoWay}" 
+                                       ValidResult="{Binding PropertyValidResultDic[VacuumPrewetFlowSetPoint],Mode=TwoWay}"  />
+                    <UserControls:GroupTextBoxControl Grid.Row="6" Title="Flow Warning" Unit="%" MinValue="0" MaxValue="100" Margin="97,0,105,118" Width="120"
+                        IntValue="{Binding Recipe.VacuumPrewetFlowWarningPercent,Mode=TwoWay}" 
+                        ValidResult="{Binding PropertyValidResultDic[VacuumPrewetFlowWarningPercent],Mode=TwoWay}"  />
+                    <UserControls:GroupTextBoxControl Grid.Row="6" Title="Flow Fault" Unit="%" MinValue="0" MaxValue="100" Margin="194,0,-14,118" Width="120"
+                        IntValue="{Binding Recipe.VacuumPrewetFlowErrorPercent,Mode=TwoWay}" 
+                        ValidResult="{Binding PropertyValidResultDic[VacuumPrewetFlowErrorPercent],Mode=TwoWay}"  />
+
+
+
                     <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}" />
@@ -164,7 +177,7 @@ Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.Vac
  Command="{Binding AutoCurrentBasedTrueCommand}"  IsChecked="{Binding Recipe.VacuumPrewetLargeEnable,Mode=TwoWay,Converter={StaticResource boolReverseConverter}}" Margin="220,-1,0,-6" ></RadioButton>
                         </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" 
+                    <DataGrid x:Name="VacuumPrewetRinseGrid" Width="215" MinRowHeight="27" Grid.Row="6" AutoGenerateColumns="False"  CanUserAddRows="False"  FontFamily="Arial" FontSize="14" Margin="12,88,73,-78" 
           ItemsSource="{Binding Recipe.VacuumRinseStep}" SelectionMode="Single" IsEnabled="{Binding Enable}" SelectedIndex="{Binding SelectedVacuumPrewetIndex,Mode=TwoWay}"
                               ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ScrollViewer.VerticalScrollBarVisibility="Auto">
                         <DataGrid.Resources>
@@ -226,22 +239,32 @@ Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.Vac
             </GroupBox>
 
             <GroupBox  Header="2.Vent Prewet" Grid.Column="1"  Padding="10" Grid.Row="0" Grid.RowSpan="2">
-                <Grid>
+                <Grid Margin="0,0,0,0">
                     <Grid.RowDefinitions>
                         <RowDefinition Height="45"></RowDefinition>
                         <RowDefinition Height="45"></RowDefinition>
                         <RowDefinition Height="45"></RowDefinition>
-                        <RowDefinition Height="200"></RowDefinition>
+                        <RowDefinition Height="300"></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>
-                   
+                    <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,-100,-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,-30,-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,40,-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,110,-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,180,-20,0"></Button>
+
+                    <UserControls:GroupTextBoxControl Grid.Row="3" Title="Flow Set Ponit" Unit="L/min" MinValue="0" MaxValue="10" Width="120" Margin="-1,2,201,220"
+                                                          IntValue="{Binding Recipe.VentPrewetFlowSetPoint,Mode=TwoWay}" 
+                                                          ValidResult="{Binding PropertyValidResultDic[VentPrewetFlowSetPoint],Mode=TwoWay}"  />
+                    <UserControls:GroupTextBoxControl Grid.Row="3" Title="Flow Warning" Unit="%" MinValue="0" MaxValue="100" Margin="96,2,84,220" Width="120"
+                                           IntValue="{Binding Recipe.VentPrewetFlowWarningPercent,Mode=TwoWay}" 
+                                           ValidResult="{Binding PropertyValidResultDic[VentPrewetFlowWarningPercent],Mode=TwoWay}"  />
+                    <UserControls:GroupTextBoxControl Grid.Row="3" Title="Flow Fault" Unit="%" MinValue="0" MaxValue="100" Margin="213,2,-15,220" Width="120"
+                                           IntValue="{Binding Recipe.VentPrewetFlowErrorPercent,Mode=TwoWay}" 
+                                           ValidResult="{Binding PropertyValidResultDic[VentPrewetFlowErrorPercent],Mode=TwoWay}"  />
+
                     <GroupBox Grid.Row="0" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
                         <Grid>
                             <Label Content="Drip Enable" Height="30" VerticalAlignment="Top" />
@@ -269,7 +292,7 @@ Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.Ven
  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" 
+                    <DataGrid x:Name="VentPrewetRinseGrid" Width="215" MinRowHeight="27" Grid.Row="3" AutoGenerateColumns="False"  CanUserAddRows="False"  FontFamily="Arial" FontSize="14" Margin="8,89,77,1" 
           ItemsSource="{Binding Recipe.VentRinseStep}" SelectionMode="Single" IsEnabled="{Binding Enable}" SelectedIndex="{Binding SelectedVentPrewetIndex,Mode=TwoWay}"
                               ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ScrollViewer.VerticalScrollBarVisibility="Auto" >
                         <DataGrid.Resources>
@@ -296,12 +319,20 @@ Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.Ven
                     <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>
-
+                    <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,10,-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,150,-20,0"></Button>
+                    <Button Grid.Row="3" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Move Down" FontSize="10" Height="26" Width="80" Command="{Binding ExtendCleanMoveDownCommand}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,-20,-23"/>
+                    <Button Grid.Row="3" Style="{StaticResource SysBtnStyle}"  IsEnabled="{Binding Enable}" Content="Delete" Height="24" Width="80" FontSize="10" Command="{Binding ExtendCleanDeleteCommand}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,-20,-57"></Button>
+                    <UserControls:GroupTextBoxControl Grid.Row="3" Title="Flow Set Ponit" Unit="L/min" MinValue="0" MaxValue="10" Width="120" Margin="1,3,199,123"
+                                       IntValue="{Binding Recipe.ExtendCleanFlowSetPoint,Mode=TwoWay}" 
+                                       ValidResult="{Binding PropertyValidResultDic[ExtendCleanFlowSetPoint],Mode=TwoWay}"  />
+                    <UserControls:GroupTextBoxControl Grid.Row="3" Title="Flow Warning" Unit="%" MinValue="0" MaxValue="100" Margin="100,2,105,122" Width="120"
+                        IntValue="{Binding Recipe.ExtendCleanFlowWarningPercent,Mode=TwoWay}" 
+                        ValidResult="{Binding PropertyValidResultDic[ExtendCleanFlowWarningPercent],Mode=TwoWay}"  />
+                    <UserControls:GroupTextBoxControl Grid.Row="3" Title="Flow Fault" Unit="%" MinValue="0" MaxValue="100" Margin="196,1,-16,122" Width="120"
+                        IntValue="{Binding Recipe.ExtendCleanFlowErrorPercent,Mode=TwoWay}" 
+                        ValidResult="{Binding PropertyValidResultDic[ExtendCleanFlowErrorPercent],Mode=TwoWay}"  />
                     <GroupBox Grid.Row="0" IsEnabled="{Binding Enable}" Margin="0,10,0,0">
                         <Grid>
                             <Label Content="Drip Enable" Height="30" VerticalAlignment="Top" />
@@ -329,7 +360,7 @@ Command="{Binding AutoCurrentBasedFalseCommand}"  IsChecked="{Binding Recipe.Ext
  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" 
+                    <DataGrid x:Name="ExtendCleanRinseGrid" Width="215" MinRowHeight="27" Grid.Row="3" AutoGenerateColumns="False"  CanUserAddRows="False"  FontFamily="Arial" FontSize="14" Margin="12,93,73,-83" 
           ItemsSource="{Binding Recipe.ExtendCleanRinseStep}" SelectionMode="Single" IsEnabled="{Binding Enable}" SelectedIndex="{Binding SelectedExtendCleanIndex,Mode=TwoWay}"
                               ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ScrollViewer.VerticalScrollBarVisibility="Auto">
                         <DataGrid.Resources>