Browse Source

Remove the Align angle definition in sequence and implement the Loadlock delay function.

sangwq 1 year ago
parent
commit
4259958c23

+ 0 - 11
Venus/Framework/Common/Jobs/SequenceInfo.cs

@@ -155,17 +155,6 @@ namespace MECF.Framework.Common.Jobs
                                 continue;
                             }
 
-                            if (attr.Name == "AlignerAngle")
-                            {
-                                if (!double.TryParse(attr.Value, out double angle))
-                                {
-                                    //LOG.Error($"{seqFile} AlignAngle {attr.Value} not valid");
-                                    return null;
-                                }
-
-                                stepInfo.AlignAngle = angle;
-                                continue;
-                            }
 
                             if(attr.Name == "WTWClean")
                             {

+ 0 - 4
Venus/Framework/Common/Jobs/SequenceStepInfo.cs

@@ -9,10 +9,6 @@ namespace MECF.Framework.Common.Jobs
     {
         public List<ModuleName> StepModules { get; set; }
 
-        //public string RecipeName { get; set; }
-
-        public double AlignAngle { get; set; }
-
         public Dictionary<string, object> StepParameter { get; set; }
 
         public SequenceStepInfo()

+ 0 - 1
Venus/Framework/Common/SubstrateTrackings/WaferInfo.cs

@@ -428,7 +428,6 @@ namespace Aitex.Core.Common
 					foreach(var step in source.ProcessJob.Sequence.Steps)
                     {
 						var newStep = new SequenceStepInfo();
-						newStep.AlignAngle = step.AlignAngle;
 						newStep.StepModules = new List<MECF.Framework.Common.Equipment.ModuleName>(step.StepModules.ToArray());
 						newStep.StepParameter = step.StepParameter.ToDictionary(entry => entry.Key, entry => entry.Value);
 

+ 3 - 3
Venus/Venus_RT/Config/SequenceFormat.xml

@@ -3,8 +3,8 @@
   <TableSequenceFormat RecipeVersion="Cluster">
     <Catalog Type="Position">
       <Item Name="Position" DisplayName="Position" InputType="ReadOnlySelection" >
-        <Selection Name="Aligner" DisplayName="Aligner" Parameter="AlignerSelection,AlignAngle" />
-        <Selection Name="LL" DisplayName="LL" Parameter="LLSelection" />
+        <Selection Name="Aligner" DisplayName="Aligner" Parameter="AlignerSelection" />
+        <Selection Name="LL" DisplayName="LL" Parameter="LLSelection,LLDelayTime" />
         <Selection Name="PM" DisplayName="PM" Parameter="PMSelection,PMARecipe,PMBRecipe,PMCRecipe,PMDRecipe,WTWClean" />
         <!--<Selection Name="Cooling" DisplayName="Cooling" Parameter="CoolingSelection,CoolingTime" />-->
       </Item>
@@ -53,7 +53,7 @@
       <Item Name="PMDRecipe" DisplayName="PMD Recipe" InputType="RecipeSelection" Parameter="PMD"    Min="0" Max="999999"  />
 		
       <Item Name="WTWClean" DisplayName="WTW Clean" InputType="RecipeSelection"     Min="0" Max="999999"  />
-
+      <Item Name="LLDelayTime" DisplayName="LL Delay Time(s)" InputType="NumInput"   Min="0" Max="3600"  />
 
 		<!--<Item Name="CoolingTime" DisplayName="Cooling Time(s)" InputType="NumInput"   Min="0" Max="360"  />-->
 

+ 21 - 11
Venus/Venus_RT/Modules/AutoCycle.cs

@@ -1716,29 +1716,39 @@ namespace Venus_RT.Modules
             if (_lstReturnWafers.Contains(wafer.InnerId))
                 return false;
 
-            if (wafer.NextSequenceStep == wafer.ProcessJob.Sequence.Steps.Count)
-            {
-                // need return
-                return true;
-            }
-            else if (wafer.NextSequenceStep > wafer.ProcessJob.Sequence.Steps.Count)
+            if (wafer.NextSequenceStep > wafer.ProcessJob.Sequence.Steps.Count)
             {
                 // should not go here
                 LOG.Write(eEvent.ERR_ROUTER, ModuleName.System, $"Wafer:{wafer.WaferOrigin} NextSequenceStep {wafer.NextSequenceStep} exceeds {wafer.ProcessJob.Sequence.Name} max steps number in IsAtmWaferReadyOut()");
                 return false;
             }
-
-            if (wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepModules.Contains(mod))
-                return false;
-
-            if (ModuleHelper.IsLoadLock(mod))
+            else if (wafer.NextSequenceStep < wafer.ProcessJob.Sequence.Steps.Count)
             {
+                if(wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepModules.Contains(mod))
+                    return false;
+
                 foreach (var module in wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepModules)
                 {
                     if (ModuleHelper.IsPm(module))
                         return false;
                 }
             }
+                
+
+            // Wafer Delay
+            if (ModuleHelper.IsLoadLock(mod) && (wafer.ProcessState == EnumWaferProcessStatus.Completed))
+            {
+                if (wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep - 1].StepParameter.ContainsKey("LLDelayTime"))
+                {
+                    var delayTime = (string)wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep - 1].StepParameter["LLDelayTime"];
+                    int delay = int.Parse(delayTime);
+
+                    return _atmSchedulers[mod].WaferArrivedTicks(slot) >= delay * 1000;
+                }
+
+                // need return
+                return true;
+            }
 
             return true;
         }

+ 6 - 6
Venus/Venus_RT/Modules/Schedulers/SchedulerModule.cs

@@ -119,7 +119,7 @@ namespace Venus_RT.Scheduler
 
         protected ModuleName _inProcessRobot;
 
-        public Dictionary<int, long> WaferArriveTicks { get; set; }
+        public Dictionary<int, DateTime> WaferArriveTicks { get; set; }
 
         public EventHandler<WaferMoveArgs> EventWaferArrived;
         public EventHandler<WaferMoveArgs> EventWaferLeaved;
@@ -127,8 +127,8 @@ namespace Venus_RT.Scheduler
         public SchedulerModule(string module)
         {
             _module = module;
-            WaferArriveTicks = new Dictionary<int, long>();
-            WaferArriveTicks[3] = WaferArriveTicks[2] = WaferArriveTicks[1] = WaferArriveTicks[0] = DateTime.Now.Ticks;
+            WaferArriveTicks = new Dictionary<int, DateTime>();
+            WaferArriveTicks[3] = WaferArriveTicks[2] = WaferArriveTicks[1] = WaferArriveTicks[0] = DateTime.Now;
         }
         protected void LogTaskStart(TaskType cmd, string message)
         {
@@ -172,7 +172,7 @@ namespace Venus_RT.Scheduler
 
             _task = TaskType.None;
 
-            WaferArriveTicks[_inTransferSlot] = DateTime.Now.Ticks;
+            WaferArriveTicks[_inTransferSlot] = DateTime.Now;
             return true;
         }
 
@@ -268,12 +268,12 @@ namespace Venus_RT.Scheduler
 
         public virtual void WaferArrived(int slot)
         {
-            WaferArriveTicks[slot] = DateTime.Now.Ticks;
+            WaferArriveTicks[slot] = DateTime.Now;
         }
 
         public virtual long WaferArrivedTicks(int slot)
         {
-            return DateTime.Now.Ticks - WaferArriveTicks[slot];
+            return (long)(DateTime.Now - WaferArriveTicks[slot]).TotalMilliseconds;
         }
 
         #endregion