Pārlūkot izejas kodu

1. Add wafer map alarm;
2. Revise reset function of robot;
3. Add PM door animation;
4. Revise Aligner1 waferinfo deleted bug when system homes;
5. Optimize Robot animation;

niuyx 6 dienas atpakaļ
vecāks
revīzija
e2d5068ee0

+ 2 - 2
Framework/RTEquipmentLibrary/RTEquipmentLibrary/HardwareUnits/Robots/RobotBase/RobotBase.cs

@@ -1244,8 +1244,8 @@ namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase
             Transition(RobotStateEnum.Maintenance, FSM_MSG.TIMER, fMonitorMaintenance, RobotStateEnum.Init);
 
 
-            Transition(RobotStateEnum.Resetting, RobotMsg.ActionDone, fResetComplete, RobotStateEnum.Idle);
-            Transition(RobotStateEnum.Resetting, FSM_MSG.TIMER, fMonitorReset, RobotStateEnum.Idle);
+            Transition(RobotStateEnum.Resetting, RobotMsg.ActionDone, fResetComplete, RobotStateEnum.Init);
+            Transition(RobotStateEnum.Resetting, FSM_MSG.TIMER, fMonitorReset, RobotStateEnum.Init);
 
 
             Transition(RobotStateEnum.Init, RobotMsg.StartInit, fStartInit, RobotStateEnum.Initializing);

+ 10 - 5
Jet/Jet_001_2P_Jet/EfemRT/Devices/LoadPorts/Hirata/HirataLoadPort.cs

@@ -1,6 +1,7 @@
 using Aitex.Core.Common;
 using Aitex.Core.RT.Device;
 using Aitex.Core.RT.Device.Unit;
+using Aitex.Core.RT.Event;
 using Aitex.Core.RT.IOCore;
 using Aitex.Core.RT.Log;
 using Aitex.Core.RT.SCCore;
@@ -15,6 +16,7 @@ using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
+using System.Drawing;
 using System.IO.Ports;
 using System.Linq;
 using System.Text;
@@ -709,22 +711,24 @@ namespace EfemRT.Devices.LoadPorts.Hirata
                             waferInfo = Singleton<WaferManager>.Instance.CreateWafer(base.LPModuleName, i, WaferStatus.Normal, WaferSize.WS8);
                             Singleton<CarrierManager>.Instance.RegisterCarrierWafer(base.Name, i, waferInfo);
                             error_num++;
-                            LOG.Error($"[{base.Name}] Slot {i + 1}: occur Crossed");
+                            EV.PostMessage("System", EventEnum.DefaultAlarm, $"[{base.Name}] Slot {i + 1}: Occur Crossed");
+                            //EV.PostAlarmLog("LoadPort", $"[{base.Name}] Slot {i + 1}: Occur Crossed");
                             break;
                         case '3':
                             waferInfo = Singleton<WaferManager>.Instance.CreateWafer(base.LPModuleName, i, WaferStatus.Normal, WaferSize.WS8);
-                            Singleton<CarrierManager>.Instance.RegisterCarrierWafer(base.Name, i, waferInfo);
-                            LOG.Warning($"[{base.Name}] Slot {i + 1}: Thickness is too Thick");
+                            Singleton<CarrierManager>.Instance.RegisterCarrierWafer(base.Name, i, waferInfo);                            
+                            EV.PostMessage("System", EventEnum.DefaultAlarm, $"[{base.Name}] Slot {i + 1}: Thickness is too Thick");
+                            //EV.PostAlarmLog("LoadPort", $"[{base.Name}] Slot {i + 1}: Thickness is too Thick");
                             break;
                         case '4':
                             waferInfo = Singleton<WaferManager>.Instance.CreateWafer(base.LPModuleName, i, WaferStatus.Normal, WaferSize.WS8);
                             Singleton<CarrierManager>.Instance.RegisterCarrierWafer(base.Name, i, waferInfo);
