DHO924S信号源
01 DHO924S信号源
一、前言
DHO924S 是一款带有信号源的示波器, 内部具备25MHz任意波形发生器。 信号源在它的后面左侧引出。 下面测试一下这款示波器信号源的特性, ·以及编程控制接口。
二、手工操作
在屏幕右下角, 有一个G对应操作窗口。 可以控制信号源的特性。 点开对应的对话框, 可以设置信号的输出和关闭。 交流信号的基本特征。 选择输出波形。 下面看一下有哪几种输出波形。
输出信号波形中包括有方波, 锯齿波,也就是三角波, 噪声, 直流量, 任意波形等。 调制波形中包括有调幅、 调频、 调相等。 这些波形可以用于电路功能测试。 下面看一下它的输出噪声信号的特性。
▲ 图1.2.1 输出调制波形
信号源输出白噪声。 在面包板上将信号分别送到 示波器、 频谱仪, 以及FLUKE45 数字万用表进行测量。 频谱仪显示输出信号具有很宽的频谱。 最高在 100MHz。 信号交流有效值为 622mV。 如果使用FLUKE45万用表的交流档进行测试, 显示只有74mV左右。 这从另外一个方面说明, DHO924S 所产生的噪声带宽超过了FLUKE45交流档带宽的 9倍。
▲ 图1.2.2 输出噪声的波形
产生正弦波的最高频率为 25MHz, 这里设置输出峰峰值为5V。 但我们看到输出的最大值只有 1.95V, 有效值为1.376V。 如果将频率降低到1MHz, 幅值就会增加, 实际上对应的峰峰值达到了6V。 这说明信号源输出信号幅值具有一定的误差。 频率越高, 输出幅值越小。
▲ 图1.2.3 输出25MHz的波形
三、编程控制
根据 DHO924S的编程说明书, 可以通过网络控制信号源输出信号参数。 在 Python 下, 比较容易进行编程。 这样, 就可以实现对信号输出参数的自动控制。
※ 总 结 ※
本文记录了使用 DHO924S 示波器信号源的体验。 这个信号源不仅使得该示波器具有一机两用的功能, 它的编程接口, 使得它在自动化测量方面具有很强的能力。 这使得今后的电路测试更加的方便。
● 相关图表链接:
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2023-11-17
#
# Note:
#============================================================
from headm import *
from tsmodule.tsvisa import *
dho924open(25)
dho924afg(1)
dho924wave('SIN')
dho924freq(600000)
dho924voltage(3)
dho924offset(0)
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
from tsmodule.tspdata import *
import pyvisa
import numpy
rm = pyvisa.ResourceManager()
DM3068 = 'TCPIP::192.168.0.111::INSTR'
dm3068 = None
def dm3068open(ipadd=0):
global dm3068
if ipadd == 0:
dm3068 = rm.open_resource(DM3068)
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
dm3068 = rm.open_resource(ipstr)
def dm3068close():
dm3068.close()
def dm3068vdc():
if dm3068 == None: return 0
return eval(dm3068.query('MEAS:VOLT:DC?'))
def dm3068vac():
if dm3068 == None: return 0
return eval(dm3068.query('MEAS:VOLT:AC?'))
def dm3068cac():
if dm3068 == None: return 0
return eval(dm3068.query('MEAS:CURR:AC?'))
def dm3068cap():
if dm3068 == None: return
return eval(dm3068.query('MEAS:CAP?'))
def dm3068cac():
if dm3068 == None: return 0
return eval(dm3068.query('MEAS:CURR:DC?'))
def dm3068val1():
if dm3068 == None: return 0
return eval(dm3068.query('FUNCTION2:VALUE1?'))
def dm3068val2():
if dm3068 == None: return 0
return eval(dm3068.query('FUNCTION2:VALUE2?'))
def dm3068cmd(str):
if dm3068 == None: return
dm3068.write(str)
def dm3068cdcf():
if dm3068 == None: return
dm3068cmd('RATE:CURR:DC F')
def dm3068cdcs():
dm3068cmd('RATE:CURR:DC S')
def dm3068cdcm():
if dm3068 == None: return
dm3068cmd('RATE:CURR:DC M')
def dm3068vdcf():
if dm3068 == None: return
dm3068cmd('RATE:VOLT:DC F')
def dm3068vdcs():
if dm3068 == None: return
dm3068cmd('RATE:VOLT:DC S')
def dm3068vdcm():
if dm3068 == None: return
dm3068cmd('RATE:VOLT:DC M')
def dm3068cont():
if dm3068 == None: return
return eval(dm3068.query('MEAS:CONT?'))
def dm3068diode():
if dm3068 == None: return
return eval(dm3068.query('MEAS:DIODE?'))
def dm3068freq():
if dm3068 == None: return
return eval(dm3068.query('MEAS:FREQ?'))
def dm3068period():
if dm3068 == None: return
return evcal(dm3068.query('MEAS:PERIOD?'))
def dm3068res():
if dm3068 == None: return
return eval(dm3068.query('MEAS:RES?'))
dp1308 = None
def dp1308open(ipadd=0):
global dp1308
if ipadd == 0:
dp1308 = rm.open_resource('TCPIP::192.168.0.109::INSTR')
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
dp1308 = rm.open_resource(ipstr)
tspmsgr(dp1308)
def dp1308p6v(volt):
global dp1308
if dp1308 == None:
return
dp1308.write('APPL P6V,%5.3f,5'%volt)
def dp1308p25v(volt):
global dp1308
if dp1308 == None:
return
dp1308.write('APPL P25V,%5.3f,1'%volt)
def dp1308n25v(volt):
if dp1308 == None:
return
dp1308.write('APPL N25V,%5.3f,1'%volt)
dsa815 = None
def dsa815open(ipadd=0):
global dsa815
if ipadd == 0:
dsa815 = rm.open_resource('TCPIP::192.168.0.147::INSTR')
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
dsa815 = rm.open_resource(ipstr)
dsa815.chunk_size = 20480
dsa815.read_termination = '\n'
dsa815.write_termination = '\n'
def dsa815read():
dsa815.write(':TRACE:DATA? TRACE1')
tempdata = dsa815.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata1 = dsa815.read_bytes(datalen)
dsa815.read_bytes(1)
return [float(s) for s in tempdata1.decode('utf-8').split(',')]
ds6104 = None
def ds6104open(ipadd=20):
global ds6104
if ipadd == 0:
ds6104 = rm.open_resource('TCPIP::192.168.0.20::INSTR')
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
ds6104 = rm.open_resource(ipstr)
ds6104.chunk_size = 20480
ds6104.read_termination = '\n'
ds6104.write_termination = '\n'
print(ds6104)
def ds6104read(ch1=1, ch2=0, ch3=0, ch4=0):
global ds6104
if ch1 == 0 and ch2 == 0 and ch3 == 0 and ch4 == 0:
print('data = ds6104(ch1,ch2,ch3,ch4)')
return []
if ds6104 == None:
print('ERROR:DS6104 has not been opened !')
return[]
if ch1 != 0 and ch2 == 0 and ch2 ==0 and ch3 == 0:
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch1)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
return [int(b) for b in tempdata]
if ch1 != 0 and ch2 != 0 and ch3 ==0 and ch4 == 0:
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch1)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata1 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch2)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata2 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
data1 = [int(b) for b in tempdata1]
data2 = [int(b) for b in tempdata2]
return data1, data2
if ch1 != 0 and ch2 != 0 and ch3 !=0 and ch4 == 0:
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch1)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata1 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch2)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata2 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch3)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata3 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
data1 = [int(b) for b in tempdata1]
data2 = [int(b) for b in tempdata2]
data3 = [int(b) for b in tempdata3]
return data1, data2, data3
if ch1 != 0 and ch2 != 0 and ch3 !=0 and ch4 != 0:
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch1)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata1 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch2)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata2 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch3)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata3 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch4)
ds6104.write(':WAVEFORM:MODE NORM')
ds6104.write(':WAVEFORM:DATA?')
tempdata = ds6104.read_bytes(11)
datalen = int(tempdata[7:11])
tempdata4 = ds6104.read_bytes(datalen)
ds6104.read_bytes(2)
data1 = [int(b) for b in tempdata1]
data2 = [int(b) for b in tempdata2]
data3 = [int(b) for b in tempdata3]
data4 = [int(b) for b in tempdata4]
return data1, data2, data3, data4
def ds6104xyparam(ch):
ds6104.write(':WAVEFORM:SOURCE CHAN%d'%ch)
ds6104.write(':WAVEFORM:XINCREMENT?')
xinc = float(ds6104.read())
ds6104.write(':WAVEFORM:XORIGIN?')
xori= float(ds6104.read())
ds6104.write(':WAVEFORM:XREFERENCE?')
xref= float(ds6104.read())
ds6104.write(':WAVEFORM:YINCREMENT?')
yinc= float(ds6104.read())
ds6104.write(':WAVEFORM:YORIGIN?')
yori= float(ds6104.read())
ds6104.write(':WAVEFORM:YREFERENCE?')
yref= float(ds6104.read())
return (xinc, xori, xref, yinc, yori, yref)
def ds6104readcal(ch1=1, ch2=0, ch3=0, ch4=0):
if ch1 != 0 and ch2 == 0 and ch3 == 0 and ch4 == 0:
x1,y1 =ds6104datacal(ds6104read(ch1), ch1)
return x1, y1
if ch1 != 0 and ch2 != 0 and ch3 == 0 and ch4 == 0:
x1,y1 =ds6104datacal(ds6104read(ch1), ch1)
x2,y2 =ds6104datacal(ds6104read(ch2), ch2)
return x1, y1, y2
if ch1 != 0 and ch2 != 0 and ch3 != 0 and ch4 == 0:
x1,y1 =ds6104datacal(ds6104read(ch1), ch1)
x2,y2 =ds6104datacal(ds6104read(ch2), ch2)
x3,y3 =ds6104datacal(ds6104read(ch3), ch3)
return x1, y1, y2, y3
if ch1 != 0 and ch2 != 0 and ch3 != 0 and ch4 != 0:
x1,y1 =ds6104datacal(ds6104read(ch1), ch1)
x2,y2 =ds6104datacal(ds6104read(ch2), ch2)
x3,y3 =ds6104datacal(ds6104read(ch3), ch3)
x4,y4 =ds6104datacal(ds6104read(ch4), ch4)
return x1, y1, y2, y3, y4
def ds6104datacal(data, param=()):
if type(param) == int:
param = ds6104xyparam(param)
else:
if len(param) == 1:
param = ds6104xyparam(param[0])
datalen = len(data)
timelen = datalen * param[0]
timeshift = - timelen / 2 - param[1]
timestart = -timelen / 2 + timeshift
timeend = timestart + timelen
xdata = numpy.linspace(timestart, timeend, datalen)
ydata = [(d-127) * param[3] - param[4] for d in data]
return xdata, ydata
def ds6104sweepsingle():
ds6104.write(':TRIGGER:SWEEP SIGNLE')
def ds6104sweepauto():
ds6104.write(':TRIGGER:SWEEP AUTO')
def ds6104sweepnormal():
ds6104.write(':TRIGGER:SWEEP NORMAL')
def ds6104single():
ds6104.write(':TRIGGER:SWEEP SIGNLE')
def ds6104auto():
ds6104.write(':TRIGGER:SWEEP AUTO')
def ds6104normal():
ds6104.write(':TRIGGER:SWEEP NORMAL')
def ds6104sweep(mode):
ds6104.write(':TRIGGER:SWEEP %s'%mode.upper())
def ds6104cmd(cmd):
ds6104.write(':%s'%cmd.upper())
def ds6104cmdr(cmd):
ds6104.write(':%s'%cmd.upper())
return ds6104.read()
def ds6104run():
ds6104cmd('RUN')
def ds6104stop():
ds6104cmd('STOP')
def ds6104timebase(tb):
ds6104cmd('TIMEBASE:SCALE %.15f'%tb)
DH1766_HOST = '192.168.0.88'
DH1766_PORT = 5025
DH1766_BUFSIZE = 0x1000
dh1766socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
dh1766socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, DH1766_BUFSIZE)
dh1766socket.settimeout(0.2)
def dh1766send(data):
ADDR = (DH1766_HOST, DH1766_PORT)
if type(data) != str:
data = str(data)
data = bytes(data, 'gbk')
dh1766socket.sendto(data, ADDR)
def dh1766recv():
try:
data, ADDR = dh1766socket.recvfrom(DH1766_BUFSIZE)
except socket.timeout:
print('DH1766 time out.')
data = ''
if len(data) > 0:
return data.decode('utf-8')
else: return ''
def dh1766call():
dh1766send('MEAS:CURR:ALL?\n')
cstr = dh1766recv().split(',')
return [float(s) for s in cstr if len(s) > 0]
def dh1766vall():
dh1766send('MEAS:VOLT:ALL?\n')
cstr = dh1766recv().split(',')
return [float(s) for s in cstr]
def dh1766onall():
dh1766send('APPL:OUTP ON,ON,ON\n')
def dh1766offall():
dh1766send('APPL:OUTP OFF,OFF,OFF\n')
def dh1766setvolt(v1,v2,v3):
dh1766send('APPL:VOLT %f,%f,%f\n'%(v1,v2,v3))
def dh1766volt(v1):
dh1766send('VOLT %f\n'%v1)
def dh1766curr():
dh1766send('MEAS:CURR?\n')
cstr = dh1766recv()
if len(cstr) > 0: return float(cstr)
else: return 0
def dh1766beep():
dh1766send('SYSTEM:BEEPER\n')
def dh1766out(onoff):
if onoff > 0:
dh1766send('OUTP ON\n')
else: dh1766send('OUTP OFF\n')
DH1766_HOST_1 = '192.168.0.10'
def dh1766send1(data):
ADDR = (DH1766_HOST_1, DH1766_PORT)
if type(data) != str:
data = str(data)
data = bytes(data, 'gbk')
dh1766socket.sendto(data, ADDR)
def dh1766recv1():
try:
data, ADDR = dh1766socket.recvfrom(DH1766_BUFSIZE)
except socket.timeout:
print('DH1766 time out.')
data = ''
if len(data) > 0:
return data.decode('utf-8')
else: return ''
def dh1766call1():
dh1766send1('MEAS:CURR:ALL?\n')
cstr = dh1766recv1().split(',')
return [float(s) for s in cstr if len(s) > 0]
def dh1766vall1():
dh1766send1('MEAS:VOLT:ALL?\n')
cstr = dh1766recv1().split(',')
return [float(s) for s in cstr]
def dh1766onall1():
dh1766send1('APPL:OUTP ON,ON,ON\n')
def dh1766offall1():
dh1766send1('APPL:OUTP OFF,OFF,OFF\n')
def dh1766setvolt1(v1,v2,v3):
dh1766send1('APPL:VOLT %f,%f,%f\n'%(v1,v2,v3))
def dh1766volt1(v1):
dh1766send1('VOLT %f\n'%v1)
def dh1766curr1():
dh1766send1('MEAS:CURR?\n')
cstr = dh1766recv1()
if len(cstr) > 0: return float(cstr)
else: return 0
def dh1766beep1():
dh1766send1('SYSTEM:BEEPER\n')
def dh1766out1(onoff):
if onoff > 0:
dh1766send1('OUTP ON\n')
else: dh1766send1('OUTP OFF\n')
dg1062 = None
def dg1062open(ipadd=0):
global dg1062
if ipadd == 0:
dg1062 = rm.open_resource('TCPIP::192.168.0.106::INSTR')
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
dg1062 = rm.open_resource(ipstr)
tspmsgr(dg1062)
def dg1062freq(ch,f):
global dg1062
if dg1062 == None:
return
dg1062.write(':SOUR%d:FREQ %f'%(ch,f))
def dg1062volt(ch,v):
global dg1062
if dg1062 == None:
return
dg1062.write(':SOUR%d:VOLT %f'%(ch,v))
def dg1062phase(ch,p):
global dg1062
if dg1062 == None:
return
dg1062.write(':SOUR%d:PHAS %f'%(ch,p))
def dg1062offset(ch,v):
global dg1062
if dg1062 == None:
return
dg1062.write(':SOUR%d:VOLT:OFFS %f'%(ch,v))
def dg1062on(ch):
global dg1062
if dg1062 == None:
return
dg1062.write(':OUTP%d ON'%(ch))
def dg1062wave(ch,s):
global dg1062
if dg1062 == None:
return
dg1062.write(':SOUR%d:FUNC %s'%(ch,s))
def dg1062off(ch):
global dg1062
if dg1062 == None:
return
dg1062.write(':OUTP%d OFF'%(ch))
def dg1062counter():
global dg1062
if dg1062 == None:
return
dg1062.write(':COUN:MEAS?')
return dg1062.read()
def dg1062duty(ch,d):
global dg1062
if dg1062 == None:
return
dg1062.write(':SOUR%d:FUNC:SQU:DCYC %f'%(ch,d))
def dg1062period(ch,p):
global dg1062
if dg1062 == None:
return
dg1062.write(':SOUR%d:PER %f'%(ch,p))
mso24 = None
def mso24open(ipadd=117):
global mso24
if ipadd == 0:
mso24 = rm.open_resource('TCPIP::192.168.0.117::INSTR')
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
mso24 = rm.open_resource(ipstr)
mso24.chunk_size = 0x20000 #20480
mso24.read_termination = '\n'
mso24.write_termination = '\n'
mso24.clear()
print(mso24)
def mso24read(ch1=1, ch2=0, ch3=0, ch4=0):
global mso24
if mso24 == None:
print('ERROR:MSO24 has not been opened !')
return[]
if ch1!=0 and ch2==0 and ch3==0 and ch4== 0:
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 10')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
points = 10000
for s in data[:-1]:
if s.find('points') >= 0:
ss = s.split(', ')
for sss in ss:
if sss.find('points') >= 0:
points = int(sss.replace('points', ''))
print(points)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')[-1]
value = [float(s) for s in data.split(',')]
rawdata = [v*yunit+yoffset for v in value]
x = [i * xunit-xoffset for i in range(len(rawdata))]
return x,rawdata
if ch1!=0 and ch2!=0 and ch3==0 and ch4== 0:
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 10')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
points = 10000
for s in data[:-1]:
if s.find('points') >= 0:
ss = s.split(', ')
for sss in ss:
if sss.find('points') >= 0:
points = int(sss.replace('points', ''))
print(points)
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata1 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
x = [i * xunit-xoffset for i in range(len(rawdata1))]
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch2)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata2 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
return x,rawdata1,rawdata2
if ch1!=0 and ch2!=0 and ch3!=0 and ch4== 0:
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 10')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
points = 10000
for s in data[:-1]:
if s.find('points') >= 0:
ss = s.split(', ')
for sss in ss:
if sss.find('points') >= 0:
points = int(sss.replace('points', ''))
print(points)
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata1 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
x = [i * xunit-xoffset for i in range(len(rawdata1))]
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch2)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata2 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch3)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata3 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
return x,rawdata1,rawdata2,rawdata3
if ch1!=0 and ch2!=0 and ch3!=0 and ch4!=0:
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP 10')
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
points = 10000
for s in data[:-1]:
if s.find('points') >= 0:
ss = s.split(', ')
for sss in ss:
if sss.find('points') >= 0:
points = int(sss.replace('points', ''))
print(points)
mso24.write(':DATA:SOUrce CH%d'%ch1)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata1 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
x = [i * xunit-xoffset for i in range(len(rawdata1))]
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch2)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata2 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch3)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata3 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
mso24.clear()
mso24.write(':DATA:SOUrce CH%d'%ch4)
mso24.write(':DATA:START 1')
mso24.write(':DATA:STOP %d'%points)
mso24.write(':WFMOutpre:ENCdg ASCII')
mso24.write(':WFMOutpre:BYT_Nr 2')
mso24.write(':WAVFRM?')
data = mso24.read().split(';')
xunit = 1.0e-6
xoffset = 0
yunit = 1.0e-3
yoffset = 0
if '"s"' in data:
sid = data.index('"s"')
xunit = float(data[sid + 1])
xoffset = int(data[sid+3]) * xunit
if '"V"' in data:
vid = data.index('"V"')
yunit = float(data[vid+1])
yoffset = float(data[vid+3])
rawdata4 = [int(s)*yunit+yoffset for s in data[-1].split(',')]
return x,rawdata1,rawdata2,rawdata3,rawdata4
def meanval(var, avg=64):
num = len(var[0])//avg
out = []
for v in var:
out.append([numpy.mean(v[i*avg:i*avg+avg]) for i in range(num)])
return out
def mso24off():
mso24.write(':AFG:OUTPUT:MODE OFF')
def mso24on():
mso24.write(':AFG:OUTPUT:MODE CONT')
def mso24burst():
mso24.write(':AFG:OUTPUT:MODE BURST')
def mso24volt(f):
mso24.write(':AFG:AMPL %5.3f'%f)
def mso24freq(f):
mso24.write(':AFG:FREQ %5.3f'%f)
def mso24offset(v):
mso24.write(':AFG:OFFS %5.3f'%v)
def mso24func(f):
mso24.write(':AFG:FUNC %s'%f)
def mso24sine():
mso24.write(':AFG:FUNC SINE')
def mso24square():
mso24.write(':AFG:FUNC SQUARE')
def mso24noise():
mso24.write(':AFG:FUNC NOISE')
def mso24RAMP():
mso24.write(':AFG:FUNC RAMP')
def mso24pulse():
mso24.write(':AFG:FUNC PULSE')
def mso24sinc():
mso24.write(':AFG:FUNC SINC')
def mso24gaussian():
mso24.write(':AFG:FUNC GAUS')
def mso24measure():
mso24.clear()
mso24.write(':MEASUREMENT:LIST?')
data = mso24.read()
return data
dho924 = None
def dho924open(ipadd=129):
global dho924
if ipadd == 0:
dho924 = rm.open_resource('TCPIP::192.168.0.129::INSTR')
else:
ipstr = 'TCPIP::192.168.0.%d::INSTR'%ipadd
dho924 = rm.open_resource(ipstr)
dho924.chunk_size = 0x20000 #20480
dho924.read_termination = '\n'
dho924.write_termination = '\n'
dho924.clear()
print(dho924)
def dho924timescale():
if dho924 == None:
print("dho924 is not opend .\a")
return 0
dho924.write(':TIM:MAIN:SCALE?')
return dho924.read()
def dho924timeoffset():
if dho924 == None:
print("dho924 is not opend .\a")
return 0
dho924.write(':TIM:MAIN:OFFSET?')
return dho924.read()
def dho924timestartend():
if dho924 == None:
print("dho924 is not opend .\a")
return 0
scale = float(dho924timescale())
offset = float(dho924timeoffset())
tstart = -5*scale + offset
tend = tstart + scale*10
return tstart, tend
def dho924channelopen(id1=0, id2=0, id3=0, id4=0):
if dho924 == None:
print("dho924 is not opend .\a")
return
if id1 != 0:
dho924.write(':CHAN%d:DISP ON'%id1)
dho924.write(':CHAN%d:SCAL 1.0'%id1)
if id2 != 0:
dho924.write(':CHAN%d:DISP ON'%id2)
dho924.write(':CHAN%d:SCAL 1.0'%id2)
if id3 != 0:
dho924.write(':CHAN%d:DISP ON'%id3)
dho924.write(':CHAN%d:SCAL 1.0'%id3)
if id4 != 0:
dho924.write(':CHAN%d:DISP ON'%id4)
dho924.write(':CHAN%d:SCAL 1.0'%id4)
def dho924channelclose(id1=0, id2=0, id3=0, id4=0):
if dho924 == None:
print("dho924 is not opend .\a")
return
if id1 != 0:
dho924.write(':CHAN%d:DISP OFF'%id1)
dho924.write(':CHAN%d:SCAL 1.0'%id1)
if id2 != 0:
dho924.write(':CHAN%d:DISP OFF'%id2)
dho924.write(':CHAN%d:SCAL 1.0'%id2)
if id3 != 0:
dho924.write(':CHAN%d:DISP OFF'%id3)
dho924.write(':CHAN%d:SCAL 1.0'%id3)
if id4 != 0:
dho924.write(':CHAN%d:DISP OFF'%id4)
dho924.write(':CHAN%d:SCAL 1.0'%id4)
def dho924read(id1=0, id2=0, id3=0, id4=0):
if dho924 == None:
print("dho924 is not opend .\a")
return
ts = -5
te = 5
ts, te = dho924timestartend()
datadim = []
if id1 != 0:
dho924.write(':WAV:SOUR CHAN%d'%id1)
dho924.write(':WAV:MODE NORM')
dho924.write(':WAV:FORM ASCII')
dho924.write('DATA?')
data = [float(d) for d in dho924.read().split(',')]
datadim.append(data)
if id2 != 0:
dho924.write(':WAV:SOUR CHAN%d'%id2)
dho924.write(':WAV:MODE NORM')
dho924.write(':WAV:FORM ASCII')
dho924.write('DATA?')
data = [float(d) for d in dho924.read().split(',')]
datadim.append(data)
if id3 != 0:
dho924.write(':WAV:SOUR CHAN%d'%id3)
dho924.write(':WAV:MODE NORM')
dho924.write(':WAV:FORM ASCII')
dho924.write('DATA?')
data = [float(d) for d in dho924.read().split(',')]
datadim.append(data)
if id4 != 0:
dho924.write(':WAV:SOUR CHAN%d'%id4)
dho924.write(':WAV:MODE NORM')
dho924.write(':WAV:FORM ASCII')
dho924.write('DATA?')
data = [float(d) for d in dho924.read().split(',')]
datadim.append(data)
if len(datadim) == 0:
return 0
datalen = len(datadim[0])
timedim = [(te-ts)/datalen*i+ts for i in range(datalen)]
if len(datadim) == 1:
return timedim, datadim[0]
if len(datadim) == 2:
return timedim, datadim[0], datadim[1]
if len(datadim) == 3:
return timedim, datadim[0], datadim[1], datadim[2]
if len(datadim) == 4:
return timedim, datadim[0], datadim[1], datadim[2], datadim[3]
def dho924readraw(id1=0, id2=0, id3=0, id4=0, dep=100):
if dho924 == None:
print("dho924 is not opend .\a")
return
ts = -5
te = 5
ts, te = dho924timestartend()
datadim = []
dho924.write(':ACQ:MDEP %dk'%dep)
dho924.write(':RUN')
time.sleep(1)
dho924.write(':STOP')
if id1 != 0:
dho924.write(':WAV:SOUR CHAN%d'%id1)
dho924.write(':WAV:MODE RAW')
dho924.write(':WAV:FORM ASCII')
dho924.write('DATA?')
data = [float(d) for d in dho924.read().split(',')]
datadim.append(data)
if id2 != 0:
dho924.write(':WAV:SOUR CHAN%d'%id2)
dho924.write(':WAV:MODE RAW')
dho924.write(':WAV:FORM ASCII')
dho924.write('DATA?')
data = [float(d) for d in dho924.read().split(',')]
datadim.append(data)
if id3 != 0:
dho924.write(':WAV:SOUR CHAN%d'%id3)
dho924.write(':WAV:MODE RAW')
dho924.write(':WAV:FORM ASCII')
dho924.write('DATA?')
data = [float(d) for d in dho924.read().split(',')]
datadim.append(data)
if id4 != 0:
dho924.write(':WAV:SOUR CHAN%d'%id4)
dho924.write(':WAV:MODE RAW')
dho924.write(':WAV:FORM ASCII')
dho924.write('DATA?')
data = [float(d) for d in dho924.read().split(',')]
datadim.append(data)
dho924.write(':RUN')
if len(datadim) == 0:
return 0
datalen = len(datadim[0])
timedim = [(te-ts)/datalen*i+ts for i in range(datalen)]
if len(datadim) == 1:
return timedim, datadim[0]
if len(datadim) == 2:
return timedim, datadim[0], datadim[1]
if len(datadim) == 3:
return timedim, datadim[0], datadim[1], datadim[2]
if len(datadim) == 4:
return timedim, datadim[0], datadim[1], datadim[2], datadim[3]
def dho924afg(onoff=1):
if dho924 == None:
print("dho924 is not opend .\a")
return
if onoff == 0:
dho924.write(':SOURCE:OUTPUT:STATE OFF')
else:
dho924.write(':SOURCE:OUTPUT:STATE ON')
def dho924wave(wav):
dho924.write(':SOURCE:FUNCTION %s'%wav)
def dho924freq(f):
dho924.write(':SOURCE:FREQUENCY %3.3f'%f)
def dho924phase(f):
dho924.write(':SOURCE:PHASE %3.3f'%f)
def dho924duty(f):
dho924.write(':SOURCE:FUNCTION:SQUARE:DUTY %3.3f'%f)
def dho924voltage(f):
dho924.write(':SOURCE:VOLTAGE:AMPLITUDE %f'%f)
def dho924offset(f):
dho924.write(':SOURCE:VOLTAGE:OFFSET %f'%f)