Pārlūkot izejas kodu

add DM reservoir view/viewModel

chenzk 1 nedēļu atpakaļ
vecāks
revīzija
ed1923e293

+ 8 - 0
PunkHPX8_MainPages/PunkHPX8_MainPages.csproj

@@ -165,6 +165,7 @@
     <Compile Include="Validation\EmptyValidationRule.cs" />
     <Compile Include="ViewModels\AlarmHomePageViewModel.cs" />
     <Compile Include="ViewModels\DataHistoryViewModel.cs" />
+    <Compile Include="ViewModels\DMReservoirViewModel.cs" />
     <Compile Include="ViewModels\DosingSystemViewModel.cs" />
     <Compile Include="ViewModels\DqdrRecipeViewModel.cs" />
     <Compile Include="ViewModels\JobOperationViewModel.cs" />
@@ -227,6 +228,9 @@
     <Compile Include="Views\DataHistoryView.xaml.cs">
       <DependentUpon>DataHistoryView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\DMReservoirView.xaml.cs">
+      <DependentUpon>DMReservoirView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\DosingSystemView.xaml.cs">
       <DependentUpon>DosingSystemView.xaml</DependentUpon>
     </Compile>
@@ -448,6 +452,10 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="Views\DMReservoirView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="Views\DosingSystemView.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 12 - 0
PunkHPX8_MainPages/ViewModels/DMReservoirViewModel.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PunkHPX8_MainPages.ViewModels
+{
+    public class DMReservoirViewModel
+    {
+    }
+}

+ 276 - 0
PunkHPX8_MainPages/Views/DMReservoirView.xaml

