瀏覽代碼

1add dm reservoir antowerhigh/low monitor
2add platingcell view releated

chenzk 5 天之前
父節點
當前提交
92daca3ff1

+ 8 - 0
PunkHPX8_MainPages/PunkHPX8_MainPages.csproj

@@ -173,6 +173,7 @@
     <Compile Include="ViewModels\MaterialMovementViewModel.cs" />
     <Compile Include="ViewModels\OperationOverNewViewModel.cs" />
     <Compile Include="ViewModels\OperationOverViewModel.cs" />
+    <Compile Include="ViewModels\PlatingCellHomePageViewModel.cs" />
     <Compile Include="ViewModels\PMCounterViewModel.cs" />
     <Compile Include="ViewModels\CMMPowerSupplierViewModel.cs" />
     <Compile Include="ViewModels\PowerSupplierViewModel.cs" />
@@ -252,6 +253,9 @@
     <Compile Include="Views\OperationOverNewView.xaml.cs">
       <DependentUpon>OperationOverNewView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\PlatingCellHomePageView.xaml.cs">
+      <DependentUpon>PlatingCellHomePageView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\PMCounterView.xaml.cs">
       <DependentUpon>PMCounterView.xaml</DependentUpon>
     </Compile>
@@ -484,6 +488,10 @@
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Views\PlatingCellHomePageView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="Views\PMCounterView.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 408 - 0
PunkHPX8_MainPages/ViewModels/PlatingCellHomePageViewModel.cs

