SigoutTask.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.RT.Device.Unit;
  3. using Aitex.Core.RT.Event;
  4. using Aitex.Sorter.Common;
  5. using Aitex.Sorter.RT.EFEMs.Servers;
  6. using MECF.Framework.Common.Device.Bases;
  7. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  8. namespace Aitex.Sorter.RT.EFEMs.Tasks
  9. {
  10. public class SigoutTask : CheckImp, ITask
  11. {
  12. public SigoutTask()
  13. {
  14. HasInfoMessage = false;
  15. }
  16. public bool Execute(out string result, params string[] args)
  17. {
  18. string device = Args2Unit(args.Length > 0 ? args[0] : string.Empty);
  19. if (device == null)
  20. {
  21. result = PARAM_NG;
  22. return false;
  23. }
  24. if ( !CheckIsPort(device) && !CheckIsTower(device))
  25. {
  26. result = PARAM_NG;
  27. return false;
  28. }
  29. if (args.Length < 3)
  30. {
  31. result = PARAM_NG;
  32. return false;
  33. }
  34. if (!Check<NoReadyPolicy>(device, out result))
  35. {
  36. return false;
  37. }
  38. if (!Check<RemovePolicy>(device, out result))
  39. {
  40. return false;
  41. }
  42. if (CheckIsTower(device))
  43. {
  44. IoSignalTower tower = DEVICE.GetDevice<IoSignalTower>(device);
  45. LightState state = LightState.Off;
  46. int interval = 5;
  47. if (args[2].Equals("ON"))
  48. {
  49. state = LightState.On;
  50. }else if (args[2].Equals("OFF"))
  51. {
  52. state = LightState.Off;
  53. }else if (args[2].StartsWith("BLINK"))
  54. {
  55. state = LightState.Blink;
  56. string cycle = args[2].Substring(5);
  57. if (string.IsNullOrEmpty(cycle) || !int.TryParse(cycle, out interval))
  58. {
  59. result = PARAM_NG;
  60. return false;
  61. }
  62. if (interval < 1 || interval > 200)
  63. {
  64. result = PARAM_NG;
  65. return false;
  66. }
  67. //interval is x * 100 ms
  68. interval = interval * 100;
  69. }
  70. else
  71. {
  72. result = PARAM_NG;
  73. return false;
  74. }
  75. switch (args[1] )
  76. {
  77. case "RED":
  78. tower.SetLight(LightType.Red, state, interval);
  79. break;
  80. case "YELLOW":
  81. tower.SetLight(LightType.Yellow, state, interval);
  82. break;
  83. case "GREEN":
  84. tower.SetLight(LightType.Green, state, interval);
  85. break;
  86. case "BLUE":
  87. tower.SetLight(LightType.Blue, state, interval);
  88. break;
  89. case "WHITE":
  90. //tower.SetLight(LightType.Blue, state, interval);
  91. break;
  92. case "BUZZER1":
  93. if (state != LightState.Off && state != LightState.On)
  94. {
  95. result = PARAM_NG;
  96. return false;
  97. }
  98. tower.SetLight(LightType.Buzzer, state);
  99. break;
  100. case "BUZZER2":
  101. if (state != LightState.Off && state != LightState.On)
  102. {
  103. result = PARAM_NG;
  104. return false;
  105. }
  106. if (state == LightState.On)
  107. state = LightState.Blink;
  108. tower.SetLight(LightType.Buzzer, state, interval);
  109. break;
  110. default:
  111. result = PARAM_NG;
  112. return false;
  113. }
  114. }
  115. if (CheckIsPort(device))
  116. {
  117. LoadPort lp = DEVICE.GetDevice<LoadPort>(device);
  118. IndicatorState state = IndicatorState.OFF;
  119. int interval = 500;
  120. if (args[2].Equals("ON"))
  121. {
  122. state = IndicatorState.ON;
  123. }
  124. else if (args[2].Equals("OFF"))
  125. {
  126. state = IndicatorState.OFF;
  127. }
  128. else if (args[2].StartsWith("BLINK"))
  129. {
  130. state = IndicatorState.BLINK;
  131. }
  132. else
  133. {
  134. result = PARAM_NG;
  135. return false;
  136. }
  137. //modify by tool,sequence
  138. // Load, Unload, Manual, Presence, Placement, Auto, Reserve, Alarm
  139. switch (args[1])
  140. {
  141. case "LOAD":
  142. lp.SetIndicator(IndicatorType.Load, state);
  143. break;
  144. case "UNLOAD":
  145. lp.SetIndicator(IndicatorType.Unload, state);
  146. break;
  147. case "MANUAL":
  148. lp.SetIndicator(IndicatorType.Manual, state);
  149. break;
  150. case "ACCESS":
  151. EV.PostWarningLog("Server", $"Not supported indicator {args[1]}");
  152. break;
  153. case "CLAMP":
  154. EV.PostWarningLog("Server", $"Not supported indicator {args[1]}");
  155. break;
  156. case "DOCK":
  157. EV.PostWarningLog("Server", $"Not supported indicator {args[1]}");
  158. break;
  159. case "AUTO":
  160. lp.SetIndicator(IndicatorType.Auto, state);
  161. break;
  162. case "RESERVED":
  163. lp.SetIndicator(IndicatorType.Reserve, state);
  164. break;
  165. case "BUSY":
  166. lp.SetIndicator(IndicatorType.Busy, state);
  167. break;
  168. case "COMPLETE":
  169. lp.SetIndicator(IndicatorType.Complete, state);
  170. break;
  171. default:
  172. EV.PostWarningLog("Server", $"Not supported indicator {args[1]}");
  173. result = PARAM_NG;
  174. return false;
  175. }
  176. }
  177. return true;
  178. }
  179. public bool? Monitor(out string result, params string[] args)
  180. {
  181. result = string.Empty;
  182. string device = Args2Unit(args.Length > 0 ? args[0] : string.Empty);
  183. if (CheckIsTower(device))
  184. {
  185. return true;
  186. }
  187. LoadPort _lp = DEVICE.GetDevice<LoadPort>(device);
  188. if (_lp.Error)
  189. {
  190. flag1 = ErrorCheckList1.VAC | ErrorCheckList1.AIR | ErrorCheckList1.STALL
  191. | ErrorCheckList1.LIMIT | ErrorCheckList1.SENSOR | ErrorCheckList1.POSITION | ErrorCheckList1.EMS
  192. | ErrorCheckList1.COMM | ErrorCheckList1.COMM2 | ErrorCheckList1.VACON | ErrorCheckList1.VACOFF
  193. | ErrorCheckList1.CLAMPON | ErrorCheckList1.CLAMPOF;
  194. flag2 = ErrorCheckList2.RRTWAF | ErrorCheckList2.CRSWAF | ErrorCheckList2.THICKWAF | ErrorCheckList2.THINWAF
  195. | ErrorCheckList2.DBLWAF | ErrorCheckList2.BAOWAF | ErrorCheckList2.COMMAND | ErrorCheckList2.PODNG
  196. | ErrorCheckList2.PODMISMATCH | ErrorCheckList2.VAC_S | ErrorCheckList2.CLAMP_S | ErrorCheckList2.SAFTY
  197. | ErrorCheckList2.LOCKNG | ErrorCheckList2.UNLOCKNG | ErrorCheckList2.L_KEY_LK | ErrorCheckList2.L_KEY_UL;
  198. flag3 = ErrorCheckList3.MAP_S | ErrorCheckList3.MAP_S1 | ErrorCheckList3.MAP_S2 | ErrorCheckList3.WAFLOST
  199. | ErrorCheckList3.ALIGNNG
  200. | ErrorCheckList3.DRIVER | ErrorCheckList3.DRPOWERDOWN | ErrorCheckList3.HARDWARE
  201. | ErrorCheckList3.INTERNAL | ErrorCheckList3.E84_TIMEOUTx | ErrorCheckList3.E84_CS_VALID | ErrorCheckList3.READFAIL;
  202. return CheckError(device, out result);
  203. }
  204. if (!_lp.IsBusy)
  205. {
  206. return true;
  207. }
  208. return null;
  209. }
  210. }
  211. }