Ver código fonte

update robot place aligner home

chenkui 3 semanas atrás
pai
commit
18048c3726

+ 3 - 0
CyberX8_RT/Config/Devices/WagoControllerCfg-Simulator.xml

@@ -487,5 +487,8 @@
 				<AI Name="AI7"  Address="7" Scaling="13=0,150=32767" DataType="short"/>
 			</AIGroup>
 		</Ano_In>
+
+		<Ano_Out>
+		</Ano_Out>
 	</WagoDeviceConfig>
 </WagoControllerConfig>

+ 3 - 0
CyberX8_RT/Config/Devices/WagoControllerCfg.xml

@@ -487,5 +487,8 @@
 				<AI Name="AI7"  Address="7" Scaling="13=0,150=32767" DataType="short"/>
 			</AIGroup>
 		</Ano_In>
+
+		<Ano_Out>
+		</Ano_Out>
 	</WagoDeviceConfig>
 </WagoControllerConfig>

+ 12 - 0
CyberX8_RT/Devices/EFEM/SunWayRobot.cs

@@ -383,6 +383,10 @@ namespace CyberX8_RT.Devices.EFEM
             }
             int stationNumber= _moduleStationNumberDictionary[strModuleWaferSize];
             string cmd = $"PICK {stationNumber} SLOT {slot+1} ARM {_armString[hand]}\r";
+            if(ModuleHelper.IsPUF(station)||ModuleHelper.IsAligner(station)||ModuleHelper.IsSRD(station))
+            {
+                cmd = $"PICK {stationNumber} SLOT 1 ARM {_armString[hand]}\r";
+            }
             _currentMessage = new EfemMessage()
             {
                 Operation=EfemOperation.Pick
@@ -434,6 +438,14 @@ namespace CyberX8_RT.Devices.EFEM
             _status = RState.Running;
             int stationNumber = _moduleStationNumberDictionary[strModuleWaferSize];
             string cmd = $"PLACE {stationNumber} SLOT {slot+1} ARM {_armString[hand]}\r";
+            if (ModuleHelper.IsPUF(station)||ModuleHelper.IsSRD(station))
+            {
+                cmd = $"PLACE {stationNumber} SLOT 1 ARM {_armString[hand]}\r";
+            }
+            if (ModuleHelper.IsAligner(station))
+            {
+                cmd = $"PLACE {stationNumber} HOME\r";
+            }
             SetRobotMovingInfo(RobotAction.Placing, hand, station);
             return WriteCommand(cmd);
         }

+ 28 - 3
CyberX8_RT/Dispatch/JobProcesser.cs

@@ -141,7 +141,6 @@ namespace CyberX8_RT.Dispatch
                 return false;
             }
 
-            int system_waferSize = SC.GetValue<int>("System.WaferSize");
 
             ControlJobInfo cj = new ControlJobInfo();
             cj.Name = jobId;
@@ -254,6 +253,7 @@ namespace CyberX8_RT.Dispatch
                 pj.SlotWafers = seqSlotWafers[seqs[i]];
                 pj.SetState(EnumProcessJobState.Queued);
 
+                WaferSize slotWafersSize = GetWaferSize(pj.SlotWafers);
                 string sequenceDirectory = sequenceType == PRODUCTION ? PathManager.GetProductionRecipeDir():PathManager.GetEngineeringRecipeDir();
                 string recipeFullPath = sequenceDirectory + $"\\{indexSequence[seqs[i]]}.seq.rcp";
                 SequenceRecipe sequenceRecipe = RecipeFileManager.Instance.LoadGenericityRecipe<SequenceRecipe>(recipeFullPath);
@@ -275,11 +275,21 @@ namespace CyberX8_RT.Dispatch
                 }
                 pj.SequenceRecipe= sequenceRecipe;
 
+
                 WaferSize waferSize = (WaferSize)pj.SequenceRecipe.SubstrateSize;
 
-                if (system_waferSize != pj.SequenceRecipe.SubstrateSize)
+                if (slotWafersSize!= waferSize)
                 {
-                    reason = $"sequence wafersize {pj.SequenceRecipe.SubstrateSize} is not matched system wafersize {system_waferSize}";
+                    reason = $"sequence wafersize {pj.SequenceRecipe.SubstrateSize} is not matched wafer wafersize {slotWafersSize}";
+                    LOG.WriteLog(eEvent.WARN_ROUTER, ModuleName.System.ToString(), reason);
+                    return false;
+                }
+
+                int sideAWaferSize = SC.GetValue<int>($"Loader1.SideAWaferSize");
+                int sideBWaferSize = SC.GetValue<int>($"Loader1.SideBWaferSize");
+                if ((int)waferSize != sideAWaferSize && (int)waferSize != sideBWaferSize)
+                {
+                    reason = $"loader is not matched wafer wafersize {waferSize}";
                     LOG.WriteLog(eEvent.WARN_ROUTER, ModuleName.System.ToString(), reason);
                     return false;
                 }
