LoadPortUnloadRoutine.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 Venus_Core;
  9. namespace Venus_RT.Modules.LPs
  10. {
  11. class LoadPortUnloadRoutine : ModuleRoutineBase, IRoutine
  12. {
  13. enum RoutineStep
  14. {
  15. Unload,
  16. End,
  17. }
  18. private int _timeout = 0;
  19. private LoadPortModule _lpModule;
  20. public LoadPortUnloadRoutine(LoadPortModule lpModule) : base(ModuleHelper.Converter(lpModule.Module))
  21. {
  22. _lpModule = lpModule;
  23. Name = "Unload";
  24. }
  25. public RState Start(params object[] objs)
  26. {
  27. Reset();
  28. _timeout = SC.GetValue<int>("EFEM.LoadPort.MotionTimeout");
  29. //if (!_lp.IsPresent || !_lp.IsPlacement)
  30. //{
  31. // EV.PostWarningLog(Module, $"{Module} not found carrier, can not load");
  32. // return Result.FAIL;
  33. //}
  34. Notify($"Start");
  35. return Runner.Start(Module, Name);
  36. }
  37. public RState Monitor()
  38. {
  39. Runner.Run((int)RoutineStep.Unload, Unload, CheckDevice, _timeout * 1000)
  40. .End((int)RoutineStep.End, NullFun, _delay_1s);
  41. return Runner.Status;
  42. }
  43. public bool Unload()
  44. {
  45. Notify($"Start Unload {_lpModule.Name}");
  46. _lpModule.LPDevice.Unload();
  47. return true;
  48. }
  49. bool CheckDevice()
  50. {
  51. if (_lpModule.LPDevice.IsError)
  52. return false;
  53. if (_lpModule.LPDevice.IsBusy)
  54. return false;
  55. return true;
  56. }
  57. public void Abort()
  58. {
  59. }
  60. }
  61. }