Esempio n. 1
0
 //Чтение значений
 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);
     }
 }
Esempio n. 2
0
        //Чтение данных
        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;
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        //Формирует список блоков для чтения сигналов из словаря сигналов
        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);
        }
Esempio n. 4
0
 //Чтение одного периода длиной сутки или меньше
 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;
             }
         }
     }
 }
Esempio n. 5
0
        //добавить книгу в 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();
        }
Esempio n. 6
0
        //Запрос значений по одному блоку сигналов
        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);
        }
Esempio n. 7
0
    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;
    }
Esempio n. 8
0
        //Чтение значений
        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);
            }
        }
Esempio n. 9
0
 protected virtual void OnEndRead(FileReadWriteEventArgs e) // Инициализатор события EndRead.
 {
     EndRead?.Invoke(this, e);
 }
Esempio n. 10
0
        //Чтение значений
        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);
            }
        }