@@ -0,0 +1,276 @@
+<UserControl x:Class="PunkHPX8_MainPages.Views.DMReservoirView"
+         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:local="clr-namespace:PunkHPX8_MainPages.Views"
+         xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
+         xmlns:customControls="clr-namespace:PunkHPX8_Themes.CustomControls;assembly=PunkHPX8_Themes"
+         xmlns:userControls="clr-namespace:PunkHPX8_Themes.UserControls;assembly=PunkHPX8_Themes"
+         xmlns:converters="clr-namespace:PunkHPX8_Themes.Converters;assembly=PunkHPX8_Themes"
+         xmlns:Control="clr-namespace:MECF.Framework.UI.Core.Control;assembly=MECF.Framework.UI.Core"  
+         xmlns:Control1="clr-namespace:Aitex.Core.UI.Control;assembly=MECF.Framework.UI.Core"
+         xmlns:cmd="http://www.galasoft.ch/mvvmlight"
+         xmlns:prism="http://prismlibrary.com/"
+         prism:ViewModelLocator.AutoWireViewModel="True"
+         mc:Ignorable="d"
+         d:DesignHeight="1000" d:DesignWidth="1500">
+    <UserControl.Resources>
+        <converters:StringToString x:Key="stringToString"/>
+        <converters:BoolToOrientation x:Key="boolToOrientation"></converters:BoolToOrientation>
+        <converters:BoolToOrientation2 x:Key="boolToOrientation2"></converters:BoolToOrientation2>
+        <converters:BoolToColor x:Key="boolToColor"/>
+        <converters:BoolToRedColor x:Key="boolToRedColor"/>
+        <converters:boolToRedColor2 x:Key="boolToRedColor2"/>
+        <converters:BoolToVisibility2 x:Key="boolToVisibility2"/>
+        <converters:MutiBoolToBool x:Key="mutiBoolToBool"/>
+    </UserControl.Resources>
+    <Canvas>
+        <Grid>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="5"/>
+                <RowDefinition Height="150"/>
+                <RowDefinition Height="350"/>
+                <RowDefinition Height="150"/>
+                <RowDefinition Height="350"/>
+                <RowDefinition/>
+            </Grid.RowDefinitions>
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="500"></ColumnDefinition>
+                <ColumnDefinition Width="500"></ColumnDefinition>
+                <ColumnDefinition Width="500"></ColumnDefinition>
+                <ColumnDefinition Width="300"></ColumnDefinition>
+                <ColumnDefinition/>
+            </Grid.ColumnDefinitions>
+            <Grid Grid.Row="1" Grid.Column="0">
+                <userControls:ReservoirsInformationPanel HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Center" 
+                      ModuleTitle="{Binding Module}"
+                      
+                      
+                                    />
+            </Grid>
+            <GroupBox Header="CA DIW Replen" FontWeight="Bold" FontSize="15" Grid.Row="2" Grid.Column="0" Width="200" Grid.RowSpan="2" Height="350" Margin="0,0,270,110">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="30"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="30"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="0">
+                        <Label Content="Total On Time" FontSize="14" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" />
+                    </Grid>
+                    <Border Grid.Row="1" Background="Black" Width="130" Margin="0 -3 0 0">
+                        <TextBlock Text="{Binding ReservoirsPersistent.TotalReplen,StringFormat={}{0} sec}" Foreground="Lime" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
+                    <Grid Grid.Row="2">
+                        <Button IsEnabled="{Binding IsEnabled}" Style="{StaticResource SysBtnStyle}" Grid.Column="1" Command="{Binding ResetTotalCommand}" Height="30" Width="130" HorizontalAlignment="Center" VerticalAlignment="Bottom"  Content="Reset Total"></Button>
+                    </Grid>
+                    <Grid Grid.Row="3">
+                        <Label Content="Max On Time" FontSize="14" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" />
+                    </Grid>
+                    <Border Grid.Row="4" Background="Black" Width="130" Margin="0 -3 0 0">
+                        <TextBlock Text="{Binding DIValveMaxOnTime,StringFormat={}{0} sec}" Foreground="Lime" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
+                    <Grid Grid.Row="5">
+                        <Label Content="Manual Fill Time" FontSize="14" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" />
+                    </Grid>
+                    <Grid Grid.Row="6">
+                        <Control:IntegerTextBox IsEnabled="{Binding IsEnabled}" Value="{Binding ManualFillSeconds,Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="25,-3,0,0" Height="30"  Width="100"/>
+                        <Label Content="sec" HorizontalAlignment="Right" VerticalAlignment="Center" Height="30" Width="55"  Margin="0 -3 0 0"></Label>
+                    </Grid>
+                    <Grid Grid.Row="7">
+                        <Button IsEnabled="{Binding IsEnabled}" Style="{StaticResource SysBtnStyle}" HorizontalContentAlignment="Left" Padding="10 0 0 0"  Grid.Column="1" Height="30" Width="130" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="Manual Replen" Command="{Binding ManualDireplenCommand}"></Button>
+                        <Ellipse Grid.Column="0" Width="16" Height="16" HorizontalAlignment="Right" Margin="0 0 30 0" Fill="{Binding IsManualReplen, Converter={StaticResource boolToColor}}"  Stroke="Silver"/>
+                    </Grid>
+                    <Grid Grid.Row="8">
+                        <Label Content="DI Replen Fault" HorizontalAlignment="Left" FontSize="14" VerticalAlignment="Center" Height="30" Margin="10 -3 0 0"></Label>
+                        <Ellipse Grid.Column="0" Width="16" Height="16" HorizontalAlignment="Right" Margin="0 -3 30 0"  Fill="{Binding IsDIReplenFault, Converter={StaticResource boolToRedColor}}" Stroke="Silver"/>
+                    </Grid>
+                </Grid>
+            </GroupBox>
+            <GroupBox Header="AN DIW Replen" FontWeight="Bold" FontSize="15" Grid.Row="3" Grid.Column="0" Width="200" Grid.RowSpan="2" Height="350" Margin="0,0,270,90">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="30"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="30"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                        <RowDefinition Height="35"></RowDefinition>
+                    </Grid.RowDefinitions>
+
+                    <Grid Grid.Row="0">
+                        <Label Content="Total On Time" FontSize="14" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" />
+                    </Grid>
+                    <Border Grid.Row="1" Background="Black" Width="130" Margin="0 -3 0 0">
+                        <TextBlock Text="{Binding ReservoirsPersistent.TotalReplen,StringFormat={}{0} sec}" Foreground="Lime" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
+                    <Grid Grid.Row="2">
+                        <Button IsEnabled="{Binding IsEnabled}" Style="{StaticResource SysBtnStyle}" Grid.Column="1" Command="{Binding ResetTotalCommand}" Height="30" Width="130" HorizontalAlignment="Center" VerticalAlignment="Bottom"  Content="Reset Total"></Button>
+                    </Grid>
+                    <Grid Grid.Row="3">
+                        <Label Content="Max On Time" FontSize="14" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" />
+                    </Grid>
+                    <Border Grid.Row="4" Background="Black" Width="130" Margin="0 -3 0 0">
+                        <TextBlock Text="{Binding DIValveMaxOnTime,StringFormat={}{0} sec}" Foreground="Lime" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
+                    <Grid Grid.Row="5">
+                        <Label Content="Manual Fill Time" FontSize="14" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center" />
+                    </Grid>
+                    <Grid Grid.Row="6">
+                        <Control:IntegerTextBox IsEnabled="{Binding IsEnabled}" Value="{Binding ManualFillSeconds,Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="25,-3,0,0" Height="30"  Width="100"/>
+                        <Label Content="sec" HorizontalAlignment="Right" VerticalAlignment="Center" Height="30" Width="55"  Margin="0 -3 0 0"></Label>
+                    </Grid>
+                    <Grid Grid.Row="7">
+                        <Button IsEnabled="{Binding IsEnabled}" Style="{StaticResource SysBtnStyle}" HorizontalContentAlignment="Left" Padding="10 0 0 0"  Grid.Column="1" Height="30" Width="130" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="Manual Replen" Command="{Binding ManualDireplenCommand}"></Button>
+                        <Ellipse Grid.Column="0" Width="16" Height="16" HorizontalAlignment="Right" Margin="0 0 30 0" Fill="{Binding IsManualReplen, Converter={StaticResource boolToColor}}"  Stroke="Silver"/>
+                    </Grid>
+                    <Grid Grid.Row="8">
+                        <Label Content="DI Replen Fault" HorizontalAlignment="Left" FontSize="14" VerticalAlignment="Center" Height="30" Margin="10 -3 0 0"></Label>
+                        <Ellipse Grid.Column="0" Width="16" Height="16" HorizontalAlignment="Right" Margin="0 -3 30 0"  Fill="{Binding IsDIReplenFault, Converter={StaticResource boolToRedColor}}" Stroke="Silver"/>
+                    </Grid>
+                </Grid>
+            </GroupBox>
+            <Grid Grid.Row="1" Grid.Column="2" Grid.RowSpan="2" Margin="10 0 0 200">
+                <userControls:RecipeLoad Margin="10,10,0,0" Module="{Binding Module}" HeadName="Res Recipe"
+                  RecipeType="{Binding RecipeType}" IsEnabled="{Binding IsEnabled}"
+                  SelectedRecipeNode="{Binding SelectedRecipeNode,Mode=TwoWay}"
+                  RecipeModeValue="{Binding ReservoirsPersistent.RecipeOperatingMode}" />
+            </Grid>
+            <Grid Grid.Row="1" Grid.Column="3">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="50"></RowDefinition>
+                    <RowDefinition Height="50"></RowDefinition>
+                    <RowDefinition Height="50"></RowDefinition>
+                </Grid.RowDefinitions>
+                <Grid Grid.Row="0">
+                    <Label Content="{Binding Module}"  FontSize="35" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,13"></Label>
+                </Grid>
+                <Grid Grid.Row="1">
+                    <Button IsEnabled="{Binding IsAutoEnabled}" Style="{StaticResource SysBtnStyle}"  Grid.Column="1" Height="30" Width="100" HorizontalAlignment="Center" Content="Initialize" Command="{Binding InitializeCommand}"></Button>
+                </Grid>
+                <Grid Grid.Row="2">
+                    <Label Content="Operating Mode"  FontSize="15" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Bottom" HorizontalAlignment="Center"></Label>
+                </Grid>
+            </Grid>
+            <Grid Grid.Row="2" Grid.Column="3">
+                <userControls:OperatingModeControl HorizontalAlignment="Center" Margin="0,10,0,0" VerticalAlignment="Top" 
+                                   ModuleName="{Binding Module}"
+                                   OperationModeValue="{Binding ReservoirsPersistent.OperatingMode}"/>
+            </Grid>
+            <Grid Grid.Row="2" Grid.Column="3">
+                <Label Content="Recipe Mode"  FontSize="15" FontWeight="Bold" Margin="0,0,0,40" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"></Label>
+                <userControls:RecipeModeControl HorizontalAlignment="Center" Margin="0,170,0,0" VerticalAlignment="Top" Width="190"
+                                   ModuleName="{Binding Module}"
+                                   RecipeModeValue="{Binding ReservoirsPersistent.RecipeMode}" />
+            </Grid>
+            <GroupBox Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Grid.RowSpan="3" HorizontalAlignment="Right" Height="240" VerticalAlignment="Center" Margin="0,0,0,50">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="30"/>
+                        <RowDefinition Height="50"/>
+                        <RowDefinition Height="30"/>
+                        <RowDefinition Height="50"/>
+                        <RowDefinition Height="30"/>
+                        <RowDefinition Height="50"/>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="100"></ColumnDefinition>
+                        <ColumnDefinition Width="100"></ColumnDefinition>
+                        <ColumnDefinition Width="100"></ColumnDefinition>
+                    </Grid.ColumnDefinitions>
+                    <Grid Grid.Row="0" Grid.ColumnSpan="2">
+                        <Label Content="CA Pump Speed" FontSize="14" FontWeight="Bold"   Margin="10,0,0,0" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" />
+                    </Grid>
+                    <Grid Grid.Row="2" Grid.ColumnSpan="2">
+                        <Label Content="AN Pump Speed" FontSize="14" FontWeight="Bold"   Margin="10,0,0,0" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" />
+                    </Grid>
+                    <Grid Grid.Row="4" Grid.ColumnSpan="2">
+                        <Label Content="Return Valve Open" FontSize="14" FontWeight="Bold"   Margin="10,0,0,0" VerticalContentAlignment="Center" HorizontalContentAlignment="Left"/>
+                    </Grid>
+                    <Grid Grid.Row="1" Grid.Column="0" >
+                        <Control:IntegerTextBox IsEnabled="{Binding IsEnabled}" Value="{Binding ManualFillSeconds,Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,0" Height="30"  Width="70"/>
+                    </Grid>
+                    <Border Grid.Row="1" Grid.Column="1" Background="Black" Width="80" Height="30" Margin="0 0 0 0">
+                        <TextBlock Text="{Binding DIValveMaxOnTime,StringFormat={}{0} sec}" Foreground="Lime" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
+                    <Grid Grid.Row="3" Grid.Column="2">
+                        <Button IsEnabled="{Binding IsEnabled}" Style="{StaticResource SysBtnStyle}" Command="{Binding DIReplenClearErrorCommand}" Height="30" Width="50" Margin="0,0,10,0" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="Set"/>
+                    </Grid>
+                    <Grid Grid.Row="3" Grid.Column="0" >
+                        <Control:IntegerTextBox IsEnabled="{Binding IsEnabled}" Value="{Binding ManualFillSeconds,Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,0" Height="30"  Width="70"/>
+                    </Grid>
+                    <Border Grid.Row="3" Grid.Column="1" Background="Black" Width="80" Height="30" Margin="0 0 0 0">
+                        <TextBlock Text="{Binding DIValveMaxOnTime,StringFormat={}{0} sec}" Foreground="Lime" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
+                    <Grid Grid.Row="5" Grid.Column="2">
+                        <Button IsEnabled="{Binding IsEnabled}" Style="{StaticResource SysBtnStyle}" Command="{Binding DIReplenClearErrorCommand}" Height="30" Width="50" Margin="0,0,10,0" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="Set"/>
+                    </Grid>
+                    <Grid Grid.Row="5" Grid.Column="0" >
+                        <Control:IntegerTextBox IsEnabled="{Binding IsEnabled}" Value="{Binding ManualFillSeconds,Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,0,0" Height="30"  Width="70"/>
+                    </Grid>
+                    <Border Grid.Row="5" Grid.Column="1" Background="Black" Width="80" Height="30" Margin="0 0 0 0">
+                        <TextBlock Text="{Binding DIValveMaxOnTime,StringFormat={}{0} sec}" Foreground="Lime" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
+                    <Grid Grid.Row="1" Grid.Column="2">
+                        <Button IsEnabled="{Binding IsEnabled}" Style="{StaticResource SysBtnStyle}" Command="{Binding DIReplenClearErrorCommand}" Height="30" Width="50" Margin="0,0,10,0" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="Set"/>
+                    </Grid>
+                </Grid>
+            </GroupBox>
+            <GroupBox Header="Status" Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="2" Grid.RowSpan="2" HorizontalAlignment="Right" Height="230" VerticalAlignment="Center" Margin="0,0,0,40">
+                <Grid>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="50"/>
+                        <RowDefinition Height="50"/>
+                        <RowDefinition Height="50"/>
+                        <RowDefinition Height="50"/>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="200"></ColumnDefinition>
+                        <ColumnDefinition Width="100"></ColumnDefinition>
+                    </Grid.ColumnDefinitions>
+                    <Grid Grid.Row="0" Grid.ColumnSpan="2">
+                        <Label Content="CA Safety Pump" FontSize="14" FontWeight="Bold"   Margin="10,0,0,0" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" />
+                    </Grid>
+                    <Grid Grid.Row="1" Grid.ColumnSpan="2">
+                        <Label Content="CA Safety High Level" FontSize="14" FontWeight="Bold"   Margin="10,0,0,0" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" />
+                    </Grid>
+                    <Grid Grid.Row="2" Grid.ColumnSpan="2">
+                        <Label Content="Leak Detected" FontSize="14" FontWeight="Bold"   Margin="10,0,0,0" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" />
+                    </Grid>
+                    <Grid Grid.Row="4" Grid.ColumnSpan="2">
+                        <Label Content="Chemistry" FontSize="14" FontWeight="Bold"   Margin="10,0,0,0" VerticalContentAlignment="Center" HorizontalContentAlignment="Left"/>
+                    </Grid>
+
+                    <Grid Grid.Row="0" Grid.Column="1">
+                        <Ellipse Grid.Column="0" Width="16" Height="16" HorizontalAlignment="Right" Margin="0 0 70 0"  Fill="{Binding IsDIReplenFault, Converter={StaticResource boolToRedColor}}" Stroke="Silver"/>
+                    </Grid>
+                    <Grid Grid.Row="1" Grid.Column="1">
+                        <Ellipse Grid.Column="0" Width="16" Height="16" HorizontalAlignment="Right" Margin="0 0 70 0"  Fill="{Binding IsDIReplenFault, Converter={StaticResource boolToRedColor}}" Stroke="Silver"/>
+                    </Grid>
+                    <Grid Grid.Row="2" Grid.Column="1">
+                        <Ellipse Grid.Column="0" Width="16" Height="16" HorizontalAlignment="Right" Margin="0 0 70 0"  Fill="{Binding IsDIReplenFault, Converter={StaticResource boolToRedColor}}" Stroke="Silver"/>
+                    </Grid>
+                    <Border Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Background="Black" Width="80" Height="30" Margin="80 0 0 0">
+                        <TextBlock Text="{Binding DIValveMaxOnTime,StringFormat={}{0} sec}" Foreground="Lime" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
+                </Grid>
+            </GroupBox>
+            <Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Grid.RowSpan="3" Margin="200,0,0,0">
+                <userControls:DMReservoirUIControl >
+                    
+                </userControls:DMReservoirUIControl>
+            </Grid>
+        </Grid>
+    </Canvas>
+</UserControl>

