Browse Source

EFEM界面优化

lixiang 1 year ago
parent
commit
4ffafb6001

+ 7 - 7
Venus/Framework/Common/DBCore/PostgresqlDB.cs

@@ -177,13 +177,13 @@ namespace Aitex.Core.RT.DBCore
                 ExecuteReader(string.Format(@"select datname from pg_catalog.pg_database where datname='{0}'", db));
             if (!reader.HasRows)
             {
-                //string sql = string.Format(@"
-                //                    CREATE DATABASE {0}
-                //                    WITH OWNER = postgres
-                //                   ENCODING = 'UTF8'
-                //                   TABLESPACE = pg_default
-                //                   CONNECTION LIMIT = -1", db);
-                //ExecuteNonQuery(sql);
+                string sql = string.Format(@"
+                                    CREATE DATABASE {0}
+                                    WITH OWNER = postgres
+                                   ENCODING = 'UTF8'
+                                   TABLESPACE = pg_default
+                                   CONNECTION LIMIT = -1", db);
+                ExecuteNonQuery(sql);
             }
 
             try

+ 19 - 4
Venus/Venus_MainPages/ViewModels/EfemViewModel.cs

@@ -70,6 +70,9 @@ namespace Venus_MainPages.ViewModels
         private List<string> m_RtDataKeys=new List<string>();
         private Dictionary<string, object> m_RtDataValues;
 
+        private int m_AlignValue;
+
+        
         #endregion
 
         #region 属性
@@ -238,6 +241,12 @@ namespace Venus_MainPages.ViewModels
             get { return m_RtDataValues; }
             set { SetProperty(ref m_RtDataValues, value); }
         }
+        public int AlignValue
+        {
+            get { return m_AlignValue; }
+            set { SetProperty(ref m_AlignValue, value); }
+        }
+        
         #endregion
 
         #region 命令
@@ -574,7 +583,7 @@ namespace Venus_MainPages.ViewModels
         }
         private void OnAlign1Align()
         { 
-            InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Align}");
+            InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Align}",0, AlignValue);
         }
         private void OnRobotHome()
         {
@@ -601,7 +610,7 @@ namespace Venus_MainPages.ViewModels
         }
         private void OnLPUnLoad(object obj)
         {
-            InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.UnLoad");
+            InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Unload");
 
         }
         private void OnLPReadID(object obj)
@@ -630,10 +639,12 @@ namespace Venus_MainPages.ViewModels
         }
         private void OnLPOpenDoor(object obj)
         {
+            InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.OpenDoor");
 
         }
         private void OnLPCloseDoor(object obj)
         {
+            InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.CloseDoor");
 
         }
         #endregion
@@ -660,8 +671,6 @@ namespace Venus_MainPages.ViewModels
             BladeBWafer = ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[1];
             Aligner1Wafer= ModuleManager.ModuleInfos["Aligner1"].WaferManager.Wafers[0];
             RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
-
-
         }
         private void Init()
         {
@@ -685,6 +694,12 @@ namespace Venus_MainPages.ViewModels
             m_RtDataKeys.Add("LP2.IsDocked");
             m_RtDataKeys.Add("LP3.IsDocked");
 
+            m_RtDataKeys.Add("TM.LLATSlitDoor.IsClosed");
+            m_RtDataKeys.Add("TM.LLBTSlitDoor.IsClosed");
+
+            m_RtDataKeys.Add("TM.LLAESlitDoor.IsClosed");
+            m_RtDataKeys.Add("TM.LLBESlitDoor.IsClosed");
+
         }
         #endregion
 

+ 28 - 12
Venus/Venus_MainPages/ViewModels/RecipeViewModel.cs

@@ -3,6 +3,7 @@ using Aitex.Core.RT.Log;
 using Aitex.Core.UI.View.Common;
 //using MECF.Framework.Common.CommonData;
 using MECF.Framework.Common.DataCenter;
+using MECF.Framework.Common.OperationCenter;
 using Microsoft.VisualBasic;
 using Newtonsoft.Json;
 using Prism.Commands;
@@ -12,6 +13,7 @@ using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Reflection;
+using System.Threading;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Data;
@@ -24,6 +26,7 @@ using Venus_Core.Attributes;
 using Venus_MainPages.PMs;
 using Venus_MainPages.Unity;
 using Venus_MainPages.Views;
+using Venus_Themes.CustomControls;
 using Venus_Themes.UserControls;
 using WPF.Themes.UserControls;
 
@@ -184,24 +187,32 @@ namespace Venus_MainPages.ViewModels
                 timer.Tick += Timer_Tick; ;
                 timer.Start();
 
-               
+                for (int i = 0; i < 5; i++)
+                {
+                    InvokeClient.Instance.Service.DoOperation($"{ModuleName}.EndPoint.SearchCfg");
+                    Thread.Sleep(200);
+                    currentEPDType = (EPDType)System.Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.EPD.EPDType"));
+
+                    if (currentEPDType == EPDType.Socket)
+                    {
+
+                        EPDCfgList = (List<string>)QueryDataClient.Instance.Service.GetData($"{ModuleName}.EPDCfgList");
+
+
+                    }
+                    if (EPDCfgList != null)
+                    {
+                        break;
+                    }
+                }
+                
 
             }
         }
 
         private void Timer_Tick(object sender, EventArgs e)
         {
-            currentEPDType = (EPDType)System.Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.EPD.EPDType"));
-
-            if (currentEPDType == EPDType.Socket)
-            {
-                EPDCfgList = (List<string>)QueryDataClient.Instance.Service.GetData($"{ModuleName}.EPDCfgList");
-
-                //var epdList = QueryDataClient.Instance.Service.GetData($"{ModuleName}.EPDCfgList");
-                //if (epdList != null)
-                //{
-                //}
-            }
+            
         }
 
         TreeViewFileItem selectedItem;
@@ -558,6 +569,7 @@ namespace Venus_MainPages.ViewModels
                                             grid.Children.Add(EPDcomboBox);
                                             Grid.SetRow(EPDcomboBox, i);
                                             Grid.SetColumn(EPDcomboBox, index + location);
