Quellcode durchsuchen

PM/TM swap pick 开门前加压力wait

lixiang vor 11 Monaten
Ursprung
Commit
d938a9e54c

+ 1 - 1
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AIoDefine.xml

@@ -49,7 +49,7 @@
 		<DI_ITEM Index="42" Name="DI_MFC8_Pressure_Switch" Device="PG8" Addr="w22.10" Note="Gas Box" />
 		<DI_ITEM Index="43" Name="DI_N2_Purge_Pressure_Switch" Device="N2_P" Addr="w22.11" Note="Gas Box" />
 		<DI_ITEM Index="44" Name="" Device="VG_He" Addr="" Note="ESC配置" />
-		<DI_ITEM Index="45" Name="" />
+		<DI_ITEM Index="45" Name="DI_GasBox_N2_Flow_Switch"          Device="" Addr="w22.13" Note="" />
 		<DI_ITEM Index="46" Name="DI_GasBox_Gasline_Pressure_Switch" Device="" Addr="w22.14" Note="" />
 		<DI_ITEM Index="47" Name="" />
 		<DI_ITEM Index="48" Name="" />

+ 1 - 1
Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BIoDefine.xml

@@ -49,7 +49,7 @@
 		<DI_ITEM Index="42" Name="DI_MFC8_Pressure_Switch" Device="PG8" Addr="w22.10" Note="Gas Box" />
 		<DI_ITEM Index="43" Name="DI_N2_Purge_Pressure_Switch" Device="N2_P" Addr="w22.11" Note="Gas Box" />
 		<DI_ITEM Index="44" Name="" Device="VG_He" Addr="" Note="ESC配置" />
-		<DI_ITEM Index="45" Name="" />
+		<DI_ITEM Index="45" Name="DI_GasBox_N2_Flow_Switch"          Device="" Addr="w22.13" Note=""  />
 		<DI_ITEM Index="46" Name="" />
 		<DI_ITEM Index="47" Name="" />
 		<DI_ITEM Index="48" Name="" />

+ 7 - 0
Venus/Venus_RT/Config/System_Kepler2200.sccfg

@@ -629,6 +629,7 @@
 			<config default="20" name="Temperature"           nameView="Temperature"              description="Temperature"                 max="1000" min="20"    paramter="" tag="" unit="℃" type="Double" />
 			<config default="130" name="Ratio"                 nameView="Ratio"                    description="Ratio"                       max="300"  min="90"     paramter="" tag="" unit="" type="Double" />
 			<config default="true" name="IsOn" nameView="Is On" description="IsOn" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="50" name="N2WarningTemperatureLimit"           nameView="N2 Warning Temperature Limit"              description="N2 Warning Temperature Limit"                 max="1000" min="20"    paramter="" tag="" unit="℃" type="Double" />
 
 		</configs>
 	</configs>
@@ -954,6 +955,8 @@
 			<config default="20" name="Temperature"           nameView="Temperature"              description="Temperature"                  max="1000" min="20"    paramter="" tag="" unit="℃" type="Double" />
 			<config default="130" name="Ratio"                 nameView="Ratio"                    description="Ratio"                       max="1000"  min="0"    paramter="" tag="" unit=""   type="Double" />
 		    <config default="true" name="IsOn" nameView="Is On" description="IsOn" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="50" name="N2WarningTemperatureLimit"           nameView="N2 Warning Temperature Limit"              description="N2 Warning Temperature Limit"                 max="1000" min="20"    paramter="" tag="" unit="℃" type="Double" />
+
 		</configs>
 	</configs>
 
@@ -1277,6 +1280,8 @@
 			<config default="20" name="Temperature"           nameView="Temperature"              description="Temperature"                  max="1000"  min="20"    paramter="" tag="" unit="℃" type="Double" />
 			<config default="130" name="Ratio"                 nameView="Ratio"                    description="Ratio"                       max="300"  min="90"     paramter="" tag="" unit="" type="Double" />
 		    <config default="true" name="IsOn" nameView="Is On" description="IsOn" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="50" name="N2WarningTemperatureLimit"           nameView="N2 Warning Temperature Limit"              description="N2 Warning Temperature Limit"                 max="1000" min="20"    paramter="" tag="" unit="℃" type="Double" />
+
 		</configs>
 	</configs>
 
@@ -1600,6 +1605,8 @@
 			<config default="20" name="Temperature"            nameView="Temperature"              description="Temperature"                max="1000" min="20"    paramter="" tag="" unit="℃" type="Double" />
 			<config default="130" name="Ratio"                  nameView="Ratio"                    description="Ratio"                     max="300"  min="90"     paramter="" tag="" unit="" type="Double" />
 		    <config default="true" name="IsOn" nameView="Is On" description="IsOn" max="0" min="0" paramter="" tag="" unit="" type="Bool" />
