| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | 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        /// <summary>        /// 构造函数        /// </summary>        /// <param name="module"></param>        public ReservoirMetalHomeRoutine(string module) : base(module)        {        }        /// <summary>        /// 中止        /// </summary>        public void Abort()        {            Runner.Stop("Manual abort");        }        /// <summary>        /// 监控        /// </summary>        /// <returns></returns>        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;        }        /// <summary>        /// Reservoir Home        /// </summary>        /// <returns></returns>        private bool ReservoirHome()        {            int reservoirInvoke = _reservoirEntity.Invoke("HomeAll");            return reservoirInvoke==(int)ReservoirMsg.Initialize;        }        /// <summary>        /// Metal Home        /// </summary>        /// <returns></returns>        private bool MetalsHome()        {            ReservoirItem reservoirItem = ReservoirItemManager.Instance.GetReservoirItem(Module.ToString());            if (reservoirItem != null)            {                List<MetalItem> metalItems = reservoirItem.MetalCells;                if (metalItems != null && metalItems.Count > 0)                {                    foreach (MetalItem metalItem in metalItems)                    {                        if (metalItem.Installed)                        {                            MetalEntity moduleEntity = Singleton<RouteManager>.Instance.GetModule<MetalEntity>(metalItem.ModuleName);                            if (moduleEntity.IsAuto)                            {                                moduleEntity.Invoke("HomeAll");                            }                        }                    }                }            }            return true;        }        /// <summary>        /// 启动        /// </summary>        /// <param name="objs"></param>        /// <returns></returns>        public RState Start(params object[] objs)        {            _reservoirEntity = Singleton<RouteManager>.Instance.GetModule<ReservoirEntity>(Module);            return Runner.Start(Module.ToString(), "Reservoir Metal Home");        }            }}
 |