+                                            EPDcomboBox.DropDownOpened += EPDcomboBox_DropDownOpened;
                                         }
                                         else if (currentEPDType == EPDType.WCF)
                                         {
@@ -882,6 +894,10 @@ namespace Venus_MainPages.ViewModels
 
 
         }
+        private void EPDcomboBox_DropDownOpened(object sender, EventArgs e)
+        {
+           
+        }
 
         private void EPDButton_Click(object sender, RoutedEventArgs e)
         {

+ 36 - 2
Venus/Venus_MainPages/ViewModels/TMOperationViewModel.cs

@@ -54,6 +54,8 @@ namespace Venus_MainPages.ViewModels
         private bool m_LLBVentValveIsOpen;
         private List<string> m_RtDataKeys=new List<string> ();
 
+        private int m_TMOutChamberPressure;
+
 
         public bool TMValveN2IsOpen
         {
@@ -183,10 +185,23 @@ namespace Venus_MainPages.ViewModels
             get { return m_LLBIsInstalled; }
             set { SetProperty(ref m_LLBIsInstalled, value); }
         }
+        public int TMOutChamberPressure
+        {
+            get { return m_TMOutChamberPressure; }
+            set 
+            {
+                if (value != m_TMOutChamberPressure)
+                {
+                    InvokeClient.Instance.Service.DoOperation($"TM.SetChamberPressure",value);
+                }
+                SetProperty(ref m_TMOutChamberPressure, value);
+            }
+        }
+        
         #endregion
 
         #region 命令
-       
+
 
         private DelegateCommand _HomeCommand;
         public DelegateCommand HomeCommand =>
@@ -233,7 +248,15 @@ namespace Venus_MainPages.ViewModels
         private DelegateCommand<object> _DoorUpDownCommand;
         public DelegateCommand<object> DoorUpDownCommand =>
             _DoorUpDownCommand ?? (_DoorUpDownCommand = new DelegateCommand<object>(OnDoorUpDown));
-        
+
+        private DelegateCommand<object> _ChamberDoorOpenCommand;
+        public DelegateCommand<object> ChamberDoorOpenCommand =>
+            _ChamberDoorOpenCommand ?? (_ChamberDoorOpenCommand = new DelegateCommand<object>(OnChamberDoorOpen));
+
+        private DelegateCommand<object> _ChamberDoorCloseCommand;
+        public DelegateCommand<object> ChamberDoorCloseCommand =>
+            _ChamberDoorCloseCommand ?? (_ChamberDoorCloseCommand = new DelegateCommand<object>(OnChamberDoorClose));
+
         #endregion
 
         #region 构造函数
@@ -316,11 +339,22 @@ namespace Venus_MainPages.ViewModels
             //string[] value=obj.ToString().Split('.');
             InvokeClient.Instance.Service.DoOperation(obj.ToString());
         }
+        private void OnChamberDoorOpen(object obj)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{obj?.ToString()}.SlitDoor.Open");
+        }
+        private void OnChamberDoorClose(object obj)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{obj?.ToString()}.SlitDoor.Close");
+        }
         #endregion
 
         #region 私有方法
         void timer_Tick(object sender, EventArgs e)
         {
+            TMOutChamberPressure = (int)QueryDataClient.Instance.Service.GetConfig("TM.ChamberPressure");
+
+
             RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
 
             if (RtDataValues == null)

+ 18 - 0
Venus/Venus_MainPages/ViewModels/TMViewModel.cs

@@ -786,6 +786,13 @@ namespace Venus_MainPages.ViewModels
 
         public DelegateCommand SystemHomeCommand =>
             _SystemHomeCommand ?? (_SystemHomeCommand = new DelegateCommand(OnSystemHome));
+        private DelegateCommand<object> _ChamberDoorOpenCommand;
+        public DelegateCommand<object> ChamberDoorOpenCommand =>
+            _ChamberDoorOpenCommand ?? (_ChamberDoorOpenCommand = new DelegateCommand<object>(OnChamberDoorOpen));
+
+        private DelegateCommand<object> _ChamberDoorCloseCommand;
+        public DelegateCommand<object> ChamberDoorCloseCommand =>
+            _ChamberDoorCloseCommand ?? (_ChamberDoorCloseCommand = new DelegateCommand<object>(OnChamberDoorClose));
         #endregion
 
         #region 构造函数
@@ -1152,6 +1159,14 @@ namespace Venus_MainPages.ViewModels
             InvokeClient.Instance.Service.DoOperation("System.Home");
 
         }
+        private void OnChamberDoorOpen(object obj)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{obj?.ToString()}.SlitDoor.Open");
+        }
+        private void OnChamberDoorClose(object obj)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{obj?.ToString()}.SlitDoor.Close");
+        }
         #endregion
 
         #region 私有方法
@@ -1165,6 +1180,9 @@ namespace Venus_MainPages.ViewModels
             m_RtDataKeys.Add("TM.LLATSlitDoor.IsClosed");
             m_RtDataKeys.Add("TM.LLBTSlitDoor.IsClosed");
 
+            m_RtDataKeys.Add("TM.LLAESlitDoor.IsClosed");
+            m_RtDataKeys.Add("TM.LLBESlitDoor.IsClosed");
+
             m_RtDataKeys.Add("TMCycle.CycleIndex");
 
         }

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

@@ -41,8 +41,8 @@
             <Viewbox Width="890" Height="890" Canvas.Top="5" Canvas.Left="297" Stretch="Fill">
                 <Canvas Width="1000" Height="1000">
                     <!--<userControls:MainTM Width="300" Height="250" Canvas.Left="380" Canvas.Top="90"/>-->
