CarrierInfo.cs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Runtime.Serialization;
  6. using Aitex.Core.Common;
  7. using Aitex.Core.Util;
  8. using MECF.Framework.Common.CommonData;
  9. using MECF.Framework.Common.Equipment;
  10. using MECF.Framework.Common.Utilities;
  11. namespace MECF.Framework.Common.SubstrateTrackings
  12. {
  13. public enum ProcessJobStateEnum
  14. {
  15. pjCREATED = -1,
  16. pjQUEUED = 0,
  17. pjSETTING_UP = 1,
  18. pjWAITING_FOR_START = 2,
  19. pjPROCESSING = 3,
  20. pjPROCESS_COMPLETED = 4,
  21. pjRESERVED5 = 5,
  22. pjPAUSING = 6,
  23. pjPAUSED = 7,
  24. pjSTOPPING = 8,
  25. pjABORTING = 9,
  26. pjSTOPPED = 10,
  27. pjABORTED = 11,
  28. pjPROCESSJOB_COMPLETED = 12,
  29. }
  30. public enum CarrierStatus
  31. {
  32. Empty = 0,
  33. Normal = 1,
  34. [Description("NOFOUP")]
  35. NOFOUP = 5,
  36. [Description("READY")]
  37. READY = 10,
  38. [Description("W.CHARG")]
  39. WCHARG = 20,
  40. [Description("ON.BOAT")]
  41. ONBOAT = 30,
  42. [Description("W.DCHRG")]
  43. WDCHRG = 40,
  44. [Description("PRC.END")]
  45. PRCEND = 50,
  46. [Description("SERRE_1")]
  47. SERRE1 = 60,
  48. [Description("SERRE_2")]
  49. SERRE2 = 70,
  50. [Description("SERRE_3")]
  51. SERRE3 = 80,
  52. [Description("MOVECST")]
  53. MOVECST = 90,
  54. [Description("TRAKCST")]
  55. TRAKCST = 100,
  56. [Description("MAPPING")]
  57. MAPPING = 110,
  58. }
  59. public enum CarrierType
  60. {
  61. None,
  62. P,//Production wafer
  63. M,//Monitor wafer
  64. M1,//Monitor wafer
  65. M2,//Monitor wafer
  66. SD,//Side dummy wafer
  67. ED,//Extra dummy wafer
  68. XD,//Expert dummy wafer
  69. T,//Test wafer
  70. }
  71. [Serializable]
  72. [DataContract]
  73. public class CarrierInfo : NotifiableItem
  74. {
  75. public bool IsEmpty
  76. {
  77. get { return Status == CarrierStatus.Empty; }
  78. }
  79. private CarrierStatus status;
  80. [DataMember]
  81. public CarrierStatus Status
  82. {
  83. get
  84. {
  85. return status;
  86. }
  87. set
  88. {
  89. status = value;
  90. InvokePropertyChanged(nameof(Status));
  91. }
  92. }
  93. [DataMember]
  94. public Guid InnerId { get; set; }
  95. [DataMember]
  96. public string Name { get; set; }
  97. public object ProcessJob;
  98. [DataMember]
  99. public string CarrierId { get; set; }
  100. [DataMember]
  101. public int StockerIndex { get; set; }
  102. [DataMember]
  103. public string Rfid { get; set; }
  104. [DataMember]
  105. public string LotId { get; set; }
  106. [DataMember]
  107. public string ProductCategory { get; set; }
  108. [DataMember]
  109. public WaferInfo[] Wafers { get; set; }
  110. [DataMember]
  111. public SerializableDictionary<string, bool> ProcessStatus { get; set; }
  112. [DataMember]
  113. public SerializableDictionary<string, string> Attributes { get; set; }
  114. [DataMember]
  115. public bool IsStart { get; set; }
  116. [DataMember]
  117. public DateTime LoadTime { get; set; }
  118. [DataMember]
  119. public string JobSelectedRecipeName { get; set; }
  120. [DataMember]
  121. public int Priority { get; set; }
  122. [DataMember]
  123. public ModuleName InternalModuleName { get; set; } //For Internal carrier only
  124. [DataMember]
  125. public WaferSize CarrierWaferSize { get; set; }
  126. [DataMember]
  127. public bool IsProcessCompleted { get; set; }
  128. [DataMember]
  129. public bool IsVertical { get; set; }
  130. [DataMember]
  131. public bool HasWaferIn { get; set; }
  132. [DataMember]
  133. public int NextSequenceStep { get; set; }
  134. [DataMember]
  135. public CarrierType CarrierType { get; set; }
  136. [DataMember]
  137. public bool IsMapped { get; set; }
  138. [DataMember]
  139. public bool IsMapOK { get; set; }
  140. [DataMember]
  141. public int PortID { get; set; }
  142. public int WaferCount
  143. {
  144. get { return Wafers.Where(x => x != null && !x.IsEmpty).ToArray().Length; }
  145. }
  146. public object Job { get; set; }
  147. [DataMember]
  148. public string UICarrierType { get; set; } = "P1";
  149. [DataMember]
  150. public bool UICarrierTypeVisibility { get; set; } = true;
  151. [DataMember]
  152. public string UICarrierWaferCount { get; set; } = "(0)";
  153. [DataMember]
  154. public bool UICarrierWaferCountVisibility { get; set; } = true;
  155. [DataMember]
  156. public string UICarrierStatus { get { return UICarrierStatusEnum.ToDescription(); } set { } }
  157. [DataMember]
  158. public CarrierStatus UICarrierStatusEnum { get; set; }
  159. [DataMember]
  160. public bool UICarrierStatusVisibility { get; set; } = true;
  161. [DataMember]
  162. public string UICarrierColor { get; set; } = "#ccc";
  163. [DataMember]
  164. public bool UICarrierColorVisibility { get; set; } = true;
  165. [DataMember]
  166. public bool UIStockerExitFoup { get; set; } = false;
  167. [DataMember]
  168. public bool UIExitFoup { get; set; } = false;
  169. public T GetProcessJob<T>()
  170. {
  171. return (T)ProcessJob;
  172. }
  173. public bool IsProcessed(string module)
  174. {
  175. return ProcessStatus.ContainsKey(module) && ProcessStatus[module];
  176. }
  177. public void Clear()
  178. {
  179. this.Status = CarrierStatus.Empty;
  180. this.InnerId = Guid.Empty;
  181. this.ProcessJob = null;
  182. this.Name = "";
  183. this.IsStart = false;
  184. this.CarrierId = "";
  185. this.Rfid = "";
  186. this.JobSelectedRecipeName = "";
  187. this.LotId = "";
  188. this.ProductCategory = "";
  189. this.ProcessStatus = new SerializableDictionary<string, bool>();
  190. this.Attributes = new SerializableDictionary<string, string>();
  191. this.Priority = 0;
  192. this.HasWaferIn = false;
  193. this.IsProcessCompleted = false;
  194. this.IsVertical = false;
  195. this.NextSequenceStep = -1;
  196. this.Job = null;
  197. this.CarrierType = CarrierType.None;
  198. this.IsMapped = false;
  199. this.IsMapOK = false;
  200. this.UICarrierColor = "#ccc";
  201. this.UICarrierColorVisibility = true;
  202. this.UICarrierStatus = CarrierStatus.READY.ToDescription();
  203. this.UICarrierStatusEnum = CarrierStatus.READY;
  204. this.UICarrierStatusVisibility = true;
  205. this.UICarrierType = "P1";
  206. this.UICarrierTypeVisibility = true;
  207. this.UICarrierWaferCount = "(0)";
  208. this.UICarrierWaferCountVisibility = true;
  209. this.UIStockerExitFoup = false;
  210. this.UIExitFoup = false;
  211. this.PortID = 0;
  212. }
  213. public CarrierInfo(int capacity)
  214. {
  215. List<WaferInfo> waferList = new List<WaferInfo>();
  216. for (int i = 0; i < capacity; i++)
  217. {
  218. waferList.Add(new WaferInfo((i+1).ToString()));
  219. }
  220. Wafers = waferList.ToArray();
  221. InnerId = Guid.Empty;
  222. Status = CarrierStatus.Empty;
  223. ProcessStatus = new SerializableDictionary<string, bool>();
  224. Attributes = new SerializableDictionary<string, string>();
  225. }
  226. public void CopyInfo(CarrierInfo source)
  227. {
  228. this.CarrierId = source.CarrierId;
  229. this.InnerId = source.InnerId;
  230. this.Attributes = source.Attributes;
  231. this.CarrierId = source.CarrierId;
  232. this.Rfid = source.Rfid;
  233. this.IsStart = source.IsStart;
  234. this.JobSelectedRecipeName = source.JobSelectedRecipeName;
  235. this.LoadTime = source.LoadTime;
  236. this.LotId = source.LotId;
  237. this.Name = source.Name;
  238. this.ProcessStatus = source.ProcessStatus;
  239. this.Status = source.status;
  240. this.ProductCategory = source.ProductCategory;
  241. this.Wafers = source.Wafers;
  242. this.ProcessJob = source.ProcessJob;
  243. this.Priority = source.Priority;
  244. this.CarrierWaferSize = source.CarrierWaferSize;
  245. this.InternalModuleName = source.InternalModuleName;
  246. this.HasWaferIn = source.HasWaferIn;
  247. this.IsProcessCompleted = source.IsProcessCompleted;
  248. this.IsVertical = source.IsVertical;
  249. this.NextSequenceStep = source.NextSequenceStep;
  250. this.Job = source.Job;
  251. this.CarrierType = source.CarrierType;
  252. this.IsMapped = source.IsMapped;
  253. this.IsMapOK = source.IsMapOK;
  254. this.UICarrierColor = source.UICarrierColor;
  255. this.UICarrierColorVisibility = source.UICarrierColorVisibility;
  256. this.UICarrierStatus = source.UICarrierStatus;
  257. this.UICarrierStatusVisibility = source.UICarrierStatusVisibility;
  258. this.UICarrierType = source.UICarrierType;
  259. this.UICarrierTypeVisibility = source.UICarrierTypeVisibility;
  260. this.UICarrierWaferCount = source.UICarrierWaferCount;
  261. this.UICarrierWaferCountVisibility = source.UICarrierWaferCountVisibility;
  262. this.UIStockerExitFoup = source.UIStockerExitFoup;
  263. this.UICarrierStatusEnum = source.UICarrierStatusEnum;
  264. this.UIExitFoup = source.UIExitFoup;
  265. this.PortID = source.PortID;
  266. }
  267. }
  268. }