using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; using Aitex.Core.Util; namespace Aitex.Core.Equipment.SusceptorDefine { [DataContract] public class Susceptor { [DataMember] public Guid Id { get; set; } [DataMember] public WaferStatus[] WaferStatusArray { get; set; } [DataMember] public WaferType[] WaferTypeArray { get; set; } [DataMember] public string Type { get; set; } [DataMember] public SusceptorConfig Config { get; set; } [DataMember] public SusceptorStatus Status { get; set; } [DataMember] public string RecipeName { get; set; } [DataMember] public string UserDefinedId { get; set; } [DataMember] public string Description { get; set; } [DataMember] public string ModuleProcessedIn { get; set; } [DataMember] public string ModuleBufferedIn { get; set; } [DataMember] public DateTime CreateTime { get; set; } [DataMember] public DateTime ProcessStartTime { get; set; } [DataMember] public DateTime ProcessEndTime { get; set; } [DataMember] public string TargetRecipe { get; set; } public Susceptor() { WaferStatusArray = new WaferStatus[150]; WaferTypeArray = new WaferType[150]; CreateTime = DateTime.Now; TargetRecipe = string.Empty; } public bool IsEmpty() { return Id == Guid.Empty; } public bool IsUnProcessed() { return (Id != Guid.Empty) && (Status == SusceptorStatus.Unprocessed); } /// /// /// Zone: 测量点旋转一周的轨迹 /// Section:托盘上每一圈Pocket的轨迹 /// /// 下面的辅助函数用于方便相互之间的转换 /// /// public int[] GetZoneDisplayNumber(int zone) { if (zone >= GetZoneNameList().Length) return null; Section s = GetZoneSection(zone); if (s == null) return null; return GetSectionDisplayNumber(s.Name); } public Notch[] GetZoneNotch(int zone) { Section s = GetZoneSection(zone); if (s == null) return null; return GetSectionNotch(GetZoneSection(zone).Name); } Section GetZoneSection(int zone) { if (Config == null) return null; string[] ZoneName = GetZoneNameList(); if (zone >= ZoneName.Length) return null; Zone z = Config.Zones.Find(x => x.Name == ZoneName[zone]); return Config.Sections.Find(x => x.Name == z.Section); } public string[] GetZoneNameList() { List result = new List(); if (Config != null) foreach (var item in Config.Zones) result.Add(item.Name); return result.ToArray(); } Notch[] GetSectionNotch(string section) { List sectionName = new List() { "A", "B", "C", "D" }; int index = sectionName.FindIndex(x => x == section); int from = 0; for (int i = 0; i < index; i++) from += Config.Sections[i].NotchCount; return Config.Notches.GetRange(from, Config.Sections[index].NotchCount).ToArray(); } int[] GetSectionDisplayNumber(string section) { Notch[] notches = GetSectionNotch(section); int[] result = new int[notches.Length]; for (int i = 0; i < result.Length; i++) result[i] = notches[i].DisplayIndex; return result; } } }