Browse Source

1.add venuse SE/DE turbopump&pendulum interlock
2.fix chamber DE wafer Transfer bugs
3.add se checkload simulator

hecl 1 year ago
parent
commit
68754c24af

+ 3 - 0
Venus/Venus_Core/Recipe.cs

@@ -516,6 +516,9 @@ namespace Venus_Core
                         case "ESCHVUnit":
                             unit.Add(JsonConvert.DeserializeObject<ESCHVUnit>(step.LstUnit[i].ToString()));
                             break;
+                        case "SEESCHVUnit":
+                            unit.Add(JsonConvert.DeserializeObject<SEESCHVUnit>(step.LstUnit[i].ToString()));
+                            break;
                         case "ProcessKitUnit":
                             unit.Add(JsonConvert.DeserializeObject<ProcessKitUnit>(step.LstUnit[i].ToString()));
                             break;

+ 4 - 2
Venus/Venus_MainPages/ViewModels/MFCVerificationViewModel.cs

@@ -362,12 +362,14 @@ namespace Venus_MainPages.ViewModels
             var onePointData = QueryDataClient.Instance.Service.GetMFCVerificationOnePointData();
             if (onePointData != null)
             {
-                VerificationDataOnePointRecords = new ObservableCollection<MFCVerificationOnePointData>(onePointData);
+                var _onePointData = onePointData.Where(x => x.Module == ModuleName);
+                VerificationDataOnePointRecords = new ObservableCollection<MFCVerificationOnePointData>(_onePointData);
             }
             var tenPointsData = QueryDataClient.Instance.Service.GetMFCVerificationTenPointsData();
             if (tenPointsData != null)
             {
-                VerificationDataTenPointsRecords = new ObservableCollection<MFCVerificationTenPointsData>(tenPointsData);
+                var _tenPointsData = tenPointsData.Where(x => x.Module == ModuleName);
+                VerificationDataTenPointsRecords = new ObservableCollection<MFCVerificationTenPointsData>(_tenPointsData);
             }
 
             var data1 = VerificationDataTenPointsRecords.Where(x => x.Name == $"MfcGas1").FirstOrDefault();

+ 3 - 3
Venus/Venus_MainPages/Views/GasLeakCheckView.xaml

@@ -1473,11 +1473,11 @@
                 <DataGridTextColumn Width="120" Binding="{Binding StartPressure}" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
                     <DataGridTextColumn.HeaderTemplate >
                         <DataTemplate>
-                            <TextBlock Text="StartPressure" />
+                            <TextBlock Text="BasePressure" />
                         </DataTemplate>
                     </DataGridTextColumn.HeaderTemplate>
                 </DataGridTextColumn>
-                <DataGridTextColumn Width="120" Binding="{Binding EndPressure}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
+                <!--<DataGridTextColumn Width="120" Binding="{Binding EndPressure}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
                     <DataGridTextColumn.HeaderTemplate >
                         <DataTemplate>
                             <TextBlock Text="StopPressure" />
@@ -1490,7 +1490,7 @@
                             <TextBlock Text="Leak Check Time(s)" />
                         </DataTemplate>
                     </DataGridTextColumn.HeaderTemplate>
-                </DataGridTextColumn>
+                </DataGridTextColumn>-->
                 <DataGridTextColumn Width="120" Binding="{Binding LeakRate}"   CanUserSort="False" CanUserReorder="False" IsReadOnly="True" >
                     <DataGridTextColumn.HeaderTemplate >
                         <DataTemplate>

+ 1 - 1
Venus/Venus_MainPages/Views/OverVenusSEView.xaml

@@ -1489,7 +1489,7 @@
             <!--<Button Width="120" Height="30" Content="Abort"            Canvas.Left="910" Canvas.Top="690"  IsEnabled="{Binding IsAutoMode}"/>
             <Button Width="120" Height="30" Content="Chamber Offline"  Canvas.Left="1110" Canvas.Top="690" IsEnabled="{Binding IsAutoMode}"/>-->
         </Canvas>
