import serial import serial.threaded import threading import time import re import platform import sys import datetime try: import queue except ImportError: import Queue as queue class GPIBProtocol(serial.threaded.LineReader): TERMINATOR = b'\n' def __init__(self): super(GPIBProtocol, self).__init__() self.responses = queue.Queue() self.lock = threading.Lock() def init_hpib(self): with self.lock: self.write_line("++savecfg 0") self.write_line("++auto 0") self.write_line("++eoi 1") self.write_line("++eos 2") self.write_line("++eot_enable 0") self.write_line("++eot_char 0") self.write_line("++read_tmo_ms 500") def command(self, command, timeout=0.2, address=None): with self.lock: if address: self.write_line("++addr {:d}".format(address)) self.write_line(command) if "?" in command: self.write_line("++read eoi") # The command was a query, wait for response try: line = self.responses.get(timeout=timeout) except Empty: print("No frequency returned") return None return line else: pass def handle_line(self, line): self.responses.put(line)