diff -r 8becd52c2171 -r 1bbea188a7e5 plotter/gpib_plotter.py --- a/plotter/gpib_plotter.py Mon Feb 04 19:49:48 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -import sys, os -import time -import gpib - -import gpib -from prologix import GPIB -class GPIBplotter(GPIB): - _replies={ - "OE": "0", - "OH": "0,0,10000,7500", - "OI": "7470A", - "OP": "0,0,10000,7500", - "OO": "0,1,0,0,0,0,0,0", - "OF": "40,40", - "OS": "24", - } - def __init__(self, device="/dev/ttyUSB0", baudrate=115200, timeout=0.1, - address=5): - super(GPIBplotter, self).__init__(device, baudrate, timeout, address, mode=0) - - def plotStarted(self): - pass - - def load_plot(self, wait_timeout=0): - """ - Make a full plot process. - - 'wait_timeout' is the first timeout. Same semantic as the - 'timeout' property of a serial connection (if set to None, it - will block until the GPIB device actually perform a plot - command.) - """ - res = "" - i=0 - replies = self._replies.copy() - if wait_timeout is not None and not isinstance(wait_timeout, (float, int)): - raise TypeError, "wait_timeout (%s:%s) has wrong type"%(repr(wait_timeout), type(wait_timeout)) - if wait_timeout<0: - raise ValueError - - self._cnx.timeout = wait_timeout - firstloop = True - newdata = False - while i (self._retries/2): - # ie. we just received new stuffs (i is reset in the else block) - for k, v in replies.items(): - # check wether we should reply smthg - eres = res.replace('\n', '').strip() - if eres.endswith(k) or eres.endswith(k+';') or eres.endswith(k+';OE'): - self._cnx.write("%s"%v) - if k == "OS": - replies[k] = "16" - break - self._cnx.write('\r') - #time.sleep(0.1) - i += 1 - else: - if not res: - print "Plotting..." - res += l + '\n' - i = 0 - #time.sleep(0.1) - if res: - print "DONE (received %d characters)"%len(res) - return res - -if __name__ == '__main__': - import optparse - opt = optparse.OptionParser('A simple HP7470A GPIB plotter emulator for USB-GPIB bundle (ProLogix)') - opt.add_option('-f', '--filename', default=None, - dest='filename', - help='Output filename. If not set, write to stdout') - opt.add_option('-d', '--device', default='/dev/ttyUSB0', - dest='device', - help='Device of the RS232 connection (default: /dev/ttyUSB0)', - ) - opt.add_option('-a', '--address', default=0, - dest='address', - help='GPIB address of the device', - ) - opt.add_option('-l', '--loop', default=False, - action="store_true", - dest="loop", - help="Continuously wait for new plots. If set, filename must be set and files will be created with _n at the end") - opt.add_option('-v', '--verbose', default=False, - action="store_true", - dest="verbose", - help="Verbose mode",) - - options, argv = opt.parse_args(sys.argv) - - if options.loop and not options.filename: - opt.error('If loop is set, you *must* provide a filename') - - if options.filename: - outf = open(options.filename, "w") - else: - outf = sys.stdout - - - try: - plotter = GPIBplotter(device=options.device, address=int(options.address), - timeout=0.06) - except (gpib.SerialException, gpib.ConnectionError), e: - sys.stderr.write('Connection error:\n\t' + '\n\t'.join([str(x) for x in e.args]) + '\n') - sys.stderr.write('Check your parameters\n') - sys.exit(1) - if options.verbose: - sys.stderr.write('connection established\n') - - loop = True - nloop = 0 - while loop: - plot = plotter.load_plot(wait_timeout=0.1) - if options.verbose: - sys.stderr.write('.') - if plot: - outf.write(plot) - if options.verbose: - sys.stderr.write('\n') - sys.stderr.write('Received a new plot (written to %s)\n'%outf.name) - if not options.loop: - loop = False - else: - nloop += 1 - fname, ext = os.path.splitext(options.filename) - outf = open(fname + "_%d"%nloop + ext, 'w') - - - - -