Beispiel #1
0
 //Подготовка сигналов
 public void Prepare()
 {
     try
     {
         if (CloneFile.IsEmpty())
         {
             return;
         }
         Logger.AddEvent("Установка отметок для считываемых сигналов");
         _signalsId.Clear();
         _signalsStrId.Clear();
         using (var rec = new RecDao(CloneFile, "SELECT SignalId, FullCode, Otm FROM Signals"))
             while (rec.Read())
             {
                 string code = rec.GetString("FullCode");
                 if (!ProviderSignals.ContainsKey(code))
                 {
                     rec.Put("Otm", false);
                 }
                 else
                 {
                     rec.Put("Otm", true);
                     (ProviderSignals[code].DataType.LessOrEquals(DataType.Real) ? _signalsId : _signalsStrId)
                     .Add(rec.GetInt("SignalId"), ProviderSignals[code]);
                 }
             }
     }
     catch (Exception ex)
     {
         Logger.AddError("Ошибка при подготовке сигналов", ex);
     }
 }
Beispiel #2
0
 //Получение диапазона клона
 public TimeInterval GetTime()
 {
     if (CloneFile.IsEmpty())
     {
         return(new TimeInterval(Different.MinDate, Different.MaxDate));
     }
     using (var sys = new SysTabl(CloneFile))
     {
         TimeIntervals.Clear();
         var t = new TimeInterval(sys.Value("BeginInterval").ToDateTime(), IsHandInput ? DateTime.Now : sys.Value("EndInterval").ToDateTime());
         TimeIntervals.Add(t);
         return(t);
     }
 }
Beispiel #3
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);
            }
        }