PMProcess_FA.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. using Aitex.Core.Common;
  2. using Aitex.Core.RT.Event;
  3. using Aitex.Core.Util;
  4. using MECF.Framework.Common.CommonData;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.Common.SubstrateTrackings;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Venus_RT.HostWrapper;
  13. using Venus_RT.FAs;
  14. namespace Venus_RT.Modules.PMs
  15. {
  16. public interface IRecipeFACallback
  17. {
  18. void RecipeStart(string module,string recipeName);
  19. void RecipeComplete(string module,string recipeName);
  20. void RecipeFailed(string module, string recipeName);
  21. void RecipeStepStart(string module, string recipeName, int stepNumber);
  22. void RecipeStepEnd(string module, string recipeName, int stepNumber, List<FdcDataItem> fdc);
  23. }
  24. public class RecipeFACallback : IRecipeFACallback
  25. {
  26. private const string PMARecipeStart = "PMARecipeStart";
  27. private const string PMARecipeComplete = "PMARecipeComplete";
  28. private const string PMARecipeStepStart = "PMARecipeStepStart";
  29. private const string PMARecipeStepEnd = "PMARecipeStepEnd";
  30. private const string PMARecipeFailed = "PMARecipeFailed";
  31. private const string PMBRecipeStart = "PMBRecipeStart";
  32. private const string PMBRecipeComplete = "PMBRecipeComplete";
  33. private const string PMBRecipeStepStart = "PMBRecipeStepStart";
  34. private const string PMBRecipeStepEnd = "PMBRecipeStepEnd";
  35. private const string PMBRecipeFailed = "PMBRecipeFailed";
  36. private const string PMCRecipeStart = "PMCRecipeStart";
  37. private const string PMCRecipeComplete = "PMCRecipeComplete";
  38. private const string PMCRecipeStepStart = "PMCRecipeStepStart";
  39. private const string PMCRecipeStepEnd = "PMCRecipeStepEnd";
  40. private const string PMCRecipeFailed = "PMCRecipeFailed";
  41. private const string PMDRecipeStart = "PMDRecipeStart";
  42. private const string PMDRecipeComplete = "PMDRecipeComplete";
  43. private const string PMDRecipeStepStart = "PMDRecipeStepStart";
  44. private const string PMDRecipeStepEnd = "PMDRecipeStepEnd";
  45. private const string PMDRecipeFailed = "PMDRecipeFailed";
  46. private Dictionary<ModuleName, string> PMRecipeStart = new Dictionary<ModuleName, string>()
  47. {
  48. {ModuleName.PMA, PMARecipeStart},
  49. {ModuleName.PMB, PMBRecipeStart},
  50. {ModuleName.PMC, PMCRecipeStart},
  51. {ModuleName.PMD, PMDRecipeStart}
  52. };
  53. private Dictionary<ModuleName, string> PMRecipeComplete = new Dictionary<ModuleName, string>()
  54. {
  55. {ModuleName.PMA, PMARecipeComplete},
  56. {ModuleName.PMB, PMBRecipeComplete},
  57. {ModuleName.PMC, PMCRecipeComplete},
  58. {ModuleName.PMD, PMDRecipeComplete},
  59. };
  60. private Dictionary<ModuleName, string> PMRecipeStepStart = new Dictionary<ModuleName, string>()
  61. {
  62. {ModuleName.PMA, PMARecipeStepStart},
  63. {ModuleName.PMB, PMBRecipeStepStart},
  64. {ModuleName.PMC, PMCRecipeStepStart},
  65. {ModuleName.PMD, PMDRecipeStepStart},
  66. };
  67. private Dictionary<ModuleName, string> PMRecipeStepEnd = new Dictionary<ModuleName, string>()
  68. {
  69. {ModuleName.PMA, PMARecipeStepEnd},
  70. {ModuleName.PMB, PMBRecipeStepEnd},
  71. {ModuleName.PMC, PMCRecipeStepEnd},
  72. {ModuleName.PMD, PMDRecipeStepEnd},
  73. };
  74. private Dictionary<ModuleName, string> PMRecipeFailed = new Dictionary<ModuleName, string>()
  75. {
  76. {ModuleName.PMA, PMARecipeFailed},
  77. {ModuleName.PMB, PMBRecipeFailed},
  78. {ModuleName.PMC, PMCRecipeFailed},
  79. {ModuleName.PMD, PMDRecipeFailed},
  80. };
  81. private Dictionary<int, string> PortId = new Dictionary<int, string>()
  82. {
  83. {(int)ModuleName.LP1, "1"},
  84. {(int)ModuleName.LP2, "2"},
  85. };
  86. public RecipeFACallback()
  87. {
  88. FaEvent.AddFaEvent(new PostFAItem("Event", PMARecipeStart, PMARecipeStart));
  89. FaEvent.AddFaEvent(new PostFAItem("Event", PMARecipeComplete, PMARecipeComplete));
  90. FaEvent.AddFaEvent(new PostFAItem("Event", PMARecipeStepStart, PMARecipeStepStart));
  91. FaEvent.AddFaEvent(new PostFAItem("Event", PMARecipeStepEnd, PMARecipeStepEnd));
  92. FaEvent.AddFaEvent(new PostFAItem("Event", PMARecipeFailed, PMARecipeFailed));
  93. FaEvent.AddFaEvent(new PostFAItem("Event", PMBRecipeStart, PMBRecipeStart));
  94. FaEvent.AddFaEvent(new PostFAItem("Event", PMBRecipeComplete, PMBRecipeComplete));
  95. FaEvent.AddFaEvent(new PostFAItem("Event", PMBRecipeStepStart, PMBRecipeStepStart));
  96. FaEvent.AddFaEvent(new PostFAItem("Event", PMBRecipeStepEnd, PMBRecipeStepEnd));
  97. FaEvent.AddFaEvent(new PostFAItem("Event", PMBRecipeFailed, PMBRecipeFailed));
  98. FaEvent.AddFaEvent(new PostFAItem("Event", PMCRecipeStart, PMCRecipeStart));
  99. FaEvent.AddFaEvent(new PostFAItem("Event", PMCRecipeComplete, PMCRecipeComplete));
  100. FaEvent.AddFaEvent(new PostFAItem("Event", PMCRecipeStepStart, PMCRecipeStepStart));
  101. FaEvent.AddFaEvent(new PostFAItem("Event", PMCRecipeStepEnd, PMCRecipeStepEnd));
  102. FaEvent.AddFaEvent(new PostFAItem("Event", PMCRecipeFailed, PMCRecipeFailed));
  103. FaEvent.AddFaEvent(new PostFAItem("Event", PMDRecipeStart, PMDRecipeStart));
  104. FaEvent.AddFaEvent(new PostFAItem("Event", PMDRecipeComplete, PMDRecipeComplete));
  105. FaEvent.AddFaEvent(new PostFAItem("Event", PMDRecipeStepStart, PMDRecipeStepStart));
  106. FaEvent.AddFaEvent(new PostFAItem("Event", PMDRecipeStepEnd, PMDRecipeStepEnd));
  107. FaEvent.AddFaEvent(new PostFAItem("Event", PMDRecipeFailed, PMDRecipeFailed));
  108. }
  109. public void RecipeComplete(string module, string recipeName)
  110. {
  111. WaferInfo wafer = WaferManager.Instance.GetWafer(ModuleHelper.Converter(module), 0);
  112. if (wafer.IsEmpty)
  113. return;
  114. ModuleName moduleName = ModuleHelper.Converter(module);
  115. if (PortId.ContainsKey(wafer.OriginStation))
  116. {
  117. FaEvent.FaNotify(PMRecipeComplete[moduleName], new SerializableDictionary<string, string>()
  118. {
  119. {DVIDName.RecipeID, recipeName},
  120. {DVIDName.StationName, module},
  121. {DVIDName.PortID, PortId[wafer.OriginStation]},
  122. {DVIDName.SlotID, (wafer.OriginSlot+1).ToString()},
  123. {DVIDName.LotID, wafer.LotId},
  124. {DVIDName.CarrierID,wafer.OriginCarrierID.ToString() }
  125. });
  126. }
  127. else
  128. {
  129. FaEvent.FaNotify(PMRecipeComplete[moduleName], new SerializableDictionary<string, string>()
  130. {
  131. {DVIDName.RecipeID, recipeName},
  132. {DVIDName.StationName, module},
  133. {DVIDName.SlotID, (wafer.OriginSlot+1).ToString()},
  134. {DVIDName.LotID, wafer.LotId},
  135. {DVIDName.CarrierID,wafer.OriginCarrierID.ToString() }
  136. });
  137. }
  138. }
  139. public void RecipeFailed(string module, string recipeName)
  140. {
  141. WaferInfo wafer = WaferManager.Instance.GetWafer(ModuleHelper.Converter(module), 0);
  142. if (wafer.IsEmpty)
  143. return;
  144. ModuleName moduleName = ModuleHelper.Converter(module);
  145. if (PortId.ContainsKey(wafer.OriginStation))
  146. {
  147. FaEvent.FaNotify(PMRecipeFailed[moduleName], new SerializableDictionary<string, string>()
  148. {
  149. {DVIDName.RecipeID, recipeName},
  150. {DVIDName.StationName, module},
  151. {DVIDName.PortID, PortId[wafer.OriginStation]},
  152. {DVIDName.SlotID, (wafer.OriginSlot + 1).ToString()},
  153. {DVIDName.LotID, wafer.LotId}
  154. });
  155. }
  156. else
  157. {
  158. FaEvent.FaNotify(PMRecipeFailed[moduleName], new SerializableDictionary<string, string>()
  159. {
  160. {DVIDName.RecipeID, recipeName},
  161. {DVIDName.StationName, module},
  162. {DVIDName.SlotID, (wafer.OriginSlot + 1).ToString()},
  163. {DVIDName.LotID, wafer.LotId}
  164. });
  165. }
  166. }
  167. public void RecipeStart(string module, string recipeName)
  168. {
  169. WaferInfo wafer = WaferManager.Instance.GetWafer(ModuleHelper.Converter(module), 0);
  170. if (wafer.IsEmpty)
  171. return;
  172. ModuleName moduleName = ModuleHelper.Converter(module);
  173. if (PortId.ContainsKey(wafer.OriginStation))
  174. {
  175. FaEvent.FaNotify(PMRecipeStart[moduleName], new SerializableDictionary<string, string>()
  176. {
  177. {DVIDName.RecipeID, recipeName},
  178. {DVIDName.StationName, module},
  179. {DVIDName.PortID, PortId[wafer.OriginStation]},
  180. {DVIDName.SlotID, (wafer.OriginSlot + 1).ToString()},
  181. {DVIDName.LotID, wafer.LotId},
  182. //{DVIDName.CarrierID,wafer.OriginCarrierID.ToString() }
  183. {DVIDName.CarrierID,"" }
  184. });
  185. }
  186. else
  187. {
  188. FaEvent.FaNotify(PMRecipeStart[moduleName], new SerializableDictionary<string, string>()
  189. {
  190. {DVIDName.RecipeID, recipeName},
  191. {DVIDName.StationName, module},
  192. {DVIDName.SlotID, (wafer.OriginSlot + 1).ToString()},
  193. {DVIDName.LotID, wafer.LotId},
  194. {DVIDName.CarrierID,wafer.OriginCarrierID.ToString() }
  195. });
  196. }
  197. }
  198. public void RecipeStepEnd(string module, string recipeName, int stepNumber, List<FdcDataItem> fdc)
  199. {
  200. WaferInfo wafer = WaferManager.Instance.GetWafer(ModuleHelper.Converter(module), 0);
  201. if (wafer.IsEmpty)
  202. return;
  203. ModuleName moduleName = ModuleHelper.Converter(module);
  204. if (PortId.ContainsKey(wafer.OriginStation))
  205. {
  206. FaEvent.FaNotify(PMRecipeStepEnd[moduleName], new SerializableDictionary<string, object>()
  207. {
  208. {DVIDName.RecipeID, recipeName},
  209. {DVIDName.StationName, module},
  210. {DVIDName.RecipeStepNumber, (stepNumber + 1).ToString()},
  211. {DVIDName.PortID, PortId[wafer.OriginStation]},
  212. {DVIDName.SlotID, (wafer.OriginSlot + 1).ToString()},
  213. {DVIDName.RecipeStepEndDataSummary, fdc},
  214. {DVIDName.LotID, wafer.LotId},
  215. {DVIDName.CarrierID,wafer.OriginCarrierID.ToString() }
  216. });
  217. }
  218. else
  219. {
  220. FaEvent.FaNotify(PMRecipeStepEnd[moduleName], new SerializableDictionary<string, object>()
  221. {
  222. {DVIDName.RecipeID, recipeName},
  223. {DVIDName.StationName, module},
  224. {DVIDName.RecipeStepNumber, (stepNumber + 1).ToString()},
  225. {DVIDName.SlotID, (wafer.OriginSlot + 1).ToString()},
  226. {DVIDName.RecipeStepEndDataSummary, fdc},
  227. {DVIDName.LotID, wafer.LotId},
  228. {DVIDName.CarrierID,wafer.OriginCarrierID.ToString() }
  229. });
  230. }
  231. }
  232. public void RecipeStepStart(string module, string recipeName, int stepNumber)
  233. {
  234. WaferInfo wafer = WaferManager.Instance.GetWafer(ModuleHelper.Converter(module), 0);
  235. if (wafer.IsEmpty)
  236. return;
  237. ModuleName moduleName = ModuleHelper.Converter(module);
  238. if (PortId.ContainsKey(wafer.OriginStation))
  239. {
  240. FaEvent.FaNotify(PMRecipeStepStart[moduleName], new SerializableDictionary<string, string>()
  241. {
  242. {DVIDName.RecipeID, recipeName},
  243. {DVIDName.StationName, module},
  244. {DVIDName.RecipeStepNumber, (stepNumber + 1).ToString()},
  245. {DVIDName.PortID, PortId[wafer.OriginStation]},
  246. {DVIDName.SlotID, (wafer.OriginSlot + 1).ToString()},
  247. {DVIDName.LotID, wafer.LotId},
  248. {DVIDName.CarrierID,wafer.OriginCarrierID.ToString() }
  249. });
  250. }
  251. else
  252. {
  253. FaEvent.FaNotify(PMRecipeStepStart[moduleName], new SerializableDictionary<string, string>()
  254. {
  255. {DVIDName.RecipeID, recipeName},
  256. {DVIDName.StationName, module},
  257. {DVIDName.RecipeStepNumber, (stepNumber + 1).ToString()},
  258. {DVIDName.SlotID, (wafer.OriginSlot + 1).ToString()},
  259. {DVIDName.LotID, wafer.LotId},
  260. {DVIDName.CarrierID,wafer.OriginCarrierID.ToString() }
  261. });
  262. }
  263. }
  264. }
  265. }