RecipeToleranceChecker.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using Aitex.Core.RT.Log;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using Venus_Core;
  5. namespace Aitex.Core.RT.Tolerance
  6. {
  7. public class RecipeToleranceChecker
  8. {
  9. Stopwatch _stopwatch;
  10. List<ToleranceObject> _toleranceObjects;
  11. string _Module;
  12. public bool IsStable = true;
  13. public RecipeToleranceChecker(string module)
  14. {
  15. _stopwatch = new Stopwatch();
  16. _Module = module;
  17. }
  18. public void Start( List<ToleranceObject> toleranceObjects)
  19. {
  20. _stopwatch.Restart();
  21. _toleranceObjects = toleranceObjects;
  22. IsStable = false;
  23. }
  24. public RState Monitor(params double[] feedBacks)
  25. {
  26. if (_toleranceObjects == null)
  27. {
  28. return RState.Running;
  29. }
  30. for (int i = 0; i < _toleranceObjects.Count; i++)
  31. {
  32. if (_stopwatch.ElapsedMilliseconds > _toleranceObjects[i].DelayTime)
  33. {
  34. if ((feedBacks[i] < _toleranceObjects[i].AlarmMin || feedBacks[i] > _toleranceObjects[i].AlarmMax) && _toleranceObjects[i].AlarmFlag == false && _toleranceObjects[i].SetPoint!=0 && _toleranceObjects[i].WarningFlag == true)
  35. {
  36. _toleranceObjects[i].AlarmFlag = true;
  37. LOG.Write(eEvent.ERR_PM_TOLERANCE, _Module, $"{_toleranceObjects[i].Name}:Currnt Value:{feedBacks[i]},Over Range {_toleranceObjects[i].AlarmMin}-{_toleranceObjects[i].AlarmMax}" );
  38. return RState.Failed;
  39. }
  40. else if ((feedBacks[i] < _toleranceObjects[i].WarningMin || feedBacks[i] > _toleranceObjects[i].WarningMax) && _toleranceObjects[i].WarningFlag == false && _toleranceObjects[i].SetPoint != 0)
  41. {
  42. IsStable = false;
  43. _toleranceObjects[i].WarningFlag = true;
  44. LOG.Write(eEvent.WARN_PM_TOLERANCE, _Module, $"{_toleranceObjects[i].Name}:Currnt Value:{feedBacks[i]},Over Range {_toleranceObjects[i].WarningMin}-{_toleranceObjects[i].WarningMax}");
  45. }
  46. else
  47. {
  48. IsStable = true;
  49. }
  50. }
  51. }
  52. return RState.Running;
  53. }
  54. public void End()
  55. {
  56. _stopwatch.Stop();
  57. }
  58. }
  59. public class ToleranceObject
  60. {
  61. public string Name { get; set; }
  62. public float SetPoint { get; set; }
  63. public float WarningScale { get; set; }
  64. public float AlarmScale { get; set; }
  65. public bool WarningFlag { get; set; }
  66. public bool AlarmFlag { get; set; }
  67. public int DelayTime { get; set; }
  68. public float WarningMax { get; set; }
  69. public float WarningMin { get; set; }
  70. public float AlarmMax { get; set; }
  71. public float AlarmMin { get; set; }
  72. public ToleranceObject(string name, float setPoint, float warningScale, float alarmScale, int delayTime, ToleranceMode toleranceMode)
  73. {
  74. Name = name;
  75. SetPoint = setPoint;
  76. DelayTime = delayTime;
  77. if (toleranceMode == ToleranceMode.Percent)
  78. {
  79. WarningScale = SetPoint * warningScale / 100;
  80. AlarmScale = SetPoint * alarmScale / 100;
  81. }
  82. else
  83. {
  84. WarningScale = warningScale;
  85. AlarmScale = alarmScale;
  86. }
  87. WarningMax = setPoint + WarningScale;
  88. WarningMin = setPoint - WarningScale;
  89. AlarmMax = setPoint + AlarmScale;
  90. AlarmMin = setPoint - AlarmScale;
  91. }
  92. }
  93. }