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

fix: use static method for process

- preparation for spawning instead of forking
- fixes issue with message boxes
parent 5d28e537
No related branches found
No related tags found
No related merge requests found
......@@ -82,88 +82,108 @@ class TestStandMainWindow(QMainWindow):
self.stopButton.setEnabled(True)
self.qt_app.processEvents();
p = mp.Process(target=self.do_measurement_impl)
# get parameters for measurement from GUI
os.chdir(self.start_dir)
time_string = time.strftime("%Y_%m_%d-%H_%M_%S")
if self.autoNameCheckbox.isChecked():
output_basename = time_string + "_results"
else:
output_basename = self.baseName.text()
with open('test_stand_parameter.json', 'r') as f:
config_data = json.load(f)
with open('ext_sensor_channels.json', 'r') as f2:
ext_sensor_channels = json.load(f2)
if not self.check_and_change_dir(config_data['data_folder'] + '/' + output_basename):
return
if self.tempSweepButton.isChecked():
measurement_type = 'temperature'
elif self.humSweepButton.isChecked():
measurement_type = 'humidity'
elif self.measurementFileButton.isChecked():
measurement_type = 'file'
error_queue = mp.Queue(3)
p = mp.Process(target=TestStandMainWindow.do_measurement_impl,
args=(measurement_type, self.startParameter.value(), self.stopParameter.value(),
self.stepParameter.value(), self.fixedParameter.value(), self.soakingTime.value(),
self.stableReads.value(), time_string, self.get_analysis_config(time_string),
os.path.join(self.start_dir, self.measurementFile.text()), error_queue, config_data,
ext_sensor_channels))
p.start()
while p.is_alive():
time.sleep(0.1)
self.qt_app.processEvents();
p.join()
while not error_queue.empty():
QtWidgets.QMessageBox.critical(self, 'Error', error_queue.get())
self.runSettingsLayout.setEnabled(True)
self.startButton.setEnabled(True)
self.stopButton.setEnabled(False)
#the part that is started in a separate process
def do_measurement_impl(self):
os.chdir(self.start_dir)
with open('test_stand_parameter.json', 'r') as f:
config_data = json.load(f)
with open('ext_sensor_channels.json', 'r') as f2:
ext_sensor_channels = json.load(f2)
time_string = time.strftime("%Y_%m_%d-%H_%M_%S")
if self.autoNameCheckbox.isChecked():
output_basename = time_string + "_results"
else:
output_basename = self.baseName.text()
if not self.check_and_change_dir(config_data['data_folder'] + '/' + output_basename):
return
@staticmethod
def do_measurement_impl(measurement_type, output_basename, start_parameter, stop_parameter, step_parameter,
fixed_parameter, soaking_time, stable_reads, analysis_config, measurement_file, error_queue,
config_data, ext_sensor_channels):
meas = None
try:
meas = prototype.Measurements(config_data, output_basename,False, ext_sensor_channels)
q = mp.Queue()
if self.tempSweepButton.isChecked():
temperatures = meas.perform_sweep(self.startParameter.value(), self.stopParameter.value(),
self.stepParameter.value(), self.fixedParameter.value(),
self.soakingTime.value(), self.stableReads.value(),
if measurement_type == 'temperature':
temperatures = meas.perform_sweep(start_parameter, stop_parameter, step_parameter, fixed_parameter,
soaking_time, stable_reads,
'temperature')
temp_extensions = []
for t in temperatures:
temp_extensions.append(str(t) + 'deg_' + str(self.fixedParameter.value()) + 'rh')
analysis.plot_sweep(temperatures, [self.fixedParameter.value()] * len(temperatures), output_basename,
temp_extensions.append(str(t) + 'deg_' + str(fixed_parameter) + 'rh')
analysis.plot_sweep(temperatures, [fixed_parameter] * len(temperatures), output_basename,
'temperature', meas.dut.get_measurement_set_names(),
meas.dut.get_dut_reference_signal_names(), self.get_analysis_config(time_string))
meas.dut.get_dut_reference_signal_names(), analysis_config)
prototype.plot_output(output_basename, temp_extensions, True, config_data, ext_sensor_channels,
meas.dut.get_measurement_set_names(), meas.dut.get_dut_reference_signal_names(),
output_basename + ': Temperature sweep ' + str(temperatures[0]) + '--' +
str(temperatures[-1]) + ' degC @ ' + str(self.fixedParameter.value()) + ' % r.h.')
str(temperatures[-1]) + ' degC @ ' + str(fixed_parameter) + ' % r.h.')
elif self.humSweepButton.isChecked():
humidities = meas.perform_sweep(self.startParameter.value(), self.stopParameter.value(),
self.stepParameter.value(), self.fixedParameter.value(),
self.soakingTime.value(), self.stableReads.value(),
'humidity')
elif measurement_type == 'humidity':
humidities = meas.perform_sweep(start_parameter, stop_parameter, step_parameter, fixed_parameter,
soaking_time.value(), stable_reads, 'humidity')
hum_extensions = []
for h in humidities:
hum_extensions.append(str(self.fixedParameter.value()) + 'deg_' + str(h) + 'rh')
analysis.plot_sweep([self.fixedParameter.value()] * len(humidities), humidities, output_basename,
hum_extensions.append(str(fixed_parameter) + 'deg_' + str(h) + 'rh')
analysis.plot_sweep([fixed_parameter] * len(humidities), humidities, output_basename,
'humidity', meas.dut.get_measurement_set_names(),
meas.dut.get_dut_reference_signal_names(), self.get_analysis_config(time_string))
meas.dut.get_dut_reference_signal_names(), analysis_config)
prototype.plot_output(output_basename, hum_extensions, True, config_data, ext_sensor_channels,
meas.dut.get_measurement_set_names(), meas.dut.get_dut_reference_signal_names(),
output_basename + ': Humidity sweep ' + str(humidities[0]) + '--' +
str(humidities[-1]) + ' % r.h. @ ' + str(self.fixedParameter.value()) + ' degC')
str(humidities[-1]) + ' % r.h. @ ' + str(fixed_parameter) + ' degC')
elif self.measurementFileButton.isChecked():
elif measurement_type == 'file':
try:
n_measurements = meas.perform_measurements(os.path.join(self.start_dir,
self.measurementFile.text()))
prototype.plot_output(output_basename, range(n_measurements), True, config_data, ext_sensor_channels,
n_measurements = meas.perform_measurements(measurement_file)
prototype.plot_output(output_basename, range(n_measurements), True, config_data,
ext_sensor_channels,
meas.dut.get_measurement_set_names(),
meas.dut.get_dut_reference_signal_names(),
output_basename)
except FileNotFoundError as e:
QtWidgets.QMessageBox.warning(self, 'Warning', str(e))
error_queue.put(str(e))
except Exception as e:
print('ERROR: Exception during measurement: '+str(e))
QtWidgets.QMessageBox.critical(self, 'Error', str(e))
error_queue.put(str(e))
finally:
if meas is not None:
......
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