diff --git a/Python_script/first_tempsweep.txt b/Python_script/first_tempsweep.txt new file mode 100644 index 0000000000000000000000000000000000000000..a9dfacdb85f2b2fbbd6ab0892455e61ab9031ac7 --- /dev/null +++ b/Python_script/first_tempsweep.txt @@ -0,0 +1,2 @@ +25.1 35.1 2.5 35 300 30 + diff --git a/Python_script/prototype.py b/Python_script/prototype.py index 2f59f42b6ea64b14788e3048bc8f7c2624d54572..74577361483e461c6f9f4e8687837a9c10cb7271 100755 --- a/Python_script/prototype.py +++ b/Python_script/prototype.py @@ -12,6 +12,7 @@ import VNA import virtual_time import json import MeasurementPlot +import sys TEMPERATURE_STABLE = 0x1 HUMIDITY_STABLE = 0x2 @@ -35,7 +36,7 @@ class MeasurementData: class Measurements: - def __init__(self, chamber_address, vna_address, sweep_file, output_basename, standby, config_data): + def __init__(self, chamber_address, vna_address, output_basename, standby, config_data): self.max_delta_temp = config_data['delta_temp'] self.max_delta_hum = config_data['delta_hum'] self.max_delta_mag = config_data['delta_mag'] @@ -46,7 +47,6 @@ class Measurements: target_accuracy = [self.max_delta_temp, self.max_delta_hum] self.chamber = climate_chamber.create_chamber(chamber_address, target_accuracy) self.vna = VNA.create_vna(vna_address, target_accuracy) - self.sweep_file = sweep_file self.standby = standby self.output_basename = output_basename self.clock = virtual_time.get_clock(chamber_address, target_accuracy) @@ -64,8 +64,8 @@ class Measurements: self.measurement_plot = MeasurementPlot.MeasurementPlot() self.data_collection = [] - def perform_measurements(self): - with open(self.sweep_file) as file: + def perform_measurements(self, sweep_file): + with open(sweep_file) as file: try: measurement_number = 0 while line := file.readline().rstrip(): @@ -90,6 +90,20 @@ class Measurements: standby_response = self.chamber.set_mode('STANDBY') print(standby_response) + def perform_temperature_sweep(self, start_temp, stop_temp, temp_step, target_hum, soaking_time, n_stable_reads): + current_temp = start_temp + temperatures = [] + while current_temp < stop_temp: + temperatures.append(current_temp) + current_temp = round(current_temp + temp_step, 1) + temperatures.append(stop_temp) + + for temp in temperatures: + output_name = self.output_basename + '_'+str(temp)+'deg.csv' + self.perform_single_measurement(output_name, temp, target_hum, soaking_time, n_stable_reads) + + return temperatures + def perform_single_measurement(self, output, target_temp, target_hum, soaking_time, n_stable_reads): with open(output, mode='w', newline='') as csv_file: fieldnames = ['TIMESTAMP', 'TARGET_TEMPERATURE', 'READBACK_TEMPERATURE', 'TARGET_HUMIDITY', @@ -306,9 +320,9 @@ class Measurements: return (target_hum-self.max_delta_hum <= float(readback_hum)) and \ (float(readback_hum) <= target_hum+self.max_delta_hum) -def plot_output(output_basename, n_measurements, show_blocking_plot): +def plot_output(output_basename, measurements_appendices, show_blocking_plot): list_of_frames = [] - for m in range(n_measurements): + for m in measurements_appendices: measurement_name = output_basename+'_'+str(m) list_of_frames.append(pd.read_csv(measurement_name+'.csv')) @@ -317,7 +331,25 @@ def plot_output(output_basename, n_measurements, show_blocking_plot): plt.ioff() plot = MeasurementPlot.MeasurementPlot() plot.draw(combined_data_frame, output_basename + '_graph.pdf') - + +def run_temperature_sweep_from_file(temperature_sweep_file, meas): + with open(temperature_sweep_file) as file: + try: + line = file.readline().rstrip() + list_of_values = line.split() + start_temp = float(list_of_values[0]) + stop_temp = float(list_of_values[1]) + temperature_step = float(list_of_values[2]) + target_hum = float(list_of_values[3]) + soaking_time = int(list_of_values[4]) + n_stable_reads = int(list_of_values[5]) + + return meas.perform_temperature_sweep(start_temp, stop_temp, temperature_step, target_hum, soaking_time, + n_stable_reads) + + except KeyboardInterrupt: + pass + if __name__ == '__main__': parser = ArgumentParser() parser.add_argument("-c", "--chamber", @@ -327,8 +359,11 @@ if __name__ == '__main__': help="IP address of VNA", metavar="ADDR", required=True) parser.add_argument('-f', '--file', - help='File containing list of sweeps', - required=True) + help='File containing custom list of measurements', + default='') + parser.add_argument('-t', '--temperaturesweepfile', + help='File containing temperature sweep parameters', + default='') parser.add_argument('-o', '--output', help='Name of output file') parser.add_argument("-s", "--standby", @@ -343,6 +378,10 @@ if __name__ == '__main__': # help="don't print status messages to stdout") args = parser.parse_args() + if args.file == '' and args.temperaturesweepfile == '': + print('Argument error: Either \'file\' or \'temperaturesweepfile\' must be specified.') + sys.exit(-1) + if not args.output: output_basename = time.strftime("%Y_%m_%d-%H_%M_%S") + "_results" else: @@ -354,12 +393,19 @@ if __name__ == '__main__': with open('test_stand_parameter.json', 'r') as f: config_data = json.load(f) - mes = Measurements(args.chamber, args.vna, args.file, output_basename, args.standby, config_data) + mes = Measurements(args.chamber, args.vna, output_basename, args.standby, config_data) try: - - n_measurements = mes.perform_measurements() - plot_output(output_basename, n_measurements, args.plot) - + if args.file: + n_measurements = mes.perform_measurements(args.file) + plot_output(output_basename, range(n_measurements), args.plot) + if args.temperaturesweepfile: + temperatures = run_temperature_sweep_from_file(args.temperaturesweepfile, mes) + #run analysis here + temp_extensions = [] + for t in temperatures: + temp_extensions.append(str(t)+'deg') + plot_output(output_basename, temp_extensions, args.plot) + print(str(temp_extensions)) finally: mes.chamber.close()