using Aitex.Core.RT.Fsm; using Aitex.Core.RT.Routine; using Aitex.Core.Util; using CyberX8_Core; using CyberX8_RT.Modules.Metal; using CyberX8_RT.Modules.Reservoir; using MECF.Framework.Common.Routine; using MECF.Framework.Common.ToolLayout; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Modules { public class ReservoirMetalHomeRoutine : RoutineBase, IRoutine { private enum ReservoirStep { ReservoirHome, ReservoirHomeWait, MetalHome, End, } #region 内部变量 private ReservoirEntity _reservoirEntity; #endregion /// /// 构造函数 /// /// public ReservoirMetalHomeRoutine(string module) : base(module) { } /// /// 中止 /// public void Abort() { Runner.Stop("Manual abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.RunIf(ReservoirStep.ReservoirHome, _reservoirEntity.IsAuto, ReservoirHome, _delay_1ms) .WaitWithStopConditionIf(ReservoirStep.ReservoirHomeWait,_reservoirEntity.IsAuto,() => { return _reservoirEntity.IsIdle; }, () => { return _reservoirEntity.IsError; }) .Run(ReservoirStep.MetalHome, MetalsHome, _delay_1ms) .End(ReservoirStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// Reservoir Home /// /// private bool ReservoirHome() { int reservoirInvoke = _reservoirEntity.Invoke("HomeAll"); return reservoirInvoke==(int)ReservoirMsg.Initialize; } /// /// Metal Home /// /// private bool MetalsHome() { ReservoirItem reservoirItem = ReservoirItemManager.Instance.GetReservoirItem(Module.ToString()); if (reservoirItem != null) { List metalItems = reservoirItem.MetalCells; if (metalItems != null && metalItems.Count > 0) { foreach (MetalItem metalItem in metalItems) { if (metalItem.Installed) { MetalEntity moduleEntity = Singleton.Instance.GetModule(metalItem.ModuleName); if (moduleEntity.IsAuto) { moduleEntity.Invoke("HomeAll"); } } } } } return true; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _reservoirEntity = Singleton.Instance.GetModule(Module); return Runner.Start(Module.ToString(), "Reservoir Metal Home"); } } }