diff --git a/examples/take_agilent_waveforms.py b/examples/take_agilent_waveforms.py new file mode 100755 index 0000000..444e6ba --- /dev/null +++ b/examples/take_agilent_waveforms.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python + +import time +import pyvxi11 +import datetime +import csv + +def chunks(l, n): + """Yield successive n-sized chunks from l.""" + for i in range(0, len(l), n): + yield l[i:i + n] + +def take_waveform_word(dev, filename, channel): + dev.write(':WAVEFORM:SOURCE ' + channel) + dev.write(':WAVEFORM:FORMAT WORD') # ASCII, BYTE, WORD, BINARY + dev.write(':WAVEFORM:DATA?') + data = dev.read() + data = data[int(data[1])+2:-1] + if len(data)%2 != 0: + raise ValueError('recieved data length not mutiple of 2') + dev.write(':WAVEFORM:YINCREMENT?') + inc = float(dev.read()[:-1]) + dev.write(':WAVEFORM:YORIGIN?') + offs = float(dev.read()[:-1]) + values = map(lambda i: ( (ord(i[0])<<8) + ord(i[1]) - ((ord(i[0])&0x80)>>7)*0xffff ) * inc + offs, \ + chunks(data,2)) + filename = filename + '.csv' + with open(filename, 'wb') as f: + wr = csv.writer(f) + values = zip(values) + for value in values: + wr.writerow(value) +# wr.writerow(values) + +def take_waveform(dev, filename, channel='CHANNEL1', form='ASCII'): + dev.write(':WAVEFORM:SOURCE ' + channel) + dev.write(':WAVEFORM:FORMAT ' + form) # ASCII, BYTE, WORD, BINARY + dev.write(':WAVEFORM:DATA?') + data = dev.read() + if form == 'WORD': + data = data[int(data[1])+2:-1] + filename = filename + '.bin' + if form == 'ASCII': + filename = filename + '.csv' + with open(filename, 'w') as f: + f.write(data) + + +HOST = 'osc05' +CHANNEL = 'CHANNEL2' +CHANNEL = 'WMEMORY1' +CHANNEL = 'FUNCTION1' + +def main(): + dev = pyvxi11.Vxi11(HOST) + dev.open() + dev.io_timeout = 300 + datestring = datetime.datetime.now().strftime('%y-%m-%d_%H-%M-%S') + + filename = 'waveform_' + CHANNEL + '_' + datestring +# take_waveform(dev, filename, CHANNEL, 'WORD') +# take_waveform(dev, filename, CHANNEL, 'ASCII') + + take_waveform_word(dev, filename, CHANNEL) + dev.write(':WAVEFORM:XINCREMENT?') + print 'x_increment:' + dev.read() + dev.write(':WAVEFORM:XORIGIN?') + print 'x_origin:' + dev.read() + dev.write(':WAVEFORM:YINCREMENT?') + print 'y_increment:' + dev.read() + dev.write(':WAVEFORM:YORIGIN?') + print 'y_origin:' + dev.read() + + dev.close() + +if __name__ == '__main__': + main() diff --git a/examples/take_measurement.py b/examples/take_measurement.py new file mode 100644 index 0000000..42e15be --- /dev/null +++ b/examples/take_measurement.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +# example to take measurements periodicly after trigger occured +# calculate simple statistics modes to the measurement values +# works with tektronix tds series + +import sys +import time +import pyvxi11 +import datetime + +HOST = sys.argv[0] + +def main(): + dev = pyvxi11.Vxi11(HOST) + dev.open() + dev.io_timeout = 10 + + count = 4 + sum = 0 + square_sum = 0 + cube_sum = 0 + quad_sum = 0 + min = 0 + max = 0 + mean = 0 + rms = 0 + skewness = 0 + ekurtosis = 0 + + print datetime.datetime.now().strftime('screen_%y-%m-%d_%Hh%Mm%S.png') + start_second = int(datetime.datetime.now().strftime("%s")) + dev.write('ACQUIRE:STATE ON') + + while True: + state = dev.ask(':ACQ?').split(';')[1] + if state == "STATE 0": + # capture screenshot + value = float(dev.ask('MEASUREMENT:MEAS1:VALUE?').split(' ')[1]) + count += 1 + if value > max: + max = value + if value < min: + min = value + sum += value + square_sum += pow(value, 2) + cube_sum += pow(value, 3) + quad_sum += pow(value, 4) + mean = sum / count + rms = pow((square_sum - pow(sum, 2)/count) / (count-1), 0.5) + skewness = cube_sum / pow(rms, 3) * count / (count-1) / (count-2) + ekurtosis = ( quad_sum / pow(rms, 4) * \ + (count+1) / (count-1) - 3 * count ) * \ + count / (count-2) / (count-3) + print "%i, %e, %e, %e, %e, %e, %e, %e" % \ + (count, value, min, max, mean, rms, skewness, ekurtosis) + + # reenable single shot + dev.write('ACQUIRE:STATE ON') + + dev.close() + +if __name__ == '__main__': + main() diff --git a/examples/tek-screenshot.py b/examples/tek-screenshot.py index c5fba7b..6ec0bf7 100755 --- a/examples/tek-screenshot.py +++ b/examples/tek-screenshot.py @@ -30,6 +30,7 @@ f = file(sys.argv[2], 'w') v = pyvxi11.Vxi11(sys.argv[1]) v.open() +v.io_timeout = 10 v.write(r'EXPORT:FILENAME "C:\TEMP\SCREEN.PNG"') v.write('EXPORT:FORMAT PNG') v.write('EXPORT:IMAGE NORMAL') @@ -38,6 +39,7 @@ #v.write('EXPORT:VIEW GRATICULE') #v.write('EXPORT:VIEW FULLNO') v.write('EXPORT START') +time.sleep(3) v.write(r'FILESYSTEM:PRINT "C:\TEMP\SCREEN.PNG", GPIB') time.sleep(0.5) f.write(v.read())