//Чтение данных из Historian за период public override void GetValues() { foreach (var sig in ProviderSignals.Values) { sig.Value.Moments.Clear(); } using (Logger.Start(0, 40)) Logger.Danger(() => GetVals(BeginRead.AddMinutes(-30), BeginRead, true), 3, 30000, "Ошибка при чтении из базы данных МИР"); using (Logger.Start(40)) Logger.Danger(() => GetVals(BeginRead, EndRead, false), 3, 30000, "Ошибка при чтении из базы данных МИР"); }
//Чтение значений public override void GetValues() { try { DateTime beg = BeginRead.AddMinutes(-BeginRead.Minute).AddSeconds(-BeginRead.Second - 1); DateTime en = EndRead.AddSeconds(1); using (var db = new DaoDb(_db)) { foreach (var tableName in _objects.Keys) { Logger.AddEvent("Чтение значений из таблицы " + tableName + "_ARCHIVE"); using (var rec = new RecDao(db, "SELECT * FROM " + tableName + "_ARCHIVE " + "WHERE (TYPE = 0) AND (Время >= " + beg.ToAccessString() + ") AND (Время <= " + en.ToAccessString() + ")")) while (rec.Read()) { int id = rec.GetInt("PARENT_ID"); if (_objectsId.ContainsKey(id)) { var ob = _objectsId[id]; foreach (var sigCode in ob.Signals.Keys) { ob.Signals[sigCode].AddMoment(rec.GetTime("Время"), rec.GetDouble(sigCode)); } } } } foreach (var tableName in _totals.Keys) { Logger.AddEvent("Чтение значений из таблицы " + tableName + "_TOTALS"); using (var rec = new RecDao(db, "SELECT * FROM " + tableName + "_TOTALS " + "WHERE (Время >= " + beg.ToAccessString() + ") AND (Время <= " + en.ToAccessString() + ")")) while (rec.Read()) { int id = rec.GetInt("PARENT_ID"); if (_totalsId.ContainsKey(id)) { var ob = _totalsId[id]; foreach (var sigCode in ob.Signals.Keys) { ob.Signals[sigCode].AddMoment(rec.GetTime("Время"), rec.GetDouble(sigCode)); } } } } } } catch (Exception ex) { Logger.AddError("Ошибка при чтении данных из файла программы Пролог", ex); } }
//Чтение значений из источника public override void GetValues() { try { if (!IsConnected && !Connect()) { return; } Logger.AddEvent("Чтение значений из Historian", _objectsId.Count + " объектов"); foreach (var ps in Signals.Values) { ps.Value.Moments.Clear(); } var lens = new[] { 4, 61 }; for (int i = 0; i < lens.Length; i++) { var bparts = new List <List <ProviderObject> >(); foreach (var ob in _objectsId.Values) { if (!ob.HasBegin(BeginRead)) { if (bparts.Count == 0 || bparts[bparts.Count - 1].Count == 200) { bparts.Add(new List <ProviderObject>()); } bparts[bparts.Count - 1].Add(ob); } } if (bparts.Count > 0) { Logger.AddEvent("Получение среза значений по " + lens[i] + " минутам"); _b = BeginRead.AddMinutes(-lens[i]); _e = BeginRead; using (Logger.Start(i * 20 - 20, i * 20)) ReadValuesByParts(GetValuesRecordset, FormObjectBegin, bparts); } } foreach (var sig in ProviderSignals.Values) { if (sig.BeginMoment != null) { NumWrite += sig.AddBegin(BeginRead); //ab Добавлен параметр BeginRead } } Logger.AddEvent("Получение изменений значений", _objectsId.Values.Count + " объектов"); _b = BeginRead; _e = EndRead; using (Logger.Start(40, 90)) ReadValuesByParts(GetValuesRecordset, FormObjectChanges, _parts); int w = 0; foreach (var sig in ProviderSignals.Values) { w += sig.MakeEnd(EndRead); } int r = _objectsId.Values.Count(ob => !ob.HasBegin(EndRead)); NumWrite += w; Logger.AddEvent("Чтение значений из Historian завершено", "Добавлено " + w + " значений в конец. " + r + " неопределенных срезов"); } catch (Exception ex) { Logger.AddError("Ошибка при получении значений из Historian", ex); IsConnected = false; } }