LoadPortMapRoutine.cs 1.6 KB

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