@@ -0,0 +1,408 @@
+using Aitex.Core.Common;
+using Aitex.Core.UI.MVVM;
+using MECF.Framework.Common.CommonData.Metal;
+using MECF.Framework.Common.CommonData.PlatingCell;
+using MECF.Framework.Common.CommonData.PowerSupplier;
+using MECF.Framework.Common.DataCenter;
+using MECF.Framework.Common.OperationCenter;
+using MECF.Framework.Common.Persistent.Reservoirs;
+using MECF.Framework.Common.RecipeCenter;
+using MECF.Framework.Common.ToolLayout;
+using MECF.Framework.Common.Utilities;
+using Prism.Mvvm;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using System.Windows.Threading;
+
+namespace PunkHPX8_MainPages.ViewModels
+{
+    public class PlatingCellHomePageViewModel : BindableBase
+    {
+        #region 常量
+        private const string PERSISTENT_VALUE = "PersistentValue";
+        #endregion
+
+        #region 内部变量
+
+        #region Common
+        /// <summary>
+        /// 模块名称
+        /// </summary>
+        private string _module;
+        /// <summary>
+        /// 当前选择Recipe节点
+        /// </summary>
+        private RecipeNode _selectedRecipeNode;
+        /// <summary>
+        /// PlatingCellData
+        /// </summary>
+        private PlatingCellData _platingCellCommonData;
+        /// <summary>
+        /// Persistent
+        /// </summary>
+        private PlatingCellPersistentValue _platingCellPersistent;
+        /// <summary>
+        /// platingCellItem
+        /// </summary>
+        private PlatingCellItem _metalItem;
+        /// <summary>
+        /// WaferSize
+        /// </summary>
+        private WaferSize _selectedWaferSize = 0;
+        /// <summary>
+        /// Wafer Size List
+        /// </summary>
+        private List<int> _waferSizeList = new List<int>();
+        /// <summary>
+        /// 页面功能启用
+        /// </summary>
+        private bool _isEnabled;
+        /// <summary>
+        /// AutoMode页面功能启用
+        /// </summary>
+        private bool _isAutoEnabled;
+        #endregion
+
+    
+        /// <summary>
+        /// SeqRecipe
+        /// </summary>
+        private string _seqRecipe;
+
+
+        #region 系统数据
+        /// <summary>
+        /// 定时器
+        /// </summary>
+        DispatcherTimer _timer;
+        /// <summary>
+        /// 查询后台数据集合
+        /// </summary>
+        private List<string> _rtDataKeys = new List<string>();
+        /// <summary>
+        /// rt查询key数值字典
+        /// </summary>
+        private Dictionary<string, object> _rtDataValueDic = new Dictionary<string, object>();
+        #endregion
+
+        #region platingCell
+        /// <summary>
+        /// RecipeContent
+        /// </summary>
+        private string _recipeContent;
+        /// <summary>
+        /// TimeRemaining 
+        /// </summary>
+        private double _timeRemaining;
+        /// <summary>
+        /// OfTotalTime 
+        /// </summary>
+        private double _totalTime;
+        /// <summary>
+        /// OperatingMode 
+        /// </summary>
+        private string _operatingMode;
+        /// <summary>
+        /// State
+        /// </summary>
+        private string _state;
+        /// <summary>
+        /// RecipeMode 
+        /// </summary>
+        private string _recipeMode;
+        #endregion
+
+        #region dep recipe
+        /// <summary>
+        /// RecipeModuleName
+        /// </summary>
+        private string _recipeModuleName;
+        /// <summary>
+        /// RecipeType
+        /// </summary>
+        private string _recipeType;
+        /// <summary>
+        /// AchievedRunRecipeCycle
+        /// </summary>
+        private int _achievedRunRecipeCycle;
+        /// <summary>
+        /// 当前Recipe
+        /// </summary>
+        private string _currentRecipe;
+        #endregion
+
+        #region UI Related
+        /// <summary>
+        /// IsErrorState
+        /// </summary>
+        private bool _isErrorState;
+        #endregion
+
+        #region PowerSupplier
+        /// <summary>
+        /// PowerSuplier数据
+        /// </summary>
+        private PowerSupplierData _powerSupplierData;
+        #endregion
+
+
+        #region 属性
+
+        #region Common
+        /// <summary>
+        /// PlatingCellData
+        /// </summary>
+        public PlatingCellData PlatingCellCommonData
+        {
+            get { return _platingCellCommonData; }
+            set { SetProperty(ref _platingCellCommonData, value); }
+        }
+        /// <summary>
+        /// Persistent
+        /// </summary>
+        public PlatingCellPersistentValue PlatingCellPersistent
+        {
+            get { return _platingCellPersistent; }
+            set { SetProperty(ref _platingCellPersistent, value); }
+        }
+        /// <summary>
+        /// 模块名称
+        /// </summary>       
+        public string Module
+        {
+            get { return _module; }
+            set { SetProperty(ref _module, value); }
+        }
+        /// <summary>
+        /// 当前选择Recipe节点
+        /// </summary>
+        public RecipeNode SelectedRecipeNode
+        {
+            get { return _selectedRecipeNode; }
+            set { SetProperty(ref _selectedRecipeNode, value); }
+        }
+        /// <summary>
+        /// WaferSize
+        /// </summary>
+        public WaferSize SelectedWaferSize
+        {
+            get { return _selectedWaferSize; }
+            set { SetProperty(ref _selectedWaferSize, value); }
+        }
+        /// <summary>
+        /// WaferSizeList
+        /// </summary>
+        public List<int> WaferSizeList
+        {
+            get { return _waferSizeList; }
+            set { SetProperty(ref _waferSizeList, value); }
+        }
+        /// <summary>
+        /// 页面功能启用
+        /// </summary>
+        public bool IsEnabled
+        {
+            get { return _isEnabled; }
+            set { SetProperty(ref _isEnabled, value); }
+        }
+        /// <summary>
+        /// AutoMode页面功能启用
+        /// </summary>
+        public bool IsAutoEnabled
+        {
+            get { return _isAutoEnabled; }
+            set { SetProperty(ref _isAutoEnabled, value); }
+        }
+        #endregion
+
+       
+        /// SeqRecipe
+        /// </summary>
+        public string SeqRecipe
+        {
+            get { return _seqRecipe; }
+            set { SetProperty(ref _seqRecipe, value); }
+        }
+
+        #region PlatingCell
+        /// <summary>
+        /// RecipeContent
+        /// </summary>
+        public string RecipeContent
+        {
+            get { return _recipeContent; }
+            set { SetProperty(ref _recipeContent, value); }
+        }
+        /// <summary>
+        /// TimeRemaining 
+        /// </summary>
+        public double TimeRemaining
+        {
+            get { return _timeRemaining; }
+            set { SetProperty(ref _timeRemaining, value); }
+        }
+        /// <summary>
+        /// TotalTime  
+        /// </summary>
+        public double TotalTime
+        {
+            get { return _totalTime; }
+            set { SetProperty(ref _totalTime, value); }
+        }
+        /// <summary>
+        /// OperatingMode
+        /// </summary>
+        public string OperatingMode
+        {
+            get { return _operatingMode; }
+            set { SetProperty(ref _operatingMode, value); }
+        }
+        /// <summary>
+        /// State
+        /// </summary>
+        public string State
+        {
+            get { return _state; }
+            set { SetProperty(ref _state, value); }
+        }
+        /// <summary>
+        /// RecipeMode
+        /// </summary>
+        public string RecipeMode
+        {
+            get { return _recipeMode; }
+            set { SetProperty(ref _recipeMode, value); }
+        }
+        #endregion
+
+        #region Metal recipe
+        /// <summary>
+        /// RecipeModuleName
+        /// </summary>
+        public string RecipeModuleName
+        {
+            get { return _recipeModuleName; }
+            set { SetProperty(ref _recipeModuleName, value); }
+        }
+        /// <summary>
+        /// RecipeType
+        /// </summary>
+        public string RecipeType
+        {
+            get { return _recipeType; }
+            set { SetProperty(ref _recipeType, value); }
+        }
+        /// <summary>
+        /// Run Recipe已经完成的次数
+        /// </summary>
+        public int AchievedRunRecipeCycle
+        {
+            get { return _achievedRunRecipeCycle; }
+            set { SetProperty(ref _achievedRunRecipeCycle, value); }
+        }
+        /// <summary>
+        /// 当前Recipe
+        /// </summary>
+        public string CurrentRecipe
+        {
+            get { return _currentRecipe; }
+            set { SetProperty(ref _currentRecipe, value); }
+        }
+        #endregion
+
+        #region UI Related
+        /// <summary>
+        /// IsErrorState
+        /// </summary>
+        public bool IsErrorState
+        {
+            get { return _isErrorState; }
+            set { SetProperty(ref _isErrorState, value); }
+        }
+        #endregion
+
+        /// <summary>
+        /// SidA PowerSuplier数据
+        /// </summary>
+        public PowerSupplierData PowerSupplierData
+        {
+            get { return _powerSupplierData; }
+            set { SetProperty(ref _powerSupplierData, value); }
+        }
+
+        #endregion
+        
+        #endregion
+
+        #region Command指令
+        public ICommand InitializeCommand { get; set; }
+        #endregion
+
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public PlatingCellHomePageViewModel()
+        {
+            InitializeCommand = new DelegateCommand<object>(InitializeAction);
+            WaferSizeList.Add((int)WaferSize.WS8);
+            WaferSizeList.Add((int)WaferSize.WS12);
+        }
+
+        /// <summary>
+        /// 加载数据
+        /// </summary>
+        public void LoadData(string systemName)
+        {
+            Module = systemName;
+            RecipeModuleName = "DEP Recipe";
+            RecipeType = "dep";
+            _rtDataKeys.Clear();
+            _rtDataKeys.Add($"{Module}.FsmState");
+            if (_timer == null)
+            {
+                _timer = new DispatcherTimer();
+                _timer.Interval = TimeSpan.FromMilliseconds(200);
+                _timer.Tick += Timer_Tick;
+            }
+            _timer.Start();
+        }
+        /// <summary>
+        /// 定时器执行
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void Timer_Tick(object sender, EventArgs e)
+        {
+            if (_rtDataKeys.Count != 0)
+            {
+                _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);
+                if (_rtDataValueDic != null)
+                {
+                   
+                }
+            }
+        }
+        /// <summary>
+        /// 隐藏
+        /// </summary>
+        public void Hide()
+        {
+            if (_timer != null)
+            {
+                _timer.Stop();
+            }
+        }
+        /// <summary>
+        /// Initialize Action
+        /// </summary>
+        /// <param name="param"></param>
+        private void InitializeAction(object param)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{Module}.InitializeAll");
+        }
+    }
+}

