using System.Collections.Generic; using Aitex.Core.RT.Event; using Aitex.Core.RT.RecipeCenter; using Aitex.Core.Util; using Aitex.Sorter.Common; namespace Aitex.Sorter.RT.Module.Recipe { public class RtRecipe : Singleton { private RecipeParserTransfer1To1 _parserTransfer1To1 = new RecipeParserTransfer1To1(); private RecipeParserTransferNToN _parserTransferNToN = new RecipeParserTransferNToN(); private RecipeParserOrder _parserOrder = new RecipeParserOrder(); private RecipeParserPack _parserPack = new RecipeParserPack(); private RecipeParserAlign _parserAlign = new RecipeParserAlign(); private RecipeParserReadWaferId _parserReadWaferId = new RecipeParserReadWaferId(); private IRecipeParser _parser; public TransferInfo[] GetRecipeTransferInfo(string recipeName, HostRecipe hostRecipe, out string reason) { reason = string.Empty; //Normal recipe List _infos = new List(); SorterRecipeXml xmlRecipe = new SorterRecipeXml(RecipeFileManager.Instance.LoadRecipe(ChamberSetString.System, recipeName, false), recipeName); switch (xmlRecipe.RecipeType) { case SorterRecipeType.Align: _parser = _parserAlign; break; case SorterRecipeType.Order: _parser = _parserOrder; break; case SorterRecipeType.Pack: _parser = _parserPack; break; case SorterRecipeType.ReadWaferId: _parser = _parserReadWaferId; break; case SorterRecipeType.Transfer1To1: _parser = _parserTransfer1To1; break; case SorterRecipeType.TransferNToN: _parser = _parserTransferNToN; break; default: _parser = null; break; } if (_parser == null) { reason = string.Format("recipe file {0} not valid, Type {1} not support", recipeName, xmlRecipe.RecipeType); EV.PostMessage(ChamberSetString.System, EventEnum.DefaultWarning, reason); return null; } if (!_parser.Init(xmlRecipe, out reason)) { EV.PostMessage(ChamberSetString.System, EventEnum.DefaultWarning, reason); return null; } _infos = _parser.Parse(out reason); if (!string.IsNullOrEmpty(reason)) { EV.PostMessage(ChamberSetString.System, EventEnum.DefaultWarning, reason); return null; } return _infos.ToArray(); } public TransferInfo[] GetRecipeTransferInfo(SorterRecipeXml recipe, out string reason) { reason = string.Empty; //Normal recipe List _infos = new List(); switch (recipe.RecipeType) { case SorterRecipeType.Align: _parser = _parserAlign; break; case SorterRecipeType.Order: _parser = _parserOrder; break; case SorterRecipeType.Pack: _parser = _parserPack; break; case SorterRecipeType.ReadWaferId: _parser = _parserReadWaferId; break; case SorterRecipeType.Transfer1To1: _parser = _parserTransfer1To1; break; case SorterRecipeType.TransferNToN: _parser = _parserTransferNToN; break; default: _parser = null; break; } if (_parser == null) { reason = string.Format("recipe file {0} not valid, Type {1} not support", recipe.Name, recipe.RecipeType); EV.PostMessage(ChamberSetString.System, EventEnum.DefaultWarning, reason); return null; } if (!_parser.Init(recipe, out reason)) { EV.PostMessage(ChamberSetString.System, EventEnum.DefaultWarning, reason); return null; } _infos = _parser.Parse(out reason); if (!string.IsNullOrEmpty(reason)) { EV.PostMessage(ChamberSetString.System, EventEnum.DefaultWarning, reason); return null; } return _infos.ToArray(); } } }