LoadPortUnloadRoutine.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using Aitex.Core.RT.Device;
  3. using Aitex.Core.RT.Event;
  4. using Aitex.Core.RT.Log;
  5. using Aitex.Core.RT.Routine;
  6. using Aitex.Core.RT.SCCore;
  7. using MECF.Framework.Common.Equipment;
  8. using CyberX8_Core;
  9. namespace CyberX8_RT.Modules.LPs
  10. {
  11. class LoadPortUnloadRoutine : ModuleRoutineBase, IRoutine
  12. {
  13. enum RoutineStep
  14. {
  15. WaitEFEMIdle,
  16. Unload,
  17. End,
  18. }
  19. private int _timeout = 0;
  20. private LoadPortModule _lpModule;
  21. public LoadPortUnloadRoutine(LoadPortModule lpModule) : base(ModuleHelper.Converter(lpModule.Module))
  22. {
  23. _lpModule = lpModule;
  24. Name = "Unload";
  25. }
  26. public RState Start(params object[] objs)
  27. {
  28. Reset();
  29. _timeout = SC.GetValue<int>("EFEM.LoadPort.MotionTimeout");
  30. if (!_lpModule.LPDevice.HasCassette)
  31. {
  32. LOG.Write(eEvent.WARN_EFEM_COMMON_WARN, Module, $"{Module} not found carrier, can not unload");
  33. return RState.Failed;
  34. }
  35. Notify($"Start");
  36. return Runner.Start(Module, Name);
  37. }
  38. public RState Monitor()
  39. {
  40. Runner.Wait(RoutineStep.WaitEFEMIdle, () => _lpModule.IsRobotIdle)
  41. .Run(RoutineStep.Unload, Unload, CheckDevice, _timeout * 1000)
  42. .End(RoutineStep.End, NullFun, _delay_1s);
  43. return Runner.Status;
  44. }
  45. public bool Unload()
  46. {
  47. Notify($"Start Unload {_lpModule.Name}");
  48. _lpModule.LPDevice.Unload();
  49. return true;
  50. }
  51. bool CheckDevice()
  52. {
  53. if (_lpModule.LPDevice.IsError)
  54. return false;
  55. if (_lpModule.LPDevice.IsBusy)
  56. return false;
  57. return true;
  58. }
  59. public void Abort()
  60. {
  61. }
  62. }
  63. }