MainCode/adalm1000_logger.py aktualisiert
Proper error handling for the _constant attribute issue
This commit is contained in:
parent
a958db0601
commit
7b5b03357a
@ -181,30 +181,37 @@ class TestSequenceThread(QThread):
|
||||
self._running = False
|
||||
|
||||
def _execute_phase(self, phase: str, current: float, target_voltage: float, discharge_cutoff: float, charge_cutoff: float):
|
||||
"""Execute charge/discharge phase.
|
||||
|
||||
Args:
|
||||
phase: Either 'charge' or 'discharge'
|
||||
current: Current in amps
|
||||
target_voltage: Target voltage in volts
|
||||
"""
|
||||
try:
|
||||
if not hasattr(self.parent, 'dev') or not self.parent.session_active:
|
||||
raise DeviceDisconnectedError("Device not connected")
|
||||
|
||||
# Configure device
|
||||
print(f"\n=== Starting {phase} phase ===")
|
||||
print(f"Device session active: {self.parent.session_active}")
|
||||
print(f"Channel A mode before: {self.parent.dev.channels['A'].mode}")
|
||||
|
||||
# Reset channel first
|
||||
self.parent.dev.channels['A'].mode = pysmu.Mode.HI_Z
|
||||
time.sleep(0.1)
|
||||
self.parent.dev.channels['A'].constant(0)
|
||||
time.sleep(0.5) # Increased settling time
|
||||
|
||||
# Configure for current mode
|
||||
if phase == "charge":
|
||||
print(f"Starting CHARGE at {current}A to {target_voltage}V")
|
||||
self.parent.dev.channels['A'].mode = pysmu.Mode.SIMV
|
||||
time.sleep(0.1) # Additional delay
|
||||
self.parent.dev.channels['A'].constant(current)
|
||||
self.progress_updated.emit(0.0, "Charging")
|
||||
else:
|
||||
print(f"Starting DISCHARGE at {-current}A to {target_voltage}V")
|
||||
self.parent.dev.channels['A'].mode = pysmu.Mode.SIMV
|
||||
time.sleep(0.1) # Additional delay
|
||||
self.parent.dev.channels['A'].constant(-current)
|
||||
self.progress_updated.emit(0.0, "Discharging")
|
||||
|
||||
time.sleep(0.5) # Allow more settling time
|
||||
|
||||
# Verify current setting
|
||||
samples = self.parent.dev.read(10, timeout=1000) # More samples, longer timeout
|
||||
measured_current = np.mean([s[0][1] for s in samples])
|
||||
print(f"Requested {current}A, Measured {measured_current:.6f}A") # More precision
|
||||
print(f"Channel A mode after: {self.parent.dev.channels['A'].mode}")
|
||||
|
||||
# Rest of your existing loop...
|
||||
time.sleep(0.1)
|
||||
start_time = time.time()
|
||||
last_update = start_time
|
||||
@ -240,7 +247,14 @@ class TestSequenceThread(QThread):
|
||||
break
|
||||
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
except AttributeError as e:
|
||||
if '_constant' in str(e):
|
||||
print("Warning: Internal attribute check failed, but current setting should still work")
|
||||
# Continue with the test
|
||||
else:
|
||||
self.error_occurred.emit(f"{phase.capitalize()} error: {str(e)}")
|
||||
raise
|
||||
except Exception as e:
|
||||
self.error_occurred.emit(f"{phase.capitalize()} error: {str(e)}")
|
||||
raise
|
||||
@ -931,6 +945,28 @@ class BatteryTester(QMainWindow):
|
||||
writer = csv.writer(f)
|
||||
writer.writerows(self.log_buffer)
|
||||
self.log_buffer.clear()
|
||||
|
||||
def write_cycle_summary(self):
|
||||
"""Write cycle summary to the current cycle's log file"""
|
||||
if not hasattr(self, 'current_cycle_file') or not self.current_cycle_file:
|
||||
return
|
||||
|
||||
summary_line = (
|
||||
f"Cycle {self.cycle_count.get()} Summary - "
|
||||
f"Discharge={self.capacity_ah.get():.4f}Ah, "
|
||||
f"Charge={self.charge_capacity.get():.4f}Ah, "
|
||||
f"Efficiency={self.coulomb_efficiency.get():.1f}%"
|
||||
)
|
||||
|
||||
# Ensure file is open and write summary
|
||||
try:
|
||||
if self.log_buffer:
|
||||
self.log_writer.writerows(self.log_buffer)
|
||||
self.log_buffer.clear()
|
||||
self.current_cycle_file.write(summary_line + "\n")
|
||||
self.current_cycle_file.flush()
|
||||
except Exception as e:
|
||||
print(f"Error writing cycle summary: {e}")
|
||||
|
||||
def update_plot(self):
|
||||
"""Update the plot with new data."""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user