Browse Source

1.修复all in all out 不做cooling bug
2.修复 abort 不做Cooling bug
3.Recipe Step 单点报警改成多点报警,Kepler全部是10点报警,Venus一点报警
4.PM IO升级,添加Leak CheckMode

lixiang 7 months ago
parent
commit
38b40b702d
26 changed files with 187 additions and 29 deletions
  1. 8 4
      Venus/Framework/Common/Tolerance/RecipeToleranceChecker.cs
  2. 3 0
      Venus/Venus_MainPages/ViewModels/OverKepler2200AViewModel.cs
  3. 4 0
      Venus/Venus_MainPages/ViewModels/OverKepler2200BViewModel.cs
  4. 1 1
      Venus/Venus_MainPages/Views/OperationOverView.xaml
  5. 1 1
      Venus/Venus_MainPages/Views/OverKepler2200AView.xaml
  6. 1 1
      Venus/Venus_MainPages/Views/OverKepler2200BView.xaml
  7. BIN
      Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200ADeviceModel.xml
  8. 1 1
      Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AIoDefine.xml
  9. BIN
      Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BDeviceModel.xml
  10. 1 1
      Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BIoDefine.xml
  11. 6 0
      Venus/Venus_RT/Config/System_Kepler2200.sccfg
  12. 17 1
      Venus/Venus_RT/Devices/JetKepler2200APM.cs
  13. 14 0
      Venus/Venus_RT/Devices/JetKepler2200BPM.cs
  14. 5 0
      Venus/Venus_RT/Devices/JetPMBase.cs
  15. 1 1
      Venus/Venus_RT/Modules/AutoCycle.cs
  16. 1 0
      Venus/Venus_RT/Modules/EFEM/EFEMAlignRoutine.cs
  17. 12 1
      Venus/Venus_RT/Modules/PMs/PMEntity.cs
  18. 4 2
      Venus/Venus_RT/Modules/PMs/ProcessDefine.cs
  19. 37 1
      Venus/Venus_RT/Modules/Schedulers/SchedulerEfemRobot.cs
  20. 4 0
      Venus/Venus_RT/Modules/Schedulers/SchedulerModule.cs
  21. 20 5
      Venus/Venus_RT/Modules/SystemDispatcher.cs
  22. 1 1
      Venus/Venus_RT/Modules/VenusDispatcher.cs
  23. 13 2
      Venus/Venus_Simulator/Devices/AdTecGeneratorMockPMA.cs
  24. 11 3
      Venus/Venus_Simulator/Devices/AdTecGeneratorMockPMB.cs
  25. 10 1
      Venus/Venus_Simulator/Devices/AdTecGeneratorMockPMC.cs
  26. 11 2
      Venus/Venus_Simulator/Devices/AdTecGeneratorMockPMD.cs

+ 8 - 4
Venus/Framework/Common/Tolerance/RecipeToleranceChecker.cs

@@ -40,10 +40,11 @@ namespace Aitex.Core.RT.Tolerance
                         _toleranceObjects[i].AlarmFlag = false;
                         _toleranceObjects[i].WarningFlag = false;
                     }
