Browse Source

1.做工艺前pump down 根据底压确定是否执行
2.pick wafer在atm模式将开门前等待压差稳定改为等待atm信号
3.钟摆阀优化pa和mtorr压力转换

lixiang 1 year ago
parent
commit
608cf43d67
28 changed files with 263 additions and 123 deletions
  1. 15 10
      Venus/Venus_MainPages/Views/EfemView.xaml
  2. 13 13
      Venus/Venus_MainPages/Views/OperationOverView.xaml
  3. 2 6
      Venus/Venus_RT/App.config
  4. 3 2
      Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AInterlock.xml
  5. 1 1
      Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AIoDefine.xml
  6. 2 1
      Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BInterlock.xml
  7. 11 5
      Venus/Venus_RT/Config/System_Kepler2200.sccfg
  8. 0 3
      Venus/Venus_RT/Devices/IODevices/IoCylinder.cs
  9. 16 5
      Venus/Venus_RT/Devices/JetKepler2200APM.cs
  10. 16 3
      Venus/Venus_RT/Devices/JetKepler2200BPM.cs
  11. 2 0
      Venus/Venus_RT/Devices/JetKepler2300PM.cs
  12. 4 3
      Venus/Venus_RT/Devices/PendulumValve.cs
  13. 38 8
      Venus/Venus_RT/Devices/TM/JetTM.cs
  14. 1 1
      Venus/Venus_RT/Modules/LLs/LLEntity.cs
  15. 6 1
      Venus/Venus_RT/Modules/PMs/PMEntity.cs
  16. 4 4
      Venus/Venus_RT/Modules/PMs/PMProcessRoutine.cs
  17. 1 27
      Venus/Venus_RT/Modules/PMs/PumpDownRoutine.cs
  18. 2 0
      Venus/Venus_RT/Modules/RouteManager.cs
  19. 13 6
      Venus/Venus_RT/Modules/TM/MFPMPickRoutine.cs
  20. 23 15
      Venus/Venus_RT/Modules/TM/MFPickRoutine.cs
  21. 13 0
      Venus/Venus_RT/Modules/TM/MFPumpRoutine.cs
  22. 1 1
      Venus/Venus_Simulator/Config/_ioDefineKepler2200A.xml
  23. 6 4
      Venus/Venus_Simulator/Instances/SimulatorSystem.cs
  24. 27 0
      Venus/Venus_Themes/Converters/IsOnlineToOpacityConverter.cs
  25. 7 3
      Venus/Venus_Themes/UserControls/NiceUIControls/NiceMainTMWithLoadLock.xaml
  26. 34 0
      Venus/Venus_Themes/UserControls/NiceUIControls/NiceMainTMWithLoadLock.xaml.cs
  27. 1 1
      Venus/Venus_Themes/UserControls/NiceUIControls/XinSongRobot.xaml
  28. 1 0
      Venus/Venus_Themes/Venus_Themes.csproj

+ 15 - 10
Venus/Venus_MainPages/Views/EfemView.xaml

@@ -13,13 +13,18 @@
              xmlns:unity="clr-namespace:Venus_MainPages.Unity"
              mc:Ignorable="d" 
              d:DesignHeight="850" d:DesignWidth="1920">
-    
+
     <UserControl.Resources>
         <converters:BoolToVisibility2 x:Key="BoolToVisibility2"/>
     </UserControl.Resources>
-    
+    <!--<Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="5*"/>
+            <ColumnDefinition Width="2*"/>
+        </Grid.ColumnDefinitions>
+    </Grid>-->
     <Canvas>
-        
+
         <Border BorderThickness="0,0,0,1" BorderBrush="Black" Canvas.Top="20" Canvas.Left="540">
             <StackPanel Orientation="Horizontal" Margin="0,0,0,5">
                 <!--<RadioButton Content="Connect"    FontSize="15"   Width="120" Height="28" Margin="20 5 5 0" Style="{StaticResource Button_RadioButton}" IsChecked="{Binding TMIsOFFline,Converter={StaticResource BoolToBool},Mode=TwoWay}" GroupName="IsConnect"/>
@@ -61,10 +66,10 @@
 
             <userControls:FOUPFrontView UnitData="{Binding LLAModuleInfo}" VerticalAlignment="Top" Canvas.Top="350" Canvas.Left="440" Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" ShowTitle="False"/>
             <userControls:FOUPFrontView UnitData="{Binding LLBModuleInfo}" VerticalAlignment="Top" Canvas.Top="350" Canvas.Left="950" Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" ShowTitle="False"/>
-            
-            
+
+
         </Canvas>
-                 
+
 
         <Grid      Canvas.Top="400" Canvas.Left="1020" Width="500">
             <Grid.RowDefinitions>
@@ -445,10 +450,10 @@
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="5" Grid.Column="2" Padding="5,1">
                     <StackPanel Orientation="Horizontal">
                         <Button IsEnabled="{Binding IsLP1DockEnable}" Margin="10,0"  Content="Dock" Width="90" Height="25" Command="{Binding LPDockCommand}" CommandParameter="LP2">
-         
+
                         </Button>
                         <Button IsEnabled="{Binding IsLP1UndockEnable}" Margin="10,0" Content="Undock" Width="90" Height="25" Command="{Binding LPUnDockCommand}" CommandParameter="LP2">
-  
+
                         </Button>
                     </StackPanel>
                 </Border>
@@ -635,10 +640,10 @@
             <TextBox Canvas.Left="1700" Canvas.Top="220" Text="{Binding RobotMoveInfo.ArmTarget}"/>
             <TextBox Canvas.Left="1800" Canvas.Top="220" Text="{Binding RobotMoveInfo.Action}"/>
         </Canvas>-->
