using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using Aitex.Core.RT.SCCore; using Aitex.Core.RT.Log; using MECF.Framework.Common.ToolLayout; namespace MECF.Framework.Common.Equipment { /// /// 在框架中,Module指具备放置Wafer的单元 /// [DataContract] [Serializable] public enum ModuleName { [EnumMember] Unknown=9999, [EnumMember] System = 0, [EnumMember] LP1, [EnumMember] LP2, [EnumMember] LP3, [EnumMember] LP4, [EnumMember] LP5, [EnumMember] LP6, [EnumMember] LP7, [EnumMember] LP8, [EnumMember] LP9, [EnumMember] LP10, //robot modules //[EnumMember] //Robot, [EnumMember] VaccumRobot, [EnumMember] LoadRobot, [EnumMember] EfemRobot, //[EnumMember] //TMRobot, //upenders [EnumMember] Upender, //efem [EnumMember] EFEM, //aligners [EnumMember] Aligner, [EnumMember] Aligner1, [EnumMember] Aligner2, [EnumMember] Robot, [EnumMember] PMA, [EnumMember] PMB, [EnumMember] PMC, [EnumMember] PMD, [EnumMember] PME, [EnumMember] PMF, [EnumMember] VPA, [EnumMember] SRD1, [EnumMember] SRD2, [EnumMember] PUF1, [EnumMember] PUF2, [EnumMember] Dummy1, [EnumMember] Dummy2, [EnumMember] Loader1, [EnumMember] Dryer1, [EnumMember] Dryer2, [EnumMember] Dryer3, [EnumMember] Prewet1, [EnumMember] Rinse1, [EnumMember] Rinse2, [EnumMember] Rinse3, [EnumMember] Rinse4, [EnumMember] Rinse5, [EnumMember] Rinse6, [EnumMember] Metal1, [EnumMember] Metal2, [EnumMember] Metal3, [EnumMember] Metal4, [EnumMember] Metal5, [EnumMember] Metal6, [EnumMember] Metal7, [EnumMember] Metal8, [EnumMember] Metal9, [EnumMember] Metal10, [EnumMember] Metal11, [EnumMember] Metal12, [EnumMember] Metal13, [EnumMember] Metal14, [EnumMember] Metal15, [EnumMember] Metal16, [EnumMember] Linmot, [EnumMember] Transporter1, [EnumMember] Transporter2, [EnumMember] Buffer1, [EnumMember] Buffer2, [EnumMember] Buffer3, [EnumMember] Buffer4, [EnumMember] Buffer5, [EnumMember] Buffer6, [EnumMember] Buffer7, [EnumMember] Buffer8, [EnumMember] Buffer9, [EnumMember] Buffer10, [EnumMember] Buffer11, [EnumMember] Buffer12, [EnumMember] Buffer13, [EnumMember] Buffer14, [EnumMember] Buffer15, [EnumMember] Buffer16, [EnumMember] Buffer17, [EnumMember] Buffer18, [EnumMember] Buffer19, [EnumMember] Buffer20, [EnumMember] Reservoir1, [EnumMember] Reservoir2, [EnumMember] Reservoir3, [EnumMember] Reservoir4, [EnumMember] Reservoir5 } /// /// 模块类型 /// public enum ModuleType { None, LoadPort, EfemRobot, Aligner, SRD, PUF, Loader, Buffer, Dryer, Rinse, Prewet, Metal, Dummy, Transporter, Reservoir } public static class ModuleHelper { public static bool IsPrewet(ModuleName unit) { return unit == ModuleName.Prewet1; } public static bool IsSRD(ModuleName unit) { return unit == ModuleName.SRD1 || unit == ModuleName.SRD2; } public static bool IsPUF(ModuleName unit) { return unit == ModuleName.PUF1 || unit == ModuleName.PUF2; } public static bool IsMetal(ModuleName unit) { return (int)unit >= (int)ModuleName.Metal1 && (int)unit <= (int)ModuleName.Metal16; } public static bool IsDry(ModuleName unit) { return (int)unit >= (int)ModuleName.Dryer1 && (int)unit <= (int)ModuleName.Dryer3; } public static bool IsReservoir(ModuleName unit) { return (int)unit >= (int)ModuleName.Reservoir1 && (int)unit <= (int)ModuleName.Reservoir5; } public static bool IsRinse(ModuleName unit) { return (int)unit >= (int)ModuleName.Rinse1 && (int)unit <= (int)ModuleName.Rinse6; } public static bool IsBuffer(ModuleName unit) { return (int)unit>=(int)ModuleName.Buffer1&&(int)(unit)<=(int)ModuleName.Buffer19; } public static bool IsLoadPort(ModuleName unit) { return unit == ModuleName.LP1 || unit == ModuleName.LP2 || unit == ModuleName.LP3 || unit == ModuleName.LP4 || unit == ModuleName.LP5 || unit == ModuleName.LP6 || unit == ModuleName.LP7 || unit == ModuleName.LP8 || unit == ModuleName.LP9 || unit == ModuleName.LP10; } public static bool IsDummy(ModuleName unit) { return unit == ModuleName.Dummy1 || unit == ModuleName.Dummy2; } public static bool IsAligner(ModuleName unit) { return unit == ModuleName.Aligner || unit == ModuleName.Aligner1 || unit == ModuleName.Aligner2 ; } public static bool IsEFEMRobot(ModuleName unit) { return unit == ModuleName.EfemRobot; } public static bool IsVPA(ModuleName unit) { return unit == ModuleName.VPA; } public static string GetAbbr(ModuleName module) { switch (module) { case ModuleName.Aligner: return "PA"; case ModuleName.Robot: return "RB"; default: return module.ToString(); } } public static ModuleName Converter(string module) { return (ModuleName) Enum.Parse(typeof(ModuleName), module); } /// /// /// /// 0 based /// public static ModuleName GetLoadPort(int index) { ModuleName[] lps = new ModuleName[] { ModuleName.LP1, ModuleName.LP2, ModuleName.LP3, ModuleName.LP4, ModuleName.LP5, ModuleName.LP6, ModuleName.LP7, ModuleName.LP8, ModuleName.LP9, ModuleName.LP10, }; return lps[index]; } private static List _lstModules = new List(); private static readonly object _lock = new object(); public static bool IsInstalled(ModuleName module) { //if (_lstModules.Count == 0) //{ // LoadModules(); //} //return _lstModules.Contains(module); return ToolLayoutConfigManager.Instance.IsInstalled(module); } public static void LoadModules() { lock (_lock) { try { string moduleString = SC.GetStringValue("System.InstalledModules"); var modules = moduleString.Split(','); foreach (var mod in modules) { var module = Converter(mod.Trim()); _lstModules.Add(module); } } catch (Exception e) { LOG.WriteExeption("Loading intalled module error, please check the config item: System.InstalledModules", e); } } } } public class ModuleNameString { public const string System = "System"; public const string LDULD = "LDULD"; public const string BufferOut = "BufferOut"; public const string BufferIn = "BufferIn"; public const string Dryer = "Dryer"; public const string QDR = "QDR"; public const string Robot = "Robot"; public const string Handler = "Handler"; public static ModuleName ToEnum(string value) { return (ModuleName)Enum.Parse(typeof(ModuleName), value, true); } } }