diff --git a/libwfr/src/MultiStreamOscilloscope.cpp b/libwfr/src/MultiStreamOscilloscope.cpp index 6828f21..e339bd1 100644 --- a/libwfr/src/MultiStreamOscilloscope.cpp +++ b/libwfr/src/MultiStreamOscilloscope.cpp @@ -16,13 +16,14 @@ MultiStreamOscilloscope::MultiStreamOscilloscope() { mFIFOBlockCnt = 0; mCaptureLength = 0; mPreTriggerSamples = 0; + mDrawMarginSamples = DRAW_WINDOW_MARGIN_DEF; } void MultiStreamOscilloscope::setup(const std::vector &nodes, const AcquisitionFormat &acqFmt) { MultiStreamProcessor::setup(nodes, acqFmt); // calculate buffer parameters - mCaptureLength = ceil(mCapturePeriod_ns / 1E+09 * acqFmt.sampling_rate_Hz); // calculate draw window period in samples + mCaptureLength = ceil(mCapturePeriod_ns / 1E+09 * acqFmt.sampling_rate_Hz) + 2 * mDrawMarginSamples; // calculate draw window period in samples mFIFOBlockCnt = 10 * ceil(mCaptureLength / acqFmt.mch_samples_per_packet); // TODO magic... // setup channel buffers @@ -215,9 +216,6 @@ std::vector> MultiStreamOscill mTrigState.samplesReady = false; return mCaptureBuffers; } else { - if (mTrigState.autoTrigger) { - mTrigState.trigd = true; // trigger if auto-trigger is enabled - } return {}; } } diff --git a/libwfr/src/MultiStreamOscilloscope.h b/libwfr/src/MultiStreamOscilloscope.h index 05da284..762fcdb 100644 --- a/libwfr/src/MultiStreamOscilloscope.h +++ b/libwfr/src/MultiStreamOscilloscope.h @@ -17,6 +17,7 @@ public: static constexpr size_t DRAW_WINDOW_PERIOD_NS_DEF = 50E+06; // default window length (50ms) static constexpr double VOLT_PER_BIN_DEF = 42.80E-06; // default vertical resolution static constexpr size_t TRIGGER_POS_PERCENT_DEF = 50; // trigger position is defaulted to the screen center + static constexpr ssize_t DRAW_WINDOW_MARGIN_DEF = 10; // size of margin on each end of the sample capture buffer public: struct SamplePoint { int64_t t; // time @@ -46,6 +47,7 @@ public: // graphical displaying related things size_t mTriggerPosition_percent; // trigger position on the screen size_t mTriggerProbeBlock_idx; // index of block on which trigger will run size_t mPreTriggerSamples; // samples displayed before the trigger point + ssize_t mDrawMarginSamples; // margin to avoid artifacts on the screen's edge size_t mCapturePeriod_ns; // (drawing window) screen period public: std::shared_ptr trigger; // trigger settings diff --git a/python/runtime/main.py b/python/runtime/main.py index 5df09cb..1f29381 100644 --- a/python/runtime/main.py +++ b/python/runtime/main.py @@ -1,6 +1,8 @@ import time import sys +import matplotlib.ticker + sys.path.extend(['../module']) import pywfs @@ -11,8 +13,9 @@ from matplotlib import pyplot as plt from matplotlib import animation as anim import time -LOCAL_ADDR = "192.168.1.204" -nodes = [ "192.168.1.180" ] +#LOCAL_ADDR = "192.168.1.204" +LOCAL_ADDR = "10.42.0.1" +nodes = [ "10.42.0.106" ] # ---------- CONNECT TO AND PREPARE SAMPLING SYSTEM ----------- @@ -44,7 +47,7 @@ osc = pywfs.MultiStreamOscilloscope.create() # create a slope trigger edge_trigger = pywfs.EdgeTrigger() -edge_trigger.level = 0.1 +edge_trigger.level = 0.5 edge_trigger.edge = pywfs.FALLING #edge_trigger.ch = 0 + index edge_trigger.ch = 0 @@ -123,6 +126,8 @@ def init(): fig, ax = plt.subplots() lines = list() +ax.xaxis.set_major_formatter(matplotlib.ticker.EngFormatter(unit='s')) +ax.yaxis.set_major_formatter(matplotlib.ticker.EngFormatter(unit='V')) # trigger mark screen_period = osc.getScreenPeriod() * 1E-09 @@ -131,10 +136,11 @@ trig_t = [-trig_mark_halflen * screen_period, trig_mark_halflen * screen_period trig_y = [ edge_trigger.level, edge_trigger.level ] for k in range(0, ch_n): - lines.append(ax.plot([], [], lw=2)) + lines.append(ax.plot([], [], label="CH" + str(k), lw=2)) t, y = list(), list() ax.plot(trig_t, trig_y, color = 'r') +ax.legend() def run(data): T, Y = data