-                            LOG.Warning($"[{base.Name}] Slot {i + 1}: Thickness is too Thin");
+                            EV.PostAlarmLog("LoadPort", $"[{base.Name}] Slot {i + 1}: Thickness is too Thin");
                             break;
                         case '5':
                             waferInfo = Singleton<WaferManager>.Instance.CreateWafer(base.LPModuleName, i, WaferStatus.Normal, WaferSize.WS8);
                             Singleton<CarrierManager>.Instance.RegisterCarrierWafer(base.Name, i, waferInfo);
-                            LOG.Error($"[{base.Name}] Slot {i + 1}: Position error”");
+                            EV.PostAlarmLog("LoadPort", $"[{base.Name}] Slot {i + 1}: Position error");
                             break;
                     }
                 }
@@ -734,6 +738,7 @@ namespace EfemRT.Devices.LoadPorts.Hirata
                 }
                 else
                 {
+                    PostMsg(LoadPortMsg.Error);
                     base.MapError = true;
                 }
 

+ 3 - 0
Jet/Jet_001_2P_Jet/EfemRT/Modules/RouteManager.cs

@@ -746,6 +746,9 @@ namespace EFEM.RT.Modules
             DATA.Subscribe("PMA.IsEnable", () => !IsPMADisable);
             DATA.Subscribe("PMB.IsEnable", () => !IsPMBDisable);
             DATA.Subscribe("Flipper.IsEnable", () => !IsFlipperDisable);
+
+            DATA.Subscribe("System.IsPMADoorOpen", () => DeviceModel.SensorPMASystemInterlock.Value);
+            DATA.Subscribe("System.IsPMBDoorOpen", () => DeviceModel.SensorPMBSystemInterlock.Value);
         }
 
         private void Lp_ActionDone(bool obj)

+ 1 - 1
Jet/Jet_001_2P_Jet/EfemRT/Routines/CommonRoutine.cs

@@ -197,7 +197,7 @@ namespace EFEM.RT.Routines
             }, () =>
             {
 
-                if (!device.IsBusy&& device.RobotState != RobotStateEnum.Error && device.RobotState == RobotStateEnum.Idle)
+                if (!device.IsBusy&& device.RobotState != RobotStateEnum.Error && device.RobotState == RobotStateEnum.Init)
                 { 
                     return true;
                 }

+ 4 - 4
Jet/Jet_001_2P_Jet/EfemRT/Routines/InitRoutine.cs

@@ -550,10 +550,10 @@ namespace EFEM.RT.Routines
                 if (DeviceDefineManager.Instance.GetValue<bool>("AlignerInstalled") ?? false)
                     WaferManager.Instance.DeleteWafer(ModuleName.Aligner, 0);
 
-                if (SC.ContainsItem("System.Aligner1Disable") ? !SC.GetValue<bool>("System.Aligner1Disable") : false)
-                    WaferManager.Instance.DeleteWafer(ModuleName.Aligner1, 0);
-                if (SC.ContainsItem("System.Aligner2Disable") ? !SC.GetValue<bool>("System.Aligner2Disable") : false)
-                    WaferManager.Instance.DeleteWafer(ModuleName.Aligner2, 0);
+                //if (SC.ContainsItem("System.Aligner1Disable") ? !SC.GetValue<bool>("System.Aligner1Disable") : false)
+                //    WaferManager.Instance.DeleteWafer(ModuleName.Aligner1, 0);
+                //if (SC.ContainsItem("System.Aligner2Disable") ? !SC.GetValue<bool>("System.Aligner2Disable") : false)
+                //    WaferManager.Instance.DeleteWafer(ModuleName.Aligner2, 0);
             }
 
             //var loadLockQuantity = DeviceDefineManager.Instance.GetValue<int>("LoadLockQuantity") ?? 0;

+ 5 - 1
Jet/Jet_001_2P_Jet/EfemRT/Tasks/OpenTask.cs

