using Aitex.Core.RT.Routine; using Aitex.Core.Util; using MECF.Framework.Common.Routine; using MECF.Framework.Common.Utilities; using PunkHPX8_Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PunkHPX8_RT.Modules.PlatingCell { public class PlatingCellRunRecipeRoutine : RoutineBase, IRoutine { private enum RunRecipeStep { Delay, InterRinse, CheckInterRinse, Vertical, CheckVertical, End } #region 内部变量 private PlatingCellInterRinseRoutine _interRinseRoutine; private PlatingCellVerticalEntity _verticalEntity; #endregion /// /// 构造函数 /// /// public PlatingCellRunRecipeRoutine(string module) : base(module) { _interRinseRoutine=new PlatingCellInterRinseRoutine(module); } /// /// 中止 /// public void Abort() { Runner.Stop("Manual Abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Delay(RunRecipeStep.Delay, 5000) .Run(RunRecipeStep.InterRinse, () => { return _interRinseRoutine.Start() == RState.Running; }) .WaitWithStopCondition(RunRecipeStep.CheckInterRinse,()=>CommonFunction.CheckRoutineEndState(_interRinseRoutine), ()=>CommonFunction.CheckRoutineStopState(_interRinseRoutine)) .Run(RunRecipeStep.Vertical,StartVertical) .WaitWithStopCondition(RunRecipeStep.CheckVertical,CheckVerticalEnd,CheckVerticalError) .End(RunRecipeStep.End, NullFun); return Runner.Status; } /// /// 垂直电机运行(仅示例只做参考) /// /// private bool StartVertical() { double position = 101; return _verticalEntity.CheckToPostMessage(Aitex.Core.RT.Log.eEvent.INFO_PLATINGCELL, Module, (int)VerticalMsg.Position, position); } /// /// 检验垂直电机是否运动完成 /// /// private bool CheckVerticalEnd() { return _verticalEntity.IsIdle; } /// /// 检验垂直是否出现错误 /// /// private bool CheckVerticalError() { return _verticalEntity.IsError; } /// /// 启动 /// /// /// public RState Start(params object[] objs) { string vertical = ModuleMatcherManager.Instance.GetPlatingVerticalByCell(Module); _verticalEntity = Singleton.Instance.GetModule(vertical); return Runner.Start(Module, "Run Recipe"); } } }