-                    if ((feedBacks[i] < _toleranceObjects[i].AlarmMin || feedBacks[i] > _toleranceObjects[i].AlarmMax) && _toleranceObjects[i].AlarmFlag == false && _toleranceObjects[i].SetPoint != 0 && _toleranceObjects[i].WarningFlag == true)
+                    if ((feedBacks[i] < _toleranceObjects[i].AlarmMin || feedBacks[i] > _toleranceObjects[i].AlarmMax)  && _toleranceObjects[i].SetPoint != 0 && _toleranceObjects[i].WarningFlag == true)
                     {
-                        _toleranceObjects[i].AlarmFlag = true;
-                        if (_IsStableType == false)
+                        //_toleranceObjects[i].AlarmFlag = true;
+                        _toleranceObjects[i].AlarmCounter += 1;
+                        if (_IsStableType == false && _toleranceObjects[i].AlarmCounter == _toleranceObjects[i].AlarmTriggerCounter)
                         {
                             LOG.Write(eEvent.ERR_PM_TOLERANCE, _Module, $"{_toleranceObjects[i].Name}:Current Value:{feedBacks[i]},Over Range {_toleranceObjects[i].AlarmMin}-{_toleranceObjects[i].AlarmMax}");
                             return RState.Failed;
@@ -85,9 +86,11 @@ namespace Aitex.Core.RT.Tolerance
         public float WarningMin { get; set; }
         public float AlarmMax { get; set; }
         public float AlarmMin { get; set; }
+        public int AlarmCounter { get; set; }
+        public int AlarmTriggerCounter { get; set; }
 
 
-        public ToleranceObject(string name, float setPoint, float warningScale, float alarmScale, int delayTime, ToleranceMode toleranceMode)
+        public ToleranceObject(string name, float setPoint, float warningScale, float alarmScale, int delayTime, ToleranceMode toleranceMode, int alarmTriggerCounter=1)
         {
             Name = name;
             SetPoint = setPoint;
@@ -107,6 +110,7 @@ namespace Aitex.Core.RT.Tolerance
             WarningMin = setPoint - WarningScale;
             AlarmMax = setPoint + AlarmScale;
             AlarmMin = setPoint - AlarmScale;
+            AlarmTriggerCounter = alarmTriggerCounter;
         }
 
     }

+ 3 - 0
Venus/Venus_MainPages/ViewModels/OverKepler2200AViewModel.cs

@@ -2020,6 +2020,9 @@ namespace Venus_MainPages.ViewModels
                 PVHeaterIsEnbale = (bool)(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.PendulumHeater.IsOn"));
 
                 IsEnablePumpSwitch = (bool)(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.DryPump.EnableSwitch"));
+
+                HighTemperatureHeaterTemperatureSetpoint = Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.HighTemperatureHeater.Temperature"));
+                HighTemperatureHeaterRatioSetpoint       = Convert.ToSingle(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.HighTemperatureHeater.Ratio"));
             }
             else
             {

+ 4 - 0
Venus/Venus_MainPages/ViewModels/OverKepler2200BViewModel.cs

@@ -2022,6 +2022,10 @@ namespace Venus_MainPages.ViewModels
                 PVHeaterIsEnbale = (bool)(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.PendulumHeater.IsOn"));
                 IsEnablePumpSwitch = (bool)(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.DryPump.EnableSwitch"));
 
+                HighTemperatureHeaterTemperatureSetpoint = Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.HighTemperatureHeater.Temperature"));
+                HighTemperatureHeaterRatioSetpoint = Convert.ToSingle(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.HighTemperatureHeater.Ratio"));
+
+
             }
             else
             {

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

@@ -456,7 +456,7 @@
 
                 <StackPanel>
                     <Border BorderThickness="0,0,0,0" BorderBrush="#076DB6"  Canvas.Left="10" Width="810" Margin="0 2 0 0" Background="#FAFAFA" HorizontalAlignment="Center" VerticalAlignment="Center" Height="35">
-                        <StackPanel Orientation="Horizontal" Margin="30,0,0,0" VerticalAlignment="Center">
+                        <StackPanel Orientation="Horizontal" Margin="26,0,0,0" VerticalAlignment="Center">
 
 
 

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

@@ -1039,7 +1039,7 @@
                 <TextBox   Grid.Row="3" Grid.Column="1" Width="Auto" Height="Auto" Text="{Binding SRFMatchC1SetPoint,UpdateSourceTrigger=PropertyChanged}"  HorizontalContentAlignment="Center" VerticalContentAlignment="Center"    BorderThickness="0" />
                 <TextBox   Grid.Row="4" Grid.Column="1" Width="Auto" Height="Auto" Text="{Binding SRFMatchC2SetPoint,UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"    BorderThickness="0" />
 
-                <TextBlock Grid.Row="1" Grid.Column="2" Width="Auto" Height="Auto" Text="{Binding SRFData.ForwardPower,StringFormat='F1'}"   Block.TextAlignment="Center" Padding="0 5 0 0"  Background="#E6ECF5"/>
+                <TextBlock Grid.Row="1" Grid.Column="2" Width="Auto" Height="Auto" Text="{Binding SRFData.ForwardPower,StringFormat='F0'}"   Block.TextAlignment="Center" Padding="0 5 0 0"  Background="#E6ECF5"/>
                 <!--<TextBlock Grid.Row="2" Grid.Column="2" Width="Auto" Height="Auto" Text="0.0"  Background="#E8E8E8" TextBlock.TextAlignment="Center" VerticalAlignment="Center" Block.TextAlignment="Center"/>-->
                 <TextBlock Grid.Row="3" Grid.Column="2" Width="Auto" Height="Auto" Text="{Binding MatchData.C1,StringFormat='F1'}"  Block.TextAlignment="Center" Padding="0 5 0 0"  Background="#E6ECF5"/>
                 <TextBlock Grid.Row="4" Grid.Column="2" Width="Auto" Height="Auto" Text="{Binding MatchData.C2,StringFormat='F1'}"  Block.TextAlignment="Center" Padding="0 5 0 0"  Background="#E6ECF5"/>

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

@@ -1036,7 +1036,7 @@
                 <TextBox   Grid.Row="3" Grid.Column="1" Width="Auto" Height="Auto" Text="{Binding SRFMatchC1SetPoint,UpdateSourceTrigger=PropertyChanged}"  HorizontalContentAlignment="Center" VerticalContentAlignment="Center"    BorderThickness="0" />
                 <TextBox   Grid.Row="4" Grid.Column="1" Width="Auto" Height="Auto" Text="{Binding SRFMatchC2SetPoint,UpdateSourceTrigger=PropertyChanged}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"    BorderThickness="0" />
 
-                <TextBlock Grid.Row="1" Grid.Column="2" Width="Auto" Height="Auto" Text="{Binding SRFData.ForwardPower,StringFormat='F1'}"   Block.TextAlignment="Center" Padding="0 5 0 0"  Background="#E6ECF5"/>
+                <TextBlock Grid.Row="1" Grid.Column="2" Width="Auto" Height="Auto" Text="{Binding SRFData.ForwardPower,StringFormat='F0'}"   Block.TextAlignment="Center" Padding="0 5 0 0"  Background="#E6ECF5"/>
                 <!--<TextBlock Grid.Row="2" Grid.Column="2" Width="Auto" Height="Auto" Text="0.0"  Background="#E8E8E8" TextBlock.TextAlignment="Center" VerticalAlignment="Center" Block.TextAlignment="Center"/>-->
                 <TextBlock Grid.Row="3" Grid.Column="2" Width="Auto" Height="Auto" Text="{Binding MatchData.C1,StringFormat='F1'}"  Block.TextAlignment="Center" Padding="0 5 0 0"  Background="#E6ECF5"/>
                 <TextBlock Grid.Row="4" Grid.Column="2" Width="Auto" Height="Auto" Text="{Binding MatchData.C2,StringFormat='F1'}"  Block.TextAlignment="Center" Padding="0 5 0 0"  Background="#E6ECF5"/>

BIN
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200ADeviceModel.xml


+ 1 - 1
Venus/Venus_RT/Config/PM/Kepler2200A/Kepler2200AIoDefine.xml

@@ -210,7 +210,7 @@
 		<DO_ITEM Index="74" Name="" />
 		<DO_ITEM Index="75" Name="" />
 		<DO_ITEM Index="76" Name="" />
-		<DO_ITEM Index="77" Name="" />
+		<DO_ITEM Index="77" Name="DO_LEAK_DETECTION_MODE" Device="捡漏模式" Addr="4.13"/>
 		<DO_ITEM Index="78" Name="" />
 		<DO_ITEM Index="79" Name="" />
 		<DO_ITEM Index="80" Name="DO_Lid_Servo_MATC_Mode" Device="维修模式" Addr="w5.00"/>

BIN
Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BDeviceModel.xml


+ 1 - 1
Venus/Venus_RT/Config/PM/Kepler2200B/Kepler2200BIoDefine.xml

@@ -210,7 +210,7 @@
 		<DO_ITEM Index="74" Name="" />
 		<DO_ITEM Index="75" Name="" />
 		<DO_ITEM Index="76" Name="" />
-		<DO_ITEM Index="77" Name="" />
+		<DO_ITEM Index="77" Name="DO_LEAK_DETECTION_MODE" Device="捡漏模式" Addr="4.13"/>
 		<DO_ITEM Index="78" Name="" />
 		<DO_ITEM Index="79" Name="" />
 		<DO_ITEM Index="80" Name="DO_Lid_Servo_MATC_Mode" Device="维修模式" Addr="w5.00"/>

+ 6 - 0
Venus/Venus_RT/Config/System_Kepler2200.sccfg

@@ -114,6 +114,12 @@
 			<config default ="0" name="AlignAngle" nameView="Align Angle" description="Align转角角度" max="360" min="0" parameter="" tag="" unit="N/A" type="Integer" />
 			<config default ="0" name="IncreasingAngle" nameView="Increasing Angle" description="每片wafer过Align时增加角度"  max="360" min="0" parameter="" tag="" unit="N/A" type="Integer" />
 		</configs>
+		<configs name="LoadLock" nameView="LoadLock">
+			<config default ="0" name="LLAAlignAngle"      nameView="LLA Align Angle"      description="LLA Align转角角度"               max="360" min="0" parameter="" tag="" unit="N/A" type="Integer" />
+			<config default ="0" name="LLAIncreasingAngle" nameView="LLA Increasing Angle" description="LLA 每片wafer过Align时增加角度"  max="360" min="0" parameter="" tag="" unit="N/A" type="Integer" />
+			<config default ="0" name="LLBAlignAngle"      nameView="LLB Align Angle"      description="LLB Align转角角度"               max="360" min="0" parameter="" tag="" unit="N/A" type="Integer" />
+			<config default ="0" name="LLBIncreasingAngle" nameView="LLB Increasing Angle" description="LLB 每片wafer过Align时增加角度"  max="360" min="0" parameter="" tag="" unit="N/A" type="Integer" />
+		</configs>
 	</configs>
 
 	<!--TM-->

+ 17 - 1
Venus/Venus_RT/Devices/JetKepler2200APM.cs

@@ -15,6 +15,8 @@ using System.Diagnostics;
 using Aitex.Core.RT.DataCenter;
 using Aitex.Core.Util;
 using Venus_RT.Modules.PMs;
+using Aitex.Core.RT.IOCore;
+using VenusCommon;
 
 namespace Venus_RT.Devices
 {
@@ -134,6 +136,8 @@ namespace Venus_RT.Devices
         private double processPressureLimit;
 
         private ScrubberMode _scrubberMode;
+
+        private readonly IoSwitch _leakCheckMode;
         // 盖子的状态
         public override bool IsLidClosed => _Lid.OFFFeedback;
         //public override bool IsLidLoadlockClosed => _LidLoadlock.OFFFeedback;
@@ -353,7 +357,7 @@ namespace Venus_RT.Devices
 
             _CDAPressure = DEVICE.GetDevice<IoSensor>($"{Module}.SensorCDAPressureOk");
             _pressureController = DEVICE.GetDevice<IoPressureControl>($"{Module}.{VenusDevice.PressureControl}");
-
+            _leakCheckMode = DEVICE.GetDevice<IoSwitch>($"{Module}.LeakCheckModeSwitch");
             _gasLines = new IoGasStick[8];
             for (int index = 0; index < 8; index++)
             {
@@ -1199,5 +1203,17 @@ namespace Venus_RT.Devices
             GeneratorPowerOn(false);
             GeneratorBiasPowerOn(false);
         }
+        public override bool SetLeakCheckMode(bool ison)
+        {
+            if (ison)
+            {
+                _leakCheckMode.TurnOn();
+            }
+            else
+            { 
+                _leakCheckMode.TurnOff();
+            }
+            return true;
+        }
     }
 }

+ 14 - 0
Venus/Venus_RT/Devices/JetKepler2200BPM.cs

@@ -132,6 +132,7 @@ namespace Venus_RT.Devices
         //private PressureType _PressureType;
         private double processPressureLimit;
         private ScrubberMode _scrubberMode;
+        private readonly IoSwitch _leakCheckMode;
 
         // 盖子的状态
         public override bool IsLidClosed => _Lid.OFFFeedback;
@@ -352,6 +353,7 @@ namespace Venus_RT.Devices
 
             _CDAPressure = DEVICE.GetDevice<IoSensor>($"{Module}.SensorCDAPressureOk");
             _pressureController = DEVICE.GetDevice<IoPressureControl>($"{Module}.{VenusDevice.PressureControl}");
+            _leakCheckMode = DEVICE.GetDevice<IoSwitch>($"{Module}.LeakCheckModeSwitch");
 
             _gasLines = new IoGasStick[8];
             for (int index = 0; index < 8; index++)
@@ -1219,5 +1221,17 @@ namespace Venus_RT.Devices
             GeneratorPowerOn(false);
             GeneratorBiasPowerOn(false);
         }
+        public override bool SetLeakCheckMode(bool ison)
+        {
+            if (ison)
+            {
+                _leakCheckMode.TurnOn();
+            }
+            else
+            {
+                _leakCheckMode.TurnOff();
+            }
+            return true;
+        }
     }
 }

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

@@ -798,5 +798,10 @@ namespace Venus_RT.Devices
             return true;
         }
         public abstract void PMInError();
+
+        public virtual bool SetLeakCheckMode(bool ison)
+        {
+            return true;
+        }
     }
 }