+			<config default="50" name="N2WarningTemperatureLimit"           nameView="N2 Warning Temperature Limit"              description="N2 Warning Temperature Limit"                 max="1000" min="20"    paramter="" tag="" unit="℃" type="Double" />
+
 		</configs>
 	</configs>
 

+ 2 - 2
Venus/Venus_RT/Modules/TM/MFPMPickRoutine.cs

@@ -76,7 +76,7 @@ namespace Venus_RT.Modules.TM
             else
                 _queryAwc = false;
 
-            maxPressureDifference=SC.GetValue<double>("System.PMTMMaxPressureDifference");
+            
         }
         public RState Start(params object[] objs)
         {
@@ -130,7 +130,7 @@ namespace Venus_RT.Modules.TM
             _pickDelayTime = SC.GetValue<int>($"{_targetModule}.PickDelayTime");
             awcAlarmRange = SC.GetValue<int>($"TM.AWCAlarmRange");
             awcWarningRange = SC.GetValue<int>($"TM.AWCWarningRange");
-
+            maxPressureDifference = SC.GetValue<double>("System.PMTMMaxPressureDifference");
             return Runner.Start(Module, $"Pick from {_targetModule}");
         }
 

+ 23 - 1
Venus/Venus_RT/Modules/TM/MFPMSwapRoutine.cs

@@ -12,6 +12,7 @@ using Aitex.Core.Util;
 using Venus_RT.Modules.PMs;
 using MECF.Framework.Common.Schedulers;
 using System.Collections.Generic;
