Simple library for Tektronix MSO4000 series oscilloscopes with correct time axis calculation and raw data capture
Project description
MSO4000 Library
Simple, clean library for Tektronix MSO4000 series oscilloscopes.
Features
- ✅ Connection checking
- ✅ Single waveform capture
- ✅ Multiple waveform recording to CSV
- ✅ Raw binary data capture and saving
- ✅ Correct time axis calculation using Tektronix formula
- ✅ Detailed waveform inspection with timing verification
- ✅ Simple, clean API
Installation
Install from PyPI:
pip install mso4000
Quick Start
1. Check Connection
from mso4000 import check_connection
success, info = check_connection()
if success:
print(f"Connected: {info}")
else:
print(f"Error: {info}")
2. Record Waveforms to CSV (One-liner)
from mso4000 import quick_record
# Record 10 waveforms and save to CSV
filename = quick_record(channel=1, max_records=10)
print(f"Saved to: {filename}")
3. Get Acquisition Information
from mso4000 import MSO4000
scope = MSO4000(channel=1)
if scope.connect():
# Get acquisition parameters
info = scope.get_acquisition_info()
scope.close()
4. Save Raw Binary Data
from mso4000 import quick_save_raw_binary, quick_save_raw_csv
# Save raw binary with metadata
binary_file = quick_save_raw_binary(channel=1)
# Saves: raw_waveform_CH1_<timestamp>.bin
# raw_waveform_CH1_<timestamp>.metadata
# Save raw waveform as CSV
csv_file = quick_save_raw_csv(channel=1)
5. Full Control
from mso4000 import MSO4000
# Create scope interface
scope = MSO4000(channel=1)
# Connect
if scope.connect():
# Get acquisition info
info = scope.get_acquisition_info()
# Inspect raw event with timing verification
raw_data = scope.inspect_raw_event()
# Save raw binary with metadata
binary_file = scope.save_raw_binary()
# Save raw CSV
csv_file = scope.save_raw_csv()
# Or record multiple to CSV
filename = scope.record_to_csv(max_records=20)
print(f"Saved to: {filename}")
# Close connection
scope.close()
API Reference
MSO4000 Class
__init__(channel=1)
Initialize the oscilloscope interface.
Parameters:
channel(int): Channel number (1-4), default 1
check_connection() -> Tuple[bool, Optional[str]]
Check if oscilloscope is connected.
Returns:
(True, device_info)if connected(False, error_message)if not connected
connect() -> bool
Connect to oscilloscope and configure for waveform transfer.
Returns:
Trueif successfulFalseif failed
capture_waveform() -> Optional[np.ndarray]
Capture a single waveform.
Returns:
numpy.ndarrayof voltage values, orNoneif failed
record_to_csv(filename=None, max_records=None, delay=0.5) -> Optional[str]
Record multiple waveforms and save to CSV.
Parameters:
filename(str, optional): Output filename (auto-generated if None)max_records(int, optional): Maximum waveforms to record (None = until Ctrl+C)delay(float): Delay between captures in seconds (default 0.5)
Returns:
- Filename of saved CSV, or
Noneif failed
get_acquisition_info() -> Optional[dict]
Get acquisition parameters including oscilloscope timing parameters.
Returns:
- Dictionary with acquisition info including:
num_samples,time_window_sec,sampling_rate_hz,time_per_sample_sectimebase_s_div,channel,ch_scale_v_divxincr_sec: Horizontal sampling interval from oscilloscopexzero_sec: Time coordinate of first samplept_off: Point offset (usually 0)
Also prints a formatted table of acquisition parameters.
get_raw_waveform_data() -> Optional[dict]
Capture raw binary waveform data with header information.
inspect_raw_event() -> Optional[dict]
Comprehensive inspection of a single event with timing verification.
save_raw_binary(filename=None, save_metadata=True) -> Optional[str]
Save raw binary waveform data with optional metadata file.
save_raw_csv(filename=None) -> Optional[str]
Save waveform to CSV with time axis and raw values.
close()
Close connection to oscilloscope.
Convenience Functions
check_connection() -> Tuple[bool, Optional[str]]
Quick function to check connection.
quick_record(channel=1, max_records=None, filename=None) -> Optional[str]
Quick function to connect and record waveforms.
quick_inspect(channel=1) -> Optional[dict]
Quick function to inspect a single raw event with timing verification.
quick_get_timing_info(channel=1) -> Optional[dict]
Quick function to get acquisition timing information.
quick_save_raw_binary(channel=1, filename=None, save_metadata=True) -> Optional[str]
Quick function to save raw binary waveform data.
quick_save_raw_csv(channel=1, filename=None) -> Optional[str]
Quick function to save raw waveform to CSV.
CSV Output Format
The CSV file contains:
- Column 1: Sample index (0 to N-1)
- Column 2: Time in seconds (relative to waveform start)
- Columns 3+: Voltage values for each recorded waveform
Example:
Sample_Index,Time_sec,Waveform_1_V,Waveform_2_V,Waveform_3_V
0,0.000000,-0.123456,0.234567,-0.345678
1,0.000010,-0.125432,0.236789,-0.347890
...
Examples
See example_mso4000.py for complete examples.
Requirements
- Python 3.6+
- pyvisa
- numpy
Important: Time Axis Calculation (v0.2.0+)
The time axis is now calculated using the official Tektronix formula:
Time[n] = XZERO + XINCR * (n - PT_OFF)
This ensures exact alignment with the oscilloscope display.
Notes
- The library automatically selects USB resources (skips serial ports)
- Uses binary encoding (RIBINARY) for efficient data transfer
- Default timeout is 30 seconds for waveform transfers
- Press Ctrl+C to stop recording
- Timing parameters are queried from oscilloscope (v0.2.0+)
- Raw binary files preserve exact oscilloscope output
- All functionality is backward compatible
License
MIT License - See LICENSE file for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mso4000-0.2.0.tar.gz.
File metadata
- Download URL: mso4000-0.2.0.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf5411d94ceb55a86abac05eef35695913cb48d15aa6f1ac87475e66f99db6d5
|
|
| MD5 |
7f52bd8da9c2403f017e005557bdef6a
|
|
| BLAKE2b-256 |
fdb8f509b391fb665d09c0016e3de1f03c48504a61269b2ff86fe4da8b4baa12
|
File details
Details for the file mso4000-0.2.0-py3-none-any.whl.
File metadata
- Download URL: mso4000-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
647bea64b5b0c52539c3b09a0cee14185ef8d6c167dd20d6f7b2a5f7076f071c
|
|
| MD5 |
aa5efe92d992a5793b3a1de9412d3c6b
|
|
| BLAKE2b-256 |
930f7955cea8906f35e3eed3e5076dfceaa12f8b026acb8e607e5c9e291ca7db
|