+ 1 - 1
Venus/Venus_RT/Modules/AutoCycle.cs

@@ -2301,7 +2301,7 @@ namespace Venus_RT.Modules
                                 WaferInfo wafer = WaferManager.Instance.GetWafer(align.Key, 0);
                                 if (!wafer.IsEmpty)
                                 {
-                                    if (_efemRobot.Align(0))
+                                    if (_efemRobot.Align(0F))
                                     {
                                         align.Value.MovingStatus = MovingStatus.StartAlign;
                                         return;

+ 1 - 0
Venus/Venus_RT/Modules/EFEM/EFEMAlignRoutine.cs

@@ -30,6 +30,7 @@ namespace Venus_RT.Modules.EFEM
         private double angle = 25;
         private WaferSize ws = WaferSize.WS12;
 
+        private ModuleName _ll;
         public EFEMAlignRoutine(EfemBase efem) : base(ModuleName.Aligner1)
         {
             _efem = efem;

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

@@ -496,6 +496,8 @@ namespace Venus_RT.Modules.PMs
             EnterExitTransition<PMState, FSM_MSG>(PMState.DropDownReady, fnEnterDropDownReady, FSM_MSG.NONE, fnExitDropDownReady);
             EnterExitTransition<PMState, FSM_MSG>(PMState.LiftUpReady, fnEnterLiftUpReady, FSM_MSG.NONE, fnExitLiftUpReady);
 
+            EnterExitTransition<PMState, FSM_MSG>(PMState.LeakCheck, fnEnterLeakCheck, FSM_MSG.NONE, fnExitLeakCheck);
+            EnterExitTransition<PMState, FSM_MSG>(PMState.GasBoxLeakCheck, fnEnterLeakCheck, FSM_MSG.NONE, fnExitLeakCheck);
 
 
 
@@ -866,7 +868,16 @@ namespace Venus_RT.Modules.PMs
             Status = PMStatus.Exchange_Ready;
             return true;
         }
-
+        private bool fnEnterLeakCheck(object[] objs)
+        {
+            _chamber.SetLeakCheckMode(true);
+            return true;
+        }
+        private bool fnExitLeakCheck(object[] objs)
+        {
+            _chamber.SetLeakCheckMode(false);
+            return true;
+        }
         private bool fnExitLiftUpReady(object[] objs)
         {
             Status = PMStatus.Not_Ready;

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

@@ -1287,7 +1287,7 @@ namespace Venus_RT.Modules.PMs
             if (ProcessUnit.MaxReflectedPower > 0 && Chamber.ReflectPower > ProcessUnit.MaxReflectedPower && step.ElapsedTime() > _scRFPowerAlarmTime * 1000)
             {
                 _RfReflectPowerOverCounter += 1;
-                if (_RfReflectPowerOverCounter > 4)
+                if (_RfReflectPowerOverCounter > 10)
                 {
                     LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} failed, RF Reflect Power:{Chamber.ReflectPower} exceeds the Max Limit:{ProcessUnit.MaxReflectedPower}");
                     return RState.Failed;
@@ -1297,10 +1297,12 @@ namespace Venus_RT.Modules.PMs
             {
                 _RfReflectPowerOverCounter = 0;
             }
-            if (step.ElapsedTime() > m_RecipeHead.RFHoldTime * 1000)
+            if (Chamber.ForwardPower>5 && step.ElapsedTime() > m_RecipeHead.RFHoldTime * 1000)
             {
                 Chamber.GeneratorSetpower(0);
                 Chamber.GeneratorPowerOn(false);
+                LOG.Write(eEvent.ERR_PROCESS, Chamber.Module, $"Step:{step.StepNo} failed, RF On Over {m_RecipeHead.RFHoldTime} s");
+
                 return RState.Failed;
             }
 

+ 37 - 1
Venus/Venus_RT/Modules/Schedulers/SchedulerEfemRobot.cs

@@ -61,7 +61,11 @@ namespace Venus_RT.Scheduler
         private int _alignAngle = 0;
         private int _increasingAngle = 0;
 
+        private int _llaAlignAngle = 0;
+        private int _llaIncreasingAngle = 0;
 
+        private int _llbAlignAngle = 0;
+        private int _llbIncreasingAngle = 0;
         public ModuleName PreviousTarget { get; set; }
 
         public SchedulerEfemRobot() : base(ModuleName.EfemRobot.ToString())
@@ -240,11 +244,43 @@ namespace Venus_RT.Scheduler
                 // enable change align angle only with increasing function disable to avoid logic confuse
                 _alignAngle = SC.GetValue<int>($"EFEM.Aligner.AlignAngle");
             }
+            else
+            {
+                _alignAngle = (_alignAngle + _increasingAngle) % 360;
 
-            _alignAngle = (_alignAngle + _increasingAngle) % 360;
+            }
             _entityTaskToken = _entity.InvokeAlign(ModuleName.Aligner1.ToString(), 0, _alignAngle);
 
             return _entityTaskToken == (int)EfemEntity.MSG.Align;
         }
+
+        public override bool Align(ModuleName ll)
+        {
+            _task = TaskType.Align;
+
+            LogTaskStart(_task, $"Aligning");
+
+            if (ll == ModuleName.LLA)
+            {
+                _llaIncreasingAngle= SC.GetValue<int>($"EFEM.LoadLock.LLAIncreasingAngle");
+                _llaAlignAngle= SC.GetValue<int>($"EFEM.LoadLock.LLAAlignAngle");
+
+                _llaAlignAngle= (_llaAlignAngle + _llaIncreasingAngle) % 360;
+
+                _entityTaskToken = _entity.InvokeAlign(ModuleName.Aligner1.ToString(), 0, _llaAlignAngle);
+            }
+            else if (ll == ModuleName.LLB)
+            {
+                _llbIncreasingAngle = SC.GetValue<int>($"EFEM.LoadLock.LLBIncreasingAngle");
+                _llbAlignAngle = SC.GetValue<int>($"EFEM.LoadLock.LLBAlignAngle");
+
+                _llbAlignAngle = (_llbAlignAngle + _llbIncreasingAngle) % 360;
+
+                _entityTaskToken = _entity.InvokeAlign(ModuleName.Aligner1.ToString(), 0, _llbAlignAngle);
+
+            }
+
+            return _entityTaskToken == (int)EfemEntity.MSG.Align;
+        }
     }
 }

