AutoTransfer_FA.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Aitex.Core.RT.Event;
  7. using Aitex.Core.Util;
  8. using MECF.Framework.Common.Equipment;
  9. using MECF.Framework.Common.Jobs;
  10. using VirgoRT.HostWrapper;
  11. namespace VirgoRT.Modules
  12. {
  13. public interface ISchedulerFACallback
  14. {
  15. void JobCreated(ControlJobInfo cj, ProcessJobInfo pj);
  16. void JobCreateFailed(string module, string lotID, string jobID, string sequenceID);
  17. void JobStarted(ControlJobInfo cj, ProcessJobInfo pj);
  18. void JobStopped(ControlJobInfo cj, ProcessJobInfo pj);
  19. void JobPaused(ControlJobInfo cj, ProcessJobInfo pj);
  20. void JobResumed(ControlJobInfo cj, ProcessJobInfo pj);
  21. void JobAborted(ControlJobInfo cj, ProcessJobInfo pj);
  22. void JobFinished(ControlJobInfo cj, ProcessJobInfo pj);
  23. void JobFailed(ControlJobInfo cj, ProcessJobInfo pj);
  24. void JobWaferStart(ControlJobInfo cj, ProcessJobInfo pj, string module, int slotID);
  25. void JobWaferEnd(ControlJobInfo cj, ProcessJobInfo pj, string module, int slotID);
  26. }
  27. public class SchedulerFACallback : ISchedulerFACallback
  28. {
  29. private const string Port1JobStarted = "Port1JobStarted";
  30. private const string Port1JobStopped = "Port1JobStopped";
  31. private const string Port1JobPaused = "Port1JobPaused";
  32. private const string Port1JobResumed = "Port1JobResumed";
  33. private const string Port1JobAborted = "Port1JobAborted";
  34. private const string Port1JobFinished = "Port1JobFinished";
  35. private const string Port1JobFailed = "Port1JobFailed";
  36. private const string Port1SequenceSelected = "Port1SequenceSelected";
  37. private const string Port1SequenceSelectFailed = "Port1SequenceSelectFailed";
  38. private const string Port1JobWaferStart = "Port1JobWaferStart";
  39. private const string Port1JobWaferEnd = "Port1JobWaferEnd";
  40. private const string Port2JobStarted = "Port2JobStarted";
  41. private const string Port2JobStopped = "Port2JobStopped";
  42. private const string Port2JobPaused = "Port2JobPaused";
  43. private const string Port2JobResumed = "Port2JobResumed";
  44. private const string Port2JobAborted = "Port2JobAborted";
  45. private const string Port2JobFinished = "Port2JobFinished";
  46. private const string Port2JobFailed = "Port2JobFailed";
  47. private const string Port2SequenceSelected = "Port2SequenceSelected";
  48. private const string Port2SequenceSelectFailed = "Port2SequenceSelectFailed";
  49. private const string Port2JobWaferStart = "Port2JobWaferStart";
  50. private const string Port2JobWaferEnd = "Port2JobWaferEnd";
  51. private Dictionary<ModuleName, string> PortJobWaferStart = new Dictionary<ModuleName, string>()
  52. {
  53. {ModuleName.LP1, Port1JobWaferStart},
  54. {ModuleName.LP2, Port2JobWaferStart},
  55. };
  56. private Dictionary<ModuleName, string> PortJobWaferEnd = new Dictionary<ModuleName, string>()
  57. {
  58. {ModuleName.LP1, Port1JobWaferEnd},
  59. {ModuleName.LP2, Port2JobWaferEnd},
  60. };
  61. private Dictionary<ModuleName, string> PortJobStarted = new Dictionary<ModuleName, string>()
  62. {
  63. {ModuleName.LP1, Port1JobStarted},
  64. {ModuleName.LP2, Port2JobStarted},
  65. };
  66. private Dictionary<ModuleName, string> PortJobStopped = new Dictionary<ModuleName, string>()
  67. {
  68. {ModuleName.LP1, Port1JobStopped},
  69. {ModuleName.LP2, Port2JobStopped},
  70. };
  71. private Dictionary<ModuleName, string> PortJobPaused = new Dictionary<ModuleName, string>()
  72. {
  73. {ModuleName.LP1, Port1JobPaused},
  74. {ModuleName.LP2, Port2JobPaused},
  75. };
  76. private Dictionary<ModuleName, string> PortJobResumed = new Dictionary<ModuleName, string>()
  77. {
  78. {ModuleName.LP1, Port1JobResumed},
  79. {ModuleName.LP2, Port2JobResumed},
  80. };
  81. private Dictionary<ModuleName, string> PortJobAborted = new Dictionary<ModuleName, string>()
  82. {
  83. {ModuleName.LP1, Port1JobAborted},
  84. {ModuleName.LP2, Port2JobAborted},
  85. };
  86. private Dictionary<ModuleName, string> PortJobFinished = new Dictionary<ModuleName, string>()
  87. {
  88. {ModuleName.LP1, Port1JobFinished},
  89. {ModuleName.LP2, Port2JobFinished},
  90. };
  91. private Dictionary<ModuleName, string> PortJobFailed = new Dictionary<ModuleName, string>()
  92. {
  93. {ModuleName.LP1, Port1JobFailed},
  94. {ModuleName.LP2, Port2JobFailed},
  95. };
  96. private Dictionary<ModuleName, string> PortSequenceSelected = new Dictionary<ModuleName, string>()
  97. {
  98. {ModuleName.LP1, Port1SequenceSelected},
  99. {ModuleName.LP2, Port2SequenceSelected},
  100. };
  101. private Dictionary<ModuleName, string> PortSequenceSelectFailed = new Dictionary<ModuleName, string>()
  102. {
  103. {ModuleName.LP1, Port1SequenceSelectFailed},
  104. {ModuleName.LP2, Port2SequenceSelectFailed},
  105. };
  106. private Dictionary<ModuleName, string> PortId = new Dictionary<ModuleName, string>()
  107. {
  108. {ModuleName.LP1, "1"},
  109. {ModuleName.LP2, "2"},
  110. };
  111. public SchedulerFACallback()
  112. {
  113. EV.Subscribe(new EventItem("Event", Port1JobStarted, Port1JobStarted));
  114. EV.Subscribe(new EventItem("Event", Port1JobStopped, Port1JobStopped));
  115. EV.Subscribe(new EventItem("Event", Port1JobPaused, Port1JobPaused));
  116. EV.Subscribe(new EventItem("Event", Port1JobResumed, Port1JobResumed));
  117. EV.Subscribe(new EventItem("Event", Port1JobAborted, Port1JobAborted));
  118. EV.Subscribe(new EventItem("Event", Port1JobFinished, Port1JobFinished));
  119. EV.Subscribe(new EventItem("Event", Port1JobFailed, Port1JobFailed));
  120. EV.Subscribe(new EventItem("Event", Port1SequenceSelected, Port1SequenceSelected));
  121. EV.Subscribe(new EventItem("Event", Port1SequenceSelectFailed, Port1SequenceSelectFailed));
  122. EV.Subscribe(new EventItem("Event", Port1JobWaferStart, Port1JobWaferStart));
  123. EV.Subscribe(new EventItem("Event", Port1JobWaferEnd, Port1JobWaferEnd));
  124. EV.Subscribe(new EventItem("Event", Port2JobStarted, Port2JobStarted));
  125. EV.Subscribe(new EventItem("Event", Port2JobStopped, Port2JobStopped));
  126. EV.Subscribe(new EventItem("Event", Port2JobPaused, Port2JobPaused));
  127. EV.Subscribe(new EventItem("Event", Port2JobResumed, Port2JobResumed));
  128. EV.Subscribe(new EventItem("Event", Port2JobAborted, Port2JobAborted));
  129. EV.Subscribe(new EventItem("Event", Port2JobFinished, Port2JobFinished));
  130. EV.Subscribe(new EventItem("Event", Port2JobFailed, Port2JobFailed));
  131. EV.Subscribe(new EventItem("Event", Port2SequenceSelected, Port2SequenceSelected));
  132. EV.Subscribe(new EventItem("Event", Port2SequenceSelectFailed, Port2SequenceSelectFailed));
  133. EV.Subscribe(new EventItem("Event", Port2JobWaferStart, Port2JobWaferStart));
  134. EV.Subscribe(new EventItem("Event", Port2JobWaferEnd, Port2JobWaferEnd));
  135. }
  136. public void JobCreated(ControlJobInfo cj, ProcessJobInfo pj)
  137. {
  138. ModuleName module = ModuleHelper.Converter(cj.Module);
  139. EV.Notify(PortSequenceSelected[module], new SerializableDictionary<string, string>()
  140. {
  141. {DVIDName.LotID, pj.LotName},
  142. {DVIDName.JobID, pj.ControlJobName},
  143. {DVIDName.PortID, PortId[module] },
  144. {DVIDName.SequenceID, pj.Sequence.Name }
  145. });
  146. }
  147. public void JobCreateFailed(string module, string lotID, string jobID, string sequenceID)
  148. {
  149. ModuleName moduleName = ModuleHelper.Converter(module);
  150. EV.Notify(PortSequenceSelectFailed[moduleName], new SerializableDictionary<string, string>()
  151. {
  152. {DVIDName.LotID, lotID},
  153. {DVIDName.JobID, jobID},
  154. {DVIDName.PortID, PortId[moduleName] },
  155. {DVIDName.SequenceID, sequenceID }
  156. });
  157. }
  158. public void JobStarted(ControlJobInfo cj, ProcessJobInfo pj)
  159. {
  160. ModuleName module = ModuleHelper.Converter(cj.Module);
  161. EV.Notify(PortJobStarted[module], new SerializableDictionary<string, string>()
  162. {
  163. {DVIDName.LotID, pj.LotName},
  164. {DVIDName.JobID, pj.ControlJobName},
  165. {DVIDName.PortID, PortId[module] },
  166. {DVIDName.SequenceID, pj.Sequence.Name }
  167. });
  168. }
  169. public void JobStopped(ControlJobInfo cj, ProcessJobInfo pj)
  170. {
  171. ModuleName module = ModuleHelper.Converter(cj.Module);
  172. EV.Notify(PortJobStopped[module], new SerializableDictionary<string, string>()
  173. {
  174. {DVIDName.LotID, pj.LotName},
  175. {DVIDName.JobID, pj.ControlJobName},
  176. {DVIDName.PortID, PortId[module] },
  177. {DVIDName.SequenceID, pj.Sequence.Name }
  178. });
  179. }
  180. public void JobPaused(ControlJobInfo cj, ProcessJobInfo pj)
  181. {
  182. ModuleName module = ModuleHelper.Converter(cj.Module);
  183. EV.Notify(PortJobPaused[module], new SerializableDictionary<string, string>()
  184. {
  185. {DVIDName.LotID, pj.LotName},
  186. {DVIDName.JobID, pj.ControlJobName},
  187. {DVIDName.PortID, PortId[module] },
  188. {DVIDName.SequenceID, pj.Sequence.Name }
  189. });
  190. }
  191. public void JobResumed(ControlJobInfo cj, ProcessJobInfo pj)
  192. {
  193. ModuleName module = ModuleHelper.Converter(cj.Module);
  194. EV.Notify(PortJobResumed[module], new SerializableDictionary<string, string>()
  195. {
  196. {DVIDName.LotID, pj.LotName},
  197. {DVIDName.JobID, pj.ControlJobName},
  198. {DVIDName.PortID, PortId[module] },
  199. {DVIDName.SequenceID, pj.Sequence.Name }
  200. });
  201. }
  202. public void JobAborted(ControlJobInfo cj, ProcessJobInfo pj)
  203. {
  204. ModuleName module = ModuleHelper.Converter(cj.Module);
  205. EV.Notify(PortJobAborted[module], new SerializableDictionary<string, string>()
  206. {
  207. {DVIDName.LotID, cj.LotName},
  208. {DVIDName.JobID, cj.Name},
  209. {DVIDName.PortID, PortId[module] },
  210. {DVIDName.SequenceID, "" }
  211. });
  212. }
  213. public void JobFinished(ControlJobInfo cj, ProcessJobInfo pj)
  214. {
  215. ModuleName module = ModuleHelper.Converter(cj.Module);
  216. EV.Notify(PortJobFinished[module], new SerializableDictionary<string, string>()
  217. {
  218. {DVIDName.LotID, pj.LotName},
  219. {DVIDName.JobID, pj.ControlJobName},
  220. {DVIDName.PortID, PortId[module] },
  221. {DVIDName.SequenceID, pj.Sequence.Name }
  222. });
  223. }
  224. public void JobFailed(ControlJobInfo cj, ProcessJobInfo pj)
  225. {
  226. ModuleName module = ModuleHelper.Converter(cj.Module);
  227. EV.Notify(PortJobFailed[module], new SerializableDictionary<string, string>()
  228. {
  229. {DVIDName.LotID, pj.LotName},
  230. {DVIDName.JobID, pj.ControlJobName},
  231. {DVIDName.PortID, PortId[module] },
  232. {DVIDName.SequenceID, pj.Sequence.Name }
  233. });
  234. }
  235. public void JobWaferStart(ControlJobInfo cj, ProcessJobInfo pj, string module1, int slotID)
  236. {
  237. ModuleName module = ModuleHelper.Converter(cj.Module);
  238. EV.Notify(PortJobWaferStart[module], new SerializableDictionary<string, string>()
  239. {
  240. {DVIDName.LotID, pj.LotName},
  241. {DVIDName.JobID, pj.ControlJobName},
  242. {DVIDName.PortID, PortId[module] },
  243. {DVIDName.SlotID, (slotID+1).ToString() }
  244. });
  245. }
  246. public void JobWaferEnd(ControlJobInfo cj, ProcessJobInfo pj, string module1, int slotID)
  247. {
  248. ModuleName module = ModuleHelper.Converter(cj.Module);
  249. EV.Notify(PortJobWaferEnd[module], new SerializableDictionary<string, string>()
  250. {
  251. {DVIDName.LotID, pj.LotName},
  252. {DVIDName.JobID, pj.ControlJobName},
  253. {DVIDName.PortID, PortId[module] },
  254. {DVIDName.SlotID, (slotID+1).ToString() }
  255. });
  256. }
  257. }
  258. }