@@ -148,7 +148,11 @@ namespace EFEM.RT.Tasks
 
             LoadPortBaseDevice _loadport = DEVICE.GetDevice<LoadPortBaseDevice>(device);
             RobotBaseDevice _robot = DEVICE.GetDevice<RobotBaseDevice>(DeviceName.Robot);
-
+            if (_loadport.CurrentState == LoadPortStateEnum.Error && _loadport.MapError)
+            {
+                result = "Slot Map Error";
+                return false;
+            }
             if (_loadport.IsError || _robot.IsError)
             {
                 flag1 = ErrorCheckList1.VAC | ErrorCheckList1.AIR | ErrorCheckList1.STALL

+ 1 - 1
Jet/Jet_001_2P_Jet/EfemSimulator/Device/LoadPorts/Hirata/HirataSimulator.cs

@@ -62,7 +62,7 @@ namespace EfemSimulator.LoadPort.Hirata
                     if (command.Contains("MAPR"))
                     {
                         //全空
-                        //OnWriteMessage("0000GET:MAPR/00000000000000000000000000;**"+ EOF);
+                        //OnWriteMessage("0000GET:MAPR/1002020030030010000000000;**"+ EOF);
                         
                         OnWriteMessage($"0000GET:MAPR/{SlotMap};**"+ EOF);
                     }

+ 63 - 0
Jet/Jet_001_2P_Jet/EfemUI/Controls/EFEM2LPJetAB.xaml

@@ -8,6 +8,44 @@
              xmlns:controls="clr-namespace:EfemUI.Controls" xmlns:system="clr-namespace:System;assembly=mscorlib"
              mc:Ignorable="d" 
              d:DesignHeight="300" d:DesignWidth="300">
+    <UserControl.Resources>
+        <Storyboard x:Key="ATMDoor_Open">
+            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" >
+                <EasingDoubleKeyFrame KeyTime="0" Value="55"/>
+                <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="20"/>
+            </DoubleAnimationUsingKeyFrames>
+        </Storyboard>
+        <Storyboard x:Key="ATMDoor_Close">
+            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Width)" >
+                <EasingDoubleKeyFrame KeyTime="0" Value="20"/>
+                <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="55"/>
+            </DoubleAnimationUsingKeyFrames>
+        </Storyboard>
+        <Style TargetType="{x:Type Rectangle}" x:Key="SlitValveA_Animation" >
+            <Style.Triggers>
+                <DataTrigger Binding="{Binding IsPMADoorOpen}" Value="true">
+                    <DataTrigger.EnterActions>
+                        <BeginStoryboard Storyboard="{StaticResource ATMDoor_Open}"/>
+                    </DataTrigger.EnterActions>
+                    <DataTrigger.ExitActions>
+                        <BeginStoryboard Storyboard="{StaticResource ATMDoor_Close}"/>
+                    </DataTrigger.ExitActions>
+                </DataTrigger>
+            </Style.Triggers>
+        </Style>
+        <Style TargetType="{x:Type Rectangle}" x:Key="SlitValveB_Animation" >
+            <Style.Triggers>
+                <DataTrigger Binding="{Binding IsPMBDoorOpen}" Value="true">
+                    <DataTrigger.EnterActions>
+                        <BeginStoryboard Storyboard="{StaticResource ATMDoor_Open}"/>
+                    </DataTrigger.EnterActions>
+                    <DataTrigger.ExitActions>
+                        <BeginStoryboard Storyboard="{StaticResource ATMDoor_Close}"/>
+                    </DataTrigger.ExitActions>
+                </DataTrigger>
+            </Style.Triggers>
+        </Style>
+    </UserControl.Resources>
     <Viewbox>
         <Grid x:Name="root">
             <!--底面背景-->
@@ -15,10 +53,35 @@
             </controls:RobotBg2LP>
             <!--PMA-->
             <uc:LoadLock IsEnableTextMenu="{Binding IsEnableTextMenu}" Width="110" Height="110" Margin="245,-89,468,624" WaferTransferOptionCommand="{Binding WaferTransferOptionCommand}"  Wafer="{Binding Loadlock1Wafer}" Station="LL1" Visibility="{Binding PMAEnable,Converter={StaticResource boolVisibilityConverter}}"/>
