Example #1
0
 //Чтение данных из 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, "Ошибка при чтении из базы данных МИР");
 }
Example #2
0
        //Запрос значений по одному блоку сигналов
        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;*/
        }
Example #3
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);
     }
 }
Example #4
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;
                        }
                    }
                }
            }
        }
Example #5
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);
        }
Example #6
0
    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;
    }
Example #7
0
 //Чтение значений из источника
 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;
     }
 }
Example #8
0
 //Чтение значений
 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);
     }
 }