-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGenericDevice.py
More file actions
78 lines (72 loc) · 3.2 KB
/
Copy pathGenericDevice.py
File metadata and controls
78 lines (72 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import sys
import pyvisa as visa
class _GenericDevice:
"""A class to handle connection logic through PyVisa for all
devices.
Not meant to use "as is" rather it is subclassed by each instrument
class.
"""
def __init__(self, addr: str = None, py_backend: bool = None):
"""
Scans for USB devices
"""
if py_backend == True:
self.rm = visa.ResourceManager('@py')
elif sys.platform.startswith('linux'):
self.rm = visa.ResourceManager('@py')
elif sys.platform.startswith('win32'):
self.rm = visa.ResourceManager()
if addr is None:
instruments = self.rm.list_resources()
# usb = list(filter(lambda x: 'USB' in x, instruments))
usb = list(filter(lambda x: 'ASRL' not in x, instruments))
# usb = instruments
if len(usb) == 0:
print('Could not find any device !')
print(f"\n Instruments found : {instruments}")
sys.exit(-1)
elif len(usb) > 1:
print('More than one USB instrument connected' +
' please choose instrument')
for counter, dev in enumerate(usb):
instr = self.rm.open_resource(dev)
try:
print(f"{dev} : {counter} (" +
f"{instr.query('*IDN?')})")
instr.close()
except Exception:
print(f"Could not open device : {Exception}")
answer = input("\n Choice (number between 0 and " +
f"{len(usb)-1}) ? ")
answer = int(answer)
self.resource = self.rm.open_resource(usb[answer])
else:
self.resource = self.rm.open_resource(usb[0])
self.identity = self.resource.query('*IDN?').replace('\n','')
self.short_name = self.identity.split(',')[1].replace(' ','')
print(f"Connected to {self.identity}")
else:
try:
self.resource = self.rm.open_resource(addr)
self.identity = self.resource.query('*IDN?').replace('\n','')
# Device returns string of the form
# <manufacturer>,<model number>,<serial number>,<software revision>
# Use model number to give device a short name
self.short_name = self.identity.split(',')[1].replace(' ','')
print(f"Connected to {self.identity}")
except Exception:
print("ERROR : Could not connect to specified device")
def close(self):
self.resource.close()
self.rm.close()
def print_error(self):
''' Print eventual errors occurred. '''
print('Errors: ' + self.resource.query('SYST:ERR?'), end = '')
def reset(self):
''' Reset instrument to factory default state. Does not clear volatile memory. '''
self.resource.write('*RST')
self.resource.query('*OPC?')
def clear(self):
''' Clear event register, error queue -when power is cycled-. '''
self.resource.write('*CLS')
self.resource.query('*OPC?')