+ 4 - 0
Venus/Venus_RT/Modules/Schedulers/SchedulerModule.cs

@@ -233,6 +233,10 @@ namespace Venus_RT.Scheduler
         {
             return true;
         }
+        public virtual bool Align(ModuleName ll)
+        {
+            return true;
+        }
         public virtual bool Preheating(float temperature)
         {
             return true;

+ 20 - 5
Venus/Venus_RT/Modules/SystemDispatcher.cs

@@ -637,7 +637,7 @@ namespace Venus_RT.Modules
             {
                 case ModuleStatus.WaitAlign:
                     {
-                        efemRobot.Align(0);
+                        efemRobot.Align(0F);
                         Status = ModuleStatus.Aligning;
                     }
                     break;
@@ -1576,8 +1576,23 @@ namespace Venus_RT.Modules
             {
                 module.Value.Status = ModuleStatus.Idle;
                 module.Value.Scheduler.ResetTask();
-            }
 
+                //if (ModuleHelper.IsLoadLock(module.Key))
+                //{
+                //    if (module.Value.Scheduler.)
+                //    {
+                //        _qeWaitCoolingLLs.Dequeue();
+                //    }
+                //}
+            }
+            _lstWaferTasks.ForEach(x =>
+            {
+                if (ModuleHelper.IsLoadLock(x.nextMod) && ModuleHelper.IsLoadPort(x.destMod) && !_qeWaitCoolingLLs.Contains(x.nextMod))
+                {
+                    _qeWaitCoolingLLs.Enqueue(x.nextMod);
+                }
+            });
+            
             List<string> keys = _loadportControlJobDic.Keys.ToList();
             foreach (var key in keys)
             {
@@ -1607,7 +1622,7 @@ namespace Venus_RT.Modules
             LP2InUseRecipes.Clear();
             LP3InUseRecipes.Clear();
             _qePollingJobs.Clear();
-            _qeWaitCoolingLLs.Clear();
+            //_qeWaitCoolingLLs.Clear();
             _cycleState = RState.End;
         }
 
@@ -1679,7 +1694,7 @@ namespace Venus_RT.Modules
                     if (wafer.IsEmpty)
                         continue;
 
-                    var destLP = (ModuleName)wafer.OriginStation;
+                    //var destLP = (ModuleName)wafer.OriginStation;
                     //if (!_dictModuleTask[destLP].Scheduler.IsAvailable)
                     //{
                     //    LOG.Write(eEvent.ERR_ROUTER, destLP, $"The destination Loadport {destLP} is not ready for return wafer.");
@@ -1737,7 +1752,7 @@ namespace Venus_RT.Modules
 
             if (_qeWaitCoolingLLs.Count > 0 && _dictModuleTask[_qeWaitCoolingLLs.First()].Scheduler.IsIdle && !IsLLReservedByEFEM(_qeWaitCoolingLLs.First()) && !IsLLReservedByTM(_qeWaitCoolingLLs.First()))
             {
-                if ((_dictModuleTask[_qeWaitCoolingLLs.First()] as LoadlockTask).Cooling())
+               (_dictModuleTask[_qeWaitCoolingLLs.First()] as LoadlockTask).Cooling();
                 {
                     _qeWaitCoolingLLs.Dequeue();
                     return RState.Running;

+ 1 - 1
Venus/Venus_RT/Modules/VenusDispatcher.cs

@@ -769,7 +769,7 @@ namespace Venus_RT.Modules
             {
                 case ModuleStatus.WaitAlign:
                     {
-                        tmRobot.Align(0);
+                        tmRobot.Align(0F);
                         Status = ModuleStatus.Aligning;
                     }
                     break;

+ 13 - 2
Venus/Venus_Simulator/Devices/AdTecGeneratorMockPMA.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
 using MECF.Framework.Simulator.Core.Driver;
@@ -19,7 +20,7 @@ namespace Venus_Simulator.Devices
         private const string EOF = "\r";
         private const char MSG_DELIMITER = '_';
         private const string MOCKUP_PORT = "COM37";
-
+        private string RFPower = "0";
     
         public AdTecGeneratorMockPMA() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)
         {
@@ -41,12 +42,20 @@ namespace Venus_Simulator.Devices
             string[] msgs = message.Split('\r');
             foreach(string msg in msgs)
             {
+                if (msg.Contains(" W"))
+                {
+                    RFPower = msg.Split(' ')[0].ToString().PadLeft(5, '0');
+                    if (_simGeneratorStatus == GeneratorStatus.ON)
+                    {
+                        sRes = $"2010000 12345 {RFPower} 00010 45678\r";
+                    }
+                }
                 switch (msg)
                 {
                     case "Q":
                         if (_simGeneratorStatus == GeneratorStatus.ON)
                         {
-                            sRes = "2010000 12345 00900 00010 45678\r";
+                            sRes = $"2010000 12345 {RFPower} 00010 45678\r";
                         }
                         else if (_simGeneratorStatus == GeneratorStatus.OFF)
                         {
@@ -61,6 +70,8 @@ namespace Venus_Simulator.Devices
                         _simGeneratorStatus = GeneratorStatus.OFF;
                         sRes = "\r";
                         break;
+
+              
                     default:
                         break;
                 }

+ 11 - 3
Venus/Venus_Simulator/Devices/AdTecGeneratorMockPMB.cs

@@ -19,6 +19,7 @@ namespace Venus_Simulator.Devices
         private const string EOF = "\r";
         private const char MSG_DELIMITER = '_';
         private const string MOCKUP_PORT = "COM35";
+        private string RFPower = "0";
 
         public AdTecGeneratorMockPMB() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)
         {
@@ -40,13 +41,20 @@ namespace Venus_Simulator.Devices
             string[] msgs = message.Split('\r');
             foreach (string msg in msgs)
             {
-
-                switch(msg)
+                if (msg.Contains(" W"))
+                {
+                    RFPower = msg.Split(' ')[0].ToString().PadLeft(5, '0');
+                    if (_simGeneratorStatus == GeneratorStatus.ON)
+                    {
+                        sRes = $"2010000 12345 {RFPower} 00010 45678\r";
+                    }
+                }
+                switch (msg)
                 {
                     case "Q":
                         if (_simGeneratorStatus == GeneratorStatus.ON)
                         {
-                            sRes = "2010000 12345 00900 00100 45678\r";
+                            sRes = $"2010000 12345 {RFPower} 00010 45678\r";
                         }
                         else if (_simGeneratorStatus == GeneratorStatus.OFF)
                         {

+ 10 - 1
Venus/Venus_Simulator/Devices/AdTecGeneratorMockPMC.cs

@@ -19,6 +19,7 @@ namespace Venus_Simulator.Devices
         private const string EOF = "\r";
         private const char MSG_DELIMITER = '_';
         private const string MOCKUP_PORT = "COM60";
+        private string RFPower = "0";
 
         public AdTecGeneratorMockPMC() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)
         {
@@ -40,12 +41,20 @@ namespace Venus_Simulator.Devices
             string[] msgs = message.Split('\r');
             foreach (string msg in msgs)
             {
+                if (msg.Contains(" W"))
+                {
+                    RFPower = msg.Split(' ')[0].ToString().PadLeft(5, '0');
+                    if (_simGeneratorStatus == GeneratorStatus.ON)
+                    {
+                        sRes = $"2010000 12345 {RFPower} 00010 45678\r";
+                    }
+                }
                 switch (msg)
                 {
                     case "Q":
                         if (_simGeneratorStatus == GeneratorStatus.ON)
                         {
-                            sRes = "2010000 12345 00900 00100 45678\r";
+                            sRes = $"2010000 12345 {RFPower} 00010 45678\r";
                         }
                         else if (_simGeneratorStatus == GeneratorStatus.OFF)
                         {

+ 11 - 2
Venus/Venus_Simulator/Devices/AdTecGeneratorMockPMD.cs

@@ -19,8 +19,9 @@ namespace Venus_Simulator.Devices
         private const string EOF = "\r";
         private const char MSG_DELIMITER = '_';
         private const string MOCKUP_PORT = "COM49";
+        private string RFPower = "0";
+
 
-    
         public AdTecGeneratorMockPMD() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER)
         {
             _simGeneratorStatus = GeneratorStatus.Unknown;
@@ -41,12 +42,20 @@ namespace Venus_Simulator.Devices
             string[] msgs = message.Split('\r');
             foreach(string msg in msgs)
             {
+                if (msg.Contains(" W"))
+                {
+                    RFPower = msg.Split(' ')[0].ToString().PadLeft(5, '0');
+                    if (_simGeneratorStatus == GeneratorStatus.ON)
+                    {
+                        sRes = $"2010000 12345 {RFPower} 00010 45678\r";
+                    }
+                }
                 switch (msg)
                 {
                     case "Q":
                         if (_simGeneratorStatus == GeneratorStatus.ON)
                         {
-                            sRes = "2010000 12345 00900 00100 45678\r";
+                            sRes = $"2010000 12345 {RFPower} 00010 45678\r";
                         }
                         else if (_simGeneratorStatus == GeneratorStatus.OFF)
                         {