+ 59 - 0
PunkHPX8_MainPages/Views/PlatingCellHomePageView.xaml

@@ -0,0 +1,59 @@
+<UserControl x:Class="PunkHPX8_MainPages.Views.PlatingCellHomePageView"
+                 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"/>
+        <converters:BoolToErrorColor x:Key="boolToErrorColor"></converters:BoolToErrorColor>
+        <converters:BoolToYellowColor x:Key="boolToYellowColor"></converters:BoolToYellowColor>
+        <converters:BoolToYellowColor2 x:Key="boolToYellowColor2"></converters:BoolToYellowColor2>
+
+        <converters:BoolToGreenRedColor x:Key="boolToGreenRedColor"></converters:BoolToGreenRedColor>
+        <converters:BoolToRedGreenColor x:Key="boolToRedGreenColor"></converters:BoolToRedGreenColor>
+
+        <converters:BoolToColor4 x:Key="boolToColor4"></converters:BoolToColor4>
+        <converters:BoolToColor6 x:Key="boolToColor6"></converters:BoolToColor6>
+        <converters:BoolToColor7 x:Key="boolToColor7"></converters:BoolToColor7>
+        <converters:BoolToBool x:Key="boolReverse"></converters:BoolToBool>
+    </UserControl.Resources>
+    <Canvas>
+        <Grid>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="5"/>
+                <RowDefinition Height="200"/>
+                <RowDefinition Height="450"/>
+                <RowDefinition Height="250"/>
+                <RowDefinition Height="50"/>
+                <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>
+    </Canvas>
+</UserControl>

