using Aitex.Core.RT.Device; using Aitex.Core.RT.Log; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Persistent.Reservoirs; using MECF.Framework.Common.RecipeCenter; using MECF.Framework.Common.Routine; using MECF.Framework.Common.ToolLayout; using PunkHPX8_Core; using PunkHPX8_RT.Devices.AXIS; using PunkHPX8_RT.Devices.PlatingCell; using PunkHPX8_RT.Devices.Reservoir; using System; using System.Collections.Generic; using System.Diagnostics.Eventing.Reader; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media.Imaging; namespace PunkHPX8_RT.Modules.PlatingCell { public class PlatingCellVerticalInitializeRoutine : RoutineBase, IRoutine { private enum InitializeStep { VerticalHome, VerticalHomeCheck, GoToLoad, GoToLoadCheck, End } #region 内部变量 /// /// vertical axis /// private JetAxisBase _verticalAxis; #endregion /// /// 构造函数 /// /// public PlatingCellVerticalInitializeRoutine(string module) : base(module) { } /// /// 中止 /// public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(InitializeStep.VerticalHome, Home, NullFun, 100) .WaitWithStopCondition(InitializeStep.VerticalHomeCheck, CheckVerticalPositionStatus, CheckVerticalPositionRunStop) .Run(InitializeStep.GoToLoad, VerticalGotoLoad, 100) .WaitWithStopCondition(InitializeStep.GoToLoadCheck, CheckVerticalPositionStatus, CheckVerticalPositionRunStop) .End(InitializeStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// vertical 运动到Load位置 /// /// private bool VerticalGotoLoad() { if(_verticalAxis != null ) { if (!_verticalAxis.IsSwitchOn) { LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "Vertical is not Power On"); return false; } else if (!_verticalAxis.IsHomed) { LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "Vertical is not Home,Home vertical first"); return false; } return _verticalAxis.PositionStation("Load", true); } else { LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "vertical axis is null"); return false; } } /// /// Home /// /// private bool Home() { if (_verticalAxis != null) { if (!_verticalAxis.IsSwitchOn) { LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "Vertical is not Power On"); return false; } return _verticalAxis.Home(); } else { LOG.WriteLog(eEvent.ERR_PLATINGCELL, Module, "Verticel axis is null"); return false; } } /// /// 检验Vertical移动状态 /// /// private bool CheckVerticalPositionStatus() { return _verticalAxis.Status == RState.End; } /// /// 检验Vertical是否还在运动 /// /// private bool CheckVerticalPositionRunStop() { return _verticalAxis.Status == RState.Failed || _verticalAxis.Status == RState.Timeout; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _verticalAxis = DEVICE.GetDevice($"{Module}.Vertical"); return Runner.Start(Module, "Start PlatingCell Vertical Initialize"); } } }