forked from zietzm/Helmholtz_Test_Bench
Added compensate field checkbox, minor adaptation
This commit is contained in:
@@ -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
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user