+ 28 - 0
PunkHPX8_MainPages/Views/PlatingCellHomePageView.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>
+    /// PlatingCellHomePageView.xaml 的交互逻辑
+    /// </summary>
+    public partial class PlatingCellHomePageView : UserControl
+    {
+        public PlatingCellHomePageView()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 12 - 0
PunkHPX8_RT/Devices/Reservoir/DMReservoirDevice.cs

@@ -184,6 +184,18 @@ namespace PunkHPX8_RT.Devices.Reservoir
         protected override void WaterLevelMonitor()
         {
             base.WaterLevelMonitor();
+            //增加AN tower监控逻辑
+            _anWaterLevelLowerTrigger.CLK = _reservoirData.AnTowerLow;
+            _anWaterLevelHighTrigger.CLK = _reservoirData.AnTowerHigh;
+            if (_anWaterLevelLowerTrigger.Q  && !Recipe.ANDIReplenEnable)
+            {
+                LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, $"AN tower low is activate and recipe ANDIReplenEnable is false");
+                //若recipe允许补水且res auto ,需要启动阳极自动补水
+            }
+            if (_anWaterLevelHighTrigger.Q && !Recipe.ANDIReplenEnable)
+            {
+                LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, $"AN tower high is activate and recipe ANDIReplenEnable is false");
+            }
         }
         /// <summary>
         /// 补水监控

+ 2 - 2
PunkHPX8_Themes/UserControls/DMReservoirUIControl.xaml