-       
+
 
 
     </Canvas>
 
-  
+
 </UserControl>

File diff suppressed because it is too large
+ 13 - 13
Venus/Venus_MainPages/Views/OperationOverView.xaml


+ 2 - 6
Venus/Venus_RT/App.config

@@ -8,16 +8,12 @@
 			<param name="Encoding" value="utf-8" />
 			<param name="File" value="Logs/log" />
 			<param name="AppendToFile" value="true" />
-			<!--<param name="RollingStyle" value="Date" />-->
-			<param name= "MaxSizeRollBackups" value= "-1"/>
-			<param name= "MaximumFileSize" value= "500M"/>
+			<param name="RollingStyle" value="Date" />
 			<param name="StaticLogFileName" value="false" />
 			<datePattern value="yyyyMMdd'.txt'" />
-			<!--<param name= "DatePattern" value= "&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;"/>-->
-			<param name= " RollingStyle " value= "Composite" />
 			<layout type="log4net.Layout.PatternLayout,log4net">
 				<param name="ConversionPattern" value="%d%8p %m%n" />
-				<param name="Header" value="&#xA;----------------------开启--------------------------&#xA;" />
+				<param name="Header" value="&#xA;----------------------开启RT--------------------------&#xA;" />
 			</layout>
 		</appender>
 		<root>

+ 3 - 2
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AInterlock.xml

@@ -175,8 +175,9 @@
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>
 	</Action>
 
-	<Action do="DO_Turbo_Pump_Pumping_Valve" value="true" tip="Turbo Pump Purge Valve" tip.zh-CN="" tip.en-US="DO-30" >
-		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>
+	<Action do="DO_Turbo_Pump_Purge_Valve" value="true" tip="Turbo Pump Purge Valve" tip.zh-CN="" tip.en-US="DO-30" >
+		<Limit di="DI_CDA_Pressure_Switch"			    value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>
+		<Limit do="DO_Turbo_Pump_Pumping_Valve"			value="true" tip="DO Turbo Pump Pumping Valve"			tip.zh-CN="" tip.en-US="D0-29"/>
 	</Action>
 
 

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

@@ -50,7 +50,7 @@
 		<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="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 - 1
Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BInterlock.xml

@@ -178,8 +178,9 @@
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>
 	</Action>
 
-	<Action do="DO_Turbo_Pump_Pumping_Valve" value="true" tip="Turbo Pump Purge Valve" tip.zh-CN="" tip.en-US="DO-30" >
+	<Action do="DO_Turbo_Pump_Purge_Valve" value="true" tip="Turbo Pump Purge Valve" tip.zh-CN="" tip.en-US="DO-30" >
 		<Limit di="DI_CDA_Pressure_Switch"			value="true" tip="DI CDA Pressure"			tip.zh-CN="" tip.en-US="DI-12"/>
+		<Limit do="DO_Turbo_Pump_Pumping_Valve"			value="true" tip="DO Turbo Pump Pumping Valve"			tip.zh-CN="" tip.en-US="D0-29"/>
 	</Action>
 
 

+ 11 - 5
Venus/Venus_RT/Config/System_Kepler2200.sccfg

@@ -136,7 +136,9 @@
 
 		<config default="100" name="PumpBasePressure" nameView="Pump Base Pressure" description="" max="200" min="0" paramter="" tag="" unit="Pa" type="Double" />
 		<config default="2000" name="PumpCrossingPressure" nameView="Pump Crossing Pressure" description="" max="300000" min="200" paramter="" tag="" unit="Pa" type="Double" />
-		<config default="60" name="PumpingTimeout" nameView="Pumping Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
+		<config default="60"  name="PumpingTimeout" nameView="Pumping Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
+		<config default="500" name="PumpForelinePressureLimit" nameView="ForelinePressure" description="PumpDown Check it" max="2000" min="0" paramter="" tag="" unit="Pa" type="Integer" />
+		
 		<config default="60" name="VentingTimeout" nameView="Venting Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
 		<config default="2000" name="OverVentTime" nameView="Over Vent Time Delay" description="" max="60000" min="0" paramter="" tag="" unit="ms" type="Integer" />
 		<config default="2000" name="PurgeVentPressure" description="Purge Vent Pressure" max="760000" min="0" paramter="" tag="" unit="Pa" type="Double" />
@@ -201,6 +203,8 @@
 		<config default="100" name="PumpBasePressure" nameView="Pump Base Pressure" description="" max="2000" min="0" paramter="" tag="" unit="Pa" type="Double" />
 		<config default="2000" name="PumpCrossingPressure" nameView="Pump Crossing Pressure" description="" max="500000" min="200" paramter="" tag="" unit="Pa" type="Double" />
 		<config default="60" name="PumpingTimeout" nameView="Pumping Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
+		<config default="500" name="PumpForelinePressureLimit" nameView="ForelinePressure" description="PumpDown Check it" max="2000" min="0" paramter="" tag="" unit="Pa" type="Integer" />
+
 		<config default="60" name="VentingTimeout" nameView="Venting Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
 		<config default="100" name="SoftVentEndPressure" nameView="Soft Vent End Pressure" description="" max="100000" min="0" paramter="" tag="" unit="Pa" type="Integer" />
 		<config default="500" name="SwitchLLPumpDelay" nameView="Switch LL Pump Delay" description="让渡LL Pump前延迟" max="50000" min="0" paramter="" tag="" unit="ms" type="Integer" />
@@ -245,6 +249,8 @@
 		<config default="100" name="PumpBasePressure" nameView="Pump Base Pressure" description="" max="2000" min="0" paramter="" tag="" unit="Pa" type="Double" />
 		<config default="2000" name="PumpCrossingPressure" nameView="Pump Crossing Pressure" description="" max="500000" min="200" paramter="" tag="" unit="Pa" type="Double" />
 		<config default="60" name="PumpingTimeout" nameView="Pumping Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
+		<config default="500" name="PumpForelinePressureLimit" nameView="ForelinePressure" description="PumpDown Check it" max="2000" min="0" paramter="" tag="" unit="Pa" type="Integer" />
+
 		<config default="60" name="VentingTimeout" nameView="Venting Timeout" description="" max="3000" min="0" paramter="" tag="" unit="s" type="Integer" />
 		<config default="100" name="SoftVentEndPressure" nameView="Soft Vent End Pressure" description="" max="100000" min="0" paramter="" tag="" unit="Pa" type="Integer" />
 		<config default="500" name="SwitchLLPumpDelay" nameView="Switch LL Pump Delay" description="让渡LL Pump前延迟" max="50000" min="0" paramter="" tag="" unit="ms" type="Integer" />
@@ -547,7 +553,7 @@
 		<configs name="Purge" nameView="Purge" >
 			<config default="30" name="PurgeCycleCount" nameView="Purge Cycle Count" description="" max="200" min="0" paramter="" tag="" unit="times" type="Integer" />
 			<config default="1000" name="PurgeVentPressure" nameView="Purge Vent Pressure" description="" max="1300" min="0" paramter="" tag="" unit="Pa" type="Integer" />
-			<config default="75" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="30" min="0" paramter="" tag="" unit="Pa" type="Integer" />
+			<config default="10" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="30" min="0" paramter="" tag="" unit="Pa" type="Integer" />
 			<config default="60" name="PurgeVentTimeLimit" nameView="Purge Vent Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 			<config default="60" name="PurgePumpTimeLimit" nameView="Purge Pump Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 			<config default="10" name="PurgeVentStableTime" nameView="Purge Vent Stable Time" description="" max="600" min="0" paramter="" tag="" unit="second" type="Integer" />
@@ -890,7 +896,7 @@
 		<configs name="Purge" nameView="Purge" >
 			<config default="30" name="PurgeCycleCount" nameView="Purge Cycle Count" description="" max="200" min="0" paramter="" tag="" unit="times" type="Integer" />
 			<config default="1000" name="PurgeVentPressure" nameView="Purge Vent Pressure" description="" max="1300" min="0" paramter="" tag="" unit="Pa" type="Integer" />
-			<config default="75" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="30" min="0" paramter="" tag="" unit="Pa" type="Integer" />
+			<config default="10" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="30" min="0" paramter="" tag="" unit="Pa" type="Integer" />
 			<config default="60" name="PurgeVentTimeLimit" nameView="Purge Vent Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 			<config default="60" name="PurgePumpTimeLimit" nameView="Purge Pump Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 			<config default="10" name="PurgeVentStableTime" nameView="Purge Vent Stable Time" description="" max="600" min="0" paramter="" tag="" unit="second" type="Integer" />
@@ -1214,7 +1220,7 @@
 		<configs name="Purge" nameView="Purge" >
 			<config default="30" name="PurgeCycleCount" nameView="Purge Cycle Count" description="" max="200" min="0" paramter="" tag="" unit="times" type="Integer" />
 			<config default="1000" name="PurgeVentPressure" nameView="Purge Vent Pressure" description="" max="1300" min="0" paramter="" tag="" unit="Pa" type="Integer" />
-			<config default="75" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="30" min="0" paramter="" tag="" unit="Pa" type="Integer" />
+			<config default="10" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="30" min="0" paramter="" tag="" unit="Pa" type="Integer" />
 			<config default="60" name="PurgeVentTimeLimit" nameView="Purge Vent Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 			<config default="60" name="PurgePumpTimeLimit" nameView="Purge Pump Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 			<config default="10" name="PurgeVentStableTime" nameView="Purge Vent Stable Time" description="" max="600" min="0" paramter="" tag="" unit="second" type="Integer" />
@@ -1537,7 +1543,7 @@
 		<configs name="Purge" nameView="Purge" >
 			<config default="30" name="PurgeCycleCount" nameView="Purge Cycle Count" description="" max="200" min="0" paramter="" tag="" unit="times" type="Integer" />
 			<config default="1000" name="PurgeVentPressure" nameView="Purge Vent Pressure" description="" max="1300" min="0" paramter="" tag="" unit="Pa" type="Integer" />
-			<config default="75" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="30" min="0" paramter="" tag="" unit="Pa" type="Integer" />
+			<config default="10" name="PurgePumpPressure" nameView="Purge Pump Pressure" description="" max="30" min="0" paramter="" tag="" unit="Pa" type="Integer" />
 			<config default="60" name="PurgeVentTimeLimit" nameView="Purge Vent Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 			<config default="60" name="PurgePumpTimeLimit" nameView="Purge Pump Time Limit" description="" max="3600" min="0" paramter="" tag="" unit="second" type="Integer" />
 			<config default="10" name="PurgeVentStableTime" nameView="Purge Vent Stable Time" description="" max="600" min="0" paramter="" tag="" unit="second" type="Integer" />

+ 0 - 3
Venus/Venus_RT/Devices/IODevices/IoCylinder.cs