-                    <userControls:LoadLockLeft  Width="150" Height="150" Canvas.Top="310" Canvas.Left="358"  DoorIsOpen="{Binding RtDataValues[TM.LLATSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLAWafer}"/>
-                    <userControls:LoadLockRight Width="150" Height="150" Canvas.Top="309" Canvas.Left="519"  DoorIsOpen="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLBWafer}"/>
+                    <userControls:LoadLockLeft  Width="150" Height="150" Canvas.Top="310" Canvas.Left="358"  DoorIsOpen="{Binding RtDataValues[TM.LLATSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Door2IsOpen="{Binding RtDataValues[TM.LLAESlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLAWafer}"/>
+                    <userControls:LoadLockRight Width="150" Height="150" Canvas.Top="309" Canvas.Left="519"  DoorIsOpen="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Door2IsOpen="{Binding RtDataValues[TM.LLBESlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLBWafer}"/>
                 </Canvas>
             </Viewbox>
             <userControls:EFEM Width="500" Height="200" Canvas.Left="500" Canvas.Top="430" Aligner1Wafer="{Binding Aligner1Wafer}" LP1Loaded="{Binding RtDataValues[LP1.IsLoaded]}" LP2Loaded="{Binding RtDataValues[LP2.IsLoaded]}" LP3Loaded="{Binding RtDataValues[LP3.IsLoaded]}"/>
@@ -157,7 +157,7 @@
 
 
 
-        <StackPanel     Canvas.Left="1040"  Canvas.Top="180" Width="340">
+        <StackPanel     Canvas.Left="1040"  Canvas.Top="180" Width="400">
 
             <Border  BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1" Background="{DynamicResource Table_BG_FirstTitle}" Padding="5,1" Height="30">
                 <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
@@ -180,6 +180,7 @@
                     <customControls:PathButton Content="Up"  Width="80"   Height="33" Command="{Binding Align1UpCommand}"/>
                     <customControls:PathButton Content="Down" Width="80"  Height="33" Command="{Binding Align1DownCommand}"/>
                     <customControls:PathButton Content="Align" Width="80" Height="33" Command="{Binding Align1AlignCommand}"/>
+                    <TextBox Text="{Binding AlignValue}" Width="60" Height="33" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="1,0,1,0" FontSize="20"/>
                 </StackPanel>
             </Border>
 
@@ -264,7 +265,7 @@
 
                 </Border>
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="4" Grid.Column="2" Padding="5,1">
-                    <StackPanel   Orientation="Horizontal"  >
+                    <StackPanel   Orientation="Horizontal">
                         <Button IsEnabled="{Binding IsLP1ClampEnable}" Margin="10,0"  Content="Clamp" Width="90" Height="25" Command="{Binding LPClampCommand}" CommandParameter="LP1"/>
                         <Button IsEnabled="{Binding IsLP1UnclampEnable}" Margin="10,0" Content="Unclamp" Width="90" Height="25" Command="{Binding LPUnClampCommand}" CommandParameter="LP1"/>
                     </StackPanel>
@@ -311,7 +312,7 @@
                 </Border>
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="6" Grid.Column="2" Padding="5,1">
                     <StackPanel Orientation="Horizontal">
-                        <Button IsEnabled="{Binding IsLP1OpenEnable}" Margin="10,0"  Content="Open" Width="90" Height="25">
+                        <Button IsEnabled="{Binding IsLP1OpenEnable}" Margin="10,0"  Content="Open" Width="90" Height="25" Command="{Binding LPOpenDoorCommand}" CommandParameter="LP1">
                             <!--<i:Interaction.Triggers>
                             <i:EventTrigger EventName="Click">
                                 <cal:ActionMessage MethodName="OpenDoor">
@@ -320,7 +321,7 @@
                             </i:EventTrigger>
                         </i:Interaction.Triggers>-->
                         </Button>
-                        <Button IsEnabled="{Binding IsLP1CloseEnable}" Margin="10,0" Content="Close" Width="90" Height="25">
+                        <Button IsEnabled="{Binding IsLP1CloseEnable}" Margin="10,0" Content="Close" Width="90" Height="25" Command="{Binding LPCloseDoorCommand}" CommandParameter="LP1">
                             <!--<i:Interaction.Triggers>
                             <i:EventTrigger EventName="Click">
                                 <cal:ActionMessage MethodName="CloseDoor">
@@ -449,7 +450,7 @@
                 </Border>
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="6" Grid.Column="2" Padding="5,1">
                     <StackPanel Orientation="Horizontal">
-                        <Button IsEnabled="{Binding IsLP1OpenEnable}" Margin="10,0"  Content="Open" Width="90" Height="25">
+                        <Button IsEnabled="{Binding IsLP1OpenEnable}" Margin="10,0"  Content="Open" Width="90" Height="25" Command="{Binding LPOpenDoorCommand}" CommandParameter="LP2">
                             <!--<i:Interaction.Triggers>
                             <i:EventTrigger EventName="Click">
                                 <cal:ActionMessage MethodName="OpenDoor">
@@ -458,7 +459,7 @@
                             </i:EventTrigger>
                         </i:Interaction.Triggers>-->
                         </Button>
-                        <Button IsEnabled="{Binding IsLP1CloseEnable}" Margin="10,0" Content="Close" Width="90" Height="25">
+                        <Button IsEnabled="{Binding IsLP1CloseEnable}" Margin="10,0" Content="Close" Width="90" Height="25" Command="{Binding LPCloseDoorCommand}" CommandParameter="LP2">
                             <!--<i:Interaction.Triggers>
                             <i:EventTrigger EventName="Click">
                                 <cal:ActionMessage MethodName="CloseDoor">
@@ -583,8 +584,8 @@
                 </Border>
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="6" Grid.Column="2" Padding="5,1">
                     <StackPanel Orientation="Horizontal">
-                        <Button IsEnabled="{Binding IsLP1OpenEnable}" Margin="10,0"  Content="Open" Width="90" Height="25"/>
-                        <Button IsEnabled="{Binding IsLP1CloseEnable}" Margin="10,0" Content="Close" Width="90" Height="25"/>
+                        <Button IsEnabled="{Binding IsLP1OpenEnable}" Margin="10,0"  Content="Open" Width="90" Height="25" Command="{Binding LPOpenDoorCommand}" CommandParameter="LP1"/>
+                        <Button IsEnabled="{Binding IsLP1CloseEnable}" Margin="10,0" Content="Close" Width="90" Height="25" Command="{Binding LPCloseDoorCommand}" CommandParameter="LP1"/>
                     </StackPanel>
                 </Border>
 

+ 8 - 8
Venus/Venus_MainPages/Views/TMOperationView.xaml

@@ -323,7 +323,7 @@
             <TextBlock Text="ATM" Canvas.Left="464" Canvas.Top="474"/>
             <TextBlock Text="VAC" Canvas.Left="444" Canvas.Top="565"/>
 
-            <userControls:TextboxWithLabel  Canvas.Left="351" Canvas.Top="265" LabelValue="Pressure(mTorr)" TextBoxValue="{Binding RtDataValues[TM.LLBPressureGauge.Value],StringFormat='F1'}" TextBoxColor="#D7E4BD"/>
+            <userControls:TextboxWithLabel  Canvas.Left="351" Canvas.Top="265" LabelValue="Pressure(mTorr)" TextBoxValue="{Binding TMOutChamberPressure}" TextBoxColor="#D7E4BD"/>
             
             <Border    BorderBrush="Gray"  BorderThickness="0"  Width="60" Height="6" Canvas.Left="445" Canvas.Top="524" >
                 <Border.Background>
@@ -383,14 +383,14 @@
         
         <Canvas Canvas.Top="74" Canvas.Left="140" Width="450" Height="800">
             <userControls:MainTM Width="300" Height="250" Canvas.Left="380" Canvas.Top="90"/>
-            <userControls:LoadLockLeft   Width="150" Height="150"  Canvas.Top="310"  Canvas.Left="358"   DoorIsOpen="{Binding RtDataValues[TM.LLATSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLAWafer}"/>
-            <userControls:LoadLockRight  Width="150" Height="150" Canvas.Top="309"  Canvas.Left="519"  DoorIsOpen="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}"   Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLBWafer}"/>
+            <userControls:LoadLockLeft   Width="150" Height="150"  Canvas.Top="310"  Canvas.Left="358"   DoorIsOpen="{Binding RtDataValues[TM.LLATSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Door2IsOpen="{Binding RtDataValues[TM.LLAESlitDoor.IsClosed],Converter={StaticResource BoolToBool}}"  Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLAWafer}"/>
+            <userControls:LoadLockRight  Width="150" Height="150" Canvas.Top="309"  Canvas.Left="519"    DoorIsOpen="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Door2IsOpen="{Binding RtDataValues[TM.LLBESlitDoor.IsClosed],Converter={StaticResource BoolToBool}}"  Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLBWafer}"/>
 
 
-            <userControls:TMChamber x:Name="PMA" Canvas.Top="302"  Canvas.Left="233" Width="140" Height="140" RotateTransformValue="-90"  DoorIsOpen="{Binding RtDataValues[PMA.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMAWafer}" PMVisibility="Collapsed"/>
-            <userControls:TMChamber x:Name="PMB" Canvas.Top="28"   Canvas.Left="315" Width="140" Height="140" RotateTransformValue="-28"  DoorIsOpen="{Binding RtDataValues[PMB.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMBWafer}" PMVisibility="Collapsed"/>
-            <userControls:TMChamber x:Name="PMC" Canvas.Top="-38"  Canvas.Left="588" Width="140" Height="140" RotateTransformValue="30"   DoorIsOpen="{Binding RtDataValues[PMC.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMCWafer}" PMVisibility="Collapsed"/>
-            <userControls:TMChamber x:Name="PMD" Canvas.Top="160"  Canvas.Left="788" Width="140" Height="140" RotateTransformValue="90"   DoorIsOpen="{Binding RtDataValues[PMD.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMDWafer}" PMVisibility="Collapsed"/>
+            <userControls:TMChamber x:Name="PMA" ModuleName="PMA" Canvas.Top="302"  Canvas.Left="233" Width="140" Height="140" RotateTransformValue="-90"  DoorIsOpen="{Binding RtDataValues[PMA.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMAWafer}" PMVisibility="Collapsed"/>
+            <userControls:TMChamber x:Name="PMB" ModuleName="PMB" Canvas.Top="28"   Canvas.Left="315" Width="140" Height="140" RotateTransformValue="-28"  DoorIsOpen="{Binding RtDataValues[PMB.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMBWafer}" PMVisibility="Collapsed"/>
+            <userControls:TMChamber x:Name="PMC" ModuleName="PMC" Canvas.Top="-38"  Canvas.Left="588" Width="140" Height="140" RotateTransformValue="30"   DoorIsOpen="{Binding RtDataValues[PMC.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMCWafer}" PMVisibility="Collapsed"/>
+            <userControls:TMChamber x:Name="PMD" ModuleName="PMD" Canvas.Top="160"  Canvas.Left="788" Width="140" Height="140" RotateTransformValue="90"   DoorIsOpen="{Binding RtDataValues[PMD.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMDWafer}" PMVisibility="Collapsed"/>
         </Canvas>
         <customControls:CommonValveControl Status="{Binding TMSoftVentValveIsOpen,Mode=TwoWay}"  ValveOrientation="Horizontal" Height="20" Width="20"  Canvas.Left="440" Canvas.Top="284"  Tag="TMSoftVentValve" Command="{Binding ControlValveCommand}" CommandParameter="{Binding RelativeSource={x:Static RelativeSource.Self}}" IsCanEdit="True"/>
         <!--<TextBlock  FontSize="15" Canvas.Top="260" Canvas.Left="350" Text="Pressure(mTorr)"/>
@@ -679,7 +679,7 @@
                         <Ellipse Width="22" Height="22" Fill="{Binding RtDataValues[TM.LLAESlitDoor.IsClosed],Converter={StaticResource boolToColor}}"  Canvas.Left="380" Canvas.Top="160" Stroke="Silver" StrokeThickness="2" />
                         <Button Width="130" Height="25" Content="LLAESlitDoor Closed"                                               Canvas.Left="410" Canvas.Top="160" Style="{StaticResource SysBtnStyle}"  Command="{Binding DoorUpDownCommand}" CommandParameter="TM.LLAESlitDoor.Close" IsEnabled="{Binding RtDataValues[TM.LLAESlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" />
 
-                        <Ellipse Width="22" Height="22" Fill="{Binding RtDataValues[TM.LLATSlitDoor.IsClosed],Converter={StaticResource boolToColor2}}"  Canvas.Left="180" Canvas.Top="190" Stroke="Silver" StrokeThickness="2" />
+                        <Ellipse Width="22" Height="22" Fill="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed],Converter={StaticResource boolToColor2}}"  Canvas.Left="180" Canvas.Top="190" Stroke="Silver" StrokeThickness="2" />
                         <Button Width="130" Height="25" Content="LLBTSlitDoor Open"                                               Canvas.Left="210" Canvas.Top="190" Style="{StaticResource SysBtnStyle}"  Command="{Binding DoorUpDownCommand}" CommandParameter="TM.LLBTSlitDoor.Open" IsEnabled="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed]}" />
 
                         <Ellipse Width="22" Height="22" Fill="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed],Converter={StaticResource boolToColor}}"  Canvas.Left="380" Canvas.Top="190" Stroke="Silver" StrokeThickness="2" />

+ 7 - 7
Venus/Venus_MainPages/Views/TMView.xaml

@@ -14,7 +14,7 @@
              xmlns:viewModel="clr-namespace:Venus_MainPages.ViewModels"
              prism:ViewModelLocator.AutoWireViewModel="True"
              mc:Ignorable="d" 
-             d:DesignHeight="450" d:DesignWidth="1200">
+             d:DesignHeight="450" d:DesignWidth="1500">
     <UserControl.Resources>
         <converters:BoolToBool x:Key="BoolToBool"/>
     </UserControl.Resources>
@@ -232,14 +232,14 @@
                     <customControls:WaferRobotControl OriginT="PMD"    Canvas.Left="410" Canvas.Top="76"   Width="200" Height="300"   x:Name="robot2" RobotTAction="{Binding Robot2TAction}" RobotXAction="{Binding Robot2XAction}"  RobotWafer="{Binding BladeBWafer}"/>
 
 
-                    <userControls:LoadLockLeft  Width="150" Height="150"  Canvas.Top="310"  Canvas.Left="358"   DoorIsOpen="{Binding RtDataValues[TM.LLATSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLAWafer}"/>
-                    <userControls:LoadLockRight  Width="150" Height="150" Canvas.Top="309"  Canvas.Left="519"  DoorIsOpen="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}"  Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLBWafer}"/>
+                    <userControls:LoadLockLeft  Width="150" Height="150"  Canvas.Top="310"  Canvas.Left="358"   DoorIsOpen="{Binding RtDataValues[TM.LLATSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Door2IsOpen="{Binding RtDataValues[TM.LLAESlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLAWafer}"/>
+                    <userControls:LoadLockRight  Width="150" Height="150" Canvas.Top="309"  Canvas.Left="519"  DoorIsOpen="{Binding RtDataValues[TM.LLBTSlitDoor.IsClosed],Converter={StaticResource BoolToBool}}"  Door2IsOpen="{Binding RtDataValues[TM.LLBESlitDoor.IsClosed],Converter={StaticResource BoolToBool}}" Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" RobotWafer="{Binding LLBWafer}"/>
 
 
-                    <userControls:TMChamber x:Name="PMA" Canvas.Top="302"  Canvas.Left="233" Width="140" Height="140" RotateTransformValue="-90"  DoorIsOpen="{Binding RtDataValues[PMA.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMAWafer}" PMVisibility="{Binding PMAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
-                    <userControls:TMChamber x:Name="PMB" Canvas.Top="28"   Canvas.Left="315" Width="140" Height="140" RotateTransformValue="-28"  DoorIsOpen="{Binding RtDataValues[PMB.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMBWafer}" PMVisibility="{Binding PMBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
-                    <userControls:TMChamber x:Name="PMC" Canvas.Top="-38"  Canvas.Left="588" Width="140" Height="140" RotateTransformValue="30"   DoorIsOpen="{Binding RtDataValues[PMC.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMCWafer}" PMVisibility="{Binding PMCIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
-                    <userControls:TMChamber x:Name="PMD" Canvas.Top="160"  Canvas.Left="788" Width="140" Height="140" RotateTransformValue="90"   DoorIsOpen="{Binding RtDataValues[PMD.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMDWafer}" PMVisibility="{Binding PMDIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
+                    <userControls:TMChamber x:Name="PMA" ModuleName="PMA" Canvas.Top="302"  Canvas.Left="233" Width="140" Height="140" RotateTransformValue="-90"  DoorIsOpen="{Binding RtDataValues[PMA.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMAWafer}" PMVisibility="{Binding PMAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
+                    <userControls:TMChamber x:Name="PMB" ModuleName="PMB" Canvas.Top="28"   Canvas.Left="315" Width="140" Height="140" RotateTransformValue="-28"  DoorIsOpen="{Binding RtDataValues[PMB.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMBWafer}" PMVisibility="{Binding PMBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
+                    <userControls:TMChamber x:Name="PMC" ModuleName="PMC" Canvas.Top="-38"  Canvas.Left="588" Width="140" Height="140" RotateTransformValue="30"   DoorIsOpen="{Binding RtDataValues[PMC.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMCWafer}" PMVisibility="{Binding PMCIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
+                    <userControls:TMChamber x:Name="PMD" ModuleName="PMD" Canvas.Top="160"  Canvas.Left="788" Width="140" Height="140" RotateTransformValue="90"   DoorIsOpen="{Binding RtDataValues[PMD.IsSlitDoorClosed],Converter={StaticResource BoolToBool}}" RobotWafer="{Binding PMDWafer}" PMVisibility="{Binding PMDIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
                 </Canvas>
             </Viewbox>
         </Canvas>

+ 1 - 1
Venus/Venus_RT/Config/System.sccfg

@@ -139,7 +139,7 @@
 		<config default="60" name="ExtendTimeout" nameView="Extend Timeout" description="" max="300" min="0" paramter="" tag="" unit="s" type="Integer" />
 		<config default="60" name="RetractTimeout" nameView="Retract Timeout" description="" max="300" min="0" paramter="" tag="" unit="s" type="Integer" />
 		<config default="180" name="SwapTimeout" nameView="Swap Timeout" description="" max="300" min="0" paramter="" tag="" unit="s" type="Integer" />
-		
+		<config default="1000" name="ChamberPressure" nameView="Chamber Pressure" description="TM Chamber 控压" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" />
 		<configs name="TM_MFC1" nameView="MFC1" >
 			<config default="true" name="Enable" nameView="Enable" description="Enable gas 1 or not" tag="" unit="" type="Bool" />
 			<config default="O2" name="GasName" nameView="Gas Name" description="Name of NO.1 gas stick" tag="" unit="" type="String" />

+ 4 - 4
Venus/Venus_RT/Devices/CometRF.cs

@@ -417,10 +417,10 @@ namespace Venus_RT.Devices
             DATA.Subscribe($"{Module}.{Name}.CommunicationStatus", () => _socket == null ? false : _socket.IsConnected);
             //EV.Subscribe(new EventItem("Event", AlarmRobotError, "Robot error", EventLevel.Alarm, Aitex.Core.RT.Event.EventType.HostNotification));
 
-            DATA.Subscribe($"{Module}.BiasMatch.C1", () => CLoad);
-            DATA.Subscribe($"{Module}.BiasMatch.C2", () => CTune);
-            //DATA.Subscribe($"{Module}.BiasMatch.VPP", () => VPP);
-            DATA.Subscribe($"{Module}.BiasMatch.MatchProcessMode", () => (int)MatchMode);
+            //DATA.Subscribe($"{Module}.BiasMatch.C1", () => CLoad);
+            //DATA.Subscribe($"{Module}.BiasMatch.C2", () => CTune);
+            ////DATA.Subscribe($"{Module}.BiasMatch.VPP", () => VPP);
+            //DATA.Subscribe($"{Module}.BiasMatch.MatchProcessMode", () => (int)MatchMode);
 
             Reset();
             SendCmd(Mode.Write, CometRFCommand.ControlMode, 0);

+ 2 - 2
Venus/Venus_RT/Devices/EFEM/JetEfem.cs

@@ -323,7 +323,7 @@ namespace Venus_RT.Devices.EFEM
                 {
                     SrcPos.ToHWString(),
                     Constant.ArmString[hand],
-                    WaferSize.WS12.ToString()
+                    //WaferSize.WS12.ToString()
                 }
             };
 
