| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 | 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); }        /// <summary>        ///         /// Zone: 测量点旋转一周的轨迹        /// Section:托盘上每一圈Pocket的轨迹        ///         /// 下面的辅助函数用于方便相互之间的转换        ///         /// </summary>        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<string> result = new List<string>();            if (Config != null)                foreach (var item in Config.Zones)                    result.Add(item.Name);            return result.ToArray();        }        Notch[] GetSectionNotch(string section)        {            List<string> sectionName = new List<string>() { "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;        }    }}
 |