diff --git a/Python_script/climate-lab-gui.py b/Python_script/climate-lab-gui.py index 849d0fec2de2147523826b6b270ab0290bc939c1..7f96356bfa457f3e44ca1f8c884a093fe2945ebd 100755 --- a/Python_script/climate-lab-gui.py +++ b/Python_script/climate-lab-gui.py @@ -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: