소스 검색

1.endpoint by wcf 添加修改配置文件界面
2.调整efem与tm UI界面比列
3.endpoint by socket现场测试,代码微调

lixiang 1 년 전
부모
커밋
179f80c29a
26개의 변경된 파일808개의 추가작업 그리고 108개의 파일을 삭제
  1. 13 11
      Venus/Venus_Core/Recipe.cs
  2. 1 1
      Venus/Venus_MainPages/Unity/WaferStatusHandler.cs
  3. 7 0
      Venus/Venus_MainPages/Venus_MainPages.csproj
  4. 35 3
      Venus/Venus_MainPages/ViewModels/EfemViewModel.cs
  5. 52 15
      Venus/Venus_MainPages/ViewModels/OperationOverViewModel.cs
  6. 68 1
      Venus/Venus_MainPages/ViewModels/RecipeViewModel.cs
  7. 27 29
      Venus/Venus_MainPages/Views/EfemView.xaml
  8. 265 0
      Venus/Venus_MainPages/Views/EndPointDlg.xaml
  9. 122 0
      Venus/Venus_MainPages/Views/EndPointDlg.xaml.cs
  10. 9 6
      Venus/Venus_MainPages/Views/OperationOverView.xaml
  11. 4 4
      Venus/Venus_MainPages/Views/OverKepler2300View.xaml
  12. 4 4
      Venus/Venus_MainPages/Views/OverVenusView.xaml
  13. 7 1
      Venus/Venus_RT/Devices/EFEM/JetEfem.cs
  14. 2 0
      Venus/Venus_RT/Devices/EPD/EPDClient.cs
  15. 1 1
      Venus/Venus_RT/Devices/EPDs/EPDDevice.cs
  16. 4 0
      Venus/Venus_RT/Devices/JetPMBase.cs
  17. 5 5
      Venus/Venus_RT/Modules/EFEM/EfemEntity.cs
  18. 4 0
      Venus/Venus_RT/Modules/PMs/PMProcessRoutine.cs
  19. 1 1
      Venus/Venus_RT/Modules/PMs/ProcessDefine.cs
  20. 13 13
      Venus/Venus_Themes/UserControls/EFEM.xaml
  21. 5 5
      Venus/Venus_Themes/UserControls/EFEM.xaml.cs
  22. 96 0
      Venus/Venus_Themes/UserControls/EFEMFrontView.xaml
  23. 48 0
      Venus/Venus_Themes/UserControls/EFEMFrontView.xaml.cs
  24. 7 7
      Venus/Venus_Themes/UserControls/LoadLockLeft.xaml
  25. 1 1
      Venus/Venus_Themes/UserControls/LoadLockRight.xaml
  26. 7 0
      Venus/Venus_Themes/Venus_Themes.csproj

+ 13 - 11
Venus/Venus_Core/Recipe.cs

@@ -231,24 +231,16 @@ namespace Venus_Core
             get { return m_Description; }
             set { m_Description = value; InvokePropertyChanged("Description"); }
         }
-        private bool m_EnableRamp;
-        public bool EnableRamp
-        {
-            get { return m_EnableRamp; }
-            set { m_EnableRamp = value; InvokePropertyChanged("EnableRamp"); }
-        }
-
         private string m_EPDConfigName;
-        public string EPDConfigName
+        public string EPDConfig
         {
             get { return m_EPDConfigName; }
-            set { m_EPDConfigName = value; InvokePropertyChanged("EPDConfigName"); }
+            set { m_EPDConfigName = value; InvokePropertyChanged("EPDConfig"); }
         }
-
         private int m_MinEndPointTime;
         public int MinEndPointTime
         {
-            get { return m_MinEndPointTime;}
+            get { return m_MinEndPointTime; }
             set { m_MinEndPointTime = value; InvokePropertyChanged("MinEndPointTime"); }
         }
 
@@ -258,6 +250,16 @@ namespace Venus_Core
             get { return m_MaxEndPointTime; }
             set { m_MaxEndPointTime = value; InvokePropertyChanged("MaxEndPointTime"); }
         }
+        private bool m_EnableRamp;
+        public bool EnableRamp
+        {
+            get { return m_EnableRamp; }
+            set { m_EnableRamp = value; InvokePropertyChanged("EnableRamp"); }
+        }
+
+       
+
+        
 
         private int m_OverEtchPercent;
         public int OverEtchPercent

+ 1 - 1
Venus/Venus_MainPages/Unity/WaferStatusHandler.cs

@@ -13,7 +13,7 @@ namespace Venus_MainPages.Unity
 {
     public class WaferStatusHandler : IHandler
     {
-        public static readonly List<string> ReverseModules = new List<string>() { "LLA","LLB" };
+        public static readonly List<string> ReverseModules = new List<string>() { "LLA","LLB", "LP1", "LP2", "LP3" };
 
         public WaferStatusHandler(Func<string, List<WaferInfo>> funcGetWaferStatus, List<string> allModules)
         {

+ 7 - 0
Venus/Venus_MainPages/Venus_MainPages.csproj

@@ -200,6 +200,9 @@
     <Compile Include="Views\EfemView.xaml.cs">
       <DependentUpon>EfemView.xaml</DependentUpon>
     </Compile>
+    <Compile Include="Views\EndPointDlg.xaml.cs">
+      <DependentUpon>EndPointDlg.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Views\EventView.xaml.cs">
       <DependentUpon>EventView.xaml</DependentUpon>
     </Compile>
@@ -311,6 +314,10 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="Views\EndPointDlg.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="Views\EventView.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>

+ 35 - 3
Venus/Venus_MainPages/ViewModels/EfemViewModel.cs

@@ -58,6 +58,9 @@ namespace Venus_MainPages.ViewModels
         private WaferInfo m_BladeAWafer;
         private WaferInfo m_BladeBWafer;
 
+        private WaferInfo m_LLAWafer;
+        private WaferInfo m_LLBWafer;
+
         private WaferInfo m_Aligner1Wafer;
 
         #endregion
@@ -198,7 +201,16 @@ namespace Venus_MainPages.ViewModels
             get { return m_Aligner1Wafer; }
             set { SetProperty(ref m_Aligner1Wafer, value); }
         }
-        
+        public WaferInfo LLAWafer
+        {
+            get { return m_LLAWafer; }
+            set { SetProperty(ref m_LLAWafer, value); }
+        }
+        public WaferInfo LLBWafer
+        {
+            get { return m_LLBWafer; }
+            set { SetProperty(ref m_LLBWafer, value); }
+        }
         #endregion
 
         #region 命令
@@ -243,6 +255,14 @@ namespace Venus_MainPages.ViewModels
         private DelegateCommand _Align1DownCommand;
         public DelegateCommand Align1DownCommand =>
             _Align1DownCommand ?? (_Align1DownCommand = new DelegateCommand(OnAlign1Down));
+
+        private DelegateCommand _Align1AlignCommand;
+        public DelegateCommand Align1AlignCommand =>
+            _Align1AlignCommand ?? (_Align1AlignCommand = new DelegateCommand(OnAlign1Align));
+        private DelegateCommand _RobotHomeCommand;
+        public DelegateCommand RobotHomeCommand =>
+            _RobotHomeCommand ?? (_RobotHomeCommand = new DelegateCommand(OnRobotHome));
+        
         #endregion
 
         #region 构造函数
@@ -403,7 +423,7 @@ namespace Venus_MainPages.ViewModels
 
             var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PickSelectedModule.ToString(), true);
             var selectedHand = (Hand)Enum.Parse(typeof(Hand), PickSelectedBlade.ToString(), true);
-            MoveItem moveItem = new MoveItem(moduleName, PickSoltItemsSource[PickSoltSelectedIndex]-1, 0, 0, selectedHand);
+            MoveItem moveItem = new MoveItem(moduleName, PickSoltItemsSource[PickSoltSelectedIndex]-1, ModuleName.EfemRobot, 0, selectedHand);
             moveItems.Enqueue(moveItem);
 
             if (PickSelectedModule == EFEMModule.LLA || PickSelectedModule == EFEMModule.LLB)
@@ -430,7 +450,7 @@ namespace Venus_MainPages.ViewModels
             var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PlaceSelectedModule.ToString(), true);
 
             var selectedHand = (Hand)Enum.Parse(typeof(Hand), PlaceSelectedBlade.ToString(), true);
-            MoveItem moveItem = new MoveItem(0, 0, moduleName, PlaceSoltItemsSource[PlaceSoltSelectedIndex]-1, selectedHand);
+            MoveItem moveItem = new MoveItem(ModuleName.EfemRobot, 0, moduleName, PlaceSoltItemsSource[PlaceSoltSelectedIndex]-1, selectedHand);
             moveItems.Enqueue(moveItem);
             //if ((int)PlaceSelectedModule > 3)
             //{
@@ -476,6 +496,14 @@ namespace Venus_MainPages.ViewModels
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Lift}", false);
         }
+        private void OnAlign1Align()
+        { 
+            InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Align}");
+        }
+        private void OnRobotHome()
+        {
+            InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Home}");
+        }
         #endregion
 
         #region 私有方法
@@ -483,10 +511,14 @@ namespace Venus_MainPages.ViewModels
         {
             if (LLAIsInstalled == true)
             {
+                LLAWafer = ModuleManager.ModuleInfos["LLA"].WaferManager.Wafers.FirstOrDefault(x => x.WaferStatus != 0);
+
                 LLAModuleInfo = ModuleManager.ModuleInfos["LLA"];
             }
             if (LLBIsInstalled == true)
             {
+                LLBWafer = ModuleManager.ModuleInfos["LLB"].WaferManager.Wafers.FirstOrDefault(x => x.WaferStatus != 0);
+
                 LLBModuleInfo = ModuleManager.ModuleInfos["LLB"];
             }
             LP1ModuleInfo = ModuleManager.ModuleInfos["LP1"];

+ 52 - 15
Venus/Venus_MainPages/ViewModels/OperationOverViewModel.cs

@@ -19,6 +19,8 @@ namespace Venus_MainPages.ViewModels
         private bool m_TabIsChecked=true;
         private ModuleInfo m_LP1ModuleInfo;
         private ModuleInfo m_LP2ModuleInfo;
+
+        private ModuleInfo m_LP3ModuleInfo;
         private WaferRobotTAction m_Robot1TAction;
         private WaferRobotXAction m_Robot1XAction;
         private WaferRobotTAction m_Robot2TAction;
@@ -32,8 +34,8 @@ namespace Venus_MainPages.ViewModels
         private WaferInfo m_PMDWafer;
         private WaferInfo m_LLAWafer;
         private WaferInfo m_LLBWafer;
-        private WaferInfo m_BladeAWafer;
-        private WaferInfo m_BladeBWafer;
+        private WaferInfo m_TMBladeAWafer;
+        private WaferInfo m_TMBladeBWafer;
         private List<string> m_RtDataKeys = new List<string>();
         private Dictionary<string, object> m_RtDataValues;
         private bool m_PMAIsInstalled;
@@ -43,6 +45,11 @@ namespace Venus_MainPages.ViewModels
         private bool m_LLAIsInstalled;
         private bool m_LLBIsInstalled;
         private bool m_TMIsInstalled;
+        private bool m_EFEMIsInstalled;
+        private WaferInfo m_EFEMBladeAWafer;
+        private WaferInfo m_EFEMBladeBWafer;
+        private WaferInfo m_Aligner1Wafer;
+
 
         #endregion
 
@@ -62,6 +69,11 @@ namespace Venus_MainPages.ViewModels
             get { return m_LP2ModuleInfo; }
             set { SetProperty(ref m_LP2ModuleInfo, value); }
         }
+        public ModuleInfo LP3ModuleInfo
+        {
+            get { return m_LP3ModuleInfo; }
+            set { SetProperty(ref m_LP3ModuleInfo, value); }
+        }
         public WaferRobotTAction Robot1TAction
         {
             get { return m_Robot1TAction; }
@@ -122,15 +134,15 @@ namespace Venus_MainPages.ViewModels
             set { SetProperty(ref m_PMDWafer, value); }
         }
 
-        public WaferInfo BladeAWafer
+        public WaferInfo TMBladeAWafer
         {
-            get { return m_BladeAWafer; }
-            set { SetProperty(ref m_BladeAWafer, value); }
+            get { return m_TMBladeAWafer; }
+            set { SetProperty(ref m_TMBladeAWafer, value); }
         }
-        public WaferInfo BladeBWafer
+        public WaferInfo TMBladeBWafer
         {
-            get { return m_BladeBWafer; }
-            set { SetProperty(ref m_BladeBWafer, value); }
+            get { return m_TMBladeBWafer; }
+            set { SetProperty(ref m_TMBladeBWafer, value); }
         }
         public Dictionary<string, object> RtDataValues
         {
@@ -172,6 +184,26 @@ namespace Venus_MainPages.ViewModels
             get { return m_TMIsInstalled; }
             set { SetProperty(ref m_TMIsInstalled, value); }
         }
+        public bool EFEMIsInstalled
+        {
+            get { return m_EFEMIsInstalled; }
+            set { SetProperty(ref m_EFEMIsInstalled, value); }
+        }
+        public WaferInfo EFEMBladeAWafer
+        {
+            get { return m_EFEMBladeAWafer; }
+            set { SetProperty(ref m_EFEMBladeAWafer, value); }
+        }
+        public WaferInfo EFEMBladeBWafer
+        {
+            get { return m_EFEMBladeBWafer; }
+            set { SetProperty(ref m_EFEMBladeBWafer, value); }
+        }
+        public WaferInfo Aligner1Wafer
+        {
+            get { return m_Aligner1Wafer; }
+            set { SetProperty(ref m_Aligner1Wafer, value); }
+        }
         #endregion
 
         #region 构造函数
@@ -183,14 +215,14 @@ namespace Venus_MainPages.ViewModels
             timer.Start();
 
             addDataKeys();
-            string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
+            string allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString();
             PMAIsInstalled = allModules.Contains("PMA");
             PMBIsInstalled = allModules.Contains("PMB");
             PMCIsInstalled = allModules.Contains("PMC");
             PMDIsInstalled = allModules.Contains("PMD");
             LLAIsInstalled = allModules.Contains("LLA");
             LLBIsInstalled = allModules.Contains("LLB");
-
+            EFEMIsInstalled = allModules.Contains("EFEM");
         }
         #endregion
 
@@ -198,7 +230,8 @@ namespace Venus_MainPages.ViewModels
         private void Timer_Tick(object sender, EventArgs e)
         {
             LP1ModuleInfo = ModuleManager.ModuleInfos["LP1"];
-            LP2ModuleInfo = ModuleManager.ModuleInfos["LP1"];
+            LP2ModuleInfo = ModuleManager.ModuleInfos["LP2"];
+            LP3ModuleInfo = ModuleManager.ModuleInfos["LP3"];
 
 
             if (LLAIsInstalled == true)
@@ -208,7 +241,6 @@ namespace Venus_MainPages.ViewModels
             if (LLBIsInstalled == true)
             {
                 LLBWafer = ModuleManager.ModuleInfos["LLB"].WaferManager.Wafers.FirstOrDefault(x => x.WaferStatus != 0);
-
             }
             if (PMAIsInstalled == true)
             {
@@ -229,10 +261,15 @@ namespace Venus_MainPages.ViewModels
 
             if (TMIsInstalled == true)
             {
-                BladeAWafer = ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0];
-                BladeBWafer = ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[1];
+                TMBladeAWafer = ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0];
+                TMBladeBWafer = ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[1];
+            }
+            if (EFEMIsInstalled == true)
+            {
+                EFEMBladeAWafer = ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[0];
+                EFEMBladeBWafer = ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[1];
+                Aligner1Wafer   = ModuleManager.ModuleInfos["Aligner1"].WaferManager.Wafers[0];
             }
-                
 
             RobotMoveInfo = (RobotMoveInfo)QueryDataClient.Instance.Service.GetData("TM.RobotMoveAction");
 

+ 68 - 1
Venus/Venus_MainPages/ViewModels/RecipeViewModel.cs

@@ -1,6 +1,7 @@
 using Aitex.Core.Common.DeviceData;
 using Aitex.Core.RT.Log;
 using Aitex.Core.UI.View.Common;
+//using MECF.Framework.Common.CommonData;
 using MECF.Framework.Common.DataCenter;
 using Microsoft.VisualBasic;
 using Newtonsoft.Json;
@@ -14,6 +15,7 @@ using System.Reflection;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Data;
+using System.Windows.Input;
 using System.Windows.Media;
 using System.Xml;
 using Venus_Core;
@@ -26,6 +28,12 @@ using WPF.Themes.UserControls;
 
 namespace Venus_MainPages.ViewModels
 {
+    public enum EPDType
+    {
+        Socket,
+        WCF,
+        None
+    }
     internal class RecipeViewModel : BindableBase
     {
         #region 私有字段     
@@ -48,6 +56,8 @@ namespace Venus_MainPages.ViewModels
         };
         private Grid  currentRecipeGrid;
         private int copyIndex = -1;
+        private List<string> EPDCfgList=new List<string> ();
+        private EPDType currentEPDType=EPDType.None;
         #endregion
 
         #region  属性
@@ -101,7 +111,7 @@ namespace Venus_MainPages.ViewModels
         #region 构造函数
         public RecipeViewModel()
         {
-
+            
         }
         #endregion
 
@@ -167,6 +177,17 @@ namespace Venus_MainPages.ViewModels
                 UpdateRecipeFileList();
                 
                 treeViewRcpList.SelectedItemChanged += TreeViewRcpList_SelectedItemChanged;
+                currentEPDType = (EPDType)System.Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.EPD.EPDType"));
+
+                if (currentEPDType == EPDType.Socket)
+                {
+                    var epdList = QueryDataClient.Instance.Service.GetData($"{ModuleName}.EPDCfgList");
+                    if (epdList != null)
+                    {
+                        EPDCfgList = (List<string>)QueryDataClient.Instance.Service.GetData($"{ModuleName}.EPDCfgList");
+                    }
+                }
+               
             }
         }
         TreeViewFileItem selectedItem;
@@ -507,8 +528,40 @@ namespace Venus_MainPages.ViewModels
                             };
                             switch (propertyTypeName)
                             {
+                             
                                 case "Int32":
                                 case "String":
+                                    if (propertyInfoName == "EPDConfig")
+                                    {
+                                        if (currentEPDType == EPDType.Socket)
+                                        {
+                                            ComboBox EPDcomboBox = new ComboBox();
+                                            EPDcomboBox.Style = (Style)recipeView.FindResource("customeComboBoxStyle");
+                                            EPDcomboBox.Background = new SolidColorBrush(Colors.Black);
+
+                                            EPDcomboBox.SetBinding(ComboBox.SelectedItemProperty, binding);
+                                            EPDcomboBox.ItemsSource = EPDCfgList;
+                                            grid.Children.Add(EPDcomboBox);
+                                            Grid.SetRow(EPDcomboBox, i);
+                                            Grid.SetColumn(EPDcomboBox, index + location);
+                                        }
+                                        else if (currentEPDType == EPDType.WCF)
+                                        {
+                                            Button EPDButton = new Button();
+                                            EPDButton.Content = "EndPoint";
+                                            EPDButton.Cursor = Cursors.Hand;
+                                            EPDButton.Tag = $"{CurrentRecipeName}.{(index + location).ToString()}";
+                                            EPDButton.Style = null;
+                                            EPDButton.Click += EPDButton_Click;
+
+
+                                            grid.Children.Add(EPDButton);
+                                            Grid.SetRow(EPDButton, i);
+                                            Grid.SetColumn(EPDButton, index + location);
+                                        }
+                                      
+                                        break;
+                                    }
                                     TextBox textBox = new TextBox();
                                     if (stepcheckbinding == null)
                                     {
@@ -816,6 +869,20 @@ namespace Venus_MainPages.ViewModels
 
         }
 
+        private void EPDButton_Click(object sender, RoutedEventArgs e)
+        {
+            Button button = sender as Button;
+            string para = button.Tag.ToString();
+            int stepno = Convert.ToInt32(para.Split('.')[1])-1;
+            var endpointconfigitem = new MECF.Framework.Common.CommonData.EndPointConfigItem();
+            if (CurrentRecipe.Steps[stepno].EPDConfig!=null && CurrentRecipe.Steps[stepno].EPDConfig.Length>20)
+            {
+                endpointconfigitem.SetValue(CurrentRecipe.Steps[stepno].EPDConfig);
+            }
+
+           (new EndPointDlg(para, endpointconfigitem,CurrentRecipe)).ShowDialog();
+        }
+
         private void UpdateRecipeFileList()
         {
             XmlDocument doc = new XmlDocument();

+ 27 - 29
Venus/Venus_MainPages/Views/EfemView.xaml

@@ -25,41 +25,34 @@
                 <RadioButton Content="Offline"   FontSize="15"   Width="120" Height="28" Margin="5 5 0 5" Style="{StaticResource Button_RadioButton}" IsChecked="{Binding TMIsOFFline,Mode=TwoWay}" GroupName="IsOnline"/>
             </StackPanel>
         </Border>
-            <userControls:FOUPFrontView UnitData="{Binding LP1ModuleInfo}"  Canvas.Top="120" Canvas.Left="10"/>
-            <userControls:FOUPFrontView UnitData="{Binding LP2ModuleInfo}"  Canvas.Top="120" Canvas.Left="150"/>
-            <userControls:FOUPFrontView UnitData="{Binding LP3ModuleInfo}"  Canvas.Top="120" Canvas.Left="300"/>
+        <userControls:FOUPFrontView UnitData="{Binding LP1ModuleInfo}"  Canvas.Top="200" Canvas.Left="10"/>
+        <userControls:FOUPFrontView UnitData="{Binding LP2ModuleInfo}"  Canvas.Top="200" Canvas.Left="150"/>
+        <userControls:FOUPFrontView UnitData="{Binding LP3ModuleInfo}"  Canvas.Top="200" Canvas.Left="300"/>
+        <userControls:FOUPFrontView UnitData="{Binding LLAModuleInfo}" VerticalAlignment="Top" Canvas.Top="120" Canvas.Left="10" Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
+        <userControls:FOUPFrontView UnitData="{Binding LLBModuleInfo}" VerticalAlignment="Top" Canvas.Top="120" Canvas.Left="150" Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
+        
+        
 
-            <userControls:FOUPFrontView UnitData="{Binding LLAModuleInfo}" VerticalAlignment="Top" Canvas.Top="260" Canvas.Left="460" Visibility="{Binding LLAIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
-            <userControls:FOUPFrontView UnitData="{Binding LLBModuleInfo}" VerticalAlignment="Top" Canvas.Top="260" Canvas.Left="920" Visibility="{Binding LLBIsInstalled,Converter={StaticResource bool2VisibilityConverter}}"/>
-            <Viewbox Width="700" Height="700" Canvas.Top="50" Canvas.Left="400" Stretch="Fill">
+        <Canvas>
+            <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"/>
-
-                    <!--<customControls:WaferRobotControl OriginT="PMA"    Canvas.Left="410" Canvas.Top="76"   Width="200" Height="300"   x:Name="robot"  RobotTAction="{Binding Robot1TAction}" RobotXAction="{Binding Robot1XAction}" RobotWafer="{Binding BladeAWafer}"/>
-                    <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: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: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}" Visibility="{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}" />
-                    <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}" />
-                    <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}" />-->
-
-                <userControls:EFEM Width="600" Height="300" Canvas.Left="200" Canvas.Top="476" ZuoShangWafer="{Binding Aligner1Wafer}"/>
-
-                    <customControls:WaferRobotControl OriginT="PMA"    Canvas.Left="400" Canvas.Top="473"   Width="200" Height="300"    RobotTAction="{Binding Robot1TAction}" RobotXAction="{Binding Robot1XAction}" RobotWafer="{Binding BladeAWafer}"/>
-                    <customControls:WaferRobotControl OriginT="PMD"    Canvas.Left="400" Canvas.Top="473"   Width="200" Height="300"    RobotTAction="{Binding Robot2TAction}" RobotXAction="{Binding Robot2XAction}"  RobotWafer="{Binding BladeBWafer}"/>
                 </Canvas>
-               
             </Viewbox>
-           
+            <userControls:EFEM Width="500" Height="200" Canvas.Left="500" Canvas.Top="430" Aligner1Wafer="{Binding Aligner1Wafer}"/>
+            <customControls:WaferRobotControl OriginT="PMA"    Canvas.Left="664" Canvas.Top="395"   Width="180" Height="270"    RobotTAction="{Binding Robot1TAction}" RobotXAction="{Binding Robot1XAction}" RobotWafer="{Binding BladeAWafer}"/>
+            <customControls:WaferRobotControl OriginT="PMD"    Canvas.Left="664" Canvas.Top="395"   Width="180" Height="270"    RobotTAction="{Binding Robot2TAction}" RobotXAction="{Binding Robot2XAction}"  RobotWafer="{Binding BladeBWafer}"/>
+            
+        </Canvas>
+                 
 
-        <Grid      Canvas.Top="40" Canvas.Right="20" Width="550">
+        <Grid      Canvas.Top="40" Canvas.Right="20" Width="500">
             <Grid.RowDefinitions>
                 <RowDefinition Height="30"/>
+                <RowDefinition Height="36"/>
+
                 <RowDefinition Height="Auto"/>
             </Grid.RowDefinitions>
             <Border  BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,1" Background="{DynamicResource Table_BG_FirstTitle}" Padding="5,1">
@@ -77,9 +70,14 @@
                     <TextBlock  Margin="5,0,0,0" Text="EFEM Robot Operation" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_White}" HorizontalAlignment="Left" VerticalAlignment="Center"/>
                 </StackPanel>
             </Border>
+            <Border Grid.Row="1"  BorderBrush="{DynamicResource Table_BD}" BorderThickness="1,0,1,0" Background="{DynamicResource Table_BG_Content}" >
+                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
+                    <customControls:PathButton Content="Home" Height="33" Width="100" Command="{Binding RobotHomeCommand}"/>
+                </StackPanel>
+            </Border>
 
             <!--<Border  Grid.Row="1" BorderBrush="{DynamicResource Table_BD}" Background="{DynamicResource Table_BG_Content}"   >-->
-            <Grid Height="100" unity:GridOptions.ShowBorder="True" unity:GridOptions.LineBrush="Black" Grid.Row="1" Background="{DynamicResource Table_BG_Content}">
+            <Grid Height="100" unity:GridOptions.ShowBorder="True" unity:GridOptions.LineBrush="Black" Grid.Row="2" Background="{DynamicResource Table_BG_Content}">
                 <Grid.RowDefinitions>
                     <RowDefinition Height="25"/>
                     <RowDefinition/>
@@ -153,7 +151,7 @@
         </Grid>
 
 
-        <StackPanel Canvas.Top="520" Canvas.Left="1400"  Width="520">
+        <StackPanel Canvas.Top="520" Canvas.Left="1400"  Width="520" Visibility="Collapsed">
                 <Grid>
                     <Grid.RowDefinitions>
                         <RowDefinition Height="30"/>
@@ -233,7 +231,7 @@
                 </Grid>
             </StackPanel>
 
-        <StackPanel     Canvas.Left="980"  Canvas.Top="390" Width="340">
+        <StackPanel     Canvas.Left="580"  Canvas.Top="180" Width="340">
 
             <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">

+ 265 - 0
Venus/Venus_MainPages/Views/EndPointDlg.xaml