@@ -344,7 +344,7 @@ namespace Venus_RT.Devices.EFEM
                 {
                     DestPos.ToHWString(),
                     Constant.ArmString[hand],
-                    WaferSize.WS12.ToString()
+                    //WaferSize.WS12.ToString()
                 }
             };
 

+ 2 - 0
Venus/Venus_RT/Devices/EPD/Data/EPDSocketClient.cs

@@ -45,6 +45,8 @@ namespace EPD.Data
             socketWrapper.OnDataChanged += Received;
             socketWrapper.OnConnected += Connected;
             socketWrapper.OnDisconnected += Disconnected;
+
+            
         }
 
         private void Received(byte[] data, int offset, int size)

+ 29 - 1
Venus/Venus_RT/Devices/EPD/Data/SocketClientWrapper.cs

@@ -1,10 +1,12 @@
 using System;
+using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Linq;
 using System.Net;
 using System.Net.Sockets;
 using System.Text;
 using System.Threading.Tasks;
+using System.Timers;
 
 namespace EPD.Data
 {
@@ -15,12 +17,15 @@ namespace EPD.Data
         public Action<byte[] /*data*/, int /*offset*/, int /*size*/> OnDataChanged;
 
         private static Object _lockerSender = new Object();
+        private BlockingCollection<byte[]> SetPointCommandQueue = new BlockingCollection<byte[]>();
+        Timer timer = new Timer(500);
 
         public class ClientStateObject
         {
             public const int BufferSize = 16384;
             public Socket WorkSocket = null;
             public byte[] CacheBufferByteData = new byte[BufferSize];
+
         }
 
         private Socket socket;
@@ -29,6 +34,17 @@ namespace EPD.Data
 
         public SocketClientWrapper()
         {
+            timer.Elapsed += Timer_Elapsed;
+            timer.Enabled = true;
+        }
+
+        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
+        {
+            if (SetPointCommandQueue.Count > 0)
+            {
+                var byteData = SetPointCommandQueue.Take();
+                socket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), socket);
+            }
         }
 
         ~SocketClientWrapper()
