aboutsummaryrefslogtreecommitdiff
path: root/qolab/hardware
diff options
context:
space:
mode:
Diffstat (limited to 'qolab/hardware')
-rw-r--r--qolab/hardware/multimeter/bk_5491.py87
1 files changed, 52 insertions, 35 deletions
diff --git a/qolab/hardware/multimeter/bk_5491.py b/qolab/hardware/multimeter/bk_5491.py
index 677f40a..015c36c 100644
--- a/qolab/hardware/multimeter/bk_5491.py
+++ b/qolab/hardware/multimeter/bk_5491.py
@@ -3,18 +3,21 @@ from qolab.hardware.multimeter import Multimeter
from pyvisa import constants as pyvisa_constants
import time
+
class BK_5491(Multimeter):
- """ BK 5491 multimeter """
+ """BK 5491 multimeter"""
+
"""
rm = pyvisa.ResourceManager()
instr=rm.open_resource('ASRL/dev/ttyUSB0::INSTR')
Make sure to switch off the ECHO at the multimeter communication setup
"""
+
def __init__(self, resource, *args, **kwds):
super().__init__(*args, **kwds)
self.resource = resource
- self.config['Device model']='BK 5491'
- self.resource.read_termination = '\r\n'
+ self.config["Device model"] = "BK 5491"
+ self.resource.read_termination = "\r\n"
self.resource.baud_rate = 9600
self.resource.data_bits = 8
self.resource.parity = pyvisa_constants.Parity.none
@@ -31,22 +34,23 @@ class BK_5491(Multimeter):
self.read_binary_values = self.resource.read_binary_values
self.query_binary_values = self.resource.query_binary_values
- self.switchTime = 0.5 # switch time in seconds for Function/Measurement change
- self.deviceProperties.update({'Function'})
+ self.switchTime = 0.5 # switch time in seconds for Function/Measurement change
+ self.deviceProperties.update({"Function"})
def isPrompt(self, string):
- if string[1] == '>':
+ if string[1] == ">":
return True
return False
def isPromptGood(self, prompt):
- if prompt[0:2] == '=>':
+ if prompt[0:2] == "=>":
return True
- print(f'Error detected {prompt=}')
+ print(f"Error detected {prompt=}")
return False
def write(self, cmd_string):
return self._readwrite(cmd_string, expect_reply=False, Nattemts=1)
+
def query(self, cmd_string):
return self._readwrite(cmd_string, expect_reply=True, Nattemts=5)
@@ -57,33 +61,37 @@ class BK_5491(Multimeter):
BK_5491 is not a SCPI instrument, so we get some replies (prompts *>, =>, etc)
even if we just send a command not a query. So we have to work around this.
"""
- self.resource.read_bytes( self.resource.bytes_in_buffer ) # clear read buffer
+ self.resource.read_bytes(self.resource.bytes_in_buffer) # clear read buffer
# print(f"dbg: {cmd_string=}")
self.resource.write(cmd_string)
if expect_reply:
- reply = self.resource.read() # this should be result
+ reply = self.resource.read() # this should be result
# print(f"dbg: {reply=}")
if self.isPrompt(reply):
prompt = reply
- if prompt[0] == '@':
+ if prompt[0] == "@":
if Nattemts >= 2:
# print('dbg: numeric reading is not available yet, attempt one more time')
time.sleep(self.switchTime)
- return self._readwrite(cmd_string, expect_reply=expect_reply, Nattemts=Nattemts-1)
- print(f'Error: we ask {cmd_string=} and got prompt "{reply}" instead of result')
+ return self._readwrite(
+ cmd_string, expect_reply=expect_reply, Nattemts=Nattemts - 1
+ )
+ print(
+ f'Error: we ask {cmd_string=} and got prompt "{reply}" instead of result'
+ )
return None
else:
reply = None
- prompt = self.resource.read() # this should be prompt
+ prompt = self.resource.read() # this should be prompt
if not self.isPromptGood(prompt):
print(f'Error: expected good prompt but got "{prompt=}"')
return reply
def getReading(self):
- """ Report current measurement displayed on the first/main display """
- ret_string = self.query('R1')
- # print(f'dbg: getReading received "{ret_string}"')
- return float(ret_string)
+ """Report current measurement displayed on the first/main display"""
+ ret_string = self.query("R1")
+ # print(f'dbg: getReading received "{ret_string}"')
+ return float(ret_string)
"""
BK_5491 has two displays which could be set and read separately,
@@ -94,37 +102,45 @@ class BK_5491(Multimeter):
If this is needed it would be followed by 3 symbols specifiers as
outline in the manual.
"""
+
@BasicInstrument.tsdb_append
def getVdc(self):
- self.write('S10')
+ self.write("S10")
return self.getReading()
+
@BasicInstrument.tsdb_append
def getVac(self):
- self.write('S11')
+ self.write("S11")
return self.getReading()
+
@BasicInstrument.tsdb_append
def getAdc(self):
- self.write('S14')
+ self.write("S14")
return self.getReading()
+
@BasicInstrument.tsdb_append
def getAac(self):
- self.write('S15')
+ self.write("S15")
return self.getReading()
+
@BasicInstrument.tsdb_append
def getResistance(self):
- self.write('S12')
+ self.write("S12")
return self.getReading()
+
@BasicInstrument.tsdb_append
def getResistance4Wires(self):
- self.write('S13')
+ self.write("S13")
return self.getReading()
+
@BasicInstrument.tsdb_append
def getDiode(self):
- self.write('S16')
+ self.write("S16")
return self.getReading()
+
@BasicInstrument.tsdb_append
def getFreq(self):
- self.write('S17')
+ self.write("S17")
return self.getReading()
"""
@@ -151,11 +167,12 @@ class BK_5491(Multimeter):
K19 - Shift then Up keys (increasing the intensity of the VFD display)
K20 - Shift then Down keys (decreasing the intensity of the VFD display)
"""
+
def toLocal(self):
- self.sendCmd('K13', expect_reply=False)
+ self.sendCmd("K13", expect_reply=False)
def getFunction(self):
- reply = self.query('R0')
+ reply = self.query("R0")
"""
According to the manual:
The reply is in 10 digits in the form <h1><h2><g1><g2><v><x><f1><r1><f2><r2>
@@ -198,14 +215,14 @@ class BK_5491(Multimeter):
return "Unknown"
-
-if __name__ == '__main__':
+if __name__ == "__main__":
import pyvisa
+
print("testing")
rm = pyvisa.ResourceManager()
- print(rm.list_resources())
- instr=rm.open_resource('ASRL/dev/ttyUSB0::INSTR')
+ print(rm.list_resources())
+ instr = rm.open_resource("ASRL/dev/ttyUSB0::INSTR")
multimeter = BK_5491(instr)
- print('------ Header start -------------')
- print(str.join('\n', multimeter.getHeader()))
- print('------ Header ends -------------')
+ print("------ Header start -------------")
+ print(str.join("\n", multimeter.getHeader()))
+ print("------ Header ends -------------")