using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Routine; using MECF.Framework.Common.Utilities; using CyberX8_Core; using CyberX8_RT.Devices.AXIS.CANOpen; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.Loader { public class LoaderPreTransferUnclampRoutine : RoutineBase, IRoutine { private enum UnclampStep { WaferHolderUnClamp, SideUnClamp, SideUnClampWait, FlowUnClamp, End } #region 内部变量 private LoaderCommonDevice _commonDevice; private LoaderCommonWaferHolderSideClampRoutine _sideClampRoutine; #endregion /// /// 构造函数 /// /// public LoaderPreTransferUnclampRoutine(string module) : base(module) { } /// /// 中止 /// public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(UnclampStep.WaferHolderUnClamp, _commonDevice.WaferHolderClampOffAction, _delay_1ms) .Run(UnclampStep.SideUnClamp, () => _sideClampRoutine.Start(false) == RState.Running, _delay_1ms) .WaitWithStopCondition(UnclampStep.SideUnClampWait, () => CommonFunction.CheckRoutineEndState(_sideClampRoutine), () => CommonFunction.CheckRoutineStopState(_sideClampRoutine)) .Run(UnclampStep.FlowUnClamp, _commonDevice.LeakFlowClampOffAction, _delay_1ms) .End(UnclampStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _sideClampRoutine = new LoaderCommonWaferHolderSideClampRoutine(Module); _commonDevice = DEVICE.GetDevice($"{ModuleName.Loader1}.Common"); return Runner.Start(Module,"Start PreTransfer Unclamp"); } } }