Browse Source

Merge branch 'master' of http://git.jetplasma-oa.com/JetPlasma/PunkHPX8

chenkui 4 days ago
parent
commit
1e3a0c9c46

+ 2 - 2
Framework/Common/RecipeCenter/VpwRinseStep.cs

@@ -41,12 +41,12 @@ namespace MECF.Framework.Common.RecipeCenter
                 switch (columnName)
                 {
                     case nameof(DurationSeconds):
-                        if (DurationSeconds < 0 || DurationSeconds > 200)
+                        if (DurationSeconds <= 0 || DurationSeconds > 200)
                             return "Time must be between 0 and 200 seconds!";
                         break;
 
                     case nameof(RotationSpeed):
-                        if (RotationSpeed < 0 || RotationSpeed > 800)
+                        if (RotationSpeed <= 0 || RotationSpeed > 800)
                             return "Speed must be between 0 and 800 rpm!";
                         break;
                 }

+ 4 - 1
PunkHPX8_Core/RtState.cs

@@ -125,9 +125,11 @@ namespace PunkHPX8_Core
         Error,
         Init,
         Initialized,
+        Aborting,
         Idle,
         Initializing,
-        Purgeing
+        Purgeing,
+    
     }
     public enum VPWCellState
     {
@@ -144,5 +146,6 @@ namespace PunkHPX8_Core
         RunReciping,
         ManualReciping,
         CycleManualProcessing,
+        Aborting
     }
 }

+ 64 - 0
PunkHPX8_MainPages/ViewModels/VPWMainViewModel.cs

@@ -10,6 +10,7 @@ using MECF.Framework.Common.Persistent.VpwMain;
 using MECF.Framework.Common.RecipeCenter;
 using MECF.Framework.Common.Utilities;
 using Prism.Mvvm;
+using PunkHPX8_MainPages.Unity;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -17,6 +18,7 @@ using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Input;
 using System.Windows.Threading;
+using WaferInfo = OpenSEMI.ClientBase.WaferInfo;
 
 namespace PunkHPX8_MainPages.ViewModels
 {
@@ -86,6 +88,22 @@ namespace PunkHPX8_MainPages.ViewModels
         /// cell 2 flow
         /// </summary>
         private double _vpw2CellFlow;
+        /// <summary>
+        /// cell 1 vacuum valve
+        /// </summary>
+        private bool _vpw1VacuumValve;
+        /// <summary>
+        /// cell 2 vacuum valve
+        /// </summary>
+        private bool _vpw2VacuumValve;
+        /// <summary>
+        /// VPW1Wafer信息
+        /// </summary>
+        private WaferInfo _vPW1WaferInfo;
+        /// <summary>
+        /// VPW2Wafer信息
+        /// </summary>
+        private WaferInfo _vPW2WaferInfo;
         #endregion
 
 
@@ -191,6 +209,38 @@ namespace PunkHPX8_MainPages.ViewModels
             get { return _vpw2CellFlow; }
             set { SetProperty(ref _vpw2CellFlow, value); }
         }
+        /// <summary>
+        ///cell 1 vacuum valve
+        /// </summary>
+        public bool Vpw1VacuumValve
+        {
+            get { return _vpw1VacuumValve; }
+            set { SetProperty(ref _vpw1VacuumValve, value); }
+        }
+        /// <summary>
+        ///cell 2 vacuum valve
+        /// </summary>
+        public bool Vpw2VacuumValve
+        {
+            get { return _vpw2VacuumValve; }
+            set { SetProperty(ref _vpw2VacuumValve, value); }
+        }
+        /// <summary>
+        /// VPW1Wafer
+        /// </summary>
+        public WaferInfo VPW1WaferInfo
+        {
+            get { return _vPW1WaferInfo; }
+            set { SetProperty(ref _vPW1WaferInfo, value); }
+        }
+        /// <summary>
+        /// VPW2Wafer
+        /// </summary>
+        public WaferInfo VPW2WaferInfo
+        {
+            get { return _vPW2WaferInfo; }
+            set { SetProperty(ref _vPW2WaferInfo, value); }
+        }
         #endregion
 
         #endregion
@@ -223,6 +273,8 @@ namespace PunkHPX8_MainPages.ViewModels
             _rtDataKeys.Add($"{Module}.FsmState");
             _rtDataKeys.Add($"VPW1.DiwCellFlow");
             _rtDataKeys.Add($"VPW2.DiwCellFlow");
+            _rtDataKeys.Add($"VPW1.VacuumValve");
+            _rtDataKeys.Add($"VPW2.VacuumValve");
             if (_timer == null)
             {
                 _timer = new DispatcherTimer();
@@ -249,6 +301,18 @@ namespace PunkHPX8_MainPages.ViewModels
                     IsPurge = "Purgeing".Equals(Status) ? true : false;
                     Vpw1CellFlow = CommonFunction.GetValue<double>(_rtDataValueDic, $"VPW1.DiwCellFlow");
                     Vpw2CellFlow = CommonFunction.GetValue<double>(_rtDataValueDic, $"VPW2.DiwCellFlow");
+                    Vpw1VacuumValve = CommonFunction.GetValue<bool>(_rtDataValueDic, $"VPW1.VacuumValve");
+                    Vpw2VacuumValve = CommonFunction.GetValue<bool>(_rtDataValueDic, $"VPW2.VacuumValve");
+                    //VPW1 Wafer信息
+                    if (ModuleManager.ModuleInfos["VPW1"].WaferManager.Wafers.Count != 0)
+                    {
+                        VPW1WaferInfo = ModuleManager.ModuleInfos["VPW1"].WaferManager.Wafers[0];
+                    }
+                    //VPW2 Wafer信息
+                    if (ModuleManager.ModuleInfos["VPW2"].WaferManager.Wafers.Count != 0)
+                    {
+                        VPW2WaferInfo = ModuleManager.ModuleInfos["VPW2"].WaferManager.Wafers[0];
+                    }
                 }
             }
         }

+ 6 - 6
PunkHPX8_MainPages/ViewModels/VPWMotionViewModel.cs

@@ -170,12 +170,12 @@ namespace PunkHPX8_MainPages.ViewModels
                     CommandMotionData tmp2 = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{VPW2RotationModuleName}.{MOTION_DATA}");
                     if (tmp2 != null)
                     {
-                        tmp2.ActualVelocity = Math.Round(tmp1.ActualVelocity, 2);
-                        tmp2.ProfileVelocity = Math.Round(tmp1.ProfileVelocity, 2);
-                        tmp2.HomingVelocity = Math.Round(tmp1.HomingVelocity, 2);
-                        tmp2.HomingVelocitySlow = Math.Round(tmp1.HomingVelocitySlow, 2);
-                        tmp2.ProfileDecel = tmp1.ProfileDecel;
-                        tmp2.ProfileAccel = tmp1.ProfileAccel;
+                        tmp2.ActualVelocity = Math.Round(tmp2.ActualVelocity, 2);
+                        tmp2.ProfileVelocity = Math.Round(tmp2.ProfileVelocity, 2);
+                        tmp2.HomingVelocity = Math.Round(tmp2.HomingVelocity, 2);
+                        tmp2.HomingVelocitySlow = Math.Round(tmp2.HomingVelocitySlow, 2);
+                        tmp2.ProfileDecel = tmp2.ProfileDecel;
+                        tmp2.ProfileAccel = tmp2.ProfileAccel;
                     }
                     VPW2RotationMotionData = tmp2;
                 }

+ 51 - 0
PunkHPX8_MainPages/ViewModels/VpwRecipeViewModel.cs

@@ -33,6 +33,7 @@ namespace PunkHPX8_MainPages.ViewModels
         private RecipeNode _currentNode;
         private bool _enable = false;
         private bool _isEdit = false;
+        private string _recipeErrorReason;
         /// <summary>
         /// Wafer尺寸集合
         /// </summary>
@@ -318,10 +319,60 @@ namespace PunkHPX8_MainPages.ViewModels
             Enable = true;
             _isEdit = false;
         }
+        private bool CheckVpwRecipeRinseStepValueValid(VpwRecipe vpwRecipe,out string errorReason)
+        {
+            errorReason = "";
+            foreach (var item in vpwRecipe.VacuumRinseStep)
+            {
+                if (item.DurationSeconds <= 0 || item.DurationSeconds > 200)
+                {
+                    errorReason = "VacuumPrewet Rinse Step Time value is not in 0~200";
+                    return false;
+                }
+                if (item.RotationSpeed <= 0 || item.RotationSpeed > 800)
+                {
+                    errorReason = "VacuumPrewet Rinse Step Speed value is not in 0~800";
+                    return false;
+                }
+            }
+            foreach (var item in vpwRecipe.VentRinseStep)
+            {
+                if (item.DurationSeconds <= 0 || item.DurationSeconds > 200)
+                {
+                    errorReason = "VentPrewet Rinse Step Rinse Step Time value is not in 0~200";
+                    return false;
+                }
+                if (item.RotationSpeed <= 0 || item.RotationSpeed > 800)
+                {
+                    errorReason = "VentPrewet Rinse Step Speed value is not in 0~800";
+                    return false;
+                }
+            }
+            foreach (var item in vpwRecipe.ExtendCleanRinseStep)
+            {
+                if (item.DurationSeconds <= 0 || item.DurationSeconds > 200)
+                {
+                    errorReason = "ExtendClean Rinse Step Rinse Step Time value is not in 0~200";
+                    return false;
+                }
+                if (item.RotationSpeed <= 0 || item.RotationSpeed > 800)
+                {
+                    errorReason = "ExtendClean Rinse Step Rinse Step Speed value is not in 0~800";
+                    return false;
+                }
+            }
+
+            return true;
+        }
         private void SaveAction(object param)
         {
             if (CheckValid(_isEdit))
             {
+                if (!CheckVpwRecipeRinseStepValueValid(Recipe, out _recipeErrorReason))
+                {
+                    MessageBox.Show($"{_recipeErrorReason}", "Save Recipe", MessageBoxButton.OK, MessageBoxImage.Error);
+                    return;
+                }
                 Recipe.SaveDate = DateTime.Now;
                 try
                 {

+ 2 - 1
PunkHPX8_MainPages/Views/VPWCellView.xaml

@@ -43,7 +43,8 @@
         <Grid Grid.Row="1" Grid.Column="1">
             <UserControls:WaferOverviewPanel HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Center" 
                         IsEnabled="{Binding IsEnabled}"
-                         />
+                        WaferIDValue="{Binding WaferInfo.WaferID}" 
+                        SeqRecipeValue="{Binding WaferInfo.SequenceName}"/>
         </Grid>
         <Grid Grid.Row="2" Grid.Column="0" Grid.RowSpan="2">
             <UserControls:VPWCellStatusControl HorizontalAlignment="Left" Margin="10,-50,0,0" VerticalAlignment="Center" 

+ 4 - 0
PunkHPX8_MainPages/Views/VPWMainView.xaml

@@ -83,6 +83,10 @@
                                            IsVacuumPumpOpen="{Binding VpwMainCommonData.VacuumPumpEnable}"
                                            Cell1DIWFlow="{Binding Vpw1CellFlow}"
                                            Cell2DIWFlow="{Binding Vpw2CellFlow}"
+                                           VPW1VACValve="{Binding Vpw1VacuumValve}"
+                                           VPW2VACValve="{Binding Vpw2VacuumValve}"
+                                           VPW1WaferInfo="{Binding VPW1WaferInfo}"
+                                           VPW2WaferInfo="{Binding VPW2WaferInfo}"
                 
                 ></UserControls:VPWMainUIControl>
         </Grid>

+ 1 - 1
PunkHPX8_RT/Config/Devices/Beckhoffcfg - plctask.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <BeckhoffCfg>
-	<Controller Name="MASTER" IPAddress="192.168.0.200.1.1" PortAddress="851">
+	<Controller Name="MASTER" IPAddress="10.4.6.75.1.1" PortAddress="851">
 
 		<!-- Need to have at least one input and one output before Axis stuff -->
 

+ 1 - 0
PunkHPX8_RT/Devices/VpwCell/VpwCellDevice.cs

@@ -155,6 +155,7 @@ namespace PunkHPX8_RT.Devices.VpwCell
             DATA.Subscribe($"{Module}.{COMMON_DATA}", () => CommonData, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.{PERSISTENT_VALUE}", () => _vpwCellPersistentValue, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.DiwCellFlow", () => CommonData.DiwFlow, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe($"{Module}.VacuumValve", () => CommonData.VacuumValve, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.{LOOPDO_VALUE}", ()=> { return GetLoopDOValue(); }, SubscriptionAttribute.FLAG.IgnoreSaveDB);
         }
         /// <summary>

+ 20 - 0
PunkHPX8_RT/Modules/VpwCell/VpwCellEntity.cs

@@ -230,6 +230,7 @@ namespace PunkHPX8_RT.Modules.VpwMain
             AnyStateTransition(VPWCellMsg.Error, NullFunc, VPWCellState.Error);
             //Initialized
             Transition(VPWCellState.Error, VPWCellMsg.Initialize, InitializeAll, VPWCellState.Initializing);
+            Transition(VPWCellState.Aborting, VPWCellMsg.Initialize, InitializeAll, VPWCellState.Initializing);
             Transition(VPWCellState.Init, VPWCellMsg.Initialize, InitializeAll, VPWCellState.Initializing);
             Transition(VPWCellState.Idle, VPWCellMsg.Initialize, InitializeAll, VPWCellState.Initializing);
             Transition(VPWCellState.Initializing, FSM_MSG.TIMER, InitializeAllMonitor, VPWCellState.Idle);
@@ -241,6 +242,7 @@ namespace PunkHPX8_RT.Modules.VpwMain
             //Cycle Manual Process
             Transition(VPWCellState.Idle, VPWCellMsg.CycleProcessRecipe, CycleManualProcess, VPWCellState.CycleManualProcessing);
             Transition(VPWCellState.CycleManualProcessing, FSM_MSG.TIMER, CycleManualMonitor, VPWCellState.Idle);
+            Transition(VPWCellState.CycleManualProcessing, VPWCellMsg.Abort, RunRecipeAbort, VPWCellState.Aborting);
             //Prepare
             Transition(VPWCellState.Idle, VPWCellMsg.Prepare, Prepare, VPWCellState.Preparing);
             Transition(VPWCellState.Preparing, FSM_MSG.TIMER, PrepareMonitor, VPWCellState.WaitForRunRecipe);
@@ -298,6 +300,7 @@ namespace PunkHPX8_RT.Modules.VpwMain
         {
             OP.Subscribe($"{Module}.InitializeAll", (cmd, args) => { return CheckToPostMessage<VPWCellState, VPWCellMsg>(eEvent.ERR_VPW, Module.ToString(), (int)VPWCellMsg.Initialize); });
             OP.Subscribe($"{Module}.Prepare", (cmd, args) => { return CheckToPostMessage<VPWCellState, VPWCellMsg>(eEvent.ERR_VPW, Module.ToString(), (int)VPWCellMsg.Prepare); });
+            OP.Subscribe($"{Module}.Abort", (cmd, args) => { return CheckToPostMessage<VPWCellState, VPWCellMsg>(eEvent.ERR_VPW, Module.ToString(), (int)VPWCellMsg.Abort); });
             OP.Subscribe($"{Module}.CycleManualProcessRecipe", (cmd, args) =>
             {
                 VpwRecipe recipe = RecipeFileManager.Instance.LoadGenericityRecipe<VpwRecipe>(args[0].ToString());
@@ -510,7 +513,24 @@ namespace PunkHPX8_RT.Modules.VpwMain
             }
             return result;
         }
+        private bool RunRecipeAbort(object[] param)
+        {
+            _cycleManualProcessRoutine.Abort();
 
+            VpwMainEntity vpwMainEntity = Singleton<RouteManager>.Instance.GetModule<VpwMainEntity>("VPWMain1");
+            if (vpwMainEntity != null) 
+            {
+                //把main的状态置为暂停
+                vpwMainEntity.PostMsg(VPWMainMsg.Abort);
+            }
+           
+            //记录LotTrack
+            _runRecipeCompleteTime = DateTime.Now;
+            _cycleManualProcessRoutine.VpwLotTrackHeaderDatas.ProcessTime = (_runRecipeCompleteTime - _runRecipeStartTime).TotalSeconds.ToString("F2");
+            VpwLotTrackUtil.ExportVpwLotTrack(Module.ToString(), _cycleManualProcessRoutine.VpwLotTrackDatas,
+                _cycleManualProcessRoutine.VpwLotTrackHeaderDatas, IsAuto, _isRetry);
+            return true;
+        }
         #endregion
 
         #region VpwCell Retry

+ 13 - 1
PunkHPX8_RT/Modules/VpwMain/VpwMainEntity.cs

@@ -5,6 +5,7 @@ using Aitex.Core.RT.Log;
 using Aitex.Core.RT.OperationCenter;
 using Aitex.Core.Util;
 using Aitex.Core.Utilities;
+using CyberX12_RT.Modules.VpwCell;
 using MECF.Framework.Common.Equipment;
 using MECF.Framework.Common.Persistent.Reservoirs;
 using MECF.Framework.Common.Persistent.VpwMain;
@@ -152,10 +153,12 @@ namespace PunkHPX8_RT.Modules.VpwMain
             fsm = new StateMachine<VpwMainEntity>(Module.ToString(), (int)VPWMainState.Init, 100);
             fsm.EnableRepeatedMsg(true);
             AnyStateTransition(VPWMainMsg.Error, NullFunc, VPWMainState.Error);
+            AnyStateTransition(VPWMainMsg.Abort, PurgeAbort, VPWMainState.Aborting);
             //Initialized
             Transition(VPWMainState.Error, VPWMainMsg.Initialize, InitializeAll, VPWMainState.Initializing);
             Transition(VPWMainState.Init, VPWMainMsg.Initialize, InitializeAll, VPWMainState.Initializing);
             Transition(VPWMainState.Idle, VPWMainMsg.Initialize, InitializeAll, VPWMainState.Initializing);
+            Transition(VPWMainState.Aborting, VPWMainMsg.Initialize, InitializeAll, VPWMainState.Initializing);
             Transition(VPWMainState.Initializing, FSM_MSG.TIMER, InitializeAllMonitor, VPWMainState.Idle);
             Transition(VPWMainState.Error, VPWMainMsg.EnterIdle, NullFunc, VPWMainState.Idle);
             Transition(VPWMainState.Init, VPWMainMsg.EnterIdle, NullFunc, VPWMainState.Idle);
@@ -166,12 +169,15 @@ namespace PunkHPX8_RT.Modules.VpwMain
             Transition(VPWMainState.Idle, VPWMainMsg.Purge, Purge, VPWMainState.Purgeing);
             Transition(VPWMainState.Purgeing, VPWMainMsg.Purge, NullFunc, VPWMainState.Purgeing);
             Transition(VPWMainState.Purgeing, FSM_MSG.TIMER, PurgeMonitor, VPWMainState.Idle);
+           
+
+
 
             EnumLoop<VPWMainState>.ForEach((item) => { fsm.MapState((int)item, item.ToString()); });
 
             EnumLoop<VPWMainMsg>.ForEach((item) => { fsm.MapMessage((int)item, item.ToString()); });
         }
-        /// <summary>
+        /// <summary
         /// 初始化参数
         /// </summary>
         private void InitializeParameter()
@@ -265,6 +271,12 @@ namespace PunkHPX8_RT.Modules.VpwMain
             }
             return ret == RState.End;
         }
+
+        private bool PurgeAbort(object[] param)
+        {
+            _vpwPurgeRoutine.Abort();
+            return true;
+        }
         #endregion
 
 

+ 2 - 1
PunkHPX8_Themes/UserControls/VPWMainStateControl.xaml

@@ -14,6 +14,7 @@
         <converters:BoolToColor x:Key="boolToColor"></converters:BoolToColor>
         <converters:BoolToColor2 x:Key="boolToColor2"></converters:BoolToColor2>
         <converters:BoolToColor6 x:Key="boolToColor6"></converters:BoolToColor6>
+        <converters:BoolToYellowColor2  x:Key="boolToYellowColor2"></converters:BoolToYellowColor2>
         <converters:BoolToBool x:Key="boolToBool"></converters:BoolToBool>
     </UserControl.Resources>
     <Grid>
@@ -55,7 +56,7 @@
         </Grid>
         <Grid Grid.Row="1" Grid.Column="1">
             <Ellipse Grid.Column="1" Width="16" Height="16" HorizontalAlignment="Center" VerticalAlignment="Center" Stroke="Silver"
-              Fill="{Binding FluidInContainment, Converter={StaticResource boolToColor}, ElementName=self}"/>
+              Fill="{Binding FluidInContainment, Converter={StaticResource boolToYellowColor2}, ElementName=self}"/>
         </Grid>
         <Grid Grid.Row="4" Grid.Column="1">
             <Ellipse Grid.Column="1" Width="16" Height="16" HorizontalAlignment="Center" VerticalAlignment="Center" Stroke="Silver"

+ 11 - 0
PunkHPX8_Themes/UserControls/VPWMainUIControl.xaml

@@ -301,5 +301,16 @@
             </Border>
         </Grid>
 
+        <Canvas Height="30" Width="150" Canvas.Left="228" Canvas.Top="354" RenderTransformOrigin="0.5,0.5" Panel.ZIndex="2">
+            <Viewbox   Canvas.Left="5"  Canvas.Top="2.5" HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="5">
+                <local:VPWWaferCtrl Width="140" Height="25" WaferData="{Binding ElementName=self, Path=VPW1WaferInfo}"/>
+            </Viewbox>
+        </Canvas>
+        <Canvas Height="30" Width="150" Canvas.Left="488" Canvas.Top="354" RenderTransformOrigin="0.5,0.5" Panel.ZIndex="2">
+            <Viewbox   Canvas.Left="5"  Canvas.Top="2.5" HorizontalAlignment="Left" VerticalAlignment="Top" Panel.ZIndex="5">
+                <local:VPWWaferCtrl Width="140" Height="25" WaferData="{Binding ElementName=self, Path=VPW2WaferInfo}"/>
+            </Viewbox>
+        </Canvas>
+
     </Canvas>
 </UserControl>

+ 39 - 4
PunkHPX8_Themes/UserControls/VPWMainUIControl.xaml.cs

@@ -13,6 +13,7 @@ using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using System.Windows.Navigation;
 using System.Windows.Shapes;
+using OpenSEMI.ClientBase;
 
 namespace PunkHPX8_Themes.UserControls
 {
@@ -231,6 +232,40 @@ namespace PunkHPX8_Themes.UserControls
             }
         }
 
+        public static readonly DependencyProperty VPW1WaferInfoProperty = DependencyProperty.Register(
+            "VPW1WaferInfo", typeof(WaferInfo), typeof(VPWMainUIControl));
+        /// <summary>
+        /// VPW1WaferInfo
+        /// </summary>
+        public WaferInfo VPW1WaferInfo
+        {
+            get
+            {
+                return (WaferInfo)this.GetValue(VPW1WaferInfoProperty);
+            }
+            set
+            {
+                this.SetValue(VPW1WaferInfoProperty, value);
+            }
+        }
+
+        public static readonly DependencyProperty VPW2WaferInfoProperty = DependencyProperty.Register(
+      "VPW2WaferInfo", typeof(WaferInfo), typeof(VPWMainUIControl));
+        /// <summary>
+        /// VPW2WaferInfo
+        /// </summary>
+        public WaferInfo VPW2WaferInfo
+        {
+            get
+            {
+                return (WaferInfo)this.GetValue(VPW2WaferInfoProperty);
+            }
+            set
+            {
+                this.SetValue(VPW2WaferInfoProperty, value);
+            }
+        }
+
         private void OpenDIWProcessValve_Click(object sender, RoutedEventArgs e)
         {
             InvokeClient.Instance.Service.DoOperation($"{ModuleName}.DiwProcessOn");
@@ -264,21 +299,21 @@ namespace PunkHPX8_Themes.UserControls
 
         private void OpenVPW1VACValve_Click(object sender, RoutedEventArgs e)
         {
-            //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.DegasAdjustOn");
+            InvokeClient.Instance.Service.DoOperation($"VPW1.VacuumValveOn");
         }
         private void CloseVPW1VACValve_Click(object sender, RoutedEventArgs e)
         {
-            //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.DegasAdjustOn");
+            InvokeClient.Instance.Service.DoOperation($"VPW1.VacuumValveOff");
         }
 
 
         private void OpenVPW2VACValve_Click(object sender, RoutedEventArgs e)
         {
-            //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.DegasAdjustOn");
+            InvokeClient.Instance.Service.DoOperation($"VPW2.VacuumValveOn");
         }
         private void CloseVPW2VACValve_Click(object sender, RoutedEventArgs e)
         {
-            //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.DegasAdjustOn");
+            InvokeClient.Instance.Service.DoOperation($"VPW2.VacuumValveOff");
         }
     }
 }

+ 1 - 1
PunkHPX8_Themes/UserControls/VPWWaferCtrl.xaml

@@ -8,7 +8,7 @@
              xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"   
              xmlns:ctrl="http://OpenSEMI.Ctrlib.com/presentation">
     <Grid RenderTransformOrigin="0.5,0.5">
-        <ctrl:Slot ViewType="Front" WaferStatus="{Binding ElementName=self, Path=WaferData.WaferStatus}" 
+        <ctrl:Slot ViewType="Front" WaferStatus="{Binding ElementName=self, Path=WaferData.WaferStatus}"  SlotWidth="140"
                               SlotID="{Binding ElementName=self, Path=WaferData.SlotID}" 
                               ModuleID="{Binding ElementName=self, Path=WaferData.ModuleID}" 
                               SourceName="{Binding ElementName=self, Path=WaferData.SourceName}"