+ 28 - 0
PunkHPX8_MainPages/Views/DMReservoirView.xaml.cs

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

+ 7 - 0
PunkHPX8_Themes/PunkHPX8_Themes.csproj

@@ -196,6 +196,9 @@
     <Compile Include="UserControls\Cylinder.xaml.cs">
       <DependentUpon>Cylinder.xaml</DependentUpon>
     </Compile>
+    <Compile Include="UserControls\DMReservoirUIControl.xaml.cs">
+      <DependentUpon>DMReservoirUIControl.xaml</DependentUpon>
+    </Compile>
     <Compile Include="UserControls\DosingControl.xaml.cs">
       <DependentUpon>DosingControl.xaml</DependentUpon>
     </Compile>
@@ -684,6 +687,10 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="UserControls\DMReservoirUIControl.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="UserControls\DosingControl.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 174 - 0
PunkHPX8_Themes/UserControls/DMReservoirUIControl.xaml

@@ -0,0 +1,174 @@
+<UserControl x:Class="PunkHPX8_Themes.UserControls.DMReservoirUIControl"
+         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:userControls="clr-namespace:PunkHPX8_Themes.UserControls"
+         xmlns:customControls="clr-namespace:PunkHPX8_Themes.CustomControls"
+         xmlns:ctrls="clr-namespace:PunkHPX8_Themes.UserControls"
+         xmlns:converters="clr-namespace:PunkHPX8_Themes.Converters"
+         xmlns:local="clr-namespace:PunkHPX8_Themes.UserControls"
+         mc:Ignorable="d" Name="self"
+         d:DesignHeight="700" d:DesignWidth="1000">
+    <UserControl.Resources>
+        <converters:BoolToVisibility2 x:Key="boolToVisibility2"></converters:BoolToVisibility2>
+        <converters:BoolToVisibility x:Key="boolToVisibility"></converters:BoolToVisibility>
+        <converters:BoolToOrientation x:Key="boolToOrientation"></converters:BoolToOrientation>
+        <converters:BoolToRedGreenColor x:Key="boolToRedGreenColor"/>
+        <converters:BoolToRedColor x:Key="boolToRedColor"/>
+        <converters:MutiBoolToBool x:Key="mutiBoolToBool"/>
+        <ContextMenu x:Key="ANIsolationValve">
+            <MenuItem Header="Open" Click="OpenANIsolationValve_Click"/>
+            <MenuItem Header="Close" Click="CloseANIsolationValve_Click"/>
+        </ContextMenu>
+        <ContextMenu x:Key="CAIsolationValve">
+            <MenuItem Header="Open" Click="OpenCAIsolationValve_Click"/>
+            <MenuItem Header="Close" Click="CloseCAIsolationValve_Click"/>
+        </ContextMenu>
+        <ContextMenu x:Key="ReturnFlowValve">
+            <MenuItem Header="Open" Click="OpenReturnFlowValve_Click"/>
+            <MenuItem Header="Close" Click="CloseReturnFlowValve_Click"/>
+        </ContextMenu>
+        <ContextMenu x:Key="DegasValve">
+            <MenuItem Header="Open" Click="OpenDegasValve_Click"/>
+            <MenuItem Header="Close" Click="CloseDegasValve_Click"/>
+        </ContextMenu>
+        <ContextMenu x:Key="SampleValve">
+            <MenuItem Header="Open" Click="OpenSampleValve_Click"/>
+            <MenuItem Header="Close" Click="CloseSampleValve_Click"/>
+        </ContextMenu>
+    </UserControl.Resources>
+    <Canvas>
+        <userControls:ReservoirPump IsEnabled="True" ModuleName="{Binding ModuleName,ElementName=self}" PumpType="VacuumPump" RotateTransformValue="0" IsOpenPump="{Binding IsANPumpOpen,Mode=TwoWay,ElementName=self}" Height="60" Width="60"   Tag="26" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Left="96" Canvas.Top="170" RenderTransformOrigin="0.25,0.517"  >
+            <local:ReservoirPump.RenderTransform>
+                <TransformGroup>
+                    <ScaleTransform/>
+                    <SkewTransform/>
+                    <RotateTransform Angle="-89.495"/>
+                    <TranslateTransform/>
+                </TransformGroup>
+            </local:ReservoirPump.RenderTransform>
+        </userControls:ReservoirPump>
+        <userControls:ReservoirPump IsEnabled="True" ModuleName="{Binding ModuleName,ElementName=self}" PumpType="BoosterPump" RotateTransformValue="0" IsOpenPump="{Binding IsCAPumpOpen,Mode=TwoWay,ElementName=self}" Height="60" Width="60"  Tag="26" HorizontalAlignment="Center" VerticalAlignment="Top" Canvas.Left="400" Canvas.Top="550" />
+
+        <Grid Height="50" Width="100" Canvas.Left="206" Canvas.Top="83" HorizontalAlignment="Center" VerticalAlignment="Top"  >
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"></RowDefinition>
+                <RowDefinition Height="20"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid Grid.Row="0">
+                <customControls:CommonValveControl Height="16" Width="16"   ValveOrientation="Horizontal" 
+                       Status="{Binding ElementName=self,Path=ANIsolationValve}"  
+                       IsCanEdit="True" 
+                       ContextMenu="{StaticResource ANIsolationValve}"/>
+            </Grid>
+            <Grid Grid.Row="1">
+                <Label Margin="12,0,0,0" Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="AN Isolation" />
+            </Grid>
+        </Grid>
+        <Grid Height="50" Width="100" Canvas.Left="500" Canvas.Top="60" HorizontalAlignment="Center" VerticalAlignment="Top"  >
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"></RowDefinition>
+                <RowDefinition Height="20"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid Grid.Row="0">
+                <customControls:CommonValveControl Height="16" Width="16"   ValveOrientation="Horizontal" 
+                    Status="{Binding ElementName=self,Path=CAIsolationValve}"  
+                    IsCanEdit="True" 
+                    ContextMenu="{StaticResource CAIsolationValve}"/>
+            </Grid>
+            <Grid Grid.Row="1">
+                <Label Margin="12,0,0,0" Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="CA Isolation" />
+            </Grid>
+        </Grid>
+        <Grid Height="50" Width="100" Canvas.Left="600" Canvas.Top="460" HorizontalAlignment="Center" VerticalAlignment="Top"  >
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"></RowDefinition>
+                <RowDefinition Height="20"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid Grid.Row="0">
+                <customControls:CommonValveControl Height="16" Width="16"   ValveOrientation="Horizontal" 
+            Status="{Binding ElementName=self,Path=DegasValve}"  
+            IsCanEdit="True" 
+            ContextMenu="{StaticResource DegasValve}"/>
+            </Grid>
+            <Grid Grid.Row="1">
+                <Label Margin="12,0,0,0" Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="Degas Valve" />
+            </Grid>
+        </Grid>
+        <Grid Height="50" Width="100" Canvas.Left="500" Canvas.Top="600" HorizontalAlignment="Center" VerticalAlignment="Top"  >
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"></RowDefinition>
+                <RowDefinition Height="20"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid Grid.Row="0">
+                <customControls:CommonValveControl Height="16" Width="16"   ValveOrientation="Horizontal" 
+                    Status="{Binding ElementName=self,Path=SampleValve}"  
+                    IsCanEdit="True" 
+                    ContextMenu="{StaticResource SampleValve}"/>
+            </Grid>
+            <Grid Grid.Row="1">
+                <Label Margin="12,0,0,0" Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="Sample Valve" />
+            </Grid>
+        </Grid>
+        <Grid Height="50" Width="120" Canvas.Left="300" Canvas.Top="260" HorizontalAlignment="Center" VerticalAlignment="Top"  >
+            <Grid.RowDefinitions>
+                <RowDefinition Height="30"></RowDefinition>
+                <RowDefinition Height="20"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid Grid.Row="0">
+                <customControls:CommonValveControl Height="16" Width="16"   ValveOrientation="Horizontal" 
+                    Status="{Binding ElementName=self,Path=ReturnFlowValve}"  
+                    IsCanEdit="True" 
+                    ContextMenu="{StaticResource ReturnFlowValve}"/>
+            </Grid>
+            <Grid Grid.Row="1">
+                <Label Margin="12,0,0,0" Height="20" Width="100" FontSize="10"  FontWeight="Bold" Content="ReturnFlow Valve" />
+            </Grid>
+        </Grid>
+        <Canvas Width="150" Height="100" Canvas.Left="778" Canvas.Top="476" HorizontalAlignment="Center" VerticalAlignment="Top">
+            <userControls:TempControl TempValue="{Binding ReservoirTemperature}" Status="{Binding TCStatus}"
+                              DisableStatus="{Binding TCEnableStatus}">
+            </userControls:TempControl>
+        </Canvas>
+        <Grid Canvas.Left="205" Canvas.Top="470">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="140"/>
+            </Grid.ColumnDefinitions>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="25"/>
+                <RowDefinition Height="25"/>
+                <RowDefinition Height="25"/>
+                <RowDefinition Height="25"/>
+                <RowDefinition Height="25"/>
+                <RowDefinition Height="25"/>
+            </Grid.RowDefinitions>
+            <Grid Grid.Row="0" Grid.Column="0">
+                <Label Content="CA Level" FontSize="12" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+            </Grid>
+            <Border Grid.Row="1" Grid.Column="0" Margin="5,0,15,5" Background="Black" Width="100">
+                <TextBlock Text="{Binding ElementName=self,Path=CALevel, StringFormat={}{0:F2} L}" Foreground="Lime" FontSize="12" FontWeight="Bold" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+            </Border>
+            <Grid Grid.Row="2" Grid.Column="0">
+                <Label Content="CA LevelRaw" FontSize="12" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+            </Grid>
+            <Border Grid.Row="3" Grid.Column="0" Margin="5,0,15,5" Background="Black" Width="100">
+                <TextBlock Text="{Binding ElementName=self,Path=CALevelRaw, StringFormat={}{0:F2} %}" Foreground="Lime" FontSize="12" FontWeight="Bold" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+            </Border>
+            <Grid Grid.Row="4" Grid.Column="0">
+                <Label Content="High" FontSize="12" FontWeight="Bold" HorizontalContentAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,25,0"/>
+                <Ellipse Margin="61,2,20,2"  Width="16" Height="16" Stroke="Silver"
+                    Fill="{Binding ElementName=self,Path=IsCALevelHigh,Converter={StaticResource boolToRedGreenColor}}"/>
+            </Grid>
+            <Grid Grid.Row="5" Grid.Column="0">
+                <Label Content="Low" FontSize="12" FontWeight="Bold" HorizontalContentAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,0,25,0"/>
+                <Ellipse Margin="61,2,20,2"  Width="16" Height="16" Fill="{Binding ElementName=self,Path=IsCALevelLow,Converter={StaticResource boolToRedGreenColor}}"  Stroke="Gray"/>
+            </Grid>
+        </Grid>
+        <ctrls:TextboxWithLabel  Canvas.Top="368" Canvas.Left="274" LabelValue="AN Flow"   TextBoxValue="{Binding ANFlow, StringFormat={}{0:F2} L/min}" TextBoxColor="Black" HorizontalAlignment="Center" VerticalAlignment="Top" />
+        <ctrls:TextboxWithLabel  Canvas.Top="268" Canvas.Left="474" LabelValue="CA Flow"   TextBoxValue="{Binding ANFlow, StringFormat={}{0:F2} L/min}" TextBoxColor="Black" HorizontalAlignment="Center" VerticalAlignment="Top" />
+
+        <Ellipse Canvas.Left="100" Canvas.Top="20" Width="16" Height="16"  Fill="{Binding IsANLevelHigh, Converter={StaticResource boolToRedColor}}" Stroke="Silver"/>
+        <Ellipse Canvas.Left="100" Canvas.Top="120" Width="16" Height="16"  Fill="{Binding IsANLevelLow, Converter={StaticResource boolToRedColor}}" Stroke="Silver"/>
+    </Canvas>
+</UserControl>