-        <Grid Width="360" Height="170" Canvas.Left="1350" Canvas.Top="5"  unity:GridOptions.LineBrush="#afb4db"  unity:GridOptions.ShowBorder="True" Background="#E9EDF4">
+        <Grid Width="540" Height="170" Canvas.Left="1350" Canvas.Top="5"  unity:GridOptions.LineBrush="#afb4db"  unity:GridOptions.ShowBorder="True" Background="#E9EDF4" HorizontalAlignment="Left" VerticalAlignment="Center">
             <Grid.RowDefinitions>
                 <RowDefinition/>
                 <RowDefinition/>

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

@@ -65,18 +65,18 @@
                     </Grid.ColumnDefinitions>
                     <TextBlock Grid.Column="0" Text="Name" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="15" FontFamily="Arial" VerticalAlignment="Center"></TextBlock>
 
-                    <TextBox Grid.Column="1" IsEnabled="False" Text="{Binding WAInfo.JobID, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" TextAlignment="Center" VerticalContentAlignment="Center"/>
+                    <TextBox Grid.Column="1" IsEnabled="True" Text="{Binding WAInfo.JobID, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" TextAlignment="Center" VerticalContentAlignment="Center"/>
 
-                    <TextBox Grid.Column="3" IsEnabled="False" Text="{Binding WAInfo.JobStatus, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" TextAlignment="Center" VerticalContentAlignment="Center"/>
+                    <TextBox Grid.Column="3" IsEnabled="True" Text="{Binding WAInfo.JobStatus, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" TextAlignment="Center" VerticalContentAlignment="Center"/>
 
                     <TextBlock Text="Status" Grid.Column="2" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="15" FontFamily="Arial" VerticalAlignment="Center"></TextBlock>
                    
                 </Grid>
-                <StackPanel Grid.Row="6" Orientation="Horizontal"  HorizontalAlignment="Center" VerticalAlignment="Center" IsEnabled="{Binding ElementName=WaferUnit,Path=ButtonIsEnable,Converter={StaticResource BoolToBool}}">
+                <StackPanel Grid.Row="6" Orientation="Horizontal"  HorizontalAlignment="Center" VerticalAlignment="Center" >
                     <Button Content="Create Job" Width="120" Height="25"  Command="{Binding CreateJobCommand}" CommandParameter="{Binding ElementName=WaferUnit,Path=WAInfo}"/>
                     <Button Content="Abort Job"  Width="120" Height="25"  Command="{Binding AbortJobCommand}"  CommandParameter="{Binding WAInfo.JobID,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"/>
                 </StackPanel>
-                <StackPanel Grid.Row="7" Orientation="Horizontal"  VerticalAlignment="Center" HorizontalAlignment="Center" IsEnabled="{Binding ElementName=WaferUnit,Path=ButtonIsEnable,Converter={StaticResource BoolToBool}}">
+                <StackPanel Grid.Row="7" Orientation="Horizontal"  VerticalAlignment="Center" HorizontalAlignment="Center">
                     <Button Content="Start" Width="100" Height="25" Command="{Binding StartCommand}"  CommandParameter="{Binding ElementName=WaferUnit,Path=WAInfo}"/>
                     <Button Content="Stop" Width="100" Height="25" Margin="30,0,0,0" Command="{Binding StopCommand}" CommandParameter="{Binding ElementName=WaferUnit,Path=WAInfo}"/>
                     <Button Content="Abort" Width="100" Height="25" Margin="30,0,0,0" Command="{Binding AbortCommand}" CommandParameter="{Binding ElementName=WaferUnit,Path=WAInfo}"/>

+ 37 - 2
Venus/Venus_RT/Devices/JetPMBase.cs

@@ -9,6 +9,7 @@ using Venus_RT.Modules;
 using System;
 using Aitex.Core.RT.SCCore;
 using System.Threading.Tasks;
