| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | 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<ToleranceObject> _toleranceObjects;        string _Module;        public bool IsStable = true;        private bool _IsStableType;        public RecipeToleranceChecker(string module)        {            _stopwatch = new Stopwatch();            _Module = module;        }        public void Start(List<ToleranceObject> toleranceObjects, bool isStableType)        {            _stopwatch.Restart();            _toleranceObjects = toleranceObjects;            IsStable = false;            _IsStableType = isStableType;        }        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 || (_IsStableType && _stopwatch.ElapsedMilliseconds>500))                {                    if (_IsStableType)                    {                        _toleranceObjects[i].AlarmFlag = false;                        _toleranceObjects[i].WarningFlag = false;                    }                    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;                        if (_IsStableType == false)                        {                            LOG.Write(eEvent.ERR_PM_TOLERANCE, _Module, $"{_toleranceObjects[i].Name}:Current 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;                        if (_IsStableType == false)                        {                            LOG.Write(eEvent.WARN_PM_TOLERANCE, _Module, $"{_toleranceObjects[i].Name}:Current Value:{feedBacks[i]},Over Range {_toleranceObjects[i].WarningMin}-{_toleranceObjects[i].WarningMax}");                        }                                       }                    else                    {                                          IsStable = true;                    }                }            }            return RState.Running;        }        public void End()        {            IsStable = true;            _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;        }    }}
 |