dev error handler

This commit is contained in:
edo-neo 2025-02-06 16:17:45 +01:00
parent 055a0f5e4e
commit 5da86121de
3 changed files with 33 additions and 16 deletions

View File

@ -69,11 +69,11 @@ class ModbusComponent(Component):
self.lock.unlock() self.lock.unlock()
except FileNotFoundError as e: except FileNotFoundError as e:
error_message = f"Serial port error: {self.port} not found. Check your configuration." error_message = f"Serial port error: {self.port} not found. Check your configuration."
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
except Exception as e: except Exception as e:
error_message = f"Configuration error: {str(e)}" error_message = f"Configuration error: {str(e)}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
def _read(self, register, count=1, **kwargs): def _read(self, register, count=1, **kwargs):
@ -82,16 +82,18 @@ class ModbusComponent(Component):
try: try:
read = self.client.read_holding_registers(register, count=count, **kwargs) read = self.client.read_holding_registers(register, count=count, **kwargs)
if read.isError(): if read.isError():
error_message = f"Modbus read failed: Could not read Modbus register {register}"
self.modbus_error_signal.emit(error_message)
raise ValueError(f"Modbus read error at register {register}") raise ValueError(f"Modbus read error at register {register}")
return read return read
except pymodbus.exceptions.ConnectionException: except pymodbus.exceptions.ConnectionException:
error_message = f"Modbus read failed: Connection error at port {self.port}" error_message = f"Modbus read failed: Connection error at port {self.port}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
return None # Return None to signal failure return None # Return None to signal failure
except Exception as e: except Exception as e:
error_message = f"Error reading Modbus register {register}: {str(e)}" error_message = f"Error reading Modbus register {register}: {str(e)}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
return None return None
finally: finally:
@ -109,11 +111,11 @@ class ModbusComponent(Component):
return wrote return wrote
except pymodbus.exceptions.ConnectionException as ce: except pymodbus.exceptions.ConnectionException as ce:
error_message = f"Modbus write failed: Connection error at port {self.port}" error_message = f"Modbus write failed: Connection error at port {self.port}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
except Exception as e: except Exception as e:
error_message = f"Error writing Modbus register {register} with value {value}: {str(e)}" error_message = f"Error writing Modbus register {register} with value {value}: {str(e)}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
finally: finally:
self.lock.unlock() self.lock.unlock()
@ -122,7 +124,7 @@ class ModbusComponent(Component):
"""Decode data safely.""" """Decode data safely."""
if read is None: if read is None:
error_message = "Error decoding Modbus data: No data to decode (read returned None)" error_message = "Error decoding Modbus data: No data to decode (read returned None)"
self.log.error(error_message) #self.log.error(error_message)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
return None return None
try: try:
@ -134,11 +136,11 @@ class ModbusComponent(Component):
return int(abs(data)) if "uint" in data_type else int(data) return int(abs(data)) if "uint" in data_type else int(data)
except AttributeError: except AttributeError:
error_message = "Modbus read returned invalid data (NoneType encountered)" error_message = "Modbus read returned invalid data (NoneType encountered)"
self.log.error(error_message) #self.log.error(error_message)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
except Exception as e: except Exception as e:
error_message = f"Error decoding Modbus data: {str(e)}" error_message = f"Error decoding Modbus data: {str(e)}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
return None return None
@ -157,7 +159,7 @@ class ModbusComponent(Component):
return builder.build() return builder.build()
except Exception as e: except Exception as e:
error_message = f"Error encoding Modbus data: {str(e)}" error_message = f"Error encoding Modbus data: {str(e)}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
return None return None
@ -179,7 +181,7 @@ class ModbusComponent(Component):
) )
except Exception as e: except Exception as e:
error_message = f"Error inside Modbus read: {str(e)}" error_message = f"Error inside Modbus read: {str(e)}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
return None return None
@ -191,7 +193,7 @@ class ModbusComponent(Component):
self._write(register, encoded_data, **kwargs) self._write(register, encoded_data, **kwargs)
except Exception as e: except Exception as e:
error_message = f"Error inside Modbus write: {str(e)}" error_message = f"Error inside Modbus write: {str(e)}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
self.modbus_error_signal.emit(error_message) self.modbus_error_signal.emit(error_message)
def __del__(self, event=None): def __del__(self, event=None):
@ -201,6 +203,6 @@ class ModbusComponent(Component):
self.client.close() self.client.close()
except Exception as e: except Exception as e:
error_message = f"Error during Modbus cleanup: {str(e)}" error_message = f"Error during Modbus cleanup: {str(e)}"
self.log.error(error_message, exc_info=True) #self.log.error(error_message, exc_info=True)
finally: finally:
self.lock.unlock() self.lock.unlock()

View File

@ -478,9 +478,9 @@ class TecnaMarpossProvasetT3(ModbusComponent):
appropriate error signals for Tecna Marposs. appropriate error signals for Tecna Marposs.
""" """
if error_message: if error_message:
# Emit the Tecna-specific error signal with True and traceback # Emit the Tecna-specific error signal with True and the error message
self.tecna_error_signal.emit(True, error_message) self.tecna_error_signal.emit(True, error_message)
#print(f"{error_message}-Tecna Marposs") self.log.error(f"Modbus error encountered: {error_message}")
return True, error_message return True, error_message
else: else:
# Emit no error (False) # Emit no error (False)

View File

@ -4,7 +4,7 @@ import weakref
from PyQt5.QtGui import QPixmap from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QMessageBox, QDialog, QApplication from PyQt5.QtWidgets import QMessageBox, QDialog, QApplication
from PyQt5.QtCore import Qt from PyQt5.QtCore import Qt, pyqtSlot
from ui import Dialog from ui import Dialog
from ui.test_instructions_reminder import Test_Instructions_Reminder from ui.test_instructions_reminder import Test_Instructions_Reminder
from ui.test_test import Test_Test from ui.test_test import Test_Test
@ -26,6 +26,8 @@ class Test_Leak(Test_Test):
self.show_instruction_b.setVisible("show_instructions" in self.parent.config["hardware_config"].keys()) self.show_instruction_b.setVisible("show_instructions" in self.parent.config["hardware_config"].keys())
self.show_instruction_b.clicked.connect(self.show_instruction) self.show_instruction_b.clicked.connect(self.show_instruction)
self.components[self.tester_component].tecna_error_signal.connect(self.handle_modbus_error)
def show_instruction(self): def show_instruction(self):
dialog=Dialog() dialog=Dialog()
dialog.setCentralWidget(Test_Instructions_Reminder(recipe=self.parent.recipe,bench_name=self.parent.config.machine_id)) dialog.setCentralWidget(Test_Instructions_Reminder(recipe=self.parent.recipe,bench_name=self.parent.config.machine_id))
@ -312,3 +314,16 @@ class Test_Leak(Test_Test):
def save_last(self): def save_last(self):
if self.last is None: if self.last is None:
return return
@pyqtSlot(bool, str)
def handle_modbus_error(self, error, error_message):
"""
Handle errors received from the Modbus component and stop the test gracefully.
"""
if error:
self.display_text(
text=f"ERRORE TECNA TEST INTERROTTO.",
bg_color="red", text_color="white"
)
self.parent.fail_cycle()
self.stop_test()