using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using MECF.Framework.Common.Routine; using MECF.Framework.Common.WaferHolder; 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 TransporterParkRoutine : RoutineBase, IRoutine { private enum ParkStep { CheckStatus, ElevatorPark, ElevatorParkWait, GantryPark, GantryParkWait, End } #region 内部变量 private JetAxisBase _gantryAxis; private JetAxisBase _elevatorAxis; private bool _hasWaferHolder = false; #endregion /// /// 构造函数 /// /// public TransporterParkRoutine(string module) : base(module) { } /// /// 中止 /// public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(ParkStep.CheckStatus, CheckPreCondition, NullFun,_delay_1ms) //1.1 Elevator .Run(ParkStep.ElevatorPark, ElevatorPosition, _delay_1ms) .WaitWithStopCondition(ParkStep.ElevatorParkWait, CheckVerticalPositionStatus, CheckVerticalPositionRunStop) //1.2 Gantry 移动 .Run(ParkStep.GantryPark, () => { return _gantryAxis.PositionStation("Park"); }, NullFun, _delay_1ms) .WaitWithStopCondition(ParkStep.GantryParkWait, CheckGantryPositionStatus, CheckGantryPositionRunStop) .End(ParkStep.End,NullFun,100); return Runner.Status; } /// /// 检验前置条件 /// /// private bool CheckPreCondition() { if(!_gantryAxis.IsSwitchOn) { LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"{Module} gantry axis is not switch on "); return false; } if (!_gantryAxis.IsHomed) { LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"{Module} gantry axis is not homed "); return false; } if (!_elevatorAxis.IsSwitchOn) { LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"{Module} elevator axis is not switch on "); return false; } if (!_elevatorAxis.IsHomed) { LOG.WriteLog(eEvent.ERR_TRANSPORTER, Module, $"{Module} elevator axis is not homed "); return false; } return true; } /// /// Elevator Position /// /// private bool ElevatorPosition() { return _elevatorAxis.PositionStation("Up"); } /// /// 检验Vertical移动状态 /// /// private bool CheckVerticalPositionStatus() { return _elevatorAxis.Status == RState.End; } /// /// 检验Vertical是否还在运动 /// /// private bool CheckVerticalPositionRunStop() { return _elevatorAxis.Status == RState.Failed; } /// /// 检验Gantry移动状态 /// /// private bool CheckGantryPositionStatus() { return _gantryAxis.Status == RState.End; } /// /// 检验Gantry是否还在运动 /// /// private bool CheckGantryPositionRunStop() { return _gantryAxis.Status == RState.Failed; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _elevatorAxis = DEVICE.GetDevice($"{Module}.Elevator"); _gantryAxis = DEVICE.GetDevice($"{Module}.Gantry"); _hasWaferHolder = WaferHolderManager.Instance.HasWaferHolder(Module); return Runner.Start(Module, "Park"); } } }