@@ -51,6 +67,17 @@ namespace EPD.Data
                 socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                 socket.BeginConnect(remote, ConnectCallback, socket);
 
+                //Task.Run(() => 
+                //{
+                //    while (SetPointCommandQueue.Count > 0)
+                //    {
+                        
+                //        System.Threading.Thread.Sleep(500);
+
+                //    }
+                //    System.Threading.Thread.Sleep(500);
+
+                //});
             }
             catch (Exception ex)
             {
@@ -125,7 +152,8 @@ namespace EPD.Data
 
                 lock (_lockerSender)
                 {
-                    socket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), socket);
+                    SetPointCommandQueue.Add(byteData);
+                    //socket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), socket);
                 }
 
                 return true;

+ 8 - 1
Venus/Venus_RT/Devices/EPD/EPDClient.cs

@@ -73,7 +73,7 @@ namespace Venus_RT.Devices.EPD
             _socketClient.Connect(_ip, _port);
             _socketClient.ConnectEPD();
             _socketClient.SetMode(2);       // 1 local; 2 remote
-            _socketClient.SetRunStatus(3);  // 1 Monitor; 2 Save; 3:Capture; 4:Process
+            _socketClient.SetRunStatus(4);  // 1 Monitor; 2 Save; 3:Capture; 4:Process
             _socketClient.QueryConfigList();
             return true;
         }
