//Считывает значения из рекордсета _histReader, forBegin - значения для среза //Возвращает количество прочитанных значений и сформированных значений private KeyValuePair <int, int> FormPart(bool forBegin) { int nread = 0, nwrite = 0; while (_histReader.Read()) { ObjectOvation ob = null; try { nread++; var id = Convert.ToInt32(_histReader["Id"]); if (_objectsId.ContainsKey(id)) { ob = _objectsId[id]; //DateTime t = forBegin ? BeginRead : Time(_histReader); //Установка среза DateTime t = Time(_histReader); int nd = Nd(_histReader); if (ob.StateSignal != null) { nwrite += ob.StateSignal.AddMoment(t, Stat(_histReader), 0, forBegin); } if (ob.ValueSignal != null) { //правка(28.09.2018, добавлено преобразование к булевскому типу ) if (ob.DataType == DataType.Boolean) { nwrite += ob.ValueSignal.AddMoment(t, Convert.ToBoolean(RMean(_histReader)), nd, forBegin); } else if (ob.DataType == DataType.Integer) { nwrite += ob.ValueSignal.AddMoment(t, Convert.ToInt32(RMean(_histReader)), nd, forBegin); } else { nwrite += ob.ValueSignal.AddMoment(t, RMean(_histReader), nd, forBegin); } } if (ob.BitSignals != null && ob.BitSignals.Count != 0) { int im = IMean(_histReader); foreach (var b in ob.BitSignals.Keys) { nwrite += ob.BitSignals[b].AddMoment(t, im.GetBit(b), nd, forBegin); } } } } catch (Exception ex) { AddErrorObject(ob == null ? "" : ob.Inf, "Ошибка при чтении значений из рекордсета. " + _b + " - " + _e, ex); } } return(new KeyValuePair <int, int>(nread, nwrite)); }
//Добавить сигнал public ProviderSignal AddSignal(string signalInf, string code, DataType dataType, int idInClone) { var sig = new SignalOvation(signalInf, code, dataType, this, idInClone); ObjectOvation ob; if (!_objectsId.ContainsKey(sig.Id)) { ob = new ObjectOvation(sig.Id, code); _objectsId.Add(sig.Id, ob); if (_parts.Count == 0 || _parts[_parts.Count - 1].Count == 200) { _parts.Add(new List <ProviderObject>()); } _parts[_parts.Count - 1].Add(_objectsId[sig.Id]); } ob = _objectsId[sig.Id]; if (sig.IsState) //Слово состояния { if (ob.StateSignal == null) { ProviderSignals.Add(sig.Code, sig); } return(ob.StateSignal ?? (ob.StateSignal = sig)); } if (sig.Bit == -1)//Аналоговый или дискретный { if (ob.ValueSignal == null) { ProviderSignals.Add(sig.Code, sig); } return(ob.ValueSignal ?? (ob.ValueSignal = sig)); } if (!ob.BitSignals.ContainsKey(sig.Bit))//Бит упакованного { ProviderSignals.Add(sig.Code, sig); ob.BitSignals.Add(sig.Bit, sig); } return(ob.BitSignals[sig.Bit]); }