MainCode/adalm1000_logger.py aktualisiert
Show an error message when disconnected
Automatically attempt to reconnect
Keep retrying until successful
Provide clear status updates throughout the process
This commit is contained in:
parent
6db656c71b
commit
1c928e22fc
@ -805,7 +805,17 @@ class BatteryTester:
|
|||||||
error_msg = str(error)
|
error_msg = str(error)
|
||||||
print(f"Device error: {error_msg}")
|
print(f"Device error: {error_msg}")
|
||||||
|
|
||||||
self.root.after_idle(lambda: self.status_light.itemconfig(self.status_indicator, fill='red'))
|
# Clean up session first
|
||||||
|
if hasattr(self, 'session'):
|
||||||
|
try:
|
||||||
|
if self.session_active:
|
||||||
|
self.session.end()
|
||||||
|
del self.session
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error cleaning up session: {e}")
|
||||||
|
|
||||||
|
# Update UI
|
||||||
|
self.status_light.itemconfig(self.status_indicator, fill='red')
|
||||||
self.connection_label.config(text="Disconnected")
|
self.connection_label.config(text="Disconnected")
|
||||||
self.status_var.set(f"Device error: {error_msg}")
|
self.status_var.set(f"Device error: {error_msg}")
|
||||||
|
|
||||||
@ -813,6 +823,7 @@ class BatteryTester:
|
|||||||
self.test_running = False
|
self.test_running = False
|
||||||
self.continuous_mode = False
|
self.continuous_mode = False
|
||||||
self.measuring = False
|
self.measuring = False
|
||||||
|
|
||||||
if hasattr(self, 'start_button'):
|
if hasattr(self, 'start_button'):
|
||||||
self.start_button.config(state=tk.DISABLED)
|
self.start_button.config(state=tk.DISABLED)
|
||||||
if hasattr(self, 'stop_button'):
|
if hasattr(self, 'stop_button'):
|
||||||
@ -829,7 +840,35 @@ class BatteryTester:
|
|||||||
self.ax2.set_xlim(0, 1)
|
self.ax2.set_xlim(0, 1)
|
||||||
self.canvas.draw()
|
self.canvas.draw()
|
||||||
|
|
||||||
# Clean up session
|
# Show error message and attempt reconnect automatically
|
||||||
|
if self.root.winfo_exists():
|
||||||
|
self.root.after(100, self.attempt_reconnect)
|
||||||
|
|
||||||
|
def attempt_reconnect(self):
|
||||||
|
"""Attempt to reconnect automatically"""
|
||||||
|
if not self.root.winfo_exists():
|
||||||
|
return
|
||||||
|
|
||||||
|
# Show error message first
|
||||||
|
messagebox.showerror(
|
||||||
|
"Device Connection Error",
|
||||||
|
"Could not connect to ADALM1000\n\n"
|
||||||
|
"1. Check USB cable connection\n"
|
||||||
|
"2. The device will attempt to reconnect automatically"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Then attempt reconnect after a short delay
|
||||||
|
self.root.after(1000, self.reconnect_device)
|
||||||
|
|
||||||
|
def reconnect_device(self):
|
||||||
|
"""Reconnect the device with proper cleanup"""
|
||||||
|
if not self.root.winfo_exists():
|
||||||
|
return
|
||||||
|
|
||||||
|
self.status_var.set("Attempting to reconnect...")
|
||||||
|
self.root.update()
|
||||||
|
|
||||||
|
# Clear any existing session
|
||||||
if hasattr(self, 'session'):
|
if hasattr(self, 'session'):
|
||||||
try:
|
try:
|
||||||
if self.session_active:
|
if self.session_active:
|
||||||
@ -838,24 +877,11 @@ class BatteryTester:
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if self.root.winfo_exists(): # Double-check before showing message
|
# Stop any running threads
|
||||||
try:
|
|
||||||
messagebox.showerror(
|
|
||||||
"Device Connection Error",
|
|
||||||
f"Could not connect to ADALM1000:\n\n{error_msg}\n\n"
|
|
||||||
"1. Check USB cable connection\n"
|
|
||||||
"2. Try the Reconnect button\n"
|
|
||||||
"3. Restart the application if problem persists"
|
|
||||||
)
|
|
||||||
except:
|
|
||||||
pass # Ignore errors if window is being destroyed
|
|
||||||
|
|
||||||
def reconnect_device(self):
|
|
||||||
"""Reconnect the device"""
|
|
||||||
self.status_var.set("Attempting to reconnect...")
|
|
||||||
self.test_running = False
|
self.test_running = False
|
||||||
self.continuous_mode = False
|
self.continuous_mode = False
|
||||||
self.measuring = False
|
self.measuring = False
|
||||||
|
|
||||||
if hasattr(self, 'measurement_event'):
|
if hasattr(self, 'measurement_event'):
|
||||||
self.measurement_event.clear()
|
self.measurement_event.clear()
|
||||||
|
|
||||||
@ -865,9 +891,21 @@ class BatteryTester:
|
|||||||
if hasattr(self, 'test_thread'):
|
if hasattr(self, 'test_thread'):
|
||||||
self.test_thread.join(timeout=1.0)
|
self.test_thread.join(timeout=1.0)
|
||||||
|
|
||||||
# Reset before reinitializing
|
# Add small delay to allow device to reset
|
||||||
self.handle_device_error("Reconnecting...")
|
time.sleep(1.5)
|
||||||
|
|
||||||
|
# Try to initialize device
|
||||||
|
try:
|
||||||
self.init_device()
|
self.init_device()
|
||||||
|
if self.session_active:
|
||||||
|
self.status_var.set("Reconnected successfully")
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Reconnect failed: {e}")
|
||||||
|
|
||||||
|
# If we get here, reconnection failed
|
||||||
|
self.status_var.set("Reconnect failed - will retry...")
|
||||||
|
self.root.after(2000, self.reconnect_device) # Retry after 2 seconds
|
||||||
|
|
||||||
def on_close(self):
|
def on_close(self):
|
||||||
"""Clean up on window close"""
|
"""Clean up on window close"""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user