@@ -119,6 +119,8 @@ namespace Venus_RT.Devices.EPD
 
         private void HeartBeat()
         {
+            //_socketClient.SendHeartBeat();
+
             _epdIdle.CLK = Status == EDPStatus.Idle;
             if (_epdIdle.Q)
             {
@@ -231,6 +233,7 @@ namespace Venus_RT.Devices.EPD
                     break;
                 case EPDCommand.Event:
                     var lst = obj as List<object>;
+                    //LOG.Write(0,"test11111111111111111111111XX"+lst[0].ToString());
                     if (lst[0] is int type && type == 7)
                         _captured = true;
                     break;
@@ -263,5 +266,9 @@ namespace Venus_RT.Devices.EPD
 
             return sb.ToString();
         }
+        public override void QueryConfigList()
+        {
+            _socketClient.QueryConfigList();
+        }
     }
 }

+ 5 - 1
Venus/Venus_RT/Devices/EPDs/EPDDevice.cs

@@ -330,7 +330,10 @@ namespace Aitex.RT.Device.Custom
 
             return true;
         }
-
+        public override void QueryConfigList()
+        {
+            //_socketClient.QueryConfigList();
+        }
         private void Instance_Notify(int channel, string e)
         {
             if (_channel != channel)
@@ -417,6 +420,7 @@ namespace Aitex.RT.Device.Custom
         {
             Trigger?.Invoke(channel, new TriggerEventArgs() { Channel = channel, Name = name, Ticket = ticket });
         }
+
     }
 
     public class TriggerEventArgs

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

