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 CyberX8_RT.Devices.PUF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Modules.Transporter { public class TransporterSwitchOffRoutine : RoutineBase, IRoutine { private enum SwitchOffStep { Vertical, Gantry, End } #region 内部变量 private JetAxisBase _gantryAxis; private JetAxisBase _elevatorAxis; private int _timeOut = 6000; #endregion public TransporterSwitchOffRoutine(string module) : base(module) { } public void Abort() { Runner.Stop("Manual Abort"); } public RState Monitor() { Runner.Run(SwitchOffStep.Vertical, VerticalAxisSwitchOff, CheckVerticalSwitchOff, _timeOut) .Run(SwitchOffStep.Gantry, GantryAxisSwitchOff, CheckGantrySwitchOff, _timeOut) .End(SwitchOffStep.End,NullFun); return Runner.Status; } private bool VerticalAxisSwitchOff() { _elevatorAxis.SwitchOff(); return true; } private bool CheckVerticalSwitchOff() { return !_elevatorAxis.IsSwitchOn; } private bool GantryAxisSwitchOff() { _gantryAxis.SwitchOff(); return true; } private bool CheckGantrySwitchOff() { return !_gantryAxis.IsSwitchOn; } public RState Start(params object[] objs) { _gantryAxis = DEVICE.GetDevice($"{Module}.Gantry"); _elevatorAxis = DEVICE.GetDevice($"{Module}.Elevator"); Runner.Start(Module, "SwitchOff"); return RState.Running; } } }