using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Routine; using CyberX8_Core; using CyberX8_RT.Devices.AXIS; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Modules.Transporter { public class SRDSwitchOffRoutine : RoutineBase, IRoutine { private enum SwitchOffStep { Arm, Rotation, End } #region 内部变量 private JetAxisBase _armAxis; private JetAxisBase _rotationAxis; private int _timeOut = 1000; #endregion #region 属性 /// /// 当前子状态机 /// public string CurrentStateMachine { get { return Runner.CurrentStep.ToString(); } } #endregion public SRDSwitchOffRoutine(string module) : base(module) { } public void Abort() { Runner.Stop("Manual Abort"); } public RState Monitor() { Runner.Run(SwitchOffStep.Arm, ArmAxisSwitchOff, CheckArmSwitchOff, _timeOut) .Run(SwitchOffStep.Rotation, RotationAxisSwitchOff, CheckRotationSwitchOff, _timeOut) .End(SwitchOffStep.End,NullFun); return Runner.Status; } private bool ArmAxisSwitchOff() { return _armAxis.SwitchOff(); } private bool CheckArmSwitchOff() { return !_armAxis.IsSwitchOn&&_armAxis.Status==RState.End; } private bool RotationAxisSwitchOff() { return _rotationAxis.SwitchOff(); } private bool CheckRotationSwitchOff() { return !_rotationAxis.IsSwitchOn&&_rotationAxis.Status==RState.End; } public RState Start(params object[] objs) { _armAxis = DEVICE.GetDevice($"{Module}.Arm"); _rotationAxis = DEVICE.GetDevice($"{Module}.Rotation"); Runner.Start(Module, "SwitchOff"); return RState.Running; } } }