@@ -33,5 +33,8 @@ namespace Venus_RT.Devices
         public abstract void RecipeStop();
         public abstract void StepStart(string config, int index);
         public abstract void StepStop();
+
+        public abstract void QueryConfigList();
+
     }
 }

+ 7 - 0
Venus/Venus_RT/Devices/JetPMBase.cs

@@ -113,6 +113,8 @@ namespace Venus_RT.Devices
         public  bool EPDCaptured => _epdClient.Captured;
         public  bool EPDConnected => _epdClient.IsEPDConnected;
 
+
+
         public JetPMBase(ModuleName module) :  base(module.ToString(), module.ToString(), module.ToString(), module.ToString())
         {
             Module = module;
@@ -272,6 +274,11 @@ namespace Venus_RT.Devices
                 SetBacksideHePressure(value);
                 return true;
             });
+            OP.Subscribe($"{Module}.EndPoint.SearchCfg", (cmd, args) =>
+            {
+                _epdClient.QueryConfigList();
+                return true;
+            });
         }
 
         public abstract void CloseValves();

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

@@ -257,6 +257,12 @@ namespace Venus_RT.Devices
                 return true;
             });
 
+            OP.Subscribe("TM.SetChamberPressure", (cmd, args) =>
+            {
+                _presureCtrl.SetTMPressure((int)(args[0]));
+                return true;
+            });
+
         }
 
         public override void Monitor()
@@ -601,5 +607,7 @@ namespace Venus_RT.Devices
         //    _TMPump.SetPumpOnOff(ison);
         //    return true;
         //}
+
+
     }
 }

+ 2 - 1
Venus/Venus_RT/Modules/EFEM/EfemEntity.cs

@@ -199,7 +199,7 @@ namespace Venus_RT.Modules
             OP.Subscribe($"{ModuleName.Aligner2}.{EfemOperation.Home}",     (cmd, args) => { PostMsg(MSG.HomeAL, ModuleName.Aligner2); return true; });
             OP.Subscribe($"{ModuleName.Cooling1}.{EfemOperation.Home}",     (cmd, args) => { PostMsg(MSG.HomeAL, ModuleName.Cooling1); return true; });
             OP.Subscribe($"{ModuleName.Cooling2}.{EfemOperation.Home}",     (cmd, args) => { PostMsg(MSG.HomeAL, ModuleName.Cooling2); return true; });
