예제 #1
0
        //Чтение значений из рекордсета по одному блоку
        private ValuesCount ReadPartValues(IRecordRead rec)
        {
            var vc = new ValuesCount();

            while (rec.Read())
            {
                vc.ReadCount++;
                ListSourceOut ob = null;
                try
                {
                    ob = _defineObjectFun(rec);
                    if (ob != null)
                    {
                        vc.WriteCount += ob.ReadMoments(rec);
                    }
                    vc.AddStatus(VcStatus.Success);
                }
                catch (Exception ex)
                {
                    AddErrorOut(ob == null ? "" : ob.Context, "Ошибка при чтении значений из рекордсета", ex);
                    vc.AddStatus(VcStatus.NoSuccess);
                }
            }
            return(vc);
        }
예제 #2
0
 //Чтение мгновенных значений из таблицы
 public void ReadMoments(IRecordRead rec)
 {
     while (!rec.EOF && rec.GetInt("ImitId") == ImitId)
     {
         if (!IsConstant)
         {
             var    mv    = new Moment(DataType, rec.GetDouble("Value"), rec.GetTime("Time"), rec.GetInt("Nd"));
             var    last  = _moments.Count == 0 ? null : _moments[_moments.Count - 1];
             double rtime = rec.GetDouble("RelativeTime");
             if ((last == null || last.Time < mv.Time) && rtime >= 0 && rtime < _intervalLength)
             {
                 _moments.Add(mv);
             }
         }
         rec.Read();
     }
 }
예제 #3
0
 public Grafic(IRecordRead recg, ThreadCalc thread)
     : base(recg.GetInt("Dimension"), 0)
 {
     Code       = recg.GetString("Code");
     GraficType = recg.GetString("GraficType").ToGraficType();
     ThreadCalc = thread;
     while (!recg.EOF && recg.GetString("Code").ToLower() == Code.ToLower())
     {
         try
         {
             ReadPoint(recg);
             recg.Read();
         }
         catch (Exception ex)
         {
             thread.AddError("Ошибка загрузки графика", ex, "График=" + Code);
         }
     }
 }
예제 #4
0
        //Чтение значений из одного рекордсета оригинала или клона по списку сигналов
        private int ReadValuesList(IRecordRead rec, IEnumerable <ObjectOvation> objects)
        {
            int m = 0;

            while (rec.Read())
            {
                var id = rec.GetInt("Id");
                if (_objectsId.ContainsKey(id))
                {
                    m++;
                    var ob = _objectsId[id];
                    if (ob.StateSignal != null)
                    {
                        var mv = new Moment(DataType.Integer, Stat(rec), Time(rec));
                        if (mv.Time <= _begin)
                        {
                            ob.StatBegin = mv;
                        }
                        else
                        {
                            AddValueToList(ob.StateSignal.Value.Moments, mv);
                        }
                        ob.StatEnd = mv;
                    }
                    if (ob.IsValue)
                    {
                        var mv = new Moment(ob.DataType, Mean(rec), Time(rec), Nd(rec));
                        if (mv.Time <= _begin)
                        {
                            ob.ValueBegin = mv;
                        }
                        else
                        {
                            if (ob.ValueSignal != null)
                            {
                                AddValueToList(ob.ValueSignal.Value.Moments, mv);
                            }
                            if (ob.BitSignals != null && ob.BitSignals.Count != 0)
                            {
                                foreach (var b in ob.BitSignals.Keys)
                                {
                                    AddValueToList(ob.BitSignals[b].Value.Moments, new Moment(mv.Time, (mv.Integer & (1 << b)) != 0, null, mv.Nd));
                                }
                            }
                        }
                        ob.ValueEnd = mv;
                    }
                }
            }
            foreach (var ob in objects)
            {
                if (ob.StatBegin != null)
                {
                    ob.StateSignal.Value.Moments.Insert(0, ob.StatBegin);
                }
                if (ob.StatEnd != null)
                {
                    ob.StatEnd = ob.StatEnd.Clone(_end);
                }
                if (ob.ValueBegin != null)
                {
                    if (ob.ValueSignal != null)
                    {
                        ob.ValueSignal.Value.Moments.Insert(0, ob.ValueBegin);
                    }
                    if (ob.BitSignals.Count != 0)
                    {
                        foreach (var b in ob.BitSignals.Keys)
                        {
                            var mb = new Moment(_begin, (ob.ValueBegin.Integer & (1 << b)) != 0, null, ob.ValueBegin.Nd);
                            ob.BitSignals[b].Value.Moments.Insert(0, mb);
                        }
                    }
                }
                if (ob.ValueEnd != null)
                {
                    ob.ValueEnd = ob.ValueEnd.Clone(_end);
                }
            }
            return(m);
        }
예제 #5
0
 //Получение среза значений
 private void GetBeginValues()
 {
     try
     {
         int d = 4;
         int n = ParamsWithCut(), m = 0;
         while (d <= 60 && n > 0)
         {
             DateTime beg = _begin.AddMinutes(-d);
             foreach (List <ObjectOvation> part in _objectsParts)
             {
                 var list = part.Where(ob => ob.ValueBegin == null).ToList();
                 if (list.Count > 0)
                 {
                     Logger.AddEvent("Чтение среза значений по " + d + " минутам", list.Count + " сигналов");
                     if (RunCommand(list, beg, _begin))
                     {
                         Logger.Procent += 15.0 / _objectsParts.Count;
                         Logger.AddEvent("Распределение значений по сигналам");
                         while (_histReader.Read())
                         {
                             m++;
                             int id = _histReader.GetInt("ID");
                             if (_objectsId.ContainsKey(id))
                             {
                                 var ob = _objectsId[id];
                                 if (ob.IsValue)
                                 {
                                     if (ob.ValueBegin == null)
                                     {
                                         n--;
                                     }
                                     ob.ValueBegin = new Moment(ob.DataType, Mean(_histReader), _begin, Nd(_histReader));
                                     ob.ValueEnd   = ob.ValueBegin;
                                 }
                                 if (ob.StateSignal != null)
                                 {
                                     if (ob.StatBegin == null)
                                     {
                                         n--;
                                     }
                                     ob.StatBegin = new Moment(DataType.Integer, Stat(_histReader));
                                     ob.StatEnd   = ob.StatBegin;
                                 }
                             }
                         }
                         _histReader.Dispose();
                     }
                 }
                 Logger.Procent += 15.0 / _objectsParts.Count;
             }
             d *= 15;
         }
         Logger.AddEvent("Значения прочитаны", m + " значений, " + n + " неопределенных срезов");
     }
     catch (Exception ex)
     {
         AddError("Ошибка при чтении из Historian", ex);
         IsConnected = false;
     }
 }