Added compensate field checkbox, minor adaptation

This commit is contained in:
2023-02-23 15:17:20 +01:00
parent c8b3a5e0ba
commit d0649a1af5
2 changed files with 15 additions and 13 deletions
+6 -2
View File
@@ -71,6 +71,8 @@ class ExecCSVThread(Thread):
all_connected = (parent.xy_override.get() or g.CAGE_DEVICE.psu1 is not None) and\
(parent.z_override.get() or g.CAGE_DEVICE.psu2 is not None) and\
(parent.arduino_override.get() or g.CAGE_DEVICE.arduino is not None)
compensate_field = parent.compensated_field_var.get()
# True or False depending on devices status, checks for some devices may be overridden by user
if not all_connected:
ui_print("Required devices are not present, sequence aborted.")
@@ -96,8 +98,10 @@ class ExecCSVThread(Thread):
field_vec[1] * 1e6,
field_vec[2] * 1e6,
target_t))
self.cage_dev.set_field_compensated(field_vec) # send field vector to test bench
if compensate_field:
self.cage_dev.set_field_compensated(field_vec) # send field vector to test bench
else:
self.cage_dev.set_field_raw(field_vec) # send field vector to test bench
# log change to the log file if user has selected event logging in the Configure Logging window
logger = controller.pages[ui.ConfigureLogging] # get object of logging configurator
if logger.event_logging: # data should be logged when test bench is commanded
+9 -11
View File
@@ -410,6 +410,7 @@ class ExecuteCSVMode(Frame):
self.xy_override = BooleanVar(value=False) # True to disable connection check for XY PSU
self.z_override = BooleanVar(value=False) # True to disable connection check for Z PSU
self.arduino_override = BooleanVar(value=False) # True to disable connection check for arduino
self.compensated_field_var = BooleanVar(value=True)
# Generate CSV sequence variables
self.rot_vector_vars = [DoubleVar(value=1), DoubleVar(value=0), DoubleVar(value=0)]
@@ -484,6 +485,9 @@ class ExecuteCSVMode(Frame):
arduino_checkbox = Checkbutton(self.checkbox_frame, text="Arduino",
variable=self.arduino_override, onvalue=True, offvalue=False)
arduino_checkbox.grid(row=0, column=3, padx=3)
self.compensate_checkbox = Checkbutton(self.checkbox_frame, text="Compensate ambient field",
variable=self.compensated_field_var, onvalue=True, offvalue=False)
self.compensate_checkbox.grid(row=1, column=1, columnspan=3, pady=5, sticky="nw")
row_counter += 1
@@ -688,6 +692,7 @@ class ExecuteCSVMode(Frame):
self.plot_canvas = FigureCanvasTkAgg(figure, self.plot_frame) # create canvas to draw figure on
self.plot_canvas.draw() # equivalent to matplotlib.show()
self.plot_canvas.get_tk_widget().grid(row=0, column=0, sticky="nesw") # place canvas in the UI
def export_csv_sequence(self): # Generate and export csv sequence
# Generate rotation data
@@ -723,13 +728,13 @@ class ExecuteCSVMode(Frame):
def generate_csv_sequence(self):
ui_print("Generate CSV File: started generating csv file from user inputs.")
# Iteration limit for while loop trying to find rotation solution
interation_limit = 100
# Some fixed values
rot_center_geom_mean_max = 100 # [µT] Maximum geometric mean
rot_center_default = [0, 0, 0] # [µT]
rot_mag_default = 100 # [µT]
rot_mag_max = 180 # [µT]
rot_rate_default = 1 # [deg/s]
rot_rate_max = 360 # [deg/s]
rot_time_step_default = 1 # [s]
rot_time_step_min = 0.2 # [s]
# Initialize and get vectors
@@ -778,7 +783,7 @@ class ExecuteCSVMode(Frame):
ui_print("Warning: Time step cannot be zero. Setting default automatically.")
rot_time_step = rot_time_step_default
elif rot_time_step < rot_time_step_min:
ui_print("Warning: Time step too small. Setting default automatically.")
ui_print("Warning: Time step too small (<{:.3f}). Setting default automatically.".format(rot_time_step_min))
rot_time_step = rot_time_step_default
self.rot_time_step_vars.set("{:.3f}".format(rot_time_step))
# Check cycle number
@@ -807,7 +812,7 @@ class ExecuteCSVMode(Frame):
except RuntimeWarning as w:
ui_print("Calculating the cycle time yielded: ", w)
i = i + 1
if i == 1000:
if i == interation_limit:
ui_print(
"Warning: the user inputs for a rotation rate yield no solution. Rate reset to last working input.")
# Resetting to last working condition
@@ -815,13 +820,6 @@ class ExecuteCSVMode(Frame):
r[i] = float(self.rot_rate_last_vars[i].get()) # [deg/s, deg/s^2, deg/s^3, deg/s, 1/s, -]
self.rot_rate_vars[i].set(self.rot_rate_last_vars[i].get())
if tau_solution >= 0 or abs(func_integral(tau_solution)) <= 0.5:
tmp = r
for i in range(len(r)):
tmp[i] = float(self.rot_rate_vars[i].get()) # [deg/s, deg/s^2, deg/s^3, deg/s, 1/s, -]
print(tmp)
for i in range(len(r)):
tmp[i] = float(self.rot_rate_last_vars[i].get()) # [deg/s, deg/s^2, deg/s^3, deg/s, 1/s, -]
print(tmp)
# Storing last working inputs
for i in range(len(r)):
self.rot_rate_last_vars[i].set(self.rot_rate_vars[i].get())