public static void PurgeSignalByCount(SNetTSignalSecSetF8 tSignal, int Count) { while (tSignal.Signals.Count > Count) { tSignal.RemoveFirst(); } }
/// <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(); }
//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); } } }
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); } }
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); } }
//public virtual void ReadStream(StreamReader sr, SNetSignalCollector collector) //{ // throw new NotImplementedException(); //} public virtual void ReadTSignal(StreamReader sr, SNetTSignalSecSetF8 tSignal) { throw new NotImplementedException(); }