GetHandler.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Event;
  3. using Aitex.Core.Util;
  4. using Aitex.Sorter.Common;
  5. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.TDK
  6. {
  7. public class QueryStateHandler : IMsg
  8. {
  9. /// <summary>
  10. /// / (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20)
  11. /// (1) Equipment status 0 = Normal A = Recoverable error E = Fatal error
  12. ///(5)Error code Error code(upper)
  13. ///(6)Error code Error code(lower)
  14. ///(7)Cassette presence 0 = None 1 = Normal position 2 = Error load
  15. ///(8)FOUP clamp status 0 = Open 1 = Close? = Not defined
  16. ///(11)Door position 0 = Open position 1 = Close position ? = Not defined
  17. /// </summary>
  18. public bool background { get; private set; }
  19. public string deviceID { private get; set; }
  20. private string _cmd = string.Empty;
  21. public QueryStateHandler()
  22. {
  23. background = false;
  24. }
  25. public string package(params object[] args)
  26. {
  27. _cmd = QueryType.STATE.ToString();
  28. return string.Format("GET:{0}", _cmd);
  29. }
  30. public string retry()
  31. {
  32. return string.Format("RFN:{0}", _cmd);
  33. }
  34. public bool unpackage(string type, string[] items)
  35. {
  36. if (!type.Equals("ACK"))
  37. return false;
  38. string state = items[1];
  39. TDKLoadPort device = DEVICE.GetDevice<TDKLoadPort>(deviceID);
  40. device.ErrorCode = state.Substring(4, 2);
  41. if (state[0] != '0')
  42. {
  43. device.Error = true;
  44. device.ErrorCode = state.Substring(4,2);
  45. string error = Singleton<ErrorCode>.Instance.Code2Msg(device.ErrorCode);
  46. EV.PostMessage(deviceID, EventEnum.DefaultWarning, string.Format("{0} has error, error is {1}", deviceID, error));
  47. }
  48. else
  49. {
  50. device.Error = false;
  51. }
  52. device.SetCassetteState(getCassetteState(state[6]));
  53. device.ClampState = getClampState(state[7]);
  54. device.DoorState = getDoorState(state[10]);
  55. string reason = string.Empty;
  56. device.OnStateUpdated();
  57. return true;
  58. }
  59. public bool canhandle(string id)
  60. {
  61. return id.Equals(_cmd);
  62. }
  63. //(7) Cassette presence 0 = None 1 = Normal position 2 = Error load
  64. private LoadportCassetteState getCassetteState(char x)
  65. {
  66. if (x == '0')
  67. return LoadportCassetteState.None;
  68. if (x == '1')
  69. return LoadportCassetteState.Normal;
  70. return LoadportCassetteState.Unknown;
  71. }
  72. // (8) FOUP clamp status 0 = Open 1 = Close ? = Not defined
  73. private FoupClampState getClampState(char x)
  74. {
  75. if (x == '0')
  76. return FoupClampState.Open;
  77. if (x == '1')
  78. return FoupClampState.Close;
  79. return FoupClampState.Unknown;
  80. }
  81. //(11) Door position 0 = Open position 1 = Close position ? = Not defined
  82. private FoupDoorState getDoorState(char x)
  83. {
  84. if (x == '0')
  85. return FoupDoorState.Open;
  86. if (x == '1')
  87. return FoupDoorState.Close;
  88. return FoupDoorState.Unknown;
  89. }
  90. }
  91. public class QueryIndicatorHandler : IMsg
  92. {
  93. public bool background { get; private set; }
  94. public string deviceID { private get; set; }
  95. private string _cmd = string.Empty;
  96. public QueryIndicatorHandler()
  97. {
  98. background = false;
  99. }
  100. public string package(params object[] args)
  101. {
  102. _cmd = QueryType.LEDST.ToString();
  103. return string.Format("GET:{0}", _cmd);
  104. }
  105. public string retry()
  106. {
  107. return string.Format("RFN:{0}", _cmd);
  108. }
  109. public bool unpackage(string type, string[] items)
  110. {
  111. if (!type.Equals("ACK"))
  112. return false;
  113. string state = items[1];
  114. TDKLoadPort device = DEVICE.GetDevice<TDKLoadPort>(deviceID);
  115. if (state.Length == 7)
  116. {
  117. device.IndicatiorPresence = getIndicatorState(state[0]);
  118. device.IndicatiorPlacement = getIndicatorState(state[1]);
  119. device.IndicatorAlarm = getIndicatorState(state[2]);
  120. device.IndicatiorLoad = getIndicatorState(state[3]);
  121. device.IndicatiorUnload = getIndicatorState(state[4]);
  122. device.IndicatiorOpAccess = getIndicatorState(state[5]);
  123. device.IndicatiorStatus1 = getIndicatorState(state[6]);
  124. }
  125. else
  126. {
  127. device.IndicatiorLoad = getIndicatorState(state[0]);
  128. device.IndicatiorUnload = getIndicatorState(state[1]);
  129. device.IndicatiorOpAccess = getIndicatorState(state[2]);
  130. device.IndicatiorPresence = getIndicatorState(state[3]);
  131. device.IndicatiorPlacement = getIndicatorState(state[4]);
  132. device.IndicatorAlarm = getIndicatorState(state[5]);
  133. device.IndicatiorStatus1 = getIndicatorState(state[6]);
  134. device.IndicatiorStatus2 = getIndicatorState(state[7]);
  135. }
  136. return true;
  137. }
  138. public bool canhandle(string id)
  139. {
  140. return id.Equals(_cmd);
  141. }
  142. private IndicatorState getIndicatorState(char x)
  143. {
  144. if (x == '0')
  145. return IndicatorState.OFF;
  146. if (x == '1')
  147. return IndicatorState.ON;
  148. return IndicatorState.BLINK;
  149. }
  150. }
  151. public class QueryWaferMappingHandler : IMsg
  152. {
  153. public bool background { get; private set; }
  154. public string deviceID { private get; set; }
  155. private string _cmd = string.Empty;
  156. public QueryWaferMappingHandler()
  157. {
  158. background = false;
  159. }
  160. public string package(params object[] args)
  161. {
  162. _cmd = QueryType.MAPRD.ToString();
  163. return string.Format("GET:{0}", _cmd);
  164. }
  165. public string retry()
  166. {
  167. return string.Format("RFN:{0}", _cmd);
  168. }
  169. public bool unpackage(string type, string[] items)
  170. {
  171. if (!type.Equals("ACK"))
  172. return false;
  173. TDKLoadPort device = DEVICE.GetDevice<TDKLoadPort>(deviceID);
  174. device.OnSlotMapRead(items[1]);
  175. string reason = string.Empty;
  176. device.QueryState(out reason);
  177. return true;
  178. }
  179. public bool canhandle(string id)
  180. {
  181. return id.Equals(_cmd);
  182. }
  183. }
  184. /// <summary>
  185. /// 查询FOSB模式是否激活
  186. /// </summary>
  187. public class QueryFOSBModeHandler : IMsg
  188. {
  189. public bool background { get; private set; }
  190. public string deviceID { private get; set; }
  191. private string _cmd = string.Empty;
  192. public QueryFOSBModeHandler()
  193. {
  194. background = false;
  195. }
  196. public string package(params object[] args)
  197. {
  198. _cmd = QueryType.FSBxx.ToString();
  199. return string.Format("GET:{0}", _cmd);
  200. }
  201. public string retry()
  202. {
  203. return string.Format("RFN:{0}", _cmd);
  204. }
  205. public bool unpackage(string type, string[] items)
  206. {
  207. if (!type.Equals("ACK"))
  208. return false;
  209. string modeState = items[1];
  210. TDKLoadPort device = DEVICE.GetDevice<TDKLoadPort>(deviceID);
  211. switch (modeState)
  212. {
  213. case "ON":
  214. device.IsFOSBMode = true;
  215. break;
  216. case "OF":
  217. device.IsFOSBMode = false;
  218. break;
  219. default:
  220. device.IsFOSBMode = false;
  221. break;
  222. }
  223. return true;
  224. }
  225. public bool canhandle(string id)
  226. {
  227. return id.Equals(_cmd);
  228. }
  229. }
  230. }