Change-Id: Ie7fe10f704aec62c19cae0bab16d43d55d911a36
This commit is contained in:
Oksana Shliakhtun 2024-08-26 14:23:21 +02:00
parent c074d2cbba
commit 0def8f52e7
3 changed files with 25 additions and 3 deletions

View File

@ -17,11 +17,18 @@
#
# Module authors: Oksana Shliakhtun <oksana.shliakhtun@psi.ch>
# *****************************************************************************
"""Hewlett-Packard HP34401A Multimeter (not finished)"""
import re
from frappy.core import HasIO, Readable, Parameter, FloatRange, EnumType, StatusType, IDLE, ERROR, WARN
def string_to_value(value):
"""
Converting the value to float, removing the units, converting the prefix into the number.
:param value: value
:return: float value without units
"""
value_with_unit = re.compile(r'(\d+)([pnumkMG]?)')
value, pfx = value_with_unit.match(value).groups()
pfx_dict = {'p': 1e-12, 'n': 1e-9, 'u': 1e-6, 'm': 1e-3, 'k': 1e3, 'M': 1e6, 'G': 1e9}
@ -117,6 +124,11 @@ class Voltage(HP34401A, Readable):
acdc = None
def write_mode(self, mode):
"""
Set the mode - AC or DC
:param mode: AC/DC
:return:
"""
if mode == 1:
self.comm(f'configure:voltage:AC {self.range}, {self.resolution}')
else:
@ -125,7 +137,11 @@ class Voltage(HP34401A, Readable):
return self.comm(f'function?')
def read_value(self):
self.comm(f'measure:voltage:')
"""
Makes a AC/DC voltage measurement.
:return: AC/DC value
"""
return self.comm(f'measure:voltage:{self.acdc}?')
def write_autorange_acdc(self, function):
full_function = f'{function}:{self.acdc}'
@ -156,7 +172,7 @@ class Current(HP34401A, Readable, Voltage):
def read_range_current(self):
return self.read_range(f'current:{self.acdc}')
def write_autrange_current(self):
def write_autorange_current(self):
return self.write_autorange_acdc('current')
def write_range_current(self, range):

View File

@ -126,6 +126,12 @@ class Resistance(Base, Readable):
self.write_irange(self.irange - 1)
def read_status(self):
"""
Both the mainframe (SR900) and the module (SR921) have the same commands for the status,
here implemented commands are made for module status, not the frame!
:return: status type and message
"""
esr = int(self.communicate('*esr?')) # standart event status byte
ovsr = int(self.communicate('ovsr?')) # overload status
cesr = int(self.communicate('cesr?')) # communication error status

View File

@ -150,7 +150,7 @@ class TemperatureLoop(HasIO, HasConvergence, Drivable):
@Command
def clear_errors(self):
""" Reset after error"""
""" Reset after error. Otherwise the status will not be updated"""
if self.read_status()[0] == ERROR:
try:
self.communicate('ER')