Sfoglia il codice sorgente

online/offline tobview状态颜色变化
修复tm robot旋转bug

lixiang 1 anno fa
parent
commit
894ff76d5e

+ 19 - 2
Venus/Venus_Core/ProcessUnitDefine.cs

@@ -163,9 +163,7 @@ namespace Venus_Core
         public int Gas8 { get; set; }
 
         [IsCanConfigIgnore]
-
         public bool EnableRamp { get; set; }
-        [System.Xml.Serialization.XmlIgnore]
         public int Gas1Target { get; set; }
         public int Gas2Target { get; set; }
         public int Gas3Target { get; set; }
@@ -175,6 +173,25 @@ namespace Venus_Core
         public int Gas7Target { get; set; } 
         public int Gas8Target { get; set; }
         public int FlowRatie { get; set; }
+        public bool EnableTolerance { get; set; }
+        public ToleranceMode ToleranceMode { get; set;}
+        public int Gas1ToleranceValue { get; set; }
+        public int Gas1TolerancePercent { get; set; }
+        public int Gas2ToleranceValue { get; set; }
+        public int Gas2TolerancePercent { get; set; }
+        public int Gas3ToleranceValue { get; set; }
+        public int Gas3TolerancePercent { get; set; }
+        public int Gas4ToleranceValue { get; set; }
+        public int Gas4TolerancePercent { get; set; }
+        public int Gas5ToleranceValue { get; set; }
+        public int Gas5TolerancePercent { get; set; }
+        public int Gas6ToleranceValue { get; set; }
+        public int Gas6TolerancePercent { get; set; }
+        public int Gas7ToleranceValue { get; set; }
+        public int Gas7TolerancePercent { get; set; }
+        public int Gas8ToleranceValue { get; set; }
+        public int Gas8TolerancePercent { get; set; }
+
     }
 
     public class Kepler2200GasControlUnit : ProcessUnitBase

+ 11 - 6
Venus/Venus_Core/Recipe.cs

@@ -59,6 +59,11 @@ namespace Venus_Core
         Step,
         Cycle
     }
+    public enum ToleranceMode
+    {
+        Value,
+        Percent
+    }
     public class RecipeHead : INotifyPropertyChanged
     {
         private string m_name;
@@ -243,7 +248,7 @@ namespace Venus_Core
         public Func<RecipeStep, RState> ender;
 
 
-        private int m_StepNo=1;
+        private int m_StepNo = 1;
         [IsOnlyRead]
         public int StepNo
         {
@@ -375,7 +380,7 @@ namespace Venus_Core
 
             return RState.Running;
         }
-        public RState Start(int steps,int currentstep)
+        public RState Start(int steps, int currentstep)
         {
             starter(this);
 
@@ -606,7 +611,7 @@ namespace Venus_Core
             recipe.Header.LastModifiedBy = "Admin";
             recipe.Steps = new ObservableCollection<RecipeStep>();
             RecipeStep recipeStep = new RecipeStep();
-            recipeStep.LstUnit = GetAllUnits(currentChamber,recipeType);
+            recipeStep.LstUnit = GetAllUnits(currentChamber, recipeType);
             recipe.Steps.Add(recipeStep);
 
             var recipeString = JsonConvert.SerializeObject(recipe);
@@ -646,7 +651,7 @@ namespace Venus_Core
             }
             return LstUnit;
         }
-        public static ObservableCollection<Object> GetAllUnits(JetChamber jetChamber,RecipeType recipeType)
+        public static ObservableCollection<Object> GetAllUnits(JetChamber jetChamber, RecipeType recipeType)
         {
             ObservableCollection<Object> LstUnit = new ObservableCollection<object>();
             switch (jetChamber)
@@ -670,7 +675,7 @@ namespace Venus_Core
                             LstUnit.Add(obj);
                         }
                     }
-                    
+
                     break;
 
                 case JetChamber.Kepler2300:
@@ -691,7 +696,7 @@ namespace Venus_Core
                             var obj = System.Activator.CreateInstance(t);
                             LstUnit.Add(obj);
                         }
-                    }           
+                    }
                     break;
                 case JetChamber.Kepler2200A:
                     foreach (var item in Enum.GetValues(typeof(Kepler2200AUnits)))

+ 1 - 0
Venus/Venus_Core/VenusDevice.cs

@@ -328,6 +328,7 @@
         PMPlace,
         Extend,
         Retract,
+        Goto,
 
         RunRecipe,
 

+ 1 - 1
Venus/Venus_MainPages/Converters/IsOnlineToColorConverter.cs

@@ -11,7 +11,7 @@ namespace Venus_MainPages.Converters
             var item = (bool)value;
             if (item == true)
             {
-                return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#7FFF00"));
+                return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#396293"));
             }
             else
             {

+ 31 - 26
Venus/Venus_MainPages/ViewModels/OperationOverViewModel.cs

@@ -697,6 +697,34 @@ namespace Venus_MainPages.ViewModels
             {
                 return;
             }
+
+            #region Rotating
+            if (oldValue.Action == RobotAction.None && (newValue.Action == RobotAction.Rotating))
+            {
+                var TMRobotMoveActionBladeTarget = newValue.BladeTarget;
+                if (TMRobotMoveActionBladeTarget != null)
+                {
+                    RobotTarget = TMRobotMoveActionBladeTarget.ToString();
+                }
+                else
+                {
+                    return;
+                }
+                var values = RobotTarget.Split('.');
+                var arm = values[0];
+                var module = values[1];
+                if (arm == "ArmA")
+                {
+                    Robot1TAction = (WaferRobotTAction)Enum.Parse(typeof(WaferRobotTAction), module, true);
+                }
+                else if (arm == "ArmB")
+                {
+                    Robot2TAction = (WaferRobotTAction)Enum.Parse(typeof(WaferRobotTAction), module, true);
+                }
+                return;
+            }
+            #endregion
+
             #region pick 和 place LL
             if (oldValue.Action == RobotAction.None && (newValue.Action == RobotAction.Placing || newValue.Action == RobotAction.Picking))
             {
@@ -735,6 +763,7 @@ namespace Venus_MainPages.ViewModels
                     }
                     Robot2XAction = WaferRobotXAction.Retract;
                 }
+                return;
             }
 
             #endregion
@@ -766,6 +795,7 @@ namespace Venus_MainPages.ViewModels
                     await Task.Delay(1500);
                     Robot2XAction = WaferRobotXAction.Extend;
                 }
+                return;
 
             }
             if (oldValue.Action == RobotAction.None && newValue.Action == RobotAction.Retracting)
@@ -789,35 +819,10 @@ namespace Venus_MainPages.ViewModels
                 {
                     Robot2XAction = WaferRobotXAction.Retract;
                 }
-
+                return;
             }
             #endregion
 
-            #region Rotating
-            if (oldValue.Action == RobotAction.None && (newValue.Action == RobotAction.Rotating))
-            {
-                var TMRobotMoveActionBladeTarget = newValue.BladeTarget;
-                if (TMRobotMoveActionBladeTarget != null)
-                {
-                    RobotTarget = TMRobotMoveActionBladeTarget.ToString();
-                }
-                else
-                {
-                    return;
-                }
-                var values = RobotTarget.Split('.');
-                var arm = values[0];
-                var module = values[1];
-                if (arm == "ArmA")
-                {
-                    Robot1TAction = (WaferRobotTAction)Enum.Parse(typeof(WaferRobotTAction), module, true);                   
-                }
-                else if (arm == "ArmB")
-                {
-                    Robot2TAction = (WaferRobotTAction)Enum.Parse(typeof(WaferRobotTAction), module, true);
-                }
-            }
-            #endregion
 
         }
         private async void EFEMRobotMoveInfoChanged(RobotMoveInfo oldValue, RobotMoveInfo newValue)

+ 13 - 9
Venus/Venus_MainPages/ViewModels/TMViewModel.cs

