예제 #1
0
 public static void PurgeSignalByCount(SNetTSignalSecSetF8 tSignal, int Count)
 {
     while (tSignal.Signals.Count > Count)
     {
         tSignal.RemoveFirst();
     }
 }
예제 #2
0
        /// <summary>
        /// 簡易處理方式, 多段時間同時輸入時, 請自行分段輸入.
        /// </summary>
        /// <param name="tSignal">原始訊號來源</param>
        /// <param name="newSignals">本次要新增的訊號</param>
        protected virtual void ProcAndPushData(SNetTSignalSecSetF8 tSignal, SNetTSignalSecF8 newSignals)
        {
            if (!this.IsEnalbed)
            {
                return;
            }
            this.Purge();//先Purge, 避免Exception造成沒有Purge


            var ea = new SNetTdSignalSecSetF8EventArg();

            ea.Sender = this;
            var time = newSignals.Time.HasValue ? newSignals.Time.Value : DateTime.Now;

            ea.Time          = time;
            ea.TSignalSource = tSignal;
            ea.PrevTime      = this.PrevTime;

            ea.TSignalNew.Add(time, newSignals.Signals);
            tSignal.Add(time, newSignals.Signals);
            this.OnDataChange(ea);

            this.PrevTime = time;
            this.Purge();
        }
예제 #3
0
        //public override void ReadStream(StreamReader sr, SNetSignalCollector collector)
        //{
        //    SNetSignalPerSec tfbps = null;
        //    for (var line = sr.ReadLine(); line != null; line = sr.ReadLine())
        //    {
        //        //切割資料
        //        var vals = line.Split(',');
        //        if (vals.Length < 2) continue;

        //        //第一筆為 timestamp
        //        var dt = new DateTime(0);
        //        if (!DateTime.TryParseExact(vals[0], TimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) continue;


        //        if (tfbps == null)
        //        {
        //            tfbps = new SNetSignalPerSec();
        //            //tfbps.dt = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);//去掉豪秒數, 只有timestamp有這問題
        //            tfbps.dt = dt;
        //        }
        //        else if ((dt - tfbps.dt).TotalSeconds >= 1.0)
        //        {//若時間變更超過一秒, 就加一個物件來儲存
        //            collector.AddLast(tfbps);
        //            tfbps = new SNetSignalPerSec();
        //            tfbps.dt = dt;
        //        }

        //        for (int idx = 1; idx < vals.Length; idx++)
        //        {
        //            var data = 0.0;
        //            if (!double.TryParse(vals[idx], out data)) continue;
        //            tfbps.signals.Add(data);
        //        }

        //    }

        //    //最後一個物件也要儲存進去
        //    if (tfbps.signals.Count > 0 && collector.LastOrDefault() != tfbps)
        //        collector.AddLast(tfbps);


        //}


        public override void ReadTSignal(StreamReader sr, SNetTSignalSecSetF8 tSignal)
        {
            var signals = new List <double>();

            for (var line = sr.ReadLine(); line != null; line = sr.ReadLine())
            {
                //切割資料
                var vals = line.Split(',');
                if (vals.Length < 2)
                {
                    continue;
                }

                //第一筆為 time
                var dt = new DateTime(0);
                if (!DateTime.TryParseExact(vals[0], TimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
                {
                    continue;
                }

                var time = (CtkTimeSecond)dt;
                signals = tSignal.GetOrCreate(time);


                for (int idx = 1; idx < vals.Length; idx++)
                {
                    var val = 0.0;
                    if (!double.TryParse(vals[idx], out val))
                    {
                        continue;
                    }
                    signals.Add(val);
                }
            }
        }
예제 #4
0
        public static void PurgeSignalByTime(SNetTSignalSecSetF8 tSignal, CtkTimeSecond time)
        {
            var now   = DateTime.Now;
            var query = tSignal.Signals.Where(x => x.Key < time).ToList();

            foreach (var row in query)
            {
                tSignal.Signals.Remove(row.Key);
            }
        }
예제 #5
0
        public static void PurgeSignalByTime(SNetTSignalSecSetF8 tSignal, CtkTimeSecond start, CtkTimeSecond end)
        {
            var now   = DateTime.Now;
            var query = (from row in tSignal.Signals
                         where row.Key <start || row.Key> end
                         select row).ToList();

            foreach (var row in query)
            {
                tSignal.Signals.Remove(row.Key);
            }
        }
예제 #6
0
        //public virtual void ReadStream(StreamReader sr, SNetSignalCollector collector)
        //{
        //    throw new NotImplementedException();
        //}

        public virtual void ReadTSignal(StreamReader sr, SNetTSignalSecSetF8 tSignal)
        {
            throw new NotImplementedException();
        }