@@ -304,8 +304,8 @@
         <ctrls:TextboxWithLabel  Canvas.Top="271" Canvas.Left="326" LabelValue="AN Flow"   TextBoxValue="{Binding ANFlow, StringFormat={}{0:F2} L/min,ElementName=self}" TextBoxColor="Black" HorizontalAlignment="Center" VerticalAlignment="Top" />
         <ctrls:TextboxWithLabel  Canvas.Top="141" Canvas.Left="671" LabelValue="CA Flow"   TextBoxValue="{Binding CAFlow, StringFormat={}{0:F2} L/min,ElementName=self}" TextBoxColor="Black" HorizontalAlignment="Center" VerticalAlignment="Top" />
 
-        <Ellipse Canvas.Left="256" Canvas.Top="100" Width="16" Height="16"  Fill="{Binding IsANLevelHigh,ElementName=self, Converter={StaticResource boolToRedGreenColor}}" Stroke="Silver"/>
-        <Ellipse Canvas.Left="256" Canvas.Top="160" Width="16" Height="16"  Fill="{Binding IsANLevelLow, ElementName=self, Converter={StaticResource boolToRedGreenColor}}" Stroke="Silver" HorizontalAlignment="Left" VerticalAlignment="Top"/>
+        <Ellipse Canvas.Left="256" Canvas.Top="100" Width="16" Height="16"  Fill="{Binding IsANLevelHigh,ElementName=self, Converter={StaticResource boolToRedColor}}" Stroke="Silver"/>
+        <Ellipse Canvas.Left="256" Canvas.Top="160" Width="16" Height="16"  Fill="{Binding IsANLevelLow, ElementName=self, Converter={StaticResource boolToRedColor}}" Stroke="Silver" HorizontalAlignment="Left" VerticalAlignment="Top"/>
 
         <ctrls:FlowPipe IsReverse="True" IsFlowing="{Binding IsANPumpOpen,Mode=TwoWay,ElementName=self}" Height="8"  Width="120"  Canvas.Left="135"  Canvas.Top="198" RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Center" Panel.ZIndex="-1"/>
         <ctrls:FlowPipe IsFlowing="{Binding ElementName=self,Path=ANIsolationValve}" Height="8"  Width="95"  Canvas.Left="463"  Canvas.Top="224" RotateTransformValue="90" HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="-1"/>

+ 28 - 20
PunkHPX8_UI/Config/UIMenu.json

@@ -55,41 +55,49 @@
 						"IsInit": "true",
 						"IsShow": "true",
 						"View": "DMReservoirView"
