using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.Serialization; using System.Text; using Aitex.Core.RT.Log; using MECF.Framework.Common.CommonData; using MECF.Framework.Common.Jobs; namespace Aitex.Core.Common { public enum WaferSize { WS0, //undefine, initialize status WS3, WS4=100, WS6=150, WS150, //150mm WS159, //150mm with tray WS8=200, WS12=300, } public enum WaferStatus { Empty = 0, Normal = 1, Crossed = 3, Double = 7, Unknown = 8, Dummy = 4 } public enum WaferType { /// /// 生产片 /// Production=0, /// /// 辅助片 /// Assit=1 } public enum EnumWaferProcessStatus { Idle = 0, Dummy, Canceled, InProcess, Completed, Failed, MisProcessed, MisSrdProcess } public enum EnumWaferChuckStatus { Init = 0, Chucked, Dechucked, } [Serializable] [DataContract] public class WaferInfo : NotifiableItem { public bool IsEmpty { get { return Status == WaferStatus.Empty; } } private string waferID; [DataMember] public string WaferID { get { return waferID; } set { waferID = value; InvokePropertyChanged("WaferID"); } } private string _waferOrigin; [DataMember] public string WaferOrigin { get { return _waferOrigin; } set { _waferOrigin = value; InvokePropertyChanged("WaferOrigin"); } } /// /// Wafer类型 /// private WaferType _waferType; [DataMember] public WaferType WaferType { get { return _waferType; } set { _waferType = value; InvokePropertyChanged(nameof(WaferType)); } } private string laserMarker; [DataMember] public string LaserMarker { get { return laserMarker; } set { laserMarker = value; InvokePropertyChanged("LaserMarker"); } } private string t7Code; [DataMember] public string T7Code { get { return t7Code; } set { t7Code = value; InvokePropertyChanged("T7Code"); } } [DataMember] public string LotId { get; set; } [DataMember] public string TransFlag { get; set; } private WaferStatus status; [DataMember] public WaferStatus Status { get { return status; } set { status = value; InvokePropertyChanged("Status"); } } [DataMember] public int Station { get; set; } [DataMember] public int Slot { get; set; } [DataMember] public int OriginStation { get; set; } [DataMember] public int OriginSlot { get; set; } [DataMember] public string OriginCarrierID { get; set; } [DataMember] public int SourceStation { get; set; } [DataMember] public int SourceSlot { get; set; } [DataMember] public int DestinationStation { get; set; } [DataMember] public int DestinationSlot { get; set; } [DataMember] public int Notch { get; set; } [DataMember] public WaferSize Size { get; set; } private string _sequenceName; [DataMember] public string SequenceName { get { return _sequenceName; } set { _sequenceName = value; InvokePropertyChanged(nameof(SequenceName)); } } private EnumWaferProcessStatus processState; [DataMember] public EnumWaferProcessStatus ProcessState { get { return processState; } set { processState = value; InvokePropertyChanged("ProcessState"); } } private EnumWaferChuckStatus chuckState; [DataMember] public EnumWaferChuckStatus ChuckState { get { return chuckState; } set { chuckState = value; InvokePropertyChanged("ChuckState"); } } private bool isSource; [DataMember] public bool IsSource { get { return isSource; } set { isSource = value; InvokePropertyChanged("IsSource"); } } private bool isDestination; [DataMember] public bool IsDestination { get { return isDestination; } set { isDestination = value; InvokePropertyChanged("IsDestination"); } } [DataMember] public Guid InnerId { get; set; } [DataMember] public ProcessJobInfo ProcessJob { get; set; } [DataMember] public int NextSequenceStep { get { return _nextSequenceStep; } set { _nextSequenceStep = value; LOG.Write((eEvent)99999, Station.ToString(), _nextSequenceStep.ToString()); } } private int _nextSequenceStep; private string _lotTrackPath; [DataMember] public string LotTrackPath { get { return _lotTrackPath; } set { _lotTrackPath = value; InvokePropertyChanged("LotTrackPath"); } } private string _orginalWaferHolder; public string OrginalWaferHolder { get { return _orginalWaferHolder; } set { _orginalWaferHolder=value; InvokePropertyChanged(nameof(OrginalWaferHolder)); } } public WaferInfo() { InnerId = Guid.Empty; WaferType = WaferType.Production; } public WaferInfo(string waferID, WaferStatus status = WaferStatus.Empty,WaferType waferType=WaferType.Production) : this() { this.WaferID = waferID; this.Status = status; this.WaferType = waferType; } public void Update(WaferInfo source) { InnerId = source.InnerId; WaferID = source.waferID; WaferOrigin = source.WaferOrigin; LaserMarker = source.LaserMarker; T7Code = source.T7Code; Status = source.Status; ProcessState = source.ProcessState; ChuckState = source.ChuckState; IsSource = source.IsSource; IsDestination = source.IsDestination; Station = source.Station; Slot = source.Slot; OriginStation = source.OriginStation; OriginSlot = source.OriginSlot; if(source.OriginCarrierID!=null) OriginCarrierID = source.OriginCarrierID; SourceStation = source.SourceStation; SourceSlot = source.SourceSlot; DestinationStation = source.DestinationStation; DestinationSlot = source.DestinationSlot; Notch = source.Notch; Size = source.Size; TransFlag = source.TransFlag; LotId = source.LotId; ProcessJob = source.ProcessJob; NextSequenceStep = source.NextSequenceStep; OrginalWaferHolder = source.OrginalWaferHolder; SequenceName = source.SequenceName; WaferType= source.WaferType; LotTrackPath = source.LotTrackPath; } public void SetEmpty() { this.InnerId = Guid.Empty; this.WaferID = string.Empty; this.WaferOrigin = string.Empty; this.LaserMarker = string.Empty; this.T7Code = string.Empty; this.Status = (int)WaferStatus.Empty; this.ProcessState = EnumWaferProcessStatus.Idle; this.ChuckState = EnumWaferChuckStatus.Init; this.IsSource = false; this.IsDestination = false; this.Station = 0; this.Slot = 0; this.SequenceName = ""; this.OrginalWaferHolder = ""; this.OriginStation = 0; this.OriginSlot = 0; this.SourceStation = 0; this.SourceSlot = 0; this.DestinationStation = 0; this.DestinationSlot = 0; this.Notch = 0; //this.Size = WaferSize.WS0; //wafersize 保留最后的一次的记录 this.TransFlag = string.Empty; this.LotId = string.Empty; this.ProcessJob = null; this.NextSequenceStep = 0; this.LotTrackPath = string.Empty; } public WaferInfo Clone(WaferInfo source) { WaferInfo newValue = new WaferInfo(); newValue.InnerId = source.InnerId; newValue.WaferID = source.waferID; newValue.WaferOrigin = source.WaferOrigin; newValue.LaserMarker = source.LaserMarker; newValue.T7Code = source.T7Code; newValue.Status = source.Status; newValue.ProcessState = source.ProcessState; newValue.ChuckState = source.ChuckState; newValue.IsSource = source.IsSource; newValue.IsDestination = source.IsDestination; newValue.Station = source.Station; newValue.Slot = source.Slot; newValue.OriginStation = source.OriginStation; newValue.OriginSlot = source.OriginSlot; if (source.OriginCarrierID != null) newValue.OriginCarrierID = source.OriginCarrierID; newValue.SourceStation = source.SourceStation; newValue.SourceSlot = source.SourceSlot; newValue.DestinationStation = source.DestinationStation; newValue.DestinationSlot = source.DestinationSlot; newValue.Notch = source.Notch; newValue.Size = source.Size; newValue.TransFlag = source.TransFlag; newValue.LotId = source.LotId; newValue.WaferType = source.WaferType; newValue.NextSequenceStep = source.NextSequenceStep; newValue.OrginalWaferHolder = source.OrginalWaferHolder; newValue.SequenceName= source.SequenceName; if(source.ProcessJob != null) { newValue.ProcessJob = new ProcessJobInfo(); if(source.ProcessJob.Sequence != null) { newValue.ProcessJob.Sequence = new SequenceInfo(source.ProcessJob.Sequence.Name); newValue.ProcessJob.Sequence.InnerId = source.ProcessJob.Sequence.InnerId; newValue.ProcessJob.Sequence.ThicknessType = source.ProcessJob.Sequence.ThicknessType; foreach(var step in source.ProcessJob.Sequence.Steps) { var newStep = new SequenceStepInfo(); newStep.AlignAngle = step.AlignAngle; newStep.StepModules = new List(step.StepModules.ToArray()); newStep.StepParameter = step.StepParameter.ToDictionary(entry => entry.Key, entry => entry.Value); newValue.ProcessJob.Sequence.Steps.Add(newStep); } } } return newValue; } } }