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.Loader { public class LoaderSwitchAllOnRoutine : RoutineBase, IRoutine { private enum SwitchOnAllStep { ShuttleASwitchOn, ShuttleBSwitchOn, TiltASwitchOn, TiltBSwitchOn, LSASwitchOn, LSBSwitchOn, RotationSwitchOn, 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 LoaderSwitchAllOnRoutine(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(SwitchOnAllStep.ShuttleASwitchOn, () => { _shuttleAAxis.SwitchOn(); return true; }, () => { return _shuttleAAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOnAllStep.ShuttleBSwitchOn, () => { _shuttleBAxis.SwitchOn(); return true; }, () => { return _shuttleBAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOnAllStep.TiltASwitchOn, () => { _tiltAAxis.SwitchOn();return true; }, () => { return _tiltAAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOnAllStep.TiltBSwitchOn, () => { _tiltBAxis.SwitchOn(); return true; }, () => { return _tiltBAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOnAllStep.LSASwitchOn, () => { _lsAAxis.SwitchOn(); return true; }, () => { return _lsAAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOnAllStep.LSBSwitchOn, () => { _lsBAxis.SwitchOn(); return true; }, () => { return _lsBAxis.IsSwitchOn; }, _timeOut) .Run(SwitchOnAllStep.RotationSwitchOn, () => { _rotationAxis.SwitchOn(); return true; }, () => { return _rotationAxis.IsSwitchOn; }, _timeOut) .End(SwitchOnAllStep.End,NullFun); return Runner.Status; } public RState Start(params object[] objs) { Runner.Start(Module, "Switch On All"); return RState.Running; } } }