+using Aitex.Core.RT.Log;
 
 namespace Venus_RT.Devices
 {
@@ -20,7 +21,8 @@ namespace Venus_RT.Devices
 
         public abstract bool IsSlitDoorClosed { get; }
         public virtual bool IsLinerDoorClosed { get; }
-
+        public virtual bool IsISOOpen { get; }
+        public virtual bool IsPenVOpen { get; }
         public abstract bool IsPumpRunning { get; }
         public abstract bool IsTurboPumpRunning { get; }
         public abstract bool IsTurboPumpAtSpeed { get; }
@@ -343,7 +345,40 @@ namespace Venus_RT.Devices
                 {
                     if (Enum.TryParse(args[0].ToString(), out ValveType targetvalve))
                     {
-                        OpenValve(targetvalve, (bool)args[1]);
+                        if (targetvalve == ValveType.TurboPumpPurge && (bool)args[1] == true)
+                        {
+                            if (IsISOOpen)
+                            {
+                                OpenValve(targetvalve, (bool)args[1]);
+                            }
+                            else
+                            {
+                                LOG.Write(eEvent.WARN_DEFAULT_WARN, Module, $"Chamber TurboPumpPumping valve is not open, can not turn on TurboPumpPurge valve.");
+                            }
+                        }
+                        else if (targetvalve == ValveType.TurboPumpPumping && (bool)args[1] == false)
+                        {
+                            if (IsTurboPumpRunning)
+                            {
+                                if (!IsPenVOpen)
+                                {
+                                    OpenValve(targetvalve, (bool)args[1]);
+                                }
+                                else if (IsPenVOpen)
+                                {
+                                    LOG.Write(eEvent.WARN_DEFAULT_WARN, Module, $"Chamber TurboPump is open but Pendulum Valve is open, can not turn off TurboPumpPumping valve.");
+                                }
+                            }
+                            else
+                            {
+                                OpenValve(targetvalve, (bool)args[1]);
+                            }
+
+                        }
+                        else
+                        {
+                            OpenValve(targetvalve, (bool)args[1]);
+                        }
                     }
                 }
                 else

+ 5 - 0
Venus/Venus_RT/Devices/JetVenusDEPM.cs

@@ -1183,6 +1183,11 @@ namespace Venus_RT.Devices
                 LOG.Write(eEvent.ERR_PM, Module, $"Set Slit Door Open failed:{reason}");
                 return false;
             }
+            if (!SetLinerDoor(true, out reason))
+            {
+                LOG.Write(eEvent.ERR_PM, Module, $"Set Slit Door Open failed:{reason}");
+                return false;
+            }
             if (!SetLiftPin(MovementPosition.Up, out reason))
             {
                 LOG.Write(eEvent.ERR_PM, Module, $"Set Lift Pin Up failed:{reason}");

+ 3 - 0
Venus/Venus_RT/Devices/JetVenusSEPM.cs

@@ -397,7 +397,10 @@ namespace Venus_RT.Devices
 
         public override bool IsPumpRunning => _MainPump.IsRunning;
 
+        public override bool IsISOOpen => _TurboPumpPumpingValve.Status;
+
         public override bool IsTurboPumpRunning => _TurboPump.IsRunning;
+        public override bool IsPenVOpen => _pendulumValve.IsOpen;
 
         public override bool IsTurboPumpAtSpeed => _TurboPump.AtSpeed;
 

+ 8 - 0
Venus/Venus_RT/Devices/PendulumValve.cs

@@ -590,6 +590,14 @@ namespace Venus_RT.Devices
                 LOG.Write(eEvent.ERR_DEVICE_INFO, Module, $"Chamber Pressure:{_chamber.ChamberPressure} is higher than {_chamberPressureLimit}{m_PressureType} and Chamber.TurboPumpSpeed is higher than {_turboPumpSpeedLimit}, can not turn on pendulum valve.");
                 return false;
             }
+            if (_chamber.IsTurboPumpRunning)
+            {
+                if (!_chamber.IsISOOpen)
+                {
+                    LOG.Write(eEvent.ERR_DEVICE_INFO, Module, $"Chamber TurboPumpingvalve is not open, can not turn on pendulum valve.");
+                    return false;
+                }
+            }
 
             return true;
         }

+ 2 - 2
Venus/Venus_RT/Devices/TM/HongHuVR.cs

