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");
}
}
}