@@ -257,10 +257,7 @@ namespace Venus_RT.Devices
                         }
                         else
                         {
-                            var value = _doON.Check(false, out var reason2);
-
                             if (!_doON.Check(false, out var reason))
-
                                 LOG.Write(eEvent.ERR_DEVICE_INFO, Module, $"{Name}气缸信号无法关闭, interlock, " + reason);
                             else
                                 LOG.Write(eEvent.ERR_DEVICE_INFO, Module, $"{Name}气缸信号仍然打开");

+ 16 - 5
Venus/Venus_RT/Devices/JetKepler2200APM.cs

@@ -10,8 +10,6 @@ using Venus_Core;
 using Venus_RT.Devices.IODevices;
 using IoMfc = Venus_RT.Devices.IODevices.IoMfc;
 using System.Threading.Tasks;
-using Venus_RT.Modules;
-using Aitex.Core.RT.DataCenter;
 using System.Diagnostics;
 
 namespace Venus_RT.Devices
@@ -402,7 +400,7 @@ namespace Venus_RT.Devices
 
             _GasRFStopWatch.Stop();
 
-            processPressureLimit = ConvertPressureUnit.ConvertmTorrToPa(1995);
+            processPressureLimit = ConvertPressureUnit.ConvertmTorrToPa(1950);
 
             //_PressureType = (PressureType)SC.GetValue<int>("System.PressureUnitType");
 
@@ -585,10 +583,21 @@ namespace Venus_RT.Devices
 
         protected override void CheckPermanentInterlock()
         {
-            if (ProcessPressure > processPressureLimit && _GuageValve.SetPoint)
+            //if (ProcessPressure > processPressureLimit && _GuageValve.SetPoint)
+            //{
+            //    _GuageValve.TurnValve(false, out _);
+            //    LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ProcessPressure} exceed {processPressureLimit} Pa, Guage Valve (DO-31) closed automaticlly.");
+            //}
+            if (ChamberPressure >= processPressureLimit && _GuageValve.SetPoint)
             {
                 _GuageValve.TurnValve(false, out _);
-                LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ProcessPressure} exceed {processPressureLimit} Pa, Guage Valve (DO-31) closed automaticlly.");
+                LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ChamberPressure} exceed {processPressureLimit} Pa mtorr, Guage Valve (DO-31) closed automaticlly.");
+            }
+
+            if (ChamberPressure < processPressureLimit && !_GuageValve.SetPoint)
+            {
+                _GuageValve.TurnValve(true, out _);
+                LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ChamberPressure} less than {processPressureLimit} Pa mtorr, Guage Valve (DO-31) open automaticlly.");
             }
         }
 
@@ -806,6 +815,8 @@ namespace Venus_RT.Devices
         {
             OpenValve(ValveType.N2, false);
             //OpenValve(ValveType.PVN22, false);
+            //SetPVPressure(0);
+            SetPVPostion(1000);
             await Task.Delay(500);
             OpenValve(ValveType.Purge, false);
             //return true;

+ 16 - 3
Venus/Venus_RT/Devices/JetKepler2200BPM.cs

@@ -434,7 +434,7 @@ namespace Venus_RT.Devices
             //        _GeneratorBias = DEVICE.GetDevice<AdTecGenerator>($"{Module}.{VenusDevice.BiasRf}");
             //    }
             //}
-            processPressureLimit = ConvertPressureUnit.ConvertmTorrToPa(1995);
+            processPressureLimit = ConvertPressureUnit.ConvertmTorrToPa(1950);
 
             if (SC.GetValue<int>($"{Module}.Match.CommunicationType") == (int)CommunicationType.RS232 &&
                 SC.GetValue<int>($"{Module}.Match.MFG") == (int)MatchMFG.AdTec)
@@ -648,10 +648,21 @@ namespace Venus_RT.Devices
 
         protected override void CheckPermanentInterlock()
         {
-            if (ProcessPressure >= processPressureLimit && _GuageValve.SetPoint)
+            //if (ProcessPressure >= processPressureLimit && _GuageValve.SetPoint)
+            //{
+            //    _GuageValve.TurnValve(false, out _);
+            //    LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ProcessPressure} exceed {processPressureLimit} Pa, Guage Valve (DO-31) closed automaticlly.");
+            //}
+            if (ChamberPressure >= processPressureLimit && _GuageValve.SetPoint)
             {
                 _GuageValve.TurnValve(false, out _);
-                LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ProcessPressure} exceed {processPressureLimit} Pa, Guage Valve (DO-31) closed automaticlly.");
+                LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ChamberPressure} exceed {processPressureLimit} Pa mtorr, Guage Valve (DO-31) closed automaticlly.");
+            }
+
+            if (ChamberPressure < processPressureLimit && !_GuageValve.SetPoint)
+            {
+                _GuageValve.TurnValve(true, out _);
+                LOG.Write(eEvent.WARN_DEVICE_INFO, Module, $"Process pressure:{ChamberPressure} less than {processPressureLimit} Pa mtorr, Guage Valve (DO-31) open automaticlly.");
             }
         }
 
@@ -887,6 +898,8 @@ namespace Venus_RT.Devices
         {
             OpenValve(ValveType.N2, false);
             //OpenValve(ValveType.PVN22, false);
+            //SetPVPressure(0);
+            SetPVPostion(1000);
             await Task.Delay(500);
             OpenValve(ValveType.Purge, false);
             //return true;

+ 2 - 0
Venus/Venus_RT/Devices/JetKepler2300PM.cs

@@ -1130,6 +1130,8 @@ namespace Venus_RT.Devices
         public async override void AbortControlPressure()
         {
             FlowGas(5, 0);
+            //SetPVPressure(0);
+            SetPVPostion(1000);    
             await Task.Delay(500);
             OpenValve(ValveType.GasFinal, false);
             //return true;

+ 4 - 3
Venus/Venus_RT/Devices/PendulumValve.cs

@@ -226,7 +226,7 @@ namespace Venus_RT.Devices
             Module = mod.ToString();
             var _PortNum = SC.GetStringValue($"{mod}.PendulumValve.Port");
             _serial = new AsyncSerialPort(_PortNum, 9600, 8, System.IO.Ports.Parity.None, System.IO.Ports.StopBits.One, EOF);
-            _pressure_ful_range = SC.GetValue<int>($"{mod}.PendulumValve.PressureFullRange");
+            _pressure_ful_range = (float)ConvertPressureUnit.ConvertPaTomtorr( SC.GetValue<int>($"{mod}.PendulumValve.PressureFullRange"));
             _foreLinePressureLimit = SC.GetValue<int>($"{mod}.PendulumValve.ForelinePressureLimit");
             _chamberPressureLimit = SC.GetValue<int>($"{mod}.PendulumValve.ChamberPressureLimit");
             _turboPumpSpeedLimit = SC.GetValue<int>($"{mod}.PendulumValve.TurboPumpSpeedLimit");
@@ -313,7 +313,7 @@ namespace Venus_RT.Devices
                             {
                                 if ((m_JetChamber == JetChamber.Kepler2200A || m_JetChamber == JetChamber.Kepler2200B))
                                 {
-                                    Pressure = Convert.ToSingle(ConvertPressureUnit.ConvertPaTomtorr(pressure * _pressure_ful_range / 1000000));
+                                    Pressure = Convert.ToSingle(ConvertPressureUnit.ConvertmTorrToPa(pressure * _pressure_ful_range / 1000000));
                                     //Pressure = pressure * _pressure_ful_range / 1000000;
                                 }
                                 else if (m_JetChamber == JetChamber.VenusSE)
@@ -531,7 +531,8 @@ namespace Venus_RT.Devices
                 m_PressureSetPoint = pressure;
                 if (m_PressureType == PressureType.Pa)
                 {
-                    return SendCommand(Operation.SetPressure, Convert.ToInt32(pressure * 1000000 / ConvertPressureUnit.ConvertPaTomtorr(_pressure_ful_range)));
+                    var value = Convert.ToInt32(ConvertPressureUnit.ConvertPaTomtorr(pressure) * 1000000 / (_pressure_ful_range));
+                    return SendCommand(Operation.SetPressure, Convert.ToInt32(ConvertPressureUnit.ConvertPaTomtorr(pressure) * 1000000 / (_pressure_ful_range)));
                 }
                 else
                 {

+ 38 - 8
Venus/Venus_RT/Devices/TM/JetTM.cs

@@ -13,10 +13,7 @@ using Venus_RT.Modules;
 using Venus_RT.Devices.IODevices;
 using Aitex.Core.RT.DataCenter;
 using Aitex.Core.RT.OperationCenter;
-using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.TMs;
 using IoMfc = Venus_RT.Devices.IODevices.IoMfc;
-using MECF.Framework.RT.Core.Equipments;
-using System.Windows.Media;
 
 namespace Venus_RT.Devices
 {
@@ -186,13 +183,13 @@ namespace Venus_RT.Devices
         public double LLAPressure => _presureCtrl.LLAPressureGauge.Value;
         public double LLBPressure => _presureCtrl.LLBPressureGauge.Value;
         public override double ForelinePressure => _presureCtrl.MFForelineGauge.Value;
-        //public double LLAForelinePressure => _presureCtrl.LLAForelineGauge.Value;
-        //public double LLAForelinePressure => _presureCtrl.LLAForelineGauge.Value;
+        public double LLAForelinePressure => _presureCtrl.LLAForelineGauge.Value;
+        public double LLBForelinePressure => _presureCtrl.LLBForelineGauge.Value;
 
 
-        public bool? TMPumpIsRunning => _TMPump?.IsRunning;
-        public  bool? LLAPumpIsRunning => _LLAPump?.IsRunning;
-        public bool? LLBPumpIsRunning => _LLBPump?.IsRunning;
+        public bool TMPumpIsRunning => _TMPump!=null? _TMPump.IsRunning:false;
+        public  bool LLAPumpIsRunning => _LLAPump != null ? _LLAPump.IsRunning : false;
+        public bool LLBPumpIsRunning => _LLBPump != null ? _LLBPump.IsRunning : false;
 
 
         public double PMAPressure { get { return Singleton<RouteManager>.Instance.PMA.ChamberPressure; } }
@@ -567,6 +564,23 @@ namespace Venus_RT.Devices
             return 0;
         }
 
+
+        public double GetModuleForelinePressure(ModuleName mod)
+        {
+            switch (mod)
+            {
+                case ModuleName.TM:
+                    return ForelinePressure;
+                case ModuleName.LLA:
+                    return LLAForelinePressure;
+                case ModuleName.LLB:
+                    return LLBForelinePressure;
+            }
+
+            return 0;
+        }
+
+
         public bool IsModuleATM(ModuleName mod)
         {
             switch (mod)
@@ -1087,5 +1101,21 @@ namespace Venus_RT.Devices
                 _LLBESlitDoor.SetCylinder(true, out _);
             }
         }
+
+        public bool CheckPumpIsRunning(ModuleName moduleName)
+        {
+            switch (moduleName) 
+            {
+                case ModuleName.LLA:
+                    return LLAPumpIsRunning;
+                case ModuleName.LLB:
+                    return LLBPumpIsRunning;
+                case ModuleName.TM:
+                    return TMPumpIsRunning;
+
+                    default: 
+                    return false;
+            }
+        }
     }
 }

+ 1 - 1
Venus/Venus_RT/Modules/LLs/LLEntity.cs

@@ -396,7 +396,7 @@ namespace Venus_RT.Modules
 
         private bool fnHome(object[] param)
         {
-            IsOnline = true;
+            //IsOnline = true;
             return true;
         }
 

+ 6 - 1
Venus/Venus_RT/Modules/PMs/PMEntity.cs

@@ -488,6 +488,7 @@ namespace Venus_RT.Modules.PMs
             Transition(PMState.Idle, MSG.Home, FnStartHome, PMState.Homing);
             Transition(PMState.Homing, MSG.Home, FnStartHome, PMState.Homing);
             Transition(PMState.Homing, FSM_MSG.TIMER, FnMonitorHome, PMState.Idle);
+            Transition(PMState.Homing, MSG.Abort, FnAbortHome, PMState.Idle);
 
             Transition(PMState.Idle, FSM_MSG.TIMER, FnIdleTimeout, PMState.Idle);
             Transition(PMState.Error, FSM_MSG.TIMER, FnErrorTimeout, PMState.Error);
@@ -893,7 +894,11 @@ namespace Venus_RT.Modules.PMs
 
             return ret == RState.End;
         }
