using Aitex.Core.RT.Log;
using Aitex.Core.RT.Routine;
using Aitex.Core.RT.SCCore;
using CyberX8_Core;
using CyberX8_RT.Devices.LinMot;
using MECF.Framework.Common.Routine;
using MECF.Framework.Common.Utilities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CyberX8_RT.Modules.Prewet
{
public class PrewetDelayKeepwetRoutine : RoutineBase, IRoutine
{
private enum KeepwetStep
{
Delay,
Keepwet,
KeepwetWait,
End
}
#region 内部变量
///
/// delay时间
///
private int _idleKeepwetPauseBetweenScanSeconds;
///
/// keepwet状态机
///
//private PrewetKeepWetStateMachine _keepwetStateMachine;
///
/// Linmot
///
private LinMotAxis _linmotAxis;
///
/// Keepwet Routine
///
private PrewetKeepWetRoutine _prewetKeepWetRoutine;
#endregion
///
/// 构造函数
///
///
public PrewetDelayKeepwetRoutine(string module,LinMotAxis linMotAxis) : base(module)
{
_linmotAxis = linMotAxis;
_prewetKeepWetRoutine = new PrewetKeepWetRoutine(module, linMotAxis);
//_keepwetStateMachine = new PrewetKeepWetStateMachine(Module.ToString(), _linmotAxis);
}
///
/// 中止
///
public void Abort()
{
if (Runner.CurrentStep.ToString() == KeepwetStep.Delay.ToString())
{
Runner.Stop("Manual abort");
}
}
///
/// 监控
///
///
public RState Monitor()
{
Runner.Delay(KeepwetStep.Delay, _idleKeepwetPauseBetweenScanSeconds * 1000)
.Run(KeepwetStep.Keepwet, StartKeepwet, _delay_1ms)
.WaitWithStopCondition(KeepwetStep.KeepwetWait, CheckKeepwetEndStaus, CheckKeepwetStopStaus)
.End(KeepwetStep.End, NullFun, _delay_1ms);
return Runner.Status;
}
///
/// 启动keepwet
///
///
private bool StartKeepwet()
{
//return _keepwetStateMachine.CheckToPostMessage(eEvent.ERR_PREWET, Module.ToString(), (int)PrewetKeepWetMsg.KeepWetStart, null);
return _prewetKeepWetRoutine.Start() == RState.Running;
}
///
/// 检验keepwet状态机结束状态
///
///
private bool CheckKeepwetEndStaus()
{
//return _keepwetStateMachine.State == PrewetKeepWetState.Idle.ToString();
return CommonFunction.CheckRoutineEndState(_prewetKeepWetRoutine);
}
///
/// 检验keepwet状态机停止状态
///
///
private bool CheckKeepwetStopStaus()
{
//return _keepwetStateMachine.State == PrewetKeepWetState.Error.ToString();
return CommonFunction.CheckRoutineStopState(_prewetKeepWetRoutine);
}
///
/// 启动
///
///
///
public RState Start(params object[] objs)
{
//_keepwetStateMachine.Initialize();
_idleKeepwetPauseBetweenScanSeconds = SC.GetValue("Prewet.IdleKeepwetPauseBetweenScanSeconds");
return Runner.Start(Module, "Start Delay Keepwet");
}
}
}