Skip to content
Snippets Groups Projects
Commit 0e4df51d authored by Martin Killenberg's avatar Martin Killenberg
Browse files

fix: handle connection exceptions and show message box

parent 438ccdfa
No related branches found
No related tags found
No related merge requests found
...@@ -17,6 +17,8 @@ class Vna: ...@@ -17,6 +17,8 @@ class Vna:
Implements the basic operation of the VNA Implements the basic operation of the VNA
""" """
self.vna = None
# open connection here # open connection here
# store the credentials so that methods can access them # store the credentials so that methods can access them
...@@ -233,7 +235,8 @@ class Vna: ...@@ -233,7 +235,8 @@ class Vna:
self.vna.write('*CLS') self.vna.write('*CLS')
def close(self): def close(self):
self.vna.close() if self.vna is not None:
self.vna.close()
def __del__(self): def __del__(self):
self.close() self.close()
...@@ -62,10 +62,8 @@ class err_hdl(Exception): ...@@ -62,10 +62,8 @@ class err_hdl(Exception):
time.sleep(mdelay) time.sleep(mdelay)
mtries -= 1 mtries -= 1
mdelay += backoff mdelay += backoff
print('maximum number of retries [%d] reached\nfunction: %s\nmodule: %s' \ raise Exception('maximum number of retries [%d] reached\nfunction: %s\nmodule: %s' \
% (tries, function.__name__,function.__module__)) % (tries, function.__name__,function.__module__))
return default_response
return function_retry # true decorator return function_retry # true decorator
...@@ -111,6 +109,7 @@ class almemo2490: ...@@ -111,6 +109,7 @@ class almemo2490:
# constructor of class # constructor of class
def __init__(self, ip = '192.168.115.44', timeout = 10): def __init__(self, ip = '192.168.115.44', timeout = 10):
self.tn = None
# set class variabel with ip adress given in parameter list of constructor # set class variabel with ip adress given in parameter list of constructor
self.ip_adress = ip self.ip_adress = ip
...@@ -463,7 +462,8 @@ class almemo2490: ...@@ -463,7 +462,8 @@ class almemo2490:
# close telenet connection # close telenet connection
def close(self): def close(self):
self.tn.close() if self.tn is not None:
self.tn.close()
def __exit__(self): def __exit__(self):
self.close() self.close()
...@@ -477,4 +477,4 @@ class almemo2490: ...@@ -477,4 +477,4 @@ class almemo2490:
\ No newline at end of file
...@@ -62,10 +62,8 @@ class err_hdl(Exception): ...@@ -62,10 +62,8 @@ class err_hdl(Exception):
time.sleep(mdelay) time.sleep(mdelay)
mtries -= 1 mtries -= 1
mdelay += backoff mdelay += backoff
print('maximum number of retries [%d] reached\nfunction: %s\nmodule: %s' \ raise Exception('maximum number of retries [%d] reached\nfunction: %s\nmodule: %s' \
% (tries, function.__name__,function.__module__)) % (tries, function.__name__,function.__module__))
return default_response
return function_retry # true decorator return function_retry # true decorator
...@@ -112,6 +110,7 @@ class almemo710: ...@@ -112,6 +110,7 @@ class almemo710:
# constructor of class # constructor of class
def __init__(self, ip = '192.168.115.94', timeout = 10): def __init__(self, ip = '192.168.115.94', timeout = 10):
self.tn = None
# set class variabel with ip adress given in parameter list of constructor # set class variabel with ip adress given in parameter list of constructor
self.ip_adress = ip self.ip_adress = ip
...@@ -460,7 +459,8 @@ class almemo710: ...@@ -460,7 +459,8 @@ class almemo710:
# close telenet connection # close telenet connection
def close(self): def close(self):
self.tn.close() if self.tn is not None:
self.tn.close()
def __exit__(self): def __exit__(self):
self.close() self.close()
...@@ -476,4 +476,4 @@ class almemo710: ...@@ -476,4 +476,4 @@ class almemo710:
\ No newline at end of file
...@@ -91,8 +91,9 @@ class TestStandMainWindow(QMainWindow): ...@@ -91,8 +91,9 @@ class TestStandMainWindow(QMainWindow):
self.setEnabled(True) self.setEnabled(True)
return return
meas = prototype.Measurements(config_data, output_basename,False, ext_sensor_channels) meas = None
try: try:
meas = prototype.Measurements(config_data, output_basename,False, ext_sensor_channels)
if self.tempSweepButton.isChecked(): if self.tempSweepButton.isChecked():
temperatures = meas.perform_sweep(self.startParameter.value(), self.stopParameter.value(), temperatures = meas.perform_sweep(self.startParameter.value(), self.stopParameter.value(),
self.stepParameter.value(), self.fixedParameter.value(), self.stepParameter.value(), self.fixedParameter.value(),
...@@ -138,9 +139,14 @@ class TestStandMainWindow(QMainWindow): ...@@ -138,9 +139,14 @@ class TestStandMainWindow(QMainWindow):
except FileNotFoundError as e: except FileNotFoundError as e:
QtWidgets.QMessageBox.warning(self, 'Warning', str(e)) QtWidgets.QMessageBox.warning(self, 'Warning', str(e))
except Exception as e:
print('ERROR: Exception during measurement: '+str(e))
QtWidgets.QMessageBox.critical(self, 'Error', str(e))
finally: finally:
meas.chamber.close() if meas is not None:
meas.ext_sensors.close() meas.chamber.close()
meas.ext_sensors.close()
self.setEnabled(True) self.setEnabled(True)
......
...@@ -51,6 +51,13 @@ class MeasurementData: ...@@ -51,6 +51,13 @@ class MeasurementData:
class Measurements: class Measurements:
def __init__(self, config_data, output_basename, standby, ext_sensor_channels): def __init__(self, config_data, output_basename, standby, ext_sensor_channels):
#create all members that need to be closed to be able to write a close function
#which does not throw because of unknown variables
self.chamber = None
self.instr_chamber = None
self.dut = None
self.ext_sensors = None
self.max_delta_temp = config_data['delta_temp'] self.max_delta_temp = config_data['delta_temp']
self.max_delta_hum = config_data['delta_hum'] self.max_delta_hum = config_data['delta_hum']
...@@ -375,7 +382,19 @@ class Measurements: ...@@ -375,7 +382,19 @@ class Measurements:
return (target_hum-self.max_delta_hum <= float(readback_hum)) and \ return (target_hum-self.max_delta_hum <= float(readback_hum)) and \
(float(readback_hum) <= target_hum+self.max_delta_hum) (float(readback_hum) <= target_hum+self.max_delta_hum)
#convecinece function to close everything in case an exception escapes
#FIXME: needs to be called by code using the Measurements object
def close(self):
if self.chamber is not None:
self.chamber.close()
if self.instr_chamber is not None:
self.inst_chamber.close()
if self.dut is not None:
self.dut.close()
if self.ext_sensors is not None:
self.ext_sensors.close()
def plot_output(output_basename, measurements_appendices, show_blocking_plot, config_data, ext_sens_data, def plot_output(output_basename, measurements_appendices, show_blocking_plot, config_data, ext_sens_data,
measurement_set_names, reference_signal_names, title=''): measurement_set_names, reference_signal_names, title=''):
...@@ -466,8 +485,9 @@ if __name__ == '__main__': ...@@ -466,8 +485,9 @@ if __name__ == '__main__':
with open('ext_sensor_channels.json', 'r') as f2: with open('ext_sensor_channels.json', 'r') as f2:
ext_sensor_channels = json.load(f2) ext_sensor_channels = json.load(f2)
mes = Measurements(config_data, output_basename, args.standby, ext_sensor_channels) mes = None
try: try:
mes = Measurements(config_data, output_basename, args.standby, ext_sensor_channels)
if args.file: if args.file:
n_measurements = mes.perform_measurements(args.file) n_measurements = mes.perform_measurements(args.file)
plot_output(output_basename, range(n_measurements), args.plot, config_data, ext_sensor_channels, plot_output(output_basename, range(n_measurements), args.plot, config_data, ext_sensor_channels,
...@@ -489,7 +509,7 @@ if __name__ == '__main__': ...@@ -489,7 +509,7 @@ if __name__ == '__main__':
output_basename + ': Temperature sweep ' + output_basename + ': Temperature sweep ' +
str(temperatures[0]) + ' degC to ' + str(temperatures[-1]) + ' degC') str(temperatures[0]) + ' degC to ' + str(temperatures[-1]) + ' degC')
finally: finally:
mes.chamber.close() if mes is not None:
mes.ext_sensors.close() mes.close()
# mes.plot_output(output) # mes.plot_output(output)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment