//Формирование значений по одному блоку сигналов private KeyValuePair <int, int> FormPartValues() { int nread = 0, nwrite = 0; //var set = new HashSet<int>(); using (_rec) while (_rec.Read()) { SimaticObject ob = null; try { int id = _rec.GetInt("ValueId"); //0 if (_objectsId.ContainsKey(id)) { ob = _objectsId[id]; DateTime time = _rec.GetTime("TimeStamp").ToLocalTime(); //1 if (!_isCut || time <= BeginRead) { int quality = _rec.GetInt("Quality");//3 int nd = quality == 128 ? 0 : 1; nread++; if (ob.SignalValue != null) { nwrite += ob.SignalValue.AddMoment(ob.SignalValue.DataType, time, _rec.Reader["RealValue"], nd, _isCut); //2 } if (ob.SignalQuality != null) { nwrite += ob.SignalQuality.AddMoment(time, quality, 0, _isCut); } if (ob.SignalFlags != null) { nwrite += ob.SignalFlags.AddMoment(time, _rec.GetInt("Flags"), nd, _isCut); //4 } } } } catch (Exception ex) { AddErrorObject(ob == null ? "" : ob.Tag, "Ошибка при чтении значений из рекордсета", ex); } } foreach (var sig in ProviderSignals.Values) { if (sig.BeginMoment != null) { NumWrite += sig.AddBegin(BeginRead); //ab было без параметра } } return(new KeyValuePair <int, int>(nread, nwrite)); }
//Добавить сигнал в провайдер public ProviderSignal AddSignal(string signalInf, string code, DataType dataType, int idInClone = 0) { var sig = new SimaticSignal(signalInf, code, dataType, this, idInClone); if (!_objectsId.ContainsKey(sig.Id)) { var ob = new SimaticObject(sig); _objectsId.Add(sig.Id, ob); if (_parts.Count == 0 || _parts[_parts.Count - 1].Count == 500) { _parts.Add(new List <ProviderObject>()); } _parts[_parts.Count - 1].Add(ob); ProviderSignals.Add(sig.Code, sig); return(sig); } var addsig = _objectsId[sig.Id].AddSignal(sig); return(ProviderSignals.Add(addsig.Code, addsig)); }