# HG changeset patch # User Daniel O'Connor # Date 1692861730 -34200 # Node ID 00800345fbae3aad56ea3facfb41cbfc5d86e4f2 # Parent 6ffa6fcf278ee9482ef8dbe0a8538ee3de338aea Python3ise RSIB code diff -r 6ffa6fcf278e -r 00800345fbae rs_fsp7_example.py --- a/rs_fsp7_example.py Mon Aug 30 12:40:43 2021 +0930 +++ b/rs_fsp7_example.py Thu Aug 24 16:52:10 2023 +0930 @@ -33,7 +33,7 @@ def test(r): # ID instrument r.write('*IDN?') - print("ID is " + r.read(5)) + print("ID is " + r.read(5).decode('ascii')) # Reset to defaults r.write("*RST") diff -r 6ffa6fcf278e -r 00800345fbae rsib.py --- a/rsib.py Mon Aug 30 12:40:43 2021 +0930 +++ b/rsib.py Thu Aug 24 16:52:10 2023 +0930 @@ -77,7 +77,6 @@ MSG_CMD = 0x90 # Command to the instrument MSG_SRQ = 0x91 # Query SRQ -import exceptions import socket class RSIBDevice(object): @@ -93,12 +92,12 @@ s1 = socket.socket() s1.settimeout(5) s1.connect((self.host, self.port)) - s1.send('\x00\x00\x00\x40') - rx = '' + s1.send(b'\x00\x00\x00\x40') + rx = b'' while len(rx) < 8: rx = rx + s1.recv(8) - if rx == '': - raise exceptions.IOError("EOF from device") + if rx == b'': + raise IOError("EOF from device") s2 = socket.socket() s2.settimeout(5) @@ -114,11 +113,11 @@ self.s1.settimeout(timeout) if len(cmd) > 0x99: - raise exceptions.ValueError("Command too long") + raise ValueError("Command too long") # Pre-increment for easy comparison in read self.tag = (self.tag + 1) & 0xff - msg = '\x00\x00\x00' + chr(len(cmd)) + '\x90\x00' + chr(self.tag) + cmd + msg = b'\x00\x00\x00' + bytes([len(cmd)]) + b'\x90\x00' + bytes([self.tag]) + cmd.encode('ascii') self.s1.send(msg) def read(self, timeout = 0.5): @@ -127,67 +126,67 @@ self.s1.settimeout(timeout) # Fetch the header - rx = '' + rx = b'' while len(rx) < 7: rx = self.s1.recv(7) - if rx == '': - raise exceptions.IOError("EOF from device") + if rx == b'': + raise IOError("EOF from device") - if self.tag != ord(rx[6]): - raise exceptions.IOError("Reply out of order, got 0x%02x expected 0x%02x" % (ord(rx[6]), self.tag)) + if self.tag != rx[6]: + raise IOError("Reply out of order, got 0x%02x expected 0x%02x" % (ord(rx[6]), self.tag)) - rxlen = ord(rx[0]) << 24 | ord(rx[1]) << 16 | ord(rx[2]) << 8 | ord(rx[3]) - #print "Msg ID 0x%02x" % (ord(rx[4])) - if False and ord(rx[4]) != MSG_CMDREP: - raise exceptions.IOError("Unexpected Msg ID 0x%02x" % (ord(rx[4]))) + rxlen = rx[0] << 24 | rx[1] << 16 | rx[2] << 8 | rx[3] + #print "Msg ID 0x%02x" % (rx[4]) + if False and rx[4] != MSG_CMDREP: + raise IOError("Unexpected Msg ID 0x%02x" % (rx[4])) - if ord(rx[5]) != 0: - print("Mystery byte %d != 0" % (ord(rx[5]))) + if rx[5] != 0: + print("Mystery byte %d != 0" % (rx[5])) # Fetch the actual reply now we know the length - reply = '' + reply = b'' while len(reply) < rxlen: rx = self.s1.recv(rxlen) - if rx == '': - raise exceptions.IOError("EOF from device") + if rx == b'': + raise IOError("EOF from device") reply += rx return(reply) def queryrsb(self): - msg = '\x00\x00\x00\x00\xd1\x18\x00' + msg = b'\x00\x00\x00\x00\xd1\x18\x00' self.s2.send(msg) - reply = '' + reply = b'' while len(reply) < 7: rx = self.s2.recv(7) - if rx == '': - raise exceptions.IOError("EOF from device") + if rx == b'': + raise IOError("EOF from device") reply += rx # '\x00\x00\x00\x00\x80\x04\x01' => STB = 4 - if rx[4] != '\x80': - raise exceptions.IOError("Incorrect Msg ID in response to STB query") + if rx[4] != b'\x80': + raise IOError("Incorrect Msg ID in response to STB query") - return ord(rx[5]) + return rx[5] def waitsrq(self): - msg = '\x00\x00\x00\x00\xb1\x00\x00' + msg = b'\x00\x00\x00\x00\xb1\x00\x00' def testsrq(self): - msg = '\x00\x00\x00\x00\x91\x00\x00' + msg = b'\x00\x00\x00\x00\x91\x00\x00' self.s2.send(msg) - reply = '' + reply = b'' while len(reply) < 7: rx = self.s2.recv(7) - if rx == '': - raise exceptions.IOError("EOF from device") + if rx == b'': + raise IOError("EOF from device") reply += rx # 00 00 00 00 80 14 08 - SRQ = 0 # 00 00 00 00 a0 64 07 - SRQ = 1 - if rx == '\x00\x00\x00\x00\x80\x14\x08': + if rx == b'\x00\x00\x00\x00\x80\x14\x08': return False - elif rx == '\x00\x00\x00\x00\xa0\x64\x07': + elif rx == b'\x00\x00\x00\x00\xa0\x64\x07': return True else: - raise exceptions.IOError("Unknown SRQ byte sequence - " + str(list(map(ord, rx)))) + raise IOError("Unknown SRQ byte sequence - " + str(rx)) diff -r 6ffa6fcf278e -r 00800345fbae scpi.py --- a/scpi.py Mon Aug 30 12:40:43 2021 +0930 +++ b/scpi.py Thu Aug 24 16:52:10 2023 +0930 @@ -25,7 +25,6 @@ # SUCH DAMAGE. # -import exceptions import numpy import re @@ -56,7 +55,7 @@ data = clean(data) if data[0] != '#': - raise exceptions.ValueError('data length header incorrect') + raise ValueError('data length header incorrect') dlenlen = int(data[1]) if dlenlen == 0: return numpy.array([]) @@ -71,7 +70,7 @@ data = data[0:-1] if len(data) != wanted: - raise exceptions.ValueError('length mismatch, header says %d, actually got %d bytes' % (wanted, len(data))) + raise ValueError('length mismatch, header says %d, actually got %d bytes' % (wanted, len(data))) return numpy.frombuffer(data[2 + dlenlen:], dtype = dtype) def ascdecode(data, dtype = numpy.float32, sep = None): @@ -96,7 +95,7 @@ def instURL(url): m = insturlre.match(url) if m == None: - raise exceptions.ValueError('Unable to parse URL') + raise ValueError('Unable to parse URL') proto, xxx, user, xxx, pwd, address, xxx, port = m.groups() if proto == 'rsib': import rsib @@ -113,6 +112,6 @@ import scpisock return scpisock.SCPISockDevice(address, port) else: - raise exceptions.NotImplementedError("unknown protocol " + proto) + raise NotImplementedError("unknown protocol " + proto)