DHO924S 信号源编程控制

DHO924S信号源

 

01 DHO924S信号源


一、前言

  DHO924S 是一款带有信号源的示波器, 内部具备25MHz任意波形发生器。  信号源在它的后面左侧引出。  下面测试一下这款示波器信号源的特性, ·以及编程控制接口。

GM1700184685_1280_720.MPG|_-3

二、手工操作

  在屏幕右下角, 有一个G对应操作窗口。 可以控制信号源的特性。 点开对应的对话框,  可以设置信号的输出和关闭。 交流信号的基本特征。 选择输出波形。 下面看一下有哪几种输出波形。

GM1700184969_1280_720.MPG|_-6
  输出信号波形中包括有方波, 锯齿波,也就是三角波, 噪声, 直流量, 任意波形等。  调制波形中包括有调幅、 调频、 调相等。  这些波形可以用于电路功能测试。  下面看一下它的输出噪声信号的特性。

GM1700197095_1280_720.MPG|_-4

▲ 图1.2.1  输出调制波形

▲ 图1.2.1 输出调制波形

  信号源输出白噪声。  在面包板上将信号分别送到 示波器、 频谱仪, 以及FLUKE45 数字万用表进行测量。 频谱仪显示输出信号具有很宽的频谱。 最高在 100MHz。  信号交流有效值为 622mV。 如果使用FLUKE45万用表的交流档进行测试,  显示只有74mV左右。 这从另外一个方面说明, DHO924S 所产生的噪声带宽超过了FLUKE45交流档带宽的 9倍。

GM1700197799_1280_720.MPG|_-5

▲ 图1.2.2  输出噪声的波形

▲ 图1.2.2 输出噪声的波形

  产生正弦波的最高频率为 25MHz, 这里设置输出峰峰值为5V。  但我们看到输出的最大值只有 1.95V, 有效值为1.376V。  如果将频率降低到1MHz, 幅值就会增加, 实际上对应的峰峰值达到了6V。 这说明信号源输出信号幅值具有一定的误差。 频率越高, 输出幅值越小。
GM1700198412_1280_720.MPG|_-3

▲ 图1.2.3  输出25MHz的波形

▲ 图1.2.3 输出25MHz的波形

三、编程控制

  根据 DHO924S的编程说明书, 可以通过网络控制信号源输出信号参数。   在 Python 下, 比较容易进行编程。  这样, 就可以实现对信号输出参数的自动控制。

GM1700200823_1280_720.MPG|_-3

 

  结 ※


  文记录了使用 DHO924S 示波器信号源的体验。  这个信号源不仅使得该示波器具有一机两用的功能, 它的编程接口, 使得它在自动化测量方面具有很强的能力。  这使得今后的电路测试更加的方便。

GM1700200980_1280_720.MPG|_-3


● 相关图表链接:

#!/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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值