@@ -947,15 +947,19 @@ namespace Venus_MainPages.ViewModels
         }
         private void OnGoto()
         {
-            if (GoToSelectedBlade == TMBlade.Blade1)
-            {
-                Robot1TAction = WaferRobotTAction;
-            }
-            else if (GoToSelectedBlade == TMBlade.Blade2)
-            { 
-                Robot2TAction = WaferRobotTAction;
-            }
-           
+            //if (GoToSelectedBlade == TMBlade.Blade1)
+            //{
+            //    Robot1TAction = WaferRobotTAction;
+            //}
+            //else if (GoToSelectedBlade == TMBlade.Blade2)
+            //{ 
+            //    Robot2TAction = WaferRobotTAction;
+            //}
+            var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), WaferRobotTAction.ToString(), true);
+            var selectedHand = (Hand)Enum.Parse(typeof(Hand), GoToSelectedBlade.ToString(), true);
+            InvokeClient.Instance.Service.DoOperation($"TM.{RtOperation.Goto}", moduleName, 0, selectedHand);
+
+
         }
         private void OnExtend()
         {          

+ 2 - 2
Venus/Venus_MainPages/Views/EfemView.xaml

@@ -33,8 +33,8 @@
 
             </StackPanel>
         </Border>
-        <userControls:FOUPFrontView UnitData="{Binding LP1ModuleInfo}"  Canvas.Top="70" Canvas.Left="10"/>
-        <userControls:FOUPFrontView UnitData="{Binding LP2ModuleInfo}"  Canvas.Top="70" Canvas.Left="150"/>
+        <userControls:FOUPFrontView UnitData="{Binding LP1ModuleInfo}"  Canvas.Top="70" Canvas.Left="20"/>
+        <userControls:FOUPFrontView UnitData="{Binding LP2ModuleInfo}"  Canvas.Top="70" Canvas.Left="160"/>
         <userControls:FOUPFrontView UnitData="{Binding LP3ModuleInfo}"  Canvas.Top="70" Canvas.Left="300"/>
 
         <userControls:EFEMFrontView UnitData="{Binding EFEMModuleInfo}" Title="Efem Robot"  Canvas.Top="280" Canvas.Left="1040"/>

+ 3 - 3
Venus/Venus_MainPages/Views/OverKepler2200AView.xaml

@@ -110,7 +110,7 @@
                 <ComboBoxItem>Position3</ComboBoxItem>
             </ComboBox>
             <TextBlock Grid.Column="2" Text="{Binding HighTemperatureHeaterData.HighTemperatureHeaterPosition}"  Width="100" Padding="30,8,0,0"/>
-            <Button    Grid.Column="3" Content="Set" Width="60" Style="{x:Null}" Height="25" Cursor="Hand" Command="{Binding GotoPositionCommand}"/>
+            <Button    Grid.Column="3" Content="Set" Width="60" Style="{x:Null}" Height="25" Cursor="Hand" Command="{Binding GotoPositionCommand}" IsEnabled="{Binding IsAutoMode,Converter={StaticResource BoolToBool}}"/>
         </Grid>
        
         <Canvas Canvas.Top="40" >
@@ -791,11 +791,11 @@
             </StackPanel>-->
             <StackPanel Canvas.Top="645" Canvas.Left="1160" Orientation="Vertical">
                 <TextBlock Text="Foreline Heater"/>
-                <Button Height="18" Width="50" Content="{Binding ForelineHeaterData.FeedBack}" ToolTip="{Binding ForelineHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="#40E0D0" ContentStringFormat="F1"  Background="{Binding ForelineHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ForelineHeaterData}" Cursor="Hand" />
+                <Button Height="18" Width="50" Content="{Binding ForelineHeaterData.FeedBack}" ToolTip="{Binding ForelineHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="White" ContentStringFormat="F1"  Background="{Binding ForelineHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ForelineHeaterData}" Cursor="Hand" />
             </StackPanel>
             <StackPanel Canvas.Top="320" Canvas.Left="1210" Orientation="Vertical">
                 <TextBlock Text="Wall Heater"/>
-                <Button Height="18" Width="50" Content="{Binding WallHeaterData.FeedBack}" ToolTip="{Binding WallHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="#40E0D0"  ContentStringFormat="F1" Background="{Binding WallHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding WallHeaterData}" Cursor="Hand"/>
+                <Button Height="18" Width="50" Content="{Binding WallHeaterData.FeedBack}" ToolTip="{Binding WallHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="White"  ContentStringFormat="F1" Background="{Binding WallHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding WallHeaterData}" Cursor="Hand"/>
             </StackPanel>
 
             <!--Chamber-->

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

@@ -753,19 +753,19 @@
             <ctrls:TextboxWithLabel  Canvas.Top="400" Canvas.Left="1290" LabelValue="Wall   Heater"   TextBoxValue="{Binding WallHeaterData.CoolantOutletTcFeedback}"     TextBoxColor="{Binding WallHeaterData.IsPowerOn,Converter={StaticResource boolToColor}}"  Cursor="Hand"/>-->
             <StackPanel Canvas.Top="470" Canvas.Left="960" Orientation="Vertical">
                 <TextBlock Text="Valve Heater"/>
-                <Button Height="18" Width="50" Content="{Binding ValveHeaterData.FeedBack}" ToolTip="{Binding ValveHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="#40E0D0" ContentStringFormat="F1" Background="{Binding ValveHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ValveHeaterData}" Cursor="Hand"/>
+                <Button Height="18" Width="50" Content="{Binding ValveHeaterData.FeedBack}" ToolTip="{Binding ValveHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="White" ContentStringFormat="F1" Background="{Binding ValveHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ValveHeaterData}" Cursor="Hand"/>
             </StackPanel>
             <StackPanel Canvas.Top="645" Canvas.Left="1160" Orientation="Vertical">
                 <TextBlock Text="Foreline Heater"/>
-                <Button Height="18" Width="50" Content="{Binding ForelineHeaterData.FeedBack}" ToolTip="{Binding ForelineHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="#40E0D0" ContentStringFormat="F1"  Background="{Binding ForelineHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ForelineHeaterData}" Cursor="Hand"/>
+                <Button Height="18" Width="50" Content="{Binding ForelineHeaterData.FeedBack}" ToolTip="{Binding ForelineHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="White" ContentStringFormat="F1"  Background="{Binding ForelineHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ForelineHeaterData}" Cursor="Hand"/>
             </StackPanel>
             <StackPanel Canvas.Top="320" Canvas.Left="1280" Orientation="Vertical">
                 <TextBlock Text="Wall Heater"/>
-                <Button Height="18" Width="50" Content="{Binding WallHeaterData.FeedBack}" ToolTip="{Binding WallHeaterData,Converter={StaticResource HeaterToStringConverter}}"   Foreground="#40E0D0" ContentStringFormat="F1" Background="{Binding WallHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding WallHeaterData}" Cursor="Hand"/>
+                <Button Height="18" Width="50" Content="{Binding WallHeaterData.FeedBack}" ToolTip="{Binding WallHeaterData,Converter={StaticResource HeaterToStringConverter}}"   Foreground="White" ContentStringFormat="F1" Background="{Binding WallHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding WallHeaterData}" Cursor="Hand"/>
             </StackPanel>
             <StackPanel Canvas.Top="420" Canvas.Left="1280" Orientation="Vertical">
                 <TextBlock Text="Pendulum Heater"/>
-                <Button Height="18" Width="50" Content="{Binding PendulumHeaterData.FeedBack}" ToolTip="{Binding PendulumHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="#40E0D0"  ContentStringFormat="F1" Background="{Binding PendulumHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding PendulumHeaterData}" Cursor="Hand"/>
+                <Button Height="18" Width="50" Content="{Binding PendulumHeaterData.FeedBack}" ToolTip="{Binding PendulumHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="White"  ContentStringFormat="F1" Background="{Binding PendulumHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding PendulumHeaterData}" Cursor="Hand"/>
             </StackPanel>
             <!--Chamber-->
             <ctrls:Chamber Canvas.Left="1034" Canvas.Top="224" 

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

@@ -781,15 +781,15 @@
             <ctrls:TextboxWithLabel  Canvas.Top="400" Canvas.Left="1290" LabelValue="Wall   Heater"   TextBoxValue="{Binding WallHeaterData.CoolantOutletTcFeedback}"     TextBoxColor="{Binding WallHeaterData.IsPowerOn,Converter={StaticResource boolToColor}}"  Cursor="Hand"/>-->
             <StackPanel Canvas.Top="470" Canvas.Left="960" Orientation="Vertical">
                 <TextBlock Text="Valve Heater"/>
-                <Button Height="18" Width="50" Content="{Binding ValveHeaterData.FeedBack}" ToolTip="{Binding ValveHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="#40E0D0" ContentStringFormat="F1" Background="{Binding ValveHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ValveHeaterData}" Cursor="Hand"/>
+                <Button Height="18" Width="50" Content="{Binding ValveHeaterData.FeedBack}" ToolTip="{Binding ValveHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="White" ContentStringFormat="F1" Background="{Binding ValveHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ValveHeaterData}" Cursor="Hand"/>
             </StackPanel>
             <StackPanel Canvas.Top="645" Canvas.Left="1160" Orientation="Vertical">
                 <TextBlock Text="Foreline Heater"/>
-                <Button Height="18" Width="50" Content="{Binding ForelineHeaterData.FeedBack}" ToolTip="{Binding ForelineHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="#40E0D0" ContentStringFormat="F1"  Background="{Binding ForelineHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ForelineHeaterData}" Cursor="Hand"/>
+                <Button Height="18" Width="50" Content="{Binding ForelineHeaterData.FeedBack}" ToolTip="{Binding ForelineHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="White" ContentStringFormat="F1"  Background="{Binding ForelineHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding ForelineHeaterData}" Cursor="Hand"/>
             </StackPanel>
             <StackPanel Canvas.Top="380" Canvas.Left="1280" Orientation="Vertical">
                 <TextBlock Text="Wall Heater"/>
-                <Button Height="18" Width="50" Content="{Binding WallHeaterData.FeedBack}" ToolTip="{Binding WallHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="#40E0D0"  ContentStringFormat="F1"  Background="{Binding WallHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding WallHeaterData}" Cursor="Hand"/>
+                <Button Height="18" Width="50" Content="{Binding WallHeaterData.FeedBack}" ToolTip="{Binding WallHeaterData,Converter={StaticResource HeaterToStringConverter}}" Foreground="White"  ContentStringFormat="F1"  Background="{Binding WallHeaterData.IsPowerOnSetPoint,Converter={StaticResource boolToColor5}}" Style="{x:Null}" Command="{Binding HeaterCommand}" CommandParameter="{Binding WallHeaterData}" Cursor="Hand"/>
             </StackPanel>
 
             <!--Chamber-->

+ 1 - 1
Venus/Venus_MainPages/Views/TopView.xaml

@@ -58,7 +58,7 @@
             <userControls:StateTitle Title="TM"    Grid.Row="2"    TextBoxValue="{Binding RtDataValues[TM.FsmState]}"     TextBoxColor="{Binding RtDataValues[TM.FsmState],Converter={StaticResource TMStateConverter}}" Visibility="{Binding TMIsInstalled,Converter={StaticResource bool2VisibilityConverter}}" LabelColor="{Binding RtDataValues[TM.IsOnline],Converter={StaticResource IsOnlineConverter}}"/>
 
             <StackPanel Orientation="Horizontal" Grid.Column="1"  Grid.Row="2" Grid.ColumnSpan="3">
-                <Label Content="Log" Style="{StaticResource TopLable_LeftTop}" Canvas.Left="520" Width="100" Canvas.Top="76" BorderThickness="1"   HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Height="30"/>
+                <Label Content="Log" Style="{StaticResource TopLable_LeftTop}" Canvas.Left="520" Width="100" Canvas.Top="76" BorderThickness="1"   HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Height="30" FontWeight="Bold"/>
                 <ComboBox  Width="720" Canvas.Left="620" Canvas.Top="74.2" Height="32"
                                        ItemsSource="{Binding EventLogList}"   
                                        SelectedIndex="{Binding EventLogListSelectedIndex}"

+ 3 - 0
Venus/Venus_RT/Devices/TM/SIASUNRobot.cs

@@ -268,7 +268,10 @@ namespace Venus_RT.Devices
                         }
 
                         if (_currentOP != OPStep.PickExtend && _currentOP != OPStep.PlaceExtent)
