using Aitex.Core.RT.DataCenter; using Aitex.Core.RT.Device; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Equipment; using CyberX8_Core; using CyberX8_RT.Devices.PUF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Modules.PUF { public class PufCalibrateRoutine : ModuleRoutineBase, IRoutine { #region 常量 private const string CHUCKA_RELEASE = "ChuckARelease"; private const double STANDARD = 100; #endregion private enum PufCalibrateStep { CheckValid, VacuumOff, SaveConfig, End } #region 内部变量 private PufVacuum _vacuum; private PufDistanceSensor _distanceSensor; private int _timeOut = 6000; private double _offset1; private double _offset2; #endregion public PufCalibrateRoutine(ModuleName module) : base(module) { _vacuum = DEVICE.GetDevice($"{module.ToString()}.Vacuum"); _distanceSensor = DEVICE.GetDevice($"{module.ToString()}.DistanceSensor"); Name = "Vacuum"; } public void Abort() { Runner.Stop("Manual Abort"); } public RState Monitor() { Runner.Run(PufCalibrateStep.CheckValid,CheckValid,100) .Run(PufCalibrateStep.VacuumOff, VacuumAOff, CheckVacuumOff, _timeOut) .Run(PufCalibrateStep.SaveConfig, SaveConfig, NullFun, _timeOut) .End(PufCalibrateStep.End,NullFun); return Runner.Status; } private bool CheckValid() { return true; } private bool VacuumAOff() { return _vacuum.VacuumAOff(); } private bool CheckVacuumOff() { return DATA.Poll($"{Module}",CHUCKA_RELEASE); } private bool SaveConfig() { _distanceSensor.SaveConfig(_offset1, _offset2); return true; } public RState Start(params object[] objs) { if(objs == null || objs.Length == 0) { return RState.Failed; } _offset1 = STANDARD - (double)objs[1]; _offset2=STANDARD- (double)objs[2]; Runner.Start(Module, Name); return RState.Running; } } }