+            <Canvas Margin="245,6,468,615">
+                <Grid x:Name="Slit_valve" Height="11" Width="110">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                    </Grid.ColumnDefinitions>
+                    <Rectangle Grid.ColumnSpan="2" Width="110" Fill="#DCDBDB"/>
+                    <Rectangle Grid.Column="0" x:Name="SlitValve_Top" Style="{StaticResource SlitValveA_Animation}" Fill="DimGray" Height="11" HorizontalAlignment="Left" VerticalAlignment="Center" Width="55" />
+                    <Rectangle Grid.Column="1" x:Name="SlitValve_Bottom" Style="{StaticResource SlitValveA_Animation}" Fill="DimGray" Height="11" HorizontalAlignment="Right" VerticalAlignment="Center" Width="55"/>
+                </Grid>
+            </Canvas>
+
+
             <Label Content="PMA" Margin="277,-89,464,671" Visibility="{Binding PMAEnable,Converter={StaticResource boolVisibilityConverter}}"  FontSize="15" Foreground="White" FontWeight="Bold"/>
             <!--PMB-->
             <uc:LoadLock IsEnableTextMenu="{Binding IsEnableTextMenu}" Width="110" Height="110" Margin="389,-89,324,624" WaferTransferOptionCommand="{Binding WaferTransferOptionCommand}"  Wafer="{Binding Loadlock2Wafer}" Station="LL2" Visibility="{Binding PMBEnable,Converter={StaticResource boolVisibilityConverter}}"/>
+            <Canvas Margin="389,6,324,615">
+                <Grid x:Name="Slit_valve2" Height="11" Width="110">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition/>
+                        <ColumnDefinition/>
+                    </Grid.ColumnDefinitions>
+                    <Rectangle Grid.ColumnSpan="2" Width="110" Fill="#DCDBDB"/>
+                    <Rectangle Grid.Column="0" x:Name="SlitValve_Top2" Style="{StaticResource SlitValveB_Animation}" Fill="DimGray" Height="11" HorizontalAlignment="Left" VerticalAlignment="Center" Width="55" />
+                    <Rectangle Grid.Column="1" x:Name="SlitValve_Bottom2" Style="{StaticResource SlitValveB_Animation}" Fill="DimGray" Height="11" HorizontalAlignment="Right" VerticalAlignment="Center" Width="55"/>
+                </Grid>
+            </Canvas>
             <Label Content="PMB" Margin="422,-89,332,702" Visibility="{Binding PMBEnable,Converter={StaticResource boolVisibilityConverter}}"   FontSize="15" Foreground="White" FontWeight="Bold"/>
+            
             <!--Aligner1-->
             <Label Content="Aligner1" Margin="582,233,171,360" Visibility="{Binding Aligner1Enable,Converter={StaticResource boolVisibilityConverter}}" FontSize="15" Foreground="SlateGray" FontWeight="Bold"/>
             <controls:Chamber IsEnableTextMenu="{Binding IsEnableTextMenu}" Visibility="{Binding Aligner1Enable,Converter={StaticResource boolVisibilityConverter}}" Width="95" Height="95" Margin="562,136,151,399" WaferTransferOptionCommand="{Binding WaferTransferOptionCommand}" Wafer="{Binding Aligner1Wafer}" Station="Aligner1" Disable="False"/>

+ 46 - 32
Jet/Jet_001_2P_Jet/EfemUI/Controls/EFEM2LPJetAB.xaml.cs

@@ -173,13 +173,13 @@ namespace EfemUI.Controls
                              StartPosition= new RobotPosition()
                              {
                                 X=0,
-                                Root=233,
+                                Root=228,
                                 Arm=179,
                                 Hand=67
                              },
                              EndPosition= new RobotPosition()
                              {
-                                Root=194,
+                                Root=189,
                                 Arm=225,
                                 Hand=52
                              }