@@ -275,13 +275,13 @@ namespace Venus_RT.Devices.VCE
         {
             _currentStep = VRStep.ReQueryLoadA;
             _status = RState.Running;
-            return _SendCommand("RQ LOAD ARM A");
+            return _SendCommand($"RQ LOAD ARM A");
         }
         public bool ReQueryLoadB()
         {
             _currentStep = VRStep.ReQueryLoadB;
             _status = RState.Running;
-            return _SendCommand("RQ LOAD ARM B");
+            return _SendCommand($"RQ LOAD ARM B");
         }
         private bool _SendCommand(string cmd)
         {

+ 30 - 3
Venus/Venus_RT/Modules/TM/VenusEntity/SEMFPMPickRoutine.cs

@@ -39,6 +39,7 @@ namespace Venus_RT.Modules.TM.VenusEntity
             SavePickeData,
             NotifyDone,
             CloseSlitDoor,
+            CloseLinerDoor,
             EndDelay
         }
 
@@ -57,6 +58,7 @@ namespace Venus_RT.Modules.TM.VenusEntity
         private int _controlFlowSetPoint = 10;   
         //private DateTime _starttime;
         private bool _queryAwc;
+        private bool havelinerdoor;
 
         public SEMFPMPickRoutine(HongHuTM honghutm, ITransferRobot robot) : base(ModuleName.TMRobot)
         {
@@ -78,8 +80,15 @@ namespace Venus_RT.Modules.TM.VenusEntity
             _targetSlot = pickItem.Peek().SourceSlot;
             _hand = pickItem.Peek().RobotHand;
 
-            //_chamber = (JetChamber)SC.GetValue<int>($"{_targetModule}.ChamberType");
-
+            _chamber = DEVICE.GetDevice<JetPMBase>(_targetModule.ToString());//(JetChamber)SC.GetValue<int>($"{_targetModule}.ChamberType");
+            if ( _chamber.ChamberType== JetChamber.VenusDE) 
+            {
+                havelinerdoor = true;
+            }
+            else
+            {
+                havelinerdoor = false;
+            }
             if (ModuleHelper.IsPm(_targetModule) && ModuleHelper.IsInstalled(_targetModule))
             {
                 _pmModule = Singleton<RouteManager>.Instance.GetPM(_targetModule);
@@ -133,6 +142,7 @@ namespace Venus_RT.Modules.TM.VenusEntity
                         .Run(PickStep.NotifyDone, NotifyPMDone, _delay_50ms)
                         .Delay(PickStep.PickDelay, _delay_50ms)
                         .Run(PickStep.CloseSlitDoor, PMDoorClose, WaitPMDoorClose)
+                        .RunIf(PickStep.CloseLinerDoor, havelinerdoor, PMLinerDoorClose, WaitPMLinerDoorClose)
                         .End(PickStep.EndDelay, NullFun, _delay_50ms);
 
 
@@ -286,6 +296,11 @@ namespace Venus_RT.Modules.TM.VenusEntity
             return _tm.TurnSlitDoor(_targetModule, false);
         }
 
+        private bool PMLinerDoorClose()
+        {
+            LOG.Write(eEvent.WARN_TM, Module, $"PMPick Close Liner Door Again");
+            return _chamber.SetLinerDoor(false, out _);
+        }
         private bool WaitPMDoorClose()
         {
             if (_tm.CheckSlitValveClose(_targetModule))
@@ -300,7 +315,19 @@ namespace Venus_RT.Modules.TM.VenusEntity
             }
         }
 