+ 404 - 0
PunkHPX8_Themes/UserControls/DMReservoirUIControl.xaml.cs

@@ -0,0 +1,404 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using OpenSEMI.ClientBase;
+using MECF.Framework.Common.OperationCenter;
+
+namespace PunkHPX8_Themes.UserControls
+{
+    /// <summary>
+    /// DMReservoirUIControl.xaml 的交互逻辑
+    /// </summary>
+    public partial class DMReservoirUIControl : UserControl
+    {
+        public DMReservoirUIControl()
+        {
+            InitializeComponent();
+        }
+
+        public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register(
+          "ModuleName", typeof(string), typeof(DMReservoirUIControl),
+          new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// 模块名称
+        /// </summary>
+        public string ModuleName
+        {
+            get
+            {
+                return (string)this.GetValue(ModuleNameProperty);
+            }
+            set
+            {
+                this.SetValue(ModuleNameProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty ANIsolationValveProerty = DependencyProperty.Register(
+            "ANIsolationValve", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// ANIsolationValve
+        /// </summary>
+        public bool ANIsolationValve
+        {
+            get
+            {
+                return (bool)this.GetValue(ANIsolationValveProerty);
+            }
+            set
+            {
+                this.SetValue(ANIsolationValveProerty, value);
+            }
+        }
+
+        public static readonly DependencyProperty CAIsolationValveProerty = DependencyProperty.Register(
+            "CAIsolationValve", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// CAIsolationValve
+        /// </summary>
+        public bool CAIsolationValve
+        {
+            get
+            {
+                return (bool)this.GetValue(CAIsolationValveProerty);
+            }
+            set
+            {
+                this.SetValue(CAIsolationValveProerty, value);
+            }
+        }
+
+        public static readonly DependencyProperty ReturnFlowValveProerty = DependencyProperty.Register(
+           "ReturnFlowValve", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// ReturnFlowValve
+        /// </summary>
+        public bool ReturnFlowValve
+        {
+            get
+            {
+                return (bool)this.GetValue(ReturnFlowValveProerty);
+            }
+            set
+            {
+                this.SetValue(ReturnFlowValveProerty, value);
+            }
+        }
+        public static readonly DependencyProperty DegasValveProerty = DependencyProperty.Register(
+           "DegasValve", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// DegasValve
+        /// </summary>
+        public bool DegasValve
+        {
+            get
+            {
+                return (bool)this.GetValue(DegasValveProerty);
+            }
+            set
+            {
+                this.SetValue(DegasValveProerty, value);
+            }
+        }
+        public static readonly DependencyProperty SampleValveProerty = DependencyProperty.Register(
+           "SampleValve", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// SampleValve
+        /// </summary>
+        public bool SampleValve
+        {
+            get
+            {
+                return (bool)this.GetValue(SampleValveProerty);
+            }
+            set
+            {
+                this.SetValue(SampleValveProerty, value);
+            }
+        }
+        public static readonly DependencyProperty IsANPumpOpenProerty = DependencyProperty.Register(
+           "IsANPumpOpen", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// IsANPumpOpen
+        /// </summary>
+        public bool IsANPumpOpen
+        {
+            get
+            {
+                return (bool)this.GetValue(IsANPumpOpenProerty);
+            }
+            set
+            {
+                this.SetValue(IsANPumpOpenProerty, value);
+            }
+        }
+
+        public static readonly DependencyProperty IsCAPumpOpenProerty = DependencyProperty.Register(
+           "IsCAPumpOpen", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// IsCAPumpOpen
+        /// </summary>
+        public bool IsCAPumpOpen
+        {
+            get
+            {
+                return (bool)this.GetValue(IsCAPumpOpenProerty);
+            }
+            set
+            {
+                this.SetValue(IsCAPumpOpenProerty, value);
+            }
+        }
+
+        public static readonly DependencyProperty IsCALevelHighProerty = DependencyProperty.Register(
+          "IsCALevelHigh", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        ///IsCALevelHigh
+        /// </summary>
+        public bool IsCALevelHigh
+        {
+            get
+            {
+                return (bool)this.GetValue(IsCALevelHighProerty);
+            }
+            set
+            {
+                this.SetValue(IsCALevelHighProerty, value);
+            }
+        }
+
+        public static readonly DependencyProperty IsCALevelLowProerty = DependencyProperty.Register(
+          "IsCALevelLow", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        ///IsCALevelLow
+        /// </summary>
+        public bool IsCALevelLow
+        {
+            get
+            {
+                return (bool)this.GetValue(IsCALevelLowProerty);
+            }
+            set
+            {
+                this.SetValue(IsCALevelLowProerty, value);
+            }
+        }
+
+        public static readonly DependencyProperty IsANLevelHighProerty = DependencyProperty.Register(
+  "IsANLevelHigh", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        ///IsANLevelHigh
+        /// </summary>
+        public bool IsANLevelHigh
+        {
+            get
+            {
+                return (bool)this.GetValue(IsANLevelHighProerty);
+            }
+            set
+            {
+                this.SetValue(IsANLevelHighProerty, value);
+            }
+        }
+
+        public static readonly DependencyProperty IsANLevelLowProerty = DependencyProperty.Register(
+          "IsANLevelLow", typeof(bool), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        ///IsANLevelLow
+        /// </summary>
+        public bool IsANLevelLow
+        {
+            get
+            {
+                return (bool)this.GetValue(IsANLevelLowProerty);
+            }
+            set
+            {
+                this.SetValue(IsANLevelLowProerty, value);
+            }
+        }
+
+        public static readonly DependencyProperty ANFlowProperty = DependencyProperty.Register(
+      "ANFlow", typeof(double), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// ANFlow
+        /// </summary>
+        public double ANFlow
+        {
+            get
+            {
+                return (double)this.GetValue(ANFlowProperty);
+            }
+            set
+            {
+                this.SetValue(ANFlowProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty CAFlowProperty = DependencyProperty.Register(
+      "CAFlow", typeof(double), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// CAFlow
+        /// </summary>
+        public double CAFlow
+        {
+            get
+            {
+                return (double)this.GetValue(CAFlowProperty);
+            }
+            set
+            {
+                this.SetValue(CAFlowProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty CALevelProperty = DependencyProperty.Register(
+     "CALevel", typeof(double), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// CALevel
+        /// </summary>
+        public double CALevel
+        {
+            get
+            {
+                return (double)this.GetValue(CALevelProperty);
+            }
+            set
+            {
+                this.SetValue(CALevelProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty CALevelRawProperty = DependencyProperty.Register(
+    "CALevelRaw", typeof(double), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// CALevelRaw
+        /// </summary>
+        public double CALevelRaw
+        {
+            get
+            {
+                return (double)this.GetValue(CALevelRawProperty);
+            }
+            set
+            {
+                this.SetValue(CALevelRawProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty ReservoirTemperatureProperty = DependencyProperty.Register(
+    "ReservoirTemperature", typeof(double), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// ReservoirTemperature
+        /// </summary>
+        public double ReservoirTemperature
+        {
+            get
+            {
+                return (double)this.GetValue(ReservoirTemperatureProperty);
+            }
+            set
+            {
+                this.SetValue(ReservoirTemperatureProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty TCStatusProperty = DependencyProperty.Register(
+    "TCStatus", typeof(string), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// TCStatus
+        /// </summary>
+        public string TCStatus
+        {
+            get
+            {
+                return (string)this.GetValue(TCStatusProperty);
+            }
+            set
+            {
+                this.SetValue(TCStatusProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty TCEnableStatusProperty = DependencyProperty.Register(
+            "TCEnableStatus", typeof(string), typeof(DMReservoirUIControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// TCEnableStatus
+        /// </summary>
+        public string TCEnableStatus
+        {
+            get
+            {
+                return (string)this.GetValue(TCEnableStatusProperty);
+            }
+            set
+            {
+                this.SetValue(TCEnableStatusProperty, value);
+            }
+        }
+
+        private void OpenANIsolationValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void CloseANIsolationValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void OpenCAIsolationValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void CloseCAIsolationValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void OpenReturnFlowValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void CloseReturnFlowValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void OpenDegasValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void CloseDegasValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void OpenSampleValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+
+        private void CloseSampleValve_Click(object sender, RoutedEventArgs e)
+        {
+
+        }
+    }
+
+
+
+}

+ 6 - 0
PunkHPX8_Themes/UserControls/ReservoirsInformationPanel.xaml

@@ -41,6 +41,12 @@
                     <Border Grid.Column="3" Grid.Row="1" Background="Black" Margin="5,5,5,5">
                         <TextBlock   Text="{Binding ElementName=reservoirsInformation,Path=StateValue}"  Foreground="Lime" FontSize="16" FontWeight="Bold" HorizontalAlignment="Left" VerticalAlignment="Center"/>
                     </Border>
+                    <Grid Grid.Column ="0" Grid.Row="2">
+                        <Label Grid.Row="0" Content="Recipe Mode" FontSize="16" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Left"/>
+                    </Grid>
+                    <Border Background="Black"  Grid.Row="2" Grid.Column="1" Margin="5,5,5,5">
+                        <TextBlock Text="{Binding ElementName=reservoirsInformation,Path=RecipeModeValue}" Foreground="Lime" FontSize="16" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+                    </Border>
                 </Grid>
             </GroupBox>
         </Grid>

+ 15 - 0
PunkHPX8_UI/Config/UIMenu.json

@@ -43,6 +43,21 @@
 		"Name": "HardWare",
 		"IsShow": "true",
 		"MenuItem": [
+		{
+				"Id": "Reservoir",
+				"Name": "Reservoir",
+				"IsShow": "true",
+				"MenuItem": [
+					{
+						"Id": "Reservoir1",
+						"ModuleName": "Reservoir1",
+						"Name": "Reservoir1",
+						"IsInit": "true",
+						"IsShow": "true",
+						"View": "DMReservoirView"
+					}
+				]
+			},
 			{
 				"Id": "LinMots",
 				"Name": "LinMots",

+ 37 - 1
PunkHPX8_UI/Config/UIMenu_permission.json

@@ -35,7 +35,16 @@
 			},
 			{
 				"MenuName": "HardWare",
-				"Menus": [					
+				"Menus": [	
+					{
+						"MenuName": "Reservoir",
+						"Menus": [
+							{
+								"MenuName": "Reservoir1",
+								"Permission": 2
+							}
+						]
+					},				
 					{
 						"MenuName": "LinMots",
 						"Menus": [
@@ -360,6 +369,15 @@
 				"MenuName": "HardWare",
 				"Menus": [					
 					{
+						"MenuName": "Reservoir",
+						"Menus": [
+							{
+								"MenuName": "Reservoir1",
+								"Permission": 2
+							}
+						]
+					},	
+					{
 						"MenuName": "LinMots",
 						"Menus": [
 							{
@@ -679,6 +697,15 @@
 				"MenuName": "HardWare",
 				"Menus": [					
 					{
+						"MenuName": "Reservoir",
+						"Menus": [
+							{
+								"MenuName": "Reservoir1",
+								"Permission": 2
+							}
+						]
+					},	
+					{
 						"MenuName": "LinMots",
 						"Menus": [
 							{
@@ -974,6 +1001,15 @@
 				"MenuName": "HardWare",
 				"Menus": [
 					{
+						"MenuName": "Reservoir",
+						"Menus": [
+							{
+								"MenuName": "Reservoir1",
+								"Permission": 2
+							}
+						]
+					},	
+					{
 						"MenuName": "LinMots",
 						"Menus": [
 							{