+using System;
 
 namespace Venus_RT.Modules.TM
 {
@@ -39,6 +40,7 @@ namespace Venus_RT.Modules.TM
         {
             WaitPMReady,
             PreRotation,
+            WaitPressreStable,
             OpenSlitDoor,
             PickPrepare,
             Picking,
@@ -59,6 +61,7 @@ namespace Venus_RT.Modules.TM
         private int _targetSlot;
         private Hand _pickHand;
         private Hand _placeHand;
+        double maxPressureDifference;
 
         public MFPMSwapRoutine(JetTM tm, ITransferRobot robot) : base(ModuleName.TMRobot)
         {
@@ -122,7 +125,7 @@ namespace Venus_RT.Modules.TM
             _swapingTimeout = SC.GetValue<int>($"TM.SwapTimeout") * 1000;
             _pickDelayTime = SC.GetValue<int>($"{_targetModule}.PickDelayTime");
             _placeDelayTime = SC.GetValue<int>($"{_targetModule}.PlaceDelayTime");
-
+            maxPressureDifference = SC.GetValue<double>("System.PMTMMaxPressureDifference");
             return Runner.Start(Module, $"Swap with {_targetModule}");
         }
 
@@ -171,6 +174,7 @@ namespace Venus_RT.Modules.TM
 
                     Runner.Wait(SwapWithHeaterStep.WaitPMReady,    () => _pmModule.IsIdle,              _delay_60s)
                           .RunIf(SwapWithHeaterStep.PreRotation,   _JetTM.PreRotateModules.ContainsKey(_targetModule), RotateArm, WaitRotateDone)
+                          .Wait(SwapWithHeaterStep.WaitPressreStable, TMPMPressureIsOK,                _delay_60s)
                           .Run(SwapWithHeaterStep.OpenSlitDoor,    OpenPMSlitDoor,                      OpenPMSlitDoorIsOK)
                           .Run(SwapWithHeaterStep.PickPrepare,     PickPrepare,                         IsModuleReadyForPick)
                           .Run(SwapWithHeaterStep.Picking,         Picking,                             WaitPickDone)
@@ -188,6 +192,24 @@ namespace Venus_RT.Modules.TM
             _pmModule.PostMsg(PMEntity.MSG.PreparePick);
             return true;
         }
+        private bool TMPMPressureIsOK()
+        {
+            if (RouteManager.IsATMMode)
+            {
+                return _JetTM.IsTMATM && _JetTM.IsModuleATM(_targetModule);
+            }
+            else
+            {
+                if (Math.Abs((_pmModule.ChamberPressure - _JetTM.ChamberPressure)) < maxPressureDifference)
+                {
+                    return true;
+                }
+                else
+                {
+                    return false;
+                }
+            }
+        }
         private bool OpenPMSlitDoor()
         {
             return _JetTM.TurnMFSlitDoor(_targetModule, true, out _);

+ 1 - 1
Venus/Venus_Simulator/Config/_ioDefineKepler2200A.xml

@@ -49,7 +49,7 @@
 		<DI_ITEM Index="42" Name="DI_MFC8_Pressure_Switch" Device="PG8" Addr="w22.10" Note="Gas Box" />
 		<DI_ITEM Index="43" Name="DI_N2_Purge_Pressure_Switch" Device="N2_P" Addr="w22.11" Note="Gas Box" />
 		<DI_ITEM Index="44" Name="" Device="VG_He" Addr="" Note="ESC配置" />
-		<DI_ITEM Index="45" Name="" />
+		<DI_ITEM Index="45" Name="DI_GasBox_N2_Flow_Switch"          Device="" Addr="w22.13" Note=""  />
 		<DI_ITEM Index="46" Name="DI_GasBox_Gasline_Pressure_Switch" Device="" Addr="w22.14" Note="" />
 		<DI_ITEM Index="47" Name="" />
 		<DI_ITEM Index="48" Name="" />

+ 2 - 2
Venus/Venus_Simulator/Config/_ioDefineKepler2200B.xml

@@ -49,8 +49,8 @@
 		<DI_ITEM Index="42" Name="DI_MFC8_Pressure_Switch" Device="PG8" Addr="w22.10" Note="Gas Box" />
 		<DI_ITEM Index="43" Name="DI_N2_Purge_Pressure_Switch" Device="N2_P" Addr="w22.11" Note="Gas Box" />
 		<DI_ITEM Index="44" Name="" Device="VG_He" Addr="" Note="ESC配置" />
-		<DI_ITEM Index="45" Name="" />
-		<DI_ITEM Index="46" Name="" />
+		<DI_ITEM Index="45" Name="DI_GasBox_N2_Flow_Switch"          Device="" Addr="w22.13" Note=""  />
+		<DI_ITEM Index="46" Name="DI_GasBox_Gasline_Pressure_Switch" Device="" Addr="w22.14" Note="" />
 		<DI_ITEM Index="47" Name="" />
 		<DI_ITEM Index="48" Name="" />
 		<DI_ITEM Index="49" Name="" />

+ 2 - 0
Venus/Venus_Themes/UserControls/StateTitle.xaml

@@ -31,6 +31,8 @@
             <TextBox.ContextMenu>
                 <ContextMenu Visibility="{Binding IsNeedContextMenu,Converter={StaticResource bool2VisibilityConverter}}">
                     <MenuItem Header="Home"        Click="Initialize_Click" IsEnabled="{Binding IsOnline,Converter={StaticResource BoolToBool}}"/>
+                    <MenuItem Header="Abort"       Click="Abort_Click" IsEnabled="{Binding IsOnline,Converter={StaticResource BoolToBool}}"/>
+
                     <Separator Background="Gray"/>
                     <MenuItem Header="Online"      IsChecked="{Binding IsOnline}"                                       IsEnabled="{Binding IsOnline,Converter={StaticResource BoolToBool}}"  Click="Online_Click"/>
                     <MenuItem Header="Offline"     IsChecked="{Binding IsOnline,Converter={StaticResource BoolToBool}}" IsEnabled="{Binding IsOnline}"                                        Click="Offline_Click"/>

+ 4 - 1
Venus/Venus_Themes/UserControls/StateTitle.xaml.cs

@@ -112,7 +112,10 @@ namespace Venus_Themes.UserControls
         {
             UIEvents.OnInitRaiseChanged(Title);
         }
-
+        private void Abort_Click(object sender, RoutedEventArgs e)
+        {
+            UIEvents.OnAbortRaiseChanged(Title);
+        }
         private void Exclude_Click(object sender, RoutedEventArgs e)
         {
             UIEvents.OnIncludeRaiseChanged(new IncludePara() { ModuleName = Title, IsInclude = false });

+ 5 - 1
Venus/Venus_Themes/unity/UIEvents.cs

@@ -44,7 +44,11 @@ namespace Venus_Themes.Unity
         {
             InitRaiseChangedEvent?.Invoke(module);
         }
-
+        public static event Action<string> AbortRaiseChangedEvent;
+        public static void OnAbortRaiseChanged(string module)
+        {
+            AbortRaiseChangedEvent?.Invoke(module);
+        }
         public static event Action<IncludePara> IncludeRaiseChangedEvent;
         public static void OnIncludeRaiseChanged(IncludePara para)
         {

+ 6 - 0
Venus/Venus_UI/Views/ShellView.xaml.cs

@@ -87,6 +87,8 @@ namespace Venus_UI.Views
 
             UIEvents.InitRaiseChangedEvent += UIEvents_InitRaiseChangedEvent;
 
+            UIEvents.AbortRaiseChangedEvent += UIEvents_AbortRaiseChangedEvent;
+
             UIEvents.IncludeRaiseChangedEvent += UIEvents_IncludeRaiseChangedEvent;
 
             UIEvents.OnlineRaiseChangedEvent += UIEvents_OnlineRaiseChangedEvent;
@@ -415,6 +417,10 @@ namespace Venus_UI.Views
         {
             InvokeClient.Instance.Service.DoOperation($"{obj}.Home");
         }
+        private void UIEvents_AbortRaiseChangedEvent(string obj)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{obj}.Abort");
+        }
         private void UIEvents_IncludeRaiseChangedEvent(IncludePara obj)
         {
             if (obj.IsInclude)