RecipeToleranceChecker.cs 3.4 KB

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