-            OP.Subscribe($"{ModuleName.Aligner1}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Aligner1); return true; });
+            OP.Subscribe($"{ModuleName.Aligner1}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Aligner1, args[0], args[1]); return true; });
             OP.Subscribe($"{ModuleName.Aligner2}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Aligner2); return true; });
             OP.Subscribe($"{ModuleName.Cooling1}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Cooling1); return true; });
             OP.Subscribe($"{ModuleName.Cooling2}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Cooling2); return true; });
@@ -559,6 +559,7 @@ namespace Venus_RT.Modules
             else
                 throw new ArgumentException("Argument error");
 
+
             // wafer size
             WaferSize ws1 = WaferSize.WS0;
             if (param[1] is string s2)

+ 7 - 0
Venus/Venus_RT/Modules/LPs/LoadPortModule.cs

@@ -72,6 +72,9 @@ namespace Venus_RT.Modules.LPs
 
             ReadTagData,
             WriteTagData,
+
+            CloseDoor,
+            OpenDoor,
         }
 
         private readonly EfemBase _efem;
@@ -141,6 +144,10 @@ namespace Venus_RT.Modules.LPs
             OP.Subscribe($"{Module}.Abort", (cmd, args) => { PostMsg(MSG.Abort); return true; });
             OP.Subscribe($"{Module}.Online", (cmd, args) => { PostMsg(MSG.Online); return true; });
 
+            OP.Subscribe($"{Name}.OpenDoor", (string cmd, object[] args) =>{return CheckToPostMessage((int)MSG.OpenDoor);});
+
+            OP.Subscribe($"{Name}.CloseDoor", (string cmd, object[] args) =>{return CheckToPostMessage((int)MSG.CloseDoor);});
+
 
             DATA.Subscribe($"{Module}.Status", () => ((STATE)FsmState).ToString());
             DATA.Subscribe($"{Module}.FsmState", () => ((STATE)FsmState).ToString());

+ 2 - 2
Venus/Venus_RT/Modules/PMs/ProcessDefine.cs

@@ -350,8 +350,8 @@ namespace Venus_RT.Modules.PMs
                 case StepType.EndPoint:
                     if (step.ElapsedTime() > step.MaxEndPointTime * 1000)
                     {
-                        LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} timeout, did not capture endpoint signal in {step.MaxEndPointTime} seconds");
-                        return RState.Timeout;
+                        LOG.Write(eEvent.INFO_PROCESS, Chamber.Module, $"Step:{step.StepNo} timeout, did not capture endpoint signal in {step.MaxEndPointTime} seconds");
+                        return RState.End;
                     }
                     else
                         return Chamber.EPDCaptured ? RState.End : RState.Running;

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

@@ -316,10 +316,10 @@ namespace Venus_Simulator.Instances
 
 
             SetAiValue($"{mod}.AI_TM_CHB_Pressure", 5000);
-            SetAiValue($"{mod}.AI_TM_Foreline_Pressure", 5000);
-            SetAiValue($"{mod}.AI_LLA_CHB_Pressure", 5000);
-            SetAiValue($"{mod}.AI_LLA_LLB_Foreline_Pressure", 5000);
-            SetAiValue($"{mod}.AI_LLB_CHB_Pressure", 5000);
+            SetAiValue($"{mod}.AI_TM_Foreline_Pressure", 5001);
+            SetAiValue($"{mod}.AI_LLA_CHB_Pressure", 5002);
+            SetAiValue($"{mod}.AI_LLA_LLB_Foreline_Pressure", 5003);
+            SetAiValue($"{mod}.AI_LLB_CHB_Pressure", 5004);
 
 
         }

+ 1 - 1
Venus/Venus_Themes/UserControls/LoadLockRight.xaml

@@ -127,7 +127,7 @@
                        DataContext="{Binding ElementName=RightLoadLock, Path=RobotWafer}"  HorizontalAlignment="Center" VerticalAlignment="Center">
                 </ctrl:Slot>
             </Viewbox>
-            <Rectangle  Fill="Silver" Width="142"  VerticalAlignment="Top"    Height="20"  Canvas.Top="200" Canvas.Left="59" Visibility="{Binding ElementName=RightLoadLock,Path=Door2IsVisibility}"/>
+            <Rectangle  Fill="Silver" Width="162"  VerticalAlignment="Top"    Height="20"  Canvas.Top="200" Canvas.Left="39" Visibility="{Binding ElementName=RightLoadLock,Path=Door2IsVisibility}"/>
             <Rectangle  Fill="DimGray" Style="{StaticResource door2Animation}"  VerticalAlignment="Top"    Height="20"  Canvas.Top="200" Canvas.Left="59"  Visibility="{Binding ElementName=RightLoadLock,Path=Door2IsVisibility}">
                 <Rectangle.RenderTransform>
                     <RotateTransform Angle="180" CenterX="71" CenterY="10"/>

+ 16 - 4
Venus/Venus_Themes/UserControls/TMChamber.xaml

@@ -5,6 +5,7 @@
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:Venus_Themes.UserControls"
              xmlns:ctrl="http://OpenSEMI.Ctrlib.com/presentation"
+             xmlns:converters="clr-namespace:Venus_Themes.Converters"
              mc:Ignorable="d" 
              d:DesignHeight="450" d:DesignWidth="800" Name="tmChamber" Opacity="0.9">
     <UserControl.Resources>
@@ -29,6 +30,7 @@
                 </DataTrigger>
             </Style.Triggers>
         </Style>
+        <converters:BoolToBool x:Key="BoolToBool"/>
     </UserControl.Resources>
     <Viewbox Stretch="Fill">
         <Viewbox.RenderTransform>
@@ -94,14 +96,24 @@
 
                 <Rectangle Fill="Silver"  Width="200" VerticalAlignment="Top"    Height="20"    Canvas.Top="200" Canvas.Left="-2"/>
 
-                <Rectangle Style="{StaticResource doorAnimation}"  Fill="DimGray"   VerticalAlignment="Top"    Height="20"    Canvas.Top="200" Canvas.Left="-2" Name="door1">
-
+                <Rectangle DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" Style="{StaticResource doorAnimation}"  Fill="DimGray"   VerticalAlignment="Top"    Height="20"    Canvas.Top="200" Canvas.Left="-2" Name="door1">
+                    <Rectangle.ContextMenu>
+                        <ContextMenu >
+                            <MenuItem Header="Open Door"   Command="{Binding ChamberDoorOpenCommand}"  CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:TMChamber},Path=ModuleName}"  IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl},Path=DoorIsOpen}"/>
+                            <MenuItem Header="Close Door"  Command="{Binding ChamberDoorCloseCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:TMChamber},Path=ModuleName}" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl},Path=DoorIsOpen,Converter={StaticResource BoolToBool}}" IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl},Path=DoorIsOpen}"/>
+                        </ContextMenu>
+                    </Rectangle.ContextMenu>
                 </Rectangle>
-                <Rectangle Style="{StaticResource doorAnimation}"  Fill="DimGray"   VerticalAlignment="Top"    Height="20"    Canvas.Top="200" Canvas.Left="-2" Name="door2">
+                <Rectangle  Style="{StaticResource doorAnimation}"  Fill="DimGray"   VerticalAlignment="Top"    Height="20"    Canvas.Top="200" Canvas.Left="-2" Name="door2">
                     <Rectangle.RenderTransform >
                         <RotateTransform CenterX="102" CenterY="10" Angle="180"/>
                     </Rectangle.RenderTransform>
-
+                    <Rectangle.ContextMenu>
+                        <ContextMenu >
+                            <MenuItem Header="Open Door"   Command="{Binding ChamberDoorOpenCommand}"  CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:TMChamber},Path=ModuleName}"  IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl},Path=DoorIsOpen}"/>
+                            <MenuItem Header="Close Door"  Command="{Binding ChamberDoorCloseCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:TMChamber},Path=ModuleName}" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl},Path=DoorIsOpen,Converter={StaticResource BoolToBool}}" IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl},Path=DoorIsOpen}"/>
+                        </ContextMenu>
+                    </Rectangle.ContextMenu>
                 </Rectangle>
                 <Viewbox Width="126" Height="126"  Canvas.Left="39" Canvas.Top="38">
                     <local:WaferCtrl WaferData="{Binding ElementName=tmChamber, Path=RobotWafer}"/>

+ 13 - 12
Venus/Venus_Themes/UserControls/TMChamber.xaml.cs

@@ -1,18 +1,7 @@
 using OpenSEMI.ClientBase;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
+
 
 namespace Venus_Themes.UserControls
 {
@@ -60,5 +49,17 @@ namespace Venus_Themes.UserControls
             set => SetValue(PMVisibilityProperty, value);
         }
 
+        public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register(
+       "ModuleName", typeof(string), typeof(TMChamber));
+
+        public string ModuleName
+        {
+            get { return (string)this.GetValue(ModuleNameProperty); }
+            set
+            {
+                this.SetValue(ModuleNameProperty, value);
+            }
+        }
+
     }
 }