123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Aitex.Core.Common;
- using Aitex.Core.RT.DataCenter;
- using Aitex.Core.RT.Log;
- using Aitex.Core.RT.SCCore;
- using Aitex.Sorter.Common;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.SubstrateTrackings;
- namespace Aitex.Sorter.RT.Module.Recipe
- {
- class RecipeParserTransferNToN : IRecipeParser
- {
- public SorterRecipeXml XmlRecipe { get; set; }
- public bool Init(SorterRecipeXml xmlRecipe, out string reason)
- {
- reason = string.Empty;
- if (xmlRecipe.RecipeType != SorterRecipeType.TransferNToN)
- {
- LOG.Write("xml recipe type not valid, " + xmlRecipe.RecipeType);
- reason = "Recipe xml file not valid";
- return false;
- }
- XmlRecipe = xmlRecipe;
- return true;
- }
- public List<TransferInfo> Parse(out string reason)
- {
- List<TransferInfo> result = new List<TransferInfo>();
- reason = string.Empty;
- SCConfigItem _scEnable = SC.GetConfigItem("LoadPort.EnableSlot1OnLP2");
- SCConfigItem _scLP2Pitch = SC.GetConfigItem("LoadPort.LoadPort2Pitch");
- if (_scLP2Pitch == null || _scLP2Pitch.IntValue == 10)
- {
- foreach (var item in XmlRecipe.TransferItems)
- {
- WaferInfo[] wafersInSource = WaferManager.Instance.GetWafers(item.SourceStation);
- WaferInfo[] wafersInDestination = WaferManager.Instance.GetWafers(item.DestinationStation);
- if (wafersInSource[item.SourceSlot].IsEmpty || !wafersInDestination[item.DestinationSlot].IsEmpty)
- continue;
- result.Add(new TransferInfo()
- {
-
- Angle = item.AlignAngle,
- Option = (item.IsAlign ? MoveOption.Align : MoveOption.None)
- | (item.IsReadLaserMarker ? MoveOption.ReadID : MoveOption.None)
- | (item.IsReadT7Code ? MoveOption.ReadID2 : MoveOption.None)
- | (XmlRecipe.WaferReaderIndex == 1 ? MoveOption.Reader1 : MoveOption.None)
- | (XmlRecipe.WaferReaderIndex == 2 ? MoveOption.Reader2 : MoveOption.None)
- | (XmlRecipe.IsTurnOver ? MoveOption.Turnover : MoveOption.None),
- SourceSlot = item.SourceSlot,
- Source = item.SourceStation,
- Slot = item.DestinationSlot,
- Station = item.DestinationStation,
- WaferID = wafersInSource[item.SourceSlot].WaferID,
- });
- }
- }
- else {
- int index = 0;
- foreach (var item in XmlRecipe.TransferItems)
- {
- WaferInfo[] wafersInSource = WaferManager.Instance.GetWafers(item.SourceStation);
- WaferInfo[] wafersInDestination = WaferManager.Instance.GetWafers(item.DestinationStation);
- if (wafersInSource[item.SourceSlot].IsEmpty || !wafersInDestination[item.DestinationSlot].IsEmpty ||
- (!_scEnable.BoolValue && item.DestinationStation == ModuleName.LP2 && item.DestinationSlot == 0)||
- (item.DestinationStation == ModuleName.LP2 && ((item.DestinationSlot > 0&& !wafersInDestination[item.DestinationSlot-1].IsEmpty)||(index > 0 &&item.DestinationSlot-1== XmlRecipe.TransferItems[index-1].DestinationSlot)))||
- (item.SourceStation == ModuleName.LP2 && ((item.SourceSlot > 0 && !wafersInSource[item.SourceSlot - 1].IsEmpty) || (item.SourceSlot - 1 == XmlRecipe.TransferItems[index+1].SourceSlot))))
- continue;
- result.Add(new TransferInfo()
- {
- Angle = item.AlignAngle,
- Option = (item.IsAlign ? MoveOption.Align : MoveOption.None)
- | (item.IsReadLaserMarker ? MoveOption.ReadID : MoveOption.None)
- | (item.IsReadT7Code ? MoveOption.ReadID2 : MoveOption.None)
- | (XmlRecipe.WaferReaderIndex == 1 ? MoveOption.Reader1 : MoveOption.None)
- | (XmlRecipe.WaferReaderIndex == 2 ? MoveOption.Reader2 : MoveOption.None)
- | (XmlRecipe.IsTurnOver ? MoveOption.Turnover : MoveOption.None),
- SourceSlot = item.SourceSlot,
- Source = item.SourceStation,
- Slot = item.DestinationSlot,
- Station = item.DestinationStation,
- WaferID = wafersInSource[item.SourceSlot].WaferID,
- });
- index++;
- }
- }
- //if (result.Count == 0)
- // reason = "Recipe has no vaild transfer task.";
- return result;
- }
- }
- }
|