using Aitex.Core.RT.Fsm; using Aitex.Core.RT.Routine; using Aitex.Core.Util; using MECF.Framework.Common.Routine; using MECF.Framework.Common.ToolLayout; using PunkHPX8_Core; using PunkHPX8_RT.Modules.PlatingCell; using PunkHPX8_RT.Modules.Reservoir; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PunkHPX8_RT.Modules { public class ReservoirCellHomeRoutine : RoutineBase, IRoutine { private enum ReservoirStep { ReservoirHome, ReservoirHomeWait, CellHome, End, } #region 内部变量 private ReservoirEntity _reservoirEntity; #endregion /// /// 构造函数 /// /// public ReservoirCellHomeRoutine(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.State != ReservoirState.Initializing && !_reservoirEntity.IsIdle; }) .Run(ReservoirStep.CellHome, 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 platingCellItems = reservoirItem.PlatingCells; if (platingCellItems != null && platingCellItems.Count > 0) { foreach (PlatingCellItem item in platingCellItems) { if (item.Installed) { PlatingCellEntity moduleEntity = Singleton.Instance.GetModule(item.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 PlatingCell Home"); } } }