0

我正在收集超过 100k FastFrame 图像(100 帧,每个帧有 15k 点),使用摘要模式并使用 ni-visa 通过 python pyvisa 收集它们。

错误如下:

严重
系统内存不足。有些结果可能不完整。要进行补救,请减少记录长度或删除一项或多项分析功能,例如数学、测量、总线解码或搜索。

之后,我可以断开连接,再次连接,发送更新窗口的命令,但无法查询任何内容。我怀疑这与 MSO56 RAM 或通信队列上的内存泄漏有关。*RST、CLEAR、LCS 和 FACTORY 等命令不能修复错误。

import pyvisa
import time


if __name__ == '__main__':
    
    ## DEV Signal
    rm = pyvisa.ResourceManager()
    ll = rm.list_resources()

    print('\n\n\n----------------------\nAvailable Resources\n----------------------')
    for i in range(len(ll)):
        print(F'Resource ID {i}: {ll[i]}')

    #i = int(input(F"\n\nPlease select 'Resource ID' from above: "))
    i=0;
    inst = rm.open_resource(ll[i])

    inst.timeout = 10000
    reset = inst.write("*RST")
    ind = inst.query("*IDN?")
    print(F"\nResource {i}: {ind}")
    inst.write('C1:OUTP ON')
    inst.write('C2:OUTP ON')
    
  
    
    # Wave signal
    Ch = 1; # channel 1 || 2 
    wave_name = 'UT1'
    Frq = 500000; #Hz
    Peri = 1/Frq;# Length of waveform
    print(F"Period: {Peri}")
    
    # trigger on channel 2
    inst.write(F'C2:BSWV WVTP,SQUARE,FRQ,{Frq},AMP,1,OFST,0,DUTY,1') 
    
    # signal on channel 1
    inst.write(F'C1:BSWV WVTP,SQUARE,FRQ,{Frq},AMP,1,OFST,0,DUTY,10') 
    
    
    inst = []
    scope_ip = '192.168.0.10';
    rm = pyvisa.ResourceManager()
    ll = rm.list_resources()
    print(ll)
    for l in ll:
        if scope_ip in l:
            vScope = rm.open_resource(l)
    #vScope.clear()
    #vScope.close()
    

    
    vScope.timeout = 2000
    
    ## attempts to fix Memory Error
    vScope.write_raw('FPANEL:PRESS RESTART')
    vScope.write_raw('*PSC ON')
    vScope.write_raw('*CLS')
    vScope.write_raw('FACTORY\n')
    vScope.write_raw('*RST')
    vScope.write_raw('*CLEAR')
    vScope.write_raw('*ESE 1')
    vScope.write_raw('*SRE 0')
    vScope.write_raw('DESE 1')
    print('\nESR')
    print(vScope.query('*ESR?'))
    #print('\nEVMSG?')
    #print(vScope.query('*EVMsg?'))
    #print(vScope.query('*ESE ?'))
    
    # Display Wave Forms
    vScope.write_raw('DISPLAY:WAVEVIEW1:CH1:STATE 1')
    vScope.write_raw('DISPLAY:WAVEVIEW1:CH2:STATE 1')
    
    # Vertical Command Groups.
    vScope.write_raw('CH1:Coupling DC')
    vScope.write_raw('CH2:Coupling DC')
    vScope.write_raw('CH1:SCALE .5') # *10 for the range
    vScope.write_raw('CH2:SCALE .5')
    vScope.write_raw('CH1:Position 0')
    vScope.write_raw('CH2:Position 0')
    
    vScope.write_raw('TRIGGER:A:TYPE EDGE')
    vScope.write_raw('TRIGGER:A:EDGE:SOURCE CH2')
    vScope.write_raw('TRIGger:A:LEVEL:CH2 0')
    vScope.write_raw('TRIGger:A:EDGE:SLOpe RISE')
    
    vScope.write_raw('Horizontal:Position 10')
    vScope.write_raw('Horizontal:MODE MANUAL')
    vScope.write_raw('Horizontal:Samplerate 25000000000')
    vScope.write_raw('HORIZONTAL:MODE:RECORDLENGTH 25000')
    
    vScope.write_raw('DATA:SOURCE CH1')
    
    vScope.write_raw('ACQUIRE:STOPAFTER SEQUENCE')## triggers re-read
    
    nframes = 100;
    vScope.write_raw(F"HORIZONTAL:FASTFRAME:COUNT {nframes}")
    if int(1):
        vScope.write_raw(F"DATA:FRAMESTART {1+nframes}")
    else:
        vScope.write_raw('DATA:FRAMESTART 1')
    vScope.write_raw(F"DATA:FRAMESTOP {1+nframes}")
    vScope.write_raw('HORIZONTAL:FASTFRAME:STATE OFF')
    vScope.write_raw('HORIZONTAL:FASTFRAME:STATE ON')
    vScope.write_raw('HORIZONTAL:FASTFRAME:SUMFRAME:STATE ON')
    vScope.write_raw(F"HORIZONTAL:FASTFRAME:SELECTED {1+nframes}")
    
    t0 = time.time()
    for i in range(1000000):
        vScope.write_raw('ACQUIRE:STATE 1') ## triggers re-read
        vScope.query('*opc?') 
        vScope.write_raw(b'WFMOUTPRE?')
        wfmo = vScope.read_raw()
        vScope.write_raw('CURVE?')
        curve = vScope.read_raw()
        if i%100 ==0:
            print(F"Iteration {i}")
            print(F"Time Delta: {time.time()-t0}")
            t0=time.time()
4

1 回答 1

0

糟糕的解决方案。

使用电源按钮重新启动示波器有效。

我应该在问题中添加这一点,但需要大约 2 分钟并且不是一个优雅的解决方案。

于 2022-02-04T22:53:21.347 回答