-
+        private bool FnAbortHome(object[] objs)
+        {
+            _home.Abort();
+            return true;
+        }
         private bool FnLaunchPump(object[] param)
         {
             return _startDryPumpRoutine.Start() == RState.Running;

+ 4 - 4
Venus/Venus_RT/Modules/PMs/PMProcessRoutine.cs

@@ -316,20 +316,20 @@ namespace Venus_RT.Modules.PMs
         }
 
         private bool PreparePressure()
-        {            
-            if (_chamber.ChamberPressure < 5 && _chamber.ProcessPressure < BasePressure)
+        {
+            if (_chamber.ProcessPressure < BasePressure)
             {
                 _needPumpDown = false;
                 return true;
             }
-
+            _needPumpDown = true;
             return _pumpDownRoutine.Start(BasePressure) == RState.Running;
         }
 
         private bool IsPressureReady()
         {
             if (_needPumpDown == false)
-            { 
+            {
                 return true;
             }
 

+ 1 - 27
Venus/Venus_RT/Modules/PMs/PumpDownRoutine.cs

@@ -130,33 +130,7 @@ namespace Venus_RT.Modules.PMs
                           .End(PumpStep.kEnd, NullFun, _delay_1s);
                     break;
 
-            }
-            //if (jetChamber == JetChamber.VenusDE)
-            //{
-            //    Runner.Delay(PumpStep.kDelay_2s, _delay_2s)
-            //    .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s)
-            //    .Run(PumpStep.kPVHe2, OpenHe2Valve, _delay_5s)
-            //    .Run(PumpStep.kFastPump, OpenFastPump, () => { return _chamber.ChamberPressure < _vHe2FlowPressure; })
-            //    .Run(PumpStep.kISOValve, OpenISOValve, _delay_5s)
-            //    .Run(PumpStep.kOpenTurboPump, OpenTurboValve, _delay_3s)
-            //    .Run(PumpStep.kVATValve, OpenVATValve, _delay_2s)
-            //    .Run(PumpStep.kOpenTurboPump, OpenGuageGasFinalValve, _delay_3s)
-            //    .Run(PumpStep.kFinalStep, FinalStep, () => { return _chamber.ChamberPressure < _basePressure; })
-            //    .End(PumpStep.kEnd, NullFun, _delay_1s);
-            //}
-            //else
-            //{
-            //    Runner.Delay(PumpStep.kDelay_2s, _delay_2s)
-            //        .Run(PumpStep.kCloseISOValve, HOFs.WrapAction(_chamber.OpenValve, ValveType.TurboPumpPumping, false), _delay_2s)
-            //        .RunIf(PumpStep.kSoftPump, needsoft, HOFs.WrapAction(_chamber.OpenValve, ValveType.SoftPump, true), () => { return _chamber.ChamberPressure < _roughPumpPressure; })
-            //        .Run(PumpStep.kFastPump, OpenFastPump, () => { return _chamber.ChamberPressure < _vHe2FlowPressure; })
-            //        .Run(PumpStep.kPVHe2, OpenHe2Valve, _delay_2s)
-            //        .Run(PumpStep.kISOValve, OpenISOValve, _delay_2s)
-            //        .Run(PumpStep.kVATValve, OpenVATValve, _delay_5s)
-            //        .Run(PumpStep.kOpenTurboPumpPurgeGasFinal, OpenTurboPumpPurgeGasFinalValve, _delay_3s)
-            //        .Run(PumpStep.kFinalStep, FinalStep, () => { return _chamber.ChamberPressure < _basePressure; })
-            //        .End(PumpStep.kEnd, NullFun, _delay_1s);
-            //}
+            }       
 
 
             return Runner.Status;

+ 2 - 0
Venus/Venus_RT/Modules/RouteManager.cs

@@ -231,6 +231,8 @@ namespace Venus_RT.Modules
             }
 
 
+
+
             fsm = new StateMachine<RouteManager>(Name, (int)RtState.Init, 200);
 
             SubscribeOperation();

+ 13 - 6
Venus/Venus_RT/Modules/TM/MFPMPickRoutine.cs

