HonghuAlignerHandler.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  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 HonghuAlignerCommand
  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 SetWafer200mm = "C06";
  20. public const string SetWafer300mm = "C07";
  21. public const string SetVacuumOffAfterAln = "C08";
  22. public const string SetVacuumOnAfterAln = "C09";
  23. public const string SetReadLM = "C10";
  24. public const string SetNotReadLM = "C11";
  25. public const string SetAlnAngleTo180 = "C12";
  26. public const string SetAlnAngleTo270 = "C13";
  27. /// <summary>
  28. /// A
  29. /// </summary>
  30. }
  31. public class HonghuAlignerHandler : HandlerBase
  32. {
  33. public HonghuAligner Device { get; set; }
  34. public string Command;
  35. protected HonghuAlignerHandler(HonghuAligner device, string command) : base(BuildMesage(command))
  36. {
  37. Device = device;
  38. Command = command;
  39. Name = command;
  40. }
  41. public static byte[] BuildMesage(string data)
  42. {
  43. List<byte> ret = new List<byte>();
  44. foreach(char c in data)
  45. {
  46. ret.Add((byte)c);
  47. }
  48. return ret.ToArray();
  49. }
  50. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  51. {
  52. HonghuAlignerMessageBIN response = msg as HonghuAlignerMessageBIN;
  53. ResponseMessage = msg;
  54. transactionComplete = false;
  55. if(response.IsResponse)
  56. {
  57. SetState(EnumHandlerState.Completed);
  58. transactionComplete = true;
  59. }
  60. return true;
  61. }
  62. }
  63. public enum MotionStatus
  64. {
  65. None,
  66. Complete,
  67. Fail,
  68. }
  69. public class ResetHandler : HonghuAlignerHandler
  70. {
  71. public ResetHandler(HonghuAligner device, string command) : base(device, BuildData(command))
  72. {
  73. _xAxisStatus = MotionStatus.None;
  74. _yAxisStatus = MotionStatus.None;
  75. _zAxisStatus = MotionStatus.None;
  76. }
  77. private MotionStatus _xAxisStatus;
  78. private MotionStatus _yAxisStatus;
  79. private MotionStatus _zAxisStatus;
  80. private static string BuildData(string command)
  81. {
  82. return command;
  83. }
  84. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  85. {
  86. HonghuAlignerMessageBIN response = msg as HonghuAlignerMessageBIN;
  87. ResponseMessage = msg;
  88. Device.TaExecuteSuccss = false;
  89. transactionComplete = false;
  90. if (response.IsAck)
  91. {
  92. if (Encoding.ASCII.GetString(response.CMD).Contains("X01"))
  93. _xAxisStatus = MotionStatus.Complete;
  94. if (Encoding.ASCII.GetString(response.CMD).Contains("X02"))
  95. _xAxisStatus = MotionStatus.Fail;
  96. if (Encoding.ASCII.GetString(response.CMD).Contains("Y01"))
  97. _yAxisStatus = MotionStatus.Complete;
  98. if (Encoding.ASCII.GetString(response.CMD).Contains("Y02"))
  99. _yAxisStatus = MotionStatus.Fail;
  100. if (Encoding.ASCII.GetString(response.CMD).Contains("Z01"))
  101. _zAxisStatus = MotionStatus.Complete;
  102. if (Encoding.ASCII.GetString(response.CMD).Contains("Z02"))
  103. _zAxisStatus = MotionStatus.Fail;
  104. SetState(EnumHandlerState.Completed);
  105. if (_xAxisStatus == MotionStatus.Complete &&
  106. _yAxisStatus == MotionStatus.Complete &&
  107. _zAxisStatus == MotionStatus.Complete) Device.TaExecuteSuccss = true;
  108. if(_xAxisStatus != MotionStatus.None &&
  109. _yAxisStatus != MotionStatus.None &&
  110. _zAxisStatus != MotionStatus.None) transactionComplete = true;
  111. }
  112. return true;
  113. }
  114. }
  115. public class RequestHandler: HonghuAlignerHandler
  116. {
  117. private string cmd;
  118. public RequestHandler(HonghuAligner device,string command): base(device, BuildData(command))
  119. {
  120. cmd = command;
  121. }
  122. private static string BuildData(string command)
  123. {
  124. return command;
  125. }
  126. public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
  127. {
  128. HonghuAlignerMessageBIN response = msg as HonghuAlignerMessageBIN;
  129. ResponseMessage = msg;
  130. Device.TaExecuteSuccss = false;
  131. transactionComplete = false;
  132. if (response.IsResponse)
  133. {
  134. switch (cmd)
  135. {
  136. case HonghuAlignerCommand.RequestPlace:
  137. if (Encoding.ASCII.GetString(response.CMD).Contains("M06"))
  138. {
  139. Device.TaExecuteSuccss = true;
  140. transactionComplete = true;
  141. }
  142. if (Encoding.ASCII.GetString(response.CMD).Contains("M07"))
  143. {
  144. Device.TaExecuteSuccss = false;
  145. transactionComplete = true;
  146. }
  147. break;
  148. case HonghuAlignerCommand.RequestFinishPlace:
  149. if (Encoding.ASCII.GetString(response.CMD).Contains("M08"))
  150. {
  151. Device.TaExecuteSuccss = true;
  152. transactionComplete = true;
  153. }
  154. if (Encoding.ASCII.GetString(response.CMD).Contains("M09"))
  155. {
  156. Device.TaExecuteSuccss = false;
  157. transactionComplete = true;
  158. }
  159. break;
  160. case HonghuAlignerCommand.RequestVacuumOn:
  161. if (Encoding.ASCII.GetString(response.CMD).Contains("M01"))
  162. {
  163. Device.TaExecuteSuccss = true;
  164. transactionComplete = true;
  165. }
  166. if (Encoding.ASCII.GetString(response.CMD).Contains("M02"))
  167. {
  168. Device.TaExecuteSuccss = false;
  169. transactionComplete = true;
  170. }
  171. break;
  172. case HonghuAlignerCommand.RequestVacuumOff:
  173. if (Encoding.ASCII.GetString(response.CMD).Contains("M03"))
  174. {
  175. Device.TaExecuteSuccss = true;
  176. transactionComplete = true;
  177. }
  178. if (Encoding.ASCII.GetString(response.CMD).Contains("M04"))
  179. {
  180. Device.TaExecuteSuccss = false;
  181. transactionComplete = true;
  182. }
  183. break;
  184. case HonghuAlignerCommand.Reset :
  185. if (Encoding.ASCII.GetString(response.CMD).Contains("M05"))
  186. {
  187. Device.TaExecuteSuccss = true;
  188. transactionComplete = true;
  189. Device.Initalized = true;
  190. }
  191. break;
  192. case HonghuAlignerCommand.SetWafer200mm:
  193. if (Encoding.ASCII.GetString(response.CMD).Contains("M10"))
  194. {
  195. Device.TaExecuteSuccss = true;
  196. transactionComplete = true;
  197. }
  198. break;
  199. case HonghuAlignerCommand.SetWafer300mm:
  200. if (Encoding.ASCII.GetString(response.CMD).Contains("M10"))
  201. {
  202. Device.TaExecuteSuccss = true;
  203. transactionComplete = true;
  204. }
  205. break;
  206. case HonghuAlignerCommand.SetVacuumOffAfterAln:
  207. if (Encoding.ASCII.GetString(response.CMD).Contains("M11"))
  208. {
  209. Device.TaExecuteSuccss = true;
  210. transactionComplete = true;
  211. }
  212. break;
  213. case HonghuAlignerCommand.SetVacuumOnAfterAln:
  214. if (Encoding.ASCII.GetString(response.CMD).Contains("M11"))
  215. {
  216. Device.TaExecuteSuccss = true;
  217. transactionComplete = true;
  218. }
  219. break;
  220. case HonghuAlignerCommand.SetNotReadLM:
  221. if (Encoding.ASCII.GetString(response.CMD).Contains("M13"))
  222. {
  223. Device.TaExecuteSuccss = true;
  224. transactionComplete = true;
  225. }
  226. break;
  227. case HonghuAlignerCommand.SetReadLM:
  228. if (Encoding.ASCII.GetString(response.CMD).Contains("M13"))
  229. {
  230. Device.TaExecuteSuccss = true;
  231. transactionComplete = true;
  232. }
  233. break;
  234. case HonghuAlignerCommand.SetAlnAngleTo180:
  235. if (Encoding.ASCII.GetString(response.CMD).Contains("M12"))
  236. {
  237. Device.TaExecuteSuccss = true;
  238. transactionComplete = true;
  239. }
  240. break;
  241. case HonghuAlignerCommand.SetAlnAngleTo270:
  242. if (Encoding.ASCII.GetString(response.CMD).Contains("M12"))
  243. {
  244. Device.TaExecuteSuccss = true;
  245. transactionComplete = true;
  246. }
  247. break;
  248. default:
  249. break;
  250. }
  251. if(cmd.Contains("A"))
  252. {
  253. if (Encoding.ASCII.GetString(response.CMD).Contains("M14"))
  254. {
  255. Device.TaExecuteSuccss = true;
  256. transactionComplete = true;
  257. }
  258. }
  259. if (cmd.Contains("B"))
  260. {
  261. if (Encoding.ASCII.GetString(response.CMD).Contains("M15"))
  262. {
  263. Device.TaExecuteSuccss = true;
  264. transactionComplete = true;
  265. }
  266. }
  267. }
  268. return true;
  269. }
  270. }
  271. }