-
+        private bool WaitPMLinerDoorClose()
+        {
+            if (_chamber.CheckLinerDoorClose())
+            {
+                LOG.Write(eEvent.WARN_TM, Module, $"PMPick Check LinerDoor Close");
+                return true;
+            }
+            else
+            {
+                LOG.Write(eEvent.WARN_TM, Module, $"PMPick Check not Close LinerDoor");
+                return false;
+            }
+        }
         public void Abort()
         {
             _robot.Halt();

+ 7 - 3
Venus/Venus_Simulator/Devices/SETMSimulatorServer.cs

@@ -16,7 +16,7 @@ namespace Venus_Simulator.Devices
         private readonly Regex _check_load = new Regex(@"CHECK LOAD\s+(\d)+\s+(A|B)\s*");
         private readonly Regex _move_arm = new Regex(@"(PLACE|PICK)\s+(\d+)\s+ARM\s+(A|B)\s+(\w{4})\s*");
         private readonly Regex _move_wafer = new Regex(@"(PLACE|PICK)\s+(\d+)\s+ARM\s+(A|B)\s*");
-
+        private readonly Regex _rq_arm = new Regex(@"(RQ)\s+(LOAD)\s+(ARM)\s*");
         private PeriodicJob _HwThread;
         public SETMSimulatorServer() : base(1103, -1, "\n", ' ')
         {
@@ -34,7 +34,12 @@ namespace Venus_Simulator.Devices
             {
                 OnWriteMessage("_RDY");
             }
-
+            if (_rq_arm.IsMatch(str))
+            {
+                //OnWriteMessage(string.Format($"LOAD {arm} OFF"));
+                //OnWriteMessage(string.Format($"CHECK LOAD"));
+                OnWriteMessage("_RDY");
+            }
             //if (str.Contains("RQ WAF_CEN DATA"))
             //{
             //    string t = new Random().Next(0, 359).ToString().PadLeft(6, '0');
@@ -80,7 +85,6 @@ namespace Venus_Simulator.Devices
                 Thread.Sleep(2000);
                 OnWriteMessage("_RDY");
             }
-
         }
     }
 }

+ 7 - 15
Venus/Venus_Themes/UserControls/ChamberDE.xaml

@@ -22,18 +22,18 @@
         <Storyboard x:Key="LinerValve_Open">
             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" >
                 <EasingDoubleKeyFrame KeyTime="0" Value="75"/>
-                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="8"/>
+                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="12"/>
             </DoubleAnimationUsingKeyFrames>
         </Storyboard>
         <Storyboard x:Key="LinerValve_Close">
             <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Height)" >
-                <EasingDoubleKeyFrame KeyTime="0" Value="8"/>
+                <EasingDoubleKeyFrame KeyTime="0" Value="12"/>
                 <EasingDoubleKeyFrame KeyTime="0:0:1" Value="75"/>
             </DoubleAnimationUsingKeyFrames>
         </Storyboard>
         <Style TargetType="{x:Type Rectangle}" x:Key="SlitValve_Animation2">
             <Style.Triggers>
-                <DataTrigger Binding="{Binding ElementName=chamber,Path=IsOpenSlitDoor}" Value="true">
+                <DataTrigger Binding="{Binding ElementName=chamber,Path=IsOpenLinerDoor}" Value="true" >
                     <DataTrigger.EnterActions>
                         <BeginStoryboard Storyboard="{StaticResource LinerValve_Open}"/>
                     </DataTrigger.EnterActions>
@@ -41,14 +41,6 @@
                         <BeginStoryboard Storyboard="{StaticResource LinerValve_Close}"/>
                     </DataTrigger.ExitActions>
                 </DataTrigger>
-                <DataTrigger Binding="{Binding ElementName=chamber,Path=IsOpenLinerDoor}" Value="true" >
-                    <DataTrigger.EnterActions>
-                        <BeginStoryboard Storyboard="{StaticResource SlitValve_Open}"/>
-                    </DataTrigger.EnterActions>
-                    <DataTrigger.ExitActions>
-                        <BeginStoryboard Storyboard="{StaticResource SlitValve_Close}"/>
-                    </DataTrigger.ExitActions>
-                </DataTrigger>
             </Style.Triggers>
         </Style>
         <Style TargetType="{x:Type Rectangle}" x:Key="SlitValve_Animation" >
@@ -330,8 +322,8 @@
                 <!--左边slit door-->
                 <Grid x:Name="Slit_valve" Margin="-41,-9,191,26.5" >
                     <Grid.RowDefinitions>
-                        <RowDefinition Height="37*"/>
-                        <RowDefinition Height="37*"/>
+                        <RowDefinition/>
+                        <RowDefinition Height="74.75"/>
                     </Grid.RowDefinitions>
                     <!--<Grid.ContextMenu>
                         <ContextMenu>
