using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using CyberX8_Core; using CyberX8_RT.Devices.AXIS; namespace CyberX8_RT.Modules.Loader { public class LoaderSwitchAllOffRoutine : MECF.Framework.Common.Routine.RoutineBase, IRoutine { private enum SwitchOffAllStep { ShuttleASwitchOff, ShuttleBSwitchOff, TiltASwitchOff, TiltBSwitchOff, LSASwitchOff, LSBSwitchOff, RotationSwitchOff, End } #region 内部变量 private JetAxisBase _shuttleAAxis; private JetAxisBase _shuttleBAxis; private JetAxisBase _tiltAAxis; private JetAxisBase _tiltBAxis; private JetAxisBase _rotationAxis; private JetAxisBase _lsAAxis; private JetAxisBase _lsBAxis; private int _timeOut = 6000; #endregion public LoaderSwitchAllOffRoutine(string module) : base(module) { _shuttleAAxis = DEVICE.GetDevice($"{module}.ShuttleA"); _shuttleBAxis = DEVICE.GetDevice($"{module}.ShuttleB"); _tiltAAxis = DEVICE.GetDevice($"{module}.TiltA"); _tiltBAxis = DEVICE.GetDevice($"{module}.TiltB"); _lsAAxis = DEVICE.GetDevice($"{module}.LSA"); _lsBAxis = DEVICE.GetDevice($"{module}.LSB"); _rotationAxis = DEVICE.GetDevice($"{module}.Rotation"); } public void Abort() { Runner.Stop("Manual Abort"); } public RState Monitor() { Runner.Run(SwitchOffAllStep.ShuttleASwitchOff, () => { _shuttleAAxis.SwitchOff(); return true; }, () => { return !_shuttleAAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOffAllStep.ShuttleBSwitchOff, () => { _shuttleBAxis.SwitchOff(); return true; }, () => { return !_shuttleBAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOffAllStep.TiltASwitchOff, () => { _tiltAAxis.SwitchOff();return true; }, () => { return !_tiltAAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOffAllStep.TiltBSwitchOff, () => { _tiltBAxis.SwitchOff(); return true; }, () => { return !_tiltBAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOffAllStep.LSASwitchOff, () => { _lsAAxis.SwitchOff(); return true; }, () => { return !_lsAAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOffAllStep.LSBSwitchOff, () => { _lsBAxis.SwitchOff(); return true; }, () => { return !_lsBAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOffAllStep.RotationSwitchOff, () => { _rotationAxis.SwitchOff(); return true; }, () => { return !_rotationAxis.IsSwitchOn; }, _timeOut) .End(SwitchOffAllStep.End,NullFun); return Runner.Status; } public RState Start(params object[] objs) { Runner.Start(Module, "Switch On All"); return RState.Running; } } }