@@ -322,6 +332,21 @@ namespace CyberX8_RT.Dispatch
             return true;
         }
         /// <summary>
+        /// 获取Wafer尺寸
+        /// </summary>
+        /// <param name="slotWafers"></param>
+        /// <returns></returns>
+        private WaferSize GetWaferSize(List<Tuple<ModuleName,int>> slotWafers)
+        {
+            var result = slotWafers[0];
+            WaferInfo waferInfo = WaferManager.Instance.GetWafer(result.Item1, result.Item2);
+            if (!waferInfo.IsEmpty)
+            {
+                return waferInfo.Size;
+            }
+            return WaferSize.WS0;
+        }
+        /// <summary>
         /// 更新所有BufferCellWaferHolder可以拉至Loader
         /// </summary>
         private void UpdateAllBufferCellWaferHollderToLoader()

+ 9 - 9
CyberX8_RT/Schedulers/SchedulerSequenceManager.cs

@@ -62,7 +62,7 @@ namespace CyberX8_RT.Schedulers
             SchedulerSequence alignerSequence=CreateAlignerSequence(sequenceRecipe.AlignmentAngle,ref index);
             schedulerSequences.Add(alignerSequence);
             //从Aligner至Puf B面
-            MoveItem moveItem2 = new MoveItem(ModuleName.Aligner1, 0, pufModule, 0, Aitex.Sorter.Common.Hand.Blade1);
+            MoveItem moveItem2 = new MoveItem(ModuleName.Aligner1, 0, pufModule, 1, Aitex.Sorter.Common.Hand.Blade1);
             SchedulerSequence secondEfemRobotSequence = CreateEfemRobotSequence(moveItem2,null,ref index);
             schedulerSequences.Add(secondEfemRobotSequence);
             SchedulerSequence pufSequence=CreatePufSequence(pufModule,sequenceRecipe,side,true,ref index);
@@ -144,7 +144,7 @@ namespace CyberX8_RT.Schedulers
             //Buffer To Loader
             ModuleName currentLocationModuleName = (ModuleName)Enum.Parse(typeof(ModuleName), waferHolderInfo.CurrentLocation);
             WaferHolderMoveItem bufferMoveToLoaderItem = new WaferHolderMoveItem(currentLocationModuleName, ModuleType.Buffer, ModuleName.Loader1, ModuleType.Loader);
-            SchedulerSequence bufferToLoaderSequence = CreateLoaderTransporterSequence(bufferMoveToLoaderItem, ref index);
+            SchedulerSequence bufferToLoaderSequence = CreateLoaderTransporterSequence(bufferMoveToLoaderItem,sequenceRecipe, ref index);
             schedulerSequences.Add(bufferToLoaderSequence);
             //Loader
             SchedulerSequence loaderSequence = CreateLoaderSequence(waferCount,ref index);
@@ -167,7 +167,7 @@ namespace CyberX8_RT.Schedulers
             ModuleName currentLocationModuleName = (ModuleName)Enum.Parse(typeof(ModuleName), waferHolderInfo.CurrentLocation);
             ModuleName bufferModule = (ModuleName)Enum.Parse(typeof(ModuleName), waferHolderInfo.OriginalBuffer);
             WaferHolderMoveItem bufferMoveToLoaderItem = new WaferHolderMoveItem(currentLocationModuleName, ModuleType.Buffer, ModuleName.Loader1, ModuleType.Loader);
-            SchedulerSequence bufferToLoaderSequence = CreateLoaderTransporterSequence(bufferMoveToLoaderItem, ref index);
+            SchedulerSequence bufferToLoaderSequence = CreateLoaderTransporterSequence(bufferMoveToLoaderItem,waferHolderInfo.SequenceRecipe, ref index);
             schedulerSequences.Add(bufferToLoaderSequence);
             //Loader
             SchedulerSequence loaderSequence = CreateLoaderSequence(waferCount,ref index);
@@ -175,7 +175,7 @@ namespace CyberX8_RT.Schedulers
             //Loader To Buffer
             WaferHolderMoveItem loaderMoveToBufferItem = new WaferHolderMoveItem(ModuleName.Loader1, ModuleType.Loader,
                 bufferModule, ModuleType.Buffer);
-            SchedulerSequence loaderToBufferSequence = CreateLoaderTransporterSequence(loaderMoveToBufferItem, ref index);
+            SchedulerSequence loaderToBufferSequence = CreateLoaderTransporterSequence(loaderMoveToBufferItem,waferHolderInfo.SequenceRecipe, ref index);
             schedulerSequences.Add(loaderToBufferSequence);
             return schedulerSequences;
         }
@@ -229,13 +229,13 @@ namespace CyberX8_RT.Schedulers
             //Loader To Buffer
             WaferHolderMoveItem loaderMoveToBufferItem = new WaferHolderMoveItem(ModuleName.Loader1, ModuleType.Loader,
                 moduleName, ModuleType.Buffer);
-            SchedulerSequence loaderToBufferSequence = CreateLoaderTransporterSequence(loaderMoveToBufferItem, ref index);
+            SchedulerSequence loaderToBufferSequence = CreateLoaderTransporterSequence(loaderMoveToBufferItem,sequenceRecipe, ref index);
             schedulerSequences.Add(loaderToBufferSequence);
             //解析sequence recipe后续的工序
             var result = AnalyseSequenceRecipeScheduler(sequenceRecipe);
             //buffer to recipe第一个工序
             WaferHolderMoveItem bufferToFirstItem = new WaferHolderMoveItem(moduleName, ModuleType.Buffer, ModuleName.Unknown, result.firstModuleType);
-            SchedulerSequence bufferSequence = CreateLoaderTransporterSequence(bufferToFirstItem, ref index);
+            SchedulerSequence bufferSequence = CreateLoaderTransporterSequence(bufferToFirstItem,sequenceRecipe, ref index);
             schedulerSequences.Add(bufferSequence);
             //调整工序后面的索引
             foreach (SchedulerSequence item in result.sequences)
@@ -246,7 +246,7 @@ namespace CyberX8_RT.Schedulers
             schedulerSequences.AddRange(result.sequences);
             //从recipe最后工序
             WaferHolderMoveItem lastToBufferItem = new WaferHolderMoveItem(ModuleName.Unknown, result.lastModuleType, moduleName, ModuleType.Buffer);
-            SchedulerSequence lastToBufferSequence = CreateLoaderTransporterSequence(lastToBufferItem, ref index);
+            SchedulerSequence lastToBufferSequence = CreateLoaderTransporterSequence(lastToBufferItem,sequenceRecipe, ref index);
             schedulerSequences.Add(lastToBufferSequence);
             return schedulerSequences;
         }
@@ -453,14 +453,14 @@ namespace CyberX8_RT.Schedulers
         /// </summary>
         /// <param name="index"></param>
         /// <returns></returns>
-        private SchedulerSequence CreateLoaderTransporterSequence(WaferHolderMoveItem waferHolderMoveItem, ref int index)
+        private SchedulerSequence CreateLoaderTransporterSequence(WaferHolderMoveItem waferHolderMoveItem,SequenceRecipe sequenceRecipe, ref int index)
         {
             SchedulerSequence sequence = new SchedulerSequence();
             sequence.ModuleType = ModuleType.Transporter;
             sequence.ModuleName = ModuleName.Transporter2;
             sequence.SequenceIndex = index;
             sequence.State = RState.Init;
-            sequence.Recipe = null;
+            sequence.Recipe = sequenceRecipe;
             sequence.SchedulerModule = SchedulerManager.Instance.GetScheduler(ModuleName.Transporter2);
             sequence.Parameters = waferHolderMoveItem;
             sequence.MaterialType = MaterialType.WaferHolder;

+ 1 - 2
CyberX8_RT/Schedulers/Transporter/SchedulerLoaderTransporter.cs

@@ -165,7 +165,7 @@ namespace CyberX8_RT.Schedulers.Transporter
 
             if (_loaderEntity.IsIdle)
             {
-                bool loaderResult = _loaderEntity.CheckToPostMessage<LOADERSTATE, LoaderMSG>(Aitex.Core.RT.Log.eEvent.WARN_LOADER,
+                bool loaderResult = _loaderEntity.CheckToPostMessage<LOADERSTATE, LoaderMSG>(eEvent.WARN_LOADER,
                     _loaderEntity.Module.ToString(), (int)LoaderMSG.PrepareForPlace);
                 if (loaderResult)
                 {
@@ -213,7 +213,6 @@ namespace CyberX8_RT.Schedulers.Transporter
             }
             return false;
         }
-
         /// <summary>
         /// 传输WaferHolder(无WaferHolder)
         /// </summary>