InitRoutine4LP.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689
  1. using System;
  2. using Aitex.Core.Common;
  3. using Aitex.Core.RT.Device;
  4. using Aitex.Core.RT.Device.Unit;
  5. using Aitex.Core.RT.Event;
  6. using Aitex.Core.RT.Routine;
  7. using Aitex.Core.RT.SCCore;
  8. using Aitex.Core.Util;
  9. using Aitex.Sorter.Common;
  10. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
  11. using MECF.Framework.Common.Equipment;
  12. using MECF.Framework.Common.SubstrateTrackings;
  13. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  14. using SorterCommon;
  15. using Aitex.Sorter.RT.SorterCommonFrame.Devices;
  16. using Aitex.Sorter.RT.SorterCommonFrame.SorterJobControl;
  17. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.AlignersBase;
  18. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
  19. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.LoadPortBase;
  20. using MECF.Framework.FA.Core.FAControl;
  21. using Aitex.Core.RT.Log;
  22. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Flipper.FlipperBase;
  23. namespace Aitex.Sorter.RT.SorterCommonFrame.Routines
  24. {
  25. public class InitRoutine4LP : CommonRoutineSorter, IRoutine
  26. {
  27. private enum Home
  28. {
  29. DeviceReset,
  30. RobotClear,
  31. RobotHome,
  32. WaitingRobotHome,
  33. RobotSet,
  34. AlignClear,
  35. AlignerInit,
  36. WaitingAlignerInit,
  37. AlignerHome,
  38. WaitingAlignerHome,
  39. AlignerMoveUp,
  40. WaitingAlignerUp,
  41. TurnoverHome,
  42. WaitTurnoverHome,
  43. TurnOverTurnTo0,
  44. WaitTurnOverTurnTo0,
  45. TurnOverUngrip,
  46. WaitTurnOverUnGrip,
  47. LoadportAClear,
  48. LoadportAHome,
  49. WaitingLoadportAHome,
  50. LoadportBClear,
  51. LoadportBHome,
  52. WaitingLoadportBHome,
  53. LoadportCClear,
  54. LoadportCHome,
  55. WaitingLoadportCHome,
  56. LoadportDClear,
  57. LoadportDHome,
  58. WaitingLoadportDHome,
  59. LoadportEClear,
  60. LoadportEHome,
  61. WaitingLoadportEHome,
  62. LoadportFClear,
  63. LoadportFHome,
  64. WaitingLoadportFHome,
  65. LoadportGClear,
  66. LoadportGHome,
  67. WaitingLoadportGHome,
  68. LoadportHClear,
  69. LoadportHHome,
  70. WaitingLoadportHHome,
  71. LoadportIClear,
  72. LoadportIHome,
  73. WaitingLoadportIHome,
  74. LoadportJClear,
  75. LoadportJHome,
  76. WaitingLoadportJHome,
  77. LoadportClear=100,
  78. LoadportHome=200,
  79. LoadportHomeComplete=300,
  80. }
  81. private int _lpcount = 0;
  82. public InitRoutine4LP(string module, string name)
  83. {
  84. Module = module;
  85. Name = name;
  86. _lpcount = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts().Length;
  87. }
  88. public bool Initalize()
  89. {
  90. return true;
  91. }
  92. public void Terminate()
  93. {
  94. }
  95. public Result Start(params object[] objs)
  96. {
  97. Name = "Init";
  98. Reset();
  99. EV.PostMessage(ModuleName.System.ToString(), EventEnum.HomeBegins, ModuleName.System.ToString());
  100. Robot = DEVICE.GetDevice<RobotBaseDevice>(DeviceName.Robot);
  101. _lpcount = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts().Length;
  102. if (_ioTurnOver != null)
  103. {
  104. if (_ioTurnOver.IsPlacement)
  105. {
  106. if (WaferManager.Instance.CheckNoWafer(ModuleName.TurnOverStation, 0))
  107. WaferManager.Instance.CreateWafer(ModuleName.TurnOverStation, 0, WaferStatus.Normal);
  108. }
  109. }
  110. IsRoutineActive = true;
  111. return Result.RUN;
  112. }
  113. public Result Monitor()
  114. {
  115. if (!IsRoutineActive)
  116. return Result.DONE;
  117. var ret = MonitorRoutine();
  118. if (ret == Result.FAIL)
  119. {
  120. IsRoutineActive = false;
  121. }
  122. if (ret == Result.DONE)
  123. {
  124. IsRoutineActive = false;
  125. }
  126. return ret;
  127. }
  128. private Result MonitorRoutine()
  129. {
  130. try
  131. {
  132. RtDeviceReset((int)Home.DeviceReset, "Device Reset", 1, Notify, Stop);
  133. if (ExecuteResult.Item1)
  134. {
  135. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  136. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  137. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  138. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  139. }
  140. RtRobotReset((int)Home.RobotClear, Robot, Robot.RobotCommandTimeout, Notify, Stop);
  141. if (ExecuteResult.Item1)
  142. {
  143. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  144. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  145. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  146. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  147. }
  148. RtRobotHome((int)Home.RobotHome, Robot, Robot.RobotCommandTimeout, Notify, Stop);
  149. if (ExecuteResult.Item1)
  150. {
  151. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  152. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  153. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  154. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  155. }
  156. if (Aligner != null)
  157. {
  158. RtAlignerInit((int)Home.AlignerInit, Aligner, "Aligner initialize", Aligner.TimeLimitAlignerHome, Notify, Stop);
  159. if (ExecuteResult.Item1)
  160. {
  161. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  162. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  163. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  164. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  165. }
  166. }
  167. if (_ioTurnOver != null)
  168. {
  169. RtTurnoverHome((int)Home.TurnoverHome, _ioTurnOver.TimelimitAction, Notify, Stop);
  170. if (ExecuteResult.Item1)
  171. {
  172. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  173. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  174. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  175. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  176. }
  177. RtTurnOverTurnBack((int)Home.TurnOverTurnTo0, Notify, Stop);
  178. if (ExecuteResult.Item1)
  179. {
  180. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  181. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  182. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  183. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  184. }
  185. RtWaitTurnOverTurnTo0((int)Home.WaitTurnOverTurnTo0, _ioTurnOver, _ioTurnOver.TimelimitAction, Notify, Stop);
  186. if (ExecuteResult.Item1)
  187. {
  188. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  189. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  190. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  191. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  192. }
  193. if (!_ioTurnOver.IsPlacement)
  194. {
  195. RtTurnOverUnGripWafer((int)Home.WaitTurnOverUnGrip, Notify, Stop);
  196. if (ExecuteResult.Item1)
  197. {
  198. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  199. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  200. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  201. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  202. }
  203. RtWaitTurnOverUnGrip((int)Home.WaitTurnOverUnGrip, _ioTurnOver, _ioTurnOver.TimelimitAction, Notify, Stop);
  204. if (ExecuteResult.Item1)
  205. {
  206. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  207. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  208. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  209. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  210. }
  211. }
  212. }
  213. for (int i = 0; i < _lpcount; i++)
  214. {
  215. var lp = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts()[i];
  216. if (Singleton<FAJobController>.Instance.FAloadports[lp.LPModuleName.ToString()].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  217. {
  218. RtLoadportReset((int)Home.LoadportClear + i, lp, lp.TimelimitHome, Notify, Stop);
  219. if (ExecuteResult.Item1)
  220. {
  221. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  222. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  223. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  224. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  225. }
  226. }
  227. }
  228. for (int i = 0; i < _lpcount; i++)
  229. {
  230. var lp = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts()[i];
  231. if (Singleton<FAJobController>.Instance.FAloadports[lp.LPModuleName.ToString()].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  232. {
  233. RtLoadportExecuteInit((int)Home.LoadportHome + i, lp, lp.TimelimitHome, Notify, Stop);
  234. if (ExecuteResult.Item1)
  235. {
  236. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  237. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  238. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  239. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  240. }
  241. }
  242. }
  243. for (int i = 0; i < _lpcount; i++)
  244. {
  245. var lp = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts()[i];
  246. if (Singleton<FAJobController>.Instance.FAloadports[lp.LPModuleName.ToString()].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  247. {
  248. RtLoadportWaitReady((int)Home.LoadportHomeComplete + i, lp, lp.TimelimitHome, Notify, Stop);
  249. if (ExecuteResult.Item1)
  250. {
  251. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  252. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  253. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  254. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  255. }
  256. }
  257. }
  258. //if (_lpcount > 0 &&
  259. // Singleton<FAJobController>.Instance.FAloadports["LP1"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  260. //{
  261. // RtLoadportReset((int)Home.LoadportAClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP1"), DEVICE.GetDevice<LoadPortBaseDevice>("LP1").TimelimitHome, Notify, Stop);
  262. // if (ExecuteResult.Item1)
  263. // {
  264. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  265. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  266. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  267. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  268. // }
  269. // RtLoadportInit((int)Home.LoadportAHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP1"), DEVICE.GetDevice<LoadPortBaseDevice>("LP1").TimelimitHome, Notify, Stop);
  270. // if (ExecuteResult.Item1)
  271. // {
  272. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  273. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  274. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  275. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  276. // }
  277. //}
  278. //if (_lpcount > 1 &&
  279. // Singleton<FAJobController>.Instance.FAloadports["LP2"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  280. //{
  281. // RtLoadportReset((int)Home.LoadportBClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP2"), DEVICE.GetDevice<LoadPortBaseDevice>("LP2").TimelimitHome, Notify, Stop);
  282. // if (ExecuteResult.Item1)
  283. // {
  284. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  285. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  286. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  287. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  288. // }
  289. // RtLoadportInit((int)Home.LoadportBHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP2"), DEVICE.GetDevice<LoadPortBaseDevice>("LP2").TimelimitHome, Notify, Stop);
  290. // if (ExecuteResult.Item1)
  291. // {
  292. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  293. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  294. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  295. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  296. // }
  297. //}
  298. //if (_lpcount > 2 &&
  299. // Singleton<FAJobController>.Instance.FAloadports["LP3"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  300. //{
  301. // RtLoadportReset((int)Home.LoadportCClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP3"), DEVICE.GetDevice<LoadPortBaseDevice>("LP3").TimelimitHome, Notify, Stop);
  302. // if (ExecuteResult.Item1)
  303. // {
  304. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  305. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  306. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  307. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  308. // }
  309. // RtLoadportInit((int)Home.LoadportCHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP3"), DEVICE.GetDevice<LoadPortBaseDevice>("LP3").TimelimitHome, Notify, Stop);
  310. // if (ExecuteResult.Item1)
  311. // {
  312. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  313. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  314. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  315. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  316. // }
  317. //}
  318. //if (_lpcount > 3 &&
  319. // Singleton<FAJobController>.Instance.FAloadports["LP4"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  320. //{
  321. // RtLoadportReset((int)Home.LoadportDClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP4"), DEVICE.GetDevice<LoadPortBaseDevice>("LP4").TimelimitHome, Notify, Stop);
  322. // if (ExecuteResult.Item1)
  323. // {
  324. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  325. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  326. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  327. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  328. // }
  329. // RtLoadportInit((int)Home.LoadportDHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP4"), DEVICE.GetDevice<LoadPortBaseDevice>("LP4").TimelimitHome, Notify, Stop);
  330. // if (ExecuteResult.Item1)
  331. // {
  332. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  333. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  334. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  335. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  336. // }
  337. //}
  338. //if (_lpcount > 4 &&
  339. // Singleton<FAJobController>.Instance.FAloadports["LP5"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  340. //{
  341. // RtLoadportReset((int)Home.LoadportEClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP5"), DEVICE.GetDevice<LoadPortBaseDevice>("LP5").TimelimitHome, Notify, Stop);
  342. // if (ExecuteResult.Item1)
  343. // {
  344. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  345. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  346. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  347. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  348. // }
  349. // RtLoadportInit((int)Home.LoadportEHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP5"), DEVICE.GetDevice<LoadPortBaseDevice>("LP5").TimelimitHome, Notify, Stop);
  350. // if (ExecuteResult.Item1)
  351. // {
  352. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  353. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  354. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  355. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  356. // }
  357. //}
  358. //if (_lpcount > 5 &&
  359. // Singleton<FAJobController>.Instance.FAloadports["LP6"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  360. //{
  361. // RtLoadportReset((int)Home.LoadportFClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP6"), DEVICE.GetDevice<LoadPortBaseDevice>("LP5").TimelimitHome, Notify, Stop);
  362. // if (ExecuteResult.Item1)
  363. // {
  364. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  365. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  366. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  367. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  368. // }
  369. // RtLoadportInit((int)Home.LoadportFHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP6"), DEVICE.GetDevice<LoadPortBaseDevice>("LP6").TimelimitHome, Notify, Stop);
  370. // if (ExecuteResult.Item1)
  371. // {
  372. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  373. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  374. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  375. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  376. // }
  377. //}
  378. //if (_lpcount > 6 &&
  379. // Singleton<FAJobController>.Instance.FAloadports["LP7"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  380. //{
  381. // RtLoadportReset((int)Home.LoadportGClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP7"), DEVICE.GetDevice<LoadPortBaseDevice>("LP7").TimelimitHome, Notify, Stop);
  382. // if (ExecuteResult.Item1)
  383. // {
  384. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  385. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  386. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  387. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  388. // }
  389. // RtLoadportInit((int)Home.LoadportGHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP7"), DEVICE.GetDevice<LoadPortBaseDevice>("LP7").TimelimitHome, Notify, Stop);
  390. // if (ExecuteResult.Item1)
  391. // {
  392. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  393. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  394. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  395. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  396. // }
  397. //}
  398. //if (_lpcount > 7 &&
  399. // Singleton<FAJobController>.Instance.FAloadports["LP8"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  400. //{
  401. // RtLoadportReset((int)Home.LoadportHClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP8"), DEVICE.GetDevice<LoadPortBaseDevice>("LP8").TimelimitHome, Notify, Stop);
  402. // if (ExecuteResult.Item1)
  403. // {
  404. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  405. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  406. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  407. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  408. // }
  409. // RtLoadportInit((int)Home.LoadportHHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP8"), DEVICE.GetDevice<LoadPortBaseDevice>("LP8").TimelimitHome, Notify, Stop);
  410. // if (ExecuteResult.Item1)
  411. // {
  412. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  413. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  414. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  415. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  416. // }
  417. //}
  418. //if (_lpcount > 8 &&
  419. // Singleton<FAJobController>.Instance.FAloadports["LP9"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  420. //{
  421. // RtLoadportReset((int)Home.LoadportIClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP9"), DEVICE.GetDevice<LoadPortBaseDevice>("LP9").TimelimitHome, Notify, Stop);
  422. // if (ExecuteResult.Item1)
  423. // {
  424. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  425. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  426. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  427. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  428. // }
  429. // RtLoadportInit((int)Home.LoadportIHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP9"), DEVICE.GetDevice<LoadPortBaseDevice>("LP9").TimelimitHome, Notify, Stop);
  430. // if (ExecuteResult.Item1)
  431. // {
  432. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  433. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  434. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  435. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  436. // }
  437. // //WaitLoadportMotion((int)Home.WaitingLoadportIHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP9"), "LP9 Homing...", DEVICE.GetDevice<LoadPortBaseDevice>("LP9").TimelimitHome, Notify, Stop);
  438. //}
  439. //if (_lpcount > 9 &&
  440. // Singleton<FAJobController>.Instance.FAloadports["LP10"].GetTransferState() != LPTransferState.OUT_OF_SERVICE)
  441. //{
  442. // RtLoadportReset((int)Home.LoadportHClear, DEVICE.GetDevice<LoadPortBaseDevice>("LP10"), DEVICE.GetDevice<LoadPortBaseDevice>("LP10").TimelimitHome, Notify, Stop);
  443. // if (ExecuteResult.Item1)
  444. // {
  445. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  446. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  447. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  448. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  449. // }
  450. // RtLoadportInit((int)Home.LoadportHHome, DEVICE.GetDevice<LoadPortBaseDevice>("LP10"), DEVICE.GetDevice<LoadPortBaseDevice>("LP10").TimelimitHome, Notify, Stop);
  451. // if (ExecuteResult.Item1)
  452. // {
  453. // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  454. // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  455. // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  456. // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  457. // }
  458. //}
  459. if (ExecuteResult.Item1)
  460. {
  461. if (ExecuteResult.Item2 == Result.RUN) return Result.RUN;
  462. if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL;
  463. if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL;
  464. if (ExecuteResult.Item2 == Result.DONE) return Result.RUN;
  465. }
  466. EV.PostInfoLog("System", $"Complete home all routine.");
  467. IsRoutineActive = false;
  468. return Result.DONE;
  469. }
  470. catch (Exception ex)
  471. {
  472. LOG.Write(ex);
  473. EV.PostAlarmLog("System", "Initialize routine execute failed.");
  474. return Result.FAIL;
  475. }
  476. }
  477. public void RtTurnoverHome(int id, int time,Action<string> notify, Action<string> error)
  478. {
  479. string reason = string.Empty;
  480. Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
  481. {
  482. notify("Turnover start homing");
  483. return _ioTurnOver.ExecuteHome(out reason);
  484. }, () =>
  485. {
  486. if (_ioTurnOver.IsReady)
  487. return Result.DONE;
  488. return Result.RUN;
  489. },time * 1000);
  490. if (ret.Item1)
  491. {
  492. if (ret.Item2 == Result.FAIL)
  493. {
  494. error($"Turnover home failed, due to turnover occurred error.");
  495. }
  496. else if (ret.Item2 == Result.TIMEOUT) //timeout
  497. {
  498. error($"Turnover home timeout, than {time} seconds.");
  499. }
  500. }
  501. }
  502. protected void RtDeviceReset(int id, string name, int time, Action<string> notify, Action<string> error)
  503. {
  504. var ret = Delay(id, () =>
  505. {
  506. notify(string.Format("Device reset"));
  507. if (Singleton<SorterJobManager>.Instance.SorterDeviceManagerCallBack != null)
  508. Singleton<SorterJobManager>.Instance.SorterDeviceManagerCallBack.ResetDevices();
  509. return true;
  510. }, time * 1000);
  511. if (ret.Item1)
  512. if (ret.Item2 == Result.FAIL)
  513. error("Device reset failed.");
  514. }
  515. #region aligner
  516. public void RtAlignerReset(int id, AlignerBaseDevice device, string name, int time, Action<string> notify,
  517. Action<string> error)
  518. {
  519. var ret = ExecuteAndWait(id, () =>
  520. {
  521. notify(string.Format("{0} clear error", device.Name));
  522. var reason = string.Empty;
  523. return device.AlignerReset(out _);
  524. }, () =>
  525. {
  526. if (device.IsReady()) return Result.DONE;
  527. if (device.AlignerState == AlignerStateEnum.Error && !device.IsBusy)
  528. return Result.FAIL;
  529. return Result.RUN;
  530. }, time * 1000);
  531. if (ret.Item1)
  532. {
  533. if (ret.Item2 == Result.FAIL)
  534. {
  535. error(string.Format("{0} failed.", name));
  536. }
  537. else if (ret.Item2 == Result.TIMEOUT) //timeout
  538. {
  539. error(string.Format("{0} timeout, than {1} seconds.", name, time));
  540. }
  541. else
  542. {
  543. }
  544. }
  545. }
  546. public void RtAlignerInit(int id, AlignerBaseDevice device, string name, int time,Action<string> notify, Action<string> error)
  547. {
  548. var ret = ExecuteAndWait(id, () =>
  549. {
  550. notify(string.Format("{0} Init", device.Name));
  551. var reason = string.Empty;
  552. return device.Home(out reason);
  553. }, () =>
  554. {
  555. if (device.IsReady()) return Result.DONE;
  556. if (device.AlignerState == AlignerStateEnum.Error && !device.IsBusy)
  557. return Result.FAIL;
  558. return Result.RUN; ;
  559. });
  560. if (ret.Item1)
  561. {
  562. if (ret.Item2 == Result.FAIL)
  563. {
  564. error(string.Format("{0} failed.", name));
  565. }
  566. else if (ret.Item2 == Result.TIMEOUT) //timeout
  567. {
  568. error(string.Format("{0} timeout, than {1} seconds.", name, time));
  569. }
  570. else
  571. {
  572. }
  573. }
  574. }
  575. #endregion
  576. #region Loadport
  577. ///等待 Loadport
  578. #endregion
  579. }
  580. }