ReservoirMetalHomeRoutine.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using Aitex.Core.RT.Fsm;
  2. using Aitex.Core.RT.Routine;
  3. using Aitex.Core.Util;
  4. using CyberX8_Core;
  5. using CyberX8_RT.Modules.Metal;
  6. using CyberX8_RT.Modules.Reservoir;
  7. using MECF.Framework.Common.Routine;
  8. using MECF.Framework.Common.ToolLayout;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace CyberX8_RT.Modules
  15. {
  16. public class ReservoirMetalHomeRoutine : RoutineBase, IRoutine
  17. {
  18. private enum ReservoirStep
  19. {
  20. ReservoirHome,
  21. ReservoirHomeWait,
  22. MetalHome,
  23. End,
  24. }
  25. #region 内部变量
  26. private ReservoirEntity _reservoirEntity;
  27. #endregion
  28. /// <summary>
  29. /// 构造函数
  30. /// </summary>
  31. /// <param name="module"></param>
  32. public ReservoirMetalHomeRoutine(string module) : base(module)
  33. {
  34. }
  35. /// <summary>
  36. /// 中止
  37. /// </summary>
  38. public void Abort()
  39. {
  40. Runner.Stop("Manual abort");
  41. }
  42. /// <summary>
  43. /// 监控
  44. /// </summary>
  45. /// <returns></returns>
  46. public RState Monitor()
  47. {
  48. Runner.RunIf(ReservoirStep.ReservoirHome, _reservoirEntity.IsAuto, ReservoirHome, _delay_1ms)
  49. .WaitWithStopConditionIf(ReservoirStep.ReservoirHomeWait,_reservoirEntity.IsAuto,() => { return _reservoirEntity.IsIdle; }, () => { return _reservoirEntity.IsError; })
  50. .Run(ReservoirStep.MetalHome, MetalsHome, _delay_1ms)
  51. .End(ReservoirStep.End, NullFun, _delay_1ms);
  52. return Runner.Status;
  53. }
  54. /// <summary>
  55. /// Reservoir Home
  56. /// </summary>
  57. /// <returns></returns>
  58. private bool ReservoirHome()
  59. {
  60. int reservoirInvoke = _reservoirEntity.Invoke("HomeAll");
  61. return reservoirInvoke==(int)ReservoirMsg.Initialize;
  62. }
  63. /// <summary>
  64. /// Metal Home
  65. /// </summary>
  66. /// <returns></returns>
  67. private bool MetalsHome()
  68. {
  69. ReservoirItem reservoirItem = ReservoirItemManager.Instance.GetReservoirItem(Module.ToString());
  70. if (reservoirItem != null)
  71. {
  72. List<MetalItem> metalItems = reservoirItem.MetalCells;
  73. if (metalItems != null && metalItems.Count > 0)
  74. {
  75. foreach (MetalItem metalItem in metalItems)
  76. {
  77. if (metalItem.Installed)
  78. {
  79. MetalEntity moduleEntity = Singleton<RouteManager>.Instance.GetModule<MetalEntity>(metalItem.ModuleName);
  80. if (moduleEntity.IsAuto)
  81. {
  82. moduleEntity.Invoke("HomeAll");
  83. }
  84. }
  85. }
  86. }
  87. }
  88. return true;
  89. }
  90. /// <summary>
  91. /// 启动
  92. /// </summary>
  93. /// <param name="objs"></param>
  94. /// <returns></returns>
  95. public RState Start(params object[] objs)
  96. {
  97. _reservoirEntity = Singleton<RouteManager>.Instance.GetModule<ReservoirEntity>(Module);
  98. return Runner.Start(Module.ToString(), "Reservoir Metal Home");
  99. }
  100. }
  101. }