This commit is contained in:
edo-neo 2025-08-21 10:31:27 +02:00
parent 20ca10ef15
commit 03db39bb41
2 changed files with 32 additions and 20 deletions

View File

@ -349,29 +349,22 @@ class HikrobotSmartCamera(Component):
except Exception as e:
self.log.warning(f"Could not update rotations: {e}")
# Use the switch_scheme method to change the camera scheme
if self.connected:
# Store the solution name for later use, but don't switch schemes yet
# The actual scheme switching will be handled by the Test_Vision component
# when it calls start() and checks if a scheme switch is needed
if not self.connected:
self.log.info("Camera not connected, will switch scheme after connection")
self.reconfigure() # This will connect and then switch scheme
else:
# Stop any ongoing operation
if self.current_operation:
self.log.warning(f"Stopping ongoing operation: {self.current_operation}")
self.progress_timer.stop()
self.current_operation = None
# Try to switch scheme
success = self.switch_scheme(recipe_name)
if not success:
self.log.error(f"Failed to switch scheme to {recipe_name}, trying to reconnect...")
# If switching failed, try to reconnect and then switch again
self.connected = False
self.config_changed() # This will reconnect
if self.connected:
self.log.info(f"Reconnected, trying to switch scheme again...")
self.switch_scheme(recipe_name)
else:
self.log.error("Failed to reconnect to camera")
else:
self.log.info("Camera not connected, will switch scheme after connection")
self.reconfigure() # This will connect and then switch scheme
# Start the scheme switching process (asynchronously)
# The Test_Vision component will wait for this to complete
self.switch_scheme(recipe_name)
def config_changed(self):
self.connected = False

View File

@ -5,7 +5,6 @@ from PyQt5.QtCore import pyqtSignal, QTimer
from PyQt5.QtGui import QColor, QImage, QPalette, QPixmap
from PyQt5.QtWidgets import QHeaderView, QProgressBar, QTableWidgetItem, QDialog, QVBoxLayout, QLabel, QProgressBar
# Import relative to the project structure
from src.lib.helpers.blocking_dialog import BlockingDialog
from src.ui.helpers import calc_foreground_color
from src.ui.test_test import Test_Test
@ -95,16 +94,34 @@ class Test_Vision(Test_Test):
dialog = BlockingDialog(self.ui,wait_time=wait_time, message=f"COLLEGARE CAVO ETHERNET E ATTENDERE {wait_time} SECONDI PER IL CORRETTO AVVIO DELLE TELECAMERE")
dialog.exec_()
# Wait for scheme switching to complete before proceeding
if self.components[cam_type].current_operation == "switch_scheme":
# Always check if we need to wait for scheme switching to complete
# This ensures we don't proceed until the camera is ready with the correct scheme
self.log.info("Checking if camera scheme needs to be switched...")
# Get the current scheme name from the camera
current_scheme = self.components[cam_type].get_current_scheme()
target_scheme = self.step.spec.get("recipe", "").replace(".ini", "")
self.log.info(f"Current camera scheme: {current_scheme}, Target scheme: {target_scheme}")
# If schemes don't match or a scheme switch is already in progress, wait for it
if current_scheme != target_scheme or self.components[cam_type].current_operation == "switch_scheme":
self.log.info(f"Waiting for camera to switch to scheme: {target_scheme}")
# Create and show the progress dialog
progress_dialog = SchemeProgressDialog(self)
progress_dialog.label.setText(f"Switching camera to scheme: {target_scheme}\nPlease wait...")
# Connect to the progress signal
progress_connection = self.components[cam_type].progress_signal.connect(
progress_dialog.update_progress
)
# If a scheme switch is not already in progress, start one
if self.components[cam_type].current_operation != "switch_scheme":
self.log.info(f"Initiating scheme switch to: {target_scheme}")
self.components[cam_type].switch_scheme(target_scheme)
# Show the dialog and wait for it to complete
result = progress_dialog.exec_()
@ -114,6 +131,8 @@ class Test_Vision(Test_Test):
if result == QDialog.Rejected:
# Scheme switching failed, but we'll continue anyway
self.log.warning("Scheme switching failed, continuing with cycle")
else:
self.log.info(f"Camera already using correct scheme: {current_scheme}")
self.components[cam_type].resume()
else: