Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions examples/take_agilent_waveforms.py
Original file line number Diff line number Diff line change
@@ -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()
64 changes: 64 additions & 0 deletions examples/take_measurement.py
Original file line number Diff line number Diff line change
@@ -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()
2 changes: 2 additions & 0 deletions examples/tek-screenshot.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand All @@ -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())
Expand Down