@@ -37,7 +37,7 @@ namespace Venus_RT.Modules.TM
         private enum PickStepWithHeater
         {
             WaitPMReady,
-            WaitPressreDifference,
+            WaitPressreStable,
             OpenPMSlitDoor,
             PMPrepare,
             Picking,   
@@ -157,7 +157,7 @@ namespace Venus_RT.Modules.TM
                 case JetChamber.Kepler2200A:
                 case JetChamber.Kepler2200B:
          Runner.Wait(PickStepWithHeater.WaitPMReady,           () => _pmModule.IsIdle, _delay_60s)
-               .Wait(PickStepWithHeater.WaitPressreDifference, TMPMPressureIsOK,   _delay_60s)
+               .Wait(PickStepWithHeater.WaitPressreStable,    TMPMPressureIsOK,   _delay_60s)
                .Run(PickStepWithHeater.OpenPMSlitDoor,                   OpenPMSlitDoor,     OpenPMSlitDoorIsOK)
                .Run(PickStepWithHeater.PMPrepare,              PMPrepare,          IsPMPrepareReady)
                .Run(PickStepWithHeater.Picking,                Picking,            WaitPickDone)
@@ -175,14 +175,21 @@ namespace Venus_RT.Modules.TM
 
         private bool TMPMPressureIsOK()
         {
-            if (Math.Abs((_pmModule.ChamberPressure - _JetTM.ChamberPressure)) < maxPressureDifference)
+            if (RouteManager.IsATMMode)
             {
-                return true;
+                return _JetTM.IsTMATM && _JetTM.IsModuleATM(_targetModule);
             }
             else
             {
-                return false;
-            }
+                if (Math.Abs((_pmModule.ChamberPressure - _JetTM.ChamberPressure)) < maxPressureDifference)
+                {
+                    return true;
+                }
+                else
+                {
+                    return false;
+                }
+            }         
         }
 
         private bool PMPrepare()

+ 23 - 15
Venus/Venus_RT/Modules/TM/MFPickRoutine.cs

@@ -13,6 +13,7 @@ using MECF.Framework.Common.Schedulers;
 using System.Collections.Generic;
 using System;
 using MECF.Framework.Common.DBCore;
