- oscilloscope screen labels added
- artifacts on the edge of the scope screen fixed
This commit is contained in:
		
							parent
							
								
									3b09caaeb0
								
							
						
					
					
						commit
						73a903b976
					
				@ -16,13 +16,14 @@ MultiStreamOscilloscope::MultiStreamOscilloscope() {
 | 
			
		||||
    mFIFOBlockCnt = 0;
 | 
			
		||||
    mCaptureLength = 0;
 | 
			
		||||
    mPreTriggerSamples = 0;
 | 
			
		||||
    mDrawMarginSamples = DRAW_WINDOW_MARGIN_DEF;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MultiStreamOscilloscope::setup(const std::vector<in_addr_t> &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<std::vector<MultiStreamOscilloscope::SamplePoint>> MultiStreamOscill
 | 
			
		||||
        mTrigState.samplesReady = false;
 | 
			
		||||
        return mCaptureBuffers;
 | 
			
		||||
    } else {
 | 
			
		||||
        if (mTrigState.autoTrigger) {
 | 
			
		||||
            mTrigState.trigd = true; // trigger if auto-trigger is enabled
 | 
			
		||||
        }
 | 
			
		||||
        return {};
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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<TriggerSettings> trigger; // trigger settings
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user