using Aitex.Core.RT.Log; using System.Collections.Generic; using System.Diagnostics; using Venus_Core; namespace Aitex.Core.RT.Tolerance { public class RecipeToleranceChecker { Stopwatch _stopwatch; List _toleranceObjects; string _Module; public bool IsStable = true; public RecipeToleranceChecker(string module) { _stopwatch = new Stopwatch(); _Module = module; } public void Start( List toleranceObjects) { _stopwatch.Restart(); _toleranceObjects = toleranceObjects; IsStable = false; } public RState Monitor(params double[] feedBacks) { if (_toleranceObjects == null) { return RState.Running; } for (int i = 0; i < _toleranceObjects.Count; i++) { if (_stopwatch.ElapsedMilliseconds > _toleranceObjects[i].DelayTime) { if ((feedBacks[i] < _toleranceObjects[i].AlarmMin || feedBacks[i] > _toleranceObjects[i].AlarmMax) && _toleranceObjects[i].AlarmFlag == false && _toleranceObjects[i].SetPoint!=0 && _toleranceObjects[i].WarningFlag == true) { _toleranceObjects[i].AlarmFlag = true; LOG.Write(eEvent.ERR_PM_TOLERANCE, _Module, $"{_toleranceObjects[i].Name}:Currnt Value:{feedBacks[i]},Over Range {_toleranceObjects[i].AlarmMin}-{_toleranceObjects[i].AlarmMax}" ); return RState.Failed; } else if ((feedBacks[i] < _toleranceObjects[i].WarningMin || feedBacks[i] > _toleranceObjects[i].WarningMax) && _toleranceObjects[i].WarningFlag == false && _toleranceObjects[i].SetPoint != 0) { IsStable = false; _toleranceObjects[i].WarningFlag = true; LOG.Write(eEvent.WARN_PM_TOLERANCE, _Module, $"{_toleranceObjects[i].Name}:Currnt Value:{feedBacks[i]},Over Range {_toleranceObjects[i].WarningMin}-{_toleranceObjects[i].WarningMax}"); } else { IsStable = true; } } } return RState.Running; } public void End() { _stopwatch.Stop(); } } public class ToleranceObject { public string Name { get; set; } public float SetPoint { get; set; } public float WarningScale { get; set; } public float AlarmScale { get; set; } public bool WarningFlag { get; set; } public bool AlarmFlag { get; set; } public int DelayTime { get; set; } public float WarningMax { get; set; } public float WarningMin { get; set; } public float AlarmMax { get; set; } public float AlarmMin { get; set; } public ToleranceObject(string name, float setPoint, float warningScale, float alarmScale, int delayTime, ToleranceMode toleranceMode) { Name = name; SetPoint = setPoint; DelayTime = delayTime; if (toleranceMode == ToleranceMode.Percent) { WarningScale = SetPoint * warningScale / 100; AlarmScale = SetPoint * alarmScale / 100; } else { WarningScale = warningScale; AlarmScale = alarmScale; } WarningMax = setPoint + WarningScale; WarningMin = setPoint - WarningScale; AlarmMax = setPoint + AlarmScale; AlarmMin = setPoint - AlarmScale; } } }