+using MECF.Framework.RT.Core.Equipments;
 
 namespace Venus_RT.Modules.TM
 {
@@ -22,7 +23,7 @@ namespace Venus_RT.Modules.TM
         {
             WaitModuleReady,
             ModulePrepare,
-            WaitPressreDifference,
+            WaitPressreStable,
             OpenSlitDoor,
             Picking,
             QueryAwc,
@@ -126,7 +127,7 @@ namespace Venus_RT.Modules.TM
         {
             Runner.Wait(PickStep.WaitModuleReady,     () => _llModule.IsIdle,     _delay_60s)
                 .Run(PickStep.ModulePrepare,          ModulePrepare,              IsModulePrepareReady)
-                .Wait(PickStep.WaitPressreDifference, TMLLPressureIsOK,           _delay_60s)
+                .Wait(PickStep.WaitPressreStable,     TMLLPressureIsOK,           _delay_60s)
                 .Run(PickStep.OpenSlitDoor,           OpenSlitDoor,               IsSlitDoorOpen)
                 .Run(PickStep.Picking,                Picking,                    WaitPickDone)
                 .Run(PickStep.QueryAwc,               QueryAwc,                   WaitQueryDoneAndRecord)
@@ -145,23 +146,30 @@ namespace Venus_RT.Modules.TM
         }
         private bool TMLLPressureIsOK()
         {
-            double llPressure=0;
-            if (_targetModule == ModuleName.LLA)
-            {
-                llPressure = _JetTM.LLAPressure;
-            }
-            else if(_targetModule == ModuleName.LLB)
+            if (RouteManager.IsATMMode)
             {
-                llPressure = _JetTM.LLBPressure;
-            }
-            if (Math.Abs((llPressure - _JetTM.ChamberPressure)) < maxPressureDifference)
-            {
-                return true;
+                return _JetTM.IsTMATM && _JetTM.IsModuleATM(_targetModule);
             }
             else
             {
-                return false;
-            }
+                double llPressure = 0;
+                if (_targetModule == ModuleName.LLA)
+                {
+                    llPressure = _JetTM.LLAPressure;
+                }
+                else if (_targetModule == ModuleName.LLB)
+                {
+                    llPressure = _JetTM.LLBPressure;
+                }
+                if (Math.Abs((llPressure - _JetTM.ChamberPressure)) < maxPressureDifference)
+                {
+                    return true;
+                }
+                else
+                {
+                    return false;
+                }
+            }            
         }
         private bool IsModulePrepareReady()
         {

+ 13 - 0
Venus/Venus_RT/Modules/TM/MFPumpRoutine.cs

@@ -5,6 +5,7 @@ using MECF.Framework.Common.Routine;
 using MECF.Framework.Common.Equipment;
 using Venus_Core;
 using System.Threading;
+using Aitex.Core.RT.Log;
 
 namespace Venus_RT.Modules.TM
 {
@@ -25,6 +26,8 @@ namespace Venus_RT.Modules.TM
         private int _pumpingTimeout;
         private int _switchLLPumpDelay;
         private readonly JetTM _JetTM;
+        private int _forelinePressure = 200;
+        private bool _pumpIsRunning;
         public MFPumpRoutine(JetTM jetTM, ModuleName mod) : base(mod)
         {
             _JetTM = jetTM;
@@ -45,6 +48,16 @@ namespace Venus_RT.Modules.TM
                     _switchLLPumpDelay = SC.GetValue<int>($"{Module}.SwitchLLPumpDelay");
                 else
                     _switchLLPumpDelay = 0;
+
+                //前端压力值高于某个数值
+                _forelinePressure = SC.GetValue<int>($"{Module}.PumpForelinePressureLimit");
+
+                if (_JetTM.CheckPumpIsRunning(Module) && _JetTM.GetModuleForelinePressure(Module) > _forelinePressure)
+                {
+                    LOG.Write(eEvent.ERR_TM, Module, $"Cannot start pumpdown, drypump running:{_JetTM.CheckPumpIsRunning(Module)}, ForelinePressure:{_JetTM.GetModulePressure(Module)}=>Target:{_forelinePressure}");
+                    return RState.Failed;
+                }
+
                 return Runner.Start(Module, Name);
             }
 

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

@@ -50,7 +50,7 @@
 		<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="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="" />

+ 6 - 4
Venus/Venus_Simulator/Instances/SimulatorSystem.cs

@@ -545,9 +545,9 @@ namespace Venus_Simulator.Instances
             SetAiValue($"{mod}.AI_Second", DateTime.Now.Second);
 
 
-            SetAiValue($"{mod}.AI_TM_Foreline_Pressure", 5001);
-            SetAiValue($"{mod}.AI_LLA_Foreline_Pressure", 5003);
-            SetAiValue($"{mod}.AI_LLB_Foreline_Pressure", 5004);
+            SetAiValue($"{mod}.AI_TM_Foreline_Pressure", 100);
+            SetAiValue($"{mod}.AI_LLA_Foreline_Pressure", 150);
+            SetAiValue($"{mod}.AI_LLB_Foreline_Pressure", 200);
 
 
             if (SystemConfig.Instance.GetValue<bool>("System.IsATMMode"))
@@ -1879,7 +1879,7 @@ namespace Venus_Simulator.Instances
             {
                 SetAiValue($"{mod}.{sAI_Foreline}", GetAiValue($"{mod}.{sAI_Foreline}") + _rd.Next(500, 600));
             }
-
+            //SetAiValue($"{mod}.{sAI_Foreline}", 3000);
             // PLC 模拟量范围[0,4000], 电压[0, 10V], 压力[0, 760Torr]
             string sAI_ChamberPressure = "AI_Chamber_Pressure_10t";
             string sAI_ProcessPressure = "AI_Chamber_Pressure_Virtual";
@@ -2037,6 +2037,8 @@ namespace Venus_Simulator.Instances
             // VAC switch
             IO.DI[$"{mod}.DI_VAC_Switch"].Value = GetAiValue($"{mod}.{sAI_ChamberPressure}") < VAC_SW_PRESSURE;
 
+            SetAiValue($"{mod}.AI_Process_Pressure_2t", 1995);
+
         }
         void MonitorSEMFPressure()
         {

+ 27 - 0
Venus/Venus_Themes/Converters/IsOnlineToOpacityConverter.cs

@@ -0,0 +1,27 @@
+using System;
+using System.Windows.Data;
+
+namespace Venus_Themes.Converters
+{
+    public class IsOnlineToOpacityConverter : IValueConverter
+    {
+        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
+        {
+            if (value == null) return 0.4;
+            var item = (bool)value;
+            if (item == true)
+            {
+                return 1;
+            }
+            else
+            {
+                return 0.4;
+            }
+        }
+
+        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
+        {
+            return null;
+        }
+    }
+}

File diff suppressed because it is too large
+ 7 - 3
Venus/Venus_Themes/UserControls/NiceUIControls/NiceMainTMWithLoadLock.xaml


+ 34 - 0
Venus/Venus_Themes/UserControls/NiceUIControls/NiceMainTMWithLoadLock.xaml.cs

@@ -122,5 +122,39 @@ namespace Venus_Themes.UserControls
             get => (WaferInfo)GetValue(LLBWaferProperty);
             set => SetValue(LLBWaferProperty, value);
         }
+
+        public static readonly DependencyProperty TMIsOnlineProperty = DependencyProperty.Register(
+      "TMIsOnline", typeof(bool), typeof(NiceMainTMWithLoadLock), new PropertyMetadata(true));
+        public bool TMIsOnline
+        {
+            get { return (bool)this.GetValue(TMIsOnlineProperty); }
+            set
+            {
+                this.SetValue(TMIsOnlineProperty, value);
+            }
+        }
+
+
+        public static readonly DependencyProperty LLAIsOnlineProperty = DependencyProperty.Register(
+      "LLAIsOnline", typeof(bool), typeof(NiceMainTMWithLoadLock), new PropertyMetadata(true));
+        public bool LLAIsOnline
+        {
+            get { return (bool)this.GetValue(LLAIsOnlineProperty); }
+            set
+            {
+                this.SetValue(LLAIsOnlineProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty LLBIsOnlineProperty = DependencyProperty.Register(
+      "LLBIsOnline", typeof(bool), typeof(NiceMainTMWithLoadLock), new PropertyMetadata(true));
+        public bool LLBIsOnline
+        {
+            get { return (bool)this.GetValue(LLBIsOnlineProperty); }
+            set
+            {
+                this.SetValue(LLBIsOnlineProperty, value);
+            }
+        }
     }
 }

+ 1 - 1
Venus/Venus_Themes/UserControls/NiceUIControls/XinSongRobot.xaml

@@ -244,7 +244,7 @@
 
                         <!--<Ellipse Fill="Silver" Width="35" Height="35" Canvas.Left="18" Canvas.Top="15"></Ellipse>-->
                     </Canvas>
-                    <Ellipse Fill="Gray" Width="5" Height="5" Canvas.Left="58" Canvas.Top="85"></Ellipse>
+                    <Ellipse Fill="Gray" Width="5" Height="5" Canvas.Left="55" Canvas.Top="82"></Ellipse>
 
 
 

+ 1 - 0
Venus/Venus_Themes/Venus_Themes.csproj

@@ -78,6 +78,7 @@
     <Compile Include="Converters\IntToBoolConverter2.cs" />
     <Compile Include="Converters\IntToIsEnableConverter.cs" />
     <Compile Include="Converters\IsLastItemConverter.cs" />
+    <Compile Include="Converters\IsOnlineToOpacityConverter.cs" />
     <Compile Include="Converters\IsProgressedConverter.cs" />
     <Compile Include="Converters\Null2Bool.cs" />
     <Compile Include="Converters\PenValveColorConverter.cs" />