Browse Source

add Process in PMChamber for SEOpertaion

zhouhr 1 year ago
parent
commit
a5ba0d3c6b

+ 39 - 3
Venus/Venus_MainPages/ViewModels/VenusSeOperationOverViewModel.cs

@@ -49,7 +49,9 @@ namespace Venus_MainPages.ViewModels
         private bool m_VCEOutDoorIsOpen;
         private Dictionary<string, object> m_RtDataValues = new Dictionary<string, object>();
         private List<string> m_RtDataKeys = new List<string>();
-
+        private double m_PMAPercent;
+        private double m_PMBPercent;
+        private double m_PMCPercent;
         private int m_PickNum;
 
         private WaferAssociationInfo m_VCEwaferAssociation;
@@ -57,6 +59,21 @@ namespace Venus_MainPages.ViewModels
         #endregion
 
         #region 属性
+        public double PMAPercent
+        {
+            get { return m_PMAPercent; }
+            set { SetProperty(ref m_PMAPercent, value); }
+        }
+        public double PMBPercent
+        {
+            get { return m_PMBPercent; }
+            set { SetProperty(ref m_PMBPercent, value); }
+        }
+        public double PMCPercent
+        {
+            get { return m_PMCPercent; }
+            set { SetProperty(ref m_PMCPercent, value); }
+        }
         public int PickNum
         {
             get { return m_PickNum; }
@@ -293,7 +310,6 @@ namespace Venus_MainPages.ViewModels
         {
             //页面不刷错的方法 页面中的PM做成List的形式 通过itemsource显示 同时提供各个位置的pm点位 旋转角度
             VCE1WaferCount = 25;
-            addDataKeys();
             string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
 
             PMAIsInstalled = allModules.Contains("PMA");
@@ -302,6 +318,7 @@ namespace Venus_MainPages.ViewModels
             VCEIsInstalled = allModules.Contains("VCE1");
 
 
+            addDataKeys();
             RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
 
             VCEDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.VCESlitDoorClosed");
@@ -460,7 +477,23 @@ namespace Venus_MainPages.ViewModels
             m_RtDataKeys.Add($"SEScheduler.CycleSetPoint");
             m_RtDataKeys.Add($"SEScheduler.CycleCount");
             m_RtDataKeys.Add($"SEScheduler.ThroughPut");
-            
+            if (PMAIsInstalled)
+            {
+
+                m_RtDataKeys.Add($"PMA.ProcessHighPressure");
+                m_RtDataKeys.Add($"PMA.VentingFlag");
+            }
+            if (PMBIsInstalled)
+            {
+                m_RtDataKeys.Add($"PMB.ProcessHighPressure");
+                m_RtDataKeys.Add($"PMB.VentingFlag");
+            }
+            if (PMCIsInstalled)
+            {
+                m_RtDataKeys.Add($"PMC.ProcessHighPressure");
+                m_RtDataKeys.Add($"PMC.VentingFlag");
+            }
+
         }
 
         private void onHomeAll()
@@ -572,16 +605,19 @@ namespace Venus_MainPages.ViewModels
                 {
                     PMAModuleInfo = ModuleManager.ModuleInfos["PMA"];
                     PMAWafer = PMAModuleInfo.WaferManager.Wafers[0];
+                    PMAPercent = CommonFunction.GetValue<double>(RtDataValues, "PMA.ProcessHighPressure") * 248 / 760000;
                 }
                 if (PMBIsInstalled == true)
                 {
                     PMBModuleInfo = ModuleManager.ModuleInfos["PMB"];
                     PMBWafer = PMBModuleInfo.WaferManager.Wafers[0];
+                    PMBPercent = CommonFunction.GetValue<double>(RtDataValues, "PMB.ProcessHighPressure") * 248 / 760000;
                 }
                 if (PMCIsInstalled == true)
                 {
                     PMCModuleInfo = ModuleManager.ModuleInfos["PMC"];
                     PMCWafer = PMCModuleInfo.WaferManager.Wafers[0];
+                    PMCPercent = CommonFunction.GetValue<double>(RtDataValues, "PMC.ProcessHighPressure") * 248 / 760000;
                 }
                 if (VCEIsInstalled == true)
                 {

File diff suppressed because it is too large
+ 6 - 4
Venus/Venus_MainPages/Views/VenusSeOperationOverView.xaml


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

@@ -595,7 +595,7 @@ namespace Venus_RT.Modules.PMs
             DATA.Subscribe($"{Module}.IsInit", () => IsInit, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.IsOnline", () => _isOnline, SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
-
+            DATA.Subscribe($"{Module}.VentingFlag",()=>_ventRoutine.VentingFlag);
             //DATA.Subscribe($"{Module}.GetLeakCheckDatas", () => LeakCheckDataRecorder.GetAllLeakCheckData(Module.ToString()));
 
 

+ 17 - 1
Venus/Venus_RT/Modules/PMs/VentRoutine.cs

@@ -3,6 +3,7 @@ using Aitex.Core.RT.SCCore;
 using Venus_RT.Devices;
 using MECF.Framework.Common.Routine;
 using Venus_Core;
+using Aitex.Core.RT.DataCenter;
 
 namespace Venus_RT.Modules.PMs
 {
@@ -22,9 +23,13 @@ namespace Venus_RT.Modules.PMs
         private double _ventTimeDelay = 1;  
         private int _checkATMTimeout = 90;
 
+        public bool VentingFlag=> _ventingflag;
+        private bool _ventingflag = false;
+
         public VentRoutine(JetPMBase chamber) : base(chamber)
         {
             Name = "PM Vent";
+            
         }
 
         public RState Start(params object[] objs)
@@ -45,7 +50,16 @@ namespace Venus_RT.Modules.PMs
                 _checkATMTimeout = SC.GetValue<int>($"{Module}.CheckATMTimeout");
                 _ventTimeDelay = SC.GetValue<double>($"{Module}.OverVentTime");
 
-                return Runner.Start(Module, Name);
+                if (Runner.Start(Module, Name) == RState.Running)
+                {
+                    _ventingflag = true;
+                    return RState.Running;
+                }
+                else
+                {
+                    _ventingflag = false;
+                    return RState.Failed;
+                }
             }
 
             return RState.Failed;
@@ -58,6 +72,8 @@ namespace Venus_RT.Modules.PMs
                 .Delay(VentStep.kDelay_2,          (int)_ventTimeDelay)
                 .End(VentStep.kCloseVentValves,    CloseVentGasFinalValves,                                    _delay_2s);
 
+            _ventingflag = Runner.Status == RState.Running;
+
             return Runner.Status;
         }
 

+ 42 - 3
Venus/Venus_Themes/UserControls/TMChamber.xaml

@@ -31,7 +31,16 @@
             </Style.Triggers>
         </Style>
         <converters:BoolToBool x:Key="BoolToBool"/>
+        <Storyboard x:Key="WaterStoryboard">
+            <PointAnimation Storyboard.TargetName="bs_Water" Storyboard.TargetProperty="Point1" From="15,-10" To="15,10" Duration="00:00:1" AutoReverse="True" RepeatBehavior="Forever"></PointAnimation>
+            <PointAnimation Storyboard.TargetName="bs_Water" Storyboard.TargetProperty="Point2" From="35,10" To="35,-10" Duration="00:00:2.5" AutoReverse="True" RepeatBehavior="Forever"></PointAnimation>
+        </Storyboard>
     </UserControl.Resources>
+    <UserControl.Triggers>
+        <EventTrigger RoutedEvent="Loaded">
+            <BeginStoryboard Storyboard="{StaticResource WaterStoryboard}"></BeginStoryboard>
+        </EventTrigger>
+    </UserControl.Triggers>
     <Viewbox Stretch="Fill">
         <Viewbox.RenderTransform>
             <TransformGroup>
@@ -42,12 +51,40 @@
 
 
             <Canvas Width="200" Height="200" Grid.Row="1">
+                <Border Canvas.Top="-54" Canvas.Left="-5" Height="44" Width="270" Background="Transparent" BorderBrush="Black" CornerRadius="3" BorderThickness="3" Visibility="{Binding ElementName=tmChamber,Path=IsVenting,Converter={StaticResource bool2VisibilityConverter}}">
+                    <Border Background="Transparent" BorderBrush="Gray" CornerRadius="1" BorderThickness="1">
+                        <StackPanel Margin="-160,0,0,0" Height="44">
+
+                            <StackPanel   Width="49" Margin="-40 0 45 10">
+                                <StackPanel.RenderTransform>
+                                    <RotateTransform Angle="-90" CenterX="19.5" CenterY="10"></RotateTransform>
+                                </StackPanel.RenderTransform>
+                                <!--矩形-->
+                                <Rectangle x:Name="rec_Water"  Fill="#42a5f5" Height="{Binding ElementName=tmChamber,Path=PercentValue,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="50" Margin="-20,6,0,0"/>
+                                <!--水波-->
+                                <Path Fill="#42a5f5" Margin="0,0,0,-1" Height="20" Stretch="Fill">
+                                    <Path.RenderTransform>
+                                        <RotateTransform Angle="180" CenterX="19.5" CenterY="10"></RotateTransform>
+                                    </Path.RenderTransform>
+                                    <Path.Data>
+                                        <PathGeometry>
+                                            <PathFigure StartPoint="0,0">
+                                                <BezierSegment x:Name="bs_Water" Point1="15,-5" Point2="35,5"  Point3="50,0"></BezierSegment>
+                                                <PolyLineSegment Points="50,10 0,10"></PolyLineSegment>
+                                            </PathFigure>
+                                        </PathGeometry>
+                                    </Path.Data>
+                                </Path>
+                            </StackPanel>
+                        </StackPanel>
+                    </Border>
+                </Border>
                 <TextBlock  Canvas.Top="-50" Canvas.Left="-5" FontSize="30" Visibility="{Binding ElementName=tmChamber,Path=PMVisibility}">
                     <TextBlock.Text>
                         <MultiBinding  StringFormat=" {0}({1}mtorr)">
                             <Binding  ElementName="tmChamber" Path="Name"></Binding>
                             <Binding  ElementName="tmChamber" Path="PressureValue"></Binding>
-                        </MultiBinding> 
+                        </MultiBinding>
                     </TextBlock.Text>
                 </TextBlock>
                 <Polygon Stroke="Black"  StrokeThickness="2" Points="00,200 0,3 3,0 197,0 200,3 200,200" Visibility="{Binding ElementName=tmChamber,Path=PMVisibility}">
@@ -63,7 +100,9 @@
                 <!--<Path  Stroke="Gray"  Canvas.Left="-20" StrokeThickness="2" Visibility="{Binding ElementName=tmChamber,Path=PMVisibility}">
                     <Path.Data>
                         <GeometryGroup>
-                            --><!--<PathGeometry Figures="M 200,100 A 80,80 1 1 1 200,99.9"/>--><!--
+                            -->
+                <!--<PathGeometry Figures="M 200,100 A 80,80 1 1 1 200,99.9"/>-->
+                <!--
                             <PathGeometry Figures="M 190,100 A 70,70 1 1 1 190,99.9" />
                             <PathGeometry Figures="M 180,100 A 60,60 1 1 1 180,99.9" />
                             <PathGeometry Figures="M 170,100 A 50,50 1 1 1 170,99.9" />
@@ -125,7 +164,7 @@
                 <Viewbox Width="126" Height="126"  Canvas.Left="39" Canvas.Top="38">
                     <local:WaferCtrl WaferData="{Binding ElementName=tmChamber, Path=RobotWafer}"/>
                 </Viewbox>
-               
+
             </Canvas>
 
         </Border>

+ 26 - 3
Venus/Venus_Themes/UserControls/TMChamber.xaml.cs

@@ -1,4 +1,6 @@
 using OpenSEMI.ClientBase;
+using System;
+using System.Collections.Generic;
 using System.Windows;
 using System.Windows.Controls;
 using Venus_Themes.Unity;
@@ -23,6 +25,17 @@ namespace Venus_Themes.UserControls
             set { this.SetValue(RotateTransformValueProperty, value); }
         }
 
+        public static readonly DependencyProperty IsVentingProperty = DependencyProperty.Register(
+            "IsVenting", typeof(bool), typeof(TMChamber));
+        public bool IsVenting
+        {
+            get { return (bool)this.GetValue(IsVentingProperty); }
+            set
+            {
+                this.SetValue(IsVentingProperty, value);
+            }
+        }
+
         public static readonly DependencyProperty DoorIsOpenProperty = DependencyProperty.Register(
         "DoorIsOpen", typeof(bool), typeof(TMChamber));
 
@@ -62,13 +75,23 @@ namespace Venus_Themes.UserControls
         }
 
         public static readonly DependencyProperty PressureValueProperty = DependencyProperty.Register(
-       "PressureValue", typeof(int), typeof(TMChamber));
+       "PressureValue", typeof(double), typeof(TMChamber));
 
-        public int PressureValue
+        public double PressureValue
         {
-            get { return (int)this.GetValue(PressureValueProperty); }
+            get { return (double)this.GetValue(PressureValueProperty); }
             set { this.SetValue(PressureValueProperty, value); }
         }
+
+        public static readonly DependencyProperty PercentValueProperty = DependencyProperty.Register(
+       "PercentValue", typeof(double), typeof(TMChamber));
+
+        public double PercentValue
+        {
+            get { return (double)this.GetValue(PercentValueProperty); }
+            set { this.SetValue(PercentValueProperty, value); }
+        }
+
         public static readonly DependencyProperty IsShowPressureValueProperty = DependencyProperty.Register(
         "IsShowPressureValue", typeof(bool), typeof(TMChamber),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));