@@ -0,0 +1,265 @@
+<Window x:Class="Venus_MainPages.Views.EndPointDlg"
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:controls="http://OpenSEMI.Ctrlib.com/presentation"
+    Title="EndPoint Setting"
+        WindowStartupLocation="CenterOwner"
+        WindowStyle="SingleBorderWindow"  ShowInTaskbar="False"
+        Background="LightSkyBlue" SizeToContent="WidthAndHeight" Width="700" Height="520">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="10"></RowDefinition>
+            <RowDefinition Height="35"></RowDefinition>
+            <RowDefinition Height="35"></RowDefinition>
+            <RowDefinition Height="*"></RowDefinition>
+            <RowDefinition Height="40"></RowDefinition>
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="362"></ColumnDefinition>
+            <ColumnDefinition Width="330"></ColumnDefinition>
+        </Grid.ColumnDefinitions>
+
+        <!--<StackPanel Orientation="Horizontal" Margin="0" Width="362" Height="25" Grid.Row="1">
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="10,0,0,0" Height="25" Width="130">
+                <TextBlock Text="Select EPD Config" HorizontalAlignment="Right" FontSize="12" Margin="0,0,10,0" Foreground="White"/>
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0" Height="25" Width="190">
+                <ComboBox SelectedIndex="5"    FontSize="13"  >
+                    <ComboBoxItem>TrigAtPeek</ComboBoxItem>
+                    <ComboBoxItem>ValleyDelay15</ComboBoxItem>
+                    <ComboBoxItem>RangeIn50</ComboBoxItem>
+                    <ComboBoxItem>MonitorEPDDelay15</ComboBoxItem>
+                    <ComboBoxItem>ValleyDelay20</ComboBoxItem>
+                    <ComboBoxItem>BelowValue3</ComboBoxItem>
+                </ComboBox>
+            </Border>
+        </StackPanel>-->
+
+        <StackPanel Orientation="Horizontal" Margin="0" Width="362" Height="25" Grid.Row="2">
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="10,0,0,0" Height="25" Width="200">
+                <TextBlock Text="CCD Exposure Time(ms)" HorizontalAlignment="Right" FontSize="12" Margin="0,0,10,0" Foreground="White"/>
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0" Height="25" Width="120">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch" x:Name="textBoxInput" FontSize="12"  Text="{Binding ExposureTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="2" Height="20"/>
+            </Border>
+        </StackPanel>
+        <Grid Margin="10,0,0,10" Grid.Row="3">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"/>
+            </Grid.RowDefinitions>
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="80"></ColumnDefinition>
+                <ColumnDefinition Width="120"></ColumnDefinition>
+                <ColumnDefinition Width="120"/>
+            </Grid.ColumnDefinitions>
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0" Height="25" Grid.Row="1">
+                <TextBlock Grid.Row="1" Text="A" HorizontalAlignment="Center" FontSize="12" Height="14" Margin="0,6"   Foreground="White" />
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0" Height="25" Grid.Row="2">
+                <TextBlock Grid.Row="2" Text="B" HorizontalAlignment="Center" FontSize="12" Height="14" Margin="0,6"  Foreground="White"  />
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0" Height="25" Grid.Row="3">
+                <TextBlock Grid.Row="3" Text="C" HorizontalAlignment="Center" FontSize="12" Height="14" Margin="0,6"   Foreground="White" />
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0" Height="25" Grid.Row="4">
+                <TextBlock Grid.Row="4" Text="D" HorizontalAlignment="Center" FontSize="12" Height="14" Margin="0,6"  Foreground="White"  />
+            </Border>
+ 
+
+
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0" Height="25">
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0" Height="25" Grid.Column="1">
+                <TextBlock Grid.Row="0" Text="Wave Length(nm)" HorizontalAlignment="Center" FontSize="12" Height="15" Margin="0" Width="104" Grid.Column="1" Foreground="White"  />
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0" Height="25" Grid.Column="2">
+                <TextBlock Grid.Row="0" Grid.Column="2" Text="Binning(nm)" HorizontalAlignment="Center" FontSize="12" Height="15" Margin="0" Width="74"  Foreground="White" />
+            </Border>
+
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0" Grid.Column="1" Grid.Row="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch" Text="{Binding WaveLengthA, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch"  TextAlignment="Center" FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0" Grid.Column="1" Grid.Row="2" >
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding WaveLengthB, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch"  TextAlignment="Center"  FontSize="12" Width="115"  Height="20" Margin="2" Grid.ColumnSpan="2" Foreground="Black"/>
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0" Grid.Column="1" Grid.Row="3">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding WaveLengthC, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch"  TextAlignment="Center"  FontSize="12" Width="115"  Height="20" Margin="2" Grid.ColumnSpan="2" Foreground="Black"/>
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0" Grid.Column="1" Grid.Row="4">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding WaveLengthD, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" TextAlignment="Center"  FontSize="12"  Width="115"  Height="20" Margin="2" Grid.ColumnSpan="2" Foreground="Black"/>
+            </Border>
+ 
+
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Grid.Column="2" Margin="0" Grid.Row="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"   Text="{Binding BinningA, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch"  TextAlignment="Center" FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Grid.Column="2" Margin="0" Grid.Row="2">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"   Text="{Binding BinningB, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch"  TextAlignment="Center"  FontSize="12" Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0" Grid.Column="2" Grid.Row="3" >
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"   Text="{Binding BinningC, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch"  TextAlignment="Center"  FontSize="12" Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0" Grid.Column="2" Grid.Row="4" >
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding BinningD, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Stretch" TextAlignment="Center"  FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+
+ 
+        </Grid>
+
+        <Grid Grid.Row="1" Grid.RowSpan="3" Grid.Column="1" Margin="0,0,0,0">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="0"></RowDefinition>
+                <RowDefinition Height="0"></RowDefinition>
+                <RowDefinition Height="0"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+                <RowDefinition Height="25"></RowDefinition>
+            </Grid.RowDefinitions>
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="200"></ColumnDefinition>
+                <ColumnDefinition Width="120"></ColumnDefinition>
+            </Grid.ColumnDefinitions>
+
+            <Border Grid.Row="0" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Text="F(d)" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12" Foreground="White" />
+            </Border>
+            <Border Grid.Row="1" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Text="Pre-filter time window(ms)" HorizontalAlignment="Right"  Margin="0,0,10,0" FontSize="12" Foreground="White"/>
+            </Border>
+            <Border Grid.Row="2" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="2" Text="Post-filter time window(ms)" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12" Foreground="White"/>
+            </Border>
+            <Border Grid.Row="3" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="3" Text="Algorithm Type" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12" Foreground="White"/>
+            </Border>
+            <Border Grid.Row="4" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="4" Text="Criteria" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12" Foreground="White"/>
+            </Border>
+            <Border Grid.Row="5" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="5" Text="Delay Time(ms)" HorizontalAlignment="Right"  Margin="0,0,10,0" FontSize="12" Foreground="White" />
+            </Border>
+            <Border Grid.Row="6" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="6" Text="Validation Time(ms)" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12"  Foreground="White" />
+            </Border>
+            <Border Grid.Row="7" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="7" Text="Validation Value" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12"  Foreground="White" />
+            </Border>
+            <Border Grid.Row="8" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="8" Text="Time window(ms)" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12"  Foreground="White" />
+            </Border>
+            <Border Grid.Row="9" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="9" Text="Minimal EP Time(ms)" HorizontalAlignment="Right"  Margin="0,0,10,0" FontSize="12" Foreground="White" />
+            </Border>
+            <Border Grid.Row="10" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="10" Text="Postpone Time(ms)" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12"  Foreground="White" />
+            </Border>
+            <Border Grid.Row="11" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="11" Text="Control" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12"  Foreground="White" />
+            </Border>
+            <Border Grid.Row="12" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="12" Text="Normalization" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12"  Foreground="White" />
+            </Border>
+            <!--<Border Grid.Row="13" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="13" Text="Postpone Percent" HorizontalAlignment="Right"  Margin="0,0,10,0" FontSize="12" Foreground="White" />
+            </Border>
+            <Border Grid.Row="14" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="14" Text="Criteria Percent" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12" Foreground="White"  />
+            </Border>-->
+            <!--<Border Grid.Row="15" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="15" Text="Trigger Mode" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12" Foreground="White"  />
+            </Border>-->
+            <Border Grid.Row="16" BorderBrush="White" BorderThickness="1" Background="#376092" Margin="0">
+                <TextBlock Grid.Row="16" Text="Fault if no EP recognized" HorizontalAlignment="Right" Margin="0,0,10,0" FontSize="12" Foreground="White"  />
+            </Border>
+
+            <Border Grid.Row="0" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding Fd, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center"  TextAlignment="Center" FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"
+                                    PreviewMouseLeftButtonUp="TextBoxEx_PreviewMouseLeftButtonUp"
+                                    TextChanged="TextBoxEx_TextChanged"/>
+            </Border>
+            <Border Grid.Row="1" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding PrefilterTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center"  TextAlignment="Center" FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border Grid.Row="2" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding PostfilterTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center"  TextAlignment="Center"  FontSize="12" Width="115"  Height="20" Margin="2"  Foreground="Black"/>
+            </Border>
+            <ComboBox Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" HorizontalContentAlignment="Left"
+                      DisplayMemberPath="AlogarithmName"
+                      SelectedValuePath="AlogarithmName" ItemsSource="{Binding AlgorithmTypes, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
+                      SelectedValue="{Binding AlgorithmType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   FontSize="12" Width="121"  Height="25" Margin="0"  >
+
+            </ComboBox>
+            <Border Grid.Row="4" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding Criteria, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center" TextAlignment="Center"  FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black" />
+            </Border>
+            <Border Grid.Row="5" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding DelayTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center"  TextAlignment="Center" FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border Grid.Row="6" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding ValidationTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center"  TextAlignment="Center" FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border Grid.Row="7" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding ValidationValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center"  TextAlignment="Center"  FontSize="12" Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border Grid.Row="8" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch"  Text="{Binding TimeWindow, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center"  TextAlignment="Center"  FontSize="12" Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border Grid.Row="9" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch" Text="{Binding MinimalTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center" TextAlignment="Center"  FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border Grid.Row="10" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <controls:TextBoxEx HorizontalContentAlignment="Stretch" Text="{Binding PostponeTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center"  TextAlignment="Center" FontSize="12"  Width="115"  Height="20" Margin="2" Foreground="Black"/>
+            </Border>
+            <Border Grid.Row="11" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <CheckBox  IsChecked="{Binding Control, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   HorizontalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"  VerticalAlignment="Center"   FontSize="12"  Height="23"   />
+            </Border>
+            <Border Grid.Row="12" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <CheckBox  IsChecked="{Binding Normalization, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   HorizontalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"  VerticalAlignment="Center"   FontSize="12"  Height="23"   />
+            </Border>
+            <!--<Border Grid.Row="13" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <CheckBox  IsChecked="{Binding EnablePostponePercent, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   HorizontalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"  VerticalAlignment="Center"   FontSize="12"  Height="23"   />
+            </Border>
+            <Border Grid.Row="14" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <CheckBox  IsChecked="{Binding EnableCriterialPercent, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  HorizontalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"  VerticalAlignment="Center"   FontSize="12"  Height="23"   />
+            </Border>-->
+            <!--<Border Grid.Row="15" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <CheckBox  IsChecked="{Binding EnableEventTrigger, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   HorizontalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"  VerticalAlignment="Center"   FontSize="12"  Height="23"   />
+            </Border>-->
+ 
+            <Border Grid.Row="16" BorderBrush="White" BorderThickness="1" Background="#95B3D7" Margin="0,0,0,0" Grid.Column="1">
+                <CheckBox  IsChecked="{Binding IsFaultIfNoTrigger, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"    HorizontalAlignment="Center" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"  VerticalAlignment="Center"   FontSize="12"  Height="23"   />
+            </Border>
+
+
+        </Grid>
+
+        <StackPanel Grid.Row="4" Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="Center" Margin="232,0,250,0" Width="210">
+            <Button Content="OK" x:Name="buttonOK" Margin="0,0,5,0" Width="75" Height="30" FontSize="12" IsDefault="True" Click="buttonOK_Click" />
+            <Button Content="Cancel" x:Name="buttonCancel" Margin="50,0,5,0" Width="75" Height="30"  FontSize="12" IsCancel="True" Click="buttonCancel_Click" />
+        </StackPanel>
+    </Grid>
+</Window>

+ 122 - 0
Venus/Venus_MainPages/Views/EndPointDlg.xaml.cs

@@ -0,0 +1,122 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+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.Shapes;
+using System.Text.RegularExpressions;
+//using EPDViewerLib;
+using MECF.Framework.Common.CommonData;
+using Venus_Core;
+
+namespace Venus_MainPages.Views
+{
+    /// <summary>
+    /// Interaction logic for RecipeNameInputDlg.xaml
+    /// </summary>
+    public partial class EndPointDlg : Window
+    {
+        public EndPointConfigItem ConfigItem
+        {
+            get;
+            set;
+        }
+
+        public class AlogarithmTypeItem
+        {
+            public string AlogarithmName { get; set; }
+        }
+
+        public List<AlogarithmTypeItem> AlgorithmTypes { get; set; }
+
+        public string SelectedConfig { get; set; }
+
+        private Recipe currentRecipe;
+        private int? stepno ;
+        public EndPointDlg(string para, EndPointConfigItem endPointConfigItem,Recipe recipe)
+        {
+            InitializeComponent();
+            string[] paras = para.Split('.');
+            if (paras.Length == 2)
+            {
+                this.Title = $"RecipeName:{paras[0]},StepNo:{paras[1].ToString()}";
+                stepno = Convert.ToInt32(paras[1])-1;
+            }
+            else
+            {
+                this.Title = "Error";
+            }
+
+            AlgorithmTypes = new List<AlogarithmTypeItem>()
+            {
+                new AlogarithmTypeItem() { AlogarithmName = "Unknown"},
+                new AlogarithmTypeItem() { AlogarithmName = "Above_ABS_Value"},
+                new AlogarithmTypeItem() { AlogarithmName = "Below_ABS_Value"},
+                new AlogarithmTypeItem() { AlogarithmName = "Drop_Percent"},
+                new AlogarithmTypeItem() { AlogarithmName = "Up_Percent"},
+                new AlogarithmTypeItem() { AlogarithmName = "Range_In"},
+                new AlogarithmTypeItem() { AlogarithmName = "Gradient"},
+                new AlogarithmTypeItem() { AlogarithmName = "Peek"},
+                new AlogarithmTypeItem() { AlogarithmName = "Valley"},
+                new AlogarithmTypeItem() { AlogarithmName = "Min_Drop_Percent"},
+                new AlogarithmTypeItem() { AlogarithmName = "Min_Up_Percent"},
+                new AlogarithmTypeItem() { AlogarithmName = "Max_Drop_Percent"},
+                new AlogarithmTypeItem() { AlogarithmName = "Max_Up_Percent"},
+                new AlogarithmTypeItem() { AlogarithmName = "Rise_Fall"},
+                new AlogarithmTypeItem() { AlogarithmName = "Fall_Rise"},
+            };
+
+            Loaded += new RoutedEventHandler(EndPointDlg_Loaded);
+
+            SelectedConfig = "BelowValue3";
+            ConfigItem = endPointConfigItem;
+            currentRecipe = recipe;
+        }
+
+        void EndPointDlg_Loaded(object sender, RoutedEventArgs e)
+        {
+            DataContext = ConfigItem;
+        }
+
+        private void buttonCancel_Click(object sender, RoutedEventArgs e)
+        {
+            this.DialogResult = false;
+        }
+
+        private void buttonOK_Click(object sender, RoutedEventArgs e)
+        {
+            if (stepno != null)
+            {
+                currentRecipe.Steps[(int)stepno].EPDConfig = ConfigItem.ToValue();
+                this.DialogResult = true;
+            }
+           
+        }
+
+        private void TextBoxEx_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
+        {
+            //if (sender is TextBox txt)
+            //{
+            //    var regionList = new List<string> { "A", "B", "C", "D"};
+            //    var input = new ExpressionWindow(txt, regionList);
+            //    input.Show();
+            //}
+        }
+
+        private void TextBoxEx_TextChanged(object sender, TextChangedEventArgs e)
+        {
+            //if (sender is TextBox txt)
+            //{
+            //    var regionList = new List<string> { "A", "B", "C", "D" };
+            //    var res = ExpressionWindow.TransExpression(txt.Text, regionList);
+            //    txt.Foreground = res ? Brushes.Black : Brushes.Red;
+            //}
+        }
+    }
+}

+ 9 - 6
Venus/Venus_MainPages/Views/OperationOverView.xaml

@@ -23,12 +23,11 @@
     </UserControl.Resources>
     <Canvas>
         <Canvas >
-            <Viewbox Width="700" Height="700" Canvas.Top="100" Stretch="Fill">
+            <Viewbox Width="800" Height="800" Canvas.Top="100" Canvas.Left="-20" Stretch="Fill">
                 <Canvas Width="1000" Height="1000">
                     <userControls:MainTM Width="300" Height="250" Canvas.Left="380" Canvas.Top="90"/>
 
-                    <customControls:WaferRobotControl OriginT="PMA"    Canvas.Left="410" Canvas.Top="76"   Width="200" Height="300"   x:Name="robot"  RobotTAction="{Binding Robot1TAction}" RobotXAction="{Binding Robot1XAction}"  RobotWafer="{Binding BladeAWafer}"/>
-                    <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}"/>
@@ -40,14 +39,18 @@
                     <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:EFEM Width="600" Height="300" Canvas.Left="200" Canvas.Top="480"/>
 
-                    <customControls:WaferRobotControl OriginT="PMA"    Canvas.Left="400" Canvas.Top="473"   Width="200" Height="300"    RobotTAction="{Binding Robot3TAction}" RobotXAction="{Binding Robot3XAction}"  RobotWafer="{Binding BladeCWafer}"/>
-                    <customControls:WaferRobotControl OriginT="PMD"    Canvas.Left="400" Canvas.Top="473"   Width="200" Height="300"    RobotTAction="{Binding Robot4TAction}" RobotXAction="{Binding Robot4XAction}"  RobotWafer="{Binding BladeDWafer}"/>
+                    
                 </Canvas>
 
             </Viewbox>
+            <userControls:EFEM Width="450" Height="180" Canvas.Left="160" Canvas.Top="480" Aligner1Wafer="{Binding Aligner1Wafer}"/>
+
+            <customControls:WaferRobotControl OriginT="PMA"    Canvas.Left="310" Canvas.Top="453"   Width="160" Height="240"    RobotTAction="{Binding Robot3TAction}" RobotXAction="{Binding Robot3XAction}"  RobotWafer="{Binding EFEMBladeAWafer}"/>
+            <customControls:WaferRobotControl OriginT="PMD"    Canvas.Left="310" Canvas.Top="453"   Width="160" Height="240"    RobotTAction="{Binding Robot4TAction}" RobotXAction="{Binding Robot4XAction}"  RobotWafer="{Binding EFEMBladeBWafer}"/>
             
+            <customControls:WaferRobotControl OriginT="PMA"    Canvas.Left="310" Canvas.Top="160"   Width="160" Height="240"     RobotTAction="{Binding Robot1TAction}" RobotXAction="{Binding Robot1XAction}"  RobotWafer="{Binding TMBladeAWafer}"/>
+            <customControls:WaferRobotControl OriginT="PMD"    Canvas.Left="310" Canvas.Top="160"   Width="160" Height="240"     RobotTAction="{Binding Robot2TAction}" RobotXAction="{Binding Robot2XAction}"  RobotWafer="{Binding TMBladeBWafer}"/>
         </Canvas>
 
         <Canvas Canvas.Left="-150">

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

@@ -846,10 +846,10 @@
                     <ColumnDefinition />
                 </Grid.ColumnDefinitions>
 
-                <TextBlock   Text="参数"   FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
-                <TextBlock   Text="反馈值" Grid.Column="1" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
-                <TextBlock   Text="设定值" Grid.Column="2" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
-                <TextBlock   Text="单位"   Grid.Column="3" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
+                <TextBlock   Text="Parameter"   FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
+                <TextBlock   Text="FeedBack" Grid.Column="1" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
+                <TextBlock   Text="SetPoint" Grid.Column="2" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
+                <TextBlock   Text="Unit"   Grid.Column="3" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
 
 
 

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

@@ -875,10 +875,10 @@
                     <ColumnDefinition />
                 </Grid.ColumnDefinitions>
 
-                <TextBlock   Text="参数"   FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
-                <TextBlock   Text="反馈值" Grid.Column="1" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
-                <TextBlock   Text="设定值" Grid.Column="2" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
-                <TextBlock   Text="单位"   Grid.Column="3" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
+                <TextBlock   Text="Parameter"   FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
+                <TextBlock   Text="FeedBack" Grid.Column="1" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
+                <TextBlock   Text="SetPoint" Grid.Column="2" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
+                <TextBlock   Text="Unit"   Grid.Column="3" FontWeight="Bold" FontSize="15"   VerticalAlignment="Center"  HorizontalAlignment="Center" Foreground="White"/>
 
 
 

+ 7 - 1
Venus/Venus_RT/Devices/EFEM/JetEfem.cs

@@ -26,7 +26,7 @@ namespace Venus_RT.Devices.EFEM
         private string _waferPresence;
         private bool _bIsUnloadClamp;
         private RobotMoveInfo _robotMoveInfo = new RobotMoveInfo();
-        private readonly Loadport[] _LPMs = new Loadport[2];
+        private readonly Loadport[] _LPMs = new Loadport[3];
         private readonly SignalTower _signalT = new SignalTower();
         private readonly AsyncSocket _socket;
         private EfemMessage _currentMsg;
@@ -66,9 +66,13 @@ namespace Venus_RT.Devices.EFEM
 
             _LPMs[0] = new Loadport(ModuleName.LP1, this);
             _LPMs[1] = new Loadport(ModuleName.LP2, this);
+            _LPMs[2] = new Loadport(ModuleName.LP3, this);
+
 
             CarrierManager.Instance.SubscribeLocation(ModuleName.LP1.ToString(), 1);
             CarrierManager.Instance.SubscribeLocation(ModuleName.LP2.ToString(), 1);
+            CarrierManager.Instance.SubscribeLocation(ModuleName.LP3.ToString(), 1);
+
 
             Action<ModuleName, int> _subscribeLoc = (ModuleName module, int waferCount) => {
                 if (ModuleHelper.IsInstalled(module))
@@ -86,6 +90,8 @@ namespace Venus_RT.Devices.EFEM
             _subscribeLoc(ModuleName.Cooling2, 1);
             _subscribeLoc(ModuleName.LP1, SC.GetValue<int>("EFEM.LoadPort.SlotNumber"));
             _subscribeLoc(ModuleName.LP2, SC.GetValue<int>("EFEM.LoadPort.SlotNumber"));
+            _subscribeLoc(ModuleName.LP3, SC.GetValue<int>("EFEM.LoadPort.SlotNumber"));
+
 
         }
 

+ 2 - 0
Venus/Venus_RT/Devices/EPD/EPDClient.cs

@@ -12,6 +12,7 @@ using Aitex.Core.RT.Log;
 using Aitex.Core.Util;
 using EPD.Data;
 using Venus_RT.Devices;
+using System.Text.RegularExpressions;
 
 namespace Venus_RT.Devices.EPD
 {
@@ -94,6 +95,7 @@ namespace Venus_RT.Devices.EPD
 
         public override void RecipeStart(string recipe)
         {
+            _captured = false;
             _socketClient.RecipeStart(_channel, recipe);
             _status = EDPStatus.Running;
         }

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

@@ -55,7 +55,7 @@ namespace Aitex.RT.Device.Custom
 
         public override bool Initialize()
         {
-            _channel = SC.GetValue<int>($"{Module}.{Name}.ChannelNumber");
+            _channel = SC.GetValue<int>($"{Module}.EPD.ChannelNumber");
 
             DATA.Subscribe($"{Module}.{Name}.IsConnected", ()=> IsEPDConnected);
             DATA.Subscribe($"{Module}.{Name}.CurrentChannel", () => _channel);

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

@@ -108,6 +108,8 @@ namespace Venus_RT.Devices
         // EndPoint 
         private readonly JetEPDBase _epdClient;
         public  List<string> EPDCfgList => _epdClient?.CFGFileList;
+
+        //public List<string> EPDCfgList=new List<string>() { "1","2"};
         public  bool EPDCaptured => _epdClient.Captured;
         public  bool EPDConnected => _epdClient.IsEPDConnected;
 
@@ -150,6 +152,8 @@ namespace Venus_RT.Devices
 
             DATA.Subscribe($"{Name}.Chiller.IsOn", () => ChillerIsRunning);
             DATA.Subscribe($"{Name}.IsTurboPumpAtSpeed", () => IsTurboPumpAtSpeed);
+            DATA.Subscribe($"{Name}.EPDCfgList", () => EPDCfgList);
+
 
 
             OP.Subscribe($"{Module}.SetLiftPin", (cmd, args) => {

+ 5 - 5
Venus/Venus_RT/Modules/EFEM/EfemEntity.cs

@@ -195,11 +195,11 @@ 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, args[0]); return true; });
-            OP.Subscribe($"{ModuleName.Aligner2}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Aligner2, args[0]); return true; });
-            OP.Subscribe($"{ModuleName.Cooling1}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Cooling1, args[0]); return true; });
-            OP.Subscribe($"{ModuleName.Cooling2}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Cooling2, args[0]); return true; });
-            OP.Subscribe($"{ModuleName.Aligner1}.{EfemOperation.Lift}",     (cmd, args) => { PostMsg(MSG.Lift, ModuleName.Aligner1, args[0]); return true; });
+            OP.Subscribe($"{ModuleName.Aligner1}.{EfemOperation.Align}",    (cmd, args) => { PostMsg(MSG.Align, ModuleName.Aligner1); 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; });
+            OP.Subscribe($"{ModuleName.Aligner1}.{EfemOperation.Lift}",     (cmd, args) => { PostMsg(MSG.Lift, ModuleName.Aligner1); return true; });
             OP.Subscribe($"{ModuleName.Aligner2}.{EfemOperation.Lift}",     (cmd, args) => { PostMsg(MSG.Lift, ModuleName.Aligner2); return true; });
             OP.Subscribe($"{ModuleName.Cooling1}.{EfemOperation.Lift}",     (cmd, args) => { PostMsg(MSG.Lift, ModuleName.Cooling1); return true; });
             OP.Subscribe($"{ModuleName.Cooling2}.{EfemOperation.Lift}",     (cmd, args) => { PostMsg(MSG.Lift, ModuleName.Cooling2); return true; });

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

@@ -312,6 +312,8 @@ namespace Venus_RT.Modules.PMs
 
                 Notify($"Recipe:{CurrentRunningRecipe} start");
                 FaEvent.FaPostInfo(Module.ToString(), $"Recipe:{CurrentRunningRecipe} start");
+
+                _chamber.EPDRecipeStart(CurrentRunningRecipe);
                 return StartNewStep() == RState.Running;
             }
             
@@ -370,6 +372,8 @@ namespace Venus_RT.Modules.PMs
                     Notify($"Recipe:{CurrentRunningRecipe} finished");
                     FaEvent.FaPostInfo(Module.ToString(), $"Recipe:{CurrentRunningRecipe} finished");
                     UpdateWaferStatus();
+
+                    _chamber.EPDRecipeStop();
                     return !StartNewRecipe();
                 }
             }

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

@@ -333,7 +333,7 @@ namespace Venus_RT.Modules.PMs
             switch (step.Type)
             {
                 case StepType.EndPoint:
-                    Chamber.EPDStepStart(step.EPDConfigName, step.StepNo);
+                    Chamber.EPDStepStart(step.EPDConfig, step.StepNo);
                     break;
             }
             return RState.Running;

+ 13 - 13
Venus/Venus_Themes/UserControls/EFEM.xaml

@@ -10,8 +10,8 @@
     <Viewbox Stretch="Fill">
    
         <Border BorderThickness="0" BorderBrush="Gray">
-            <Canvas  Width="1200" Height="600">
-                <Polygon Points="0,600 0,0 1200,0 1200,600 0,600"  Stroke="Gray" StrokeThickness="20" >
+            <Canvas  Width="1500" Height="600">
+                <Polygon Points="0,600 0,0 1500,0 1500,600 0,600"  Stroke="Gray" StrokeThickness="20" >
                     <Polygon.Fill>
                         <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                             <GradientStop Color="Silver" Offset="0.0" />
@@ -20,7 +20,7 @@
                         </LinearGradientBrush>
                     </Polygon.Fill>
                 </Polygon>
-                <Ellipse  Width="500" Height="500" Canvas.Left="350" Canvas.Top="50">
+                <Ellipse  Width="500" Height="500" Canvas.Left="510" Canvas.Top="50">
                     <Ellipse.Fill>
                         <RadialGradientBrush >
                          
@@ -32,7 +32,7 @@
                 </Ellipse>
 
 
-                <Viewbox Stretch="Uniform" Width="300" Height="300" Canvas.Left="-10"  Canvas.Top="-10">
+                <Viewbox Stretch="Uniform" Width="370" Height="370" Canvas.Left="-10"  Canvas.Top="100">
 
                     <Canvas UseLayoutRounding="False"  Width="93.693" Height="112.5" HorizontalAlignment="Left" VerticalAlignment="Top">
                         <Canvas  Width="72.522" Height="72.521" Canvas.Left="10.473" Canvas.Top="28.781">
@@ -60,29 +60,29 @@
                         </Canvas>
                     </Canvas>
                 </Viewbox>
-                <Viewbox Width="180" Height="180"  Canvas.Left="50" Canvas.Top="70">
-                    <local:WaferCtrl WaferData="{Binding ElementName=efem, Path=ZuoShangWafer}"/>
+                <Viewbox Width="230" Height="230"  Canvas.Left="60" Canvas.Top="200">
+                    <local:WaferCtrl WaferData="{Binding ElementName=efem, Path=Aligner1Wafer}"/>
                 </Viewbox>
 
 
 
                 <local:Loadport Canvas.Left="10"  Canvas.Top="610" Width="300" Height="300"/>
-                <local:Loadport Canvas.Left="450" Canvas.Top="610" Width="300" Height="300"/>
-                <local:Loadport Canvas.Left="880" Canvas.Top="610" Width="300" Height="300"/>
+                <local:Loadport Canvas.Left="610" Canvas.Top="610" Width="300" Height="300"/>
+                <local:Loadport Canvas.Left="1200" Canvas.Top="610" Width="300" Height="300"/>
 
 
-                <TextBlock Text="Aligner1" FontSize="40" Canvas.Left="66"    Canvas.Top="5"/>
+                <TextBlock Text="Aligner1" FontSize="60" Canvas.Left="70"    Canvas.Top="90"/>
                 <!--<TextBlock Text="Aligner2" FontSize="40" Canvas.Left="990"  Canvas.Top="5"/>
                 <TextBlock Text="Cooling1" FontSize="40" Canvas.Left="66"    Canvas.Top="310"/>
                 <TextBlock Text="Aligner1" FontSize="40" Canvas.Left="990"  Canvas.Top="310"/>-->
 
-                <local:Foup Width="230" Height="450" Canvas.Left="44"  Canvas.Top="625" Visibility="Collapsed"/>
+                <!--<local:Foup Width="230" Height="450" Canvas.Left="44"  Canvas.Top="625" Visibility="Collapsed"/>
                 <local:Foup Width="230" Height="450" Canvas.Left="486" Canvas.Top="625" Visibility="Collapsed"/>
-                <local:Foup Width="230" Height="450" Canvas.Left="916" Canvas.Top="625" Visibility="Collapsed"/>
+                <local:Foup Width="230" Height="450" Canvas.Left="916" Canvas.Top="625" Visibility="Collapsed"/>-->
 
                 <TextBlock Text="LP1" Canvas.Left="120"  Canvas.Top="920" FontSize="55"/>
-                <TextBlock Text="LP2" Canvas.Left="560"  Canvas.Top="920" FontSize="55"/>
-                <TextBlock Text="LP3" Canvas.Left="990"  Canvas.Top="920" FontSize="55"/>
+                <TextBlock Text="LP2" Canvas.Left="700"  Canvas.Top="920" FontSize="55"/>
+                <TextBlock Text="LP3" Canvas.Left="1300"  Canvas.Top="920" FontSize="55"/>
             </Canvas>
 
         </Border>

+ 5 - 5
Venus/Venus_Themes/UserControls/EFEM.xaml.cs

@@ -18,12 +18,12 @@ namespace Venus_Themes.UserControls
         {
             InitializeComponent();
         }
-        public static readonly DependencyProperty ZuoShangWaferProperty = DependencyProperty.Register(
-     "ZuoShangWafer", typeof(WaferInfo), typeof(EFEM));
-        public WaferInfo ZuoShangWafer
+        public static readonly DependencyProperty Aligner1WaferProperty = DependencyProperty.Register(
+     "Aligner1Wafer", typeof(WaferInfo), typeof(EFEM));
+        public WaferInfo Aligner1Wafer
         {
-            get => (WaferInfo)GetValue(ZuoShangWaferProperty);
-            set => SetValue(ZuoShangWaferProperty, value);
+            get => (WaferInfo)GetValue(Aligner1WaferProperty);
+            set => SetValue(Aligner1WaferProperty, value);
         }
     }
 }

+ 96 - 0
Venus/Venus_Themes/UserControls/EFEMFrontView.xaml

@@ -0,0 +1,96 @@
+<UserControl x:Class="Venus_Themes.UserControls.EFEMFrontView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="Venus_Themes.UserControls"
+             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
+             xmlns:cal="http://www.caliburn.org"     
+             xmlns:ctrl="http://OpenSEMI.Ctrlib.com/presentation" >
+    <Grid x:Name="EFEM" HorizontalAlignment="Center" VerticalAlignment="Center">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition />
+        </Grid.RowDefinitions>
+        <TextBlock Text="EFEM Front View" FontFamily="Arial" FontSize="14" Foreground="{DynamicResource FG_Black}" VerticalAlignment="Center" HorizontalAlignment="Center">
+            <TextBlock.Style>
+                <Style>
+                    <Style.Triggers>
+                        <DataTrigger Binding="{Binding ShowTitle,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" Value="False">
+                            <Setter Property="TextBlock.Visibility" Value="Collapsed" />
+                        </DataTrigger>
+                    </Style.Triggers>
+                </Style>
+            </TextBlock.Style>
+        </TextBlock>
+        <Border Grid.Row="1" BorderThickness="1" BorderBrush="{DynamicResource FOUP_OuterBD}" Background="{DynamicResource FOUP_OuterBG}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="170" Margin="0,5"  CornerRadius="4">
+            <Grid Height="82">
+                <Rectangle Fill="{DynamicResource FOUP_InnerBG}" Margin="5" RadiusX="2" RadiusY="2"/>
+                <Rectangle Fill="{DynamicResource FOUP_OuterBG}" Margin="5,38,5,66" RadiusX="0" RadiusY="1"/>
+                <Rectangle Fill="{DynamicResource FOUP_InnerGrow}" Margin="8,8,8,76" RadiusX="2" RadiusY="2">
+                    <Rectangle.Effect>
+                        <BlurEffect Radius="15"/>
+                    </Rectangle.Effect>
+                </Rectangle>
+                <Rectangle Fill="{DynamicResource FOUP_InnerGrow}" Margin="8,46,8,8" RadiusX="2" RadiusY="2">
+                    <Rectangle.Effect>
+                        <BlurEffect Radius="15"/>
+                    </Rectangle.Effect>
+                </Rectangle>
+                <Grid Margin="0,10">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="30"/>
+                        <RowDefinition Height="30"/>
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="42"/>
+                        <ColumnDefinition />
+                    </Grid.ColumnDefinitions>
+                    <TextBlock Text="Upper" FontFamily="Arial" FontSize="12" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,7,0,10"/>
+                    <StackPanel Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
+                        <ctrl:Slot ViewType="Front" x:Name="EFEMUpper" Width="100" DataContext="{Binding UnitData.WaferManager.Wafers[0],RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" WaferStatus="{Binding WaferStatus}" SlotID="{Binding SlotID}" ModuleID="{Binding ModuleID}" SourceName="{Binding SourceName}" HorizontalAlignment="Center" VerticalAlignment="Top">
+                     
+                        </ctrl:Slot>
+                        <Rectangle Width="30" Height="3" Fill="{DynamicResource FOUP_PathBG}" Margin="0,2,0,0"  RadiusX="0.5" RadiusY="0.5">
+                            <Rectangle.Effect>
+                                <DropShadowEffect Direction="270" BlurRadius="0" ShadowDepth="1"/>
+                            </Rectangle.Effect>
+                        </Rectangle>
+                    </StackPanel>
+                    <TextBlock Grid.Row="1" Text="Lower" FontFamily="Arial" FontSize="12" Foreground="{DynamicResource FG_Black}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,10,0,7"/>
+                    <StackPanel Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" Margin="0,0,5,0">
+                        <ctrl:Slot ViewType="Front" x:Name="EFEMLower2" Width="100" Margin="0,10,0,0" DataContext="{Binding UnitData.WaferManager.Wafers[1],RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" WaferStatus="{Binding WaferStatus}" SlotID="{Binding SlotID}" ModuleID="{Binding ModuleID}" SourceName="{Binding SourceName}" HorizontalAlignment="Center" VerticalAlignment="Top">
+                           
+                        </ctrl:Slot>
+                        <Rectangle Width="30" Height="3" Fill="{DynamicResource FOUP_PathBG}" Margin="0,2,0,0"  RadiusX="0.5" RadiusY="0.5">
+                            <Rectangle.Effect>
+                                <DropShadowEffect Direction="270" BlurRadius="0" ShadowDepth="1"/>
+                            </Rectangle.Effect>
+                        </Rectangle>
+                        <!--<ctrl:Slot ViewType="Front" x:Name="EFEMLower1" Width="100" Margin="0,10,0,0" DataContext="{Binding UnitData.WaferManager.Wafers[0],RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" WaferStatus="{Binding WaferStatus}" SlotID="{Binding SlotID}" ModuleID="{Binding ModuleID}" SourceName="{Binding SourceName}" HorizontalAlignment="Center" VerticalAlignment="Top">
+                            <i:Interaction.Triggers>
+                                <i:EventTrigger EventName="SlotMouseButtonDown">
+                                    <cal:ActionMessage MethodName="OnMouseUp">
+                                        <cal:Parameter Value="$source" />
+                                        <cal:Parameter Value="$eventargs" />
+                                    </cal:ActionMessage>
+                                </i:EventTrigger>
+                                <i:EventTrigger EventName="WaferTransferStarted">
+                                    <cal:ActionMessage MethodName="OnWaferTransfer">
+                                        <cal:Parameter Value="$eventargs" />
+                                    </cal:ActionMessage>
+                                </i:EventTrigger>
+                            </i:Interaction.Triggers>
+                        </ctrl:Slot>
+                        <Rectangle Width="30" Height="3" Fill="{DynamicResource FOUP_PathBG}" Margin="0,2,0,0" RadiusX="0.5" RadiusY="0.5">
+                            <Rectangle.Effect>
+                                <DropShadowEffect Direction="270" BlurRadius="0" ShadowDepth="1"/>
+                            </Rectangle.Effect>
+                        </Rectangle>-->
+                    </StackPanel>
+                </Grid>
+            </Grid>
+        </Border>
+    </Grid>
+
+</UserControl>

+ 48 - 0
Venus/Venus_Themes/UserControls/EFEMFrontView.xaml.cs

@@ -0,0 +1,48 @@
+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;
+
+using OpenSEMI.ClientBase;
+
+namespace Venus_Themes.UserControls
+{
+    /// <summary>
+    /// EFEMFrontView.xaml 的交互逻辑
+    /// </summary>
+    public partial class EFEMFrontView : UserControl
+    {
+        public EFEMFrontView()
+        {
+            InitializeComponent();
+        }
+
+        #region UnitData (DependencyProperty)
+        public ModuleInfo UnitData
+        {
+            get { return (ModuleInfo)GetValue(UnitDataProperty); }
+            set { SetValue(UnitDataProperty, value); }
+        }
+        public static readonly DependencyProperty UnitDataProperty =
+            DependencyProperty.Register("UnitData", typeof(ModuleInfo), typeof(EFEMFrontView), new UIPropertyMetadata(null));
+
+        public bool ShowTitle
+        {
+            get { return (bool)GetValue(ShowTitleProperty); }
+            set { SetValue(ShowTitleProperty, value); }
+        }
+        public static readonly DependencyProperty ShowTitleProperty =
+            DependencyProperty.Register("ShowTitle", typeof(bool), typeof(EFEMFrontView), new UIPropertyMetadata(true));
+        #endregion  
+    }
+}

+ 7 - 7
Venus/Venus_Themes/UserControls/LoadLockLeft.xaml

@@ -12,7 +12,7 @@
     <UserControl.Resources>
         
         <Style TargetType="Rectangle" x:Key="doorAnimation">
-            <Setter Property="Width" Value="190"/>
+            <Setter Property="Width" Value="192"/>
             <Style.Triggers>
                 <DataTrigger Binding="{Binding ElementName=LeftLoadLock,Path=DoorIsOpen}" Value="True">
                     <DataTrigger.EnterActions>
@@ -25,7 +25,7 @@
                     <DataTrigger.ExitActions>
                         <BeginStoryboard>
                             <Storyboard>
-                                <DoubleAnimation  Storyboard.TargetProperty="Width" To="190" Duration="0:0:1"/>
+                                <DoubleAnimation  Storyboard.TargetProperty="Width" To="192" Duration="0:0:1"/>
                             </Storyboard>
                         </BeginStoryboard>
                     </DataTrigger.ExitActions>
@@ -33,7 +33,7 @@
             </Style.Triggers>
         </Style>
         <Style TargetType="Rectangle" x:Key="door2Animation">
-            <Setter Property="Width" Value="162"/>
+            <Setter Property="Width" Value="164"/>
             <Style.Triggers>
                 <DataTrigger Binding="{Binding ElementName=LeftLoadLock,Path=Door2IsOpen}" Value="True">
                     <DataTrigger.EnterActions>
@@ -46,7 +46,7 @@
                     <DataTrigger.ExitActions>
                         <BeginStoryboard>
                             <Storyboard>
-                                <DoubleAnimation  Storyboard.TargetProperty="Width" To="162" Duration="0:0:1"/>
+                                <DoubleAnimation  Storyboard.TargetProperty="Width" To="164" Duration="0:0:1"/>
                             </Storyboard>
                         </BeginStoryboard>
                     </DataTrigger.ExitActions>
@@ -56,7 +56,7 @@
     </UserControl.Resources>
     <Viewbox Stretch="Fill" >
         <Canvas Width="200" Height="200">
-            <Polygon Stroke="Black"  StrokeThickness="2" Points="0,200 0,80 36,0 200,90 160,160 160,200">
+            <Polygon Stroke="DimGray"  StrokeThickness="5" Points="0,200 0,80 36,0 200,90 160,160 160,200">
                 <Polygon.Fill>
                     <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                         <GradientStop Color="Silver" Offset="0.0" />
@@ -71,13 +71,13 @@
                     <RotateTransform Angle="28" CenterX="95" CenterY="10"/>
                 </Rectangle.RenderTransform>
             </Rectangle>
-            <Rectangle Style="{StaticResource doorAnimation}"  Fill="DimGray"   VerticalAlignment="Top"    Height="20"  Canvas.Top="28" Canvas.Left="28">
+            <Rectangle Style="{StaticResource doorAnimation}"  Fill="DimGray"   VerticalAlignment="Top"    Height="20"  Canvas.Top="28" Canvas.Left="27">
                 <Rectangle.RenderTransform>
                     <RotateTransform Angle="28" CenterX="95" CenterY="10"/>
                 </Rectangle.RenderTransform>
                
             </Rectangle>
-            <Rectangle Style="{StaticResource doorAnimation}" Fill="DimGray"   VerticalAlignment="Top"    Height="20"  Canvas.Top="28" Canvas.Left="28">
+            <Rectangle Style="{StaticResource doorAnimation}" Fill="DimGray"   VerticalAlignment="Top"    Height="20"  Canvas.Top="28" Canvas.Left="27">
                 <Rectangle.RenderTransform>
                     <RotateTransform Angle="210" CenterX="95" CenterY="10"/>
                 </Rectangle.RenderTransform>

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

@@ -54,7 +54,7 @@
     </UserControl.Resources>
     <Viewbox Stretch="Fill" >
         <Canvas Width="200" Height="200">
-            <Polygon Stroke="Black"  StrokeThickness="2" Points="200,200 200,80 164,0 0,90 40,160 40,200">
+            <Polygon Stroke="DimGray"  StrokeThickness="5" Points="200,200 200,80 164,0 0,90 40,160 40,200">
                 <Polygon.Fill>
                     <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                         <GradientStop Color="Silver" Offset="0.0" />

+ 7 - 0
Venus/Venus_Themes/Venus_Themes.csproj

@@ -124,6 +124,9 @@
     <Compile Include="UserControls\EFEM.xaml.cs">
       <DependentUpon>EFEM.xaml</DependentUpon>
     </Compile>
+    <Compile Include="UserControls\EFEMFrontView.xaml.cs">
+      <DependentUpon>EFEMFrontView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="UserControls\FlowPipe.xaml.cs">
       <DependentUpon>FlowPipe.xaml</DependentUpon>
     </Compile>
@@ -292,6 +295,10 @@
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
     </Page>
+    <Page Include="UserControls\EFEMFrontView.xaml">
+      <Generator>MSBuild:Compile</Generator>
+      <SubType>Designer</SubType>
+    </Page>
     <Page Include="UserControls\FlowPipe.xaml">
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>