RobotTask.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. using System;
  2. using Aitex.Core.Common;
  3. using Aitex.Core.Util;
  4. using Aitex.Sorter.Common;
  5. using Aitex.Sorter.RT.EFEMs.Servers;
  6. using MECF.Framework.Common.Equipment;
  7. namespace Aitex.Sorter.RT.EFEMs.Tasks
  8. {
  9. public class RobotImp : CheckImp
  10. {
  11. public RobotImp()
  12. {
  13. }
  14. public bool ParseMoveTarget(string args, out ModuleName target, out int slot)
  15. {
  16. target = ModuleName.System;
  17. slot = 1;
  18. if (args.StartsWith("ALIGN") )
  19. {
  20. if (AlignerInstalled)
  21. {
  22. target = ModuleName.Aligner;
  23. slot = 1;
  24. return true;
  25. }
  26. else if(CoolingBufferInstalled)
  27. {
  28. if(args.Equals("ALIGN2"))
  29. {
  30. target = ModuleName.CoolingBuffer2;
  31. slot = 1;
  32. return true;
  33. }
  34. else if (args.Equals("ALIGN"))
  35. {
  36. target = ModuleName.CoolingBuffer1;
  37. slot = 1;
  38. return true;
  39. }
  40. }
  41. }
  42. else if (args.StartsWith("P1") && LoadPortQuantity > 0 )
  43. {
  44. target = ModuleName.LP1;
  45. if (int.TryParse(args.Replace("P1", ""), out slot))
  46. {
  47. return true;
  48. }
  49. }
  50. else if (args.StartsWith("P2") && LoadPortQuantity > 1)
  51. {
  52. target = ModuleName.LP2;
  53. if (int.TryParse(args.Replace("P2", ""), out slot))
  54. {
  55. return true;
  56. }
  57. }
  58. else if (args.StartsWith("P3") && LoadPortQuantity > 2)
  59. {
  60. target = ModuleName.LP3;
  61. if (int.TryParse(args.Replace("P3", ""), out slot))
  62. {
  63. return true;
  64. }
  65. }
  66. else if (args.StartsWith("P4") && LoadPortQuantity > 3)
  67. {
  68. target = ModuleName.LP4;
  69. if (int.TryParse(args.Replace("P4", ""), out slot))
  70. {
  71. return true;
  72. }
  73. }
  74. else if (args.StartsWith("P5") && LoadPortQuantity > 4)
  75. {
  76. target = ModuleName.LP5;
  77. if (int.TryParse(args.Replace("P5", ""), out slot))
  78. {
  79. return true;
  80. }
  81. }
  82. else if (args.StartsWith("P6") && LoadPortQuantity > 5)
  83. {
  84. target = ModuleName.LP6;
  85. if (int.TryParse(args.Replace("P6", ""), out slot))
  86. {
  87. return true;
  88. }
  89. }
  90. else if ((args.StartsWith("LLA") || args.StartsWith("LLLA")) && LoadLockQuantity > 0)
  91. {
  92. target = ModuleName.LL1;
  93. string temp = args.Replace("LLA", "");
  94. if (string.IsNullOrEmpty(temp))
  95. {
  96. slot = 1;
  97. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemLLParameter(target, slot, out target,
  98. out slot);
  99. }
  100. else
  101. {
  102. if (int.TryParse(temp, out slot))
  103. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemLLParameter(target, slot, out target,
  104. out slot);
  105. }
  106. }
  107. else if ((args.StartsWith("LLB") || args.StartsWith("LLLB")) && LoadLockQuantity > 1)
  108. {
  109. target = ModuleName.LL2;
  110. string temp = args.Replace("LLB", "");
  111. if (string.IsNullOrEmpty(temp))
  112. {
  113. slot = 1;
  114. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemLLParameter(target, slot, out target,
  115. out slot);
  116. }
  117. else
  118. {
  119. if (int.TryParse(temp, out slot))
  120. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemLLParameter(target, slot, out target,
  121. out slot);
  122. }
  123. }
  124. else if ((args.StartsWith("LLC") || args.StartsWith("LLLC")) && LoadLockQuantity >2)
  125. {
  126. target = ModuleName.LL3;
  127. string temp = args.Replace("LLC", "");
  128. if (string.IsNullOrEmpty(temp))
  129. {
  130. slot = 1;
  131. return true;
  132. }
  133. else
  134. {
  135. if (int.TryParse(temp, out slot))
  136. return true;
  137. }
  138. }
  139. else if ((args.StartsWith("LLD") || args.StartsWith("LLLD")) && LoadLockQuantity > 3)
  140. {
  141. target = ModuleName.LL4;
  142. string temp = args.Replace("LLD", "");
  143. if (string.IsNullOrEmpty(temp))
  144. {
  145. slot = 1;
  146. return true;
  147. }
  148. else
  149. {
  150. if (int.TryParse(temp, out slot))
  151. return true;
  152. }
  153. }
  154. else if (args.StartsWith("LLE") && LoadLockQuantity > 4)
  155. {
  156. target = ModuleName.LL5;
  157. string temp = args.Replace("LLE", "");
  158. if (string.IsNullOrEmpty(temp))
  159. {
  160. slot = 1;
  161. return true;
  162. }
  163. else
  164. {
  165. if (int.TryParse(temp, out slot))
  166. return true;
  167. }
  168. }
  169. else if (args.StartsWith("LLF") && LoadLockQuantity > 5)
  170. {
  171. target = ModuleName.LL6;
  172. string temp = args.Replace("LLF", "");
  173. if (string.IsNullOrEmpty(temp))
  174. {
  175. slot = 1;
  176. return true;
  177. }
  178. else
  179. {
  180. if (int.TryParse(temp, out slot))
  181. return true;
  182. }
  183. }
  184. else if (args.StartsWith("LLG") && LoadLockQuantity > 6)
  185. {
  186. target = ModuleName.LL7;
  187. string temp = args.Replace("LLG", "");
  188. if (string.IsNullOrEmpty(temp))
  189. {
  190. slot = 1;
  191. return true;
  192. }
  193. else
  194. {
  195. if (int.TryParse(temp, out slot))
  196. return true;
  197. }
  198. }
  199. else if (args.StartsWith("LLH") && LoadLockQuantity > 7)
  200. {
  201. target = ModuleName.LL8;
  202. string temp = args.Replace("LLH", "");
  203. if (string.IsNullOrEmpty(temp))
  204. {
  205. slot = 1;
  206. return true;
  207. }
  208. else
  209. {
  210. if (int.TryParse(temp, out slot))
  211. return true;
  212. }
  213. }
  214. else if (args.StartsWith("BF1"))
  215. {
  216. target = ModuleName.Buffer1;
  217. string temp = args.Replace("BF1", "");
  218. if (string.IsNullOrEmpty(temp))
  219. {
  220. slot = 1;
  221. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemBufferParameter(target, slot, out target,
  222. out slot);
  223. }
  224. else
  225. {
  226. if (int.TryParse(temp, out slot))
  227. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemBufferParameter(target, slot, out target,
  228. out slot);
  229. }
  230. }
  231. else if (args.StartsWith("BF2"))
  232. {
  233. target = ModuleName.Buffer2;
  234. string temp = args.Replace("BF2", "");
  235. if (string.IsNullOrEmpty(temp))
  236. {
  237. slot = 1;
  238. return true;
  239. }
  240. else
  241. {
  242. if (int.TryParse(temp, out slot))
  243. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemBufferParameter(target, slot, out target,
  244. out slot);
  245. }
  246. }
  247. else if (args.StartsWith("BF3"))
  248. {
  249. target = ModuleName.Buffer3;
  250. string temp = args.Replace("BF3", "");
  251. if (string.IsNullOrEmpty(temp))
  252. {
  253. slot = 1;
  254. return true;
  255. }
  256. else
  257. {
  258. if (int.TryParse(temp, out slot))
  259. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemBufferParameter(target, slot, out target,
  260. out slot);
  261. }
  262. }
  263. else if (args.StartsWith("BF4"))
  264. {
  265. target = ModuleName.Buffer4;
  266. string temp = args.Replace("BF4", "");
  267. if (string.IsNullOrEmpty(temp))
  268. {
  269. slot = 1;
  270. return true;
  271. }
  272. else
  273. {
  274. if (int.TryParse(temp, out slot))
  275. return Singleton<EfemEntity>.Instance.EfemDevice.ConverterEfemBufferParameter(target, slot, out target,
  276. out slot);
  277. }
  278. }
  279. return false;
  280. }
  281. public bool ParseMoveArm(string args, out Hand arm)
  282. {
  283. arm = Hand.Blade1;
  284. //EFEM require arm1 as upper arm, arm2 as lower arm
  285. switch (args)
  286. {
  287. case "ARM1": arm = Hand.Blade2;
  288. break;
  289. case "ARM2": arm = Hand.Blade1;
  290. break;
  291. case "ARM3": arm = Hand.Both;
  292. break;
  293. default:
  294. return false;
  295. }
  296. if (RobotIsSingleArm && arm != Hand.Blade1)
  297. return false;
  298. return true;
  299. }
  300. public bool ParseMovePosition(string args, out MovePosition pos)
  301. {
  302. if(Enum.TryParse(args, out pos))
  303. {
  304. return true;
  305. }
  306. return false;
  307. }
  308. public bool ParseWaferSize(string args, out WaferSize size)
  309. {
  310. if (Enum.TryParse<WaferSize>(args, out size))
  311. {
  312. return true;
  313. }
  314. return false;
  315. }
  316. }
  317. }