0

I am collecting over 100k FastFrame images (100 frames, with 15k points each), with summary mode and collecting them via python pyvisa using ni-visa.

The error is as follows:

SEVERE
The system is low on memory. Some results may be incomplete. To remedy, reduce record length or remove one or more analytical features such as math, measurements, bus decode or search.

After that, I can disconnect, connect again, send commands which update the window, but cannot query anything. I suspect it is something to do with a memory leak on MSO56 RAM, or communication queue. Commands like *RST, CLEAR, LCS, and FACTORY do not fix the error.

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()
mkrieger1
  • 19,194
  • 5
  • 54
  • 65
  • Have you considered doing some of the things the error message suggests? – mkrieger1 Feb 04 '22 at 22:44
  • I did, but it does not allow for collection. The scan works for 100k collections, just fails later. I would like to maintain resolution since it is only 15-25k pts. – Nikola Draganic Feb 04 '22 at 22:48
  • @NikolaDraganic have you tried running the `TEKSecure` command? this should wipe the NV memory and get you to a working state without needing to power down the device... though it takes 3-5mins so might not be a better solution – Nifim Feb 08 '22 at 15:36

1 Answers1

0

Poor Solution.

Restarting the Scope with the power button works.

I should have added that in the question, but takes ~ 2 minutes and is not an elegant solution.