-					}
-				]
-			},
-			{
-				"Id": "LinMots",
-				"Name": "LinMots",
-				"IsShow": "true",
-				"MenuItem": [
+					},
 					{
-						"Id": "LNM1",
-						"ModuleName": "LNM1",
-						"Name": "LNM1",
+						"Id": "Reservoir2",
+						"ModuleName": "Reservoir2",
+						"Name": "Reservoir2",
 						"IsInit": "true",
 						"IsShow": "true",
-						"View": "LinMotView"
+						"View": "DMReservoirView"
 					},
 					{
-						"Id": "LNM2",
-						"ModuleName": "LNM2",
-						"Name": "LNM2",
+						"Id": "Reservoir3",
+						"ModuleName": "Reservoir3",
+						"Name": "Reservoir3",
 						"IsInit": "true",
 						"IsShow": "true",
-						"View": "LinMotView"
+						"View": "DMReservoirView"
 					},
 					{
-						"Id": "LNM3",
-						"ModuleName": "LNM3",
-						"Name": "LNM3",
+						"Id": "Reservoir4",
+						"ModuleName": "Reservoir4",
+						"Name": "Reservoir4",
 						"IsInit": "true",
 						"IsShow": "true",
-						"View": "LinMotOtherView"
+						"View": "DMReservoirView"
 					}
 				]
 			},
 			{
+				"Id": "PlatingCells",
+				"Name": "PlatingCells",
+				"IsShow": "true",
+				"MenuItem": [
+					{
+						"Id": "PlatingCell3",
+						"ModuleName": "PlatingCell3",
+						"Name": "PlatingCell3",
+						"IsInit": "true",
+						"IsShow": "true",
+						"View": "PlatingCellHomePageView"
+					},
+				]
+			},
+			{
 				"Id": "ResistivityProbes",
 				"Name": "Resistivity",
 				"IsShow": "true",

+ 53 - 36
PunkHPX8_UI/Config/UIMenu_permission.json

@@ -42,22 +42,27 @@
 							{
 								"MenuName": "Reservoir1",
 								"Permission": 2
-							}
-						]
-					},				
-					{
-						"MenuName": "LinMots",
-						"Menus": [
+							},
 							{
-								"MenuName": "LNM1",
+								"MenuName": "Reservoir2",
 								"Permission": 2
 							},
 							{
-								"MenuName": "LNM2",
+								"MenuName": "Reservoir3",
 								"Permission": 2
 							},
 							{
-								"MenuName": "LNM3",
+								"MenuName": "Reservoir4",
+								"Permission": 2
+							}
+							
+						]
+					},				
+					{
+						"MenuName": "PlatingCells",
+						"Menus": [
+							{
+								"MenuName": "PlatingCell3",
 								"Permission": 2
 							}
 						]
@@ -374,22 +379,26 @@
 							{
 								"MenuName": "Reservoir1",
 								"Permission": 2
-							}
-						]
-					},	
-					{
-						"MenuName": "LinMots",
-						"Menus": [
+							},
 							{
-								"MenuName": "LNM1",
+								"MenuName": "Reservoir2",
 								"Permission": 2
 							},
 							{
-								"MenuName": "LNM2",
+								"MenuName": "Reservoir3",
 								"Permission": 2
 							},
 							{
-								"MenuName": "LNM3",
+								"MenuName": "Reservoir4",
+								"Permission": 2
+							}
+						]
+					},	
+					{
+						"MenuName": "PlatingCells",
+						"Menus": [
+							{
+								"MenuName": "PlatingCell3",
 								"Permission": 2
 							}
 						]
@@ -702,22 +711,26 @@
 							{
 								"MenuName": "Reservoir1",
 								"Permission": 2
-							}
-						]
-					},	
-					{
-						"MenuName": "LinMots",
-						"Menus": [
+							},
 							{
-								"MenuName": "LNM1",
+								"MenuName": "Reservoir2",
 								"Permission": 2
 							},
 							{
-								"MenuName": "LNM2",
+								"MenuName": "Reservoir3",
 								"Permission": 2
 							},
 							{
-								"MenuName": "LNM3",
+								"MenuName": "Reservoir4",
+								"Permission": 2
+							}
+						]
+					},	
+					{
+						"MenuName": "PlatingCells",
+						"Menus": [
+							{
+								"MenuName": "PlatingCell3",
 								"Permission": 2
 							}
 						]
@@ -1006,25 +1019,29 @@
 							{
 								"MenuName": "Reservoir1",
 								"Permission": 2
-							}
-						]
-					},	
-					{
-						"MenuName": "LinMots",
-						"Menus": [
+							},
 							{
-								"MenuName": "LNM1",
+								"MenuName": "Reservoir2",
 								"Permission": 2
 							},
 							{
-								"MenuName": "LNM2",
+								"MenuName": "Reservoir3",
 								"Permission": 2
 							},
 							{
-								"MenuName": "LNM3",
+								"MenuName": "Reservoir4",
 								"Permission": 2
 							}
 						]
+					},	
+					{
+						"MenuName": "PlatingCells",
+						"Menus": [
+							{
+								"MenuName": "PlatingCell3",
+								"Permission": 2
+							},
+						]
 					},
 					{
 						"MenuName": "Resistivity",