can obtain waveform
This commit is contained in:
commit
2429d5d1dd
22
REAMME.md
Normal file
22
REAMME.md
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# About
|
||||||
|
|
||||||
|
This is a python code to connect RIGOL DS40024 Oscilliscope via Ethernet and do a FFT. The control is done by SCPI command.
|
||||||
|
|
||||||
|
The list of command can be found in https://beyondmeasure.rigoltech.com/acton/attachment/1579/f-06f3/1/-/-/-/-/MSO%26DS4000_programming.pdf
|
||||||
|
|
||||||
|
# Required Libraries
|
||||||
|
|
||||||
|
- pyvisa-py
|
||||||
|
- zeroconf
|
||||||
|
|
||||||
|
# find the device address
|
||||||
|
|
||||||
|
```python
|
||||||
|
import pyvisa as visa
|
||||||
|
|
||||||
|
# Initialize visa resource manager
|
||||||
|
rm = visa.ResourceManager('@py')
|
||||||
|
|
||||||
|
# print(rm.list_resources_info() )
|
||||||
|
print( rm.list_resources() )
|
||||||
|
```
|
137
test.py
Executable file
137
test.py
Executable file
|
@ -0,0 +1,137 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import pyvisa as visa
|
||||||
|
import time
|
||||||
|
|
||||||
|
def Query(cmd : str) -> str :
|
||||||
|
haha = osc.query(cmd).rstrip('\n')
|
||||||
|
print(cmd + " : |" + haha + "|")
|
||||||
|
return haha
|
||||||
|
|
||||||
|
def Write(cmd : str):
|
||||||
|
osc.write(cmd)
|
||||||
|
|
||||||
|
def AskWaveParameter():
|
||||||
|
haha = Query('WAVEFORM:Preamble?')
|
||||||
|
result = haha.split(',')
|
||||||
|
print(" Format :" + result[0])
|
||||||
|
print(" Mode :" + result[1])
|
||||||
|
print(" Points :" + result[2])
|
||||||
|
print("Average :" + result[3])
|
||||||
|
print(" X-Step :" + result[4] + " sec")
|
||||||
|
print("X-Start :" + result[5] + " sec")
|
||||||
|
print(" X-Ref :" + result[6] )
|
||||||
|
print(" Y-Step :" + result[7] + " V" )
|
||||||
|
print("Y-Start :" + result[8] + " V")
|
||||||
|
print(" Y-Ref :" + result[9] )
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
#=========================================
|
||||||
|
|
||||||
|
# Initialize visa resource manager
|
||||||
|
rm = visa.ResourceManager('@py')
|
||||||
|
|
||||||
|
osc = rm.open_resource('TCPIP::128.186.111.202::INSTR')
|
||||||
|
osc.timeout = 25000
|
||||||
|
Query('*IDN?')
|
||||||
|
# Query(':SYST:VERSION?')
|
||||||
|
|
||||||
|
#Write(':STOP')
|
||||||
|
#Write(':RUN')
|
||||||
|
|
||||||
|
#================ channel setting
|
||||||
|
#Write('CHAN1:OFFSET 0.0')
|
||||||
|
#Write('CHAN1:IMPEDANCE FIFTY') #set to 50 Ohm
|
||||||
|
#Write('CHAN1:IMPEDANCE OMEG') #set to 1Mohm
|
||||||
|
#Write('CHAN1:SCALE 0.2') #set vertical scale is 0.1V/div
|
||||||
|
|
||||||
|
#================ mesurement
|
||||||
|
# Query('MEASURE:FREQ? CHAN1') #measure freqeuncy of ch1 in Hz
|
||||||
|
#Query('MEASURE:VMAX? CHAN1') #measure VMaX of ch1 in V
|
||||||
|
#Query('MEASURE:VMIN? CHAN1') #measure VMin of ch1 in V
|
||||||
|
#Query('MEASURE:VPP? CHAN1') #measure Vpp of ch1 in V
|
||||||
|
#Query('MEASURE:VRMS? CHAN1') #measure Vrms of ch1 in V
|
||||||
|
|
||||||
|
#================ time axis
|
||||||
|
#Query('TIMEBASE:OFFSET?') #offset in sec
|
||||||
|
#Write('TIMEBASE:OFFSET 6.0e-6') #offset in sec, pos to the right, neg to the left
|
||||||
|
#Write('TIMEBASE:SCALE 2.0e-6') # set time scale to be 2us/div
|
||||||
|
|
||||||
|
#================ trigger
|
||||||
|
#Write('TRIG:MODE EDGE') #set trigger mode to be EDGE; EDGE|PULSe|RUNT|NEDG|SLOPe|VIDeo|PATTern|RS232|IIC|SPI|CAN|FLEXray|USB
|
||||||
|
#Query('TRIG:STATUS?') #ask if trigger is ok, return TD = triggered
|
||||||
|
#Query('TRIG:EDGE:SLOPE?')
|
||||||
|
#Write('TRIG:EDGE:SLOPE POS') #set trigger at positive slope; NEG
|
||||||
|
#Write('TRIG:EDGE:SOURCE CHAN1') #set trigger for channel 1
|
||||||
|
#Query('TRIG:EDGE:LEVEL?') #ask trigger level
|
||||||
|
|
||||||
|
#=============== Waveform
|
||||||
|
|
||||||
|
#--------------- read waveform on the screen
|
||||||
|
Write('RUN')
|
||||||
|
Write('WAVEFORM:RESET')
|
||||||
|
Write('WAVEFORM:SOURCE CHAN1')
|
||||||
|
Write('WAVEFORM:FORMAT BYTE')
|
||||||
|
Write('WAVEFORM:MODE NORM')
|
||||||
|
|
||||||
|
para = AskWaveParameter()
|
||||||
|
wfSize = int(para[2])
|
||||||
|
|
||||||
|
Query('WAVEFORM:SOURCE?')
|
||||||
|
Query('WAVEFORM:MODE?')
|
||||||
|
Query('WAVEFORM:FORMAT?')
|
||||||
|
|
||||||
|
# print("----------------- get data ")
|
||||||
|
|
||||||
|
[status, wfLen] = Query('WAVEFORM:STATUS?').split(',')
|
||||||
|
if status == "IDLE" and int(wfLen) >= 0 :
|
||||||
|
print("---- get waveform data")
|
||||||
|
osc.write('WAVEFORM:DATA?')
|
||||||
|
binary = osc.read_bytes(int(wfSize) +11 + 1) #
|
||||||
|
# print(binary)
|
||||||
|
|
||||||
|
|
||||||
|
#---------- read data from internal memory, 1.12 million points, take like
|
||||||
|
# Write('STOP')
|
||||||
|
# Write('WAVEFORM:RESET')
|
||||||
|
# Write('WAVEFORM:SOURCE CHAN1')
|
||||||
|
# Write('WAVEFORM:MODE RAW') #internal
|
||||||
|
# Write('WAVEFORM:FORMAT BYTE')
|
||||||
|
# Write('WAVEFORM:BEGIN')
|
||||||
|
|
||||||
|
# para = AskWaveParameter()
|
||||||
|
# wfSize = int(para[2])
|
||||||
|
# Write('WAVEFORM:POINTS %d' % wfSize)
|
||||||
|
# Query('WAVEFORM:POINTS?')
|
||||||
|
|
||||||
|
# # print("----------------- get data ")
|
||||||
|
# count = 0
|
||||||
|
# while(count<10):
|
||||||
|
# [status, wfLen] = Query('WAVEFORM:STATUS?').split(',')
|
||||||
|
# if status == "IDLE" and int(wfLen) >= wfSize :
|
||||||
|
# print("---- get waveform data")
|
||||||
|
# osc.write('WAVEFORM:DATA?')
|
||||||
|
# start_time = time.time()
|
||||||
|
# binary = osc.read_bytes(int(wfLen)+11 + 1) #
|
||||||
|
# end_time = time.time()
|
||||||
|
# print(binary)
|
||||||
|
# break
|
||||||
|
|
||||||
|
# time.sleep(1)
|
||||||
|
# count = count + 1
|
||||||
|
|
||||||
|
#Write('WAVEFORM:END')
|
||||||
|
|
||||||
|
# duration = end_time - start_time
|
||||||
|
# print("Duration:", duration, "seconds")
|
||||||
|
|
||||||
|
#----------------- decode binary
|
||||||
|
|
||||||
|
# Extracting the header (first 11 bytes)
|
||||||
|
header = binary[:11]
|
||||||
|
data_points = binary[11:]
|
||||||
|
# Decode the 1-byte data points
|
||||||
|
decoded_data = [byte for byte in data_points]
|
||||||
|
print("Decoded data:", decoded_data)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user