+                        {
                             SetRobotMovingInfo(RobotAction.None, Hand.Both, ModuleName.TMRobot);
+                        }
+
                     }
                     break;
                 case OPStep.Home:

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

@@ -316,6 +316,7 @@ namespace Venus_RT.Modules.PMs
             biasRfMatchC1.Clear();
             biasRfMatchC1.Clear();
             biasRfMatchC1C2Index = 0;
+            biasRFSetPointFlag = true;
             return RState.Running;
         }
 
@@ -350,10 +351,11 @@ namespace Venus_RT.Modules.PMs
                 //cycleIndex += 1;
                 if (ProcessUnit.TargetMode == TargetMode.Cycle)
                 {
-                    if (currentStepIndex == 0 && biasRFSetPointFlag==true)
+                    if ( biasRFSetPointFlag==true)
                     {
                         biasRFSetPointFlag = false;
-                        Chamber.GeneratorBiasSetpower((float)((ProcessUnit.BiasRFPower + (float)((ProcessUnit.TargetBiasRFPower - ProcessUnit.BiasRFPower) / (loopsteps - 1) * currentStepIndex))));
+              
+                        Chamber.GeneratorBiasSetpower((float)((ProcessUnit.BiasRFPower + (float)((float)(ProcessUnit.TargetBiasRFPower - ProcessUnit.BiasRFPower) / ((float)(loopsteps-1) / (float)(currentStepIndex))))));
                     }
                     //float rampFactor = (float)currentStepIndex / (float)(loopsteps-1);
                     //double rampFactor = step.RampFactor();                                 

+ 92 - 83
Venus/Venus_RT/Modules/TM/TMEntity.cs

@@ -32,22 +32,22 @@ namespace Venus_RT.Modules
             Init,
             Initializing,
             InitializingRB,
-            Idle,        
-            Error,       
+            Idle,
+            Error,
             Pumping,
             Venting,
             Purging,
             Leakchecking,
-            Picking,         
-            Placing,  
+            Picking,
+            Placing,
             Swaping,
             PMPicking,
             PMPlacing,
             PMSwaping,
-            Aligning,      
-            Mapping,     
-            Extending,    
-            Retracting,   
+            Aligning,
+            Mapping,
+            Extending,
+            Retracting,
             Swapping,
             Gotoing,
             ControllingPressure
@@ -64,9 +64,10 @@ namespace Venus_RT.Modules
             Purge,
             CyclePurge,
             LeakCheck,
-            Pick, 
+            Pick,
             Place,
             Swap,
+            Goto,
             DoublePick,
             DoublePlace,
             DoubleSwap,
@@ -82,7 +83,7 @@ namespace Venus_RT.Modules
             AbortControlPressure
         }
 
