/// <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 void TgInput(object sender, SNetTdSignalSecSetF8EventArg ea) { if (!this.IsEnalbed) { return; } this.OnDataChange(ea); }
public void Input(object sender, SNetTdEventArg e) { if (!this.IsEnalbed) { return; } var myea = e as SNetTdSignalSecSetF8EventArg; if (myea == null) { throw new SNetException("尚未無法處理此類資料: " + e.GetType().FullName); } if (!myea.PrevTime.HasValue) { return; } if (myea.Time == myea.PrevTime.Value) { return; } var t = myea.PrevTime.Value; this.Purge();//先Purge, 避免Exception造成沒有Purge //取得時間變更前的時間資料 IList <double> signalData = myea.TSignalSource.GetOrCreate(t); signalData = CtkNumUtil.InterpolationForce(signalData, this.SampleRate); var ctkNumContext = CtkNumContext.GetOrCreate(); var comp = ctkNumContext.FftForward(signalData); var fftData = new double[comp.Length]; Parallel.For(0, comp.Length, (idx) => { fftData[idx] = comp[idx].Magnitude; }); this.TSignalSet.Set(t, fftData.ToList()); var ea = new SNetTdSignalSecSetF8EventArg(); ea.Sender = this; ea.PrevTime = this.PrevTime; ea.Time = t; ea.TSignalSource = this.TSignalSet; ea.TSignalNew = new SNetTSignalSecSetF8(t, fftData); this.OnDataChange(ea); myea.InvokeResult = this.disposed ? SNetTdEnumInvokeResult.IsDisposed : SNetTdEnumInvokeResult.None; }
/// <summary> /// 集合型, 建議照時間序列(Seq)來input, 避免後續使用的Block認定是Sequence, 然而不是 /// </summary> /// <param name="vals"></param> /// <param name="dt"></param> public void TgInput(object sender, SNetTdSignalSecSetF8EventArg ea) { //IEnumerable<double> vals, DateTime? dt = null if (!this.IsEnalbed) { return; } foreach (var kv in ea.TSignalNew.Signals) { this.TgInput(this.TSignalSet, kv); } }
/// <summary> /// 單一型, 直接執行 /// 最後都會執行這段 /// </summary> /// <param name="sender"></param> /// <param name="ea"></param> public void TgInput(object sender, SNetTdSignalSecF8EventArg ea) { if (!this.IsEnalbed) { return; } this.Purge();//先Purge, 避免Exception造成沒有Purge var tSignalSet = this.TSignalSet; var newSignals = ea.TSignal; var time = newSignals.Time.HasValue ? newSignals.Time.Value : DateTime.Now; tSignalSet.Add(time, newSignals.Signals); var evtea = new SNetTdSignalSecSetF8EventArg() { Sender = this, Time = time, TSignalSource = tSignalSet, PrevTime = this.PrevTime, }; if (this.IsTriggeredPerSecond) { if (this.PrevTime.HasValue && this.PrevTime != time) { var prevTime = this.PrevTime.HasValue ? this.PrevTime.Value : DateTime.Now; if (this.TSignalSet.ContainKey(prevTime)) { var prevSignal = this.TSignalSet.Get(prevTime); evtea.TSignalNew.Add(time, newSignals.Signals); this.OnDataChange(evtea); } } } else { evtea.TSignalNew.Add(time, newSignals.Signals); this.OnDataChange(evtea); } this.PrevTime = time; }