@@ -340,7 +332,7 @@
                         </ContextMenu>
                     </Grid.ContextMenu>-->
                     <Rectangle x:Name="SlitValve_Top"  Style="{StaticResource SlitValve_Animation}" Fill="{StaticResource doorColor}" VerticalAlignment="Top" Height="78" Margin="1,3,1,0" Grid.RowSpan="2"   />
-                    <Rectangle x:Name="SlitValve_Bottom" Style="{StaticResource SlitValve_Animation}" Width="8" Fill="{StaticResource doorColor}" VerticalAlignment="Center" Height="78" Margin="1,0,1,0" Grid.Row="1" />
+                    <Rectangle x:Name="SlitValve_Bottom" Style="{StaticResource SlitValve_Animation}" Width="8" Fill="{StaticResource doorColor}" VerticalAlignment="Bottom" Height="70" Margin="1,70,1,0" Grid.RowSpan="2" />
                 </Grid>
                 <Grid x:Name="liner_valve" Margin="-8,-8,10,26" >
                     <Grid.RowDefinitions>
@@ -353,7 +345,7 @@
                             <MenuItem Header="Close Liner Door"  Click="CloseDoor_Click"  IsChecked="{Binding IsLinerDoorClosed}" IsEnabled="{Binding IsLinerDoorClosed,Converter={StaticResource BoolToBool}}"/>
                         </ContextMenu>
                     </Grid.ContextMenu>
-                    <Rectangle x:Name="linerValve_Top"     Style="{StaticResource SlitValve_Animation2}" Fill="{StaticResource doorColor}" VerticalAlignment="Top" Height="36" Margin="-15,6,169,0" Grid.RowSpan="2"   />
+                    <Rectangle x:Name="linerValve_Top"    Fill="{StaticResource doorColor}" VerticalAlignment="Top" Height="36" Margin="-15,6,169,0" Grid.RowSpan="2"   />
                     <Rectangle x:Name="linerValve_Bottom"  Style="{StaticResource SlitValve_Animation2}" Fill="{StaticResource doorColor}" VerticalAlignment="Top" Panel.ZIndex="3" Height="44" Margin="-16,34,168,0" Grid.RowSpan="2" />
                 </Grid>
                 <!--slit door右边-->

+ 36 - 0
Venus/Venus_UI/Config/Menu_VenusSE.json

@@ -86,6 +86,12 @@
         "View": "RFCalibrationView"
       },
       {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Statistics",
+        "View": "StatisticsView"
+      },
+      {
         "FirstMenu": "PMB",
         "Permission": 2,
         "SecondMenu": "Operation",
@@ -134,6 +140,12 @@
         "View": "RFCalibrationView"
       },
       {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Statistics",
+        "View": "StatisticsView"
+      },
+      {
         "FirstMenu": "Configuration",
         "Permission": 2,
         "SecondMenu": "System Config",
@@ -267,6 +279,12 @@
         "View": "RFCalibrationView"
       },
       {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Statistics",
+        "View": "StatisticsView"
+      },
+      {
         "FirstMenu": "PMB",
         "Permission": 2,
         "SecondMenu": "Operation",
@@ -315,6 +333,12 @@
         "View": "RFCalibrationView"
       },
       {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Statistics",
+        "View": "StatisticsView"
+      },
+      {
         "FirstMenu": "Configuration",
         "Permission": 2,
         "SecondMenu": "System Config",
@@ -448,6 +472,12 @@
         "View": "RFCalibrationView"
       },
       {
+        "FirstMenu": "PMA",
+        "Permission": 2,
+        "SecondMenu": "Statistics",
+        "View": "StatisticsView"
+      },
+      {
         "FirstMenu": "PMB",
         "Permission": 2,
         "SecondMenu": "Operation",
@@ -496,6 +526,12 @@
         "View": "RFCalibrationView"
       },
       {
+        "FirstMenu": "PMB",
+        "Permission": 2,
+        "SecondMenu": "Statistics",
+        "View": "StatisticsView"
+      },
+      {
         "FirstMenu": "Configuration",
         "Permission": 2,
         "SecondMenu": "System Config",