Autotransfer_LP_FA.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. using Aitex.Core.Common;
  2. using Aitex.Core.RT.Event;
  3. using Aitex.Core.UI.Control;
  4. using Aitex.Core.Util;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.Common.Jobs;
  7. using MECF.Framework.Common.SubstrateTrackings;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows.Controls;
  14. using Venus_RT.FAs;
  15. using Venus_RT.HostWrapper;
  16. namespace Venus_RT.Modules
  17. {
  18. public interface ISchedulerFACallback
  19. {
  20. void JobCreated(ControlJobInfo cj, ProcessJobInfo pj);
  21. void JobCreateFailed(string module, string lotID, string jobID, string sequenceID);
  22. void JobStarted(ControlJobInfo cj, ProcessJobInfo pj);
  23. void JobStopped(ControlJobInfo cj, ProcessJobInfo pj);
  24. void JobPaused(ControlJobInfo cj, ProcessJobInfo pj);
  25. void JobResumed(ControlJobInfo cj, ProcessJobInfo pj);
  26. void JobAborted(ControlJobInfo cj, ProcessJobInfo pj);
  27. void JobFinished(ControlJobInfo cj, ProcessJobInfo pj);
  28. void JobFailed(ControlJobInfo cj, ProcessJobInfo pj);
  29. void JobWaferStart(ControlJobInfo cj, ProcessJobInfo pj, string module, int slotID);
  30. void JobWaferEnd(ControlJobInfo cj, ProcessJobInfo pj, string module, int slotID);
  31. }
  32. public class SchedulerFACallback : ISchedulerFACallback
  33. {
  34. private const string Port1JobStarted = "Port1JobStarted";
  35. private const string Port1JobStopped = "Port1JobStopped";
  36. private const string Port1JobPaused = "Port1JobPaused";
  37. private const string Port1JobResumed = "Port1JobResumed";
  38. private const string Port1JobAborted = "Port1JobAborted";
  39. private const string Port1JobFinished = "Port1JobFinished";
  40. private const string Port1JobFailed = "Port1JobFailed";
  41. private const string Port1SequenceSelected = "Port1SequenceSelected";
  42. private const string Port1SequenceSelectFailed = "Port1SequenceSelectFailed";
  43. private const string Port1JobWaferStart = "Port1JobWaferStart";
  44. private const string Port1JobWaferEnd = "Port1JobWaferEnd";
  45. private const string Port2JobStarted = "Port2JobStarted";
  46. private const string Port2JobStopped = "Port2JobStopped";
  47. private const string Port2JobPaused = "Port2JobPaused";
  48. private const string Port2JobResumed = "Port2JobResumed";
  49. private const string Port2JobAborted = "Port2JobAborted";
  50. private const string Port2JobFinished = "Port2JobFinished";
  51. private const string Port2JobFailed = "Port2JobFailed";
  52. private const string Port2SequenceSelected = "Port2SequenceSelected";
  53. private const string Port2SequenceSelectFailed = "Port2SequenceSelectFailed";
  54. private const string Port2JobWaferStart = "Port2JobWaferStart";
  55. private const string Port2JobWaferEnd = "Port2JobWaferEnd";
  56. private const string Port3JobStarted = "Port3JobStarted";
  57. private const string Port3JobStopped = "Port3JobStopped";
  58. private const string Port3JobPaused = "Port3JobPaused";
  59. private const string Port3JobResumed = "Port3JobResumed";
  60. private const string Port3JobAborted = "Port3JobAborted";
  61. private const string Port3JobFinished = "Port3JobFinished";
  62. private const string Port3JobFailed = "Port3JobFailed";
  63. private const string Port3SequenceSelected = "Port3SequenceSelected";
  64. private const string Port3SequenceSelectFailed = "Port3SequenceSelectFailed";
  65. private const string Port3JobWaferStart = "Port3JobWaferStart";
  66. private const string Port3JobWaferEnd = "Port3JobWaferEnd";
  67. private Dictionary<ModuleName, string> PortJobWaferStart = new Dictionary<ModuleName, string>()
  68. {
  69. {ModuleName.LP1, Port1JobWaferStart},
  70. {ModuleName.LP2, Port2JobWaferStart},
  71. {ModuleName.LP3, Port3JobWaferStart},
  72. {ModuleName.VCE1, Port1JobWaferStart},
  73. };
  74. private Dictionary<ModuleName, string> PortJobWaferEnd = new Dictionary<ModuleName, string>()
  75. {
  76. {ModuleName.LP1, Port1JobWaferEnd},
  77. {ModuleName.LP2, Port2JobWaferEnd},
  78. {ModuleName.LP3, Port3JobWaferEnd},
  79. {ModuleName.VCE1, Port1JobWaferEnd},
  80. };
  81. private Dictionary<ModuleName, string> PortJobStarted = new Dictionary<ModuleName, string>()
  82. {
  83. {ModuleName.LP1, Port1JobStarted},
  84. {ModuleName.LP2, Port2JobStarted},
  85. {ModuleName.LP3, Port3JobStarted},
  86. {ModuleName.VCE1, Port1JobStarted},
  87. };
  88. private Dictionary<ModuleName, string> PortJobStopped = new Dictionary<ModuleName, string>()
  89. {
  90. {ModuleName.LP1, Port1JobStopped},
  91. {ModuleName.LP2, Port2JobStopped},
  92. {ModuleName.LP3, Port3JobStopped},
  93. {ModuleName.VCE1, Port1JobStopped},
  94. };
  95. private Dictionary<ModuleName, string> PortJobPaused = new Dictionary<ModuleName, string>()
  96. {
  97. {ModuleName.LP1, Port1JobPaused},
  98. {ModuleName.LP2, Port2JobPaused},
  99. {ModuleName.LP3, Port3JobPaused},
  100. {ModuleName.VCE1, Port1JobPaused},
  101. };
  102. private Dictionary<ModuleName, string> PortJobResumed = new Dictionary<ModuleName, string>()
  103. {
  104. {ModuleName.LP1, Port1JobResumed},
  105. {ModuleName.LP2, Port2JobResumed},
  106. {ModuleName.LP3, Port3JobResumed},
  107. {ModuleName.VCE1, Port1JobResumed},
  108. };
  109. private Dictionary<ModuleName, string> PortJobAborted = new Dictionary<ModuleName, string>()
  110. {
  111. {ModuleName.LP1, Port1JobAborted},
  112. {ModuleName.LP2, Port2JobAborted},
  113. {ModuleName.LP3, Port3JobAborted},
  114. {ModuleName.VCE1, Port1JobAborted},
  115. };
  116. private Dictionary<ModuleName, string> PortJobFinished = new Dictionary<ModuleName, string>()
  117. {
  118. {ModuleName.LP1, Port1JobFinished},
  119. {ModuleName.LP2, Port2JobFinished},
  120. {ModuleName.LP3, Port3JobFinished},
  121. {ModuleName.VCE1, Port1JobFinished},
  122. };
  123. private Dictionary<ModuleName, string> PortJobFailed = new Dictionary<ModuleName, string>()
  124. {
  125. {ModuleName.LP1, Port1JobFailed},
  126. {ModuleName.LP2, Port2JobFailed},
  127. {ModuleName.LP3, Port3JobFailed},
  128. {ModuleName.VCE1, Port1JobFailed},
  129. };
  130. private Dictionary<ModuleName, string> PortSequenceSelected = new Dictionary<ModuleName, string>()
  131. {
  132. {ModuleName.LP1, Port1SequenceSelected},
  133. {ModuleName.LP2, Port2SequenceSelected},
  134. {ModuleName.LP3, Port3SequenceSelected},
  135. {ModuleName.VCE1, Port1SequenceSelected},
  136. };
  137. private Dictionary<ModuleName, string> PortSequenceSelectFailed = new Dictionary<ModuleName, string>()
  138. {
  139. {ModuleName.LP1, Port1SequenceSelectFailed},
  140. {ModuleName.LP2, Port2SequenceSelectFailed},
  141. {ModuleName.LP3, Port3SequenceSelectFailed},
  142. {ModuleName.VCE1, Port1SequenceSelectFailed},
  143. };
  144. private Dictionary<ModuleName, string> PortId = new Dictionary<ModuleName, string>()
  145. {
  146. {ModuleName.LP1, "1"},
  147. {ModuleName.LP2, "2"},
  148. {ModuleName.LP3, "3"},
  149. {ModuleName.VCE1, "1"},
  150. };
  151. public SchedulerFACallback()
  152. {
  153. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobStarted, Port1JobStarted));
  154. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobStopped, Port1JobStopped));
  155. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobPaused, Port1JobPaused));
  156. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobResumed, Port1JobResumed));
  157. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobAborted, Port1JobAborted));
  158. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobFinished, Port1JobFinished));
  159. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobFailed, Port1JobFailed));
  160. FaEvent.AddFaEvent(new PostFAItem("Event", Port1SequenceSelected, Port1SequenceSelected));
  161. FaEvent.AddFaEvent(new PostFAItem("Event", Port1SequenceSelectFailed, Port1SequenceSelectFailed));
  162. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobWaferStart, Port1JobWaferStart));
  163. FaEvent.AddFaEvent(new PostFAItem("Event", Port1JobWaferEnd, Port1JobWaferEnd));
  164. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobStarted, Port2JobStarted));
  165. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobStopped, Port2JobStopped));
  166. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobPaused, Port2JobPaused));
  167. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobResumed, Port2JobResumed));
  168. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobAborted, Port2JobAborted));
  169. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobFinished, Port2JobFinished));
  170. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobFailed, Port2JobFailed));
  171. FaEvent.AddFaEvent(new PostFAItem("Event", Port2SequenceSelected, Port2SequenceSelected));
  172. FaEvent.AddFaEvent(new PostFAItem("Event", Port2SequenceSelectFailed, Port2SequenceSelectFailed));
  173. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobWaferStart, Port2JobWaferStart));
  174. FaEvent.AddFaEvent(new PostFAItem("Event", Port2JobWaferEnd, Port2JobWaferEnd));
  175. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobStarted, Port3JobStarted));
  176. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobStopped, Port3JobStopped));
  177. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobPaused, Port3JobPaused));
  178. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobResumed, Port3JobResumed));
  179. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobAborted, Port3JobAborted));
  180. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobFinished, Port3JobFinished));
  181. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobFailed, Port3JobFailed));
  182. FaEvent.AddFaEvent(new PostFAItem("Event", Port3SequenceSelected, Port3SequenceSelected));
  183. FaEvent.AddFaEvent(new PostFAItem("Event", Port3SequenceSelectFailed, Port3SequenceSelectFailed));
  184. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobWaferStart, Port3JobWaferStart));
  185. FaEvent.AddFaEvent(new PostFAItem("Event", Port3JobWaferEnd, Port3JobWaferEnd));
  186. }
  187. public void JobCreated(ControlJobInfo cj, ProcessJobInfo pj)
  188. {
  189. ModuleName module = ModuleHelper.Converter(cj.Module);
  190. FaEvent.FaNotify(PortSequenceSelected[module], new SerializableDictionary<string, string>()
  191. {
  192. {DVIDName.LotID, pj.LotName},
  193. {DVIDName.JobID, pj.ControlJobName},
  194. {DVIDName.PortID, PortId[module] },
  195. {DVIDName.SequenceID, pj.Sequence.Name }
  196. });
  197. }
  198. public void JobCreateFailed(string module, string lotID, string jobID, string sequenceID)
  199. {
  200. ModuleName moduleName = ModuleHelper.Converter(module);
  201. FaEvent.FaNotify(PortSequenceSelectFailed[moduleName], new SerializableDictionary<string, string>()
  202. {
  203. {DVIDName.LotID, lotID},
  204. {DVIDName.JobID, jobID},
  205. {DVIDName.PortID, PortId[moduleName] },
  206. {DVIDName.SequenceID, sequenceID }
  207. });
  208. }
  209. public void JobStarted(ControlJobInfo cj,ProcessJobInfo pj)
  210. {
  211. ModuleName module= ModuleHelper.Converter(cj.Module);
  212. FaEvent.FaNotify(PortJobStarted[module], new SerializableDictionary<string, string>()
  213. {
  214. {DVIDName.LotID, pj.LotName},
  215. {DVIDName.JobID, pj.ControlJobName},
  216. {DVIDName.PortID, PortId[module] },
  217. {DVIDName.SequenceID, pj.Sequence.Name }
  218. });
  219. }
  220. public void JobStopped(ControlJobInfo cj, ProcessJobInfo pj)
  221. {
  222. ModuleName module = ModuleHelper.Converter(cj.Module);
  223. FaEvent.FaNotify(PortJobStopped[module], new SerializableDictionary<string, string>()
  224. {
  225. {DVIDName.LotID, pj.LotName},
  226. {DVIDName.JobID, pj.ControlJobName},
  227. {DVIDName.PortID, PortId[module] },
  228. {DVIDName.SequenceID, pj.Sequence.Name }
  229. });
  230. }
  231. public void JobPaused(ControlJobInfo cj, ProcessJobInfo pj)
  232. {
  233. ModuleName module = ModuleHelper.Converter(cj.Module);
  234. FaEvent.FaNotify(PortJobPaused[module], new SerializableDictionary<string, string>()
  235. {
  236. {DVIDName.LotID, pj.LotName},
  237. {DVIDName.JobID, pj.ControlJobName},
  238. {DVIDName.PortID, PortId[module] },
  239. {DVIDName.SequenceID, pj.Sequence.Name }
  240. });
  241. }
  242. public void JobResumed(ControlJobInfo cj, ProcessJobInfo pj)
  243. {
  244. ModuleName module = ModuleHelper.Converter(cj.Module);
  245. FaEvent.FaNotify(PortJobResumed[module], new SerializableDictionary<string, string>()
  246. {
  247. {DVIDName.LotID, pj.LotName},
  248. {DVIDName.JobID, pj.ControlJobName},
  249. {DVIDName.PortID, PortId[module] },
  250. {DVIDName.SequenceID, pj.Sequence.Name }
  251. });
  252. }
  253. public void JobAborted(ControlJobInfo cj, ProcessJobInfo pj)
  254. {
  255. ModuleName module = ModuleHelper.Converter(cj.Module);
  256. FaEvent.FaNotify(PortJobAborted[module], new SerializableDictionary<string, string>()
  257. {
  258. {DVIDName.LotID, cj.LotName},
  259. {DVIDName.JobID, cj.Name},
  260. {DVIDName.PortID, PortId[module] },
  261. {DVIDName.SequenceID, "" }
  262. });
  263. }
  264. public void JobFinished(ControlJobInfo cj, ProcessJobInfo pj)
  265. {
  266. ModuleName module = ModuleHelper.Converter(cj.Module);
  267. int count = pj.SlotWafers.Count;
  268. FaEvent.FaNotify(PortJobFinished[module], new SerializableDictionary<string, string>()
  269. {
  270. {DVIDName.LotID, pj.LotName},
  271. {DVIDName.JobID, pj.ControlJobName},
  272. {DVIDName.PortID, PortId[module] },
  273. {DVIDName.SequenceID, pj.Sequence.Name },
  274. {DVIDName.ProcessedWaferCount, count.ToString() },
  275. });
  276. }
  277. public void JobFailed(ControlJobInfo cj, ProcessJobInfo pj)
  278. {
  279. ModuleName module = ModuleHelper.Converter(cj.Module);
  280. FaEvent.FaNotify(PortJobFailed[module], new SerializableDictionary<string, string>()
  281. {
  282. {DVIDName.LotID, pj.LotName},
  283. {DVIDName.JobID, pj.ControlJobName},
  284. {DVIDName.PortID, PortId[module] },
  285. {DVIDName.SequenceID, pj.Sequence.Name }
  286. });
  287. }
  288. public void JobWaferStart(ControlJobInfo cj, ProcessJobInfo pj, string module1, int slotID)
  289. {
  290. ModuleName module = ModuleHelper.Converter(cj.Module);
  291. FaEvent.FaNotify(PortJobWaferStart[module], new SerializableDictionary<string, string>()
  292. {
  293. {DVIDName.LotID, pj.LotName},
  294. {DVIDName.JobID, pj.ControlJobName},
  295. {DVIDName.PortID, PortId[module] },
  296. {DVIDName.SlotID, (slotID+1).ToString() },
  297. {DVIDName.CarrierID, cj.CarrierID.ToString()}
  298. });
  299. }
  300. public void JobWaferEnd(ControlJobInfo cj, ProcessJobInfo pj, string module1, int slotID)
  301. {
  302. ModuleName module = ModuleHelper.Converter(cj.Module);
  303. WaferInfo wafer = WaferManager.Instance.GetWafer(ModuleHelper.Converter(module1), slotID);
  304. FaEvent.FaNotify(PortJobWaferEnd[module], new SerializableDictionary<string, string>()
  305. {
  306. {DVIDName.LotID, pj.LotName},
  307. {DVIDName.JobID, pj.ControlJobName},
  308. {DVIDName.PortID, PortId[module] },
  309. {DVIDName.SlotID, (slotID+1).ToString() },
  310. {DVIDName.CarrierID, cj.CarrierID.ToString()},
  311. {DVIDName.WaferProcessResult, (wafer.ProcessState == EnumWaferProcessStatus.Failed ? 0:1).ToString()}
  312. });
  313. }
  314. }
  315. }