FuqiAlignerHandler.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  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.Common.DeviceData;
  7. using Aitex.Core.RT.Event;
  8. using Aitex.Core.RT.Log;
  9. using MECF.Framework.Common.Communications;
  10. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.HonghuAligners
  11. {
  12. public static class FuqiAlignerCommand
  13. {
  14. public const string Reset = "C01";
  15. public const string RequestPlace = "C02";
  16. public const string RequestFinishPlace = "C03";
  17. public const string RequestVacuumOn = "C04";
  18. public const string RequestVacuumOff = "C05";
  19. public const string SetVacuumOffAfterAlign = "C06";
  20. public const string SetVacuumOnAfterAlign = "C07";
  21. public const string SetWIDReaderOn = "C08";
  22. public const string SetWIDReaderOff = "C09";
  23. public const string SetWIDReadComplete = "C10";
  24. public const string SetNotchProduct = "C11";
  25. public const string SetLineProduct = "C12";
  26. public const string SetCenterAndNotch = "C13";
  27. public const string SetOnlyNotch = "C14";
  28. public const string SetWIDReadFail = "C15";
  29. public const string SetAdjustFirstTime = "C16";
  30. public const string SetAdjustTwice = "C17";
  31. public const string SetUseNewCommand = "C41";
  32. public const string SetUseOldCommand = "C40";
  33. public const string SetWaferSize = "T";
  34. public const string RequestRecipe = "C200";
  35. /// <summary>
  36. /// A
  37. /// </summary>
  38. }
  39. public class FuqiAlignerHandler : HandlerBase
  40. {
  41. public FuqiAligner Device { get; set; }
  42. public string Command;
  43. protected FuqiAlignerHandler(FuqiAligner device, string command) : base(BuildMesage(command))
  44. {
  45. Device = device;
  46. Command = command;
  47. Name = command;
  48. }
  49. public static byte[] BuildMesage(string data)
  50. {
  51. List<byte> ret = new List<byte>();
  52. foreach (char c in data)
  53. {
  54. ret.Add((byte)c);
  55. }
  56. return ret.ToArray();
  57. }
  58. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  59. {
  60. FuqiAlignerMessageBIN response = msg as FuqiAlignerMessageBIN;
  61. ResponseMessage = msg;
  62. transactionComplete = false;
  63. if (response.IsResponse)
  64. {
  65. SetState(EnumHandlerState.Completed);
  66. transactionComplete = true;
  67. }
  68. Device.OnActionDone();
  69. return true;
  70. }
  71. }
  72. public enum FuqiMotionStatus
  73. {
  74. None,
  75. Complete,
  76. Fail,
  77. }
  78. public class FuqiResetHandler : FuqiAlignerHandler
  79. {
  80. public FuqiResetHandler(FuqiAligner device, string command) : base(device, BuildData(command))
  81. {
  82. _xAxisStatus = MotionStatus.None;
  83. _yAxisStatus = MotionStatus.None;
  84. _zAxisStatus = MotionStatus.None;
  85. }
  86. private MotionStatus _xAxisStatus;
  87. private MotionStatus _yAxisStatus;
  88. private MotionStatus _zAxisStatus;
  89. private static string BuildData(string command)
  90. {
  91. return command;
  92. }
  93. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  94. {
  95. HonghuAlignerMessageBIN response = msg as HonghuAlignerMessageBIN;
  96. ResponseMessage = msg;
  97. Device.TaExecuteSuccss = false;
  98. transactionComplete = false;
  99. if (response.IsAck)
  100. {
  101. if (Encoding.ASCII.GetString(response.CMD).Contains("X01"))
  102. _xAxisStatus = MotionStatus.Complete;
  103. if (Encoding.ASCII.GetString(response.CMD).Contains("X02"))
  104. _xAxisStatus = MotionStatus.Fail;
  105. if (Encoding.ASCII.GetString(response.CMD).Contains("Y01"))
  106. _yAxisStatus = MotionStatus.Complete;
  107. if (Encoding.ASCII.GetString(response.CMD).Contains("Y02"))
  108. _yAxisStatus = MotionStatus.Fail;
  109. if (Encoding.ASCII.GetString(response.CMD).Contains("Z01"))
  110. _zAxisStatus = MotionStatus.Complete;
  111. if (Encoding.ASCII.GetString(response.CMD).Contains("Z02"))
  112. _zAxisStatus = MotionStatus.Fail;
  113. SetState(EnumHandlerState.Completed);
  114. if (_xAxisStatus == MotionStatus.Complete &&
  115. _yAxisStatus == MotionStatus.Complete &&
  116. _zAxisStatus == MotionStatus.Complete) Device.TaExecuteSuccss = true;
  117. if (_xAxisStatus != MotionStatus.None &&
  118. _yAxisStatus != MotionStatus.None &&
  119. _zAxisStatus != MotionStatus.None) transactionComplete = true;
  120. }
  121. return true;
  122. }
  123. }
  124. public class FuqiRequestHandler : FuqiAlignerHandler
  125. {
  126. private string cmd;
  127. public FuqiRequestHandler(FuqiAligner device, string command) : base(device, BuildData(command))
  128. {
  129. cmd = command;
  130. }
  131. private static string BuildData(string command)
  132. {
  133. return command;
  134. }
  135. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  136. {
  137. FuqiAlignerMessageBIN response = msg as FuqiAlignerMessageBIN;
  138. ResponseMessage = msg;
  139. Device.TaExecuteSuccss = false;
  140. transactionComplete = false;
  141. if (response.IsResponse)
  142. {
  143. string commandstr = Encoding.ASCII.GetString(response.CMD);
  144. switch (cmd)
  145. {
  146. case FuqiAlignerCommand.RequestPlace:
  147. if (Encoding.ASCII.GetString(response.CMD).Contains("M01"))
  148. {
  149. Device.TaExecuteSuccss = true;
  150. transactionComplete = true;
  151. Device.OnWaferPresent(false);
  152. Device.OnActionDone();
  153. }
  154. if (Encoding.ASCII.GetString(response.CMD).Contains("M02"))
  155. {
  156. Device.TaExecuteSuccss = true;
  157. transactionComplete = true;
  158. Device.OnWaferPresent(true);
  159. Device.OnActionDone();
  160. }
  161. break;
  162. case FuqiAlignerCommand.RequestFinishPlace:
  163. if (Encoding.ASCII.GetString(response.CMD).Contains("M03"))
  164. {
  165. Device.TaExecuteSuccss = true;
  166. transactionComplete = true;
  167. Device.IsAlignSuccess = true;
  168. //Device.OnActionDone();
  169. }
  170. if (Encoding.ASCII.GetString(response.CMD).Contains("M04"))
  171. {
  172. Device.TaExecuteSuccss = false;
  173. transactionComplete = true;
  174. Device.IsAlignSuccess = false;
  175. }
  176. if (Encoding.ASCII.GetString(response.CMD).Contains("M17"))
  177. {
  178. Device.TaExecuteSuccss = false;
  179. transactionComplete = true;
  180. Device.IsAlignSuccess = false;
  181. }
  182. if (Encoding.ASCII.GetString(response.CMD).Contains("M18"))
  183. {
  184. Device.TaExecuteSuccss = false;
  185. transactionComplete = true;
  186. Device.IsAlignSuccess = false;
  187. }
  188. break;
  189. case FuqiAlignerCommand.RequestVacuumOn:
  190. if (Encoding.ASCII.GetString(response.CMD).Contains("M05"))
  191. {
  192. Device.TaExecuteSuccss = true;
  193. transactionComplete = true;
  194. Device.OnActionDone();
  195. }
  196. if (Encoding.ASCII.GetString(response.CMD).Contains("M06"))
  197. {
  198. Device.TaExecuteSuccss = false;
  199. transactionComplete = true;
  200. Device.OnError(Encoding.ASCII.GetString(response.CMD));
  201. }
  202. break;
  203. case FuqiAlignerCommand.RequestVacuumOff:
  204. if (Encoding.ASCII.GetString(response.CMD).Contains("M07"))
  205. {
  206. Device.TaExecuteSuccss = true;
  207. transactionComplete = true;
  208. Device.OnActionDone();
  209. }
  210. if (Encoding.ASCII.GetString(response.CMD).Contains("M08"))
  211. {
  212. Device.TaExecuteSuccss = false;
  213. transactionComplete = true;
  214. Device.OnError(Encoding.ASCII.GetString(response.CMD));
  215. }
  216. break;
  217. case FuqiAlignerCommand.Reset:
  218. if (Encoding.ASCII.GetString(response.CMD).Contains("M00"))
  219. {
  220. Device.TaExecuteSuccss = true;
  221. transactionComplete = true;
  222. Device.Initalized = true;
  223. Device.OnActionDone();
  224. }
  225. break;
  226. case FuqiAlignerCommand.SetVacuumOffAfterAlign:
  227. case FuqiAlignerCommand.SetVacuumOnAfterAlign:
  228. if (Encoding.ASCII.GetString(response.CMD).Contains("M09"))
  229. {
  230. Device.TaExecuteSuccss = true;
  231. transactionComplete = true;
  232. Device.OnActionDone();
  233. }
  234. break;
  235. case FuqiAlignerCommand.SetWIDReaderOn:
  236. case FuqiAlignerCommand.SetWIDReaderOff:
  237. if (Encoding.ASCII.GetString(response.CMD).Contains("M10"))
  238. {
  239. Device.TaExecuteSuccss = true;
  240. transactionComplete = true;
  241. Device.OnActionDone();
  242. }
  243. break;
  244. case FuqiAlignerCommand.SetWIDReadComplete:
  245. case FuqiAlignerCommand.SetWIDReadFail:
  246. if (Encoding.ASCII.GetString(response.CMD).Contains("M11"))
  247. {
  248. Device.TaExecuteSuccss = true;
  249. transactionComplete = true;
  250. Device.OnActionDone();
  251. }
  252. break;
  253. case FuqiAlignerCommand.SetLineProduct:
  254. case FuqiAlignerCommand.SetNotchProduct:
  255. if (Encoding.ASCII.GetString(response.CMD).Contains("M12"))
  256. {
  257. Device.TaExecuteSuccss = true;
  258. transactionComplete = true;
  259. Device.OnActionDone();
  260. }
  261. break;
  262. case FuqiAlignerCommand.SetCenterAndNotch:
  263. case FuqiAlignerCommand.SetOnlyNotch:
  264. if (Encoding.ASCII.GetString(response.CMD).Contains("M13"))
  265. {
  266. Device.TaExecuteSuccss = true;
  267. transactionComplete = true;
  268. Device.OnActionDone();
  269. }
  270. break;
  271. case FuqiAlignerCommand.SetAdjustFirstTime:
  272. if (Encoding.ASCII.GetString(response.CMD).Contains("M31"))
  273. {
  274. Device.TaExecuteSuccss = true;
  275. transactionComplete = true;
  276. Device.OnActionDone();
  277. }
  278. break;
  279. case FuqiAlignerCommand.SetAdjustTwice:
  280. if (Encoding.ASCII.GetString(response.CMD).Contains("M32"))
  281. {
  282. Device.TaExecuteSuccss = true;
  283. transactionComplete = true;
  284. Device.OnActionDone();
  285. }
  286. break;
  287. case FuqiAlignerCommand.SetUseOldCommand:
  288. if (Encoding.ASCII.GetString(response.CMD).Contains("M40"))
  289. {
  290. Device.TaExecuteSuccss = true;
  291. transactionComplete = true;
  292. Device.OnActionDone();
  293. }
  294. if (Encoding.ASCII.GetString(response.CMD).Contains("M41"))
  295. {
  296. Device.TaExecuteSuccss = true;
  297. transactionComplete = true;
  298. Device.OnActionDone();
  299. }
  300. break;
  301. case FuqiAlignerCommand.SetUseNewCommand:
  302. if (Encoding.ASCII.GetString(response.CMD).Contains("M41"))
  303. {
  304. Device.TaExecuteSuccss = true;
  305. transactionComplete = true;
  306. Device.OnActionDone();
  307. }
  308. if (Encoding.ASCII.GetString(response.CMD).Contains("M40"))
  309. {
  310. Device.TaExecuteSuccss = true;
  311. transactionComplete = true;
  312. Device.OnActionDone();
  313. }
  314. break;
  315. case FuqiAlignerCommand.RequestRecipe:
  316. if (Encoding.ASCII.GetString(response.CMD).Contains(FuqiAlignerCommand.RequestRecipe))
  317. {
  318. Device.TaExecuteSuccss = true;
  319. transactionComplete = true;
  320. Device.OnRecipeReceived(Encoding.ASCII.GetString(response.RawMessage));
  321. }
  322. break;
  323. default:
  324. break;
  325. }
  326. if (cmd.Contains("A"))
  327. {
  328. if (Encoding.ASCII.GetString(response.CMD).Contains("M14"))
  329. {
  330. Device.TaExecuteSuccss = true;
  331. transactionComplete = true;
  332. Device.OnActionDone();
  333. }
  334. }
  335. if (cmd.Contains("B"))
  336. {
  337. if (Encoding.ASCII.GetString(response.CMD).Contains("M15"))
  338. {
  339. Device.TaExecuteSuccss = true;
  340. transactionComplete = true;
  341. Device.OnActionDone();
  342. }
  343. }
  344. if (cmd.Contains("T"))
  345. {
  346. if (Encoding.ASCII.GetString(response.CMD).Contains("M16"))
  347. {
  348. Device.TaExecuteSuccss = true;
  349. transactionComplete = true;
  350. Device.OnActionDone();
  351. }
  352. }
  353. if (cmd.Contains("SET"))
  354. {
  355. if (Encoding.ASCII.GetString(response.CMD).Contains("M201"))
  356. {
  357. Device.TaExecuteSuccss = true;
  358. transactionComplete = true;
  359. Device.OnSetComplete(true);
  360. }
  361. if (Encoding.ASCII.GetString(response.CMD).Contains("M202"))
  362. {
  363. Device.TaExecuteSuccss = true;
  364. transactionComplete = true;
  365. Device.OnSetComplete(false);
  366. }
  367. }
  368. }
  369. return true;
  370. }
  371. }
  372. }