-        
+
         public bool IsIdle
         {
             get { return fsm.State == (int)STATE.Idle; }
@@ -105,7 +106,7 @@ namespace Venus_RT.Modules
 
         public RState RobotStatus
         {
-            get 
+            get
             {
                 if (_robot.Status != RState.Running)
                 {
@@ -146,10 +147,10 @@ namespace Venus_RT.Modules
 
 
         private readonly MFPMRetractRoutine _pmRetractRoutine;
-        private readonly MFPMExtendRoutine  _pmExtendRoutine;
+        private readonly MFPMExtendRoutine _pmExtendRoutine;
 
         private readonly MFControlPressureRoutine _tmControlPressureRoutine;
-        private bool startControlPressureFlag=true;
+        private bool startControlPressureFlag = true;
         private bool stopControlPressureFlag = true;
 
         private Stopwatch _robotWatch = new Stopwatch();
@@ -159,7 +160,7 @@ namespace Venus_RT.Modules
         public TMEntity()
         {
             //_tm                 = Singleton<JetTM>.Instance;
-            _tm                 = DEVICE.GetDevice<JetTM>("TM");
+            _tm = DEVICE.GetDevice<JetTM>("TM");
             _robot = new SIASUNRobot();
 
             //switch (SC.GetValue<int>($"TM.TMRobotType"))
@@ -182,24 +183,24 @@ namespace Venus_RT.Modules
             //        break;
             //}
 
-            _pickRoutine    = new MFPickRoutine(_tm, _robot);
-            _placeRoutine   = new MFPlaceRoutine(_tm, _robot);
-            _swapRoutine    = new MFSwapRoutine(_tm, _robot);
+            _pickRoutine = new MFPickRoutine(_tm, _robot);
+            _placeRoutine = new MFPlaceRoutine(_tm, _robot);
+            _swapRoutine = new MFSwapRoutine(_tm, _robot);
 
-            _pmPickRoutine  = new MFPMPickRoutine(_tm, _robot);
+            _pmPickRoutine = new MFPMPickRoutine(_tm, _robot);
             _pmPlaceRoutine = new MFPMPlaceRoutine(_tm, _robot);
-            _pmSwapRoutine  = new MFPMSwapRoutine(_tm, _robot);
+            _pmSwapRoutine = new MFPMSwapRoutine(_tm, _robot);
 
-            _pumpingRoutine     = new MFPumpRoutine(_tm, ModuleName.TM);
+            _pumpingRoutine = new MFPumpRoutine(_tm, ModuleName.TM);
 
             _homeRoutine = new MFHomeRoutine(_tm, _robot, _pumpingRoutine);
 
             _ventingRoutine = new MFVentRoutine(_tm, ModuleName.TM);
-            _leakCheckRoutine   = new MFLeakCheckRoutine(_tm, ModuleName.TM);
-            _purgeRoutine       = new MFPurgeRoutine(_tm, ModuleName.TM);
+            _leakCheckRoutine = new MFLeakCheckRoutine(_tm, ModuleName.TM);
+            _purgeRoutine = new MFPurgeRoutine(_tm, ModuleName.TM);
 
             _pmRetractRoutine = new MFPMRetractRoutine(_tm, _robot);
-            _pmExtendRoutine  = new MFPMExtendRoutine(_tm, _robot);
+            _pmExtendRoutine = new MFPMExtendRoutine(_tm, _robot);
 
             _tmControlPressureRoutine = new MFControlPressureRoutine(_tm, _pumpingRoutine);
 
@@ -210,7 +211,7 @@ namespace Venus_RT.Modules
             //controlPressureTimer.Elapsed += ControlPressureTimer_Elapsed;
         }
 
-      
+
 
         protected override bool Init()
         {
@@ -224,6 +225,9 @@ namespace Venus_RT.Modules
             OP.Subscribe($"TM.{RtOperation.Extend}", (cmd, args) => CheckToPostMessage((int)MSG.Extend, args));
             OP.Subscribe($"TM.{RtOperation.Retract}", (cmd, args) => CheckToPostMessage((int)MSG.Retract, args));
 
+            OP.Subscribe($"TM.{RtOperation.Goto}", (cmd, args) => RobotGoto(args));
+
+
             OP.Subscribe($"TM.{RtOperation.Cycle}", (cmd, args) => CheckToPostMessage((int)MSG.Swap, args));
 
             //OP.Subscribe($"TM.{RtOperation.LLPlace}", (cmd, args) => CheckToPostMessage((int)MSG.Place, args));
@@ -247,7 +251,7 @@ namespace Venus_RT.Modules
 
 
             DATA.Subscribe("TM.RobotMoveAction", () => _robot.TMRobotMoveInfo, SubscriptionAttribute.FLAG.IgnoreSaveDB);
-            DATA.Subscribe("TM.RobotMoveAction.ArmTarget", () =>   _robot.TMRobotMoveInfo.ArmTarget.ToString(), SubscriptionAttribute.FLAG.IgnoreSaveDB) ;
+            DATA.Subscribe("TM.RobotMoveAction.ArmTarget", () => _robot.TMRobotMoveInfo.ArmTarget.ToString(), SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe("TM.RobotMoveAction.BladeTarget", () => _robot.TMRobotMoveInfo.BladeTarget, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe("TM.RobotMoveAction.RobotAction", () => _robot.TMRobotMoveInfo.Action.ToString(), SubscriptionAttribute.FLAG.IgnoreSaveDB);
 
@@ -266,83 +270,83 @@ namespace Venus_RT.Modules
             //AnyStateTransition(FSM_MSG.TIMER,   fnMonitor,      FSM_STATE.SAME); 
 
 
-            AnyStateTransition(MSG.Error,           fnError,               STATE.Error);
-            AnyStateTransition(MSG.Online,          fnOnline,              FSM_STATE.SAME);
-            AnyStateTransition(MSG.Offline,         fnOffline,             FSM_STATE.SAME);
-            AnyStateTransition(MSG.Home,            fnHome,                STATE.Initializing);
+            AnyStateTransition(MSG.Error, fnError, STATE.Error);
+            AnyStateTransition(MSG.Online, fnOnline, FSM_STATE.SAME);
+            AnyStateTransition(MSG.Offline, fnOffline, FSM_STATE.SAME);
+            AnyStateTransition(MSG.Home, fnHome, STATE.Initializing);
 
 
             // Home
-            Transition(STATE.Initializing,      FSM_MSG.TIMER,      fnHoming,           STATE.Idle);
-            Transition(STATE.Initializing,      MSG.Abort,          FnAbortHome,      STATE.Idle);
+            Transition(STATE.Initializing, FSM_MSG.TIMER, fnHoming, STATE.Idle);
+            Transition(STATE.Initializing, MSG.Abort, FnAbortHome, STATE.Idle);
 
             // Robot Home
-            Transition(STATE.Idle,              MSG.RobotHome,      fnHome,             STATE.InitializingRB);
-            Transition(STATE.InitializingRB,    FSM_MSG.TIMER,      fnHoming,           STATE.Idle);
-            Transition(STATE.InitializingRB,    MSG.Abort,          FnAbortHome,      STATE.Idle);
+            Transition(STATE.Idle, MSG.RobotHome, fnHome, STATE.InitializingRB);
+            Transition(STATE.InitializingRB, FSM_MSG.TIMER, fnHoming, STATE.Idle);
+            Transition(STATE.InitializingRB, MSG.Abort, FnAbortHome, STATE.Idle);
             //Transition(STATE.Idle,              FSM_MSG.TIMER,      fnMonitor,          STATE.Idle);
             //Transition(STATE.Init,              FSM_MSG.TIMER,      fnMonitor,          STATE.Init);
 
             // Vent sequence
-            Transition(STATE.Idle,              MSG.Vent,           FnStartVent,        STATE.Venting);
-            Transition(STATE.Venting,           FSM_MSG.TIMER,      FnVentTimeout,      STATE.Idle);
-            Transition(STATE.Venting,           MSG.Abort,          FnAbortVent,        STATE.Idle);
+            Transition(STATE.Idle, MSG.Vent, FnStartVent, STATE.Venting);
+            Transition(STATE.Venting, FSM_MSG.TIMER, FnVentTimeout, STATE.Idle);
+            Transition(STATE.Venting, MSG.Abort, FnAbortVent, STATE.Idle);
 
             // Pump sequence
-            Transition(STATE.Idle,              MSG.Pump,           FnStartPump,        STATE.Pumping);
-            Transition(STATE.Pumping,           FSM_MSG.TIMER,      FnPumpTimeout,      STATE.Idle);
-            Transition(STATE.Pumping,           MSG.Abort,          FnAbortPump,        STATE.Idle);
+            Transition(STATE.Idle, MSG.Pump, FnStartPump, STATE.Pumping);
+            Transition(STATE.Pumping, FSM_MSG.TIMER, FnPumpTimeout, STATE.Idle);
+            Transition(STATE.Pumping, MSG.Abort, FnAbortPump, STATE.Idle);
 
             // Purge sequence
-            Transition(STATE.Idle,              MSG.Purge,     FnStartPurge,       STATE.Purging);
-            Transition(STATE.Purging,           FSM_MSG.TIMER,      FnPurgeTimeout,     STATE.Idle);
-            Transition(STATE.Purging,           MSG.Abort,          FnAbortPurge,       STATE.Idle);
+            Transition(STATE.Idle, MSG.Purge, FnStartPurge, STATE.Purging);
+            Transition(STATE.Purging, FSM_MSG.TIMER, FnPurgeTimeout, STATE.Idle);
+            Transition(STATE.Purging, MSG.Abort, FnAbortPurge, STATE.Idle);
 
             // Leak check sequence
-            Transition(STATE.Idle,              MSG.LeakCheck,      FnStartLeakCheck,   STATE.Leakchecking);
-            Transition(STATE.Leakchecking,      FSM_MSG.TIMER,      FnLeakCheckTimeout, STATE.Idle);
-            Transition(STATE.Leakchecking,      MSG.Abort,          FnAbortLeakCheck,   STATE.Idle);
+            Transition(STATE.Idle, MSG.LeakCheck, FnStartLeakCheck, STATE.Leakchecking);
+            Transition(STATE.Leakchecking, FSM_MSG.TIMER, FnLeakCheckTimeout, STATE.Idle);
+            Transition(STATE.Leakchecking, MSG.Abort, FnAbortLeakCheck, STATE.Idle);
 
             // Pick wafer from LL sequence
-            Transition(STATE.Idle,              MSG.Pick,           FnStartPick,        STATE.Picking);
-            Transition(STATE.Picking,           FSM_MSG.TIMER,      FnPickTimeout,      STATE.Idle);
-            Transition(STATE.Picking,           MSG.Abort,          FnAbortPick,        STATE.Idle);
+            Transition(STATE.Idle, MSG.Pick, FnStartPick, STATE.Picking);
+            Transition(STATE.Picking, FSM_MSG.TIMER, FnPickTimeout, STATE.Idle);
+            Transition(STATE.Picking, MSG.Abort, FnAbortPick, STATE.Idle);
 
             // Place wafer to LL sequence
-            Transition(STATE.Idle,              MSG.Place,          FnStartPlace,       STATE.Placing);
-            Transition(STATE.Placing,           FSM_MSG.TIMER,      FnPlaceTimeout,     STATE.Idle);
-            Transition(STATE.Placing,           MSG.Abort,          FnAbortPlace,       STATE.Idle);
+            Transition(STATE.Idle, MSG.Place, FnStartPlace, STATE.Placing);
+            Transition(STATE.Placing, FSM_MSG.TIMER, FnPlaceTimeout, STATE.Idle);
+            Transition(STATE.Placing, MSG.Abort, FnAbortPlace, STATE.Idle);
 
             // Swap wafer with LL sequence
-            Transition(STATE.Idle,              MSG.Swap,           FnStartSwap,        STATE.Swaping);
-            Transition(STATE.Swaping,           FSM_MSG.TIMER,      FnSwapTimeout,      STATE.Idle);
-            Transition(STATE.Swaping,           MSG.Abort,          FnAbortSwap,        STATE.Idle);
+            Transition(STATE.Idle, MSG.Swap, FnStartSwap, STATE.Swaping);
+            Transition(STATE.Swaping, FSM_MSG.TIMER, FnSwapTimeout, STATE.Idle);
+            Transition(STATE.Swaping, MSG.Abort, FnAbortSwap, STATE.Idle);
 
             // Pick wafer from PM sequence
-            Transition(STATE.Idle,              MSG.PMPick,         FnStartPMPick,      STATE.PMPicking);
-            Transition(STATE.PMPicking,         FSM_MSG.TIMER,      FnPMPickTimeout,    STATE.Idle);
-            Transition(STATE.PMPicking,         MSG.Abort,          FnAbortPMPick,      STATE.Idle);
+            Transition(STATE.Idle, MSG.PMPick, FnStartPMPick, STATE.PMPicking);
+            Transition(STATE.PMPicking, FSM_MSG.TIMER, FnPMPickTimeout, STATE.Idle);
+            Transition(STATE.PMPicking, MSG.Abort, FnAbortPMPick, STATE.Idle);
 
             // Place wafer to PM sequence
-            Transition(STATE.Idle,              MSG.PMPlace,        FnStartPMPlace,     STATE.PMPlacing);
-            Transition(STATE.PMPlacing,         FSM_MSG.TIMER,      FnPMPlaceTimeout,   STATE.Idle);
-            Transition(STATE.PMPlacing,         MSG.Abort,          FnAbortPMPlace,     STATE.Idle);
+            Transition(STATE.Idle, MSG.PMPlace, FnStartPMPlace, STATE.PMPlacing);
+            Transition(STATE.PMPlacing, FSM_MSG.TIMER, FnPMPlaceTimeout, STATE.Idle);
+            Transition(STATE.PMPlacing, MSG.Abort, FnAbortPMPlace, STATE.Idle);
 
             // Swap wafer with PM sequence
-            Transition(STATE.Idle,              MSG.PMSwap,         FnStartPMSwap,      STATE.PMSwaping);
-            Transition(STATE.PMSwaping,         FSM_MSG.TIMER,      FnPMSwapTimeout,    STATE.Idle);
-            Transition(STATE.PMSwaping,         MSG.Abort,          FnAbortPMSwap,      STATE.Idle);
+            Transition(STATE.Idle, MSG.PMSwap, FnStartPMSwap, STATE.PMSwaping);
+            Transition(STATE.PMSwaping, FSM_MSG.TIMER, FnPMSwapTimeout, STATE.Idle);
+            Transition(STATE.PMSwaping, MSG.Abort, FnAbortPMSwap, STATE.Idle);
 
 
             //Retract
-            Transition(STATE.Idle,              MSG.Retract,        FnStartRetract,     STATE.Retracting);
-            Transition(STATE.Retracting,        FSM_MSG.TIMER,      FnRetract,          STATE.Idle);
-            Transition(STATE.Retracting,        MSG.Abort,          FnAbortRetract,     STATE.Idle);
+            Transition(STATE.Idle, MSG.Retract, FnStartRetract, STATE.Retracting);
+            Transition(STATE.Retracting, FSM_MSG.TIMER, FnRetract, STATE.Idle);
+            Transition(STATE.Retracting, MSG.Abort, FnAbortRetract, STATE.Idle);
 
             //Extend
-            Transition(STATE.Idle,              MSG.Extend,         FnStartExtend,      STATE.Extending);
-            Transition(STATE.Extending,         FSM_MSG.TIMER,      FnExtend,           STATE.Idle);
-            Transition(STATE.Extending,         MSG.Abort,          FnAbortExtend,      STATE.Idle);
+            Transition(STATE.Idle, MSG.Extend, FnStartExtend, STATE.Extending);
+            Transition(STATE.Extending, FSM_MSG.TIMER, FnExtend, STATE.Idle);
+            Transition(STATE.Extending, MSG.Abort, FnAbortExtend, STATE.Idle);
 
             //Transition(RtState.Init, MSG.TMCycle, FsmStartTMCycle, RtState.TMCycle);
             //Transition(RtState.TMCycle, FSM_MSG.TIMER, FsmMonitorTMCycle, RtState.Idle);
@@ -413,7 +417,7 @@ namespace Venus_RT.Modules
 
         private bool FnStartVent(object[] param)
         {
-            return _ventingRoutine.Start() == RState.Running ;
+            return _ventingRoutine.Start() == RState.Running;
         }
 
         private bool FnVentTimeout(object[] param)
@@ -645,7 +649,7 @@ namespace Venus_RT.Modules
 
         private bool FnStartRetract(object[] param)
         {
-           return _pmRetractRoutine.Start(param) == RState.Running;        
+            return _pmRetractRoutine.Start(param) == RState.Running;
         }
         private bool FnRetract(object[] param)
         {
@@ -697,6 +701,11 @@ namespace Venus_RT.Modules
             _pmExtendRoutine.Abort();
             return true;
         }
+
+        private bool RobotGoto(object[] param)
+        {
+            return _robot.Goto((ModuleName)param[0], (int)param[1], (Hand)param[2]);
+        }
         private bool FnStartControlPressure(object[] param)
         {
             return _tmControlPressureRoutine.Start(param) == RState.Running;
@@ -705,7 +714,7 @@ namespace Venus_RT.Modules
         {
             // robot idle check
             _robotIdleTrigger.CLK = _robot.Status != RState.Running;
-            if(_robotIdleTrigger.Q)
+            if (_robotIdleTrigger.Q)
             {
                 _robotWatch.Restart();
             }
@@ -716,7 +725,7 @@ namespace Venus_RT.Modules
             }
             if (IsOnline == true)
             {
-                if (startControlPressureFlag==true)
+                if (startControlPressureFlag == true)
                 {
                     _tmControlPressureRoutine.Start(param);
                     startControlPressureFlag = false;
@@ -745,9 +754,9 @@ namespace Venus_RT.Modules
                     startControlPressureFlag = true;
                     stopControlPressureFlag = false;
                 }
-               
+
             }
-            
+
             return true;
         }
         private bool FnControlPressure(object[] param)
@@ -838,32 +847,32 @@ namespace Venus_RT.Modules
             {
                 PostMsg(MSG.Pump);
             }
-            else if(flag == 4)
+            else if (flag == 4)
             {
                 PostMsg(MSG.Pick, ModuleName.LLA, 0, 0);
             }
-            else if(flag == 5)
+            else if (flag == 5)
             {
                 PostMsg(MSG.Place, ModuleName.LLA, 0, 0);
             }
-            else if(flag == 6)
+            else if (flag == 6)
             {
                 Queue<MoveItem> items = new Queue<MoveItem>();
                 items.Enqueue(new MoveItem(ModuleName.TMRobot, 0, ModuleName.LLA, 0, Hand.Blade1));
                 items.Enqueue(new MoveItem(ModuleName.TMRobot, 1, ModuleName.LLA, 1, Hand.Blade2));
                 items.Enqueue(new MoveItem(ModuleName.LLA, 0, ModuleName.TMRobot, 0, Hand.Blade1));
                 items.Enqueue(new MoveItem(ModuleName.LLA, 1, ModuleName.TMRobot, 1, Hand.Blade2));
-                PostMsg(MSG.Swap,items);
+                PostMsg(MSG.Swap, items);
             }
-            else if(flag == 7)
+            else if (flag == 7)
             {
                 PostMsg(MSG.PMPick, ModuleName.PMA, 0, 0);
             }
-            else if(flag == 8)
+            else if (flag == 8)
             {
                 PostMsg(MSG.PMPlace, ModuleName.PMA, 0, 0);
             }
-            else if(flag == 9)
+            else if (flag == 9)
             {
                 PostMsg(MSG.PMSwap, ModuleName.PMA, 0, 0, 0, 0);
             }

+ 2 - 0
Venus/Venus_Simulator/Devices/TMSimulatorServer.cs

@@ -29,6 +29,8 @@ namespace Venus_Simulator.Devices
         {
             if(str.Contains("HOME") || str.Contains("GOTO") || str.Contains("XFER"))
             {
+                Thread.Sleep(500);
+
                 OnWriteMessage("_RDY");
             }
 

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

@@ -8,7 +8,7 @@
              d:DesignHeight="40" d:DesignWidth="800" x:Name="stateTitle">
     
     <StackPanel Orientation="Horizontal">
-        <Label   Style="{StaticResource TopLable_LeftTop}" Content="{Binding ElementName=stateTitle,Path=Title}"      HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Width="100" BorderBrush="Silver" BorderThickness="1" VerticalAlignment="Center" Height="30" Background="{Binding ElementName=stateTitle,Path=LabelColor}" Foreground="Black"  FontWeight="Bold"/>
+        <Label   Style="{StaticResource TopLable_LeftTop}" Content="{Binding ElementName=stateTitle,Path=Title}"      HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Width="100" BorderBrush="Silver" BorderThickness="1" VerticalAlignment="Center" Height="30" Background="{Binding ElementName=stateTitle,Path=LabelColor}" Foreground="White"  FontWeight="Bold"/>
         <TextBox Style="{StaticResource TextBox_Top}"      Text="{Binding ElementName=stateTitle,Path=TextBoxValue}"  Background="{Binding ElementName=stateTitle,Path=TextBoxColor}" Width="210" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" BorderThickness="1" Height="30" BorderBrush="Black" VerticalAlignment="Center"/>
     </StackPanel>
 </UserControl>