//Чтение значений из рекордсета по одному блоку private ValuesCount ReadPartValues(IRecordRead rec) { var vc = new ValuesCount(); while (rec.Read()) { vc.ReadCount++; ListSourceOut ob = null; try { ob = _defineObjectFun(rec); if (ob != null) { vc.WriteCount += ob.ReadMoments(rec); } vc.AddStatus(VcStatus.Success); } catch (Exception ex) { AddErrorOut(ob == null ? "" : ob.Context, "Ошибка при чтении значений из рекордсета", ex); vc.AddStatus(VcStatus.NoSuccess); } } return(vc); }
//Чтение мгновенных значений из таблицы public void ReadMoments(IRecordRead rec) { while (!rec.EOF && rec.GetInt("ImitId") == ImitId) { if (!IsConstant) { var mv = new Moment(DataType, rec.GetDouble("Value"), rec.GetTime("Time"), rec.GetInt("Nd")); var last = _moments.Count == 0 ? null : _moments[_moments.Count - 1]; double rtime = rec.GetDouble("RelativeTime"); if ((last == null || last.Time < mv.Time) && rtime >= 0 && rtime < _intervalLength) { _moments.Add(mv); } } rec.Read(); } }
public Grafic(IRecordRead recg, ThreadCalc thread) : base(recg.GetInt("Dimension"), 0) { Code = recg.GetString("Code"); GraficType = recg.GetString("GraficType").ToGraficType(); ThreadCalc = thread; while (!recg.EOF && recg.GetString("Code").ToLower() == Code.ToLower()) { try { ReadPoint(recg); recg.Read(); } catch (Exception ex) { thread.AddError("Ошибка загрузки графика", ex, "График=" + Code); } } }
//Чтение значений из одного рекордсета оригинала или клона по списку сигналов private int ReadValuesList(IRecordRead rec, IEnumerable <ObjectOvation> objects) { int m = 0; while (rec.Read()) { var id = rec.GetInt("Id"); if (_objectsId.ContainsKey(id)) { m++; var ob = _objectsId[id]; if (ob.StateSignal != null) { var mv = new Moment(DataType.Integer, Stat(rec), Time(rec)); if (mv.Time <= _begin) { ob.StatBegin = mv; } else { AddValueToList(ob.StateSignal.Value.Moments, mv); } ob.StatEnd = mv; } if (ob.IsValue) { var mv = new Moment(ob.DataType, Mean(rec), Time(rec), Nd(rec)); if (mv.Time <= _begin) { ob.ValueBegin = mv; } else { if (ob.ValueSignal != null) { AddValueToList(ob.ValueSignal.Value.Moments, mv); } if (ob.BitSignals != null && ob.BitSignals.Count != 0) { foreach (var b in ob.BitSignals.Keys) { AddValueToList(ob.BitSignals[b].Value.Moments, new Moment(mv.Time, (mv.Integer & (1 << b)) != 0, null, mv.Nd)); } } } ob.ValueEnd = mv; } } } foreach (var ob in objects) { if (ob.StatBegin != null) { ob.StateSignal.Value.Moments.Insert(0, ob.StatBegin); } if (ob.StatEnd != null) { ob.StatEnd = ob.StatEnd.Clone(_end); } if (ob.ValueBegin != null) { if (ob.ValueSignal != null) { ob.ValueSignal.Value.Moments.Insert(0, ob.ValueBegin); } if (ob.BitSignals.Count != 0) { foreach (var b in ob.BitSignals.Keys) { var mb = new Moment(_begin, (ob.ValueBegin.Integer & (1 << b)) != 0, null, ob.ValueBegin.Nd); ob.BitSignals[b].Value.Moments.Insert(0, mb); } } } if (ob.ValueEnd != null) { ob.ValueEnd = ob.ValueEnd.Clone(_end); } } return(m); }
//Получение среза значений private void GetBeginValues() { try { int d = 4; int n = ParamsWithCut(), m = 0; while (d <= 60 && n > 0) { DateTime beg = _begin.AddMinutes(-d); foreach (List <ObjectOvation> part in _objectsParts) { var list = part.Where(ob => ob.ValueBegin == null).ToList(); if (list.Count > 0) { Logger.AddEvent("Чтение среза значений по " + d + " минутам", list.Count + " сигналов"); if (RunCommand(list, beg, _begin)) { Logger.Procent += 15.0 / _objectsParts.Count; Logger.AddEvent("Распределение значений по сигналам"); while (_histReader.Read()) { m++; int id = _histReader.GetInt("ID"); if (_objectsId.ContainsKey(id)) { var ob = _objectsId[id]; if (ob.IsValue) { if (ob.ValueBegin == null) { n--; } ob.ValueBegin = new Moment(ob.DataType, Mean(_histReader), _begin, Nd(_histReader)); ob.ValueEnd = ob.ValueBegin; } if (ob.StateSignal != null) { if (ob.StatBegin == null) { n--; } ob.StatBegin = new Moment(DataType.Integer, Stat(_histReader)); ob.StatEnd = ob.StatBegin; } } } _histReader.Dispose(); } } Logger.Procent += 15.0 / _objectsParts.Count; } d *= 15; } Logger.AddEvent("Значения прочитаны", m + " значений, " + n + " неопределенных срезов"); } catch (Exception ex) { AddError("Ошибка при чтении из Historian", ex); IsConnected = false; } }