PufCalibrateRoutine.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using Aitex.Core.RT.DataCenter;
  2. using Aitex.Core.RT.Device;
  3. using Aitex.Core.RT.Routine;
  4. using Aitex.Core.RT.SCCore;
  5. using MECF.Framework.Common.Equipment;
  6. using CyberX8_Core;
  7. using CyberX8_RT.Devices.PUF;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. namespace CyberX8_RT.Modules.PUF
  14. {
  15. public class PufCalibrateRoutine : ModuleRoutineBase, IRoutine
  16. {
  17. #region 常量
  18. private const string CHUCKA_RELEASE = "ChuckARelease";
  19. private const double STANDARD = 100;
  20. #endregion
  21. private enum PufCalibrateStep
  22. {
  23. CheckValid,
  24. VacuumOff,
  25. SaveConfig,
  26. End
  27. }
  28. #region 内部变量
  29. private PufVacuum _vacuum;
  30. private PufDistanceSensor _distanceSensor;
  31. private int _timeOut = 6000;
  32. private double _offset1;
  33. private double _offset2;
  34. #endregion
  35. public PufCalibrateRoutine(ModuleName module) : base(module)
  36. {
  37. _vacuum = DEVICE.GetDevice<PufVacuum>($"{module.ToString()}.Vacuum");
  38. _distanceSensor = DEVICE.GetDevice<PufDistanceSensor>($"{module.ToString()}.DistanceSensor");
  39. Name = "Vacuum";
  40. }
  41. public void Abort()
  42. {
  43. Runner.Stop("Manual Abort");
  44. }
  45. public RState Monitor()
  46. {
  47. Runner.Run(PufCalibrateStep.CheckValid,CheckValid,100)
  48. .Run(PufCalibrateStep.VacuumOff, VacuumAOff, CheckVacuumOff, _timeOut)
  49. .Run(PufCalibrateStep.SaveConfig, SaveConfig, NullFun, _timeOut)
  50. .End(PufCalibrateStep.End,NullFun);
  51. return Runner.Status;
  52. }
  53. private bool CheckValid()
  54. {
  55. return true;
  56. }
  57. private bool VacuumAOff()
  58. {
  59. return _vacuum.VacuumAOff();
  60. }
  61. private bool CheckVacuumOff()
  62. {
  63. return DATA.Poll<bool>($"{Module}",CHUCKA_RELEASE);
  64. }
  65. private bool SaveConfig()
  66. {
  67. _distanceSensor.SaveConfig(_offset1, _offset2);
  68. return true;
  69. }
  70. public RState Start(params object[] objs)
  71. {
  72. if(objs == null || objs.Length == 0)
  73. {
  74. return RState.Failed;
  75. }
  76. _offset1 = STANDARD - (double)objs[1];
  77. _offset2=STANDARD- (double)objs[2];
  78. Runner.Start(Module, Name);
  79. return RState.Running;
  80. }
  81. }
  82. }