using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using CyberX8_Core; using CyberX8_RT.Devices.PUF; using MECF.Framework.Common.Routine; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Modules.PUF { public class PufChuckRoutine : RoutineBase, IRoutine { private enum ChuckStep { Chuck, ChuckWait, End } #region 内部变量 private PufVacuum _pufVacuum; private bool _chuck; #endregion /// /// 构造函数 /// /// public PufChuckRoutine(string module) : base(module) { _pufVacuum= DEVICE.GetDevice($"{Module}.Vacuum"); } /// /// 中止 /// public void Abort() { Runner.Stop("Manual abort"); } /// /// 监控 /// /// public RState Monitor() { Runner.Run(ChuckStep.Chuck, Chuck, _delay_1ms) .Wait(ChuckStep.ChuckWait, CheckChuck, _delay_5s) .End(ChuckStep.End, NullFun, _delay_1ms); return Runner.Status; } /// /// chuck操作 /// /// private bool Chuck() { if (_chuck) { return _pufVacuum.ChuckOn(); } else { return _pufVacuum.ChuckOff(); } } /// /// 检验chuck /// /// private bool CheckChuck() { if (_chuck) { return _pufVacuum.CheckChuckOut(); } else { return _pufVacuum.CheckChuckIn(); } } /// /// 启动 /// /// /// public RState Start(params object[] objs) { _chuck=(bool)objs[0]; return Runner.Start(Module, "Chuck"); } } }