using Aitex.Core.RT.Routine; using CyberX8_Core; using CyberX8_RT.Modules.Transporter; using MECF.Framework.Common.Routine; using MECF.Framework.Common.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Modules.SRD { public class SRDInitializeHomeRoutine : RoutineBase, IRoutine { private enum InitializeStep { Initialize, InitializeWait, SwitchOn, SwitchOnWait, Home, HomeWait, End } #region 内部变量 private SRDInitializeRoutine _initializeRoutine; private SRDSwitchOnRoutine _switchOnRoutine; private SRDHomeRoutine _homeRoutine; #endregion /// /// 构造函数 /// /// public SRDInitializeHomeRoutine(string module) : base(module) { _initializeRoutine = new SRDInitializeRoutine(module); _switchOnRoutine = new SRDSwitchOnRoutine(module); _homeRoutine = new SRDHomeRoutine(module); } /// /// 中止 /// public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(InitializeStep.Initialize, () => _initializeRoutine.Start() == RState.Running, _delay_1ms) .WaitWithStopCondition(InitializeStep.InitializeWait, () => CommonFunction.CheckRoutineEndState(_initializeRoutine), () => CommonFunction.CheckRoutineStopState(_initializeRoutine)) .Run(InitializeStep.SwitchOn, () => _switchOnRoutine.Start() == RState.Running, _delay_1ms) .WaitWithStopCondition(InitializeStep.SwitchOnWait, () => CommonFunction.CheckRoutineEndState(_switchOnRoutine), () => CommonFunction.CheckRoutineStopState(_switchOnRoutine)) .Run(InitializeStep.Home, () => _homeRoutine.Start() == RState.Running, _delay_1ms) .WaitWithStopCondition(InitializeStep.HomeWait, () => CommonFunction.CheckRoutineEndState(_homeRoutine), () => CommonFunction.CheckRoutineStopState(_homeRoutine)) .End(InitializeStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { return Runner.Start(Module, "Start Initialize Home"); } } }