MainCode/adalm1000_logger.py aktualisiert

 User unchecks Continuous Mode during discharge:

    Status updates immediately: "Continuous Mode disabled..."

    Discharge continues until cutoff voltage.

    Test stops after discharge (no rest phase or new cycle).

 User leaves Continuous Mode enabled:

    Test continues looping indefinitely (original behavior).
(D)
This commit is contained in:
Jan 2025-05-27 22:09:52 +02:00
parent 34be33434f
commit c697388157

View File

@ -47,9 +47,9 @@ class BatteryTester:
# Battery test parameters
self.capacity = tk.DoubleVar(value=0.2) # Battery capacity in Ah
self.charge_cutoff = tk.DoubleVar(value=1.45) # Charge cutoff voltage
self.charge_cutoff = tk.DoubleVar(value=1.43) # Charge cutoff voltage
self.discharge_cutoff = tk.DoubleVar(value=0.9) # Discharge cutoff voltage
self.rest_time = tk.DoubleVar(value=0.1) # Rest time in hours
self.rest_time = tk.DoubleVar(value=0.25) # Rest time in hours
self.c_rate = tk.DoubleVar(value=0.1) # C-rate for test (default C/5 = 0.2)
# Test progress tracking
@ -642,17 +642,32 @@ class BatteryTester:
self.last_update_time = now
self.capacity_ah.set(self.capacity_ah.get() + current_current * delta_t / 3600)
self.status_var.set(
f"Discharging: {current_voltage:.3f}V / {self.discharge_cutoff.get()}V | "
f"Current: {current_current:.3f}A | "
f"Capacity: {self.capacity_ah.get():.4f}Ah"
)
if not self.continuous_var.get() and self.continuous_mode: # Only update if it was previously enabled
self.continuous_mode = False # Ensure we don't start a new cycle
self.status_var.set(
f"Continuous Mode disabled | "
f"Discharging to {self.discharge_cutoff.get()}V (will stop after this cycle) | "
f"Current: {current_current:.3f}A | "
f"Capacity: {self.capacity_ah.get():.4f}Ah"
)
self.root.update() # Force UI update
else:
# Default status message
self.status_var.set(
f"Discharging: {current_voltage:.3f}V / {self.discharge_cutoff.get()}V | "
f"Current: {current_current:.3f}A | "
f"Capacity: {self.capacity_ah.get():.4f}Ah"
)
self.root.update()
if current_voltage <= self.discharge_cutoff.get() or self.request_stop:
break
time.sleep(0.1) # More frequent checks
if not self.continuous_var.get():
self.test_running = False
break # Exit the main test loop
# 4. Rest period after discharge (only if not stopping)
if self.test_running and not self.request_stop:
@ -688,19 +703,6 @@ class BatteryTester:
# Write cycle summary to log file
self.write_cycle_summary()
# Short rest between cycles (only in continuous mode)
if self.continuous_mode and self.test_running and not self.request_stop:
rest_end_time = time.time() + (self.rest_time.get() * 3600)
while time.time() < rest_end_time and self.test_running and not self.request_stop:
time_left = max(0, rest_end_time - time.time())
self.test_phase.set("Resting Between Cycles")
self.status_var.set(
f"Resting between cycles | "
f"Time left: {time_left/60:.1f} min"
)
self.root.update()
time.sleep(1)
# Finalize test if stopped or completed
self.safe_after(0, self.finalize_test)