//Чтение данных из 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, "Ошибка при чтении из базы данных МИР"); }
//Запрос значений по одному блоку сигналов private bool ReadPartValues(List <ProviderObject> part) { var sb = new StringBuilder("TAG:R, "); if (part.Count == 1) { sb.Append(((SimaticObject)part[0]).Id); } else { sb.Append("(").Append(((SimaticObject)part[0]).Id); for (int i = 1; i < part.Count; i++) { sb.Append(";").Append(((SimaticObject)part[i]).Id); } sb.Append(";-2)"); } DateTime beg = _isCut ? BeginRead.AddSeconds(-60) : BeginRead; DateTime en = _isCut ? BeginRead.AddSeconds(10) : EndRead; sb.Append(", ").Append(beg.ToSimaticString()); sb.Append(", ").Append(en.ToSimaticString()); //sb.Append(", ").Append(BeginRead.ToSimaticString()).Append(", "); //if (!_isCut) sb.Append(EndRead.ToSimaticString()); //else //Срез, интервал 9 - секунд, 257 (FIRST_INTERPOLATED) - первое значение за период, полученное через линейную интерполяцию //sb.Append(BeginRead.AddSeconds(8).ToSqlString()).Append(", 'TIMESTEP=9,257'"); Logger.AddEvent("Запрос значений из архива", part.Count + " тегов"); _rec = new ReaderAdo(_conn, sb.ToString()); Logger.AddEvent("Запрос из архива отработал"); return(true); //Прерывание запроса к архиву по таймауту /*_isReady = false; * var t = new Thread(() => * { * _rec = new ReaderAdo(_conn, sb.ToString()); * lock (_isReadyLock) _isReady = true; * }); * t.Start(); * for (int i = 0; i < 2000; i++) * { * t.Join(100); * lock (_isReadyLock) * if (_isReady) return true; * } * t.Abort(); * return false;*/ }
//Чтение значений 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() { var builder = new StringBuilder("SELECT * FROM nodes_history"); builder.Append(" WHERE (nodes_history.time BETWEEN "); builder.Append(BeginRead.ToSimaticString()).Append(" AND "); builder.Append(EndRead.ToSimaticString()).Append(")"); builder.Append(" AND nodes_history.NodeId"); builder.Append(GetSignalsConditionString()); Logger.AddEvent("Запрос значений из Historian", ProviderSignals.Count + " сигналов"); using (var connection = new OdbcConnection(_connectionString)) { connection.Open(); var cmd = new OdbcCommand(builder.ToString(), connection) { CommandType = CommandType.Text }; using (var rec = cmd.ExecuteReader()) { Logger.Procent = 30; Logger.AddEvent("Чтение значений из базы"); while (rec.Read()) { var sig = _signalsById[Convert.ToInt32(rec["NodeId"])]; DateTime time = Convert.ToDateTime(rec["Time"]); time = time.ToLocalTime(); switch (sig.DataType) { case DataType.Boolean: sig.AddMoment(time, Convert.ToBoolean(rec["ValBool"])); break; case DataType.Integer: sig.AddMoment(time, Convert.ToInt32(rec["ValInt"])); break; case DataType.Real: sig.AddMoment(time, Convert.ToDouble(rec["ValDouble"])); break; } } } } }
//Запрос значений по одному блоку сигналов private bool ReadPartValues(List <ProviderObject> part) { string queryString = "SELECT TagName, DateTime = convert(nvarchar, DateTime, 21), Value, vValue, Quality, QualityDetail FROM History WHERE TagName IN ("; for (var n = 0; n < part.Count; n++) { if (n != 0) { queryString += ", "; } var ob = (ObjectWonderware)part[n]; queryString += "'" + ob.TagName + "'"; } queryString += ") AND wwRetrievalMode = 'Delta'"; bool isCut = BeginRead.ToSqlString() == EndRead.ToSqlString(); queryString += " AND DateTime >= " + BeginRead.ToSqlString() + " AND DateTime " + (isCut ? "<=" : "<") + EndRead.ToSqlString() + " ORDER BY DateTime"; Logger.AddEvent("Запрос значений из Historian", part.Count + " тегов"); _rec = new ReaderAdo(SqlProps, queryString, 10000); return(true); }
public static void Main(string[] args) { BeginRead objTest = new BeginRead(); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(objTest.AppDomainUnhandledException_EventHandler); Console.WriteLine(s_strTFPath + " " + s_strTFName + " , for " + s_strClassMethod + " , Source ver : " + s_strDtTmVer); try { objTest.RunTest(); } catch (Exception e) { Console.WriteLine(s_strTFAbbrev + " : FAIL The following exception was thorwn in RunTest(): \n" + e.ToString()); objTest._numErrors++; objTest._exitValue = TCSupport.FailExitCode; } //// Finish Diagnostics if (objTest._numErrors == 0) { Console.WriteLine("PASS. "+ s_strTFPath + " " + s_strTFName + " ,numTestcases==" + objTest._numTestcases); } else { Console.WriteLine("FAIL! "+ s_strTFPath + " " + s_strTFName + " ,numErrors==" + objTest._numErrors); if (TCSupport.PassExitCode == objTest._exitValue) { objTest._exitValue = TCSupport.FailExitCode; } } Environment.ExitCode = objTest._exitValue; }
//Чтение значений из источника 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; } }
//Чтение значений public override void GetValues() { try { ClearValues(); foreach (var it in _intervalTypes) { _report.IntervalsForRead.Add(new ArchiveInterval(it, it != IntervalType.Moments || BeginRead == _endPrevious ? BeginRead : BeginRead.AddHours(-1), EndRead)); } Archive.ReadReport(_report); foreach (var proj in _reportParams.Keys) { foreach (var code in _reportParams[proj].Keys) { foreach (var q in _reportParams[proj][code].Queries) { var sv = q.Value.SingleValue; var sig = _signalsDic[proj][code][q.Key]; if (sv.Moment != null) { sig.AddMoment(sv.Moment, false, false, false); } else if ((q.Value.Interval == null || q.Value.Interval.Type != IntervalType.Moments) && sv.Moments != null) { for (int i = 0; i < sv.Moments.Count; i++) { sig.AddMoment(q.Key != IntervalType.AbsoluteDay ? sv.Moments[i] : sv.Moments[i].Clone(q.Value.Intervals[i].End), false, false, false); } } else { if (sv.Moments != null && sv.Moments.Count > 0) { int i = 0; while (sv.Moments[i].Time <= BeginRead) { sig.AddMoment(sv.Moments[i++], true); } sig.AddBegin(); while (i < sv.Moments.Count) { sig.AddMoment(sv.Moments[i++]); } sig.MakeEnd(EndRead); } } } } } _endPrevious = EndRead; } catch (Exception ex) { Logger.AddError("Ошибка при получении данных из архива", ex); } }