@@ -190,13 +190,13 @@ namespace EfemUI.Controls
                             StartPosition= new RobotPosition()
                              {
                                 X=0,
-                                Root=18,
+                                Root=13,
                                 Arm=173,
                                 Hand=281
                              },
                              EndPosition= new RobotPosition()
                              {
-                                Root=42,
+                                Root=37,
                                 Arm=131,
                                 Hand=302
                              }
@@ -207,13 +207,13 @@ namespace EfemUI.Controls
                              StartPosition= new RobotPosition()
                              {
                                 X=0,
-                                Root=152,
+                                Root=159,
                                 Arm=187,
                                 Hand=93
                              },
                              EndPosition= new RobotPosition()
                              {
-                                Root=140,
+                                Root=147,
                                 Arm=227,
                                 Hand=61
                              }
@@ -224,13 +224,13 @@ namespace EfemUI.Controls
                             StartPosition= new RobotPosition()
                              {
                                 X=0,
-                                Root=-40,
+                                Root=-33,
                                 Arm=178,
                                 Hand=286
                              },
                              EndPosition= new RobotPosition()
                              {
-                                Root=-12,
+                                Root=-5,
                                 Arm=140,
                                 Hand=301
                              }
@@ -445,15 +445,15 @@ namespace EfemUI.Controls
                              StartPosition= new RobotPosition()
                              {
                                 X=0,
-                                Root=277,
-                                Arm=212,
-                                Hand=140
+                                Root=79,
+                                Arm=141,
+                                Hand=410
                              },
                              EndPosition= new RobotPosition()
                              {
-                                Root=295,
-                                Arm=248,
-                                Hand=86
+                                Root=143,
+                                Arm=130,
+                                Hand=357
                              }
                         }
                     },
@@ -462,15 +462,15 @@ namespace EfemUI.Controls
                             StartPosition= new RobotPosition()
                              {
                                 X=0,
-                                Root=100,
-                                Arm=134,
-                                Hand=395
+                                Root=87,
+                                Arm=130,
+                                Hand=413
                              },
                              EndPosition= new RobotPosition()
                              {
-                                Root=165,
-                                Arm=100,
-                                Hand=365
+                                Root=137,
+                                Arm=122,
+                                Hand=371
                              }
                         }
                     },
@@ -479,15 +479,15 @@ namespace EfemUI.Controls
                              StartPosition= new RobotPosition()
                              {
                                 X=0,
-                                Root=436,
-                                Arm=229,
-                                Hand=-34
+                                Root=73,
+                                Arm=220,
+                                Hand=337
                              },
                              EndPosition= new RobotPosition()
                              {
-                                Root=375,
-                                Arm=256,
-                                Hand=0
+                                Root=24,
+                                Arm=236,
+                                Hand=370
                              }
                         }
                     },
@@ -496,15 +496,15 @@ namespace EfemUI.Controls
                             StartPosition= new RobotPosition()
                              {
                                 X=0,
-                                Root=264,
-                                Arm=146,
-                                Hand=221
+                                Root=99,
+                                Arm=205,
+                                Hand=326
                              },
                              EndPosition= new RobotPosition()
                              {
-                                Root=242,
-                                Arm=115,
-                                Hand=273
+                                Root=26,
+                                Arm=226,
+                                Hand=377
                              }
                         }
                     }
@@ -582,6 +582,20 @@ namespace EfemUI.Controls
             set;
         }
 
+        [Subscription("System.IsPMADoorOpen")]
+        public bool IsPMADoorOpen
+        {
+            get;
+            set;
+        }
+
+        [Subscription("System.IsPMBDoorOpen")]
+        public bool IsPMBDoorOpen
+        {
+            get;
+            set;
+        }
+
         private bool _isFlipperOverOrigin;
 
         [Subscription("Flipper.IsFlipperOverOrigin")]