| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- using shjxCamera;
- namespace SHJX.Service.Control.Execute.TitrationController
- {
- public class ColorDataJudge
- {
- private static readonly ILogger logger = LogFactory.BuildLogger(typeof(ColorDataJudge));
- #region Field
- private int _maxRange;
- internal int Count;
- private int currpt;
- private readonly int _signalTimeLen;
- private readonly ColorDataGraber _graber;
- private static List<ColorDataPoint> _currSignals;
- #endregion
- public ColorDataJudge(ColorDataGraber graber)
- {
- Count = 0;
- currpt = 0;
- _signalTimeLen = 10;
- _graber = graber;
- _currSignals = new(); // 信号队列
- _graber.UpdateRoiPos(false);
- }
- public ColorDataJudge SetMaxRange(int maxRange)
- {
- _maxRange = maxRange;
- return this;
- }
- #region Public Method
- /// <summary>
- /// 颜色采集并判断
- /// </summary>
- /// <param name="subB"></param>
- /// <returns></returns>
- public TitrationEnum ColorCollectCalculate(ref double subB)
- {
- Count += 1;
- if (Count.Equals(_currSignals.Count - 7))
- {
- _currSignals[^1] = _graber.GrabSignal(_signalTimeLen);
- }
- else
- {
- _currSignals.Add(_graber.GrabSignal(_signalTimeLen));
- }
- if (_currSignals.Count < 7)
- {
- return TitrationEnum.Continue;
- }
- currpt = _currSignals.Count - 7;
- var currpt6 = Math.Round(_currSignals[currpt + 6].GetBSV(), 1, MidpointRounding.AwayFromZero);
- var currpt0 = Math.Round(_currSignals[currpt + 0].GetBSV(), 1, MidpointRounding.AwayFromZero);
- var currpt1 = Math.Round(_currSignals[currpt + 1].GetBSV(), 1, MidpointRounding.AwayFromZero);
- logger.LogDebug($"6:{currpt6},0:{currpt0},1:{currpt1}");
- if (currpt6 <= 0)
- {
- return TitrationEnum.Continue;
- }
- subB = (currpt6 - (currpt0 + currpt1) / 2) * 100 / currpt6;
- return TitrationEnum.Normal;
- }
- /// <summary>
- /// 到达终点
- /// </summary>
- /// <param name="subB"></param>
- public void ArriveTitrationEndPoint(ref double subB)
- {
- try
- {
- _currSignals[currpt + 6] = _graber.GrabSignal(_signalTimeLen);
- subB = (_currSignals[currpt + 6].GetBSV() - (_currSignals[currpt + 0].GetBSV() + _currSignals[currpt + 1].GetBSV()) / 2) * 100 / _currSignals[currpt + 6].GetBSV();
- logger.LogDebug($"观察是否褪色,观察阈值为{subB}");
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- /// <summary>
- /// 检查是否到达阈值范围
- /// </summary>
- public TitrationEnum CheckRangeArrive()
- {
- if (_currSignals[^1].GetBSV() >= 230 && _graber.CurrExposure < 0)
- {
- _currSignals.Clear();
- InitColorList();
- return TitrationEnum.Normal;
- }
- else
- {
- return TitrationEnum.End;
- }
- }
- #endregion
- #region Private Method
- /// <summary>
- /// 初始化队列
- /// </summary>
- /// <param name="Graber"></param>
- internal void InitColorList()
- {
- try
- {
- _graber.PresetLightParam(_maxRange); //调节曝光参数
- Thread.Sleep(2000);
- logger.LogDebug("开始进行背景信号采集……");
- for (int i = 0; i < 7; i++)
- {
- _currSignals.Add(_graber.GrabSignal(500)); //采集7段信号作为背景
- logger.LogDebug($"第{i + 1}段信号采集");
- }
- }
- catch (Exception ex)
- {
- logger.LogError(ex.ToString());
- }
- }
- #endregion
- }
- }
|