//Чтение значений 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 List <List <ProviderObject> > MakeParts(Dictionary <ObjectIndex, ObjectKosm> dic) { var parts = new List <List <ProviderObject> >(); try { double len = EndRead.Subtract(BeginRead).TotalHours; if (len > 24) { len = 24; } int maxj = 3000; if (this is KosmotronikaArchDbSource) { maxj = 25; } else { if (len > 0.0001) { maxj = Math.Min(3000, Convert.ToInt32(2500 / len)); } if (maxj == 0) { maxj = 1; } } foreach (var ob in dic.Values) { if (parts.Count == 0 || parts[parts.Count - 1].Count == maxj) { parts.Add(new List <ProviderObject>()); } parts[parts.Count - 1].Add(ob); } } catch (Exception ex) { Logger.AddError("Ошибка при разделении списка сигналов на блоки", ex); } return(parts); }
//Чтение одного периода длиной сутки или меньше private void ReadOnePeriod(List <List <ProviderObject> > parts) { using (Logger.Start(30)) { _periodBegin = BeginRead; _periodEnd = Different.MinDate; double d = 100.0 / (EndRead.Subtract(BeginRead).Add(new TimeSpan(0, 0, 0, 0, -1)).TotalDays + 1); double p = 0; while (_periodEnd < EndRead) { using (Logger.Start(p, p + d)) { _periodEnd = _periodBegin.AddDays(1).AddMilliseconds(1) > EndRead ? EndRead : _periodBegin.AddDays(1); ReadValuesByParts(ReadPartValues, FormPartValues, parts); _periodBegin = _periodEnd; p += d; } } } }
//добавить книгу в EndRead public async Task AddBookEnd(int IdUser, int IdBook, int numberPage, int rate) { int idPage = await AddPage(numberPage); await ChangeOurRating(IdBook, rate); EndRead end = new EndRead(); end.IdBook = IdBook; end.IdPage = idPage; end.IdUserLiber = IdUser; end.Page = await context.Page.FirstOrDefaultAsync(p => p.Id == idPage); end.Book = await context.Book.FirstOrDefaultAsync(b => b.Id == IdBook); end.UserLiber = await context.UserLiber.FirstOrDefaultAsync(u => u.Id == IdUser); await context.EndRead.AddAsync(end); await context.SaveChangesAsync(); }
//Запрос значений по одному блоку сигналов 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) { EndRead objTest = new EndRead(); 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 (CloneFile.IsEmpty()) { return; } bool needCut = false; foreach (var sig in ProviderSignals.Values) { sig.Value.Moments.Clear(); needCut |= sig.BeginMoment == null || Math.Abs(sig.BeginMoment.Time.Subtract(BeginRead).TotalSeconds) > 0.5; } DateTime beg = BeginRead; var t = GetTime(); if (needCut) { beg = IsHandInput ? Different.MinDate : (beg.AddMinutes(-10) <= t.Begin ? t.Begin.AddSeconds(-1) : beg.AddMinutes(-10)); } int nread = 0, nwrite = 0; if (_signalsId.Count > 0) { Logger.AddEvent("Открытие рекордсета значений"); using (var rec = new ReaderAdo(CloneFile, "SELECT MomentsValues.SignalId as SignalId, Value, Time, Nd FROM MomentsValues INNER JOIN Signals ON Signals.SignalId = MomentsValues.SignalId " + "WHERE (Signals.Otm=True) AND (Time >= " + beg.ToAccessString() + ") AND (Time <= " + EndRead.ToAccessString() + ") ORDER BY Time, MomentsValues.SignalId")) { Logger.AddEvent("Чтение значений из рекордсета", _signalsId.Count + " сигналов"); while (rec.Read() && rec.GetTime("Time") <= BeginRead) { var sig = _signalsId[rec.GetInt("SignalId")]; sig.AddMoment(new Moment(sig.DataType, rec.GetDouble("Value"), rec.GetTime("Time"), rec.GetInt("Nd")), true); nread++; } foreach (var sig in _signalsId.Values) { nwrite += sig.AddBegin(); } while (!rec.EOF) { nread++; var sig = _signalsId[rec.GetInt("SignalId")]; nwrite += sig.AddMoment(new Moment(sig.DataType, rec.GetDouble("Value"), rec.GetTime("Time"), rec.GetInt("Nd"))); rec.Read(); } } } if (_signalsStrId.Count > 0) { Logger.AddEvent("Открытие рекордсета строковых значений"); using (var rec = new ReaderAdo(CloneFile, "SELECT MomentsStrValues.SignalId as SignalId, StrValue, TimeValue, Time, Nd FROM MomentsStrValues INNER JOIN Signals ON Signals.SignalId = MomentsStrValues.SignalId " + "WHERE (Signals.Otm=True) AND (Time >= " + beg.ToAccessString() + ") AND (Time < " + EndRead.ToAccessString() + ") ORDER BY Time, MomentsStrValues.SignalId")) if (rec.HasRows()) { Logger.AddEvent("Чтение строковых значений из рекордсета", _signalsStrId.Count + " сигналов"); while (rec.Read() && rec.GetTime("Time") <= BeginRead) { var sig = _signalsStrId[rec.GetInt("SignalId")]; if (sig.DataType == DataType.Time) { sig.AddMoment(rec.GetTime("Time"), rec.GetTime("TimeValue"), rec.GetInt("Nd"), true); } else { sig.AddMoment(rec.GetTime("Time"), rec.GetString("StrValue"), rec.GetInt("Nd"), true); } nread++; } foreach (var sig in _signalsStrId.Values) { nwrite += sig.AddBegin(); } while (!rec.EOF) { nread++; var sig = _signalsStrId[rec.GetInt("SignalId")]; if (sig.DataType == DataType.Time) { nwrite += sig.AddMoment(rec.GetTime("Time"), rec.GetTime("TimeValue"), rec.GetInt("Nd")); } else { nwrite += sig.AddMoment(rec.GetTime("Time"), rec.GetString("StrValue"), rec.GetInt("Nd")); } rec.Read(); } } } if (CloneRec != null) { foreach (var sig in ProviderSignals.Values) { nwrite += sig.MakeEnd(EndRead); } } Logger.AddEvent("Чтение значений завершено", nread + " значений прочитано, " + nwrite + " значений сформировано"); } catch (Exception ex) { Logger.AddError("Ошибка при попытке прочитать" + _cloneFileType, ex); } }
protected virtual void OnEndRead(FileReadWriteEventArgs e) // Инициализатор события EndRead. { EndRead?.Invoke(this, e); }
//Чтение значений public override void GetValues() { try { bool needCut = false; foreach (var sig in ProviderSignals.Values) { sig.Value.Moments.Clear(); needCut |= sig.BeginMoment == null || Math.Abs(sig.BeginMoment.Time.Subtract(BeginRead).TotalSeconds) > 0.5; } DateTime beg = needCut ? Different.MinDate : BeginRead; int nread = 0, nwrite = 0; if (_signalsId.Count > 0) { Logger.AddEvent("Открытие рекордсета значений"); using (var rec = new ReaderAdo(SqlProps, "SELECT MomentsValues.SignalId as SignalId, Value, Time, Nd FROM MomentsValues INNER JOIN Signals ON Signals.SignalId = MomentsValues.SignalId " + "WHERE (Time >= " + beg.ToSqlString() + ") AND (Time <= " + EndRead.ToSqlString() + ") ORDER BY Time, MomentsValues.SignalId")) { Logger.AddEvent("Чтение значений из рекордсета", _signalsId.Count + " сигналов"); while (rec.Read() && rec.GetTime("Time") <= BeginRead) { var sig = _signalsId[rec.GetInt("SignalId")]; sig.AddMoment(new Moment(sig.DataType, rec.GetDouble("Value"), rec.GetTime("Time"), rec.GetInt("Nd")), true); nread++; } foreach (var sig in _signalsId.Values) { nwrite += sig.AddBegin(); } while (!rec.EOF) { nread++; var sig = _signalsId[rec.GetInt("SignalId")]; nwrite += sig.AddMoment(new Moment(sig.DataType, rec.GetDouble("Value"), rec.GetTime("Time"), rec.GetInt("Nd"))); rec.Read(); } } } if (_signalsStrId.Count > 0) { Logger.AddEvent("Открытие рекордсета строковых значений"); using (var rec = new ReaderAdo(SqlProps, "SELECT MomentsStrValues.SignalId as SignalId, StrValue, TimeValue, Time, Nd FROM MomentsStrValues INNER JOIN Signals ON Signals.SignalId = MomentsStrValues.SignalId " + "WHERE (Time >= " + beg.ToSqlString() + ") AND (Time < " + EndRead.ToSqlString() + ") ORDER BY Time, MomentsStrValues.SignalId")) if (rec.HasRows()) { Logger.AddEvent("Чтение строковых значений из рекордсета", _signalsStrId.Count + " сигналов"); while (rec.Read() && rec.GetTime("Time") <= BeginRead) { var sigId = rec.GetInt("SignalId"); if (!_signalsStrId.ContainsKey(sigId)) { Logger.AddEvent("Не понятный SignalId", sigId.ToString()); } var sig = _signalsStrId[sigId]; if (sig.DataType == DataType.Time) { sig.AddMoment(rec.GetTime("Time"), rec.GetTime("TimeValue"), rec.GetInt("Nd"), true); } else { sig.AddMoment(rec.GetTime("Time"), rec.GetString("StrValue"), rec.GetInt("Nd"), true); } nread++; } foreach (var sig in _signalsStrId.Values) { nwrite += sig.AddBegin(); } while (!rec.EOF) { nread++; var sig = _signalsStrId[rec.GetInt("SignalId")]; if (sig.DataType == DataType.Time) { nwrite += sig.AddMoment(rec.GetTime("Time"), rec.GetTime("TimeValue"), rec.GetInt("Nd")); } else { nwrite += sig.AddMoment(rec.GetTime("Time"), rec.GetString("StrValue"), rec.GetInt("Nd")); } rec.Read(); } } } if (CloneRec != null) { foreach (var sig in ProviderSignals.Values) { nwrite += sig.MakeEnd(EndRead); } } Logger.AddEvent("Чтение значений завершено", nread + " значений прочитано, " + nwrite + " значений сформировано"); } catch (Exception ex) { Logger.AddError("Ошибка при попытке прочитать значения ручного ввода", ex); } }