MainCode/adalm1000_logger.py aktualisiert

Alles sollte funktionieren.
(D)
This commit is contained in:
Jan 2025-07-09 18:45:36 +02:00
parent d368cec550
commit 401f19d237

View File

@ -218,37 +218,44 @@ class TestSequenceWorker(QObject):
def run(self): def run(self):
"""Main test sequence loop""" """Main test sequence loop"""
try: try:
while self._running and (self.continuous_mode or self.parent.cycle_count == 0): first_cycle = True # Ensure at least one cycle runs
# Reset stop request at start of each cycle
# Modified while condition to also check parent's continuous_mode state
while (self._running and
(self.parent.continuous_mode_check.isChecked() or first_cycle)):
self.parent.request_stop = False self.parent.request_stop = False
self.parent.cycle_count += 1 self.parent.cycle_count += 1
first_cycle = False # Only True for the first cycle
# Existing test phases...
# 1. Charge phase (constant current) # 1. Charge phase (constant current)
self.charge_phase() self.charge_phase()
if not self._running or self.parent.request_stop: if not self._running or self.parent.request_stop:
break break
# 2. Rest period after charge # 2. Rest period after charge
self.rest_phase("Post-Charge") self.rest_phase("Post-Charge")
if not self._running or self.parent.request_stop: if not self._running or self.parent.request_stop:
break break
# 3. Discharge phase (capacity measurement) # 3. Discharge phase (capacity measurement)
self.discharge_phase() self.discharge_phase()
if not self._running or self.parent.request_stop: if not self._running or self.parent.request_stop:
break break
# 4. Rest period after discharge (only if not stopping) # 4. Rest period after discharge (only if not stopping)
if self._running and not self.parent.request_stop: if self._running and not self.parent.request_stop:
self.rest_phase("Post-Discharge") self.rest_phase("Post-Discharge")
# Calculate Coulomb efficiency if not stopping # Calculate Coulomb efficiency if not stopping
if not self.parent.request_stop and self.parent.charge_capacity > 0: if not self.parent.request_stop and self.parent.charge_capacity > 0:
self.parent.coulomb_efficiency = (self.parent.capacity_ah / self.parent.charge_capacity) * 100 self.parent.coulomb_efficiency = (
self.parent.capacity_ah / self.parent.charge_capacity
) * 100
# Test completed # Test completed
self.test_completed.emit() self.test_completed.emit()
except Exception as e: except Exception as e:
self.error_occurred.emit(f"Test sequence error: {str(e)}") self.error_occurred.emit(f"Test sequence error: {str(e)}")
finally: finally:
@ -275,7 +282,7 @@ class BatteryTester(QMainWindow):
self.interval = 0.1 self.interval = 0.1
self.log_dir = os.path.expanduser("~/adalm1000/logs") self.log_dir = os.path.expanduser("~/adalm1000/logs")
os.makedirs(self.log_dir, exist_ok=True) os.makedirs(self.log_dir, exist_ok=True)
# Data buffers # Data buffers
self.time_data = deque() self.time_data = deque()
self.voltage_data = deque() self.voltage_data = deque()
@ -513,6 +520,7 @@ class BatteryTester(QMainWindow):
self.continuous_mode_check.setChecked(True) self.continuous_mode_check.setChecked(True)
self.continuous_mode_check.setStyleSheet(f"color: {self.fg_color};") self.continuous_mode_check.setStyleSheet(f"color: {self.fg_color};")
button_layout.addWidget(self.continuous_mode_check) button_layout.addWidget(self.continuous_mode_check)
self.continuous_mode_check.stateChanged.connect(self.handle_continuous_mode_change)
controls_layout.addWidget(button_frame) controls_layout.addWidget(button_frame)
self.main_layout.addWidget(controls_frame) self.main_layout.addWidget(controls_frame)
@ -542,6 +550,14 @@ class BatteryTester(QMainWindow):
}} }}
""") """)
def handle_continuous_mode_change(self, state):
"""Handle changes to continuous mode checkbox during operation"""
if not state and self.test_running: # If unchecked during test
self.status_bar.showMessage("Continuous mode disabled - will complete current cycle")
# Optional visual feedback
self.continuous_mode_check.setStyleSheet(f"color: {self.warning_color};")
QTimer.singleShot(2000, lambda: self.continuous_mode_check.setStyleSheet(f"color: {self.fg_color};"))
def setup_plot(self): def setup_plot(self):
"""Configure the matplotlib plot""" """Configure the matplotlib plot"""
self.fig = Figure(figsize=(8, 5), dpi=100, facecolor=self.bg_color) self.fig = Figure(figsize=(8, 5), dpi=100, facecolor=self.bg_color)