# HG changeset patch # User Daniel O'Connor # Date 1312946467 -34200 # Node ID c2c13d804fce36702acc27b1e159fd96ffb0ac0f # Parent 37d6ceb4850fbe0467acfff2df8a1045f17a4ab4 Rename examples, rework them to be clearer and use helper functions. diff -r 37d6ceb4850f -r c2c13d804fce example.py --- a/example.py Wed Aug 10 12:50:37 2011 +0930 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2009 -# Daniel O'Connor . All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. -# - -import usb488 -import matplotlib.pylab as pylab -import numpy -import time - -def main(): - u = usb488.USB488Device() - print "Found device" - - u.write("*IDN?") - print "IDN reports " + u.read() - - u.write("DATA:ENC RIB") # Big endian signed - u.write("DATA:WIDTH 2") # 2 bytes wide - u.write("SELECT:CH1 ON") # Turn channel 1 on - u.write("DATA:SOURCE CH1") # Set the curve source to channel 1 - u.write("CURVE?") # Ask for the curve data - then = time.time() - result = u.read(1.0) # Takes the CRO a while for this - now = time.time() - print "CURVE read took %f milliseconds" % ((now - then) * 1000.0) - data = result[13:] # Chop off the header - dattype = numpy.dtype('>h') # Big endian 16 bit quantity - ary = numpy.fromstring(data, dtype = dattype) - pylab.plot(ary) - pylab.show() - -if __name__ == "__main__": - main() diff -r 37d6ceb4850f -r c2c13d804fce example2.py --- a/example2.py Wed Aug 10 12:50:37 2011 +0930 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2009 -# Daniel O'Connor . All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. -# - -import rsib -import numpy -from matplotlib import pylab - -def test(r): - r.write('*IDN?') - print "ID is " + r.read(5) - r.write("*RST") - r.write("INIT:CONT OFF") - r.write("SYST:DISP:UPD ON") - r.write("FREQ:STAR 85MHz;STOP 125MHz") - r.write("DISP:WIND:TRAC:T:RLEV -20dBm") - r.write("INIT;*WAI") - r.write("*OPC?") - print "OPC - " + r.read(10) - r.write("CALC:MARK:PEXC 6DB") - r.write("CALC:MARK:FUNC:TOI ON") - r.write("CALC:MARK:FUNC:TOI:RES?") - print "Result " + r.read(10) - - r.write("FORM:DATA ASC") - r.write("CALC:LIM5:NAME 'TEST1'") - r.write("CALC:LIM5:COMM 'Upper limit line'") - r.write("CALC1:LIM5:TRAC 2") - r.write("TRAC1? TRACE1") - data = r.read(10) - #print "Data - " + dat - data = map(float, data.split(',')) - ary = numpy.array(data) - pylab.plot(ary) - pylab.show() - -if __name__ == '__main__': - r = rsib.RSIBDevice('localhost') - test(r) - diff -r 37d6ceb4850f -r c2c13d804fce rs_fsp7_example.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rs_fsp7_example.py Wed Aug 10 12:51:07 2011 +0930 @@ -0,0 +1,90 @@ +#!/usr/bin/env python + +# Copyright (c) 2011 +# Daniel O'Connor . All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# + +import numpy +from matplotlib import pylab +import rsib +import scpi + +def test(r): + # ID instrument + r.write('*IDN?') + print "ID is " + r.read(5) + + # Reset to defaults + r.write("*RST") + + # Set to single sweep mode + r.write("INIT:CONT OFF") + + # Enable display updates + r.write("SYST:DISP:UPD ON") + + # Set frequency range + r.write("FREQ:STAR 85MHz;STOP 125MHz") + + # Set reference level + r.write("DISP:WIND:TRAC:Y:RLEV -20dBm") + + # Trigger the sweep + r.write("INIT;*WAI") + + # Wait up to 10 seconds for it to be done + r.write("*OPC?") + print "OPC - " + r.read(10) + + # Set peak excursion + r.write("CALC:MARK:PEXC 6DB") + # Find 3rd order intercept & get result + r.write("CALC:MARK:FUNC:TOI ON") + r.write("CALC:MARK:FUNC:TOI:RES?") + print "Result " + r.read(10) + + # Set data format + r.write("FORM REAL,32") + #r.write("FORM:DATA ASC") + + # Set limit line + r.write("CALC:LIM5:NAME 'TEST1'") + r.write("CALC:LIM5:COMM 'Upper limit line'") + r.write("CALC1:LIM5:TRAC 2") + + # Grab trace data + r.write("TRAC1? TRACE1") + data = r.read(10) + #print "Data - " + dat + #ary = ascdecode(data) + ary = bindecode(data) + + # Plot data + pylab.plot(ary) + pylab.show() + +if __name__ == '__main__': + r = rsib.RSIBDevice('analyzer') + test(r) + diff -r 37d6ceb4850f -r c2c13d804fce tek2024b_example.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tek2024b_example.py Wed Aug 10 12:51:07 2011 +0930 @@ -0,0 +1,82 @@ +#!/usr/bin/env python + +# Copyright (c) 2009 +# Daniel O'Connor . All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# + +import matplotlib.pylab as pylab +import numpy +import scpi +import time +import usb488 + +def test(u): + u.write("*IDN?") + print "IDN reports " + u.read() + + # Set data format to 16 bit big endian signed + u.write("DATA:ENC RIB") + u.write("DATA:WIDTH 2") + + # Turn channel 1 on + u.write("SELECT:CH1 ON") + + # Set the curve source to channel 1 + u.write("DATA:SOURCE CH1") + + # Fetch channel scale + u.write("CH1:SCALE?") + vscale = float(u.read(1).split()[1]) + print "Channel 1 scale is %.2f volts/div" % (vscale) + + # Fetch horizontal scale + u.write("HOR:MAIN:SCALE?") + hscale = float(u.read(1).split()[1]) + print "Horizontal scale is %f sec/div" % (hscale) + + # Make sure the previous commands have been executed + u.write("*WAI") + + # Fetch curve data (wait up to 1 second) + u.write("CURVE?") + then = time.time() + result = u.read(1.0) + now = time.time() + print "CURVE read took %f milliseconds" % ((now - then) * 1000.0) + + # Parse data + ary = scpi.bindecode(result, header = ':CURVE ', dtype = numpy.dtype('>h')) + + # Convert to volts + ary = ary / 32768.0 * vscale + + # Plot data + pylab.plot(ary) + pylab.show() + +if __name__ == "__main__": + u = usb488.USB488Device() + print "Found device" + + test(u)